[SCM] Packaging for getfem++ branch, master, updated. debian/4.2+dfsg1-1-3-gd8f89e4

Anton Gladky gladky.anton at gmail.com
Sun Jun 30 15:32:23 UTC 2013


The following commit has been merged in the master branch:
commit 0522ea29e405694a3705041c74bd0d4988e1b1b6
Author: Anton Gladky <gladky.anton at gmail.com>
Date:   Sun Jun 30 17:27:58 2013 +0200

    Recover corrupted sources in master branch.

diff --git a/COPYING b/COPYING
old mode 100755
new mode 100644
index f3f1b3b..867d831
--- a/COPYING
+++ b/COPYING
@@ -1,504 +1,12 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library 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
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
+Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+under  the  terms  of the  GNU  Lesser General Public License as published
+by  the  Free Software Foundation;  either version 2.1 of the License,  or
+(at your option) any later version along with the GCC Runtime Library
+Exception either version 3.1 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 Lesser General Public
+License and the GCC Runtime Library Exception for more details.
+You  should  have received a copy of the GNU Lesser General Public License
+along  with  this program;  if not, write to the Free Software Foundation,
+Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
\ No newline at end of file
diff --git a/ChangeLog b/ChangeLog
index b281e16..e28f677 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -42,7 +42,7 @@
 	
 2008-09-26 Yves Renard  <Yves.Renard at insa-lyon.fr>
 	* src/getfem/getfem_nonlinear_elasticity.h
-	Adding the the contribution of Jean-Yves Heddebaut <jyhed at alpino.be>
+	Adding the contribution of Jean-Yves Heddebaut <jyhed at alpino.be>
 	concerning the deformation of a nonlinear membrane.
 
 2008-08-11 Yves Renard  <Yves.Renard at insa-lyon.fr>
diff --git a/Makefile.in b/Makefile.in
index 5141694..7fcb5b1 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -82,6 +82,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(bindir)"
 SCRIPTS = $(bin_SCRIPTS)
 SOURCES =
@@ -105,9 +111,11 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
 am__remove_distdir = \
-  { test ! -d "$(distdir)" \
-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr "$(distdir)"; }; }
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
 am__relativize = \
   dir0=`pwd`; \
   sed_first='s,^\([^/]*\)/.*$$,\1,'; \
@@ -136,6 +144,8 @@ am__relativize = \
 DIST_ARCHIVES = $(distdir).tar.gz
 GZIP_ENV = --best
 distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
 distcleancheck_listfiles = find . -type f -print
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -161,6 +171,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -179,6 +190,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -195,6 +207,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -259,6 +272,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -294,7 +308,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -325,7 +338,7 @@ all: config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
-am--refresh:
+am--refresh: Makefile
 	@:
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
@@ -361,10 +374,8 @@ $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 
 config.h: stamp-h1
-	@if test ! -f $@; then \
-	  rm -f stamp-h1; \
-	  $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
-	else :; fi
+	@if test ! -f $@; then rm -f stamp-h1; else :; fi
+	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
 
 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
 	@rm -f stamp-h1
@@ -415,9 +426,7 @@ uninstall-binSCRIPTS:
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
 	files=`for p in $$list; do echo "$$p"; done | \
 	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -635,7 +644,11 @@ dist-gzip: distdir
 	$(am__remove_distdir)
 
 dist-bzip2: distdir
-	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-lzip: distdir
+	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
 	$(am__remove_distdir)
 
 dist-lzma: distdir
@@ -643,7 +656,7 @@ dist-lzma: distdir
 	$(am__remove_distdir)
 
 dist-xz: distdir
-	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
 	$(am__remove_distdir)
 
 dist-tarZ: distdir
@@ -674,6 +687,8 @@ distcheck: dist
 	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
 	*.tar.lzma*) \
 	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.lz*) \
+	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
 	*.tar.xz*) \
 	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
 	*.tar.Z*) \
@@ -693,6 +708,7 @@ distcheck: dist
 	  && am__cwd=`pwd` \
 	  && $(am__cd) $(distdir)/_build \
 	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
 	    $(DISTCHECK_CONFIGURE_FLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
@@ -721,8 +737,16 @@ distcheck: dist
 	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
 	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
 distuninstallcheck:
-	@$(am__cd) '$(distuninstallcheck_dir)' \
-	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	@test -n '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: trying to run $@ with an empty' \
+	       '$$(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	$(am__cd) '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
 	   || { echo "ERROR: files left after uninstall:" ; \
 	        if test -n "$(DESTDIR)"; then \
 	          echo "  (check DESTDIR support)"; \
@@ -756,10 +780,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -848,8 +877,8 @@ uninstall-am: uninstall-binSCRIPTS
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
 	all all-am am--refresh check check-am clean clean-generic \
 	clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
-	dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
-	distcheck distclean distclean-generic distclean-hdr \
+	dist-gzip dist-lzip dist-lzma 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-binSCRIPTS install-data \
diff --git a/aclocal.m4 b/aclocal.m4
index 33391ee..cc2f4a6 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 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.
@@ -13,18 +14,21 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
-[m4_warning([this file was generated for autoconf 2.65.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
 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, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 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 1
+
 # AM_AUTOMAKE_VERSION(VERSION)
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
@@ -34,7 +38,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
 [am__api_version='1.11'
 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.11.1], [],
+m4_if([$1], [1.11.3], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -50,19 +54,21 @@ 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.11.1])dnl
+[AM_AUTOMAKE_VERSION([1.11.3])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, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2011 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 1
+
 # 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/../..'.
@@ -144,14 +150,14 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
+# 2010, 2011 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
+# serial 12
 
 # 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,
@@ -191,6 +197,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
   # instance it was reported that on HP-UX the gcc test will end up
   # making a dummy file named `D' -- because `-MD' means `put the output
   # in D'.
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -255,7 +262,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       # This compiler won't grok `-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
@@ -320,10 +327,13 @@ AC_DEFUN([AM_DEP_TRACK],
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
 AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
 AC_SUBST([AMDEPBACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
 ])
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
@@ -545,12 +555,15 @@ 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, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2008, 2011 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 1
+
 # AM_PROG_INSTALL_SH
 # ------------------
 # Define $install_sh.
@@ -682,12 +695,15 @@ else
 fi
 ])
 
-# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# Copyright (C) 2003, 2004, 2005, 2006, 2011 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 1
+
 # AM_PROG_MKDIR_P
 # ---------------
 # Check for `mkdir -p'.
@@ -710,13 +726,14 @@ esac
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 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 4
+# serial 5
 
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
@@ -724,13 +741,13 @@ AC_DEFUN([_AM_MANGLE_OPTION],
 [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
 
 # _AM_SET_OPTION(NAME)
-# ------------------------------
+# --------------------
 # Set option NAME.  Presently that only means defining a flag for this option.
 AC_DEFUN([_AM_SET_OPTION],
 [m4_define(_AM_MANGLE_OPTION([$1]), 1)])
 
 # _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
+# ------------------------
 # OPTIONS is a space-separated list of Automake options.
 AC_DEFUN([_AM_SET_OPTIONS],
 [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
@@ -741,13 +758,15 @@ AC_DEFUN([_AM_SET_OPTIONS],
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009
-# Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009,
+# 2011 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_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
 # ---------------------------------------------------------------------------
 # Adds support for distributing Python modules and packages.  To
@@ -775,8 +794,10 @@ AC_DEFUN([AM_PATH_PYTHON],
   dnl Find a Python interpreter.  Python versions prior to 2.0 are not
   dnl supported. (2.0 was released on October 16, 2000).
   m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
-                    [python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 dnl
-python2.1 python2.0])
+[python python2 python3 python3.2 python3.1 python3.0 python2.7 dnl
+ python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0])
+
+  AC_ARG_VAR([PYTHON], [the Python interpreter])
 
   m4_if([$1],[],[
     dnl No version check is needed.
@@ -848,9 +869,7 @@ python2.1 python2.0])
   dnl   site-packages directory, not the python standard library
   dnl   directory like in previous automake betas.  This behavior
   dnl   is more consistent with lispdir.m4 for example.
-  dnl Query distutils for this directory.  distutils does not exist in
-  dnl Python 1.5, so we fall back to the hardcoded directory if it
-  dnl doesn't work.
+  dnl Query distutils for this directory.
   AC_CACHE_CHECK([for $am_display_PYTHON script directory],
     [am_cv_python_pythondir],
     [if test "x$prefix" = xNONE
@@ -859,8 +878,7 @@ python2.1 python2.0])
      else
        am_py_prefix=$prefix
      fi
-     am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null ||
-     echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+     am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null`
      case $am_cv_python_pythondir in
      $am_py_prefix*)
        am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
@@ -886,9 +904,7 @@ python2.1 python2.0])
 
   dnl pyexecdir -- directory for installing python extension modules
   dnl   (shared libraries)
-  dnl Query distutils for this directory.  distutils does not exist in
-  dnl Python 1.5, so we fall back to the hardcoded directory if it
-  dnl doesn't work.
+  dnl Query distutils for this directory.
   AC_CACHE_CHECK([for $am_display_PYTHON extension module directory],
     [am_cv_python_pyexecdir],
     [if test "x$exec_prefix" = xNONE
@@ -897,8 +913,7 @@ python2.1 python2.0])
      else
        am_py_exec_prefix=$exec_prefix
      fi
-     am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null ||
-     echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+     am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null`
      case $am_cv_python_pyexecdir in
      $am_py_exec_prefix*)
        am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
@@ -946,12 +961,14 @@ for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
 sys.exit(sys.hexversion < minverhex)"
   AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2011 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 1
+
 # AM_RUN_LOG(COMMAND)
 # -------------------
 # Run COMMAND, save the exit status in ac_status, and log it.
@@ -1028,12 +1045,14 @@ Check your system clock])
 fi
 AC_MSG_RESULT(yes)])
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2011 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 1
+
 # AM_PROG_INSTALL_STRIP
 # ---------------------
 # One issue with vendor `install' (even GNU) is that you can't
@@ -1056,13 +1075,13 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 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
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -1071,13 +1090,13 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1099,10 +1118,11 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
 AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [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='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [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])
diff --git a/bin/Makefile.in b/bin/Makefile.in
index fce70be..7c77d39 100644
--- a/bin/Makefile.in
+++ b/bin/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -71,6 +71,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(bindir)"
 SCRIPTS = $(bin_SCRIPTS)
 SOURCES =
@@ -100,6 +106,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -118,6 +125,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -134,6 +142,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -198,6 +207,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -233,7 +243,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -319,9 +328,7 @@ uninstall-binSCRIPTS:
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
 	files=`for p in $$list; do echo "$$p"; done | \
 	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -382,10 +389,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/bin/extract_doc b/bin/extract_doc
index e4ea053..c8b03d6 100755
--- a/bin/extract_doc
+++ b/bin/extract_doc
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- python -*-
 #
-# Copyright (C) 2004-2010 Yves Renard, Julien Pommier.
+# Copyright (C) 2004-2012 Yves Renard, Julien Pommier.
 #                                                       
 # This file is a part of GETFEM++                                         
 #                                                                         
@@ -252,6 +252,21 @@ def FilterDoc(d, langage, objects, commands, set_replace = set()):
       d += r[(j+1):]
       i = d.find(m)
 
+  if (langage == 'scilab'):
+    # Replace the :math:` ... ` by scilab latex xml tag
+    i = d.find(':math:`')
+    while (i != -1):
+      d = d[:i] + d[i:].replace(':math:`','<latex style="text"><![CDATA[',1)
+      d = d[:i] + d[i:].replace('`',']]></latex>',1)
+      i = d.find(':math:`')
+          
+    # Replace the ` ... ` by scilab literal xml tag
+    i = d.find('`')
+    while (i != -1):
+      d = d[:i] + d[i:].replace('`','<literal>',1)
+      d = d[:i] + d[i:].replace('`','</literal>',1)
+      i = d.find('`')
+          
   if (langage == 'matlab' or langage == 'scilab'):
     for o in objects:
       [r, I] = StandardObjectName(o)
@@ -285,11 +300,13 @@ def FilterDoc(d, langage, objects, commands, set_replace = set()):
     d = string.replace(d, '@tpoly',  'poly')
 
     # Authorized abbreviations
+    d = string.replace(d, '@tcs',    'cont_struct')
     d = string.replace(d, '@tmf',    'mesh_fem')
     d = string.replace(d, '@tbrick', 'mdbrick')
     d = string.replace(d, '@tstate', 'mdstate')
     d = string.replace(d, '@tgt',    'geotrans')
     d = string.replace(d, '@tgf',    'global_function')
+    d = string.replace(d, '@tmo',    'mesher_object')
     d = string.replace(d, '@tmls',   'mesh_levelset')
     d = string.replace(d, '@tmim',   'mesh_im')
     d = string.replace(d, '@tls',    'levelset')
@@ -366,11 +383,13 @@ def FilterDoc(d, langage, objects, commands, set_replace = set()):
     d = string.replace(d, '@tpoly',  'poly')
 
     # Authorized abbreviations
+    d = string.replace(d, '@tcs',    'ContStruct')
     d = string.replace(d, '@tmf',    'MeshFem')
     d = string.replace(d, '@tbrick', 'MdBrick')
     d = string.replace(d, '@tstate', 'MdState')
     d = string.replace(d, '@tgt',    'GeoTrans')
     d = string.replace(d, '@tgf',    'GlobalFunction')
+    d = string.replace(d, '@tmo',    'MesherObject')
     d = string.replace(d, '@tmls',   'MeshLevelSet')
     d = string.replace(d, '@tmim',   'MeshIm')
     d = string.replace(d, '@tls',    'LevelSet')
@@ -877,6 +896,8 @@ elif (option == 'matlab-doc'):
   print '`integ`            integration method descriptor (or gfInteg object)'
   print '`model`            model descriptor (or gfModel object)'
   print '`global_function`  global function descriptor'
+  print '`mesher_object`    mesher object descriptor'
+  print '`cont_struct`      continuation-structure descriptor'
   print '=================  =================================================='
   print ''  
   print 'Arguments listed between square brackets are optional. Lists between braces indicate that the argument must match one of the elements of the list. For example::'
@@ -975,7 +996,7 @@ elif (option == 'matlab-doc'):
 #
 #
 # Option scilab-com
-#      Extract the scilab documentation for each command in rst format
+#      Extract the scilab documentation for each command in xml format
 #
 #
 #
@@ -984,6 +1005,209 @@ elif (option == 'matlab-doc'):
 elif (option == 'scilab-com'):
 
   langage = 'scilab'
+
+  # Write XML page related to types
+  
+  mfile = open('getfem_types.xml', 'w')
+  
+  mfile.write('<?xml version="1.0" encoding="UTF-8"?>\n')
+  mfile.write('<refentry version="5.0-subset Scilab" xml:id="getfem_types" xml:lang="en"\n')
+  mfile.write('          xmlns="http://docbook.org/ns/docbook"\n')
+  mfile.write('          xmlns:xlink="http://www.w3.org/1999/xlink"\n')
+  mfile.write('          xmlns:xi="http://www.w3.org/2001/XInclude"\n')
+  mfile.write('          xmlns:svg="http://www.w3.org/2000/svg"\n')
+  mfile.write('          xmlns:mml="http://www.w3.org/1998/Math/MathML"\n')
+  mfile.write('          xmlns:html="http://www.w3.org/1999/xhtml"\n')
+  mfile.write('          xmlns:db="http://docbook.org/ns/docbook">\n')
+
+  mfile.write('  <refnamediv>\n')
+  mfile.write('    <refname>getfem types</refname>\n')
+  mfile.write('    <refpurpose>Types reference</refpurpose>\n')
+  mfile.write('  </refnamediv>\n\n')
+
+  mfile.write('')
+
+  mfile.write('  <refsection>\n')
+  mfile.write('    <title>Description</title>\n')
+  mfile.write('    <para>The expected type of each function argument is indicated in this reference. Here is a list of these types:</para>\n\n')
+  mfile.write('    <variablelist>\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>int</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>integer value</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>hobj</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>a handle for any getfem++ object</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>scalar</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>scalar value</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>string</term>\n');
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>string</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>ivec</term>')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>vector of integer values</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>vec</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>vector</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>imat</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>matrix of integer values</para>')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>mat</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>matrix</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>spmat</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>sparse matrix (both matlab native sparse matrices, and getfem sparse matrices)</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>precond</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>getfem preconditioner object</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>mesh mesh</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>object descriptor (or gfMesh object)</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>mesh_fem</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>mesh fem object descriptor (or gfMeshFem object)</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>mesh_im</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>mesh im object descriptor( or gfMeshIm object)</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+  
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>mesh_slice</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>mesh slice object descriptor (or gfSlice object)</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>cvstruct</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>convex structure descriptor (or gfCvStruct object)</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>geotrans</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>geometric transformation descriptor (or gfGeoTrans object)</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>fem</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>fem descriptor (or gfFem object)</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>eltm</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>elementary matrix descriptor (or gfEltm object)</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>integ</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>integration method descriptor (or gfInteg object)</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>model</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>model descriptor (or gfModel object)</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>global_function</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>global function descriptor</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>mesher_object</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>mesher object descriptor</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+
+  mfile.write('      <varlistentry>\n')
+  mfile.write('        <term>cont_struct</term>\n')
+  mfile.write('        <listitem>\n')
+  mfile.write('          <para>continuation-structure descriptor</para>\n')
+  mfile.write('        </listitem>\n')
+  mfile.write('      </varlistentry>\n\n')
+  mfile.write('    </variablelist>\n\n')
+
+  mfile.write('    <para>Arguments listed between square brackets are optional. Lists between braces indicate</para>\n')
+  mfile.write('    <para>that the argument must match one of the elements of the list. For example:</para>\n\n')
+
+  mfile.write('    <programlisting role=""><![CDATA[ >> [X,Y]=dummy(int i, \'foo\' | \'bar\' [,vec v])]]></programlisting>\n\n')
+
+  mfile.write('    <para>means that the dummy function takes two or three arguments, its first being an integer value,</para>\n')
+  mfile.write('    <para>the second a string which is either \'foo\' or \'bar\', and a third optional argument. It returns two</para>\n')
+  mfile.write('    <para>values (with the usual matlab meaning, i.e. the caller can always choose to ignore them).</para>\n')
+  mfile.write('  </refsection>\n')
+  mfile.write('</refentry>\n')
+  
+  mfile.close()
+
+  # Write XML function documentation pages
   
   allc = sorted(objects+commands)
   for o in allc:
@@ -992,13 +1216,29 @@ elif (option == 'scilab-com'):
       [r, initiale] = StandardObjectName(o)
       if (os.path.exists(src_dir) and os.path.isfile(src_dir)):
 
-        mfile = open('gf_'+o+ext+'.rst', 'w')
+        mfile = open('gf_'+o+ext+'.xml', 'w')
         
-        mfile.write('gf_' + o + ext+'\n')
-        mfile.write('-------------------------------------------\n\n')
-        mfile.write('Synopsis\n')
-        mfile.write('++++++++\n')
-        mfile.write('::\n\n')
+        mfile.write('<?xml version="1.0" encoding="UTF-8"?>\n')
+        mfile.write('<refentry version="5.0-subset Scilab" xml:id="gf_' + o + ext + '" xml:lang="en"\n')
+        mfile.write('          xmlns="http://docbook.org/ns/docbook"\n')
+        mfile.write('          xmlns:xlink="http://www.w3.org/1999/xlink"\n')
+        mfile.write('          xmlns:xi="http://www.w3.org/2001/XInclude"\n')
+        mfile.write('          xmlns:svg="http://www.w3.org/2000/svg"\n')
+        mfile.write('          xmlns:mml="http://www.w3.org/1998/Math/MathML"\n')
+        mfile.write('          xmlns:html="http://www.w3.org/1999/xhtml"\n')
+        mfile.write('          xmlns:db="http://docbook.org/ns/docbook">\n')
+
+        [gdoc, args] = ExtractGlobalDoc(src_dir);
+        gdoc = FilterDoc(gdoc, langage, objects, commands)
+
+        mfile.write('  <refnamediv>\n')
+        mfile.write('    <refname>gf_' + o + ext + '</refname>\n')
+        mfile.write('    <refpurpose>' + gdoc + '</refpurpose>\n')
+        mfile.write('  </refnamediv>\n\n')
+        
+        mfile.write('  <refsynopsisdiv>\n')
+        mfile.write('    <title>Calling Sequence</title>\n\n')
+
         [gdoc, args] = ExtractGlobalDoc(src_dir);
         if (args != ''):
           args = FilterDoc(args, langage, objects, commands) + ', '
@@ -1019,18 +1259,26 @@ elif (option == 'scilab-com'):
           else:
             mname = ''
             params = params[1:].strip()
-          mfile.write('  ' + ret + 'gf_'+o+ext+firstarg+mname + params+')\n')
+          mfile.write('    <synopsis>' + ret + 'gf_'+o+ext+firstarg+mname + params+')</synopsis>\n')
           [ok, doc, dtype, mname, params, ret] = ExtractSubDoc(fl, langage)
 
+        mfile.write('  </refsynopsisdiv>\n\n')
         fl.close()
-        mfile.write('\nDescription :\n')
-        mfile.write('+++++++++++++\n\n')
+        
+        mfile.write('  <refsection>\n')
+        mfile.write('    <title>Description</title>\n')
+
         if ((o in set_objects) and (ext == '')):
-          mfile.write('General constructor for ' + o + ' objects.\n\n')
+          mfile.write('    <para>General constructor for ' + o + ' objects.</para>\n\n')
+
         gdoc = FilterDoc(gdoc, langage, objects, commands)
-        mfile.write(gdoc)
-        mfile.write('\n\nCommand list :\n')
-        mfile.write('++++++++++++++\n\n')
+        mfile.write('    <para>' + gdoc + '</para>\n')
+        mfile.write('  </refsection>\n\n')
+
+        mfile.write('  <refsection>\n')
+        mfile.write('    <title>Command list</title>\n\n')
+        mfile.write('    <itemizedlist>\n')
+
         fl = open(src_dir)
         doc = '';
         [ok, doc, dtype, mname, params, ret] = ExtractSubDoc(fl, langage)
@@ -1044,23 +1292,37 @@ elif (option == 'scilab-com'):
           else:
             mname = ''
             params = params[1:].strip()
-          mfile.write('\n  ``' + ret + 'gf_'+o+ext+firstarg+mname + params+')``\n\n')
+
+          mfile.write('    <listitem>\n')
+          mfile.write('    <para><literal>' + ret + 'gf_'+o+ext+firstarg+mname + params+')</literal></para>\n\n')
+
+          mfile.write('    <para>')
           doc = FilterDoc(doc, langage, objects, commands)
-          nbspace = -1
-          for l in doc.split('\n'):
-            if (nbspace == -1 and len(l.strip()) > 0):
-              for i in range(len(l)):
-                nbspace = i
-                if (not l[i].isspace()): break
-            
-            if (nbspace > 0):
-              l = l[:nbspace-1].strip() + l[nbspace:]
-            if (nbspace >= 0):
-              mfile.write('    ' + l + '\n')
-          mfile.write('\n')
+          mfile.write('   ' + doc + '\n')
+
+          mfile.write('    </para>\n')
+          mfile.write('    </listitem>\n\n')
+
           [ok, doc, dtype, mname, params, ret] = ExtractSubDoc(fl, langage)
     
         fl.close()
+        mfile.write('    </itemizedlist>\n')
+        mfile.write('  </refsection>\n\n')
+
+        mfile.write('  <refsection>\n')
+        mfile.write('    <title>See Also</title>\n')
+        mfile.write('    <simplelist type="inline">\n')
+        mfile.write('      <member><link linkend="getfem_types">getfem types</link></member>\n')
+        mfile.write('    </simplelist>\n')
+        mfile.write('  </refsection>\n\n')
+
+        mfile.write('  <refsection>\n')
+        mfile.write('    <title>Authors</title>\n')
+        mfile.write('    <para>Y. Collette</para>\n')
+        mfile.write('  </refsection>\n\n')
+
+        mfile.write('</refentry>\n')
+
         mfile.close()
 
 
@@ -1068,14 +1330,14 @@ elif (option == 'scilab-com'):
 #
 #
 #
-# Option scilab-doc
+# Option scilab-doc-rst
 #      Extract the scilab documentation for commands in rst format
 #
 #
 #
 #######################################################################
 
-elif (option == 'scilab-doc'):
+elif (option == 'scilab-doc-rst'):
 
   langage = 'scilab'
   
@@ -1123,6 +1385,8 @@ elif (option == 'scilab-doc'):
   print '`integ`            integration method descriptor (or gfInteg object)'
   print '`model`            model descriptor (or gfModel object)'
   print '`global_function`  global function descriptor'
+  print '`mesher_object`    mesher object descriptor'
+  print '`cont_struct`      continuation-structure descriptor'
   print '=================  =================================================='
   print ''  
   print 'Arguments listed between square brackets are optional. Lists between braces indicate that the argument must match one of the elements of the list. For example::'
@@ -1244,17 +1508,18 @@ elif (option == 'python-com'):
 #
 # GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
 #
-# File autogenerated by interface/bin/extract_doc. Do not edit it.
+# File autogenerated by bin/extract_doc. Do not edit it.
 
 \"\"\"GetFEM-interface classes.
   Provides access to the pseudo-objects exported by the python-getfem
@@ -1346,6 +1611,7 @@ def generic_destructor(self, destructible=True):
   non_destructible_objects.add('fem');
   non_destructible_objects.add('integ');
   non_destructible_objects.add('global_function');
+  non_destructible_objects.add('mesher_object');
   non_destructible_objects.add('eltm');
   non_destructible_objects.add('cvstruct');
   for o in ob:
diff --git a/config.guess b/config.guess
index e3a2116..d622a44 100755
--- a/config.guess
+++ b/config.guess
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-#   Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2009-06-10'
+timestamp='2012-02-10'
 
 # 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
@@ -17,9 +17,7 @@ timestamp='2009-06-10'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -27,16 +25,16 @@ timestamp='2009-06-10'
 # the same distribution terms that you use for the rest of that program.
 
 
-# Originally written by Per Bothner <per at bothner.com>.
-# Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches at gnu.org> and include a ChangeLog
+# entry.
 #
 # 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.
 #
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
+# 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
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -56,8 +54,9 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+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.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -144,7 +143,7 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
 	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
 	# switched to ELF, *-*-netbsd* would select the old
 	# object file format.  This provides both forward
@@ -180,7 +179,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		fi
 		;;
 	    *)
-	        os=netbsd
+		os=netbsd
 		;;
 	esac
 	# The OS release
@@ -223,7 +222,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
 		;;
 	*5.*)
-	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
 		;;
 	esac
 	# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -269,7 +268,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit ;;
+	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+	exitcode=$?
+	trap '' 0
+	exit $exitcode ;;
     Alpha\ *:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# Should we change UNAME_MACHINE based on the output of uname instead
@@ -295,7 +297,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	echo s390-ibm-zvmoe
 	exit ;;
     *:OS400:*:*)
-        echo powerpc-ibm-os400
+	echo powerpc-ibm-os400
 	exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
@@ -333,6 +335,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+	echo i386-pc-auroraux${UNAME_RELEASE}
+	exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
 	eval $set_cc_for_build
 	SUN_ARCH="i386"
@@ -391,23 +396,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+	echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
 	echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
+	exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+	echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-milan-mint${UNAME_RELEASE}
+	exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-hades-mint${UNAME_RELEASE}
+	exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-unknown-mint${UNAME_RELEASE}
+	exit ;;
     m68k:machten:*:*)
 	echo m68k-apple-machten${UNAME_RELEASE}
 	exit ;;
@@ -477,8 +482,8 @@ EOF
 	echo m88k-motorola-sysv3
 	exit ;;
     AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	# DG/UX returns AViiON for all architectures
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
 	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
 	then
 	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
@@ -491,7 +496,7 @@ EOF
 	else
 	    echo i586-dg-dgux${UNAME_RELEASE}
 	fi
- 	exit ;;
+	exit ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
 	echo m88k-dolphin-sysv3
 	exit ;;
@@ -548,7 +553,7 @@ EOF
 		echo rs6000-ibm-aix3.2
 	fi
 	exit ;;
-    *:AIX:*:[456])
+    *:AIX:*:[4567])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
 		IBM_ARCH=rs6000
@@ -591,52 +596,52 @@ EOF
 	    9000/[678][0-9][0-9])
 		if [ -x /usr/bin/getconf ]; then
 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
+		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+		    case "${sc_cpu_version}" in
+		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+		      532)                      # CPU_PA_RISC2_0
+			case "${sc_kernel_bits}" in
+			  32) HP_ARCH="hppa2.0n" ;;
+			  64) HP_ARCH="hppa2.0w" ;;
 			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
+			esac ;;
+		    esac
 		fi
 		if [ "${HP_ARCH}" = "" ]; then
 		    eval $set_cc_for_build
-		    sed 's/^              //' << EOF >$dummy.c
+		    sed 's/^		//' << EOF >$dummy.c
 
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
+		#define _HPUX_SOURCE
+		#include <stdlib.h>
+		#include <unistd.h>
 
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
+		int main ()
+		{
+		#if defined(_SC_KERNEL_BITS)
+		    long bits = sysconf(_SC_KERNEL_BITS);
+		#endif
+		    long cpu  = sysconf (_SC_CPU_VERSION);
 
-                  switch (cpu)
-              	{
-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-              	case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-              	    switch (bits)
-              		{
-              		case 64: puts ("hppa2.0w"); break;
-              		case 32: puts ("hppa2.0n"); break;
-              		default: puts ("hppa2.0"); break;
-              		} break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-              	    puts ("hppa2.0"); break;
-              #endif
-              	default: puts ("hppa1.0"); break;
-              	}
-                  exit (0);
-              }
+		    switch (cpu)
+			{
+			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+			case CPU_PA_RISC2_0:
+		#if defined(_SC_KERNEL_BITS)
+			    switch (bits)
+				{
+				case 64: puts ("hppa2.0w"); break;
+				case 32: puts ("hppa2.0n"); break;
+				default: puts ("hppa2.0"); break;
+				} break;
+		#else  /* !defined(_SC_KERNEL_BITS) */
+			    puts ("hppa2.0"); break;
+		#endif
+			default: puts ("hppa1.0"); break;
+			}
+		    exit (0);
+		}
 EOF
 		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
@@ -727,22 +732,22 @@ EOF
 	exit ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
-        exit ;;
+	exit ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-        exit ;;
+	exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
 	echo c34-convex-bsd
-        exit ;;
+	exit ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
 	echo c38-convex-bsd
-        exit ;;
+	exit ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
-        exit ;;
+	exit ;;
     CRAY*Y-MP:*:*:*)
 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
@@ -766,14 +771,14 @@ EOF
 	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
     5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
@@ -785,13 +790,12 @@ EOF
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
 	exit ;;
     *:FreeBSD:*:*)
-	case ${UNAME_MACHINE} in
-	    pc98)
-		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	case ${UNAME_PROCESSOR} in
 	    amd64)
 		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	    *)
-		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	esac
 	exit ;;
     i*:CYGWIN*:*)
@@ -800,19 +804,22 @@ EOF
     *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit ;;
+    i*:MSYS*:*)
+	echo ${UNAME_MACHINE}-pc-msys
+	exit ;;
     i*:windows32*:*)
-    	# uname -m includes "-pc" on this system.
-    	echo ${UNAME_MACHINE}-mingw32
+	# uname -m includes "-pc" on this system.
+	echo ${UNAME_MACHINE}-mingw32
 	exit ;;
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
 	exit ;;
-    *:Interix*:[3456]*)
-    	case ${UNAME_MACHINE} in
+    *:Interix*:*)
+	case ${UNAME_MACHINE} in
 	    x86)
 		echo i586-pc-interix${UNAME_RELEASE}
 		exit ;;
-	    EM64T | authenticamd | genuineintel)
+	    authenticamd | genuineintel | EM64T)
 		echo x86_64-unknown-interix${UNAME_RELEASE}
 		exit ;;
 	    IA64)
@@ -854,6 +861,27 @@ EOF
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
 	exit ;;
+    aarch64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    aarch64_be:Linux:*:*)
+	UNAME_MACHINE=aarch64_be
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+	esac
+	objdump --private-headers /bin/sh | grep -q ld.so.1
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit ;;
     arm*:Linux:*:*)
 	eval $set_cc_for_build
 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
@@ -861,20 +889,40 @@ EOF
 	then
 	    echo ${UNAME_MACHINE}-unknown-linux-gnu
 	else
-	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+		| grep -q __ARM_PCS_VFP
+	    then
+		echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	    else
+		echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+	    fi
 	fi
 	exit ;;
     avr32*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     cris:Linux:*:*)
-	echo cris-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-gnu
 	exit ;;
     crisv32:Linux:*:*)
-	echo crisv32-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-gnu
 	exit ;;
     frv:Linux:*:*)
-    	echo frv-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    hexagon:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    i*86:Linux:*:*)
+	LIBC=gnu
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
 	exit ;;
     ia64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -901,39 +949,18 @@ EOF
 	#endif
 	#endif
 EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^CPU/{
-		s: ::g
-		p
-	    }'`"
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
 	;;
     or32:Linux:*:*)
-	echo or32-unknown-linux-gnu
-	exit ;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-gnu
-	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-gnu
-	exit ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-	objdump --private-headers /bin/sh | grep -q ld.so.1
-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     padre:Linux:*:*)
 	echo sparc-unknown-linux-gnu
 	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
@@ -942,14 +969,17 @@ EOF
 	  *)    echo hppa-unknown-linux-gnu ;;
 	esac
 	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-gnu
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
 	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
 	echo ${UNAME_MACHINE}-ibm-linux
 	exit ;;
     sh64*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     sh*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -957,67 +987,18 @@ EOF
     sparc:Linux:*:* | sparc64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
+    tile*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
     vax:Linux:*:*)
 	echo ${UNAME_MACHINE}-dec-linux-gnu
 	exit ;;
     x86_64:Linux:*:*)
-	echo x86_64-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     xtensa*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
-    i*86:Linux:*:*)
-	# The BFD linker knows what the default object file format is, so
-	# first see if it will tell us. cd to the root directory to prevent
-	# problems with other programs or directories called `ld' in the path.
-	# Set LC_ALL=C to ensure ld outputs messages in English.
-	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-			 | sed -ne '/supported targets:/!d
-				    s/[ 	][ 	]*/ /g
-				    s/.*supported targets: *//
-				    s/ .*//
-				    p'`
-        case "$ld_supported_targets" in
-	  elf32-i386)
-		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-		;;
-	esac
-	# Determine whether the default compiler is a.out or elf
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <features.h>
-	#ifdef __ELF__
-	# ifdef __GLIBC__
-	#  if __GLIBC__ >= 2
-	LIBC=gnu
-	#  else
-	LIBC=gnulibc1
-	#  endif
-	# else
-	LIBC=gnulibc1
-	# endif
-	#else
-	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
-	LIBC=gnu
-	#else
-	LIBC=gnuaout
-	#endif
-	#endif
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^LIBC/{
-		s: ::g
-		p
-	    }'`"
-	test x"${LIBC}" != x && {
-		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-		exit
-	}
-	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
-	;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
 	# earlier versions are messed up and put the nodename in both
@@ -1025,11 +1006,11 @@ EOF
 	echo i386-sequent-sysv4
 	exit ;;
     i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
+	# Unixware is an offshoot of SVR4, but it has its own version
+	# number series starting with 2...
+	# I am not positive that other SVR4 systems won't match this,
 	# I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
+	# Use sysv4.2uw... so that sysv4* matches it.
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
 	exit ;;
     i*86:OS/2:*:*)
@@ -1061,7 +1042,7 @@ EOF
 	fi
 	exit ;;
     i*86:*:5:[678]*)
-    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	# UnixWare 7.x, OpenUNIX and OpenServer 6.
 	case `/bin/uname -X | grep "^Machine"` in
 	    *486*)	     UNAME_MACHINE=i486 ;;
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
@@ -1089,13 +1070,13 @@ EOF
 	exit ;;
     pc:*:*:*)
 	# Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i586.
+	# uname -m prints for DJGPP always 'pc', but it prints nothing about
+	# the processor, so we play safe by assuming i586.
 	# Note: whatever this is, it MUST be the same as what config.sub
 	# prints for the "djgpp" host, or else GDB configury will decide that
 	# this is a cross-build.
 	echo i586-pc-msdosdjgpp
-        exit ;;
+	exit ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
 	exit ;;
@@ -1130,8 +1111,8 @@ EOF
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
 	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4; exit; } ;;
     NCR*:*:4.2:* | MPRAS*:*:4.2:*)
 	OS_REL='.3'
 	test -r /etc/.relid \
@@ -1174,10 +1155,10 @@ EOF
 		echo ns32k-sni-sysv
 	fi
 	exit ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel at ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit ;;
+    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+			# says <Richard.M.Bartel at ccMail.Census.GOV>
+	echo i586-unisys-sysv4
+	exit ;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes at openmarket.com>.
 	# How about differentiating between stratus architectures? -djm
@@ -1203,11 +1184,11 @@ EOF
 	exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 	if [ -d /usr/nec ]; then
-	        echo mips-nec-sysv${UNAME_RELEASE}
+		echo mips-nec-sysv${UNAME_RELEASE}
 	else
-	        echo mips-unknown-sysv${UNAME_RELEASE}
+		echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
-        exit ;;
+	exit ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
 	echo powerpc-be-beos
 	exit ;;
@@ -1247,6 +1228,16 @@ EOF
     *:Darwin:*:*)
 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
 	case $UNAME_PROCESSOR in
+	    i386)
+		eval $set_cc_for_build
+		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		      grep IS_64BIT_ARCH >/dev/null
+		  then
+		      UNAME_PROCESSOR="x86_64"
+		  fi
+		fi ;;
 	    unknown) UNAME_PROCESSOR=powerpc ;;
 	esac
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
@@ -1262,6 +1253,9 @@ EOF
     *:QNX:*:4*)
 	echo i386-pc-qnx
 	exit ;;
+    NEO-?:NONSTOP_KERNEL:*:*)
+	echo neo-tandem-nsk${UNAME_RELEASE}
+	exit ;;
     NSE-?:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
 	exit ;;
@@ -1307,13 +1301,13 @@ EOF
 	echo pdp10-unknown-its
 	exit ;;
     SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
+	echo mips-sei-seiux${UNAME_RELEASE}
 	exit ;;
     *:DragonFly:*:*)
 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit ;;
     *:*VMS:*:*)
-    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	UNAME_MACHINE=`(uname -p) 2>/dev/null`
 	case "${UNAME_MACHINE}" in
 	    A*) echo alpha-dec-vms ; exit ;;
 	    I*) echo ia64-dec-vms ; exit ;;
@@ -1331,6 +1325,9 @@ EOF
     i*86:AROS:*:*)
 	echo ${UNAME_MACHINE}-pc-aros
 	exit ;;
+    x86_64:VMkernel:*:*)
+	echo ${UNAME_MACHINE}-unknown-esx
+	exit ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
@@ -1353,11 +1350,11 @@ main ()
 #include <sys/param.h>
   printf ("m68k-sony-newsos%s\n",
 #ifdef NEWSOS4
-          "4"
+	"4"
 #else
-	  ""
+	""
 #endif
-         ); exit (0);
+	); exit (0);
 #endif
 #endif
 
diff --git a/config.h.in b/config.h.in
index 9e3dc70..e0f2726 100644
--- a/config.h.in
+++ b/config.h.in
@@ -31,9 +31,6 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
-/* Define to 1 if you have the `metis' library (-lmetis). */
-#undef HAVE_LIBMETIS
-
 /* Define to 1 if you have the `mpich' library (-lmpich). */
 #undef HAVE_LIBMPICH
 
@@ -52,14 +49,8 @@
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
-/* Define to 1 if you have the <mpich2/mpi.h> header file. */
-#undef HAVE_MPICH2_MPI_H
-
-/* Define to 1 if you have the <mpi.h> header file. */
-#undef HAVE_MPI_H
-
-/* Define to 1 if you have the <mpi/mpi.h> header file. */
-#undef HAVE_MPI_MPI_H
+/* defined if the Metis library was found and is working */
+#undef HAVE_METIS
 
 /* Define to 1 if you have the <muParser.h> header file. */
 #undef HAVE_MUPARSER_H
diff --git a/config.sub b/config.sub
index eb0389a..c894da4 100755
--- a/config.sub
+++ b/config.sub
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-#   Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2009-06-11'
+timestamp='2012-02-10'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -21,9 +21,7 @@ timestamp='2009-06-11'
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -32,13 +30,16 @@ timestamp='2009-06-11'
 
 
 # Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# diff and a properly formatted GNU ChangeLog entry.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
 # If it is invalid, we print an error message on stderr and exit with code 1.
 # Otherwise, we print the canonical config type on stdout and succeed.
 
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
 # that are meaningful with *any* GNU software.
@@ -72,8 +73,9 @@ Report bugs and patches to <config-patches at gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+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.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -120,13 +122,18 @@ esac
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
-  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -149,12 +156,12 @@ 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)
+	-apple | -axis | -knuth | -cray | -microblaze)
 		os=
 		basic_machine=$1
 		;;
-        -bluegene*)
-	        os=-cnk
+	-bluegene*)
+		os=-cnk
 		;;
 	-sim | -cisco | -oki | -wec | -winbond)
 		os=
@@ -170,10 +177,10 @@ case $os in
 		os=-chorusos
 		basic_machine=$1
 		;;
- 	-chorusrdb)
- 		os=-chorusrdb
+	-chorusrdb)
+		os=-chorusrdb
 		basic_machine=$1
- 		;;
+		;;
 	-hiux*)
 		os=-hiuxwe2
 		;;
@@ -242,17 +249,22 @@ case $basic_machine in
 	# Some are omitted here because they have special meanings below.
 	1750a | 580 \
 	| a29k \
+	| aarch64 | aarch64_be \
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
 	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+        | be32 | be64 \
 	| bfin \
 	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
+	| epiphany \
 	| fido | fr30 | frv \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| hexagon \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
+	| le32 | le64 \
 	| lm32 \
 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
 	| maxq | mb | microblaze | mcore | mep | metag \
@@ -278,27 +290,39 @@ case $basic_machine in
 	| moxie \
 	| mt \
 	| msp430 \
+	| nds32 | nds32le | nds32be \
 	| nios | nios2 \
 	| ns16k | ns32k \
+	| open8 \
 	| or32 \
 	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| powerpc | powerpc64 | powerpc64le | powerpcle \
 	| pyramid \
+	| rl78 | rx \
 	| score \
 	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-	| spu | strongarm \
-	| tahoe | thumb | tic4x | tic80 | tron \
-	| v850 | v850e \
+	| spu \
+	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+	| ubicom32 \
+	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
 	| we32k \
-	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| x86 | xc16x | xstormy16 | xtensa \
 	| z8k | z80)
 		basic_machine=$basic_machine-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12)
-		# Motorola 68HC11/12.
+	c54x)
+		basic_machine=tic54x-unknown
+		;;
+	c55x)
+		basic_machine=tic55x-unknown
+		;;
+	c6x)
+		basic_machine=tic6x-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
@@ -308,6 +332,21 @@ case $basic_machine in
 		basic_machine=mt-unknown
 		;;
 
+	strongarm | thumb | xscale)
+		basic_machine=arm-unknown
+		;;
+	xgate)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	xscaleeb)
+		basic_machine=armeb-unknown
+		;;
+
+	xscaleel)
+		basic_machine=armel-unknown
+		;;
+
 	# We use `pc' rather than `unknown'
 	# because (1) that's what they normally are, and
 	# (2) the word "unknown" tends to confuse beginning users.
@@ -322,25 +361,29 @@ case $basic_machine in
 	# Recognize the basic CPU types with company name.
 	580-* \
 	| a29k-* \
+	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
+	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* \
 	| clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
 	| elxsi-* \
 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| hexagon-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
+	| le32-* | le64-* \
 	| lm32-* \
 	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 	| mips16-* \
 	| mips64-* | mips64el-* \
@@ -362,24 +405,29 @@ case $basic_machine in
 	| mmix-* \
 	| mt-* \
 	| msp430-* \
+	| nds32-* | nds32le-* | nds32be-* \
 	| nios-* | nios2-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
+	| open8-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
 	| pyramid-* \
-	| romp-* | rs6000-* \
+	| rl78-* | romp-* | rs6000-* | rx-* \
 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
-	| tahoe-* | thumb-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+	| tahoe-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tile*-* \
 	| tron-* \
-	| v850-* | v850e-* | vax-* \
+	| ubicom32-* \
+	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+	| vax-* \
 	| we32k-* \
-	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| xstormy16-* | xtensa*-* \
 	| ymp-* \
 	| z8k-* | z80-*)
@@ -404,7 +452,7 @@ case $basic_machine in
 		basic_machine=a29k-amd
 		os=-udi
 		;;
-    	abacus)
+	abacus)
 		basic_machine=abacus-unknown
 		;;
 	adobe68k)
@@ -474,11 +522,20 @@ case $basic_machine in
 		basic_machine=powerpc-ibm
 		os=-cnk
 		;;
+	c54x-*)
+		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c55x-*)
+		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c6x-*)
+		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	c90)
 		basic_machine=c90-cray
 		os=-unicos
 		;;
-        cegcc)
+	cegcc)
 		basic_machine=arm-unknown
 		os=-cegcc
 		;;
@@ -510,7 +567,7 @@ case $basic_machine in
 		basic_machine=craynv-cray
 		os=-unicosmp
 		;;
-	cr16)
+	cr16 | cr16-*)
 		basic_machine=cr16-unknown
 		os=-elf
 		;;
@@ -668,7 +725,6 @@ case $basic_machine in
 	i370-ibm* | ibm*)
 		basic_machine=i370-ibm
 		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
 	i*86v32)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
@@ -726,6 +782,9 @@ case $basic_machine in
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
+	microblaze)
+		basic_machine=microblaze-xilinx
+		;;
 	mingw32)
 		basic_machine=i386-pc
 		os=-mingw32
@@ -762,10 +821,18 @@ case $basic_machine in
 	ms1-*)
 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
 		;;
+	msys)
+		basic_machine=i386-pc
+		os=-msys
+		;;
 	mvs)
 		basic_machine=i370-ibm
 		os=-mvs
 		;;
+	nacl)
+		basic_machine=le32-unknown
+		os=-nacl
+		;;
 	ncr3000)
 		basic_machine=i486-ncr
 		os=-sysv4
@@ -830,6 +897,12 @@ case $basic_machine in
 	np1)
 		basic_machine=np1-gould
 		;;
+	neo-tandem)
+		basic_machine=neo-tandem
+		;;
+	nse-tandem)
+		basic_machine=nse-tandem
+		;;
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
@@ -912,9 +985,10 @@ case $basic_machine in
 		;;
 	power)	basic_machine=power-ibm
 		;;
-	ppc)	basic_machine=powerpc-unknown
+	ppc | ppcbe)	basic_machine=powerpc-unknown
 		;;
-	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+	ppc-* | ppcbe-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	ppcle | powerpclittle | ppc-le | powerpc-little)
 		basic_machine=powerpcle-unknown
@@ -1008,6 +1082,9 @@ case $basic_machine in
 		basic_machine=i860-stratus
 		os=-sysv4
 		;;
+	strongarm-* | thumb-*)
+		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	sun2)
 		basic_machine=m68000-sun
 		;;
@@ -1064,20 +1141,8 @@ case $basic_machine in
 		basic_machine=t90-cray
 		os=-unicos
 		;;
-	tic54x | c54x*)
-		basic_machine=tic54x-unknown
-		os=-coff
-		;;
-	tic55x | c55x*)
-		basic_machine=tic55x-unknown
-		os=-coff
-		;;
-	tic6x | c6x*)
-		basic_machine=tic6x-unknown
-		os=-coff
-		;;
 	tile*)
-		basic_machine=tile-unknown
+		basic_machine=$basic_machine-unknown
 		os=-linux-gnu
 		;;
 	tx39)
@@ -1147,6 +1212,9 @@ case $basic_machine in
 	xps | xps100)
 		basic_machine=xps100-honeywell
 		;;
+	xscale-* | xscalee[bl]-*)
+		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+		;;
 	ymp)
 		basic_machine=ymp-cray
 		os=-unicos
@@ -1244,9 +1312,12 @@ esac
 if [ x"$os" != x"" ]
 then
 case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
+	# First match some system type aliases
+	# that might get confused with valid system types.
 	# -solaris* is a basic system type, with this one exception.
+	-auroraux)
+		os=-auroraux
+		;;
 	-solaris1 | -solaris1.*)
 		os=`echo $os | sed -e 's|solaris1|sunos4|'`
 		;;
@@ -1268,8 +1339,8 @@ case $os in
 	# -sysv* is not here because it comes later, after sysvr4.
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
-	      | -kopensolaris* \
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+	      | -sym* | -kopensolaris* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
 	      | -aos* | -aros* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
@@ -1281,8 +1352,9 @@ case $os in
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
 	      | -chorusos* | -chorusrdb* | -cegcc* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-uclibc* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1290,7 +1362,7 @@ case $os in
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1329,7 +1401,7 @@ case $os in
 	-opened*)
 		os=-openedition
 		;;
-        -os400*)
+	-os400*)
 		os=-os400
 		;;
 	-wince*)
@@ -1378,7 +1450,7 @@ case $os in
 	-sinix*)
 		os=-sysv4
 		;;
-        -tpf*)
+	-tpf*)
 		os=-tpf
 		;;
 	-triton*)
@@ -1423,6 +1495,8 @@ case $os in
 	-dicos*)
 		os=-dicos
 		;;
+	-nacl*)
+		;;
 	-none)
 		;;
 	*)
@@ -1445,10 +1519,10 @@ else
 # system, and we'll never get to this point.
 
 case $basic_machine in
-        score-*)
+	score-*)
 		os=-elf
 		;;
-        spu-*)
+	spu-*)
 		os=-elf
 		;;
 	*-acorn)
@@ -1460,8 +1534,17 @@ case $basic_machine in
 	arm*-semi)
 		os=-aout
 		;;
-        c4x-* | tic4x-*)
-        	os=-coff
+	c4x-* | tic4x-*)
+		os=-coff
+		;;
+	tic54x-*)
+		os=-coff
+		;;
+	tic55x-*)
+		os=-coff
+		;;
+	tic6x-*)
+		os=-coff
 		;;
 	# This must come before the *-dec entry.
 	pdp10-*)
@@ -1481,14 +1564,11 @@ case $basic_machine in
 		;;
 	m68000-sun)
 		os=-sunos3
-		# This also exists in the configure program, but was not the
-		# default.
-		# os=-sunos4
 		;;
 	m68*-cisco)
 		os=-aout
 		;;
-        mep-*)
+	mep-*)
 		os=-elf
 		;;
 	mips*-cisco)
@@ -1515,7 +1595,7 @@ case $basic_machine in
 	*-ibm)
 		os=-aix
 		;;
-    	*-knuth)
+	*-knuth)
 		os=-mmixware
 		;;
 	*-wec)
diff --git a/configure b/configure
index b17ff9c..2f956f7 100755
--- a/configure
+++ b/configure
@@ -1,11 +1,11 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.65 for getfem 4.1.1.
+# Generated by GNU Autoconf 2.68 for getfem 4.2.
 #
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -89,6 +89,7 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -171,6 +172,14 @@ test x\$exitcode = x0 || exit 1"
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
   test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+
+  test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
 test \$(( 1 + 1 )) = 2 || exit 1"
   if (eval "$as_required") 2>/dev/null; then :
   as_have_required=yes
@@ -214,11 +223,18 @@ IFS=$as_save_IFS
   # We cannot yet assume a decent shell, so we have to provide a
 	# neutralization value for shells without unset; and this also
 	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
 	BASH_ENV=/dev/null
 	ENV=/dev/null
 	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
 	export CONFIG_SHELL
-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -316,7 +332,7 @@ $as_echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -356,19 +372,19 @@ else
 fi # as_fn_arith
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
 # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
 # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
+# script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -525,161 +541,14 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
 # Sed expression to map a string onto a valid variable name.
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
-
-
-# Check that we are running under the correct shell.
 SHELL=${CONFIG_SHELL-/bin/sh}
 
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-$*
-_LT_EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-	   test "X$echo_testing_string" = "X$echo_test_string"; then
-	  # Cool, printf works
-	  :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-	  export CONFIG_SHELL
-	  SHELL="$CONFIG_SHELL"
-	  export SHELL
-	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
-        else
-	  # maybe with a smaller string...
-	  prev=:
-
-	  for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-	    then
-	      break
-	    fi
-	    prev="$cmd"
-	  done
-
-	  if test "$prev" != 'sed 50q "$0"'; then
-	    echo_test_string=`eval $prev`
-	    export echo_test_string
-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
-	  else
-	    # Oops.  We lost completely, so just stick with echo.
-	    ECHO=echo
-	  fi
-        fi
-      fi
-    fi
-  fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-fi
-
-
-
 
 test -n "$DJDIR" || exec 7<&0 </dev/null
 exec 6>&1
 
 # Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
 # so uname gets run too.
 ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
 
@@ -698,8 +567,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='getfem'
 PACKAGE_TARNAME='getfem'
-PACKAGE_VERSION='4.1.1'
-PACKAGE_STRING='getfem 4.1.1'
+PACKAGE_VERSION='4.2'
+PACKAGE_STRING='getfem 4.2'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -744,6 +613,7 @@ ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
 LIBOBJS
+IM_METHODS_LOC
 IM_METHODS
 GETFEM_BUILD_INTERFACE_PATH
 GETFEM_INTERFACE_PATH
@@ -828,9 +698,11 @@ OTOOL
 LIPO
 NMEDIT
 DSYMUTIL
-lt_ECHO
+MANIFEST_TOOL
 RANLIB
+ac_ct_AR
 AR
+DLLTOOL
 OBJDUMP
 LN_S
 NM
@@ -865,6 +737,7 @@ CC
 am__fastdepCXX_FALSE
 am__fastdepCXX_TRUE
 CXXDEPMODE
+am__nodep
 AMDEPBACKSLASH
 AMDEP_FALSE
 AMDEP_TRUE
@@ -944,24 +817,29 @@ ac_user_opts='
 enable_option_checking
 with_optimization
 enable_dependency_tracking
+with_pic
 enable_shared
 enable_static
-with_pic
 enable_fast_install
 with_gnu_ld
+with_sysroot
 enable_libtool_lock
 with_blas
 enable_superlu
+enable_experimental
 with_qd_lib_dir
 with_qd_include_dir
 enable_dd
 enable_qd
 enable_qhull
+with_muparser_include_dir
 enable_muparser
 with_mumps_include_dir
-with_mumps
 enable_mumps
+enable_par_mumps
+with_mumps
 enable_paralevel
+enable_metis
 enable_boost
 enable_matlab
 with_matlab_toolbox_dir
@@ -989,6 +867,7 @@ FC
 FCFLAGS
 CXXCPP
 CPP
+PYTHON
 PYTHON_VERSION'
 
 
@@ -1052,8 +931,9 @@ do
   fi
 
   case $ac_option in
-  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *)	ac_optarg=yes ;;
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
   esac
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
@@ -1098,7 +978,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1124,7 +1004,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1328,7 +1208,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1344,7 +1224,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1374,8 +1254,8 @@ do
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) as_fn_error "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information."
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
     ;;
 
   *=*)
@@ -1383,7 +1263,7 @@ Try \`$0 --help' for more information."
     # Reject names that are not valid shell variable names.
     case $ac_envvar in #(
       '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
     esac
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
@@ -1393,7 +1273,7 @@ Try \`$0 --help' for more information."
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1401,13 +1281,13 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error "missing argument to $ac_option"
+  as_fn_error $? "missing argument to $ac_option"
 fi
 
 if test -n "$ac_unrecognized_opts"; then
   case $enable_option_checking in
     no) ;;
-    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
@@ -1430,7 +1310,7 @@ do
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
 done
 
 # There might be people who depend on the old broken behavior: `$host'
@@ -1444,8 +1324,8 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1460,9 +1340,9 @@ test "$silent" = yes && exec 6>/dev/null
 ac_pwd=`pwd` && test -n "$ac_pwd" &&
 ac_ls_di=`ls -di .` &&
 ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error "working directory cannot be determined"
+  as_fn_error $? "working directory cannot be determined"
 test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error "pwd does not report name of working directory"
+  as_fn_error $? "pwd does not report name of working directory"
 
 
 # Find the source files, if location was not specified.
@@ -1501,11 +1381,11 @@ else
 fi
 if test ! -r "$srcdir/$ac_unique_file"; then
   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
 fi
 ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
 ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
 	pwd)`
 # When building in place, set srcdir=.
 if test "$ac_abs_confdir" = "$ac_pwd"; then
@@ -1531,7 +1411,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 getfem 4.1.1 to adapt to many kinds of systems.
+\`configure' configures getfem 4.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1545,7 +1425,7 @@ Configuration:
       --help=short        display options specific to this package
       --help=recursive    display the short help of all the included packages
   -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
+  -q, --quiet, --silent   do not print \`checking ...' messages
       --cache-file=FILE   cache test results in FILE [disabled]
   -C, --config-cache      alias for \`--cache-file=config.cache'
   -n, --no-create         do not create output files
@@ -1601,7 +1481,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of getfem 4.1.1:";;
+     short | recursive ) echo "Configuration of getfem 4.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1617,21 +1497,25 @@ Optional Features:
                           optimize for fast installation [default=yes]
   --disable-libtool-lock  avoid locking (might break parallel builds)
   --enable-superlu        turn on/off SuperLU support
+  --enable-experimental   compile experimental parts of the library
   --enable-dd             enable the use of the qd library (some computation
-                          will be done with double-double precision, usefull
+                          will be done with double-double precision, useful
                           for high order FEMs)
   --enable-qd             enable the use of the qd library (some computation
-                          will be done with quad-double precision, usefull for
+                          will be done with quad-double precision, useful for
                           high order FEMs)
   --enable-qhull          enable the use of the qhull library (required for
                           generation of non regular meshes)
   --enable-muparser       enable the use of the muParser library (required for
                           parsing mathematical expressions)
-  --enable-mumps          enable the use of the MUMPS library. A direct solver
-                          for large sparse linear systems.
+  --enable-mumps          enable the use of the (sequential) MUMPS library. A
+                          direct solver for large sparse linear systems.
+  --enable-par-mumps      enable the use of the parrallel MUMPS library. A
+                          direct solver for large sparse linear systems.
   --enable-paralevel=level
                           enable the parallel version fo Getfem (use MPI and
                           METIS)
+  --enable-metis          enable the use of the METIS library.
   --enable-boost          assume that boost is installed and use it
   --enable-matlab         turn on/off matlab support
   --enable-python         turn on/off python support
@@ -1643,12 +1527,17 @@ Optional Packages:
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-optimization=FLAG
                           Set the optimization level (-O3 by default)
-  --with-pic              try to use only PIC/non-PIC objects [default=use
+  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
                           both]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-sysroot=DIR Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).
   --with-blas=<lib>       use BLAS library <lib>
   --with-qd-lib-dir       directory in which the libqd.a can be found
   --with-qd-include-dir   directory in which the qd.h header can be found
+  --with-muparser-include-dir
+                          directory in which the muParser.h header can be
+                          found
   --with-mumps-include-dir
                           directory in which the dmumps.h header can be found
   --with-mumps=<lib>      use MUMPS library <lib>
@@ -1663,6 +1552,9 @@ Optional Packages:
                           Set the required Scilab version
   --with-scilab-toolbox-dir=DIR
                           Set the path to the toolbox installation directory
+  --with-scilab-toolbox-dir
+                          directory in which the scilab interface will be
+                          installed
 
 Some influential environment variables:
   CXX         C++ compiler command
@@ -1678,6 +1570,7 @@ Some influential environment variables:
   FCFLAGS     Fortran compiler flags
   CXXCPP      C++ preprocessor
   CPP         C preprocessor
+  PYTHON      the Python interpreter
   PYTHON_VERSION
               The installed Python version to use, for example '2.3'. This
               string will be appended to the Python interpreter canonical
@@ -1749,10 +1642,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-getfem configure 4.1.1
-generated by GNU Autoconf 2.65
+getfem configure 4.2
+generated by GNU Autoconf 2.68
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1796,7 +1689,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_compile
@@ -1834,7 +1727,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1872,7 +1765,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_fc_try_compile
@@ -1898,7 +1791,7 @@ $as_echo "$ac_try_echo"; } >&5
     mv -f conftest.er1 conftest.err
   fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
+  test $ac_status = 0; } > conftest.i && {
 	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
 	 test ! -s conftest.err
        }; then :
@@ -1909,7 +1802,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_cpp
@@ -1955,7 +1848,7 @@ fi
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
@@ -1969,7 +1862,7 @@ ac_fn_c_check_header_compile ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1987,7 +1880,7 @@ fi
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 
@@ -2012,7 +1905,7 @@ $as_echo "$ac_try_echo"; } >&5
     mv -f conftest.er1 conftest.err
   fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
+  test $ac_status = 0; } > conftest.i && {
 	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        }; then :
@@ -2023,7 +1916,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -2065,7 +1958,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -2078,7 +1971,7 @@ ac_fn_c_check_func ()
   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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2133,7 +2026,7 @@ fi
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 
@@ -2178,7 +2071,7 @@ fi
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_link
@@ -2224,7 +2117,7 @@ fi
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_fc_try_link
@@ -2237,7 +2130,7 @@ ac_fn_cxx_check_func ()
   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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2300,7 +2193,7 @@ fi
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_cxx_check_func
 
@@ -2312,10 +2205,10 @@ $as_echo "$ac_res" >&6; }
 ac_fn_cxx_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -2351,7 +2244,7 @@ if ac_fn_cxx_try_cpp "$LINENO"; then :
 else
   ac_header_preproc=no
 fi
-rm -f conftest.err conftest.$ac_ext
+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; }
 
@@ -2378,7 +2271,7 @@ $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -2387,7 +2280,7 @@ 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_cxx_check_header_mongrel
 
@@ -2428,7 +2321,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_run
@@ -2436,8 +2329,8 @@ 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 getfem $as_me 4.1.1, which was
-generated by GNU Autoconf 2.65.  Invocation command line was
+It was created by getfem $as_me 4.2, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2547,11 +2440,9 @@ trap 'exit_status=$?
   {
     echo
 
-    cat <<\_ASBOX
-## ---------------- ##
+    $as_echo "## ---------------- ##
 ## Cache variables. ##
-## ---------------- ##
-_ASBOX
+## ---------------- ##"
     echo
     # The following way of writing the cache mishandles newlines in values,
 (
@@ -2585,11 +2476,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 )
     echo
 
-    cat <<\_ASBOX
-## ----------------- ##
+    $as_echo "## ----------------- ##
 ## Output variables. ##
-## ----------------- ##
-_ASBOX
+## ----------------- ##"
     echo
     for ac_var in $ac_subst_vars
     do
@@ -2602,11 +2491,9 @@ _ASBOX
     echo
 
     if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------------- ##
+      $as_echo "## ------------------- ##
 ## File substitutions. ##
-## ------------------- ##
-_ASBOX
+## ------------------- ##"
       echo
       for ac_var in $ac_subst_files
       do
@@ -2620,11 +2507,9 @@ _ASBOX
     fi
 
     if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
+      $as_echo "## ----------- ##
 ## confdefs.h. ##
-## ----------- ##
-_ASBOX
+## ----------- ##"
       echo
       cat confdefs.h
       echo
@@ -2679,7 +2564,12 @@ _ACEOF
 ac_site_file1=NONE
 ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  ac_site_file1=$CONFIG_SITE
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
 elif test "x$prefix" != xNONE; then
   ac_site_file1=$prefix/share/config.site
   ac_site_file2=$prefix/etc/config.site
@@ -2694,7 +2584,11 @@ do
     { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
 $as_echo "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
   fi
 done
 
@@ -2754,7 +2648,7 @@ if $ac_cache_corrupted; then
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
   { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
 fi
 ## -------------------- ##
 ## Main body of script. ##
@@ -2768,8 +2662,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 MAJOR_VERSION="4"
-MINOR_VERSION="1"
-PATCH_VERSION="1"
+MINOR_VERSION="2"
+PATCH_VERSION="0"
 
 
 
@@ -2797,16 +2691,22 @@ am__api_version='1.11'
 
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  for ac_t in install-sh install.sh shtool; do
-    if test -f "$ac_dir/$ac_t"; then
-      ac_aux_dir=$ac_dir
-      ac_install_sh="$ac_aux_dir/$ac_t -c"
-      break 2
-    fi
-  done
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
 done
 if test -z "$ac_aux_dir"; then
-  as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
 fi
 
 # These three variables are undocumented and unsupported,
@@ -2835,7 +2735,7 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2922,11 +2822,11 @@ am_lf='
 '
 case `pwd` in
   *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
 esac
 
 # Do `set' in a subshell so we don't clobber the current shell's
@@ -2948,7 +2848,7 @@ if (
       # if, for instance, CONFIG_SHELL is bash and it inherits a
       # broken ls alias from the environment.  This has actually
       # happened.  Such a system could not be considered "sane".
-      as_fn_error "ls -t appears to fail.  Make sure there is not a broken
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
 alias in your environment" "$LINENO" 5
    fi
 
@@ -2958,7 +2858,7 @@ then
    # Ok.
    :
 else
-   as_fn_error "newly created file is older than distributed files!
+   as_fn_error $? "newly created file is older than distributed files!
 Check your system clock" "$LINENO" 5
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -3002,7 +2902,7 @@ if test "$cross_compiling" != no; then
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -3042,7 +2942,7 @@ if test -z "$ac_cv_prog_STRIP"; then
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -3095,7 +2995,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then :
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3146,7 +3046,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -3186,7 +3086,7 @@ done
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -3194,7 +3094,7 @@ SHELL = /bin/sh
 all:
 	@echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
 case `${MAKE-make} -f conftest.make 2>/dev/null` in
   *@@@%%%=?*=@@@%%%*)
     eval ac_cv_prog_make_${ac_make}_set=yes;;
@@ -3228,7 +3128,7 @@ if test "`cd $srcdir && pwd`" != "`pwd`"; then
   am__isrc=' -I$(srcdir)'
   # test to see if srcdir already configured
   if test -f $srcdir/config.status; then
-    as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
   fi
 fi
 
@@ -3244,7 +3144,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='getfem'
- VERSION='4.1.1'
+ VERSION='4.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3274,11 +3174,11 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
-# Always define AMTAR for backward compatibility.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
 
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
@@ -3315,7 +3215,7 @@ if test -z "$CXX"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then :
+if ${ac_cv_prog_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CXX"; then
@@ -3359,7 +3259,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CXX"; then
@@ -3522,9 +3422,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "C++ compiler cannot create executables
-See \`config.log' for more details." "$LINENO" 5; }; }
+as_fn_error 77 "C++ compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
@@ -3566,8 +3465,8 @@ done
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest conftest$ac_cv_exeext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
@@ -3624,9 +3523,9 @@ $as_echo "$ac_try_echo"; } >&5
     else
 	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot run C++ compiled programs.
+as_fn_error $? "cannot run C++ compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5; }
     fi
   fi
 fi
@@ -3637,7 +3536,7 @@ rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
 ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3677,8 +3576,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
@@ -3688,7 +3587,7 @@ OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3725,7 +3624,7 @@ ac_test_CXXFLAGS=${CXXFLAGS+set}
 ac_save_CXXFLAGS=$CXXFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
 $as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
+if ${ac_cv_prog_cxx_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_cxx_werror_flag=$ac_cxx_werror_flag
@@ -3858,6 +3757,7 @@ fi
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
  if test "x$enable_dependency_tracking" != xno; then
   AMDEP_TRUE=
@@ -3873,7 +3773,7 @@ depcc="$CXX"  am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -3882,6 +3782,7 @@ else
   # instance it was reported that on HP-UX the gcc test will end up
   # making a dummy file named `D' -- because `-MD' means `put the output
   # in D'.
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -3941,7 +3842,7 @@ else
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       # This compiler won't grok `-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
@@ -4008,7 +3909,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -4052,7 +3953,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -4104,8 +4005,8 @@ fi
 
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "no acceptable C compiler found in \$PATH
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -4134,7 +4035,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4171,7 +4072,7 @@ ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -4249,7 +4150,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -4348,7 +4249,7 @@ depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -4357,6 +4258,7 @@ else
   # instance it was reported that on HP-UX the gcc test will end up
   # making a dummy file named `D' -- because `-MD' means `put the output
   # in D'.
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -4416,7 +4318,7 @@ else
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       # This compiler won't grok `-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
@@ -4476,13 +4378,13 @@ ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
 ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 if test -n "$ac_tool_prefix"; then
-  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_FC+set}" = set; then :
+if ${ac_cv_prog_FC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$FC"; then
@@ -4520,13 +4422,13 @@ fi
 fi
 if test -z "$FC"; then
   ac_ct_FC=$FC
-  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_FC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_FC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_FC"; then
@@ -4608,7 +4510,7 @@ ac_save_ext=$ac_ext
 ac_ext=F
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran compiler" >&5
 $as_echo_n "checking whether we are using the GNU Fortran compiler... " >&6; }
-if test "${ac_cv_fc_compiler_gnu+set}" = set; then :
+if ${ac_cv_fc_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat > conftest.$ac_ext <<_ACEOF
@@ -4636,7 +4538,7 @@ ac_save_FCFLAGS=$FCFLAGS
 FCFLAGS=
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5
 $as_echo_n "checking whether $FC accepts -g... " >&6; }
-if test "${ac_cv_prog_fc_g+set}" = set; then :
+if ${ac_cv_prog_fc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   FCFLAGS=-g
@@ -4686,7 +4588,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
 $as_echo_n "checking how to run the C++ preprocessor... " >&6; }
 if test -z "$CXXCPP"; then
-  if test "${ac_cv_prog_CXXCPP+set}" = set; then :
+  if ${ac_cv_prog_CXXCPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CXXCPP needs to be expanded
@@ -4716,7 +4618,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -4732,11 +4634,11 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
   break
 fi
@@ -4775,7 +4677,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -4791,18 +4693,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
 
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -4821,7 +4723,7 @@ ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest
 ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5
 $as_echo_n "checking how to get verbose linking output from $FC... " >&6; }
-if test "${ac_cv_prog_fc_v+set}" = set; then :
+if ${ac_cv_prog_fc_v+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat > conftest.$ac_ext <<_ACEOF
@@ -4851,7 +4753,8 @@ $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5
 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
 # LIBRARY_PATH; skip all such settings.
 ac_fc_v_output=`eval $ac_link 5>&1 2>&1 |
-  grep -v 'Driving:' | grep -v "^[_$as_cr_Letters][_$as_cr_alnum]*="`
+  sed '/^Driving:/d; /^Configured with:/d;
+      '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
 $as_echo "$ac_fc_v_output" >&5
 FCFLAGS=$ac_save_FCFLAGS
 
@@ -4916,7 +4819,7 @@ fi
 $as_echo "$ac_cv_prog_fc_v" >&6; }
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5
 $as_echo_n "checking for Fortran libraries of $FC... " >&6; }
-if test "${ac_cv_fc_libs+set}" = set; then :
+if ${ac_cv_fc_libs+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$FCLIBS" != "x"; then
@@ -4941,7 +4844,8 @@ $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5
 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
 # LIBRARY_PATH; skip all such settings.
 ac_fc_v_output=`eval $ac_link 5>&1 2>&1 |
-  grep -v 'Driving:' | grep -v "^[_$as_cr_Letters][_$as_cr_alnum]*="`
+  sed '/^Driving:/d; /^Configured with:/d;
+      '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
 $as_echo "$ac_fc_v_output" >&5
 FCFLAGS=$ac_save_FCFLAGS
 
@@ -5031,7 +4935,7 @@ fi
 	  ;;
 	  # Ignore these flags.
 	-lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \
-	  |-LANG:=* | -LIST:* | -LNO:*)
+	  |-LANG:=* | -LIST:* | -LNO:* | -link)
 	  ;;
 	-lkernel32)
 	  test x"$CYGWIN" != xyes && ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
@@ -5139,7 +5043,7 @@ fi;
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler recognizes the partial specialization syntax" >&5
 $as_echo_n "checking whether the compiler recognizes the partial specialization syntax... " >&6; }
-if test "${ac_cv_cxx_partial_specialization_syntax+set}" = set; then :
+if ${ac_cv_cxx_partial_specialization_syntax+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -5186,27 +5090,27 @@ fi
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
+if ${ac_cv_build+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
 test "x$ac_build_alias" = x &&
   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
 test "x$ac_build_alias" = x &&
-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
 $as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -5224,14 +5128,14 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
 $as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
   ac_cv_host=$ac_cv_build
 else
   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
@@ -5239,7 +5143,7 @@ fi
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -5463,80 +5367,86 @@ esac
 
 
 
-# Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then :
-  enableval=$enable_shared; p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_shared=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac
-else
-  enable_shared=no
-fi
+case `pwd` in
+  *\ * | *\	*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
 
 
 
+macro_version='2.4.2'
+macro_revision='1.3337'
+
 
 
 
 
 
 
-# Check whether --enable-static was given.
-if test "${enable_static+set}" = set; then :
-  enableval=$enable_static; p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_static=yes ;;
-    no) enable_static=no ;;
-    *)
-     enable_static=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_static=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac
-else
-  enable_static=yes
-fi
 
 
 
 
 
 
+ltmain="$ac_aux_dir/ltmain.sh"
 
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
 
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
 
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
 
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
 
-case `pwd` in
-  *\ * | *\	*)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
-$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
-esac
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
 
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
 
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
 
-macro_version='2.2.6b'
-macro_revision='1.3017'
+case "$ECHO" in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
 
 
 
@@ -5550,11 +5460,10 @@ macro_revision='1.3017'
 
 
 
-ltmain="$ac_aux_dir/ltmain.sh"
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
 $as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if test "${ac_cv_path_SED+set}" = set; then :
+if ${ac_cv_path_SED+:} false; then :
   $as_echo_n "(cached) " >&6
 else
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
@@ -5609,7 +5518,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_SED"; then
-    as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
   fi
 else
   ac_cv_path_SED=$SED
@@ -5636,7 +5545,7 @@ Xsed="$SED -e 1s/^X//"
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -5685,7 +5594,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_GREP"; then
-    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_GREP=$GREP
@@ -5699,7 +5608,7 @@ $as_echo "$ac_cv_path_GREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -5751,7 +5660,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_EGREP=$EGREP
@@ -5766,7 +5675,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
 $as_echo_n "checking for fgrep... " >&6; }
-if test "${ac_cv_path_FGREP+set}" = set; then :
+if ${ac_cv_path_FGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
@@ -5818,7 +5727,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_FGREP"; then
-    as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_FGREP=$FGREP
@@ -5897,7 +5806,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
 $as_echo_n "checking for non-GNU ld... " >&6; }
 fi
-if test "${lt_cv_path_LD+set}" = set; then :
+if ${lt_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
@@ -5934,10 +5843,10 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+if ${lt_cv_prog_gnu_ld+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   # I'd rather use --version here, but apparently some GNU lds only accept -v.
@@ -5964,7 +5873,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if test "${lt_cv_path_NM+set}" = set; then :
+if ${lt_cv_path_NM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NM"; then
@@ -6017,14 +5926,17 @@ if test "$lt_cv_path_NM" != "no"; then
   NM="$lt_cv_path_NM"
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DUMPBIN"; then
@@ -6062,13 +5974,13 @@ fi
 fi
 if test -z "$DUMPBIN"; then
   ac_ct_DUMPBIN=$DUMPBIN
-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  for ac_prog in dumpbin "link -dump"
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DUMPBIN"; then
@@ -6117,6 +6029,15 @@ esac
   fi
 fi
 
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
 
   if test "$DUMPBIN" != ":"; then
     NM="$DUMPBIN"
@@ -6131,18 +6052,18 @@ test -z "$NM" && NM=nm
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
 $as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if test "${lt_cv_nm_interface+set}" = set; then :
+if ${lt_cv_nm_interface+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:6139: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:6142: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:6145: output\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -6166,7 +6087,7 @@ fi
 # find the maximum length of command line arguments
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
 $as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+if ${lt_cv_sys_max_cmd_len+:} false; then :
   $as_echo_n "(cached) " >&6
 else
     i=0
@@ -6199,6 +6120,11 @@ else
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
   amigaos*)
     # On AmigaOS with pdksh, this test takes hours, literally.
     # So we just punt and use a minimum line length of 8192.
@@ -6224,6 +6150,11 @@ else
     lt_cv_sys_max_cmd_len=196608
     ;;
 
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
   osf*)
     # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
     # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
@@ -6263,8 +6194,8 @@ else
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
 	      test $i != 17 # 1/2 MB should be enough
       do
         i=`expr $i + 1`
@@ -6306,8 +6237,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
 # Try some XSI features
 xsi_shell=no
 ( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
     && eval 'test $(( 1 + 1 )) -eq 2 \
     && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
   && xsi_shell=yes
@@ -6356,9 +6287,83 @@ esac
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
 $as_echo_n "checking for $LD option to reload object files... " >&6; }
-if test "${lt_cv_ld_reload_flag+set}" = set; then :
+if ${lt_cv_ld_reload_flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_reload_flag='-r'
@@ -6372,6 +6377,11 @@ case $reload_flag in
 esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
   darwin*)
     if test "$GCC" = yes; then
       reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
@@ -6394,7 +6404,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}objdump; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OBJDUMP"; then
@@ -6434,7 +6444,7 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
 set dummy objdump; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OBJDUMP"; then
@@ -6493,7 +6503,7 @@ test -z "$OBJDUMP" && OBJDUMP=objdump
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
 $as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if test "${lt_cv_deplibs_check_method+set}" = set; then :
+if ${lt_cv_deplibs_check_method+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_file_magic_cmd='$MAGIC_CMD'
@@ -6535,16 +6545,18 @@ mingw* | pw32*)
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
     lt_cv_file_magic_cmd='$OBJDUMP -f'
   fi
   ;;
 
-cegcc)
+cegcc*)
   # use the weaker test based on 'objdump'. See mingw*.
   lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
   lt_cv_file_magic_cmd='$OBJDUMP -f'
@@ -6574,6 +6586,10 @@ gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
 hpux10.20* | hpux11*)
   lt_cv_file_magic_cmd=/usr/bin/file
   case $host_cpu in
@@ -6582,11 +6598,11 @@ hpux10.20* | hpux11*)
     lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
     ;;
   hppa*64*)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
     lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
     ;;
   *)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
     lt_cv_file_magic_test_file=/usr/lib/libc.sl
     ;;
   esac
@@ -6607,7 +6623,7 @@ irix5* | irix6* | nonstopux*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -6689,6 +6705,21 @@ esac
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
 $as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
 file_magic_cmd=$lt_cv_file_magic_cmd
 deplibs_check_method=$lt_cv_deplibs_check_method
 test -z "$deplibs_check_method" && deplibs_check_method=unknown
@@ -6704,16 +6735,26 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
 
 
 
+
+
+
+
+
+
+
+
+
+
 if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then :
+if ${ac_cv_prog_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$AR"; then
-  ac_cv_prog_AR="$AR" # Let the user override the test.
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -6722,7 +6763,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -6732,10 +6773,10 @@ IFS=$as_save_IFS
 
 fi
 fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -6743,17 +6784,17 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_AR"; then
-  ac_ct_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_AR"; then
-  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -6762,7 +6803,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_AR="ar"
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -6772,17 +6813,17 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_AR" = x; then
-    AR="false"
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -6790,15 +6831,13 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    AR=$ac_ct_AR
+    DLLTOOL=$ac_ct_DLLTOOL
   fi
 else
-  AR="$ac_cv_prog_AR"
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
 fi
 
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-
+test -z "$DLLTOOL" && DLLTOOL=dlltool
 
 
 
@@ -6809,19 +6848,228 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
 
 
 
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
@@ -6854,7 +7102,7 @@ if test -z "$ac_cv_prog_STRIP"; then
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -6913,7 +7161,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -6953,7 +7201,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
 set dummy ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -7015,15 +7263,27 @@ old_postuninstall_cmds=
 if test -n "$RANLIB"; then
   case $host_os in
   openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
     ;;
   esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
 fi
 
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
 
 
 
@@ -7070,7 +7330,7 @@ compiler=$CC
 # Check for command to grab the raw symbol name followed by C symbol from nm.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -7131,8 +7391,8 @@ esac
 lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -7156,6 +7416,7 @@ for ac_symprfx in "" "_"; do
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK '"\
 "     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
@@ -7168,6 +7429,7 @@ for ac_symprfx in "" "_"; do
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
   fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
 
   # Check to see that the pipe works correctly.
   pipe_works=no
@@ -7193,8 +7455,8 @@ _LT_EOF
   test $ac_status = 0; }; then
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
-  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && test -s "$nlist"; then
@@ -7209,6 +7471,18 @@ _LT_EOF
       if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
 	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
 	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -7220,7 +7494,7 @@ _LT_EOF
 	  cat <<_LT_EOF >> conftest.$ac_ext
 
 /* The mapping between symbol names and symbols.  */
-const struct {
+LT_DLSYM_CONST struct {
   const char *name;
   void       *address;
 }
@@ -7246,8 +7520,8 @@ static const void *lt_preloaded_setup() {
 _LT_EOF
 	  # Now try linking the two files.
 	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
 	  LIBS="conftstm.$ac_objext"
 	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
 	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
@@ -7257,8 +7531,8 @@ _LT_EOF
   test $ac_status = 0; } && test -s conftest${ac_exeext}; then
 	    pipe_works=yes
 	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_save_CFLAGS"
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
 	else
 	  echo "cannot find nm_test_func in $nlist" >&5
 	fi
@@ -7295,6 +7569,19 @@ else
 $as_echo "ok" >&6; }
 fi
 
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
 
 
 
@@ -7315,6 +7602,42 @@ fi
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot;
+else
+  with_sysroot=no
+fi
+
+
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
+$as_echo "${with_sysroot}" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+
 
 
 # Check whether --enable-libtool-lock was given.
@@ -7348,7 +7671,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 7351 "configure"' > conftest.$ac_ext
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -7442,7 +7765,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   CFLAGS="$CFLAGS -belf"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
 $as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if test "${lt_cv_cc_needs_belf+set}" = set; then :
+if ${lt_cv_cc_needs_belf+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_ext=c
@@ -7483,7 +7806,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
     CFLAGS="$SAVE_CFLAGS"
   fi
   ;;
-sparc*-*solaris*)
+*-*solaris*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
@@ -7494,7 +7817,20 @@ sparc*-*solaris*)
     case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
       *)
 	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
 	  LD="${LD-ld} -64"
@@ -7510,19 +7846,16 @@ esac
 
 need_locks="$enable_libtool_lock"
 
-
-  case $host_os in
-    rhapsody* | darwin*)
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$DSYMUTIL"; then
-  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7531,7 +7864,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7541,10 +7874,10 @@ IFS=$as_save_IFS
 
 fi
 fi
-DSYMUTIL=$ac_cv_prog_DSYMUTIL
-if test -n "$DSYMUTIL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
-$as_echo "$DSYMUTIL" >&6; }
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -7552,17 +7885,17 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_DSYMUTIL"; then
-  ac_ct_DSYMUTIL=$DSYMUTIL
-  # Extract the first word of "dsymutil", so it can be a program name with args.
-set dummy dsymutil; ac_word=$2
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_DSYMUTIL"; then
-  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7571,7 +7904,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7581,17 +7914,17 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
-if test -n "$ac_ct_DSYMUTIL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
-$as_echo "$ac_ct_DSYMUTIL" >&6; }
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_DSYMUTIL" = x; then
-    DSYMUTIL=":"
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -7599,32 +7932,152 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    DSYMUTIL=$ac_ct_DSYMUTIL
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
   fi
 else
-  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
 fi
 
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
-set dummy ${ac_tool_prefix}nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_NMEDIT+set}" = set; then :
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$NMEDIT"; then
-  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+
+
+
+
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7650,7 +8103,7 @@ if test -z "$ac_cv_prog_NMEDIT"; then
 set dummy nmedit; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_NMEDIT"; then
@@ -7702,7 +8155,7 @@ fi
 set dummy ${ac_tool_prefix}lipo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_LIPO+set}" = set; then :
+if ${ac_cv_prog_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$LIPO"; then
@@ -7742,7 +8195,7 @@ if test -z "$ac_cv_prog_LIPO"; then
 set dummy lipo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_LIPO"; then
@@ -7794,7 +8247,7 @@ fi
 set dummy ${ac_tool_prefix}otool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL+set}" = set; then :
+if ${ac_cv_prog_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL"; then
@@ -7834,7 +8287,7 @@ if test -z "$ac_cv_prog_OTOOL"; then
 set dummy otool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL"; then
@@ -7886,7 +8339,7 @@ fi
 set dummy ${ac_tool_prefix}otool64; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL64+set}" = set; then :
+if ${ac_cv_prog_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL64"; then
@@ -7926,7 +8379,7 @@ if test -z "$ac_cv_prog_OTOOL64"; then
 set dummy otool64; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL64"; then
@@ -8001,7 +8454,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
 $as_echo_n "checking for -single_module linker flag... " >&6; }
-if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+if ${lt_cv_apple_cc_single_mod+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_apple_cc_single_mod=no
@@ -8017,7 +8470,13 @@ else
 	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
 	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
         _lt_result=$?
-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&5
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
 	  lt_cv_apple_cc_single_mod=yes
 	else
 	  cat conftest.err >&5
@@ -8028,9 +8487,10 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
 $as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_exported_symbols_list=no
@@ -8060,6 +8520,41 @@ rm -f core conftest.err conftest.$ac_objext \
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&5
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
     case $host_os in
     rhapsody* | darwin1.[012])
       _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
@@ -8087,7 +8582,7 @@ $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
     else
       _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
     fi
-    if test "$DSYMUTIL" != ":"; then
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
@@ -8107,7 +8602,7 @@ if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -8137,7 +8632,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -8153,11 +8648,11 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
   break
 fi
@@ -8196,7 +8691,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -8212,18 +8707,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
 
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -8235,7 +8730,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8352,8 +8847,7 @@ do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
 "
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -8367,7 +8861,7 @@ for ac_header in dlfcn.h
 do :
   ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
 "
-if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_DLFCN_H 1
 _ACEOF
@@ -8378,746 +8872,78 @@ done
 
 
 
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
-  if test -n "$CCC"; then
-    CXX=$CCC
-  else
-    if test -n "$ac_tool_prefix"; then
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
 
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
 
 
-    test -n "$CXX" && break
-  done
-fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
 
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
+
+# Set options
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  pic_mode=default
 fi
 
 
-  test -n "$ac_ct_CXX" && break
-done
+test -z "$pic_mode" && pic_mode=yes
 
-  if test "x$ac_ct_CXX" = x; then
-    CXX="g++"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CXX=$ac_ct_CXX
-  fi
-fi
 
-  fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GXX=yes
-else
-  GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-   ac_cxx_werror_flag=yes
-   ac_cv_prog_cxx_g=no
-   CXXFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-else
-  CXXFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
-  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-	 CXXFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
-  fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
-  else
-    CXXFLAGS=
-  fi
-fi
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-depcc="$CXX"  am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CXX_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CXX_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CXX_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
-CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
-  am__fastdepCXX_TRUE=
-  am__fastdepCXX_FALSE='#'
-else
-  am__fastdepCXX_TRUE='#'
-  am__fastdepCXX_FALSE=
-fi
-
-
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
-$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
-if test -z "$CXXCPP"; then
-  if test "${ac_cv_prog_CXXCPP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CXXCPP needs to be expanded
-    for CXXCPP in "$CXX -E" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CXXCPP=$CXXCPP
-
-fi
-  CXXCPP=$ac_cv_prog_CXXCPP
-else
-  ac_cv_prog_CXXCPP=$CXXCPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
-$as_echo "$CXXCPP" >&6; }
-ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-_lt_caught_CXX_error=yes; }
-fi
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-else
-  _lt_caught_CXX_error=yes
-fi
-
-
-
-
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_FC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$FC"; then
-  ac_cv_prog_FC="$FC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_FC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-FC=$ac_cv_prog_FC
-if test -n "$FC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FC" >&5
-$as_echo "$FC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$FC" && break
-  done
-fi
-if test -z "$FC"; then
-  ac_ct_FC=$FC
-  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_FC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_FC"; then
-  ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_FC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_FC=$ac_cv_prog_ac_ct_FC
-if test -n "$ac_ct_FC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5
-$as_echo "$ac_ct_FC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_FC" && break
-done
-
-  if test "x$ac_ct_FC" = x; then
-    FC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    FC=$ac_ct_FC
-  fi
-fi
-
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-rm -f a.out
-
-# If we don't use `.F' as extension, the preprocessor is not run on the
-# input file.  (Note that this only needs to work for GNU compilers.)
-ac_save_ext=$ac_ext
-ac_ext=F
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran compiler" >&5
-$as_echo_n "checking whether we are using the GNU Fortran compiler... " >&6; }
-if test "${ac_cv_fc_compiler_gnu+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
-#ifndef __GNUC__
-       choke me
-#endif
 
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_fc_compiler_gnu=$ac_compiler_gnu
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5
-$as_echo "$ac_cv_fc_compiler_gnu" >&6; }
-ac_ext=$ac_save_ext
-ac_test_FCFLAGS=${FCFLAGS+set}
-ac_save_FCFLAGS=$FCFLAGS
-FCFLAGS=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5
-$as_echo_n "checking whether $FC accepts -g... " >&6; }
-if test "${ac_cv_prog_fc_g+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  FCFLAGS=-g
-cat > conftest.$ac_ext <<_ACEOF
-      program main
 
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  ac_cv_prog_fc_g=yes
+# Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
 else
-  ac_cv_prog_fc_g=no
+  enable_shared=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5
-$as_echo "$ac_cv_prog_fc_g" >&6; }
-if test "$ac_test_FCFLAGS" = set; then
-  FCFLAGS=$ac_save_FCFLAGS
-elif test $ac_cv_prog_fc_g = yes; then
-  if test "x$ac_cv_fc_compiler_gnu" = xyes; then
-    FCFLAGS="-g -O2"
-  else
-    FCFLAGS="-g"
-  fi
-else
-  if test "x$ac_cv_fc_compiler_gnu" = xyes; then
-    FCFLAGS="-O2"
-  else
-    FCFLAGS=
-  fi
-fi
 
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
-if test -z "$FC" || test "X$FC" = "Xno"; then
-  _lt_disable_FC=yes
-fi
 
 
 
 
-# Set options
 
 
 
@@ -9128,17 +8954,31 @@ fi
 
 
 
-
-
-# Check whether --with-pic was given.
-if test "${with_pic+set}" = set; then :
-  withval=$with_pic; pic_mode="$withval"
+  # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
 else
-  pic_mode=default
+  enable_static=yes
 fi
 
 
-test -z "$pic_mode" && pic_mode=default
+
 
 
 
@@ -9209,6 +9049,11 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
 
 
+
+
+
+
+
 test -z "$LN_S" && LN_S="ln -s"
 
 
@@ -9230,7 +9075,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
 $as_echo_n "checking for objdir... " >&6; }
-if test "${lt_cv_objdir+set}" = set; then :
+if ${lt_cv_objdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f .libs 2>/dev/null
@@ -9258,19 +9103,6 @@ _ACEOF
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
 case $host_os in
 aix3*)
   # AIX sometimes has problems with the GCC collect2 program.  For some
@@ -9283,23 +9115,6 @@ aix3*)
   ;;
 esac
 
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
 # Global variables:
 ofile=libtool
 can_build_shared=yes
@@ -9328,7 +9143,7 @@ for cc_temp in $compiler""; do
     *) break;;
   esac
 done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 
 
 # Only perform the check for file, if the check method requires it
@@ -9338,7 +9153,7 @@ file_magic*)
   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -9404,7 +9219,7 @@ if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
 $as_echo_n "checking for file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -9537,11 +9352,16 @@ if test -n "$compiler"; then
 lt_prog_compiler_no_builtin_flag=
 
 if test "$GCC" = yes; then
-  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_rtti_exceptions=no
@@ -9557,15 +9377,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9560: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:9564: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_rtti_exceptions=yes
@@ -9594,8 +9414,6 @@ fi
 lt_prog_compiler_pic=
 lt_prog_compiler_static=
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 
   if test "$GCC" = yes; then
     lt_prog_compiler_wl='-Wl,'
@@ -9643,6 +9461,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-fno-common'
       ;;
 
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
+
     hpux*)
       # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
       # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
@@ -9685,6 +9509,15 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-fPIC'
       ;;
     esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
+      ;;
+    esac
   else
     # PORTME Check for flag to pass linker flags through the system compiler.
     case $host_os in
@@ -9747,7 +9580,13 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	lt_prog_compiler_pic='--shared'
 	lt_prog_compiler_static='--static'
 	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
+      nagfor*)
+	# NAG Fortran compiler
+	lt_prog_compiler_wl='-Wl,-Wl,,'
+	lt_prog_compiler_pic='-PIC'
+	lt_prog_compiler_static='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
 	# which looks to be a dead project)
 	lt_prog_compiler_wl='-Wl,'
@@ -9759,25 +9598,40 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
         # All Alpha code is PIC.
         lt_prog_compiler_static='-non_shared'
         ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
 	lt_prog_compiler_wl='-Wl,'
 	lt_prog_compiler_pic='-qpic'
 	lt_prog_compiler_static='-qstaticlink'
 	;;
       *)
 	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Qoption ld '
+	  ;;
 	*Sun\ C*)
 	  # Sun C 5.9
 	  lt_prog_compiler_pic='-KPIC'
 	  lt_prog_compiler_static='-Bstatic'
 	  lt_prog_compiler_wl='-Wl,'
 	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
-	  lt_prog_compiler_pic='-KPIC'
+        *Intel*\ [CF]*Compiler*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fPIC'
+	  lt_prog_compiler_static='-static'
+	  ;;
+	*Portland\ Group*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fpic'
 	  lt_prog_compiler_static='-Bstatic'
-	  lt_prog_compiler_wl=''
 	  ;;
 	esac
 	;;
@@ -9809,7 +9663,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-KPIC'
       lt_prog_compiler_static='-Bstatic'
       case $cc_basename in
-      f77* | f90* | f95*)
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
 	lt_prog_compiler_wl='-Qoption ld ';;
       *)
 	lt_prog_compiler_wl='-Wl,';;
@@ -9866,13 +9720,17 @@ case $host_os in
     lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
     ;;
 esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
-$as_echo "$lt_prog_compiler_pic" >&6; }
-
-
-
-
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
 
 #
 # Check to make sure the PIC flag actually works.
@@ -9880,7 +9738,7 @@ $as_echo "$lt_prog_compiler_pic" >&6; }
 if test -n "$lt_prog_compiler_pic"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_pic_works=no
@@ -9896,15 +9754,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9899: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:9903: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_pic_works=yes
@@ -9933,13 +9791,18 @@ fi
 
 
 
+
+
+
+
+
 #
 # Check to make sure the static flag actually works.
 #
 wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+if ${lt_cv_prog_compiler_static_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works=no
@@ -9952,7 +9815,7 @@ else
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&5
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          lt_cv_prog_compiler_static_works=yes
@@ -9982,7 +9845,7 @@ fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -10001,16 +9864,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:10004: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:10008: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o=yes
@@ -10037,7 +9900,7 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -10056,16 +9919,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:10059: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:10063: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o=yes
@@ -10131,7 +9994,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   hardcode_direct=no
   hardcode_direct_absolute=no
   hardcode_libdir_flag_spec=
-  hardcode_libdir_flag_spec_ld=
   hardcode_libdir_separator=
   hardcode_minus_L=no
   hardcode_shlibpath_var=unsupported
@@ -10175,13 +10037,39 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   openbsd*)
     with_gnu_ld=no
     ;;
-  linux* | k*bsd*-gnu)
+  linux* | k*bsd*-gnu | gnu*)
     link_all_deplibs=no
     ;;
   esac
 
   ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
   if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
     wlarc='${wl}'
 
@@ -10215,11 +10103,12 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
 	ld_shlibs=no
 	cat <<_LT_EOF 1>&2
 
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** Warning: the GNU linker, at least up to release 2.19, is reported
 *** to be unable to reliably create shared libraries on AIX.
 *** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
 
 _LT_EOF
       fi
@@ -10255,10 +10144,12 @@ _LT_EOF
       # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
       # as there is no search path for DLLs.
       hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='${wl}--export-all-symbols'
       allow_undefined_flag=unsupported
       always_export_symbols=no
       enable_shared_with_static_runtimes=yes
-      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
         archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
@@ -10276,6 +10167,11 @@ _LT_EOF
       fi
       ;;
 
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
     interix[3-9]*)
       hardcode_direct=no
       hardcode_shlibpath_var=no
@@ -10301,15 +10197,16 @@ _LT_EOF
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
 	 && test "$tmp_diet" = no
       then
-	tmp_addflag=
+	tmp_addflag=' $pic_flag'
 	tmp_sharedflag='-shared'
 	case $cc_basename,$host_cpu in
         pgcc*)				# Portland Group C compiler
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag'
 	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag -Mnomain' ;;
 	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
 	  tmp_addflag=' -i_dynamic' ;;
@@ -10320,13 +10217,17 @@ _LT_EOF
 	lf95*)				# Lahey Fortran 8.1
 	  whole_archive_flag_spec=
 	  tmp_sharedflag='--shared' ;;
-	xl[cC]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
 	  tmp_sharedflag='-qmkshrobj'
 	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  ;;
 	esac
 	case `$CC -V 2>&1 | sed 5q` in
 	*Sun\ C*)			# Sun C 5.9
-	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  compiler_needs_object=yes
 	  tmp_sharedflag='-G' ;;
 	*Sun\ F*)			# Sun Fortran 8.3
@@ -10342,17 +10243,16 @@ _LT_EOF
         fi
 
 	case $cc_basename in
-	xlf*)
+	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
-	  hardcode_libdir_flag_spec=
-	  hardcode_libdir_flag_spec_ld='-rpath $libdir'
-	  archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
 	  if test "x$supports_anon_versioning" = xyes; then
 	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
 	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
 	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
 	  fi
 	  ;;
 	esac
@@ -10366,8 +10266,8 @@ _LT_EOF
 	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 	wlarc=
       else
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
@@ -10385,8 +10285,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	ld_shlibs=no
       fi
@@ -10432,8 +10332,8 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	ld_shlibs=no
       fi
@@ -10473,8 +10373,10 @@ _LT_EOF
       else
 	# If we're using GNU nm, then we don't want the "-C" option.
 	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
 	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	else
 	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	fi
@@ -10562,7 +10464,13 @@ _LT_EOF
 	allow_undefined_flag='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -10575,25 +10483,32 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
 fi
+
+  aix_libpath=$lt_cv_aix_libpath_
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
         hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
       else
 	if test "$host_cpu" = ia64; then
 	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
@@ -10602,7 +10517,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	else
 	 # Determine the default libpath from the value encoded in an
 	 # empty executable.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	 if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -10615,30 +10536,42 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
 
 	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
 	  # Warning - without using the other run time loading flags,
 	  # -berok will link without error, but may produce a broken library.
 	  no_undefined_flag=' ${wl}-bernotok'
 	  allow_undefined_flag=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  whole_archive_flag_spec='$convenience'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec='$convenience'
+	  fi
 	  archive_cmds_need_lc=yes
 	  # This is similar to how AIX traditionally builds its shared libraries.
 	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
@@ -10670,20 +10603,64 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       # Microsoft Visual C++.
       # hardcode_libdir_flag_spec is actually meaningless, as there is
       # no search path for DLLs.
-      hardcode_libdir_flag_spec=' '
-      allow_undefined_flag=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      old_archive_from_new_cmds='true'
-      # FIXME: Should let the user specify the lib program.
-      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      fix_srcfile_path='`cygpath -w "$srcfile"`'
-      enable_shared_with_static_runtimes=yes
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	always_export_symbols=yes
+	file_list_spec='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+	enable_shared_with_static_runtimes=yes
+	exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	old_postinstall_cmds='chmod 644 $oldlib'
+	postlink_cmds='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	old_archive_from_new_cmds='true'
+	# FIXME: Should let the user specify the lib program.
+	old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	enable_shared_with_static_runtimes=yes
+	;;
+      esac
       ;;
 
     darwin* | rhapsody*)
@@ -10693,7 +10670,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
   hardcode_direct=no
   hardcode_automatic=yes
   hardcode_shlibpath_var=unsupported
-  whole_archive_flag_spec=''
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+  else
+    whole_archive_flag_spec=''
+  fi
   link_all_deplibs=yes
   allow_undefined_flag="$_lt_dar_allow_undefined"
   case $cc_basename in
@@ -10701,7 +10683,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
      *) _lt_dar_can_shared=$GCC ;;
   esac
   if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
+    output_verbose_link_cmd=func_echo_all
     archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
     module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
@@ -10719,10 +10701,6 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       hardcode_shlibpath_var=no
       ;;
 
-    freebsd1*)
-      ld_shlibs=no
-      ;;
-
     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
     # support.  Future versions do this automatically, but an explicit c++rt0.o
     # does not break anything, and helps significantly (at the cost of a little
@@ -10735,7 +10713,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
+    freebsd2.*)
       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
       hardcode_direct=yes
       hardcode_minus_L=yes
@@ -10744,7 +10722,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
     freebsd* | dragonfly*)
-      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
       hardcode_libdir_flag_spec='-R$libdir'
       hardcode_direct=yes
       hardcode_shlibpath_var=no
@@ -10752,7 +10730,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     hpux9*)
       if test "$GCC" = yes; then
-	archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       else
 	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       fi
@@ -10767,14 +10745,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
       else
 	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
       if test "$with_gnu_ld" = no; then
 	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-	hardcode_libdir_flag_spec_ld='+b $libdir'
 	hardcode_libdir_separator=:
 	hardcode_direct=yes
 	hardcode_direct_absolute=yes
@@ -10786,16 +10763,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
 	case $host_cpu in
 	hppa*64*)
 	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
-	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	esac
       else
@@ -10807,7 +10784,46 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
 	  ;;
 	esac
       fi
@@ -10835,26 +10851,39 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     irix5* | irix6* | nonstopux*)
       if test "$GCC" = yes; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	# Try to use the -exported_symbol ld option, if it does not
 	# work, assume that -exports_file does not work either and
 	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	# This should be the same for all languages, so no per-tag cache variable.
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-int foo(void) {}
+int foo (void) { return 0; }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-        LDFLAGS="$save_LDFLAGS"
+           LDFLAGS="$save_LDFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
       else
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
       fi
       archive_cmds_need_lc='no'
       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
@@ -10916,17 +10945,17 @@ rm -f core conftest.err conftest.$ac_objext \
       hardcode_libdir_flag_spec='-L$libdir'
       hardcode_minus_L=yes
       allow_undefined_flag=unsupported
-      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
       old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
       ;;
 
     osf3*)
       if test "$GCC" = yes; then
 	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
       else
 	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
       fi
       archive_cmds_need_lc='no'
       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
@@ -10936,13 +10965,13 @@ rm -f core conftest.err conftest.$ac_objext \
     osf4* | osf5*)	# as osf3* with the addition of -msym flag
       if test "$GCC" = yes; then
 	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
       else
 	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
 
 	# Both c and cxx compiler support -rpath directly
 	hardcode_libdir_flag_spec='-rpath $libdir'
@@ -10955,9 +10984,9 @@ rm -f core conftest.err conftest.$ac_objext \
       no_undefined_flag=' -z defs'
       if test "$GCC" = yes; then
 	wlarc='${wl}'
-	archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
       else
 	case `$CC -V 2>&1` in
 	*"Compilers 5.0"*)
@@ -11145,44 +11174,50 @@ x|xyes)
       # to ld, don't add -lc before -lgcc.
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl
-	pic_flag=$lt_prog_compiler_pic
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag
-        allow_undefined_flag=
-        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl
+	  pic_flag=$lt_prog_compiler_pic
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag
+	  allow_undefined_flag=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
   (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-        then
-	  archive_cmds_need_lc=no
-        else
-	  archive_cmds_need_lc=yes
-        fi
-        allow_undefined_flag=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
-$as_echo "$archive_cmds_need_lc" >&6; }
+	  then
+	    lt_cv_archive_cmds_need_lc=no
+	  else
+	    lt_cv_archive_cmds_need_lc=yes
+	  fi
+	  allow_undefined_flag=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
       ;;
     esac
   fi
@@ -11340,11 +11375,6 @@ esac
 
 
 
-
-
-
-
-
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
 $as_echo_n "checking dynamic linker characteristics... " >&6; }
 
@@ -11353,16 +11383,23 @@ if test "$GCC" = yes; then
     darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
     *) lt_awk_arg="/^libraries:/" ;;
   esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
     # if the path contains ";" then we assume it to be the separator
     # otherwise default to the standard path separator (i.e. ":") - it is
     # assumed that no part of a normal pathname contains ";" but that should
     # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
   # Ok, now we have the path, separated by spaces, we can step through it
   # and add multilib dir if necessary.
   lt_tmp_lt_search_path_spec=
@@ -11375,7 +11412,7 @@ if test "$GCC" = yes; then
 	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
 BEGIN {RS=" "; FS="/|\n";} {
   lt_foo="";
   lt_count=0;
@@ -11395,7 +11432,13 @@ BEGIN {RS=" "; FS="/|\n";} {
   if (lt_foo != "") { lt_freq[lt_foo]++; }
   if (lt_freq[lt_foo] == 1) { print lt_foo; }
 }'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
   sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
 fi
@@ -11421,7 +11464,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -11430,7 +11473,7 @@ aix3*)
   ;;
 
 aix[4-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -11483,7 +11526,7 @@ amigaos*)
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
@@ -11495,7 +11538,7 @@ beos*)
   ;;
 
 bsdi[45]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -11514,8 +11557,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
@@ -11536,36 +11580,83 @@ cygwin* | mingw* | pw32* | cegcc*)
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
       soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
       ;;
     esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
     ;;
 
   *)
+    # Assume MSVC wrapper
     library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
     ;;
   esac
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -11586,7 +11677,7 @@ darwin* | rhapsody*)
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -11594,10 +11685,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -11605,7 +11692,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[123]*) objformat=aout ;;
+    freebsd[23].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -11623,7 +11710,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[01]* | freebsdelf3.[01]*)
@@ -11643,12 +11730,26 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
 
@@ -11694,12 +11795,14 @@ hpux9* | hpux10* | hpux11*)
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
   postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
   ;;
 
 interix[3-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -11715,7 +11818,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
 	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
+		version_type=linux # correct to gnu/linux during the next big refactor
 	else
 		version_type=irix
 	fi ;;
@@ -11752,9 +11855,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -11762,12 +11865,17 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
+
   # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -11780,13 +11888,17 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
-  shlibpath_overrides_runpath=yes
+  lt_cv_shlibpath_overrides_runpath=yes
 fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
@@ -11795,7 +11907,7 @@ rm -f core conftest.err conftest.$ac_objext \
 
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
     sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
   fi
 
@@ -11839,7 +11951,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -11908,7 +12020,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -11933,7 +12045,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -11957,7 +12069,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -11988,7 +12100,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -11998,7 +12110,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -12110,6 +12222,11 @@ fi
 
 
 
+
+
+
+
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
 $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
 hardcode_action=
@@ -12182,7 +12299,7 @@ else
   # if libdl is installed we need to link against it
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12216,7 +12333,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
 
@@ -12230,12 +12347,12 @@ fi
 
   *)
     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = x""yes; then :
+if test "x$ac_cv_func_shl_load" = xyes; then :
   lt_cv_dlopen="shl_load"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
 $as_echo_n "checking for shl_load in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+if ${ac_cv_lib_dld_shl_load+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12269,16 +12386,16 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
 $as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
   lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
 else
   ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = x""yes; then :
+if test "x$ac_cv_func_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12312,12 +12429,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
 $as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+if ${ac_cv_lib_svld_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12351,12 +12468,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
 $as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
 $as_echo_n "checking for dld_link in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+if ${ac_cv_lib_dld_dld_link+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12390,7 +12507,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
 $as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
   lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
 fi
 
@@ -12431,7 +12548,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
 $as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self+set}" = set; then :
+if ${lt_cv_dlopen_self+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   	  if test "$cross_compiling" = yes; then :
@@ -12440,7 +12557,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12443 "configure"
+#line $LINENO "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12481,7 +12598,13 @@ else
 #  endif
 #endif
 
-void fnord() { int i=42;}
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -12490,7 +12613,11 @@ int main ()
   if (self)
     {
       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
       /* dlclose (self); */
     }
   else
@@ -12527,7 +12654,7 @@ $as_echo "$lt_cv_dlopen_self" >&6; }
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self_static+set}" = set; then :
+if ${lt_cv_dlopen_self_static+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   	  if test "$cross_compiling" = yes; then :
@@ -12536,7 +12663,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12539 "configure"
+#line $LINENO "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12577,7 +12704,13 @@ else
 #  endif
 #endif
 
-void fnord() { int i=42;}
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -12586,7 +12719,11 @@ int main ()
   if (self)
     {
       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
       /* dlclose (self); */
     }
   else
@@ -12741,8 +12878,147 @@ 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
 
-CC="$lt_save_CC"
-
+CC="$lt_save_CC"
+
+      if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+  if ${ac_cv_prog_CXXCPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+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
+
+else
+  _lt_caught_CXX_error=yes
+fi
 
 ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -12759,7 +13035,6 @@ export_dynamic_flag_spec_CXX=
 hardcode_direct_CXX=no
 hardcode_direct_absolute_CXX=no
 hardcode_libdir_flag_spec_CXX=
-hardcode_libdir_flag_spec_ld_CXX=
 hardcode_libdir_separator_CXX=
 hardcode_minus_L_CXX=no
 hardcode_shlibpath_var_CXX=unsupported
@@ -12769,6 +13044,8 @@ module_cmds_CXX=
 module_expsym_cmds_CXX=
 link_all_deplibs_CXX=unknown
 old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
 no_undefined_flag_CXX=
 whole_archive_flag_spec_CXX=
 enable_shared_with_static_runtimes_CXX=no
@@ -12824,6 +13101,7 @@ $RM -r conftest*
 
   # Allow CC to be a program name with arguments.
   lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
   lt_save_LD=$LD
   lt_save_GCC=$GCC
   GCC=$GXX
@@ -12841,6 +13119,7 @@ $RM -r conftest*
   fi
   test -z "${LDCXX+set}" || LD=$LDCXX
   CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
   compiler=$CC
   compiler_CXX=$CC
   for cc_temp in $compiler""; do
@@ -12851,7 +13130,7 @@ $RM -r conftest*
     *) break;;
   esac
 done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 
 
   if test -n "$compiler"; then
@@ -12914,7 +13193,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
 $as_echo_n "checking for non-GNU ld... " >&6; }
 fi
-if test "${lt_cv_path_LD+set}" = set; then :
+if ${lt_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
@@ -12951,10 +13230,10 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+if ${lt_cv_prog_gnu_ld+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   # I'd rather use --version here, but apparently some GNU lds only accept -v.
@@ -12980,8 +13259,8 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
       # Check if GNU C++ uses GNU ld as the underlying linker, since the
       # archiving commands below assume that GNU ld is being used.
       if test "$with_gnu_ld" = yes; then
-        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 
         hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
         export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -13013,7 +13292,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
       # Commands to make compiler produce verbose output that lists
       # what "hidden" libraries, object files and flags are used when
       # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
     else
       GXX=no
@@ -13123,7 +13402,13 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
           allow_undefined_flag_CXX='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
-          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+          if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -13136,26 +13421,33 @@ main ()
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
 
           hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
 
-          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
         else
           if test "$host_cpu" = ia64; then
 	    hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
@@ -13164,7 +13456,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           else
 	    # Determine the default libpath from the value encoded in an
 	    # empty executable.
-	    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	    if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -13177,30 +13475,42 @@ main ()
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
 
 	    hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
 	    # Warning - without using the other run time loading flags,
 	    # -berok will link without error, but may produce a broken library.
 	    no_undefined_flag_CXX=' ${wl}-bernotok'
 	    allow_undefined_flag_CXX=' ${wl}-berok'
-	    # Exported symbols can be pulled into shared objects from archives
-	    whole_archive_flag_spec_CXX='$convenience'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      whole_archive_flag_spec_CXX='$convenience'
+	    fi
 	    archive_cmds_need_lc_CXX=yes
 	    # This is similar to how AIX traditionally builds its shared
 	    # libraries.
@@ -13230,28 +13540,75 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
 
       cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
-        # as there is no search path for DLLs.
-        hardcode_libdir_flag_spec_CXX='-L$libdir'
-        allow_undefined_flag_CXX=unsupported
-        always_export_symbols_CXX=no
-        enable_shared_with_static_runtimes_CXX=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    cp $export_symbols $output_objdir/$soname.def;
-          else
-	    echo EXPORTS > $output_objdir/$soname.def;
-	    cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          ld_shlibs_CXX=no
-        fi
-        ;;
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  hardcode_libdir_flag_spec_CXX=' '
+	  allow_undefined_flag_CXX=unsupported
+	  always_export_symbols_CXX=yes
+	  file_list_spec_CXX='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=".dll"
+	  # FIXME: Setting linknames here is a bad hack.
+	  archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	  archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	    else
+	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	    fi~
+	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	    linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
+	  enable_shared_with_static_runtimes_CXX=yes
+	  # Don't use ranlib
+	  old_postinstall_cmds_CXX='chmod 644 $oldlib'
+	  postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
+	    lt_tool_outputfile="@TOOL_OUTPUT@"~
+	    case $lt_outputfile in
+	      *.exe|*.EXE) ;;
+	      *)
+		lt_outputfile="$lt_outputfile.exe"
+		lt_tool_outputfile="$lt_tool_outputfile.exe"
+		;;
+	    esac~
+	    func_to_tool_file "$lt_outputfile"~
+	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	      $RM "$lt_outputfile.manifest";
+	    fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  hardcode_libdir_flag_spec_CXX='-L$libdir'
+	  export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+	  allow_undefined_flag_CXX=unsupported
+	  always_export_symbols_CXX=no
+	  enable_shared_with_static_runtimes_CXX=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file (1st line
+	    # is EXPORTS), use it as is; otherwise, prepend...
+	    archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      cp $export_symbols $output_objdir/$soname.def;
+	    else
+	      echo EXPORTS > $output_objdir/$soname.def;
+	      cat $export_symbols >> $output_objdir/$soname.def;
+	    fi~
+	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    ld_shlibs_CXX=no
+	  fi
+	  ;;
+	esac
+	;;
       darwin* | rhapsody*)
 
 
@@ -13259,7 +13616,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
   hardcode_direct_CXX=no
   hardcode_automatic_CXX=yes
   hardcode_shlibpath_var_CXX=unsupported
-  whole_archive_flag_spec_CXX=''
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+  else
+    whole_archive_flag_spec_CXX=''
+  fi
   link_all_deplibs_CXX=yes
   allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
   case $cc_basename in
@@ -13267,7 +13629,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
      *) _lt_dar_can_shared=$GCC ;;
   esac
   if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
+    output_verbose_link_cmd=func_echo_all
     archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
     module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
@@ -13301,7 +13663,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         esac
         ;;
 
-      freebsd[12]*)
+      freebsd2.*)
         # C++ shared libraries reported to be fairly broken before
 	# switch to ELF
         ld_shlibs_CXX=no
@@ -13320,6 +13682,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       gnu*)
         ;;
 
+      haiku*)
+        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        link_all_deplibs_CXX=yes
+        ;;
+
       hpux9*)
         hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
         hardcode_libdir_separator_CXX=:
@@ -13344,11 +13711,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
             # explicitly linking system object files so we need to strip them
             # from the output so that they don't get included in the library
             # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
             ;;
           *)
             if test "$GXX" = yes; then
-              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
             else
               # FIXME: insert proper C++ library support
               ld_shlibs_CXX=no
@@ -13409,7 +13776,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
           *)
 	    if test "$GXX" = yes; then
@@ -13419,10 +13786,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          ia64*)
-	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          *)
-	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	        esac
 	      fi
@@ -13452,7 +13819,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         case $cc_basename in
           CC*)
 	    # SGI C++
-	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
@@ -13463,9 +13830,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           *)
 	    if test "$GXX" = yes; then
 	      if test "$with_gnu_ld" = no; then
-	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	      else
-	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
 	      fi
 	    fi
 	    link_all_deplibs_CXX=yes
@@ -13494,7 +13861,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 
 	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
 	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -13531,26 +13898,26 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           pgCC* | pgcpp*)
             # Portland Group C++ compiler
 	    case `$CC -V` in
-	    *pgCC\ [1-5]* | *pgcpp\ [1-5]*)
+	    *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
 	      prelink_cmds_CXX='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
 	      old_archive_cmds_CXX='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
 		$RANLIB $oldlib'
 	      archive_cmds_CXX='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 	      archive_expsym_cmds_CXX='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 	      ;;
-	    *) # Version 6 will use weak symbols
+	    *) # Version 6 and above use weak symbols
 	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 	      ;;
@@ -13558,7 +13925,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
 	    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
 	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
             ;;
 	  cxx*)
 	    # Compaq C++
@@ -13577,9 +13944,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
 	    ;;
-	  xl*)
+	  xl* | mpixl* | bgxl*)
 	    # IBM XL 8.0 on PPC, with GNU ld
 	    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
 	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -13599,13 +13966,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	      archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	      archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
 	      hardcode_libdir_flag_spec_CXX='-R$libdir'
-	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	      compiler_needs_object_CXX=yes
 
 	      # Not sure whether something based on
 	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
 	      # would be better.
-	      output_verbose_link_cmd='echo'
+	      output_verbose_link_cmd='func_echo_all'
 
 	      # Archives containing C++ object files must be created using
 	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -13674,7 +14041,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    export_dynamic_flag_spec_CXX='${wl}-E'
 	    whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
 	  fi
-	  output_verbose_link_cmd=echo
+	  output_verbose_link_cmd=func_echo_all
 	else
 	  ld_shlibs_CXX=no
 	fi
@@ -13709,15 +14076,15 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    case $host in
 	      osf3*)
 	        allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
 		;;
 	      *)
 	        allow_undefined_flag_CXX=' -expect_unresolved \*'
-	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	        archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
 	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
 	          $RM $lib.exp'
 	        hardcode_libdir_flag_spec_CXX='-rpath $libdir'
 		;;
@@ -13733,17 +14100,17 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
 	  *)
 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 	      allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
 	      case $host in
 	        osf3*)
-	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 		  ;;
 	        *)
-	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 		  ;;
 	      esac
 
@@ -13753,7 +14120,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	      # Commands to make compiler produce verbose output that lists
 	      # what "hidden" libraries, object files and flags are used when
 	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
 	    else
 	      # FIXME: insert proper C++ library support
@@ -13789,7 +14156,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
       solaris*)
         case $cc_basename in
-          CC*)
+          CC* | sunCC*)
 	    # Sun C++ 4.2, 5.x and Centerline C++
             archive_cmds_need_lc_CXX=yes
 	    no_undefined_flag_CXX=' -zdefs'
@@ -13810,7 +14177,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    esac
 	    link_all_deplibs_CXX=yes
 
-	    output_verbose_link_cmd='echo'
+	    output_verbose_link_cmd='func_echo_all'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -13830,14 +14197,14 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 	      no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
 	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
 	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      else
 	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
 	        # platform.
@@ -13848,7 +14215,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      fi
 
 	      hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
@@ -13902,6 +14269,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           CC*)
 	    archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	    archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+	      '"$old_archive_cmds_CXX"
+	    reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+	      '"$reload_cmds_CXX"
 	    ;;
 	  *)
 	    archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
@@ -13963,6 +14334,14 @@ private:
 };
 _LT_EOF
 
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -13976,7 +14355,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
+    case ${prev}${p} in
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
@@ -13985,13 +14364,22 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
           test $p = "-R"; then
 	 prev=$p
 	 continue
-       else
-	 prev=
        fi
 
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
        if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
+	 case ${prev} in
+	 -L | -R)
 	   # Internal compiler library paths should come after those
 	   # provided the user.  The postdeps already come after the
 	   # user supplied libs so there is no need to process them.
@@ -14011,8 +14399,10 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
 	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
 	 fi
        fi
+       prev=
        ;;
 
+    *.lto.$objext) ;; # Ignore GCC LTO objects
     *.$objext)
        # This assumes that the test object file only shows up
        # once in the compiler output.
@@ -14048,6 +14438,7 @@ else
 fi
 
 $RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
 
 # PORTME: override above test on systems where it is broken
 case $host_os in
@@ -14083,7 +14474,7 @@ linux*)
 
 solaris*)
   case $cc_basename in
-  CC*)
+  CC* | sunCC*)
     # The more standards-conforming stlport4 library is
     # incompatible with the Cstd library. Avoid specifying
     # it if it's in CXXFLAGS. Ignore libCrun as
@@ -14148,8 +14539,6 @@ fi
 lt_prog_compiler_pic_CXX=
 lt_prog_compiler_static_CXX=
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 
   # C++ specific cases for pic, static, wl, etc.
   if test "$GXX" = yes; then
@@ -14199,6 +14588,11 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       # DJGPP does not support shared libraries at all
       lt_prog_compiler_pic_CXX=
       ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_CXX=
+      ;;
     interix[3-9]*)
       # Interix 3.x gcc -fpic/-fPIC options generate broken code.
       # Instead, we relocate shared libraries at runtime.
@@ -14248,6 +14642,11 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	  ;;
 	esac
 	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+	;;
       dgux*)
 	case $cc_basename in
 	  ec++*)
@@ -14337,8 +14736,8 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	    lt_prog_compiler_pic_CXX=
 	    lt_prog_compiler_static_CXX='-non_shared'
 	    ;;
-	  xlc* | xlC*)
-	    # IBM XL 8.0 on PPC
+	  xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
 	    lt_prog_compiler_wl_CXX='-Wl,'
 	    lt_prog_compiler_pic_CXX='-qpic'
 	    lt_prog_compiler_static_CXX='-qstaticlink'
@@ -14400,7 +14799,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	;;
       solaris*)
 	case $cc_basename in
-	  CC*)
+	  CC* | sunCC*)
 	    # Sun C++ 4.2, 5.x and Centerline C++
 	    lt_prog_compiler_pic_CXX='-KPIC'
 	    lt_prog_compiler_static_CXX='-Bstatic'
@@ -14465,10 +14864,17 @@ case $host_os in
     lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
     ;;
 esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
-$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
-
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
+lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
 
 #
 # Check to make sure the PIC flag actually works.
@@ -14476,7 +14882,7 @@ $as_echo "$lt_prog_compiler_pic_CXX" >&6; }
 if test -n "$lt_prog_compiler_pic_CXX"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_pic_works_CXX=no
@@ -14492,15 +14898,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14495: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:14499: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_pic_works_CXX=yes
@@ -14526,13 +14932,15 @@ fi
 
 
 
+
+
 #
 # Check to make sure the static flag actually works.
 #
 wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works_CXX=no
@@ -14545,7 +14953,7 @@ else
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&5
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          lt_cv_prog_compiler_static_works_CXX=yes
@@ -14572,7 +14980,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o_CXX=no
@@ -14591,16 +14999,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14594: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:14598: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o_CXX=yes
@@ -14624,7 +15032,7 @@ $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o_CXX=no
@@ -14643,16 +15051,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14646: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:14650: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o_CXX=yes
@@ -14703,30 +15111,40 @@ fi
 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
 
   export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
   case $host_os in
   aix[4-9]*)
     # If we're using GNU nm, then we don't want the "-C" option.
     # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
     if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     else
       export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     fi
     ;;
   pw32*)
     export_symbols_cmds_CXX="$ltdll_cmds"
-  ;;
+    ;;
   cygwin* | mingw* | cegcc*)
-    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux* | k*bsd*-gnu)
+    case $cc_basename in
+    cl*)
+      exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+      ;;
+    esac
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
     link_all_deplibs_CXX=no
-  ;;
+    ;;
   *)
     export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
+    ;;
   esac
-  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
 $as_echo "$ld_shlibs_CXX" >&6; }
@@ -14758,44 +15176,50 @@ x|xyes)
       # to ld, don't add -lc before -lgcc.
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl_CXX
-	pic_flag=$lt_prog_compiler_pic_CXX
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
-        allow_undefined_flag_CXX=
-        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl_CXX
+	  pic_flag=$lt_prog_compiler_pic_CXX
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+	  allow_undefined_flag_CXX=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
   (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-        then
-	  archive_cmds_need_lc_CXX=no
-        else
-	  archive_cmds_need_lc_CXX=yes
-        fi
-        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5
-$as_echo "$archive_cmds_need_lc_CXX" >&6; }
+	  then
+	    lt_cv_archive_cmds_need_lc_CXX=no
+	  else
+	    lt_cv_archive_cmds_need_lc_CXX=yes
+	  fi
+	  allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+      archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
       ;;
     esac
   fi
@@ -14863,8 +15287,6 @@ esac
 
 
 
-
-
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
 $as_echo_n "checking dynamic linker characteristics... " >&6; }
 
@@ -14890,7 +15312,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -14899,7 +15321,7 @@ aix3*)
   ;;
 
 aix[4-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -14952,7 +15374,7 @@ amigaos*)
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
@@ -14964,7 +15386,7 @@ beos*)
   ;;
 
 bsdi[45]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -14983,8 +15405,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
@@ -15005,36 +15428,82 @@ cygwin* | mingw* | pw32* | cegcc*)
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
       soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
       ;;
     esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
     ;;
 
   *)
+    # Assume MSVC wrapper
     library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
     ;;
   esac
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -15054,7 +15523,7 @@ darwin* | rhapsody*)
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -15062,10 +15531,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -15073,7 +15538,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[123]*) objformat=aout ;;
+    freebsd[23].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -15091,7 +15556,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[01]* | freebsdelf3.[01]*)
@@ -15111,12 +15576,26 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
 
@@ -15162,12 +15641,14 @@ hpux9* | hpux10* | hpux11*)
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
   postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
   ;;
 
 interix[3-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -15183,7 +15664,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
 	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
+		version_type=linux # correct to gnu/linux during the next big refactor
 	else
 		version_type=irix
 	fi ;;
@@ -15220,9 +15701,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -15230,12 +15711,17 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
+
   # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -15248,13 +15734,17 @@ main ()
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
   if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
-  shlibpath_overrides_runpath=yes
+  lt_cv_shlibpath_overrides_runpath=yes
 fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
@@ -15263,7 +15753,7 @@ rm -f core conftest.err conftest.$ac_objext \
 
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
     sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
   fi
 
@@ -15307,7 +15797,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -15376,7 +15866,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -15401,7 +15891,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -15425,7 +15915,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -15456,7 +15946,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -15466,7 +15956,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -15527,6 +16017,8 @@ fi
 
 
 
+
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
 $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
 hardcode_action_CXX=
@@ -15574,6 +16066,7 @@ fi
   fi # test -n "$compiler"
 
   CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
   LDCXX=$LD
   LD=$lt_save_LD
   GCC=$lt_save_GCC
@@ -15600,6 +16093,10 @@ ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest
 ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
 
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+
 archive_cmds_need_lc_FC=no
 allow_undefined_flag_FC=
 always_export_symbols_FC=no
@@ -15608,7 +16105,6 @@ export_dynamic_flag_spec_FC=
 hardcode_direct_FC=no
 hardcode_direct_absolute_FC=no
 hardcode_libdir_flag_spec_FC=
-hardcode_libdir_flag_spec_ld_FC=
 hardcode_libdir_separator_FC=
 hardcode_minus_L_FC=no
 hardcode_automatic_FC=no
@@ -15617,6 +16113,8 @@ module_cmds_FC=
 module_expsym_cmds_FC=
 link_all_deplibs_FC=unknown
 old_archive_cmds_FC=$old_archive_cmds
+reload_flag_FC=$reload_flag
+reload_cmds_FC=$reload_cmds
 no_undefined_flag_FC=
 whole_archive_flag_spec_FC=
 enable_shared_with_static_runtimes_FC=no
@@ -15680,7 +16178,9 @@ $RM -r conftest*
   # Allow CC to be a program name with arguments.
   lt_save_CC="$CC"
   lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
   CC=${FC-"f95"}
+  CFLAGS=$FCFLAGS
   compiler=$CC
   GCC=$ac_cv_fc_compiler_gnu
 
@@ -15693,7 +16193,7 @@ $RM -r conftest*
     *) break;;
   esac
 done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 
 
   if test -n "$compiler"; then
@@ -15755,6 +16255,14 @@ cat > conftest.$ac_ext <<_LT_EOF
       end
 _LT_EOF
 
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -15768,7 +16276,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
+    case ${prev}${p} in
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
@@ -15777,13 +16285,22 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
           test $p = "-R"; then
 	 prev=$p
 	 continue
-       else
-	 prev=
        fi
 
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
        if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
+	 case ${prev} in
+	 -L | -R)
 	   # Internal compiler library paths should come after those
 	   # provided the user.  The postdeps already come after the
 	   # user supplied libs so there is no need to process them.
@@ -15803,8 +16320,10 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
 	   postdeps_FC="${postdeps_FC} ${prev}${p}"
 	 fi
        fi
+       prev=
        ;;
 
+    *.lto.$objext) ;; # Ignore GCC LTO objects
     *.$objext)
        # This assumes that the test object file only shows up
        # once in the compiler output.
@@ -15840,6 +16359,7 @@ else
 fi
 
 $RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
 
 # PORTME: override above test on systems where it is broken
 
@@ -15868,8 +16388,6 @@ fi
 lt_prog_compiler_pic_FC=
 lt_prog_compiler_static_FC=
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 
   if test "$GCC" = yes; then
     lt_prog_compiler_wl_FC='-Wl,'
@@ -15917,6 +16435,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic_FC='-fno-common'
       ;;
 
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_FC=
+      ;;
+
     hpux*)
       # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
       # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
@@ -15959,6 +16483,15 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic_FC='-fPIC'
       ;;
     esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl_FC='-Xlinker '
+      if test -n "$lt_prog_compiler_pic_FC"; then
+        lt_prog_compiler_pic_FC="-Xcompiler $lt_prog_compiler_pic_FC"
+      fi
+      ;;
+    esac
   else
     # PORTME Check for flag to pass linker flags through the system compiler.
     case $host_os in
@@ -16021,7 +16554,13 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	lt_prog_compiler_pic_FC='--shared'
 	lt_prog_compiler_static_FC='--static'
 	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
+      nagfor*)
+	# NAG Fortran compiler
+	lt_prog_compiler_wl_FC='-Wl,-Wl,,'
+	lt_prog_compiler_pic_FC='-PIC'
+	lt_prog_compiler_static_FC='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
 	# which looks to be a dead project)
 	lt_prog_compiler_wl_FC='-Wl,'
@@ -16033,25 +16572,40 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
         # All Alpha code is PIC.
         lt_prog_compiler_static_FC='-non_shared'
         ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
 	lt_prog_compiler_wl_FC='-Wl,'
 	lt_prog_compiler_pic_FC='-qpic'
 	lt_prog_compiler_static_FC='-qstaticlink'
 	;;
       *)
 	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic_FC='-KPIC'
+	  lt_prog_compiler_static_FC='-Bstatic'
+	  lt_prog_compiler_wl_FC=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  lt_prog_compiler_pic_FC='-KPIC'
+	  lt_prog_compiler_static_FC='-Bstatic'
+	  lt_prog_compiler_wl_FC='-Qoption ld '
+	  ;;
 	*Sun\ C*)
 	  # Sun C 5.9
 	  lt_prog_compiler_pic_FC='-KPIC'
 	  lt_prog_compiler_static_FC='-Bstatic'
 	  lt_prog_compiler_wl_FC='-Wl,'
 	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
-	  lt_prog_compiler_pic_FC='-KPIC'
+        *Intel*\ [CF]*Compiler*)
+	  lt_prog_compiler_wl_FC='-Wl,'
+	  lt_prog_compiler_pic_FC='-fPIC'
+	  lt_prog_compiler_static_FC='-static'
+	  ;;
+	*Portland\ Group*)
+	  lt_prog_compiler_wl_FC='-Wl,'
+	  lt_prog_compiler_pic_FC='-fpic'
 	  lt_prog_compiler_static_FC='-Bstatic'
-	  lt_prog_compiler_wl_FC=''
 	  ;;
 	esac
 	;;
@@ -16083,7 +16637,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic_FC='-KPIC'
       lt_prog_compiler_static_FC='-Bstatic'
       case $cc_basename in
-      f77* | f90* | f95*)
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
 	lt_prog_compiler_wl_FC='-Qoption ld ';;
       *)
 	lt_prog_compiler_wl_FC='-Wl,';;
@@ -16140,10 +16694,17 @@ case $host_os in
     lt_prog_compiler_pic_FC="$lt_prog_compiler_pic_FC"
     ;;
 esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_FC" >&5
-$as_echo "$lt_prog_compiler_pic_FC" >&6; }
-
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic_FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_FC=$lt_prog_compiler_pic_FC
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_FC" >&5
+$as_echo "$lt_cv_prog_compiler_pic_FC" >&6; }
+lt_prog_compiler_pic_FC=$lt_cv_prog_compiler_pic_FC
 
 #
 # Check to make sure the PIC flag actually works.
@@ -16151,7 +16712,7 @@ $as_echo "$lt_prog_compiler_pic_FC" >&6; }
 if test -n "$lt_prog_compiler_pic_FC"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_FC works" >&5
 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_FC works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works_FC+set}" = set; then :
+if ${lt_cv_prog_compiler_pic_works_FC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_pic_works_FC=no
@@ -16167,15 +16728,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16170: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:16174: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_pic_works_FC=yes
@@ -16201,13 +16762,15 @@ fi
 
 
 
+
+
 #
 # Check to make sure the static flag actually works.
 #
 wl=$lt_prog_compiler_wl_FC eval lt_tmp_static_flag=\"$lt_prog_compiler_static_FC\"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works_FC+set}" = set; then :
+if ${lt_cv_prog_compiler_static_works_FC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works_FC=no
@@ -16220,7 +16783,7 @@ else
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&5
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          lt_cv_prog_compiler_static_works_FC=yes
@@ -16247,7 +16810,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_FC+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o_FC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o_FC=no
@@ -16266,16 +16829,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16269: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:16273: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o_FC=yes
@@ -16299,7 +16862,7 @@ $as_echo "$lt_cv_prog_compiler_c_o_FC" >&6; }
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_FC+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o_FC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o_FC=no
@@ -16318,16 +16881,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16321: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:16325: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o_FC=yes
@@ -16390,7 +16953,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   hardcode_direct_FC=no
   hardcode_direct_absolute_FC=no
   hardcode_libdir_flag_spec_FC=
-  hardcode_libdir_flag_spec_ld_FC=
   hardcode_libdir_separator_FC=
   hardcode_minus_L_FC=no
   hardcode_shlibpath_var_FC=unsupported
@@ -16434,13 +16996,39 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   openbsd*)
     with_gnu_ld=no
     ;;
-  linux* | k*bsd*-gnu)
+  linux* | k*bsd*-gnu | gnu*)
     link_all_deplibs_FC=no
     ;;
   esac
 
   ld_shlibs_FC=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
   if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
     wlarc='${wl}'
 
@@ -16474,11 +17062,12 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
 	ld_shlibs_FC=no
 	cat <<_LT_EOF 1>&2
 
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** Warning: the GNU linker, at least up to release 2.19, is reported
 *** to be unable to reliably create shared libraries on AIX.
 *** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
 
 _LT_EOF
       fi
@@ -16514,10 +17103,12 @@ _LT_EOF
       # _LT_TAGVAR(hardcode_libdir_flag_spec, FC) is actually meaningless,
       # as there is no search path for DLLs.
       hardcode_libdir_flag_spec_FC='-L$libdir'
+      export_dynamic_flag_spec_FC='${wl}--export-all-symbols'
       allow_undefined_flag_FC=unsupported
       always_export_symbols_FC=no
       enable_shared_with_static_runtimes_FC=yes
-      export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+      export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms_FC='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
         archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
@@ -16535,6 +17126,11 @@ _LT_EOF
       fi
       ;;
 
+    haiku*)
+      archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      link_all_deplibs_FC=yes
+      ;;
+
     interix[3-9]*)
       hardcode_direct_FC=no
       hardcode_shlibpath_var_FC=no
@@ -16560,15 +17156,16 @@ _LT_EOF
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
 	 && test "$tmp_diet" = no
       then
-	tmp_addflag=
+	tmp_addflag=' $pic_flag'
 	tmp_sharedflag='-shared'
 	case $cc_basename,$host_cpu in
         pgcc*)				# Portland Group C compiler
-	  whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag'
 	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag -Mnomain' ;;
 	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
 	  tmp_addflag=' -i_dynamic' ;;
@@ -16579,13 +17176,17 @@ _LT_EOF
 	lf95*)				# Lahey Fortran 8.1
 	  whole_archive_flag_spec_FC=
 	  tmp_sharedflag='--shared' ;;
-	xl[cC]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
 	  tmp_sharedflag='-qmkshrobj'
 	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object_FC=yes
+	  ;;
 	esac
 	case `$CC -V 2>&1 | sed 5q` in
 	*Sun\ C*)			# Sun C 5.9
-	  whole_archive_flag_spec_FC='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  whole_archive_flag_spec_FC='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  compiler_needs_object_FC=yes
 	  tmp_sharedflag='-G' ;;
 	*Sun\ F*)			# Sun Fortran 8.3
@@ -16601,17 +17202,16 @@ _LT_EOF
         fi
 
 	case $cc_basename in
-	xlf*)
+	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  whole_archive_flag_spec_FC='--whole-archive$convenience --no-whole-archive'
-	  hardcode_libdir_flag_spec_FC=
-	  hardcode_libdir_flag_spec_ld_FC='-rpath $libdir'
-	  archive_cmds_FC='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir'
+	  archive_cmds_FC='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
 	  if test "x$supports_anon_versioning" = xyes; then
 	    archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~
 	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
 	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
 	  fi
 	  ;;
 	esac
@@ -16625,8 +17225,8 @@ _LT_EOF
 	archive_cmds_FC='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 	wlarc=
       else
-	archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
@@ -16644,8 +17244,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	ld_shlibs_FC=no
       fi
@@ -16691,8 +17291,8 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	ld_shlibs_FC=no
       fi
@@ -16732,8 +17332,10 @@ _LT_EOF
       else
 	# If we're using GNU nm, then we don't want the "-C" option.
 	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
 	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  export_symbols_cmds_FC='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	  export_symbols_cmds_FC='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	else
 	  export_symbols_cmds_FC='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	fi
@@ -16821,32 +17423,45 @@ _LT_EOF
 	allow_undefined_flag_FC='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        cat > conftest.$ac_ext <<_ACEOF
+        if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.$ac_ext <<_ACEOF
       program main
 
       end
 _ACEOF
 if ac_fn_fc_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__FC=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__FC"; then
+    lt_cv_aix_libpath__FC=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath__FC"; then
+    lt_cv_aix_libpath__FC="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__FC
+fi
 
         hardcode_libdir_flag_spec_FC='${wl}-blibpath:$libdir:'"$aix_libpath"
-        archive_expsym_cmds_FC='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        archive_expsym_cmds_FC='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
       else
 	if test "$host_cpu" = ia64; then
 	  hardcode_libdir_flag_spec_FC='${wl}-R $libdir:/usr/lib:/lib'
@@ -16855,37 +17470,55 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	else
 	 # Determine the default libpath from the value encoded in an
 	 # empty executable.
-	 cat > conftest.$ac_ext <<_ACEOF
+	 if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.$ac_ext <<_ACEOF
       program main
 
       end
 _ACEOF
 if ac_fn_fc_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__FC=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__FC"; then
+    lt_cv_aix_libpath__FC=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath__FC"; then
+    lt_cv_aix_libpath__FC="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__FC
+fi
 
 	 hardcode_libdir_flag_spec_FC='${wl}-blibpath:$libdir:'"$aix_libpath"
 	  # Warning - without using the other run time loading flags,
 	  # -berok will link without error, but may produce a broken library.
 	  no_undefined_flag_FC=' ${wl}-bernotok'
 	  allow_undefined_flag_FC=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  whole_archive_flag_spec_FC='$convenience'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec_FC='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec_FC='$convenience'
+	  fi
 	  archive_cmds_need_lc_FC=yes
 	  # This is similar to how AIX traditionally builds its shared libraries.
 	  archive_expsym_cmds_FC="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
@@ -16917,20 +17550,64 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       # Microsoft Visual C++.
       # hardcode_libdir_flag_spec is actually meaningless, as there is
       # no search path for DLLs.
-      hardcode_libdir_flag_spec_FC=' '
-      allow_undefined_flag_FC=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      archive_cmds_FC='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      old_archive_from_new_cmds_FC='true'
-      # FIXME: Should let the user specify the lib program.
-      old_archive_cmds_FC='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      fix_srcfile_path_FC='`cygpath -w "$srcfile"`'
-      enable_shared_with_static_runtimes_FC=yes
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	hardcode_libdir_flag_spec_FC=' '
+	allow_undefined_flag_FC=unsupported
+	always_export_symbols_FC=yes
+	file_list_spec_FC='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds_FC='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	archive_expsym_cmds_FC='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, FC)='true'
+	enable_shared_with_static_runtimes_FC=yes
+	exclude_expsyms_FC='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	old_postinstall_cmds_FC='chmod 644 $oldlib'
+	postlink_cmds_FC='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	hardcode_libdir_flag_spec_FC=' '
+	allow_undefined_flag_FC=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds_FC='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	old_archive_from_new_cmds_FC='true'
+	# FIXME: Should let the user specify the lib program.
+	old_archive_cmds_FC='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	enable_shared_with_static_runtimes_FC=yes
+	;;
+      esac
       ;;
 
     darwin* | rhapsody*)
@@ -16940,7 +17617,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
   hardcode_direct_FC=no
   hardcode_automatic_FC=yes
   hardcode_shlibpath_var_FC=unsupported
-  whole_archive_flag_spec_FC=''
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec_FC='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    compiler_needs_object_FC=yes
+  else
+    whole_archive_flag_spec_FC=''
+  fi
   link_all_deplibs_FC=yes
   allow_undefined_flag_FC="$_lt_dar_allow_undefined"
   case $cc_basename in
@@ -16948,7 +17630,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
      *) _lt_dar_can_shared=$GCC ;;
   esac
   if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
+    output_verbose_link_cmd=func_echo_all
     archive_cmds_FC="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
     module_cmds_FC="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     archive_expsym_cmds_FC="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
@@ -16966,10 +17648,6 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       hardcode_shlibpath_var_FC=no
       ;;
 
-    freebsd1*)
-      ld_shlibs_FC=no
-      ;;
-
     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
     # support.  Future versions do this automatically, but an explicit c++rt0.o
     # does not break anything, and helps significantly (at the cost of a little
@@ -16982,7 +17660,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
+    freebsd2.*)
       archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
       hardcode_direct_FC=yes
       hardcode_minus_L_FC=yes
@@ -16991,7 +17669,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
     freebsd* | dragonfly*)
-      archive_cmds_FC='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
       hardcode_libdir_flag_spec_FC='-R$libdir'
       hardcode_direct_FC=yes
       hardcode_shlibpath_var_FC=no
@@ -16999,7 +17677,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     hpux9*)
       if test "$GCC" = yes; then
-	archive_cmds_FC='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+	archive_cmds_FC='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       else
 	archive_cmds_FC='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       fi
@@ -17014,14 +17692,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	archive_cmds_FC='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	archive_cmds_FC='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
       else
 	archive_cmds_FC='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
       if test "$with_gnu_ld" = no; then
 	hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir'
-	hardcode_libdir_flag_spec_ld_FC='+b $libdir'
 	hardcode_libdir_separator_FC=:
 	hardcode_direct_FC=yes
 	hardcode_direct_absolute_FC=yes
@@ -17033,16 +17710,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
 	case $host_cpu in
 	hppa*64*)
 	  archive_cmds_FC='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
-	  archive_cmds_FC='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds_FC='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  archive_cmds_FC='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds_FC='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	esac
       else
@@ -17054,7 +17731,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	  archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	esac
       fi
@@ -17082,25 +17759,40 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     irix5* | irix6* | nonstopux*)
       if test "$GCC" = yes; then
-	archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	# Try to use the -exported_symbol ld option, if it does not
 	# work, assume that -exports_file does not work either and
 	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        cat > conftest.$ac_ext <<_ACEOF
-int foo(void) {}
+	# This should be the same for all languages, so no per-tag cache variable.
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   cat > conftest.$ac_ext <<_ACEOF
+
+      subroutine foo
+      end
 _ACEOF
 if ac_fn_fc_try_link "$LINENO"; then :
-  archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-        LDFLAGS="$save_LDFLAGS"
+           LDFLAGS="$save_LDFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
       else
-	archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+	archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
       fi
       archive_cmds_need_lc_FC='no'
       hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir'
@@ -17162,17 +17854,17 @@ rm -f core conftest.err conftest.$ac_objext \
       hardcode_libdir_flag_spec_FC='-L$libdir'
       hardcode_minus_L_FC=yes
       allow_undefined_flag_FC=unsupported
-      archive_cmds_FC='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      archive_cmds_FC='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
       old_archive_from_new_cmds_FC='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
       ;;
 
     osf3*)
       if test "$GCC" = yes; then
 	allow_undefined_flag_FC=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
       else
 	allow_undefined_flag_FC=' -expect_unresolved \*'
-	archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
       fi
       archive_cmds_need_lc_FC='no'
       hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir'
@@ -17182,13 +17874,13 @@ rm -f core conftest.err conftest.$ac_objext \
     osf4* | osf5*)	# as osf3* with the addition of -msym flag
       if test "$GCC" = yes; then
 	allow_undefined_flag_FC=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds_FC='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir'
       else
 	allow_undefined_flag_FC=' -expect_unresolved \*'
-	archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	archive_expsym_cmds_FC='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
 
 	# Both c and cxx compiler support -rpath directly
 	hardcode_libdir_flag_spec_FC='-rpath $libdir'
@@ -17201,9 +17893,9 @@ rm -f core conftest.err conftest.$ac_objext \
       no_undefined_flag_FC=' -z defs'
       if test "$GCC" = yes; then
 	wlarc='${wl}'
-	archive_cmds_FC='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_cmds_FC='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
       else
 	case `$CC -V 2>&1` in
 	*"Compilers 5.0"*)
@@ -17382,44 +18074,50 @@ x|xyes)
       # to ld, don't add -lc before -lgcc.
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+if ${lt_cv_archive_cmds_need_lc_FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl_FC
-	pic_flag=$lt_prog_compiler_pic_FC
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag_FC
-        allow_undefined_flag_FC=
-        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl_FC
+	  pic_flag=$lt_prog_compiler_pic_FC
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag_FC
+	  allow_undefined_flag_FC=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
   (eval $archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-        then
-	  archive_cmds_need_lc_FC=no
-        else
-	  archive_cmds_need_lc_FC=yes
-        fi
-        allow_undefined_flag_FC=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_FC" >&5
-$as_echo "$archive_cmds_need_lc_FC" >&6; }
+	  then
+	    lt_cv_archive_cmds_need_lc_FC=no
+	  else
+	    lt_cv_archive_cmds_need_lc_FC=yes
+	  fi
+	  allow_undefined_flag_FC=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_FC" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_FC" >&6; }
+      archive_cmds_need_lc_FC=$lt_cv_archive_cmds_need_lc_FC
       ;;
     esac
   fi
@@ -17487,8 +18185,6 @@ esac
 
 
 
-
-
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
 $as_echo_n "checking dynamic linker characteristics... " >&6; }
 
@@ -17514,7 +18210,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -17523,7 +18219,7 @@ aix3*)
   ;;
 
 aix[4-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -17576,7 +18272,7 @@ amigaos*)
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
@@ -17588,7 +18284,7 @@ beos*)
   ;;
 
 bsdi[45]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -17607,8 +18303,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
@@ -17629,36 +18326,82 @@ cygwin* | mingw* | pw32* | cegcc*)
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
       soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
       ;;
     esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
     ;;
 
   *)
+    # Assume MSVC wrapper
     library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
     ;;
   esac
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -17678,7 +18421,7 @@ darwin* | rhapsody*)
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -17686,10 +18429,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -17697,7 +18436,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[123]*) objformat=aout ;;
+    freebsd[23].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -17715,7 +18454,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[01]* | freebsdelf3.[01]*)
@@ -17735,12 +18474,26 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
 
@@ -17786,12 +18539,14 @@ hpux9* | hpux10* | hpux11*)
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
   postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
   ;;
 
 interix[3-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -17807,7 +18562,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
 	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
+		version_type=linux # correct to gnu/linux during the next big refactor
 	else
 		version_type=irix
 	fi ;;
@@ -17844,9 +18599,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -17854,25 +18609,34 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
+
   # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_FC\"; \
-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_FC\""
-  cat > conftest.$ac_ext <<_ACEOF
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_FC\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_FC\""
+    cat > conftest.$ac_ext <<_ACEOF
       program main
 
       end
 _ACEOF
 if ac_fn_fc_try_link "$LINENO"; then :
   if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
-  shlibpath_overrides_runpath=yes
+  lt_cv_shlibpath_overrides_runpath=yes
 fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
@@ -17881,7 +18645,7 @@ rm -f core conftest.err conftest.$ac_objext \
 
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
     sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
   fi
 
@@ -17925,7 +18689,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -17994,7 +18758,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -18019,7 +18783,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -18043,7 +18807,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -18074,7 +18838,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -18084,7 +18848,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -18145,6 +18909,8 @@ fi
 
 
 
+
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
 $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
 hardcode_action_FC=
@@ -18192,7 +18958,8 @@ fi
   fi # test -n "$compiler"
 
   GCC=$lt_save_GCC
-  CC="$lt_save_CC"
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
 fi # test "$_lt_disable_FC" != yes
 
 ac_ext=cpp
@@ -18209,14 +18976,14 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
 
 
-        ac_config_commands="$ac_config_commands libtool"
 
 
+        ac_config_commands="$ac_config_commands libtool"
 
 
-# Only expand once:
 
 
+# Only expand once:
 
 
 
@@ -18250,7 +19017,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5
 $as_echo_n "checking for dummy main to link with Fortran libraries... " >&6; }
-if test "${ac_cv_fc_dummy_main+set}" = set; then :
+if ${ac_cv_fc_dummy_main+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_fc_dm_save_LIBS=$LIBS
@@ -18346,8 +19113,8 @@ fi
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "linking to Fortran libraries from C fails
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "linking to Fortran libraries from C fails
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=cpp
@@ -18362,7 +19129,7 @@ ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest
 ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5
 $as_echo_n "checking for Fortran name-mangling scheme... " >&6; }
-if test "${ac_cv_fc_mangling+set}" = set; then :
+if ${ac_cv_fc_mangling+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat > conftest.$ac_ext <<_ACEOF
@@ -18508,8 +19275,8 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compile a simple Fortran program
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot compile a simple Fortran program
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
@@ -18620,8 +19387,7 @@ if test $acx_blas_ok = no; then
         save_LIBS="$LIBS"; LIBS="$LIBS"
         as_ac_var=`$as_echo "ac_cv_func_$sgemm" | $as_tr_sh`
 ac_fn_cxx_check_func "$LINENO" "$sgemm" "$as_ac_var"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
   acx_blas_ok=yes
 fi
 
@@ -18632,7 +19398,7 @@ fi
 if test $acx_blas_ok = no; then
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ATL_xerbla in -latlas" >&5
 $as_echo_n "checking for ATL_xerbla in -latlas... " >&6; }
-if test "${ac_cv_lib_atlas_ATL_xerbla+set}" = set; then :
+if ${ac_cv_lib_atlas_ATL_xerbla+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -18674,11 +19440,11 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_atlas_ATL_xerbla" >&5
 $as_echo "$ac_cv_lib_atlas_ATL_xerbla" >&6; }
-if test "x$ac_cv_lib_atlas_ATL_xerbla" = x""yes; then :
+if test "x$ac_cv_lib_atlas_ATL_xerbla" = xyes; then :
   as_ac_Lib=`$as_echo "ac_cv_lib_f77blas_$sgemm" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lf77blas" >&5
 $as_echo_n "checking for $sgemm in -lf77blas... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -18721,11 +19487,10 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cblas_dgemm in -lcblas" >&5
 $as_echo_n "checking for cblas_dgemm in -lcblas... " >&6; }
-if test "${ac_cv_lib_cblas_cblas_dgemm+set}" = set; then :
+if ${ac_cv_lib_cblas_cblas_dgemm+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -18767,7 +19532,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cblas_cblas_dgemm" >&5
 $as_echo "$ac_cv_lib_cblas_cblas_dgemm" >&6; }
-if test "x$ac_cv_lib_cblas_cblas_dgemm" = x""yes; then :
+if test "x$ac_cv_lib_cblas_cblas_dgemm" = xyes; then :
   acx_blas_ok=yes
                          BLAS_LIBS="-lf77blas -latlas $FCLIBS"
 fi
@@ -18783,7 +19548,7 @@ if test $acx_blas_ok = no; then
         as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5
 $as_echo_n "checking for $sgemm in -lblas... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -18826,12 +19591,11 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   as_ac_Lib=`$as_echo "ac_cv_lib_dgemm_$dgemm" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dgemm in -ldgemm" >&5
 $as_echo_n "checking for $dgemm in -ldgemm... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -18874,12 +19638,11 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   as_ac_Lib=`$as_echo "ac_cv_lib_sgemm_$sgemm" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lsgemm" >&5
 $as_echo_n "checking for $sgemm in -lsgemm... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -18922,8 +19685,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   acx_blas_ok=yes; BLAS_LIBS="-lsgemm -ldgemm -lblas"
 fi
 
@@ -18938,7 +19700,7 @@ if test $acx_blas_ok = no; then
         as_ac_Lib=`$as_echo "ac_cv_lib_cxml_$sgemm" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lcxml" >&5
 $as_echo_n "checking for $sgemm in -lcxml... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -18981,8 +19743,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   acx_blas_ok=yes;BLAS_LIBS="-lcxml"
 fi
 
@@ -18993,7 +19754,7 @@ if test $acx_blas_ok = no; then
         as_ac_Lib=`$as_echo "ac_cv_lib_dxml_$sgemm" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -ldxml" >&5
 $as_echo_n "checking for $sgemm in -ldxml... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -19036,8 +19797,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   acx_blas_ok=yes;BLAS_LIBS="-ldxml"
 fi
 
@@ -19048,7 +19808,7 @@ if test $acx_blas_ok = no; then
         if test "x$GCC" != xyes; then # only works with Sun CC
                 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acosp in -lsunmath" >&5
 $as_echo_n "checking for acosp in -lsunmath... " >&6; }
-if test "${ac_cv_lib_sunmath_acosp+set}" = set; then :
+if ${ac_cv_lib_sunmath_acosp+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -19090,11 +19850,11 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sunmath_acosp" >&5
 $as_echo "$ac_cv_lib_sunmath_acosp" >&6; }
-if test "x$ac_cv_lib_sunmath_acosp" = x""yes; then :
+if test "x$ac_cv_lib_sunmath_acosp" = xyes; then :
   as_ac_Lib=`$as_echo "ac_cv_lib_sunperf_$sgemm" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lsunperf" >&5
 $as_echo_n "checking for $sgemm in -lsunperf... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -19137,8 +19897,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   BLAS_LIBS="-xlic_lib=sunperf -lsunmath"
                                  acx_blas_ok=yes
 fi
@@ -19153,7 +19912,7 @@ if test $acx_blas_ok = no; then
         as_ac_Lib=`$as_echo "ac_cv_lib_scs_$sgemm" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lscs" >&5
 $as_echo_n "checking for $sgemm in -lscs... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -19196,8 +19955,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   acx_blas_ok=yes; BLAS_LIBS="-lscs"
 fi
 
@@ -19208,7 +19966,7 @@ if test $acx_blas_ok = no; then
         as_ac_Lib=`$as_echo "ac_cv_lib_complib.sgimath_$sgemm" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lcomplib.sgimath" >&5
 $as_echo_n "checking for $sgemm in -lcomplib.sgimath... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -19251,8 +20009,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   acx_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath"
 fi
 
@@ -19263,7 +20020,7 @@ if test $acx_blas_ok = no; then
         as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5
 $as_echo_n "checking for $sgemm in -lblas... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -19306,12 +20063,11 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   as_ac_Lib=`$as_echo "ac_cv_lib_essl_$sgemm" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lessl" >&5
 $as_echo_n "checking for $sgemm in -lessl... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -19354,8 +20110,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   acx_blas_ok=yes; BLAS_LIBS="-lessl -lblas"
 fi
 
@@ -19368,7 +20123,7 @@ if test $acx_blas_ok = no; then
         as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5
 $as_echo_n "checking for $sgemm in -lblas... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -19411,8 +20166,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   acx_blas_ok=yes; BLAS_LIBS="-lblas"
 fi
 
@@ -19422,7 +20176,7 @@ if test $acx_blas_ok = no; then
         as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5
 $as_echo_n "checking for $sgemm in -lblas... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -19465,8 +20219,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   acx_blas_ok=yes; BLAS_LIBS="-lblas $FCLIBS"
 fi
 
@@ -19494,7 +20247,7 @@ if test "${enable_superlu+set}" = set; then :
   enableval=$enable_superlu; case "${enableval}" in
    yes) usesuperlu=YES ;;
    no)  usesuperlu=NO ;;
-   *) as_fn_error "bad value ${enableval} for --enable-superlu" "$LINENO" 5 ;;
+   *) as_fn_error $? "bad value ${enableval} for --enable-superlu" "$LINENO" 5 ;;
  esac
 else
   usesuperlu=YES
@@ -19546,7 +20299,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
           F77_CALL_C="ADD__";
           ;;
     *)
-          as_fn_error "\"superlu won't handle this calling convention: sgemm -> $sgemm\"" "$LINENO" 5
+          as_fn_error $? "\"superlu won't handle this calling convention: sgemm -> $sgemm\"" "$LINENO" 5
           ;;
   esac
   SUPERLU_CPPFLAGS="$CPPFLAGS -DUSE_VENDOR_BLAS -DF77_CALL_C=$F77_CALL_C"
@@ -19557,7 +20310,7 @@ else
   echo "Building without SuperLU support (use --enable-superlu=yes to enable it)"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dCreate_CompCol_Matrix in -lsuperlu" >&5
 $as_echo_n "checking for dCreate_CompCol_Matrix in -lsuperlu... " >&6; }
-if test "${ac_cv_lib_superlu_dCreate_CompCol_Matrix+set}" = set; then :
+if ${ac_cv_lib_superlu_dCreate_CompCol_Matrix+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -19599,7 +20352,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_superlu_dCreate_CompCol_Matrix" >&5
 $as_echo "$ac_cv_lib_superlu_dCreate_CompCol_Matrix" >&6; }
-if test "x$ac_cv_lib_superlu_dCreate_CompCol_Matrix" = x""yes; then :
+if test "x$ac_cv_lib_superlu_dCreate_CompCol_Matrix" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBSUPERLU 1
 _ACEOF
@@ -19607,7 +20360,7 @@ _ACEOF
   LIBS="-lsuperlu $LIBS"
 
 else
-  as_fn_error "SuperLU library not found" "$LINENO" 5
+  as_fn_error $? "SuperLU library not found" "$LINENO" 5
 fi
 
 
@@ -19618,8 +20371,7 @@ for ac_header in superlu/colamd.h superlu/slu_Cnames.h \
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -19627,7 +20379,7 @@ _ACEOF
 else
 
     if test "x$usesuperlu" = "xYES"; then
-      as_fn_error "header files of superlu not found. Use --enable-superlu=yes flag" "$LINENO" 5;
+      as_fn_error $? "header files of superlu not found. Use --enable-superlu=yes flag" "$LINENO" 5;
     fi;
 
 fi
@@ -19653,6 +20405,17 @@ fi
 echo "Configuration of SuperLU done"
 
 
+EXPER=""
+# Check whether --enable-experimental was given.
+if test "${enable_experimental+set}" = set; then :
+  enableval=$enable_experimental;  if   test "x$enableval" = "xyes" ; then EXPER="-DEXPERIMENTAL_PURPOSE_ONLY"; fi
+else
+  EXPER=""
+fi
+
+CPPFLAGS="$CPPFLAGS $EXPER"
+
+
 # Check whether --with-qd-lib-dir was given.
 if test "${with_qd_lib_dir+set}" = set; then :
   withval=$with_qd_lib_dir; QDLIB="$withval/libqd.a"
@@ -19688,8 +20451,8 @@ if test "x$useQDlib" = "xyes" ; then
   if test "$cross_compiling" = yes; then :
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot run test program while cross compiling
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -19758,7 +20521,7 @@ if test "x$useQHULL" = "xno"; then
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for qh_new_qhull in -lqhull" >&5
 $as_echo_n "checking for qh_new_qhull in -lqhull... " >&6; }
-if test "${ac_cv_lib_qhull_qh_new_qhull+set}" = set; then :
+if ${ac_cv_lib_qhull_qh_new_qhull+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -19800,7 +20563,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_qhull_qh_new_qhull" >&5
 $as_echo "$ac_cv_lib_qhull_qh_new_qhull" >&6; }
-if test "x$ac_cv_lib_qhull_qh_new_qhull" = x""yes; then :
+if test "x$ac_cv_lib_qhull_qh_new_qhull" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBQHULL 1
 _ACEOF
@@ -19812,7 +20575,7 @@ fi
   for ac_header in qhull/qhull.h
 do :
   ac_fn_cxx_check_header_mongrel "$LINENO" "qhull/qhull.h" "ac_cv_header_qhull_qhull_h" "$ac_includes_default"
-if test "x$ac_cv_header_qhull_qhull_h" = x""yes; then :
+if test "x$ac_cv_header_qhull_qhull_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_QHULL_QHULL_H 1
 _ACEOF
@@ -19820,7 +20583,7 @@ _ACEOF
 else
 
     if test "x$useQHULL" = "xyes"; then
-      as_fn_error "header files qhull/qhull.h not found. Use --enable-qhull=no flag" "$LINENO" 5;
+      as_fn_error $? "header files qhull/qhull.h not found. Use --enable-qhull=no flag" "$LINENO" 5;
       useQHULL="no"
     fi;
 
@@ -19845,6 +20608,21 @@ fi
 
 echo "Configuration of qhull done"
 
+MUPARSERSINC=""
+
+# Check whether --with-muparser-include-dir was given.
+if test "${with_muparser_include_dir+set}" = set; then :
+  withval=$with_muparser_include_dir; case $withval in
+   -I* ) MUPARSERINC="$withval";;
+   * ) MUPARSERINC="-I$withval";;
+  esac
+else
+  MUPARSERINC="-I$GFPREFIX/include"
+
+fi
+
+CPPFLAGS="$CPPFLAGS $MUPARSERINC"
+
 usemuparser="no"
 # Check whether --enable-muparser was given.
 if test "${enable_muparser+set}" = set; then :
@@ -19860,7 +20638,7 @@ if test "x$usemuparser" = "xno"; then
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _init in -lmuparser" >&5
 $as_echo_n "checking for _init in -lmuparser... " >&6; }
-if test "${ac_cv_lib_muparser__init+set}" = set; then :
+if ${ac_cv_lib_muparser__init+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -19902,7 +20680,59 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_muparser__init" >&5
 $as_echo "$ac_cv_lib_muparser__init" >&6; }
-if test "x$ac_cv_lib_muparser__init" = x""yes; then :
+if test "x$ac_cv_lib_muparser__init" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMUPARSER 1
+_ACEOF
+
+  LIBS="-lmuparser $LIBS"
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mupEval in -lmuparser" >&5
+$as_echo_n "checking for mupEval in -lmuparser... " >&6; }
+if ${ac_cv_lib_muparser_mupEval+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmuparser  $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 mupEval ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return mupEval ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_muparser_mupEval=yes
+else
+  ac_cv_lib_muparser_mupEval=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_muparser_mupEval" >&5
+$as_echo "$ac_cv_lib_muparser_mupEval" >&6; }
+if test "x$ac_cv_lib_muparser_mupEval" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBMUPARSER 1
 _ACEOF
@@ -19911,10 +20741,12 @@ _ACEOF
 
 fi
 
+fi
+
    for ac_header in muParser/muParser.h
 do :
   ac_fn_cxx_check_header_mongrel "$LINENO" "muParser/muParser.h" "ac_cv_header_muParser_muParser_h" "$ac_includes_default"
-if test "x$ac_cv_header_muParser_muParser_h" = x""yes; then :
+if test "x$ac_cv_header_muParser_muParser_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_MUPARSER_MUPARSER_H 1
 _ACEOF
@@ -19924,7 +20756,7 @@ else
      for ac_header in muParser.h
 do :
   ac_fn_cxx_check_header_mongrel "$LINENO" "muParser.h" "ac_cv_header_muParser_h" "$ac_includes_default"
-if test "x$ac_cv_header_muParser_h" = x""yes; then :
+if test "x$ac_cv_header_muParser_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_MUPARSER_H 1
 _ACEOF
@@ -19932,7 +20764,7 @@ _ACEOF
 else
 
      if test "x$usemuparser" = "xyes"; then
-     	as_fn_error "header file muParser.h or muParser/muParser.h not found. Use --enable-muparser=no flag" "$LINENO" 5;
+     	as_fn_error $? "header file muParser.h or muParser/muParser.h not found. Use --enable-muparser=no flag" "$LINENO" 5;
 	usemuparser="no"
    	fi;
 
@@ -19963,57 +20795,66 @@ fi
 
 echo "Configuration of muParser done"
 
-MUMPSINC=""
+MUMPSINC=""
+
+# Check whether --with-mumps-include-dir was given.
+if test "${with_mumps_include_dir+set}" = set; then :
+  withval=$with_mumps_include_dir; case $withval in
+   -I* ) MUMPSINC="$withval";;
+   * ) MUMPSINC="-I$withval";;
+  esac
+else
+  MUMPSINC="-I$GFPREFIX/include"
+
+fi
+
+CPPFLAGS="$CPPFLAGS $MUMPSINC"
+
+MUMPS_LIBS=""
+acx_mumps_ok="no"
+usemumps="no"
+# Check whether --enable-mumps was given.
+if test "${enable_mumps+set}" = set; then :
+  enableval=$enable_mumps; case $enableval in
+   yes | "") usemumps="yes"; acx_mumps_ok="yes"; MUMPS_LIBS="-lsmumps_seq -ldmumps_seq -lcmumps_seq -lzmumps_seq";;
+   no) usemumps="no";;
+  esac
+else
+  usemumps="test"; acx_mumps_ok="test"; MUMPS_LIBS="-lsmumps_seq -ldmumps_seq -lcmumps_seq -lzmumps_seq"
+
+fi
+
 
-# Check whether --with-mumps-include-dir was given.
-if test "${with_mumps_include_dir+set}" = set; then :
-  withval=$with_mumps_include_dir; case $withval in
-   -I* ) MUMPSINC="$withval";;
-   * ) MUMPSINC="-I$withval";;
+# Check whether --enable-par-mumps was given.
+if test "${enable_par_mumps+set}" = set; then :
+  enableval=$enable_par_mumps; case $enableval in
+   yes | "") usemumps="yes"; MUMPS_LIBS="-lsmumps -ldmumps -lcmumps -lzmumps";;
+   no) usemumps="no";;
   esac
-else
-  MUMPSINC="-I$GFPREFIX/include"
 
 fi
 
-CPPFLAGS="$CPPFLAGS $MUMPSINC"
 
-MUMPS_LIBS=""
-acx_mumps_ok="no"
 
 # Check whether --with-mumps was given.
 if test "${with_mumps+set}" = set; then :
   withval=$with_mumps; case $with_mumps in
-   yes | "") acx_mumps_ok="yes" ;;
+   yes | "") usemumps="yes";;
    no) acx_mumps_ok="no" ;;
    -* | */* | *.a | *.so | *.so.* | *.o| builtin) MUMPS_LIBS="$with_mumps"; acx_mumps_ok="yes" ;;
-   *) MUMPS_LIBS=`echo $with_mumps | sed -e 's/^/-l/g;s/ / -l/g'` ; acx_mumps_ok="yes" ;;
+   *) MUMPS_LIBS=`echo $with_mumps | sed -e 's/^/-l/g;s/ / -l/g'` ; usemumps="yes";;
   esac
-else
-  MUMPS_LIBS="-lsmumps -ldmumps -lcmumps -lzmumps"; acx_mumps_ok="test"
 
 fi
 
 
-usemumps="no"
-# Check whether --enable-mumps was given.
-if test "${enable_mumps+set}" = set; then :
-  enableval=$enable_mumps; case $enableval in
-   yes | "") usemumps="yes"; acx_mumps_ok="yes" ;;
-   no) usemumps="no"; MUMPS_LIBS="" ;;
-  esac
-else
-  usemumps="test"
-
-fi
-
 
 if test "x$usemumps" = "xno" -o "x$acx_mumps_ok" = "xno"; then
   echo "Building with MUMPS explicitly disabled";
 else
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing smumps_c" >&5
 $as_echo_n "checking for library containing smumps_c... " >&6; }
-if test "${ac_cv_search_smumps_c+set}" = set; then :
+if ${ac_cv_search_smumps_c+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -20055,11 +20896,11 @@ for ac_lib in '' `echo $MUMPS_LIBS | sed -e 's/^-l//g;s/ -l/ /g'`; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_smumps_c+set}" = set; then :
+  if ${ac_cv_search_smumps_c+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_smumps_c+set}" = set; then :
+if ${ac_cv_search_smumps_c+:} false; then :
 
 else
   ac_cv_search_smumps_c=no
@@ -20075,7 +20916,7 @@ if test "$ac_res" != no; then :
   usemumps="yes"
 else
   if test "x$acx_mumps_ok" = "xyes"; then
-     as_fn_error "The function smumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
+     as_fn_error $? "The function smumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
     fi;
     usemumps="no"
 
@@ -20083,7 +20924,7 @@ fi
 
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dmumps_c" >&5
 $as_echo_n "checking for library containing dmumps_c... " >&6; }
-if test "${ac_cv_search_dmumps_c+set}" = set; then :
+if ${ac_cv_search_dmumps_c+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -20125,11 +20966,11 @@ for ac_lib in '' `echo $MUMPS_LIBS | sed -e 's/^-l//g;s/ -l/ /g'`; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_dmumps_c+set}" = set; then :
+  if ${ac_cv_search_dmumps_c+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_dmumps_c+set}" = set; then :
+if ${ac_cv_search_dmumps_c+:} false; then :
 
 else
   ac_cv_search_dmumps_c=no
@@ -20145,7 +20986,7 @@ if test "$ac_res" != no; then :
   usemumps="yes"
 else
   if test "x$acx_mumps_ok" = "xyes"; then
-     as_fn_error "The function dmumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
+     as_fn_error $? "The function dmumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
     fi;
     usemumps="no"
 
@@ -20153,7 +20994,7 @@ fi
 
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing cmumps_c" >&5
 $as_echo_n "checking for library containing cmumps_c... " >&6; }
-if test "${ac_cv_search_cmumps_c+set}" = set; then :
+if ${ac_cv_search_cmumps_c+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -20195,11 +21036,11 @@ for ac_lib in '' `echo $MUMPS_LIBS | sed -e 's/^-l//g;s/ -l/ /g'`; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_cmumps_c+set}" = set; then :
+  if ${ac_cv_search_cmumps_c+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_cmumps_c+set}" = set; then :
+if ${ac_cv_search_cmumps_c+:} false; then :
 
 else
   ac_cv_search_cmumps_c=no
@@ -20215,7 +21056,7 @@ if test "$ac_res" != no; then :
   usemumps="yes"
 else
   if test "x$acx_mumps_ok" = "xyes"; then
-     as_fn_error "The function cmumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
+     as_fn_error $? "The function cmumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
     fi;
     usemumps="no"
 
@@ -20223,7 +21064,7 @@ fi
 
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing zmumps_c" >&5
 $as_echo_n "checking for library containing zmumps_c... " >&6; }
-if test "${ac_cv_search_zmumps_c+set}" = set; then :
+if ${ac_cv_search_zmumps_c+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -20265,11 +21106,11 @@ for ac_lib in '' `echo $MUMPS_LIBS | sed -e 's/^-l//g;s/ -l/ /g'`; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_zmumps_c+set}" = set; then :
+  if ${ac_cv_search_zmumps_c+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_zmumps_c+set}" = set; then :
+if ${ac_cv_search_zmumps_c+:} false; then :
 
 else
   ac_cv_search_zmumps_c=no
@@ -20285,223 +21126,7 @@ if test "$ac_res" != no; then :
   usemumps="yes"
 else
   if test "x$acx_mumps_ok" = "xyes"; then
-     as_fn_error "The function zmumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
-    fi;
-    usemumps="no"
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for smumps_c in -lsmumps" >&5
-$as_echo_n "checking for smumps_c in -lsmumps... " >&6; }
-if test "${ac_cv_lib_smumps_smumps_c+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsmumps  $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 smumps_c ();
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-return smumps_c ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  ac_cv_lib_smumps_smumps_c=yes
-else
-  ac_cv_lib_smumps_smumps_c=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_smumps_smumps_c" >&5
-$as_echo "$ac_cv_lib_smumps_smumps_c" >&6; }
-if test "x$ac_cv_lib_smumps_smumps_c" = x""yes; then :
-  usemumps="yes"
-else
-  if test "x$acx_mumps_ok" = "xyes"; then
-     as_fn_error "Couldn't find a smumps library supporting the smumps_c function." "$LINENO" 5;
-    fi;
-    usemumps="no"
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dmumps_c in -ldmumps" >&5
-$as_echo_n "checking for dmumps_c in -ldmumps... " >&6; }
-if test "${ac_cv_lib_dmumps_dmumps_c+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldmumps  $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 dmumps_c ();
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-return dmumps_c ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  ac_cv_lib_dmumps_dmumps_c=yes
-else
-  ac_cv_lib_dmumps_dmumps_c=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_dmumps_dmumps_c" >&5
-$as_echo "$ac_cv_lib_dmumps_dmumps_c" >&6; }
-if test "x$ac_cv_lib_dmumps_dmumps_c" = x""yes; then :
-  usemumps="yes"
-else
-  if test "x$acx_mumps_ok" = "xyes"; then
-     as_fn_error "Couldn't find a dmumps library supporting the dmumps_c function." "$LINENO" 5;
-    fi;
-    usemumps="no"
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cmumps_c in -lcmumps" >&5
-$as_echo_n "checking for cmumps_c in -lcmumps... " >&6; }
-if test "${ac_cv_lib_cmumps_cmumps_c+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcmumps  $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 cmumps_c ();
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-return cmumps_c ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  ac_cv_lib_cmumps_cmumps_c=yes
-else
-  ac_cv_lib_cmumps_cmumps_c=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_cmumps_cmumps_c" >&5
-$as_echo "$ac_cv_lib_cmumps_cmumps_c" >&6; }
-if test "x$ac_cv_lib_cmumps_cmumps_c" = x""yes; then :
-  usemumps="yes"
-else
-  if test "x$acx_mumps_ok" = "xyes"; then
-     as_fn_error "Couldn't find a cmumps library supporting the cmumps_c function." "$LINENO" 5;
-    fi;
-    usemumps="no"
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for zmumps_c in -lzmumps" >&5
-$as_echo_n "checking for zmumps_c in -lzmumps... " >&6; }
-if test "${ac_cv_lib_zmumps_zmumps_c+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lzmumps  $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 zmumps_c ();
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-return zmumps_c ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  ac_cv_lib_zmumps_zmumps_c=yes
-else
-  ac_cv_lib_zmumps_zmumps_c=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_zmumps_zmumps_c" >&5
-$as_echo "$ac_cv_lib_zmumps_zmumps_c" >&6; }
-if test "x$ac_cv_lib_zmumps_zmumps_c" = x""yes; then :
-  usemumps="yes"
-else
-  if test "x$acx_mumps_ok" = "xyes"; then
-     as_fn_error "Couldn't find a zmumps library supporting the zmumps_c function." "$LINENO" 5;
+     as_fn_error $? "The function zmumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
     fi;
     usemumps="no"
 
@@ -20511,15 +21136,14 @@ fi
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
  usemumps="yes"
 else
   if test "x$acx_mumps_ok" = "xyes"; then
-     as_fn_error "header file dmumps_c.h not found." "$LINENO" 5;
+     as_fn_error $? "header file dmumps_c.h not found." "$LINENO" 5;
     fi;
     usemumps="no"
 
@@ -20563,14 +21187,29 @@ if test $paralevel -ge 1; then
 fi;
 
 usemetis="no"
-METIS_LIBS=""
-
 if test $paralevel -ge 2; then
   usemetis="yes"
-  METIS_LIBS=""
+fi;
+
+METIS_LIBS=""
+# Check whether --enable-metis was given.
+if test "${enable_metis+set}" = set; then :
+  enableval=$enable_metis; case $enableval in
+   yes | "") usemetis="yes" ;;
+   no) usemetis="no"; METIS_LIBS="" ;;
+  esac
+else
+  usemetis="test"
+
+fi
+
+
+if test "x$usemetis" = "xno"; then
+  echo "Building without METIS";
+else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SelectQueueOneWay in -lmetis" >&5
 $as_echo_n "checking for SelectQueueOneWay in -lmetis... " >&6; }
-if test "${ac_cv_lib_metis_SelectQueueOneWay+set}" = set; then :
+if ${ac_cv_lib_metis_SelectQueueOneWay+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -20612,20 +21251,25 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_metis_SelectQueueOneWay" >&5
 $as_echo "$ac_cv_lib_metis_SelectQueueOneWay" >&6; }
-if test "x$ac_cv_lib_metis_SelectQueueOneWay" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBMETIS 1
-_ACEOF
-
-  LIBS="-lmetis $LIBS"
-
+if test "x$ac_cv_lib_metis_SelectQueueOneWay" = xyes; then :
+  usemetis="yes"
+else
+  usemetis="no"
 fi
 
 
   if test "x$usemetis" = "xyes"; then
     METIS_LIBS="-lmetis"
+    LIBS="$LIBS $METIS_LIBS"
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_METIS 1
+_ACEOF
+
+    echo "Building with METIS (use --enable-metis=no to disable it)"
+  else
+    echo "Building without METIS";
   fi;
-  echo "Building with METIS (use --enable-metis=no to disable it)"
 fi;
 
  if test x$usemetis = xyes; then
@@ -20650,7 +21294,7 @@ if test $paralevel -ge 2; then
   MPI_LIBS=""
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Test in -lmpich" >&5
 $as_echo_n "checking for MPI_Test in -lmpich... " >&6; }
-if test "${ac_cv_lib_mpich_MPI_Test+set}" = set; then :
+if ${ac_cv_lib_mpich_MPI_Test+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -20692,7 +21336,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpich_MPI_Test" >&5
 $as_echo "$ac_cv_lib_mpich_MPI_Test" >&6; }
-if test "x$ac_cv_lib_mpich_MPI_Test" = x""yes; then :
+if test "x$ac_cv_lib_mpich_MPI_Test" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBMPICH 1
 _ACEOF
@@ -20703,7 +21347,7 @@ fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Test in -lmpichcxx" >&5
 $as_echo_n "checking for MPI_Test in -lmpichcxx... " >&6; }
-if test "${ac_cv_lib_mpichcxx_MPI_Test+set}" = set; then :
+if ${ac_cv_lib_mpichcxx_MPI_Test+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -20739,72 +21383,24 @@ if ac_fn_cxx_try_link "$LINENO"; then :
 else
   ac_cv_lib_mpichcxx_MPI_Test=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_mpichcxx_MPI_Test" >&5
-$as_echo "$ac_cv_lib_mpichcxx_MPI_Test" >&6; }
-if test "x$ac_cv_lib_mpichcxx_MPI_Test" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBMPICHCXX 1
-_ACEOF
-
-  LIBS="-lmpichcxx $LIBS"
-
-fi
-
-  for ac_header in mpi/mpi.h
-do :
-  ac_fn_cxx_check_header_mongrel "$LINENO" "mpi/mpi.h" "ac_cv_header_mpi_mpi_h" "$ac_includes_default"
-if test "x$ac_cv_header_mpi_mpi_h" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_MPI_MPI_H 1
-_ACEOF
- usempi="yes"
-else
-
-     for ac_header in mpi.h
-do :
-  ac_fn_cxx_check_header_mongrel "$LINENO" "mpi.h" "ac_cv_header_mpi_h" "$ac_includes_default"
-if test "x$ac_cv_header_mpi_h" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_MPI_H 1
-_ACEOF
- usempi="yes"
-else
-
-       for ac_header in mpich2/mpi.h
-do :
-  ac_fn_cxx_check_header_mongrel "$LINENO" "mpich2/mpi.h" "ac_cv_header_mpich2_mpi_h" "$ac_includes_default"
-if test "x$ac_cv_header_mpich2_mpi_h" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_MPICH2_MPI_H 1
-_ACEOF
- usempi="yes"
-else
-
-         if test "x$usempi" = "xyes"; then
-     	   as_fn_error "header file mpi.h not found." "$LINENO" 5;
-	   usempi="no"
-   	 fi;
-
-fi
-
-done
-
-
+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_mpichcxx_MPI_Test" >&5
+$as_echo "$ac_cv_lib_mpichcxx_MPI_Test" >&6; }
+if test "x$ac_cv_lib_mpichcxx_MPI_Test" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMPICHCXX 1
+_ACEOF
 
-done
-
+  LIBS="-lmpichcxx $LIBS"
 
 fi
 
-done
-
+  CPPFLAGS="$CPPFLAGS -DGETFEM_HAVE_MPI_MPI_H=1 -I/usr/include/mpi"
   if test "x$usempi" = "xyes"; then
-    MPI_LIBS="-lmpich -lmpichcxx"
+    MPI_LIBS="-lmpi -lmpi++"
   fi;
   echo "Building with MPI (use --enable-mpi=no to disable it)"
 fi;
@@ -20850,7 +21446,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgetrf_ in -llapack" >&5
 $as_echo_n "checking for dgetrf_ in -llapack... " >&6; }
-if test "${ac_cv_lib_lapack_dgetrf_+set}" = set; then :
+if ${ac_cv_lib_lapack_dgetrf_+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -20892,7 +21488,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lapack_dgetrf_" >&5
 $as_echo "$ac_cv_lib_lapack_dgetrf_" >&6; }
-if test "x$ac_cv_lib_lapack_dgetrf_" = x""yes; then :
+if test "x$ac_cv_lib_lapack_dgetrf_" = xyes; then :
   acx_lapack_ok=yes; LAPACK_LIBS="-llapack "
 fi
 
@@ -20909,60 +21505,6 @@ if test "$MPI_CFLAGS" -o "$MPI_LIBS"; then
   echo "You are using MPI! Trying to build a parallelised version of getfem (require METIS)"
     LIBS="$LIBS $MPI_LIBS -lmetis"
   CXXFLAGS="$CXXFLAGS $MPI_CFLAGS -DGETFEM_PARA_LEVEL=2"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for METIS_PartMeshNodal in -lmetis" >&5
-$as_echo_n "checking for METIS_PartMeshNodal in -lmetis... " >&6; }
-if test "${ac_cv_lib_metis_METIS_PartMeshNodal+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lmetis  $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 METIS_PartMeshNodal ();
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-return METIS_PartMeshNodal ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  ac_cv_lib_metis_METIS_PartMeshNodal=yes
-else
-  ac_cv_lib_metis_METIS_PartMeshNodal=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_metis_METIS_PartMeshNodal" >&5
-$as_echo "$ac_cv_lib_metis_METIS_PartMeshNodal" >&6; }
-if test "x$ac_cv_lib_metis_METIS_PartMeshNodal" = x""yes; then :
-  metis_ok="yes"
-else
-  metis_ok="no"
-fi
-
-  if test "x$metis_ok" = "xno"; then
-    as_fn_error "Parallel getfem requires the METIS ( http://www-users.cs.umn.edu/~karypis/metis/metis/ ) library
- ----------> Please add the path to libmetis.a to the MPI_LIBS variable." "$LINENO" 5
-  fi
 
 
 fi
@@ -20973,7 +21515,7 @@ fi
 for ac_header in sys/times.h
 do :
   ac_fn_cxx_check_header_mongrel "$LINENO" "sys/times.h" "ac_cv_header_sys_times_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_times_h" = x""yes; then :
+if test "x$ac_cv_header_sys_times_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_SYS_TIMES_H 1
 _ACEOF
@@ -20987,7 +21529,7 @@ done
 for ac_header in cxxabi.h
 do :
   ac_fn_cxx_check_header_mongrel "$LINENO" "cxxabi.h" "ac_cv_header_cxxabi_h" "$ac_includes_default"
-if test "x$ac_cv_header_cxxabi_h" = x""yes; then :
+if test "x$ac_cv_header_cxxabi_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_CXXABI_H 1
 _ACEOF
@@ -20998,7 +21540,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __PRETTY_FUNCTION__" >&5
 $as_echo_n "checking for __PRETTY_FUNCTION__... " >&6; }
-if test "${ac_cv_have_pretty_function+set}" = set; then :
+if ${ac_cv_have_pretty_function+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -21042,7 +21584,7 @@ fi;
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for execinfo.h and backtrace" >&5
 $as_echo_n "checking for execinfo.h and backtrace... " >&6; }
-if test "${ac_cv_have_backtrace+set}" = set; then :
+if ${ac_cv_have_backtrace+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -21084,7 +21626,7 @@ fi;
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fenv.h and feenableexcept" >&5
 $as_echo_n "checking for fenv.h and feenableexcept... " >&6; }
-if test "${ac_cv_have_feenableexcept+set}" = set; then :
+if ${ac_cv_have_feenableexcept+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -21150,7 +21692,7 @@ if test "${enable_boost+set}" = set; then :
   enableval=$enable_boost; case "${enableval}" in
   yes) useboost=YES ;;
   no)  useboost=NO ;;
-  *) as_fn_error "bad value ${enableval} for --enable-boost" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-boost" "$LINENO" 5 ;;
  esac
 else
   useboost=NO
@@ -21180,7 +21722,7 @@ if test "${enable_matlab+set}" = set; then :
   enableval=$enable_matlab; case "${enableval}" in
    yes) usematlab=YES ;;
    no)  usematlab=NO ;;
-   *) as_fn_error "bad value ${enableval} for --enable-matlab" "$LINENO" 5 ;;
+   *) as_fn_error $? "bad value ${enableval} for --enable-matlab" "$LINENO" 5 ;;
  esac
 else
   usematlab=NO
@@ -21202,7 +21744,7 @@ if test "${enable_python+set}" = set; then :
   enableval=$enable_python; case "${enableval}" in
    yes) usepython=YES ;;
    no)  usepython=NO ;;
-   *) as_fn_error "bad value ${enableval} for --enable-python" "$LINENO" 5 ;;
+   *) as_fn_error $? "bad value ${enableval} for --enable-python" "$LINENO" 5 ;;
  esac
 else
   usepython=YES
@@ -21216,7 +21758,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_MEX+set}" = set; then :
+if ${ac_cv_prog_MEX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$MEX"; then
@@ -21259,7 +21801,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_MEX+set}" = set; then :
+if ${ac_cv_prog_MEX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$MEX"; then
@@ -21297,7 +21839,7 @@ done
 
     if test x"$MEX" = x""; then
       if test x$usematlab = xYES; then
-        as_fn_error "Impossible to build the matlab interface without mex -- specify its full path with the MEX=/path/to/mex option, or use --enable-matlab-interface=no" "$LINENO" 5
+        as_fn_error $? "Impossible to build the matlab interface without mex -- specify its full path with the MEX=/path/to/mex option, or use --enable-matlab-interface=no" "$LINENO" 5
         exit 1
       fi
     else
@@ -21323,7 +21865,7 @@ done
     fi
   else
           if $(echo "" | $MEX 2>&1 | grep 'This is .*TeX'); then
-	  as_fn_error "the mex binary which is in the PATH appears to be part of LaTeX, not matlab !! run ./configure MEX=/path/to/matlab/mex" "$LINENO" 5;
+	  as_fn_error $? "the mex binary which is in the PATH appears to be part of LaTeX, not matlab !! run ./configure MEX=/path/to/matlab/mex" "$LINENO" 5;
      fi;
      MATLAB_ROOT=`$MEX -v 2>&1 | grep "MATLAB " | awk '{print $4}'|sed -e '2,$d'`
      MATLAB_INC_DIR=$MATLAB_ROOT/extern/include
@@ -21457,6 +21999,8 @@ if test x$usepython = xYES; then
 
 
 
+
+
         if test -n "$PYTHON"; then
       # If the user set $PYTHON, use it and don't search something else.
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version >= 2.2" >&5
@@ -21478,7 +22022,7 @@ sys.exit(sys.hexversion < minverhex)"
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 else
-  as_fn_error "too old" "$LINENO" 5
+  as_fn_error $? "too old" "$LINENO" 5
 fi
       am_display_PYTHON=$PYTHON
     else
@@ -21486,11 +22030,11 @@ fi
       # VERSION.
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.2" >&5
 $as_echo_n "checking for a Python interpreter with version >= 2.2... " >&6; }
-if test "${am_cv_pathless_PYTHON+set}" = set; then :
+if ${am_cv_pathless_PYTHON+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-	for am_cv_pathless_PYTHON in python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do
+	for am_cv_pathless_PYTHON in python python2 python3 python3.2 python3.1 python3.0 python2.7  python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do
 	  test "$am_cv_pathless_PYTHON" = none && break
 	  prog="import sys
 # split strings by '.' and convert to numeric.  Append some zeros
@@ -21520,7 +22064,7 @@ $as_echo "$am_cv_pathless_PYTHON" >&6; }
 set dummy $am_cv_pathless_PYTHON; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_PYTHON+set}" = set; then :
+if ${ac_cv_path_PYTHON+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $PYTHON in
@@ -21568,7 +22112,7 @@ fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5
 $as_echo_n "checking for $am_display_PYTHON version... " >&6; }
-if test "${am_cv_python_version+set}" = set; then :
+if ${am_cv_python_version+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"`
@@ -21587,7 +22131,7 @@ $as_echo "$am_cv_python_version" >&6; }
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5
 $as_echo_n "checking for $am_display_PYTHON platform... " >&6; }
-if test "${am_cv_python_platform+set}" = set; then :
+if ${am_cv_python_platform+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`
@@ -21599,9 +22143,9 @@ $as_echo "$am_cv_python_platform" >&6; }
 
 
 
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5
 $as_echo_n "checking for $am_display_PYTHON script directory... " >&6; }
-if test "${am_cv_python_pythondir+set}" = set; then :
+if ${am_cv_python_pythondir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$prefix" = xNONE
@@ -21610,8 +22154,7 @@ else
      else
        am_py_prefix=$prefix
      fi
-     am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null ||
-     echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+     am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null`
      case $am_cv_python_pythondir in
      $am_py_prefix*)
        am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
@@ -21637,9 +22180,9 @@ $as_echo "$am_cv_python_pythondir" >&6; }
   pkgpythondir=\${pythondir}/$PACKAGE
 
 
-            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5
 $as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; }
-if test "${am_cv_python_pyexecdir+set}" = set; then :
+if ${am_cv_python_pyexecdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$exec_prefix" = xNONE
@@ -21648,8 +22191,7 @@ else
      else
        am_py_exec_prefix=$exec_prefix
      fi
-     am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null ||
-     echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+     am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null`
      case $am_cv_python_pyexecdir in
      $am_py_exec_prefix*)
        am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
@@ -21703,7 +22245,7 @@ if test x$usepython = xYES; then
 set dummy python$PYTHON_VERSION; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_PYTHON+set}" = set; then :
+if ${ac_cv_path_PYTHON+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $PYTHON in
@@ -21740,7 +22282,7 @@ fi
 
 
 	if test -z "$PYTHON"; then
-	   as_fn_error "Cannot find python$PYTHON_VERSION in your system path" "$LINENO" 5
+	   as_fn_error $? "Cannot find python$PYTHON_VERSION in your system path" "$LINENO" 5
 	fi
 
 	#
@@ -21757,7 +22299,7 @@ $as_echo_n "checking for a version of Python >= '2.1.0'... " >&6; }
 $as_echo "no" >&6; }
 			{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "
+as_fn_error $? "
 This version of the AC_PYTHON_DEVEL macro
 doesn't work properly with versions of Python before
 2.1.0. You may need to re-run configure, setting the
@@ -21766,7 +22308,7 @@ PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
 Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
 to something else than an empty string.
 
-See \`config.log' for more details." "$LINENO" 5; }		else
+See \`config.log' for more details" "$LINENO" 5; }		else
 			{ $as_echo "$as_me:${as_lineno-$LINENO}: result: skip at user request" >&5
 $as_echo "skip at user request" >&6; }
 		fi
@@ -21790,7 +22332,7 @@ $as_echo "yes" >&6; }
 		else
 			{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-			as_fn_error "this package requires Python .
+			as_fn_error $? "this package requires Python .
 If you have it installed, but it isn't the default Python
 interpreter in your system path, please pass the PYTHON_VERSION
 variable to configure. See \`\`configure --help'' for reference.
@@ -21810,7 +22352,7 @@ $as_echo "yes" >&6; }
 	else
 		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-		as_fn_error "cannot import Python module \"distutils\".
+		as_fn_error $? "cannot import Python module \"distutils\".
 Please check your Python installation. The error was:
 $ac_distutils_result" "$LINENO" 5
 	fi
@@ -21921,7 +22463,7 @@ if test "${enable_scilab+set}" = set; then :
   enableval=$enable_scilab; case "${enableval}" in
   	 yes) usescilab=YES ;;
    	 no)  usescilab=NO ;;
-   	 *) as_fn_error "bad value ${enableval} for --enable-scilab" "$LINENO" 5 ;;
+   	 *) as_fn_error $? "bad value ${enableval} for --enable-scilab" "$LINENO" 5 ;;
    esac
 else
   usescilab=NO
@@ -21981,7 +22523,7 @@ fi
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: Scilab binary program was found in $with_scilab_prefix" >&5
 $as_echo "Scilab binary program was found in $with_scilab_prefix" >&6; }
       else
-        as_fn_error "Scilab binary program was not found in $with_scilab_prefix/bin" "$LINENO" 5
+        as_fn_error $? "Scilab binary program was not found in $with_scilab_prefix/bin" "$LINENO" 5
       fi
       SCILAB_EXE="$with_scilab_prefix/bin/scilab"
       $as_echo "#define HAVE_SCILAB 1" >>confdefs.h
@@ -21991,7 +22533,7 @@ $as_echo "Scilab binary program was found in $with_scilab_prefix" >&6; }
 set dummy scilab; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_has_scilab+set}" = set; then :
+if ${ac_cv_prog_has_scilab+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$has_scilab"; then
@@ -22026,7 +22568,7 @@ fi
 
 
       if test x$has_scilab = xno; then
-        as_fn_error "Scilab binary program was found in your PATH, your PATH is $PATH" "$LINENO" 5
+        as_fn_error $? "Scilab binary program was not found in your PATH, your PATH is $PATH" "$LINENO" 5
       fi
       SCILAB_EXE="scilab"
       $as_echo "#define HAVE_SCILAB 1" >>confdefs.h
@@ -22068,15 +22610,15 @@ fi
 
       if test $SCILAB_VERSION_MAJOR -lt $REQUIRED_SCILAB_MAJOR
       then
-        as_fn_error "scilab major version does not match" "$LINENO" 5
+        as_fn_error $? "scilab major version does not match" "$LINENO" 5
       else
         if test $SCILAB_VERSION_MINOR -lt $REQUIRED_SCILAB_MINOR
         then
-          as_fn_error "scilab minor version does not match" "$LINENO" 5
+          as_fn_error $? "scilab minor version does not match" "$LINENO" 5
         else
           if test $SCILAB_VERSION_MICRO -lt $REQUIRED_SCILAB_MICRO
           then
-            as_fn_error "scilab micro version does not match" "$LINENO" 5
+            as_fn_error $? "scilab micro version does not match" "$LINENO" 5
           fi
         fi
       fi
@@ -22127,6 +22669,16 @@ then
 fi
 
 
+# Check whether --with-scilab-toolbox-dir was given.
+if test "${with_scilab_toolbox_dir+set}" = set; then :
+  withval=$with_scilab_toolbox_dir; SCILAB_TOOLBOX_DIR="$withval"
+else
+  SCILAB_TOOLBOX_DIR="$GFPREFIX/getfem_toolbox"
+fi
+
+
+
+
 
 
 IM_METHODS=`$srcdir/bin/extract_doc $srcdir/interface/src cubature`
@@ -22134,6 +22686,7 @@ IM_METHODS_LOC=`$srcdir/bin/extract_doc $srcdir/interface/src cubature_loc`
 
 
 
+
 ac_config_files="$ac_config_files Makefile m4/Makefile cubature/Makefile $SUPERLU_MAKEFILE doc/Makefile doc/sphinx/Makefile src/Makefile tests/Makefile tests-2.0/Makefile contrib/Makefile contrib/icare/Makefile contrib/delaminated_crack/Makefile contrib/static_friction/Makefile contrib/bimaterial_crack_test/Makefile contrib/bimat_contact_crack_test/Makefile contrib/xfem_stab_unilat_contact/Makefile contrib/mixed_elastostatic/Makefile contrib/contact_grd_trans/Makefile contrib/mixed_dynamic_friction/Makefile contrib/xfem_large_strain/Makefile contrib/xfem_contact/Makefile contrib/crack_plate/Makefile contrib/inter_element_test/Makefile contrib/aposteriori/Makefile contrib/static_contact_gears/Makefile bin/Makefile interface/Makefile interface/src/Makefile interface/src/matlab/Makefile interface/src/matlab/private/Makefile interface/src/python/Makefile interface/src/python/setup.py interface/src/scilab/Makefile interface/src/scilab/sci_gateway/c/builder_gateway_c.sce interface/tests/Makefile interface/tests/meshes/Makefile interface/tests/matlab/Makefile interface/tests/matlab/private/Makefile interface/tests/python/Makefile getfem-config getfem-config-notinstalled gmm-config"
 
 
@@ -22146,6 +22699,7 @@ DEFS=-DHAVE_CONFIG_H
 
 ac_libobjs=
 ac_ltlibobjs=
+U=
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
@@ -22169,67 +22723,63 @@ else
 fi
 
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error "conditional \"AMDEP\" was never defined.
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USEBLASLITE_TRUE}" && test -z "${USEBLASLITE_FALSE}"; then
-  as_fn_error "conditional \"USEBLASLITE\" was never defined.
+  as_fn_error $? "conditional \"USEBLASLITE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${QHULL_TRUE}" && test -z "${QHULL_FALSE}"; then
-  as_fn_error "conditional \"QHULL\" was never defined.
+  as_fn_error $? "conditional \"QHULL\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${MUPARSER_TRUE}" && test -z "${MUPARSER_FALSE}"; then
-  as_fn_error "conditional \"MUPARSER\" was never defined.
+  as_fn_error $? "conditional \"MUPARSER\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${MUMPS_TRUE}" && test -z "${MUMPS_FALSE}"; then
-  as_fn_error "conditional \"MUMPS\" was never defined.
+  as_fn_error $? "conditional \"MUMPS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${METIS_TRUE}" && test -z "${METIS_FALSE}"; then
-  as_fn_error "conditional \"METIS\" was never defined.
+  as_fn_error $? "conditional \"METIS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${MPI_TRUE}" && test -z "${MPI_FALSE}"; then
-  as_fn_error "conditional \"MPI\" was never defined.
+  as_fn_error $? "conditional \"MPI\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${BUILDMEX_TRUE}" && test -z "${BUILDMEX_FALSE}"; then
-  as_fn_error "conditional \"BUILDMEX\" was never defined.
+  as_fn_error $? "conditional \"BUILDMEX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_MINGW_MEX_TRUE}" && test -z "${USE_MINGW_MEX_FALSE}"; then
-  as_fn_error "conditional \"USE_MINGW_MEX\" was never defined.
+  as_fn_error $? "conditional \"USE_MINGW_MEX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${BUILDMEXRPC_TRUE}" && test -z "${BUILDMEXRPC_FALSE}"; then
-  as_fn_error "conditional \"BUILDMEXRPC\" was never defined.
+  as_fn_error $? "conditional \"BUILDMEXRPC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${BUILDPYTHON_TRUE}" && test -z "${BUILDPYTHON_FALSE}"; then
-  as_fn_error "conditional \"BUILDPYTHON\" was never defined.
+  as_fn_error $? "conditional \"BUILDPYTHON\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${BUILDSCILAB_TRUE}" && test -z "${BUILDSCILAB_FALSE}"; then
-  as_fn_error "conditional \"BUILDSCILAB\" was never defined.
+  as_fn_error $? "conditional \"BUILDSCILAB\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -22330,6 +22880,7 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -22375,19 +22926,19 @@ export LANGUAGE
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
 # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
 # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
+# script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -22583,7 +23134,7 @@ $as_echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -22636,8 +23187,8 @@ 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 getfem $as_me 4.1.1, which was
-generated by GNU Autoconf 2.65.  Invocation command line was
+This file was extended by getfem $as_me 4.2, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -22702,11 +23253,11 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-getfem config.status 4.1.1
-configured by $0, generated by GNU Autoconf 2.65,
+getfem config.status 4.2
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -22724,11 +23275,16 @@ ac_need_defaults=:
 while test $# != 0
 do
   case $1 in
-  --*=*)
+  --*=?*)
     ac_option=`expr "X$1" : 'X\([^=]*\)='`
     ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
     ac_shift=:
     ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
   *)
     ac_option=$1
     ac_optarg=$2
@@ -22750,6 +23306,7 @@ do
     $ac_shift
     case $ac_optarg in
     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
     esac
     as_fn_append CONFIG_FILES " '$ac_optarg'"
     ac_need_defaults=false;;
@@ -22762,7 +23319,7 @@ do
     ac_need_defaults=false;;
   --he | --h)
     # Conflict between --help and --header
-    as_fn_error "ambiguous option: \`$1'
+    as_fn_error $? "ambiguous option: \`$1'
 Try \`$0 --help' for more information.";;
   --help | --hel | -h )
     $as_echo "$ac_cs_usage"; exit ;;
@@ -22771,7 +23328,7 @@ Try \`$0 --help' for more information.";;
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) as_fn_error "unrecognized option: \`$1'
+  -*) as_fn_error $? "unrecognized option: \`$1'
 Try \`$0 --help' for more information." ;;
 
   *) as_fn_append ac_config_targets " $1"
@@ -22826,231 +23383,256 @@ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 sed_quote_subst='$sed_quote_subst'
 double_quote_subst='$double_quote_subst'
 delay_variable_subst='$delay_variable_subst'
-enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
-enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
-macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
-macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
-pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
-enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
-host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
-host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
-host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
-build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
-build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
-build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
-SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
-Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
-GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
-EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
-FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
-LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
-NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
-LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
-max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
-ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
-exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
-lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
-lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
-lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
-reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
-reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
-deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
-file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
-AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
-AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
-RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
-old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
-CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
-GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
-SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
-ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
-MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
-need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
-DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
-NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
-LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
-libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
-shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
-variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
-need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
-version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
-runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
-libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
-soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
-old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
-striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
-predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
-LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-LD_FC='`$ECHO "X$LD_FC" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds_FC='`$ECHO "X$old_archive_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_FC='`$ECHO "X$compiler_FC" | $Xsed -e "$delay_single_quote_subst"`'
-GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-GCC_FC='`$ECHO "X$GCC_FC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag_FC='`$ECHO "X$lt_prog_compiler_no_builtin_flag_FC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl_FC='`$ECHO "X$lt_prog_compiler_wl_FC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic_FC='`$ECHO "X$lt_prog_compiler_pic_FC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static_FC='`$ECHO "X$lt_prog_compiler_static_FC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o_FC='`$ECHO "X$lt_cv_prog_compiler_c_o_FC" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc_FC='`$ECHO "X$archive_cmds_need_lc_FC" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes_FC='`$ECHO "X$enable_shared_with_static_runtimes_FC" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec_FC='`$ECHO "X$export_dynamic_flag_spec_FC" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec_FC='`$ECHO "X$whole_archive_flag_spec_FC" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object_FC='`$ECHO "X$compiler_needs_object_FC" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds_FC='`$ECHO "X$old_archive_from_new_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds_FC='`$ECHO "X$old_archive_from_expsyms_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_FC='`$ECHO "X$archive_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds_FC='`$ECHO "X$archive_expsym_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds_FC='`$ECHO "X$module_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds_FC='`$ECHO "X$module_expsym_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld_FC='`$ECHO "X$with_gnu_ld_FC" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag_FC='`$ECHO "X$allow_undefined_flag_FC" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag_FC='`$ECHO "X$no_undefined_flag_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_FC='`$ECHO "X$hardcode_libdir_flag_spec_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld_FC='`$ECHO "X$hardcode_libdir_flag_spec_ld_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator_FC='`$ECHO "X$hardcode_libdir_separator_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_FC='`$ECHO "X$hardcode_direct_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute_FC='`$ECHO "X$hardcode_direct_absolute_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L_FC='`$ECHO "X$hardcode_minus_L_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var_FC='`$ECHO "X$hardcode_shlibpath_var_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic_FC='`$ECHO "X$hardcode_automatic_FC" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath_FC='`$ECHO "X$inherit_rpath_FC" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs_FC='`$ECHO "X$link_all_deplibs_FC" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path_FC='`$ECHO "X$fix_srcfile_path_FC" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols_FC='`$ECHO "X$always_export_symbols_FC" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds_FC='`$ECHO "X$export_symbols_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms_FC='`$ECHO "X$exclude_expsyms_FC" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms_FC='`$ECHO "X$include_expsyms_FC" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds_FC='`$ECHO "X$prelink_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec_FC='`$ECHO "X$file_list_spec_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action_FC='`$ECHO "X$hardcode_action_FC" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs_FC='`$ECHO "X$compiler_lib_search_dirs_FC" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects_FC='`$ECHO "X$predep_objects_FC" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects_FC='`$ECHO "X$postdep_objects_FC" | $Xsed -e "$delay_single_quote_subst"`'
-predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-predeps_FC='`$ECHO "X$predeps_FC" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps_FC='`$ECHO "X$postdeps_FC" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path_FC='`$ECHO "X$compiler_lib_search_path_FC" | $Xsed -e "$delay_single_quote_subst"`'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+LD_FC='`$ECHO "$LD_FC" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_FC='`$ECHO "$reload_flag_FC" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_FC='`$ECHO "$reload_cmds_FC" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_FC='`$ECHO "$old_archive_cmds_FC" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_FC='`$ECHO "$compiler_FC" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_FC='`$ECHO "$GCC_FC" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_FC='`$ECHO "$lt_prog_compiler_no_builtin_flag_FC" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_FC='`$ECHO "$lt_prog_compiler_pic_FC" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_FC='`$ECHO "$lt_prog_compiler_wl_FC" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_FC='`$ECHO "$lt_prog_compiler_static_FC" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_FC='`$ECHO "$lt_cv_prog_compiler_c_o_FC" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_FC='`$ECHO "$archive_cmds_need_lc_FC" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_FC='`$ECHO "$enable_shared_with_static_runtimes_FC" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_FC='`$ECHO "$export_dynamic_flag_spec_FC" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_FC='`$ECHO "$whole_archive_flag_spec_FC" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_FC='`$ECHO "$compiler_needs_object_FC" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_FC='`$ECHO "$old_archive_from_new_cmds_FC" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_FC='`$ECHO "$old_archive_from_expsyms_cmds_FC" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_FC='`$ECHO "$archive_cmds_FC" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_FC='`$ECHO "$archive_expsym_cmds_FC" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_FC='`$ECHO "$module_cmds_FC" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_FC='`$ECHO "$module_expsym_cmds_FC" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_FC='`$ECHO "$with_gnu_ld_FC" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_FC='`$ECHO "$allow_undefined_flag_FC" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_FC='`$ECHO "$no_undefined_flag_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_FC='`$ECHO "$hardcode_libdir_flag_spec_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_FC='`$ECHO "$hardcode_libdir_separator_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_FC='`$ECHO "$hardcode_direct_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_FC='`$ECHO "$hardcode_direct_absolute_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_FC='`$ECHO "$hardcode_minus_L_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_FC='`$ECHO "$hardcode_shlibpath_var_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_FC='`$ECHO "$hardcode_automatic_FC" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_FC='`$ECHO "$inherit_rpath_FC" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_FC='`$ECHO "$link_all_deplibs_FC" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_FC='`$ECHO "$always_export_symbols_FC" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_FC='`$ECHO "$export_symbols_cmds_FC" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_FC='`$ECHO "$exclude_expsyms_FC" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_FC='`$ECHO "$include_expsyms_FC" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_FC='`$ECHO "$prelink_cmds_FC" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_FC='`$ECHO "$postlink_cmds_FC" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_FC='`$ECHO "$file_list_spec_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_FC='`$ECHO "$hardcode_action_FC" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_FC='`$ECHO "$compiler_lib_search_dirs_FC" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_FC='`$ECHO "$predep_objects_FC" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_FC='`$ECHO "$postdep_objects_FC" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_FC='`$ECHO "$predeps_FC" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_FC='`$ECHO "$postdeps_FC" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_FC='`$ECHO "$compiler_lib_search_path_FC" | $SED "$delay_single_quote_subst"`'
 
 LTCC='$LTCC'
 LTCFLAGS='$LTCFLAGS'
 compiler='$compiler_DEFAULT'
 
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
 # Quote evaled strings.
-for var in SED \
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
 GREP \
 EGREP \
 FGREP \
@@ -23063,8 +23645,13 @@ reload_flag \
 OBJDUMP \
 deplibs_check_method \
 file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
 AR \
 AR_FLAGS \
+archiver_list_spec \
 STRIP \
 RANLIB \
 CC \
@@ -23074,14 +23661,14 @@ lt_cv_sys_global_symbol_pipe \
 lt_cv_sys_global_symbol_to_cdecl \
 lt_cv_sys_global_symbol_to_c_name_address \
 lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-SHELL \
-ECHO \
+nm_file_list_spec \
 lt_prog_compiler_no_builtin_flag \
-lt_prog_compiler_wl \
 lt_prog_compiler_pic \
+lt_prog_compiler_wl \
 lt_prog_compiler_static \
 lt_cv_prog_compiler_c_o \
 need_locks \
+MANIFEST_TOOL \
 DSYMUTIL \
 NMEDIT \
 LIPO \
@@ -23095,9 +23682,7 @@ with_gnu_ld \
 allow_undefined_flag \
 no_undefined_flag \
 hardcode_libdir_flag_spec \
-hardcode_libdir_flag_spec_ld \
 hardcode_libdir_separator \
-fix_srcfile_path \
 exclude_expsyms \
 include_expsyms \
 file_list_spec \
@@ -23105,6 +23690,7 @@ variables_saved_for_relink \
 libname_spec \
 library_names_spec \
 soname_spec \
+install_override_mode \
 finish_eval \
 old_striplib \
 striplib \
@@ -23116,14 +23702,16 @@ postdeps \
 compiler_lib_search_path \
 LD_CXX \
 LD_FC \
+reload_flag_CXX \
+reload_flag_FC \
 compiler_CXX \
 compiler_FC \
 lt_prog_compiler_no_builtin_flag_CXX \
 lt_prog_compiler_no_builtin_flag_FC \
-lt_prog_compiler_wl_CXX \
-lt_prog_compiler_wl_FC \
 lt_prog_compiler_pic_CXX \
 lt_prog_compiler_pic_FC \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_wl_FC \
 lt_prog_compiler_static_CXX \
 lt_prog_compiler_static_FC \
 lt_cv_prog_compiler_c_o_CXX \
@@ -23142,12 +23730,8 @@ no_undefined_flag_CXX \
 no_undefined_flag_FC \
 hardcode_libdir_flag_spec_CXX \
 hardcode_libdir_flag_spec_FC \
-hardcode_libdir_flag_spec_ld_CXX \
-hardcode_libdir_flag_spec_ld_FC \
 hardcode_libdir_separator_CXX \
 hardcode_libdir_separator_FC \
-fix_srcfile_path_CXX \
-fix_srcfile_path_FC \
 exclude_expsyms_CXX \
 exclude_expsyms_FC \
 include_expsyms_CXX \
@@ -23166,9 +23750,9 @@ postdeps_CXX \
 postdeps_FC \
 compiler_lib_search_path_CXX \
 compiler_lib_search_path_FC; do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -23190,11 +23774,14 @@ module_cmds \
 module_expsym_cmds \
 export_symbols_cmds \
 prelink_cmds \
+postlink_cmds \
 postinstall_cmds \
 postuninstall_cmds \
 finish_cmds \
 sys_lib_search_path_spec \
 sys_lib_dlsearch_path_spec \
+reload_cmds_CXX \
+reload_cmds_FC \
 old_archive_cmds_CXX \
 old_archive_cmds_FC \
 old_archive_from_new_cmds_CXX \
@@ -23212,10 +23799,12 @@ module_expsym_cmds_FC \
 export_symbols_cmds_CXX \
 export_symbols_cmds_FC \
 prelink_cmds_CXX \
-prelink_cmds_FC; do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+prelink_cmds_FC \
+postlink_cmds_CXX \
+postlink_cmds_FC; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -23223,12 +23812,6 @@ prelink_cmds_FC; do
     esac
 done
 
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
-  ;;
-esac
-
 ac_aux_dir='$ac_aux_dir'
 xsi_shell='$xsi_shell'
 lt_shell_append='$lt_shell_append'
@@ -23308,7 +23891,7 @@ do
     "getfem-config-notinstalled") CONFIG_FILES="$CONFIG_FILES getfem-config-notinstalled" ;;
     "gmm-config") CONFIG_FILES="$CONFIG_FILES gmm-config" ;;
 
-  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
@@ -23331,9 +23914,10 @@ fi
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -23341,12 +23925,13 @@ $debug ||
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -23363,12 +23948,12 @@ if test "x$ac_cr" = x; then
 fi
 ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
 if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\r'
+  ac_cs_awk_cr='\\r'
 else
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -23377,18 +23962,18 @@ _ACEOF
   echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
   echo "_ACEOF"
 } >conf$$subs.sh ||
-  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   . ./conf$$subs.sh ||
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
 
   ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
   if test $ac_delim_n = $ac_delim_num; then
     break
   elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -23396,7 +23981,7 @@ done
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -23444,7 +24029,7 @@ t delim
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = ""
 
@@ -23476,21 +24061,29 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
-  || as_fn_error "could not setup config files machinery" "$LINENO" 5
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
 # trailing colons and then remove the whole line if VPATH becomes empty
 # (actually we leave an empty line to preserve line numbers).
 if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[	 ]*\):*/\1/
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
 s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
 s/^[^=]*=[	 ]*$//
 }'
 fi
@@ -23502,7 +24095,7 @@ fi # test -n "$CONFIG_FILES"
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -23514,11 +24107,11 @@ _ACEOF
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -23603,7 +24196,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
 _ACEOF
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error "could not setup config headers machinery" "$LINENO" 5
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
 fi # test -n "$CONFIG_HEADERS"
 
 
@@ -23616,7 +24209,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -23635,7 +24228,7 @@ do
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
 	 # because $ac_f cannot contain `:'.
@@ -23644,7 +24237,7 @@ do
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
@@ -23670,8 +24263,8 @@ $as_echo "$as_me: creating $ac_file" >&6;}
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -23807,23 +24400,24 @@ s&@INSTALL@&$ac_INSTALL&;t t
 s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&5
+which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&2;}
+which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
   :H)
   #
@@ -23832,21 +24426,21 @@ which seems to be undefined.  Please make sure it is defined." >&2;}
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
-	|| as_fn_error "could not create $ac_file" "$LINENO" 5
+      mv "$ac_tmp/config.h" "$ac_file" \
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error "could not create -" "$LINENO" 5
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
   fi
 # Compute "$ac_file"'s index in $config_headers.
 _am_arg="$ac_file"
@@ -23917,7 +24511,7 @@ if test ".$ac_prefix_conf_INP" = "."; then
    esac
 fi
 if test -z "$ac_prefix_conf_PKG" ; then
-   as_fn_error "no prefix for _PREFIX_PKG_CONFIG_H" "$LINENO" 5
+   as_fn_error $? "no prefix for _PREFIX_PKG_CONFIG_H" "$LINENO" 5
 else
   if test ! -f "$ac_prefix_conf_INP" ; then if test -f "$srcdir/$ac_prefix_conf_INP" ; then
      ac_prefix_conf_INP="$srcdir/$ac_prefix_conf_INP"
@@ -23976,7 +24570,7 @@ $as_echo X"$ac_prefix_conf_OUT" |
     fi
     cp conftest.prefix _configs.sed
   else
-    as_fn_error "input file $ac_prefix_conf_INP does not exist - skip generating $ac_prefix_conf_OUT" "$LINENO" 5
+    as_fn_error $? "input file $ac_prefix_conf_INP does not exist - skip generating $ac_prefix_conf_OUT" "$LINENO" 5
   fi
   rm -f conftest.*
 fi
@@ -24097,7 +24691,8 @@ $as_echo X"$file" |
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -24129,12 +24724,6 @@ available_tags="CXX FC "
 
 # ### BEGIN LIBTOOL CONFIG
 
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
 # Which release of libtool.m4 was used?
 macro_version=$macro_version
 macro_revision=$macro_revision
@@ -24142,9 +24731,24 @@ macro_revision=$macro_revision
 # What type of objects to build.
 pic_mode=$pic_mode
 
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
 # Whether or not to optimize for fast installation.
 fast_install=$enable_fast_install
 
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
 # The host system.
 host_alias=$host_alias
 host=$host
@@ -24194,9 +24798,11 @@ SP2NL=$lt_lt_SP2NL
 # turn newlines into spaces.
 NL2SP=$lt_lt_NL2SP
 
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
 
 # An object symbol dumper.
 OBJDUMP=$lt_OBJDUMP
@@ -24204,13 +24810,30 @@ OBJDUMP=$lt_OBJDUMP
 # Method to check whether dependent libraries are shared objects.
 deplibs_check_method=$lt_deplibs_check_method
 
-# Command to use when deplibs_check_method == "file_magic".
+# Command to use when deplibs_check_method = "file_magic".
 file_magic_cmd=$lt_file_magic_cmd
 
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
 # The archiver.
 AR=$lt_AR
+
+# Flags to create an archive.
 AR_FLAGS=$lt_AR_FLAGS
 
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
 # A symbol stripping program.
 STRIP=$lt_STRIP
 
@@ -24219,6 +24842,9 @@ RANLIB=$lt_RANLIB
 old_postinstall_cmds=$lt_old_postinstall_cmds
 old_postuninstall_cmds=$lt_old_postuninstall_cmds
 
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
 # A C compiler.
 LTCC=$lt_CC
 
@@ -24237,14 +24863,14 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
 # Transform the output of nm in a C name address pair when lib prefix is needed.
 global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
 
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
 
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
+# The root where to search for dependent libraries,and in which our libraries should be installed.
+lt_sysroot=$lt_sysroot
 
-# An echo program that does not interpret backslashes.
-ECHO=$lt_ECHO
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
 
 # Used to examine libraries when file_magic_cmd begins with "file".
 MAGIC_CMD=$MAGIC_CMD
@@ -24252,6 +24878,9 @@ MAGIC_CMD=$MAGIC_CMD
 # Must we lock files when doing compilation?
 need_locks=$lt_need_locks
 
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
 # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
 DSYMUTIL=$lt_DSYMUTIL
 
@@ -24308,6 +24937,9 @@ library_names_spec=$lt_library_names_spec
 # The coded name of the library, if different from the real name.
 soname_spec=$lt_soname_spec
 
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
 # Command to use after installation of a shared archive.
 postinstall_cmds=$lt_postinstall_cmds
 
@@ -24347,6 +24979,10 @@ striplib=$lt_striplib
 # The linker used to build libraries.
 LD=$lt_LD
 
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
 # Commands used to build an old-style archive.
 old_archive_cmds=$lt_old_archive_cmds
 
@@ -24359,12 +24995,12 @@ with_gcc=$GCC
 # Compiler flag to turn off builtin functions.
 no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
 
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
 # Additional compiler flags for building library objects.
 pic_flag=$lt_lt_prog_compiler_pic
 
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
 # Compiler flag to prevent dynamic linking.
 link_static_flag=$lt_lt_prog_compiler_static
 
@@ -24414,10 +25050,6 @@ no_undefined_flag=$lt_no_undefined_flag
 # This must work even if \$libdir does not exist
 hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
 
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking.  This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator
 
@@ -24451,9 +25083,6 @@ inherit_rpath=$inherit_rpath
 # Whether libtool must link a program against all its dependency libraries.
 link_all_deplibs=$link_all_deplibs
 
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
 # Set to "yes" if exported symbols are required.
 always_export_symbols=$always_export_symbols
 
@@ -24469,6 +25098,9 @@ include_expsyms=$lt_include_expsyms
 # Commands necessary for linking programs (against libraries) with templates.
 prelink_cmds=$lt_prelink_cmds
 
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
 # Specify filename containing input files.
 file_list_spec=$lt_file_list_spec
 
@@ -24515,212 +25147,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
   # text mode, it properly converts lines to CR/LF.  This bash problem
   # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $* ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[^=]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$@"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1+=\$2"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1=\$$1\$2"
-}
-
-_LT_EOF
-    ;;
-  esac
-
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  if test x"$xsi_shell" = xyes; then
+  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
+func_dirname ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_basename ()$/,/^} # func_basename /c\
+func_basename ()\
+{\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
+func_dirname_and_basename ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
+func_stripname ()\
+{\
+\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
+\    # positional parameters, so assign one to ordinary parameter first.\
+\    func_stripname_result=${3}\
+\    func_stripname_result=${func_stripname_result#"${1}"}\
+\    func_stripname_result=${func_stripname_result%"${2}"}\
+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
+func_split_long_opt ()\
+{\
+\    func_split_long_opt_name=${1%%=*}\
+\    func_split_long_opt_arg=${1#*=}\
+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
+func_split_short_opt ()\
+{\
+\    func_split_short_opt_arg=${1#??}\
+\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
+func_lo2o ()\
+{\
+\    case ${1} in\
+\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
+\      *)    func_lo2o_result=${1} ;;\
+\    esac\
+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_xform ()$/,/^} # func_xform /c\
+func_xform ()\
+{\
+    func_xform_result=${1%.*}.lo\
+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_arith ()$/,/^} # func_arith /c\
+func_arith ()\
+{\
+    func_arith_result=$(( $* ))\
+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_len ()$/,/^} # func_len /c\
+func_len ()\
+{\
+    func_len_result=${#1}\
+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  sed -e '/^func_append ()$/,/^} # func_append /c\
+func_append ()\
+{\
+    eval "${1}+=\\${2}"\
+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
+func_append_quoted ()\
+{\
+\    func_quote_for_eval "${2}"\
+\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
+fi
+
+
+   mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
 
@@ -24732,6 +25321,10 @@ _LT_EOF
 # The linker used to build libraries.
 LD=$lt_LD_CXX
 
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
 # Commands used to build an old-style archive.
 old_archive_cmds=$lt_old_archive_cmds_CXX
 
@@ -24744,12 +25337,12 @@ with_gcc=$GCC_CXX
 # Compiler flag to turn off builtin functions.
 no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
 
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_CXX
-
 # Additional compiler flags for building library objects.
 pic_flag=$lt_lt_prog_compiler_pic_CXX
 
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
 # Compiler flag to prevent dynamic linking.
 link_static_flag=$lt_lt_prog_compiler_static_CXX
 
@@ -24799,10 +25392,6 @@ no_undefined_flag=$lt_no_undefined_flag_CXX
 # This must work even if \$libdir does not exist
 hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
 
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking.  This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
-
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
 
@@ -24836,9 +25425,6 @@ inherit_rpath=$inherit_rpath_CXX
 # Whether libtool must link a program against all its dependency libraries.
 link_all_deplibs=$link_all_deplibs_CXX
 
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path_CXX
-
 # Set to "yes" if exported symbols are required.
 always_export_symbols=$always_export_symbols_CXX
 
@@ -24854,6 +25440,9 @@ include_expsyms=$lt_include_expsyms_CXX
 # Commands necessary for linking programs (against libraries) with templates.
 prelink_cmds=$lt_prelink_cmds_CXX
 
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_CXX
+
 # Specify filename containing input files.
 file_list_spec=$lt_file_list_spec_CXX
 
@@ -24885,6 +25474,10 @@ _LT_EOF
 # The linker used to build libraries.
 LD=$lt_LD_FC
 
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_FC
+reload_cmds=$lt_reload_cmds_FC
+
 # Commands used to build an old-style archive.
 old_archive_cmds=$lt_old_archive_cmds_FC
 
@@ -24897,12 +25490,12 @@ with_gcc=$GCC_FC
 # Compiler flag to turn off builtin functions.
 no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_FC
 
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_FC
-
 # Additional compiler flags for building library objects.
 pic_flag=$lt_lt_prog_compiler_pic_FC
 
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_FC
+
 # Compiler flag to prevent dynamic linking.
 link_static_flag=$lt_lt_prog_compiler_static_FC
 
@@ -24952,10 +25545,6 @@ no_undefined_flag=$lt_no_undefined_flag_FC
 # This must work even if \$libdir does not exist
 hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_FC
 
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking.  This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_FC
-
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator_FC
 
@@ -24989,9 +25578,6 @@ inherit_rpath=$inherit_rpath_FC
 # Whether libtool must link a program against all its dependency libraries.
 link_all_deplibs=$link_all_deplibs_FC
 
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path_FC
-
 # Set to "yes" if exported symbols are required.
 always_export_symbols=$always_export_symbols_FC
 
@@ -25007,6 +25593,9 @@ include_expsyms=$lt_include_expsyms_FC
 # Commands necessary for linking programs (against libraries) with templates.
 prelink_cmds=$lt_prelink_cmds_FC
 
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_FC
+
 # Specify filename containing input files.
 file_list_spec=$lt_file_list_spec_FC
 
@@ -25041,7 +25630,7 @@ _ACEOF
 ac_clean_files=$ac_clean_files_save
 
 test $ac_write_fail = 0 ||
-  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
 
 
 # configure is writing to config.log, and then calls config.status.
@@ -25062,7 +25651,7 @@ if test "$no_create" != yes; then
   exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit $?
+  $ac_cs_success || as_fn_exit 1
 fi
 if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
@@ -25086,59 +25675,68 @@ fi;
 
 
 
-echo ""
+echo
 echo "------------------------------------------------------------------------------"
-echo "If you want to build the shared library of getfem++, use --enable-shared"
-echo "(by default, only the static one will be built)"
+echo
+echo "Libraries Used:"
+echo "---------------"
+echo
+
+
 
 if test "x$useQDlib" = "xyes" ; then
-  echo "Using the QD library:"
-  echo "   high precision (${QD_PREC}-double precision) polynomials and integration methods are enabled";
+  echo "- QD library found. High precision (${QD_PREC}-double precision) polynomials"
+  echo "  and integration methods are enabled.";
+else
+  echo "- QD library not found (not recommended)."
 fi;
 
 if test "x$useQHULL" = "xyes"; then
-  echo "Using the qhull library for delaunay triangulations."
+  echo "- Qhull found. Using the Qhull library for delaunay triangulations."
 else
-  echo "Not using the qhull library. Mesh generation will be disabled."
+  echo "- Qhull not found. Mesh generation will be disabled."
 fi;
 
 if test "x$usemuparser" = "xyes"; then
-  echo "Using the muParser library for parsing mathematical expressions."
+  echo "- MuParser found. Used for parsing mathematical expressions."
 else
-  echo "Not using the muParser library. Parsing mathematical expressions will be disabled."
+  echo "- MuParser not found. Parsing mathematical expressions will be disabled."
 fi;
 
 if test "x$usemumps" = "xyes"; then
-  echo "Using the MUMPS library. A direct solver for large sparse linear systems."
+  echo "- Mumps found. A direct solver for large sparse linear systems."
 else
-  echo "Not using the MUMPS library. A direct solver for large sparse linear systems."
+  echo "- Mumps not found. Not using the MUMPS library for large sparse linear systems."
 fi;
 
-echo
+if test x"$acx_lapack_ok" = xyes; then
+  echo "- Lapack library found: $LAPACK_LIBS"
+else
+  echo "- Lapack library not found: generic (less effective) algorithms will be used"
+fi
+
 if test "x$HAVE_VENDOR_BLAS" = "x0"; then
-  echo "*** No usable blas library was found ***"
-  echo "A generic BLAS implementation will be used, however you should "
-  echo "consider installing a faster BLAS, such as ATLAS"
+  echo "- *** No usable blas library was found ***"
+  echo "  A generic BLAS implementation will be used, however you should "
+  echo "  consider installing a faster BLAS, such as ATLAS"
 else
-  echo "Link options for the BLAS library: $BLAS_LIBS"
+  echo "- BLAS library found. Link options: $BLAS_LIBS"
 fi;
-echo "You can give the location of your prefered blas library with either"
-echo "the --with-blas=<lib> option, or the BLAS_LIBS environment variable"
-echo 'for example: ./configure BLAS_LIBS="-L/usr/lib/sse2/atlas/ -lblas"'
+echo "  You can give the location of your prefered blas library with either"
+echo "  the --with-blas=<lib> option, or the BLAS_LIBS environment variable"
+echo '  for example: ./configure BLAS_LIBS="-L/usr/lib/sse2/atlas/ -lblas"'
+echo
 echo
 
-if test x"$acx_lapack_ok" = xyes; then
-  echo "Lapack library found : $LAPACK_LIBS"
-else
-  echo "No lapack library found : generic (less effective) algorithms will be used"
-fi
 
-echo "---------------------------------------"
+echo "-----------------------------------------------------------------------"
 echo "Ready to build getfem"
 echo "  building MATLAB interface: $usematlab"
 echo "  building PYTHON interface: $usepython (requires numpy and scipy)"
 echo "  building SCILAB interface: $usescilab"
-echo "---------------------------------------"
+echo "  If you want to build the shared library of getfem++, use --enable-shared"
+echo "  (by default, only the static one will be built)"
+echo "-----------------------------------------------------------------------"
 
 case $host in
   x86_64-*)
@@ -25152,3 +25750,5 @@ case $host in
         fi
   ;;
 esac
+
+echo $shared_mode
diff --git a/configure.in b/configure.in
index adbb334..79a731f 100644
--- a/configure.in
+++ b/configure.in
@@ -8,10 +8,10 @@ dnl thus, updating cache ./config.cache avoided.
 define([AC_CACHE_LOAD], )dnl
 define([AC_CACHE_SAVE], )dnl
 
-AC_INIT(getfem, 4.1.1)
+AC_INIT(getfem, 4.2)
 MAJOR_VERSION="4"
-MINOR_VERSION="1"
-PATCH_VERSION="1"
+MINOR_VERSION="2"
+PATCH_VERSION="0"
 
 AC_CONFIG_SRCDIR([install-sh])
 AC_CONFIG_MACRO_DIR([m4])
@@ -171,20 +171,10 @@ dnl ------------------------------------------------------------------------
 dnl   init libtools for shared libraries
 dnl ------------------------------------------------------------------------
 
-dnl AC_DISABLE_FAST_INSTALL
-AM_DISABLE_SHARED
-AM_ENABLE_STATIC
-
-dnl always build with -fPIC so that the matlab and python interface
-dnl can be run on x86_64 platforms
-dnl unfortunately , it does not work... I HATE LIBTOOL
-dnl AC_LIBTOOL_PICMODE(['yes'])
-
-AM_PROG_LIBTOOL
+dnl option pic-only is not working: a libtool bug ...
+LT_INIT([pic-only disable-shared])
 AC_SUBST([LIBTOOL_DEPS])
 
-
-
 dnl -------------------------------BLAS----------------------------------
 
 dnl why I hate autoconf: if the code below is put into a separate file,
@@ -392,6 +382,14 @@ AC_SUBST([SUPERLU_LIBS])
 AM_CONDITIONAL(USEBLASLITE, test x$HAVE_VENDOR_BLAS = x0)
 echo "Configuration of SuperLU done"
 
+
+dnl ----------------EXPERIMENTAL PARTS OF THE LIBRARY--------------------
+EXPER=""
+AC_ARG_ENABLE(experimental,
+        [AS_HELP_STRING([--enable-experimental],[compile experimental parts of the library])],
+[ if   test "x$enableval" = "xyes" ; then EXPER="-DEXPERIMENTAL_PURPOSE_ONLY"; fi], [EXPER=""])
+CPPFLAGS="$CPPFLAGS $EXPER"
+
 dnl -----------------------------QD TESTS--------------------------------
 AC_ARG_WITH(qd-lib-dir,
         [AS_HELP_STRING([--with-qd-lib-dir],[directory in which the libqd.a can be found])],
@@ -400,10 +398,10 @@ AC_ARG_WITH(qd-include-dir,
         [AS_HELP_STRING([--with-qd-include-dir],[directory in which the qd.h header can be found])],
 	QDINC="-I$withval",QDINC="-I$GFPREFIX/include")
 AC_ARG_ENABLE(dd,
- [AS_HELP_STRING([--enable-dd],[enable the use of the qd library (some computation will be done with double-double precision, usefull for high order FEMs)])],
+ [AS_HELP_STRING([--enable-dd],[enable the use of the qd library (some computation will be done with double-double precision, useful for high order FEMs)])],
  [ if   test "x$enableval" = "xyes" ; then useQDlib="yes"; QD_PREC="double"; fi], [useQDlib="no"])
 AC_ARG_ENABLE(qd,
- [AS_HELP_STRING([--enable-qd],[enable the use of the qd library (some computation will be done with quad-double precision, usefull for high order FEMs)])],
+ [AS_HELP_STRING([--enable-qd],[enable the use of the qd library (some computation will be done with quad-double precision, useful for high order FEMs)])],
  [ if   test "x$enableval" = "xyes" ; then useQDlib="yes"; QD_PREC="quad"; fi], [if test "x$useQDlib" = "xyes"; then useQDlib="yes"; else useQDlib="no"; fi])
 if test "x$useQDlib" = "xyes" ; then  
   LIBS="$LIBS $QDLIB -lm"
@@ -471,6 +469,19 @@ AC_SUBST([QHULL_LIBS])
 echo "Configuration of qhull done"
 dnl -----------------------------END OF QHULL TEST---------------------------
 
+dnl ------------------------------MUPARSER------------------------------
+MUPARSERSINC=""
+AC_ARG_WITH(muparser-include-dir,
+ [AS_HELP_STRING([--with-muparser-include-dir],[directory in which the muParser.h header can be found])],
+ [case $withval in
+   -I* ) MUPARSERINC="$withval";;
+   * ) MUPARSERINC="-I$withval";;
+  esac],
+ [MUPARSERINC="-I$GFPREFIX/include"]
+)
+CPPFLAGS="$CPPFLAGS $MUPARSERINC"
+dnl ---------------------------END OF MUPARSER--------------------------
+
 dnl ------------------------------MUPARSER TEST------------------------------
 usemuparser="no"
 AC_ARG_ENABLE(muparser,
@@ -481,7 +492,7 @@ MUPARSER_LIBS=""
 if test "x$usemuparser" = "xno"; then
   echo "Building with muParser explicitly disabled";
 else
-  AC_CHECK_LIB(muparser, _init)
+  AC_CHECK_LIB(muparser, _init, [], [AC_CHECK_LIB(muparser, mupEval)])
    AC_CHECK_HEADERS(muParser/muParser.h, [usemuparser="yes"],
    [ 
      AC_CHECK_HEADERS(muParser.h, [usemuparser="yes"],
@@ -504,7 +515,7 @@ AC_SUBST([MUPARSER_LIBS])
 echo "Configuration of muParser done"
 dnl ---------------------------END OF MUPARSER TEST--------------------------
 
-dnl ------------------------------MUMPS------------------------------
+dnl ------------------------------MUMPS TEST------------------------------
 MUMPSINC=""
 AC_ARG_WITH(mumps-include-dir,
  [AS_HELP_STRING([--with-mumps-include-dir],[directory in which the dmumps.h header can be found])],
@@ -518,28 +529,34 @@ CPPFLAGS="$CPPFLAGS $MUMPSINC"
 
 MUMPS_LIBS=""
 acx_mumps_ok="no"
+usemumps="no"
+AC_ARG_ENABLE(mumps,
+ [AS_HELP_STRING([--enable-mumps],[enable the use of the (sequential) MUMPS library. A direct solver for large sparse linear systems.])],
+ [case $enableval in
+   yes | "") usemumps="yes"; acx_mumps_ok="yes"; MUMPS_LIBS="-lsmumps_seq -ldmumps_seq -lcmumps_seq -lzmumps_seq";;
+   no) usemumps="no";;
+  esac],
+ [usemumps="test"; acx_mumps_ok="test"; MUMPS_LIBS="-lsmumps_seq -ldmumps_seq -lcmumps_seq -lzmumps_seq"]
+)
+
+AC_ARG_ENABLE(par-mumps,
+ [AS_HELP_STRING([--enable-par-mumps],[enable the use of the parrallel MUMPS library. A direct solver for large sparse linear systems.])],
+ [case $enableval in
+   yes | "") usemumps="yes"; MUMPS_LIBS="-lsmumps -ldmumps -lcmumps -lzmumps";;
+   no) usemumps="no";;
+  esac]
+)
+
 AC_ARG_WITH(mumps,
  [AS_HELP_STRING([--with-mumps=<lib>],[use MUMPS library <lib>])],
  [case $with_mumps in
-   yes | "") acx_mumps_ok="yes" ;;
+   yes | "") usemumps="yes";;
    no) acx_mumps_ok="no" ;;
    -* | */* | *.a | *.so | *.so.* | *.o| builtin) MUMPS_LIBS="$with_mumps"; acx_mumps_ok="yes" ;;
-   *) MUMPS_LIBS=`echo $with_mumps | sed -e 's/^/-l/g;s/ / -l/g'` ; acx_mumps_ok="yes" ;;
-  esac],
- [MUMPS_LIBS="-lsmumps -ldmumps -lcmumps -lzmumps"; acx_mumps_ok="test"]
+   *) MUMPS_LIBS=`echo $with_mumps | sed -e 's/^/-l/g;s/ / -l/g'` ; usemumps="yes";;
+  esac]
 )
-dnl ---------------------------END OF MUMPS--------------------------
 
-dnl ------------------------------MUMPS TEST------------------------------
-usemumps="no"
-AC_ARG_ENABLE(mumps,
- [AS_HELP_STRING([--enable-mumps],[enable the use of the MUMPS library. A direct solver for large sparse linear systems.])],
- [case $enableval in
-   yes | "") usemumps="yes"; acx_mumps_ok="yes" ;;
-   no) usemumps="no"; MUMPS_LIBS="" ;;
-  esac],
- [usemumps="test"]
-)
 
 if test "x$usemumps" = "xno" -o "x$acx_mumps_ok" = "xno"; then
   echo "Building with MUMPS explicitly disabled";
@@ -572,34 +589,6 @@ else
     fi;
     usemumps="no"]
  )
- AC_CHECK_LIB(smumps, smumps_c,
-   [usemumps="yes"],
-   [if test "x$acx_mumps_ok" = "xyes"; then
-     AC_MSG_ERROR([Couldn't find a smumps library supporting the smumps_c function.]);
-    fi;
-    usemumps="no"]
- )
- AC_CHECK_LIB(dmumps, dmumps_c,
-   [usemumps="yes"],
-   [if test "x$acx_mumps_ok" = "xyes"; then
-     AC_MSG_ERROR([Couldn't find a dmumps library supporting the dmumps_c function.]);
-    fi;
-    usemumps="no"]
- )
- AC_CHECK_LIB(cmumps, cmumps_c,
-   [usemumps="yes"],
-   [if test "x$acx_mumps_ok" = "xyes"; then
-     AC_MSG_ERROR([Couldn't find a cmumps library supporting the cmumps_c function.]);
-    fi;
-    usemumps="no"]
- )
- AC_CHECK_LIB(zmumps, zmumps_c,
-   [usemumps="yes"],
-   [if test "x$acx_mumps_ok" = "xyes"; then
-     AC_MSG_ERROR([Couldn't find a zmumps library supporting the zmumps_c function.]);
-    fi;
-    usemumps="no"]
- )
  AC_CHECK_HEADERS([smumps_c.h dmumps_c.h cmumps_c.h zmumps_c.h],
    [usemumps="yes"],
    [if test "x$acx_mumps_ok" = "xyes"; then
@@ -638,12 +627,24 @@ dnl ---------------------------END OF PARA LEVEL--------------------------
 
 dnl ---------------------------METIS--------------------------
 usemetis="no"
-METIS_LIBS=""
-
 if test $paralevel -ge 2; then
   usemetis="yes"
-  METIS_LIBS=""
-  AC_CHECK_LIB(metis, SelectQueueOneWay)
+fi;
+
+METIS_LIBS=""
+AC_ARG_ENABLE(metis,
+ [AS_HELP_STRING([--enable-metis],[enable the use of the METIS library.])],
+ [case $enableval in
+   yes | "") usemetis="yes" ;;
+   no) usemetis="no"; METIS_LIBS="" ;;
+  esac],
+ [usemetis="test"]
+)
+
+if test "x$usemetis" = "xno"; then
+  echo "Building without METIS";
+else
+  AC_CHECK_LIB(metis, SelectQueueOneWay, [usemetis="yes"], [usemetis="no"])
 dnl  AC_CHECK_HEADERS(metis.h, [usemetis="yes"],
 dnl    [ 
 dnl      AC_MSG_ERROR([header file metis.h not found]);
@@ -652,8 +653,12 @@ dnl    ])
 
   if test "x$usemetis" = "xyes"; then
     METIS_LIBS="-lmetis"
+    LIBS="$LIBS $METIS_LIBS"
+    AC_DEFINE_UNQUOTED([HAVE_METIS],1,[defined if the Metis library was found and is working])
+    echo "Building with METIS (use --enable-metis=no to disable it)"
+  else
+    echo "Building without METIS";
   fi;
-  echo "Building with METIS (use --enable-metis=no to disable it)"
 fi;
 
 AM_CONDITIONAL(METIS, test x$usemetis = xyes)
@@ -673,21 +678,22 @@ if test $paralevel -ge 2; then
   MPI_LIBS=""
   AC_CHECK_LIB(mpich, MPI_Test)
   AC_CHECK_LIB(mpichcxx, MPI_Test)
-  AC_CHECK_HEADERS(mpi/mpi.h, [usempi="yes"],
-   [ 
-     AC_CHECK_HEADERS(mpi.h, [usempi="yes"],
-     [
-       AC_CHECK_HEADERS(mpich2/mpi.h, [usempi="yes"],
-       [
-         if test "x$usempi" = "xyes"; then
-     	   AC_MSG_ERROR([header file mpi.h not found.]);
-	   usempi="no"
-   	 fi;
-       ])
-     ])
-   ])
+dnl   AC_CHECK_HEADERS(mpi/mpi.h, [usempi="yes"],
+dnl    [ 
+dnl      AC_CHECK_HEADERS(mpi.h, [usempi="yes"],
+dnl      [
+dnl        AC_CHECK_HEADERS(mpich2/mpi.h, [usempi="yes"],
+dnl        [
+dnl          if test "x$usempi" = "xyes"; then
+dnl      	   AC_MSG_ERROR([header file mpi.h not found.]);
+dnl 	   usempi="no"
+dnl    	 fi;
+dnl        ])
+dnl      ])
+dnl    ])
+  CPPFLAGS="$CPPFLAGS -DGETFEM_HAVE_MPI_MPI_H=1 -I/usr/include/mpi"
   if test "x$usempi" = "xyes"; then
-    MPI_LIBS="-lmpich -lmpichcxx"
+    MPI_LIBS="-lmpi -lmpi++"
   fi;
   echo "Building with MPI (use --enable-mpi=no to disable it)"
 fi;
@@ -725,11 +731,11 @@ if test "$MPI_CFLAGS" -o "$MPI_LIBS"; then
   dnl AC_DEFINE_UNQUOTED([PARA_LEVEL], 2, [getfem parallelisation flag])
   LIBS="$LIBS $MPI_LIBS -lmetis"
   CXXFLAGS="$CXXFLAGS $MPI_CFLAGS -DGETFEM_PARA_LEVEL=2"
-  AC_CHECK_LIB(metis, METIS_PartMeshNodal, [metis_ok="yes"], [metis_ok="no"])
-  if test "x$metis_ok" = "xno"; then
-    AC_MSG_ERROR([Parallel getfem requires the METIS ( http://www-users.cs.umn.edu/~karypis/metis/metis/ ) library
- ----------> Please add the path to libmetis.a to the MPI_LIBS variable.])
-  fi
+dnl   AC_CHECK_LIB(metis, METIS_PartMeshNodal, [metis_ok="yes"], [metis_ok="no"])
+dnl   if test "x$metis_ok" = "xno"; then
+dnl     AC_MSG_ERROR([Parallel getfem requires the METIS ( http://www-users.cs.umn.edu/~karypis/metis/metis/ ) library
+dnl  ----------> Please add the path to libmetis.a to the MPI_LIBS variable.])
+dnl   fi
   AC_SUBST(MPI_LIBS)
   AC_SUBST(MPI_CFLAGS)
 fi
@@ -1033,6 +1039,11 @@ then
   fi
 fi
 
+AC_ARG_WITH(scilab-toolbox-dir,
+            [AS_HELP_STRING([--with-scilab-toolbox-dir],[directory in which the scilab interface will be installed])],
+            SCILAB_TOOLBOX_DIR="$withval",SCILAB_TOOLBOX_DIR="$GFPREFIX/getfem_toolbox")
+AC_SUBST(SCILAB_TOOLBOX_DIR)
+
 
 
 dnl -----------------------------------------------
@@ -1042,6 +1053,7 @@ dnl -----------------------------------------------
 IM_METHODS=`$srcdir/bin/extract_doc $srcdir/interface/src cubature`
 IM_METHODS_LOC=`$srcdir/bin/extract_doc $srcdir/interface/src cubature_loc`
 AC_SUBST(IM_METHODS)
+AC_SUBST(IM_METHODS_LOC)
 
 
 AC_CONFIG_FILES(\
@@ -1109,59 +1121,68 @@ fi;
 
 dnl configuration sum-up
 
-echo ""
+echo
 echo "------------------------------------------------------------------------------"
-echo "If you want to build the shared library of getfem++, use --enable-shared"
-echo "(by default, only the static one will be built)"
+echo
+echo "Libraries Used:"
+echo "---------------"
+echo
+
+
 
 if test "x$useQDlib" = "xyes" ; then  
-  echo "Using the QD library:"
-  echo "   high precision (${QD_PREC}-double precision) polynomials and integration methods are enabled";
+  echo "- QD library found. High precision (${QD_PREC}-double precision) polynomials"
+  echo "  and integration methods are enabled.";
+else
+  echo "- QD library not found (not recommended)."
 fi;
 
 if test "x$useQHULL" = "xyes"; then
-  echo "Using the qhull library for delaunay triangulations."
+  echo "- Qhull found. Using the Qhull library for delaunay triangulations."
 else
-  echo "Not using the qhull library. Mesh generation will be disabled."
+  echo "- Qhull not found. Mesh generation will be disabled."
 fi;
 
 if test "x$usemuparser" = "xyes"; then
-  echo "Using the muParser library for parsing mathematical expressions."
+  echo "- MuParser found. Used for parsing mathematical expressions."
 else
-  echo "Not using the muParser library. Parsing mathematical expressions will be disabled."
+  echo "- MuParser not found. Parsing mathematical expressions will be disabled."
 fi;
 
 if test "x$usemumps" = "xyes"; then
-  echo "Using the MUMPS library. A direct solver for large sparse linear systems."
+  echo "- Mumps found. A direct solver for large sparse linear systems."
 else
-  echo "Not using the MUMPS library. A direct solver for large sparse linear systems."
+  echo "- Mumps not found. Not using the MUMPS library for large sparse linear systems."
 fi;
 
-echo
+if test x"$acx_lapack_ok" = xyes; then
+  echo "- Lapack library found: $LAPACK_LIBS"
+else
+  echo "- Lapack library not found: generic (less effective) algorithms will be used"
+fi
+
 if test "x$HAVE_VENDOR_BLAS" = "x0"; then
-  echo "*** No usable blas library was found ***"
-  echo "A generic BLAS implementation will be used, however you should "
-  echo "consider installing a faster BLAS, such as ATLAS"
+  echo "- *** No usable blas library was found ***"
+  echo "  A generic BLAS implementation will be used, however you should "
+  echo "  consider installing a faster BLAS, such as ATLAS"
 else
-  echo "Link options for the BLAS library: $BLAS_LIBS"
+  echo "- BLAS library found. Link options: $BLAS_LIBS"
 fi;
-echo "You can give the location of your prefered blas library with either"
-echo "the --with-blas=<lib> option, or the BLAS_LIBS environment variable"
-echo 'for example: ./configure BLAS_LIBS="-L/usr/lib/sse2/atlas/ -lblas"'
+echo "  You can give the location of your prefered blas library with either"
+echo "  the --with-blas=<lib> option, or the BLAS_LIBS environment variable"
+echo '  for example: ./configure BLAS_LIBS="-L/usr/lib/sse2/atlas/ -lblas"'
+echo
 echo
 
-if test x"$acx_lapack_ok" = xyes; then
-  echo "Lapack library found : $LAPACK_LIBS"
-else
-  echo "No lapack library found : generic (less effective) algorithms will be used"
-fi
 
-echo "---------------------------------------"
+echo "-----------------------------------------------------------------------"
 echo "Ready to build getfem"
 echo "  building MATLAB interface: $usematlab"
 echo "  building PYTHON interface: $usepython (requires numpy and scipy)"
 echo "  building SCILAB interface: $usescilab"
-echo "---------------------------------------"
+echo "  If you want to build the shared library of getfem++, use --enable-shared"
+echo "  (by default, only the static one will be built)"
+echo "-----------------------------------------------------------------------"
 
 case $host in
   x86_64-*)
@@ -1175,3 +1196,5 @@ case $host in
         fi      
   ;;
 esac
+
+echo $shared_mode
\ No newline at end of file
diff --git a/contrib/Makefile.in b/contrib/Makefile.in
index 5d46e2f..157a682 100644
--- a/contrib/Makefile.in
+++ b/contrib/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -116,6 +116,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -134,6 +135,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -150,6 +152,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -214,6 +217,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -249,7 +253,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -523,10 +526,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/aposteriori/Makefile.in b/contrib/aposteriori/Makefile.in
index 5f4e7f7..00cf09b 100644
--- a/contrib/aposteriori/Makefile.in
+++ b/contrib/aposteriori/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -107,6 +107,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -125,6 +126,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -141,6 +143,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -205,6 +208,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -240,7 +244,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -318,10 +321,10 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-aposteriori$(EXEEXT): $(aposteriori_OBJECTS) $(aposteriori_DEPENDENCIES) 
+aposteriori$(EXEEXT): $(aposteriori_OBJECTS) $(aposteriori_DEPENDENCIES) $(EXTRA_aposteriori_DEPENDENCIES) 
 	@rm -f aposteriori$(EXEEXT)
 	$(CXXLINK) $(aposteriori_OBJECTS) $(aposteriori_LDADD) $(LIBS)
-aposteriori_laplacian$(EXEEXT): $(aposteriori_laplacian_OBJECTS) $(aposteriori_laplacian_DEPENDENCIES) 
+aposteriori_laplacian$(EXEEXT): $(aposteriori_laplacian_OBJECTS) $(aposteriori_laplacian_DEPENDENCIES) $(EXTRA_aposteriori_laplacian_DEPENDENCIES) 
 	@rm -f aposteriori_laplacian$(EXEEXT)
 	$(CXXLINK) $(aposteriori_laplacian_OBJECTS) $(aposteriori_laplacian_LDADD) $(LIBS)
 
@@ -494,14 +497,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -551,10 +555,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/aposteriori/aposteriori.cc b/contrib/aposteriori/aposteriori.cc
index de5ad11..9a37c88 100644
--- a/contrib/aposteriori/aposteriori.cc
+++ b/contrib/aposteriori/aposteriori.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Vanessa Lleras, Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Vanessa Lleras, Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
   
 /**
  * Linear Elastostatic problem with a crack.
@@ -42,6 +42,9 @@
 #include "getfem/getfem_error_estimate.h"
 #include "getfem/getfem_interpolated_fem.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/contrib/aposteriori/aposteriori.pl b/contrib/aposteriori/aposteriori.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/aposteriori/aposteriori.pl
+++ b/contrib/aposteriori/aposteriori.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/aposteriori/aposteriori_laplacian.cc b/contrib/aposteriori/aposteriori_laplacian.cc
index 9af1d1f..e67eb7d 100644
--- a/contrib/aposteriori/aposteriori_laplacian.cc
+++ b/contrib/aposteriori/aposteriori_laplacian.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Vanessa Lleras, Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Vanessa Lleras, Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
   
 /**
  * Linear Elastostatic problem with a crack.
@@ -42,6 +42,9 @@
 #include "getfem/getfem_error_estimate.h"
 #include "getfem/getfem_interpolated_fem.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/contrib/aposteriori/aposteriori_laplacian.pl b/contrib/aposteriori/aposteriori_laplacian.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/aposteriori/aposteriori_laplacian.pl
+++ b/contrib/aposteriori/aposteriori_laplacian.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/bimat_contact_crack_test/Makefile.in b/contrib/bimat_contact_crack_test/Makefile.in
index 78cbddc..5d08902 100644
--- a/contrib/bimat_contact_crack_test/Makefile.in
+++ b/contrib/bimat_contact_crack_test/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -102,6 +102,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -120,6 +121,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -136,6 +138,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -200,6 +203,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -235,7 +239,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -310,7 +313,7 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-bimaterial_crack_test$(EXEEXT): $(bimaterial_crack_test_OBJECTS) $(bimaterial_crack_test_DEPENDENCIES) 
+bimaterial_crack_test$(EXEEXT): $(bimaterial_crack_test_OBJECTS) $(bimaterial_crack_test_DEPENDENCIES) $(EXTRA_bimaterial_crack_test_DEPENDENCIES) 
 	@rm -f bimaterial_crack_test$(EXEEXT)
 	$(CXXLINK) $(bimaterial_crack_test_OBJECTS) $(bimaterial_crack_test_LDADD) $(LIBS)
 
@@ -482,14 +485,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -539,10 +543,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/bimat_contact_crack_test/bimaterial_crack_test.cc b/contrib/bimat_contact_crack_test/bimaterial_crack_test.cc
index 3a34c88..2b2af46 100644
--- a/contrib/bimat_contact_crack_test/bimaterial_crack_test.cc
+++ b/contrib/bimat_contact_crack_test/bimaterial_crack_test.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
   
 /**
  * Linear Elastostatic problem with a crack.
@@ -43,6 +43,9 @@
 
 #include "getfem/getfem_interpolated_fem.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/contrib/bimat_contact_crack_test/bimaterial_crack_test.pl b/contrib/bimat_contact_crack_test/bimaterial_crack_test.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/bimat_contact_crack_test/bimaterial_crack_test.pl
+++ b/contrib/bimat_contact_crack_test/bimaterial_crack_test.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/bimaterial_crack_test/Makefile.in b/contrib/bimaterial_crack_test/Makefile.in
index 6dcf223..0aaa37d 100644
--- a/contrib/bimaterial_crack_test/Makefile.in
+++ b/contrib/bimaterial_crack_test/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -115,6 +115,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -133,6 +134,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -149,6 +151,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -213,6 +216,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -248,7 +252,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -326,10 +329,10 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-bimaterial_crack_test$(EXEEXT): $(bimaterial_crack_test_OBJECTS) $(bimaterial_crack_test_DEPENDENCIES) 
+bimaterial_crack_test$(EXEEXT): $(bimaterial_crack_test_OBJECTS) $(bimaterial_crack_test_DEPENDENCIES) $(EXTRA_bimaterial_crack_test_DEPENDENCIES) 
 	@rm -f bimaterial_crack_test$(EXEEXT)
 	$(CXXLINK) $(bimaterial_crack_test_OBJECTS) $(bimaterial_crack_test_LDADD) $(LIBS)
-crack$(EXEEXT): $(crack_OBJECTS) $(crack_DEPENDENCIES) 
+crack$(EXEEXT): $(crack_OBJECTS) $(crack_DEPENDENCIES) $(EXTRA_crack_DEPENDENCIES) 
 	@rm -f crack$(EXEEXT)
 	$(CXXLINK) $(crack_OBJECTS) $(crack_LDADD) $(LIBS)
 
@@ -503,14 +506,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -560,10 +564,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/bimaterial_crack_test/bimaterial_crack_test.cc b/contrib/bimaterial_crack_test/bimaterial_crack_test.cc
index e784eba..d08699b 100644
--- a/contrib/bimaterial_crack_test/bimaterial_crack_test.cc
+++ b/contrib/bimaterial_crack_test/bimaterial_crack_test.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
   
 /**
  * Linear Elastostatic problem with a crack.
@@ -42,6 +42,9 @@
 #include <sstream>
 #include "getfem/getfem_interpolated_fem.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/contrib/bimaterial_crack_test/bimaterial_crack_test.pl b/contrib/bimaterial_crack_test/bimaterial_crack_test.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/bimaterial_crack_test/bimaterial_crack_test.pl
+++ b/contrib/bimaterial_crack_test/bimaterial_crack_test.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/bimaterial_crack_test/crack.cc b/contrib/bimaterial_crack_test/crack.cc
index 3dd31c8..ffbf446 100644
--- a/contrib/bimaterial_crack_test/crack.cc
+++ b/contrib/bimaterial_crack_test/crack.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
   
 /**
  * Linear Elastostatic problem with a crack.
@@ -42,6 +42,9 @@
 
 #include "crack_exact_solution.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* definition of some matrix/vector types. These ones are built
  * using the predefined types in Gmm++
  */
diff --git a/contrib/bimaterial_crack_test/crack.pl b/contrib/bimaterial_crack_test/crack.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/bimaterial_crack_test/crack.pl
+++ b/contrib/bimaterial_crack_test/crack.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/bimaterial_crack_test/crack_exact_solution.cc b/contrib/bimaterial_crack_test/crack_exact_solution.cc
index 7c14225..fc99d89 100644
--- a/contrib/bimaterial_crack_test/crack_exact_solution.cc
+++ b/contrib/bimaterial_crack_test/crack_exact_solution.cc
@@ -1,26 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "crack_exact_solution.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* returns sin(theta/2) where theta is the angle
    of 0-(x,y) with the axis Ox */
 static scalar_type sint2(scalar_type x, scalar_type y) {
diff --git a/contrib/bimaterial_crack_test/crack_exact_solution.h b/contrib/bimaterial_crack_test/crack_exact_solution.h
index 9c08bd2..819bbc3 100644
--- a/contrib/bimaterial_crack_test/crack_exact_solution.h
+++ b/contrib/bimaterial_crack_test/crack_exact_solution.h
@@ -1,35 +1,39 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_mesh_fem_global_function.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/contrib/contact_grd_trans/Makefile.am b/contrib/contact_grd_trans/Makefile.am
index da7be03..7a6ba1f 100644
--- a/contrib/contact_grd_trans/Makefile.am
+++ b/contrib/contact_grd_trans/Makefile.am
@@ -1,11 +1,12 @@
 # SUBDIRS = 
 
-check_PROGRAMS =  contact contact_continuation
+check_PROGRAMS =  contact contact_continuation_load contact_continuation_time
 
 CLEANFILES = 
 
 contact_SOURCES = contact.cc
-contact_continuation_SOURCES = contact_continuation.cc my_getfem_Coulomb_friction.h
+contact_continuation_load_SOURCES = contact_continuation_load.cc
+contact_continuation_time_SOURCES = contact_continuation_time.cc
 SUPLDFLAGS = @SUPLDFLAGS@
 INCLUDES = -I$(top_srcdir)/src -I../../src
 LDADD    = ../../src/libgetfem.la -lm $(SUPLDFLAGS)
@@ -14,7 +15,8 @@ TESTS = $(top_srcdir)/contrib/contact_grd_trans/contact.pl
 EXTRA_DIST = \
 	contact.pl                  \
 	contact.param 
-	contact_continuation.param
+	contact_continuation_load.param 
+	contact_continuation_time.param 
 
 
 
diff --git a/contrib/contact_grd_trans/Makefile.in b/contrib/contact_grd_trans/Makefile.in
index 664f19d..e8cc864 100644
--- a/contrib/contact_grd_trans/Makefile.in
+++ b/contrib/contact_grd_trans/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -35,7 +35,8 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-check_PROGRAMS = contact$(EXEEXT) contact_continuation$(EXEEXT)
+check_PROGRAMS = contact$(EXEEXT) contact_continuation_load$(EXEEXT) \
+	contact_continuation_time$(EXEEXT)
 subdir = contrib/contact_grd_trans
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -57,10 +58,19 @@ contact_OBJECTS = $(am_contact_OBJECTS)
 contact_LDADD = $(LDADD)
 am__DEPENDENCIES_1 =
 contact_DEPENDENCIES = ../../src/libgetfem.la $(am__DEPENDENCIES_1)
-am_contact_continuation_OBJECTS = contact_continuation.$(OBJEXT)
-contact_continuation_OBJECTS = $(am_contact_continuation_OBJECTS)
-contact_continuation_LDADD = $(LDADD)
-contact_continuation_DEPENDENCIES = ../../src/libgetfem.la \
+am_contact_continuation_load_OBJECTS =  \
+	contact_continuation_load.$(OBJEXT)
+contact_continuation_load_OBJECTS =  \
+	$(am_contact_continuation_load_OBJECTS)
+contact_continuation_load_LDADD = $(LDADD)
+contact_continuation_load_DEPENDENCIES = ../../src/libgetfem.la \
+	$(am__DEPENDENCIES_1)
+am_contact_continuation_time_OBJECTS =  \
+	contact_continuation_time.$(OBJEXT)
+contact_continuation_time_OBJECTS =  \
+	$(am_contact_continuation_time_OBJECTS)
+contact_continuation_time_LDADD = $(LDADD)
+contact_continuation_time_DEPENDENCIES = ../../src/libgetfem.la \
 	$(am__DEPENDENCIES_1)
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -75,17 +85,10 @@ CXXLD = $(CXX)
 CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-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)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(contact_SOURCES) $(contact_continuation_SOURCES)
-DIST_SOURCES = $(contact_SOURCES) $(contact_continuation_SOURCES)
+SOURCES = $(contact_SOURCES) $(contact_continuation_load_SOURCES) \
+	$(contact_continuation_time_SOURCES)
+DIST_SOURCES = $(contact_SOURCES) $(contact_continuation_load_SOURCES) \
+	$(contact_continuation_time_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 am__tty_colors = \
@@ -115,6 +118,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -133,6 +137,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -149,6 +154,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -213,6 +219,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -248,7 +255,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -270,7 +276,8 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 CLEANFILES = 
 contact_SOURCES = contact.cc
-contact_continuation_SOURCES = contact_continuation.cc my_getfem_Coulomb_friction.h
+contact_continuation_load_SOURCES = contact_continuation_load.cc
+contact_continuation_time_SOURCES = contact_continuation_time.cc
 INCLUDES = -I$(top_srcdir)/src -I../../src
 LDADD = ../../src/libgetfem.la -lm $(SUPLDFLAGS)
 TESTS = $(top_srcdir)/contrib/contact_grd_trans/contact.pl
@@ -322,12 +329,15 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-contact$(EXEEXT): $(contact_OBJECTS) $(contact_DEPENDENCIES) 
+contact$(EXEEXT): $(contact_OBJECTS) $(contact_DEPENDENCIES) $(EXTRA_contact_DEPENDENCIES) 
 	@rm -f contact$(EXEEXT)
 	$(CXXLINK) $(contact_OBJECTS) $(contact_LDADD) $(LIBS)
-contact_continuation$(EXEEXT): $(contact_continuation_OBJECTS) $(contact_continuation_DEPENDENCIES) 
-	@rm -f contact_continuation$(EXEEXT)
-	$(CXXLINK) $(contact_continuation_OBJECTS) $(contact_continuation_LDADD) $(LIBS)
+contact_continuation_load$(EXEEXT): $(contact_continuation_load_OBJECTS) $(contact_continuation_load_DEPENDENCIES) $(EXTRA_contact_continuation_load_DEPENDENCIES) 
+	@rm -f contact_continuation_load$(EXEEXT)
+	$(CXXLINK) $(contact_continuation_load_OBJECTS) $(contact_continuation_load_LDADD) $(LIBS)
+contact_continuation_time$(EXEEXT): $(contact_continuation_time_OBJECTS) $(contact_continuation_time_DEPENDENCIES) $(EXTRA_contact_continuation_time_DEPENDENCIES) 
+	@rm -f contact_continuation_time$(EXEEXT)
+	$(CXXLINK) $(contact_continuation_time_OBJECTS) $(contact_continuation_time_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -336,7 +346,8 @@ distclean-compile:
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/contact.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/contact_continuation.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/contact_continuation_load.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/contact_continuation_time.Po at am__quote@
 
 .cc.o:
 @am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -498,14 +509,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -555,10 +567,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -658,7 +675,8 @@ uninstall-am:
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags uninstall uninstall-am
 
-	contact_continuation.param
+	contact_continuation_load.param 
+	contact_continuation_time.param 
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/contrib/contact_grd_trans/contact.cc b/contrib/contact_grd_trans/contact.cc
index b0947e9..96e0655 100644
--- a/contrib/contact_grd_trans/contact.cc
+++ b/contrib/contact_grd_trans/contact.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien  Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien  Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file nonlinear_elastostatic.cc
@@ -39,6 +39,9 @@
 #include "gmm/gmm.h"
 #include "getfem/getfem_import.h"  //ajout des fonctionnalités d'importation de maillage (pfe)
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
@@ -459,7 +462,7 @@ bool elastostatic_problem::solve(plain_vector &U) {
 
 
     /* let the default non-linear solve (Newton) do its job */
-    gmm::default_newton_line_search ls;
+    getfem::default_newton_line_search ls;
     getfem::standard_solve(MS, final_model, iter,
 			   getfem::default_linear_solver(final_model), ls);
 
diff --git a/contrib/contact_grd_trans/contact.param b/contrib/contact_grd_trans/contact.param
index 9e6a1de..9e55329 100644
--- a/contrib/contact_grd_trans/contact.param
+++ b/contrib/contact_grd_trans/contact.param
@@ -12,12 +12,15 @@ P2 = 200E6;   	        % Second elastic coefficient.
 P3 = 200E6;   	        % Third elastic coefficient.
 MU = 5;
 LAMBDA = 11500;   	% Lamé coefficient.
+RHO = 100;
 
-LAW = 2;     % 0 : SaintVenant-Kirchhoff
+LAW = 3;     % 0 : SaintVenant-Kirchhoff
              % 1 : SaintVenant-Kirchhoff+incompressibility
              % 2 : Ciarlet-Geymonat
              % 3 : Mooney-Rivlin (+incompressibility)
 
+DYNAMIC = 1;
+
 FORCEX = 0          % Amplitude of the external force
 FORCEY = 0;
 FORCEZ = -0.00;
diff --git a/contrib/contact_grd_trans/contact.pl b/contrib/contact_grd_trans/contact.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/contact_grd_trans/contact.pl
+++ b/contrib/contact_grd_trans/contact.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/contact_grd_trans/contact_continuation.cc b/contrib/contact_grd_trans/contact_continuation.cc
deleted file mode 100644
index 731c652..0000000
--- a/contrib/contact_grd_trans/contact_continuation.cc
+++ /dev/null
@@ -1,1193 +0,0 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien  Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-
-/**
-   @file nonlinear_elastostatic.cc
-   @brief Nonlinear Elastostatic problem (large strain).
-
-   A rubber bar is submitted to a large torsion.
-   
-   This program is used to check that getfem++ is working. This is also 
-   a good example of use of Getfem++.
-*/
-
-#include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
-#include "getfem/getfem_export.h"   /* export functions (save solution in a file)  */
-#include "getfem/getfem_regular_meshes.h"
-#include "getfem/getfem_model_solvers.h"
-#include "getfem/getfem_nonlinear_elasticity.h"
-#include "my_getfem_Coulomb_friction.h"
-#include "getfem/getfem_superlu.h"
-#include "gmm/gmm.h"
-
-/* some Getfem++ types that we will be using */
-using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
-using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
-using bgeot::base_vector;
-using bgeot::scalar_type; /* = double */
-using bgeot::size_type;   /* = unsigned long */
-using bgeot::base_matrix; /* small dense matrix. */
-
-/* definition of some matrix/vector types.  These ones are built
- * using the predefined types in Gmm++
- */
-typedef getfem::modeling_standard_sparse_vector sparse_vector;
-typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
-typedef getfem::modeling_standard_plain_vector  plain_vector;
-
-template<typename MAT> void smallest_eigenvalue(const MAT &M);
-
-template<class VEC, class VECT, class MAT>
-void compute_tangent(const VEC &T, const MAT &A, VECT &V, int noisy);
-
-template<class VEC, class VECT, class MAT>
-int compute_Newton_iteration(const VEC &T, const MAT &A, VECT &V, VECT &X, const VEC &P,
-			     scalar_type tolerance, scalar_type residual, int noisy);
-
-/*
-  structure for the elastostatic  problem
-*/
-struct elastostatic_problem {
-
-  enum { DIRICHLET_BOUNDARY_NUM = 0, FRICTION_BOUNDARY_NUM = 1, NEUMANN_BOUNDARY_NUM = 2};
-  getfem::mesh mesh;         /* the mesh */
-  getfem::mesh_im mim;       /* the integration methods */
-  getfem::mesh_fem mf_u;     /* main mesh_fem, for the elastostatic solution */
-  getfem::mesh_fem mf_p;     /* mesh_fem for the pressure.                   */
-  getfem::mesh_fem mf_rhs;   /* mesh_fem for the right hand side (f(x),..)   */
-  getfem::mesh_fem mf_coef;  /* mesh_fem used to represent pde coefficients  */
-  getfem::mesh_fem mf_vm;    /* mesh_fem used for the VonMises stress        */
-  scalar_type p1, p2, p3;    /* elastic coefficients.                        */
-  scalar_type LX, LY, LZ;    /* system dimensions   */
-  // scalar_type lambda, mu;    /* Lamé coefficients.                           */
-  scalar_type residual;        /* max residual for the iterative solvers         */
-  std::string datafilename;
-  bgeot::md_param PARAM;
-
-
-  template<class VEC, class STDVEC, class ALLOCVEC, class MAT>
-  int compute_test_functions(const VEC &UN, const VEC &UT, const VEC &UT0, const VEC &LN,
-			     const VEC &LT, MAT &TST, const MAT &TST0,
-			     const STDVEC &contact_nodes, const ALLOCVEC &gap,
-			     scalar_type deltat, scalar_type friction_coef);
-  bool solve(plain_vector &U);
-  void init(void);
-  elastostatic_problem(void) : mim(mesh), mf_u(mesh), mf_p(mesh), mf_rhs(mesh), mf_coef(mesh), mf_vm(mesh) {}
-};
-
-
-/* Read parameters from the .param file, build the mesh, set finite element
-   and integration methods and selects the boundaries.
-
-   (this is boilerplate code, not very interesting)
- */
-void elastostatic_problem::init(void) {
-  std::string MESH_TYPE = PARAM.string_value("MESH_TYPE","Mesh type ");
-  std::string FEM_TYPE  = PARAM.string_value("FEM_TYPE","FEM name");
-  std::string FEM_TYPE_P  = PARAM.string_value("FEM_TYPE_P","FEM name for the pressure");
-  std::string INTEGRATION = PARAM.string_value("INTEGRATION",
-					       "Name of integration method");
-  cout << "MESH_TYPE=" << MESH_TYPE << "\n";
-  cout << "FEM_TYPE="  << FEM_TYPE << "\n";
-  cout << "INTEGRATION=" << INTEGRATION << "\n";
-
-  /* First step : build the mesh */
-  int refine = PARAM.int_value("REFINE");
-  int nb_refine = PARAM.int_value("NBREFINE");
-  bgeot::pgeometric_trans pgt = 
-    bgeot::geometric_trans_descriptor(MESH_TYPE);
-  size_type N = pgt->dim();
-  std::vector<size_type> nsubdiv(N);
-  std::fill(nsubdiv.begin(),nsubdiv.end(),
-	    PARAM.int_value("NX", "Number of space steps "));
-  nsubdiv[1] = PARAM.int_value("NY") ? PARAM.int_value("NY") : nsubdiv[0];
-  if (N>2) nsubdiv[2] = PARAM.int_value("NZ") ? PARAM.int_value("NZ") : nsubdiv[0];
-  getfem::regular_unit_mesh(mesh, nsubdiv, pgt,
-			    PARAM.int_value("MESH_NOISED") != 0);
-
-  LX = PARAM.real_value("LX", "Length along X axis");
-  LY = PARAM.real_value("LY", "Length along Y axis");
-  LZ = PARAM.real_value("LZ", "Length along Z axis");
-  // mu = PARAM.real_value("MU", "Lamé coefficient mu");
-  // lambda = PARAM.real_value("LAMBDA", "Lamé coefficient lambda");
-  bgeot::base_matrix M(N,N);
-  for (size_type i=0; i < N; ++i) {
-    static const char *t[] = {"LX","LY","LZ"};
-    M(i,i) = (i<3) ? PARAM.real_value(t[i],t[i]) : 1.0;
-  }
-  if (N>1) { M(0,1) = PARAM.real_value("INCLINE") * PARAM.real_value("LY"); }
-  
-  /* scale the unit mesh to [LX,LY,..] and incline it */
-  mesh.transformation(M);
-
-  if (refine > 0) { /* manual refinement */
-    scalar_type layerx, layerz;
-    dal::bit_vector cvref;
-    layerx = 0.201; layerz = 1.5 * layerx;
-    for (int i=0; i < nb_refine; ++i) {
-      cvref.clear();
-      for (dal::bv_visitor j(mesh.convex_index()); !j.finished(); ++j) {
-	if ((mesh.points_of_convex(j)[0][0] > LX*(1-layerx))
-	    && (mesh.points_of_convex(j)[1][0] > LX*(1-layerx))
-	    && (mesh.points_of_convex(j)[2][0] > LX*(1-layerx))
-	    && (mesh.points_of_convex(j)[0][N-1] < LZ*layerz)
-	    &&  (mesh.points_of_convex(j)[1][N-1] < LZ*layerz)
-	    &&  (mesh.points_of_convex(j)[2][N-1] < LZ*layerz))
-	  cvref.add(j);
-      }
-      mesh.Bank_refine(cvref);
-      layerx = 0.5 * layerx;
-      if (i < 9) layerz = 0.5 * layerz;
-    }
-  }
-
-  datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
-  residual = PARAM.real_value("RESIDUAL"); if (residual == 0.) residual = 1e-10;
-
-  p1 = PARAM.real_value("P1", "First Elastic coefficient");
-  p2 = PARAM.real_value("P2", "Second Elastic coefficient");
-  p3 = PARAM.real_value("P3", "Third Elastic coefficient");
-  
-  mf_u.set_qdim(bgeot::dim_type(N));
-
-  /* set the finite element on the mf_u */
-  getfem::pfem pf_u = 
-    getfem::fem_descriptor(FEM_TYPE);
-  getfem::pintegration_method ppi = 
-    getfem::int_method_descriptor(INTEGRATION);
-
-  mim.set_integration_method(ppi);
-  mf_u.set_finite_element(pf_u);
-
-  mf_p.set_finite_element(getfem::fem_descriptor(FEM_TYPE_P));
-
-  /* set the finite element on mf_rhs (same as mf_u is DATA_FEM_TYPE is
-     not used in the .param file */
-  std::string data_fem_name = PARAM.string_value("DATA_FEM_TYPE");
-  if (data_fem_name.size() == 0) {
-    GMM_ASSERT1(pf_u->is_lagrange(), "You are using a non-lagrange FEM"
-		". In that case you need to set "
-		<< "DATA_FEM_TYPE in the .param file");
-    mf_rhs.set_finite_element(mesh.convex_index(), pf_u);
-  } else {
-    mf_rhs.set_finite_element(mesh.convex_index(), 
-			      getfem::fem_descriptor(data_fem_name));
-  }
-  
-  /* set the finite element on mf_coef. Here we use a very simple element
-   *  since the only function that need to be interpolated on the mesh_fem 
-   * is f(x)=1 ... */
-  mf_coef.set_finite_element(mesh.convex_index(),
-			     getfem::classical_fem(pgt,0));
-
-  mf_vm.set_classical_discontinuous_finite_element(1);
-
-  /* set boundary conditions
-   * (Dirichlet on the upper face, contact on the bottom face) */
-      cout << "Selecting Dirichlet and contact boundaries\n";
-  getfem::mesh_region border_faces;
-  getfem::outer_faces_of_mesh(mesh, border_faces);
-  for (getfem::mr_visitor it(border_faces); !it.finished(); ++it) {
-    assert(it.is_face());
-    base_node un = mesh.normal_of_face_of_convex(it.cv(), it.f());
-    un /= gmm::vect_norm2(un);
-    if (gmm::abs(un[N-1] - 1.0) < 1.0E-7) {
-      mesh.region(DIRICHLET_BOUNDARY_NUM).add(it.cv(),it.f());
-    } else if (gmm::abs(un[N-1] + 1.0) < 1.0E-7) {
-      mesh.region(FRICTION_BOUNDARY_NUM).add(it.cv(),it.f());
-    } else if (mesh.points_of_convex(it.cv())[0][N-1] < LZ*0.3) {
-      mesh.region(FRICTION_BOUNDARY_NUM).add(it.cv(),it.f());
-    }
-  }
-}
-
-/**************************************************************************/
-/*  Model.                                                                */
-/**************************************************************************/
-
-template<typename MAT>
-void smallest_eigenvalue(const MAT &M) {
-  
-  size_type N = gmm::mat_nrows(M);
-  plain_vector V(N), U(N), W(N);
-  plain_vector V2(N), U2(N);  
-  gmm::fill_random(V);
-  gmm::fill_random(V2);
-  scalar_type lambda = 0., lambda2 = 0.;
-  gmm::SuperLU_factor<scalar_type> SLU;
-  SLU.build_with(M);
-  
-  for(size_type i = 0; i < 100; ++i) {
-    gmm::scale(V, 1./gmm::vect_norm2(V));
-    gmm::scale(V2, 1./gmm::vect_norm2(V2));
-    SLU.solve(U, V);
-    gmm::mult(M, V2, U2);
-    
-    lambda = gmm::vect_sp(U, V) / gmm::vect_sp(V, V);
-    lambda2 = gmm::vect_sp(U2, V2) / gmm::vect_sp(V2, V2);
-    
-    gmm::add(V, gmm::scaled(U, -1./lambda), W);
-    if (0) // (i > 90)
-      cout << "iteration " << i << " norm(W) = " <<  gmm::vect_norm2(W)
-	   << " lambda = " << lambda 
-	   << " lambda2 = " << lambda2 << endl;
-    if (gmm::vect_norm2(W) < 1E-2) break;
-    
-    gmm::copy(U, V);
-    gmm::copy(U2, V2);
-  }
-  
-  // cout << "Smallest eigenvalue : " << 1.0/lambda << endl;
-  // cout << "Largest eigenvalue : " << lambda2 << endl;
-  cout << "Condition number: " << lambda2 * lambda << endl;
-  
-}
-
-
-/* computes initial tangent for the Moore-Penrose method */
-template<class VEC, class VECT, class MAT>
-void compute_tangent(const VEC &T, const MAT &A, VECT &V, int noisy) {
-
-  bool singular_tangent_matrix = false;
-  size_type N = gmm::mat_nrows(A);
-  double rcond;
-  scalar_type sp;
-  plain_vector Y(N);
-		
-  try { /* whether A is singular */
-    if (noisy > 1) cout << "starting computing tangent" << endl;
-
-    gmm::SuperLU_solve(A, Y, T, rcond);;
-    sp = gmm::vect_sp(gmm::sub_vector(V, gmm::sub_interval(1,N)), Y);
-		  
-    V[0] = 1.0 / (V[0] - sp);
-    gmm::copy(gmm::scaled(Y, -1.0*V[0]),
-	      gmm::sub_vector(V, gmm::sub_interval(1, N)));
-  }
-  catch (...) {
-    singular_tangent_matrix = true;
-    cout << "Tangent matrix is close to be singular!" << endl;
-  }
-  
-  if (singular_tangent_matrix) {
-    plain_vector R(1+N);
-    sparse_matrix B(1+N, 1+N);
-
-    gmm::copy(gmm::col_vector(T),
-	      gmm::sub_matrix(B, gmm::sub_interval(0, N), gmm::sub_interval(0, 1)));
-    gmm::copy(A, gmm::sub_matrix(B, gmm::sub_interval(0, N), gmm::sub_interval(1, N)));
-    gmm::copy(gmm::row_vector(V),
-	      gmm::sub_matrix(B, gmm::sub_interval(N, 1), gmm::sub_interval(0, 1+N)));
-
-    gmm::clear(R);
-    R[N] = 1.0;		  
-    
-    gmm::SuperLU_solve(B, V, R, rcond);
-  }
-
-  gmm::scale(V, 1.0/gmm::vect_norm2(V));
-
-  if (noisy > 1) cout << "tangent computed" << endl;
-
-} // compute_tangent
-
-
-/* Newton iteration for the Moore-Penrose method */
-template<class VEC, class VECT, class MAT>
-int compute_Newton_iteration(const VEC &T, const MAT &A, VECT &V, VECT &X, const VEC &P,
-			     scalar_type tolerance, scalar_type residual, int noisy) {
-
-  bool singular_tangent_matrix = false;
-  int convergence = 1;
-  size_type N = gmm::mat_nrows(A);
-  scalar_type sp1, sp2, normdX, normP;
-  plain_vector Y1(N), Y2(N);
-  plain_vector dX(1+N);
-
-  try { /* whether A is singular */
-    if (noisy > 1) {
-      cout << "starting linear solvers" << endl;
-      smallest_eigenvalue(A);
-    }
-
-    gmm::SuperLU_factor<scalar_type> SLU;
-    SLU.build_with(A);
-    SLU.solve(Y1, T);
-    SLU.solve(Y2, P);
-
-    sp1 = gmm::vect_sp(gmm::sub_vector(V, gmm::sub_interval(1,N)), Y1);
-    sp2 = gmm::vect_sp(gmm::sub_vector(V, gmm::sub_interval(1,N)), Y2);
-		
-    dX[0] = sp2 / (sp1 - V[0]);
-    gmm::add(gmm::scaled(Y1, -1.0*dX[0]), Y2);
-    gmm::copy(Y2, gmm::sub_vector(dX, gmm::sub_interval(1, N)));
-		
-    V[0] = 1.0 / (V[0] - sp1);
-    gmm::copy(gmm::scaled(Y1, -1.0*V[0]),
-	      gmm::sub_vector(V, gmm::sub_interval(1, N)) );
-  }
-  catch (...) {
-    singular_tangent_matrix = true;
-    cout << "Tangent matrix is close to be singular!" << endl;
-  }
-
-
-  try {	      
-    if (singular_tangent_matrix) {
-      plain_vector Q(1+N), R(1+N);
-      sparse_matrix B(1+N, 1+N);
-
-      gmm::copy(gmm::col_vector(T),
-		gmm::sub_matrix(B, gmm::sub_interval(0, N), gmm::sub_interval(0, 1)));
-      gmm::copy(A, gmm::sub_matrix(B, gmm::sub_interval(0, N), gmm::sub_interval(1, N)));
-      gmm::copy(gmm::row_vector(V),
-		gmm::sub_matrix(B, gmm::sub_interval(N, 1), gmm::sub_interval(0, 1+N)));
-		
-      gmm::copy(P, gmm::sub_vector(Q, gmm::sub_interval(0, N)));
-      Q[N] = 0.0;
-
-      gmm::clear(R);
-      R[N] = 1.0;	
-		    
-      gmm::SuperLU_factor<scalar_type> SLU;
-      SLU.build_with(B);
-      SLU.solve(dX, Q);
-      SLU.solve(V, R);
-    }
-    
-    gmm::add(gmm::scaled(dX, -1.0), X);
-    gmm::scale(V, 1.0/gmm::vect_norm2(V));
-
-    if (noisy > 1) cout << "linear solver done" << endl;
-  
-    normdX = gmm::vect_norm2(dX);
-    normP = gmm::vect_norm2(P);
-    if (noisy) cout << "difference " << normdX << " residual " << normP << endl;
-	      
-    if ((normdX < tolerance) && (normP < residual)) convergence = 2;
-    else if (normP > 1E10) convergence = 0;
-  }
-  catch (...) {
-    convergence = 0;
-    cout << "SuperLU failed!" << endl;
-  }
-
-  return convergence;
-
-} // compute_Newton_iteration
-	  
-
-template<class VEC, class STDVEC, class ALLOCVEC, class MAT>
-int elastostatic_problem::compute_test_functions
-(const VEC &UN, const VEC &UT, const VEC &UT0, const VEC &LN, const VEC &LT,
- MAT &TST, const MAT &TST0,  const STDVEC &contact_nodes, const ALLOCVEC &gap, 
- scalar_type deltat, scalar_type friction_coef) {
-
-  scalar_type r = PARAM.real_value("R", "Augmentation parameter");
-  scalar_type alpha = PARAM.real_value("ALPHA", "Augmentation parameter");
-  scalar_type beta = PARAM.real_value("BETA_T", "Augmentation parameter");
-  scalar_type classboundary = PARAM.real_value
-    ("CLASSBOUNDARY", "parameter for classification of the boundary"); 
-  int noisy = PARAM.int_value("NOISY");
-  size_type nbchange = 0, nblimit = 0;
-//   size_type N = mesh.dim();
-  
-  for (size_type i = 0; i < LN.size(); ++i) {
-//     if (LN[i]  > -1E-12)
-//       cout << "node " << i << " : " << contact_nodes[i] << " no contact ";
-//     else {
-//       scalar_type lt =
-// 	gmm::vect_norm2(gmm::sub_vector(LT, gmm::sub_interval(i*(N-1), N-1)));
-//       if (lt < - friction_coef * LN[i] - 1E-12)
-// 	cout << "node " << i << " : " << contact_nodes[i] << " sticking ";
-//       else
-// 	cout << "node " << i << " : " << contact_nodes[i] << " sliding ";
-//     }
-    
-    TST(i,0) = (LN[i] - r * alpha * (UN[i] - gap[i]));
-    if (deltat >= 0) {
-      TST(i,1) = -friction_coef * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i]);
-      TST(i,2) = friction_coef * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i]);
-    } else {
-      TST(i,1) = -friction_coef * LN[i] + LT[i] + r * beta * (UT[i] - UT0[i]);
-      TST(i,2) = friction_coef * LN[i] + LT[i] + r * beta * (UT[i] - UT0[i]);
-    }
-
-    if (noisy > 1) {
-      cout << "node " << i << " : " << contact_nodes[i] << " ";
-      cout << ((LN[i] - r * alpha * (UN[i] - gap[i])) <= 0)
-	   << (-friction_coef * LN[i] + LT[i] - r * (UT[i] - UT0[i]) / deltat >= 0)
-	   << (friction_coef * LN[i] + LT[i] - r * (UT[i] - UT0[i]) / deltat <= 0) << " ";
-      for (size_type j = 0; j < 3; ++j){
-	if (((TST0(i,j) < 0 && TST(i,j) > classboundary)
-	     || (TST0(i,j) > 0 && TST(i,j) < -classboundary))
-	    && (j == 0 || (j != 0 && TST(i,0) <= classboundary))) {
-	  cout << " change of the sign: " << TST0(i,j) << " -> ";
-	  ++nbchange;
-	}
-	else if (((TST(i,j) >= -classboundary && TST(i,j) <= classboundary)
-	     || (TST(i,j) >= -classboundary && TST(i,j) <= classboundary))
-	    && (j == 0 || (j != 0 && TST(i,0) <= classboundary))) {
-	  cout << " close to a limit: ";
-	  ++nblimit;
-	}
-	cout << TST(i,j) << " ";
-      }
-      cout << endl;
-
-      if (noisy > 2)
-	cout << LN[i] << " " << r * alpha * (UN[i] - gap[i]) << " "
-	     << -friction_coef * LN[i] + LT[i] << " "
-	     << friction_coef * LN[i] + LT[i] << " " << r * beta * (UT[i]-UT0[i]) << endl;
-    }
-  }
-
-  if (noisy > 1) {
-    cout << "Number of changes of characters = " << nbchange << endl;
-    cout << "Number of test functions on a limit = " << nblimit << endl;
-  }
-
-  return nbchange + nblimit;
-}
-
-
-bool elastostatic_problem::solve(plain_vector &U) {
-  
-  size_type nb_dof_rhs = mf_rhs.nb_dof();
-  size_type N = mesh.dim();
-  size_type law_num = PARAM.int_value("LAW");
-  // Linearized elasticity brick.
-  base_vector p(3); p[0] = p1; p[1] = p2; p[2] = p3;
- 
-  /* choose the material law */
-  getfem::abstract_hyperelastic_law *pl = 0;
-  switch (law_num) {
-    case 0:
-    case 1: pl = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
-    case 2: pl = new getfem::Ciarlet_Geymonat_hyperelastic_law(); break;
-    case 3: pl = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
-    case 4 : case 5 : break;
-    default: GMM_ASSERT1(false, "no such law");
-  }
-  
-  getfem::mdbrick_abstract<> *pELAS = 0;
-  getfem::mdbrick_nonlinear_elasticity<> *pELAS_nonlin = 0;
-  getfem::mdbrick_isotropic_linearized_elasticity<> *pELAS_lin = 0;
-  
-  if (law_num < 4) {
-    p.resize(pl->nb_params());
-    pELAS = pELAS_nonlin
-      = new getfem::mdbrick_nonlinear_elasticity<>(*pl, mim, mf_u, p);
-  } else {
-    pELAS = pELAS_lin = new getfem::mdbrick_isotropic_linearized_elasticity<>
-      (mim, mf_u, law_num == 5 ? 0.0 : p[0], p[1]);
-  }
-  
-  getfem::mdbrick_abstract<> *pINCOMP = pELAS;
-  switch (law_num) {
-    case 1: 
-    case 3: pINCOMP = new getfem::mdbrick_nonlinear_incomp<>(*pELAS, mf_p);
-      break;
-    case 5: {
-      getfem::mdbrick_linear_incomp<> *pb = 
-        new getfem::mdbrick_linear_incomp<>(*pELAS, mf_p);
-      pINCOMP = pb;
-      pb->penalization_coeff().set(1.0/p[0]);
-    }
-  }
-  
-  int nb_step = int(PARAM.int_value("NBSTEP"));
-  scalar_type deltat = PARAM.real_value("DELTAT", "Time step");
- 
-  // contact condition for Lagrange elements
-  dal::bit_vector cn = mf_u.basic_dof_on_region(FRICTION_BOUNDARY_NUM);
-  sparse_matrix BN(cn.card()/N, mf_u.nb_dof());
-  sparse_matrix BT((N-1)*cn.card()/N, mf_u.nb_dof());
-  std::vector<base_node> contact_nodes;
-  plain_vector gap(cn.card()/N);
-  size_type jj = 0;
-  for (dal::bv_visitor i(cn); !i.finished(); ++i)
-    if (i % N == 0) {
-      BN(jj, i+N-1) = -1.;
-      gap[jj] = mf_u.point_of_basic_dof(i)[N-1];
-      contact_nodes.push_back(mf_u.point_of_basic_dof(i));
-      for (size_type k = 0; k < N-1; ++k) BT((N-1)*jj+k, i+k) = 1.;
-      ++jj;
-    }
-  
-    // creating force density vectors
-  int nbc = int(jj);
-  sparse_matrix MMBN(nbc, nbc), MMBT(nbc*(N-1), nbc*(N-1));
-  plain_vector LN1(nbc), LT1(nbc*(N-1));
-  {
-    sparse_matrix BB(mf_u.nb_dof(), mf_u.nb_dof());
-    getfem::asm_mass_matrix(BB, mim, mf_u, mf_u, FRICTION_BOUNDARY_NUM);
-    std::vector<size_type> indN, indT;
-    for (dal::bv_visitor i(cn); !i.finished(); ++i)
-      if ((i%N) == N-1) indN.push_back(i); else indT.push_back(i);
-    gmm::sub_index SUBI(indN);
-    gmm::copy(gmm::sub_matrix(BB, SUBI, SUBI), MMBN);
-    gmm::sub_index SUBJ(indT);
-    gmm::copy(gmm::sub_matrix(BB, SUBJ, SUBJ), MMBT);    
-  }
-
-
-
-  scalar_type friction_coef = PARAM.real_value("FRICTION_COEFF",
-					       "Friction cefficient");
-  scalar_type r = PARAM.real_value("R", "Augmentation parameter");
-  scalar_type alpha = PARAM.real_value("ALPHA", "Augmentation parameter");
-  gmm::dense_matrix<size_type> CH(nbc+1, 4);
-  CH(0,0) = size_type(-1);
-  
-
-  getfem::mdbrick_Coulomb_friction<> FRICTION(*pINCOMP, BN, gap,
-					      friction_coef, BT);
-  FRICTION.set_r(r);
-  FRICTION.set_alpha(alpha);
-  // if (deltat < 0) FRICTION.set_beta(-1.0); 
-  FRICTION.set_beta(1./deltat);
-  FRICTION.set_CH(CH);
- 
-  // Defining the volumic source term.
-  base_vector f(N);
-  f[0] = PARAM.real_value("FORCEX","Amplitude of the gravity");
-  f[1] = PARAM.real_value("FORCEY","Amplitude of the gravity");
-  if (N>2)
-    f[2] = PARAM.real_value("FORCEZ","Amplitude of the gravity");
-  plain_vector F(nb_dof_rhs * N);
-  for (size_type i = 0; i < nb_dof_rhs; ++i) {
-    gmm::copy(f, gmm::sub_vector(F, gmm::sub_interval(i*N, N)));
-  }
-
-  getfem::mdbrick_source_term<> VOL_F(FRICTION, mf_rhs, F);
-
-  // Dirichlet condition
-  plain_vector F2(nb_dof_rhs * N);
-  getfem::mdbrick_Dirichlet<> final_model(VOL_F, DIRICHLET_BOUNDARY_NUM);
-  final_model.rhs().set(mf_rhs, F2);
-  final_model.set_constraints_type(getfem::constraints_type
-				   (PARAM.int_value("DIRICHLET_VERSION")));
-
-  // Generic solver.
-  getfem::standard_model_state MS(final_model);
-  size_type maxit = PARAM.int_value("MAXITER"); 
-  int noisy = PARAM.int_value("NOISY");
-  gmm::iteration iter;
-
-  size_type continuation = PARAM.int_value("CONTINUATION", "Continuation method");
-  int step_init = PARAM.int_value("STEP_INIT");
-
-  scalar_type dz = PARAM.real_value("DIRICHLET_Z",
-				    "Prescribed displacement in z");
-  scalar_type dyv = PARAM.real_value("DIRICHLET_Y_SPEED",
-				     "Prescribed velocity in y");
-
-
-  bool converged = true;
-  char strstep[100];
-  size_type stot = gmm::mat_ncols(MS.tangent_matrix());
-  scalar_type t = 0, deltat0 = deltat;
-  plain_vector UN(gmm::mat_nrows(BN)), UT(gmm::mat_nrows(BT)), UT0(gmm::mat_nrows(BT));
-  plain_vector U0 = U, U00 = U0;
-  plain_vector X0(1+stot);
-  bgeot::base_matrix TST0(nbc,3), TST(nbc,3);
-
-  if (step_init > 0) { // load initial values
-    sprintf(strstep, "step%d", step_init);
-    gmm::vecload(datafilename + strstep + ".U",U0);
-    gmm::vecload(datafilename + strstep + ".X",X0);
-    t = X0[0];
-    gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(1, stot)), MS.state());
-    Harwell_Boeing_load(datafilename + strstep + ".TST", TST0);
-  }
-
-  for (int step = step_init; step < nb_step; ++step) { /* Newton */
-    
-    if ((step > 2) && (continuation > 0)) break;  /* proceed to continuations */
-    
-    cout << "beginning of step " << step+1
-	 << ", number of variables : " << final_model.nb_dof() << endl;
-    
-    t += (step < 2) ? 0.0 : deltat;
-    if (noisy) cout << "t = " << t << " (deltat = " << deltat << ")" << endl;
-
-    for (size_type i = 0; i < nb_dof_rhs; ++i) {
-      F2[i*N+N-1] = (step < 2) ? dz*(step+1)/2.0 : dz;
-      F2[i*N+N-2] = t*dyv;
-    }
-    final_model.rhs().set(F2);
-    
-    FRICTION.set_WT(gmm::scaled(U0, -1.0));
-    
-    
-    iter = gmm::iteration(residual, noisy, maxit ? maxit : 40000);
-    cout << "|U| = " << gmm::vect_norm2(MS.state()) << "\n";
-    
-    
-    
-    /* let the default non-linear solve (Newton) do its job */
-    gmm::default_newton_line_search ls;
-    getfem::standard_solve(MS, final_model, iter,
-			   getfem::default_linear_solver(final_model), ls);
-    
-    
-
-    if (law_num < 4) {
-      pl->reset_unvalid_flag();
-      final_model.compute_residual(MS);
-      if (pl->get_unvalid_flag()) 
-	GMM_WARNING1("The solution is not completely valid, the determinant "
-		     "of the transformation is negative on "
-		     << pl->get_unvalid_flag() << " gauss points");
-    }
-    
-    if (law_num < 4)
-      gmm::copy(pELAS_nonlin->get_solution(MS), U);
-    else
-      gmm::copy(pELAS_lin->get_solution(MS), U);
-    
-    gmm::copy(FRICTION.get_LN(MS), LN1);
-    gmm::copy(FRICTION.get_LT(MS), LT1);
-    
-    gmm::mult(BN, U, UN);
-    gmm::mult(BT, U, UT);
-    gmm::mult(BT, U0, UT0);
-
-    compute_test_functions(UN, UT, UT0, LN1, LT1, TST, TST0, contact_nodes,
-			   gap, deltat, friction_coef);
-    
-    
-    converged = iter.converged();
-    if (!converged) break;
-    
-    gmm::copy(U0, U00);
-    gmm::copy(U, U0);
-    gmm::copy(TST, TST0);
-    X0[0] = t;
-    gmm::copy(MS.state(), gmm::sub_vector(X0, gmm::sub_interval(1, stot)));
-    
-    char s[100]; sprintf(s, "step%d", step+1);
-    gmm::vecsave(datafilename + s + ".U",U);
-    
-    plain_vector VM(mf_vm.nb_dof());
-    if (law_num < 4)
-      pELAS_nonlin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
-    else
-      pELAS_lin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
-    gmm::vecsave(datafilename + s + ".VM", VM);
-    
-    gmm::vecsave(datafilename + s + ".X", X0);
-    Harwell_Boeing_save(datafilename + s + ".TST", TST);
-    
-    cout << "end of Step n° " << step+1 << " / " << nb_step << endl;
-    
-  } // Newton
-  
-
-  if (continuation > 0){
-    GMM_ASSERT1(PARAM.int_value("DIRICHLET_VERSION") == 0,
-		"Continuations only implemented for Dirichlet "
-		"condition with multipliers");
-
-    size_type maxcorrit = PARAM.int_value("MAXCORRITER");
-    size_type ind =  final_model.first_ind(), sc = gmm::vect_size(final_model.get_CRHS());
-    plain_vector T(stot);
-
-    /* load initial values if necessary and compute derivative with respect to time */
-    if (step_init < 3) step_init = 3;
-    else {
-      sprintf(strstep, "step%d", step_init-1);
-      plain_vector X00(1+stot);
-      gmm::vecload(datafilename + strstep + ".X",X00);
-      deltat0 = X0[0] - X00[0];
-      // (deltat0 < 0) ? FRICTION.set_beta(-1.0) : FRICTION.set_beta(1.0);
-      FRICTION.set_beta(1./deltat0);
-      gmm::vecload(datafilename + strstep + ".U",U00);  
-      FRICTION.set_WT(gmm::scaled(U00, -1.0));
-      
-      for (size_type i = 0; i < nb_dof_rhs; ++i) {
-	F2[i*N+N-1] = dz;
-	F2[i*N+N-2] = t*dyv;
-      }    
-      final_model.rhs().set(F2);	    
-      
-      final_model.compute_tangent_matrix(MS);
-    }
-   
-    gmm::copy(final_model.get_CRHS(),
-	      gmm::sub_vector(T, gmm::sub_interval(ind, sc)));
-    for (size_type i = 0; i < sc/N; ++i) 
-      T[ind+i*N + N-1] = 0.;
-    gmm::scale(T, -1.0/t);
-    
-    sprintf(strstep, "step%d", step_init);
-    gmm::vecload(datafilename + strstep + ".U",U0);
-    
-
-    if (continuation < 2){ /* Euler-Newton */
-      scalar_type deltat_max = PARAM.real_value("DELTAT_MAX", "Maximal step length");
-      scalar_type deltat_min = PARAM.real_value("DELTAT_MIN", "Minimal step length");
-      scalar_type deltat_inc_fac = PARAM.real_value("DELTAT_INC_FAC", "Increment factor");
-      scalar_type deltat_dec_fac = PARAM.real_value("DELTAT_DEC_FAC", "Decrement factor");
-
-      int corrections;
-      double rcond;
-      plain_vector V0(stot), V(stot);
-
-      gmm::SuperLU_solve(MS.tangent_matrix(), V0, T, rcond); // compute initial tangent
-
-      // (deltat < 0) ? FRICTION.set_beta(-1.0) : FRICTION.set_beta(1.0);
-      FRICTION.set_beta(1./deltat);
-      
-      for (int step = step_init; step < nb_step; ++step) {
-	cout << "beginning of step " << step+1 
-	     << ", number of variables : " << final_model.nb_dof() << endl;
-	  
-	FRICTION.set_WT(gmm::scaled(U0, -1.0));
-	corrections = 1;
-
-	while (1) {
-	  /* predict next point */
-	  gmm::add(gmm::scaled(V0, -deltat), MS.state()); 
-
-	  t = X0[0] + deltat;
-	  if (noisy) cout << "t = " << t << " (deltat = " << deltat << ")" << endl;
-	  
-	  for (size_type i = 0; i < nb_dof_rhs; ++i) {
-	    F2[i*N+N-1] = dz;
-	    F2[i*N+N-2] = t*dyv;
-	  }
-	  final_model.rhs().set(F2);
-	  
-	  
-	  iter = gmm::iteration(residual, noisy, maxcorrit ? maxcorrit : 40000);
-	  cout << "|U| = " << gmm::vect_norm2(MS.state()) << "\n";
-	  
-	  
-	  
-	  /* let the default non-linear solve (Newton) do its job */
-	  gmm::default_newton_line_search ls;
-	  getfem::standard_solve(MS, final_model, iter,
-				 getfem::default_linear_solver(final_model), ls);
-
-
-	  
-	  if (law_num < 4) {
-	    pl->reset_unvalid_flag();
-	    final_model.compute_residual(MS);
-	    if (pl->get_unvalid_flag()) 
-	      GMM_WARNING1("The solution is not completely valid, the determinant "
-			   "of the transformation is negative on "
-			   << pl->get_unvalid_flag() << " gauss points");
-	  }
-	  
-	  if (law_num < 4)
-	    gmm::copy(pELAS_nonlin->get_solution(MS), U);
-	  else
-	    gmm::copy(pELAS_lin->get_solution(MS), U);
-	  
-	  gmm::copy(FRICTION.get_LN(MS), LN1);
-	  gmm::copy(FRICTION.get_LT(MS), LT1);
-	  
-	  gmm::mult(BN, U, UN);
-	  gmm::mult(BT, U, UT);
-	  gmm::mult(BT, U0, UT0);
-	  
-	  int nb_nodes = compute_test_functions(UN, UT, UT0, LN1, LT1, TST,TST0, 
-				       	contact_nodes, gap, deltat, friction_coef);
-	  
-	  
-	  gmm::SuperLU_solve(MS.tangent_matrix(), V, T, rcond);
-	  
-	  scalar_type SP = (gmm::vect_sp(V, V0) / (gmm::vect_norm2(V) * gmm::vect_norm2(V0)));
-	  cout << "SP = " << SP << endl;
-	  
-	  if (iter.converged() && ((SP > 0.9) || ((SP <= 0.9) && (nb_nodes < 2))))
-	    break;
-	  
-	  if (deltat > deltat_min) {
-	    deltat = (deltat*deltat_dec_fac > deltat_min)
-	      ? deltat*deltat_dec_fac : deltat_min;
-	    // if (deltat < 0) FRICTION.set_beta(-1.0); 
-	    FRICTION.set_beta(1./deltat);
-	    ++corrections;
-	    gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(1, stot)), MS.state());
-	  }
-	} // while (1)
-   
-	converged = iter.converged();
-	if (!converged) break;
-	
-	deltat0 = deltat;
-	gmm::copy(U0, U00);
-	gmm::copy(U, U0); 
-	gmm::copy(V, V0);
-	gmm::copy(TST, TST0);
-	X0[0] = t;
-	gmm::copy(MS.state(), gmm::sub_vector(X0, gmm::sub_interval(1, stot)));
-
-	char s[100]; sprintf(s, "step%d", step+1);
-	gmm::vecsave(datafilename + s + ".U",U);
-   
-	plain_vector VM(mf_vm.nb_dof());
-	if (law_num < 4)
-	  pELAS_nonlin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
-	else
-	  pELAS_lin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
-	gmm::vecsave(datafilename + s + ".VM", VM);
-
-	gmm::vecsave(datafilename + s + ".X", X0);
-	Harwell_Boeing_save(datafilename + s + ".TST", TST);
-
-	if ((deltat < deltat_max) && (corrections == 1) && (iter.converged())) {
-	  deltat = (deltat*deltat_inc_fac < deltat_max) ? deltat*deltat_inc_fac : deltat_max;
-	  // if (deltat < 0) FRICTION.set_beta(-1.);
-	  FRICTION.set_beta(1./deltat);
-	}
-
-	cout << "end of Step n° " << step+1 << " / " << nb_step << endl;	
-      } // for (int step = 3; step < nb_step; ++step)
-
-    } // Euler-Newton
-  
-
-    else { /* Moore-Penrose */
-      scalar_type tolerance = PARAM.real_value("TOLERANCE");
-      if (tolerance == 0.) tolerance = 1e-10;
-      scalar_type h = PARAM.real_value("H", "Actual step length");
-      scalar_type h_init = PARAM.real_value("H_INIT", "Initial step length");
-      scalar_type h_max = PARAM.real_value("H_MAX", "Maximal step length");
-      scalar_type h_min = PARAM.real_value("H_MIN", "Minimal step length");
-      scalar_type h_inc_fac = PARAM.real_value("H_INC_FAC", "Increment factor");
-      scalar_type h_dec_fac = PARAM.real_value("H_DEC_FAC", "Decrement factor");
-
-      int convergence = 1, corrections;
-      plain_vector V0(1+stot), V(1+stot), X(1+stot);
-       gmm::dense_matrix<size_type> CH0(nbc+1, 4);
-       CH0(0,0) = size_type(-1);
-
-      if (step_init < 4) {
-	gmm::clear(V0);
-	V0[0] = 1.0;
-	compute_tangent(T, MS.tangent_matrix(), V0, noisy);
-      }
-      else {
-	gmm::vecload(datafilename + strstep + ".V",V0);
-      }
-
-      gmm::copy(X0, X);
-      gmm::copy(V0, V);
-      
-      for (int step = step_init; step < nb_step; ++step) {
-	cout << "beginning of step " << step+1
-	     << ", number of variables : " << final_model.nb_dof() << endl;
-	
-	FRICTION.set_WT(gmm::scaled(U0, -1.0));
-	corrections = 1;
-      
-	cout << " |U| = " << gmm::vect_norm2(MS.state()) << "\n";
-	
-	while (1) {
-	  
-	  /* predict next point */
-	  gmm::add(gmm::scaled(V0, h), X);
-	  cout << "h = " << h << endl;
-	  
-	  for (size_type j = 0; j < maxcorrit; ++j) {
-	    if (noisy) cout << "iter " << j << endl;
-	    if (noisy > 1) cout << "starting computing matrices" << endl;
-	    
-	    gmm::copy(gmm::sub_vector(X, gmm::sub_interval(1, stot)), MS.state());
-
-	    deltat = X[0]-X0[0];
-	    // (deltat < 0) ? FRICTION.set_beta(-1.0) : FRICTION.set_beta(1.0); 
-	    FRICTION.set_beta(1./deltat);
-	  	    
-	    t = X[0];
-	    for (size_type i = 0; i < nb_dof_rhs; ++i) {
-	      F2[i*N+N-1] = dz;
-	      F2[i*N+N-2] = t*dyv;
-	    }
-	    final_model.rhs().set(F2);	    
-	    
-	    final_model.compute_tangent_matrix(MS);
-	    final_model.compute_residual(MS);
-
-	    if (noisy) cout << "t = " << t << " (deltat = " << deltat << ")" << endl;
-
-	    if (noisy > 2) {
-	      if (law_num < 4)
-		gmm::copy(pELAS_nonlin->get_solution(MS), U);
-	      else
-		gmm::copy(pELAS_lin->get_solution(MS), U);
-	      
-	      gmm::copy(FRICTION.get_LN(MS), LN1);
-	      gmm::copy(FRICTION.get_LT(MS), LT1);
-	      
-	      gmm::mult(BN, U, UN);
-	      gmm::mult(BT, U, UT);
-	      gmm::mult(BT, U0, UT0);
-	      
- 	      compute_test_functions(UN, UT, UT0, LN1, LT1, TST, TST0,
-				     contact_nodes, gap, deltat, friction_coef);
-	    }
-	    
-	    convergence = compute_Newton_iteration(T, MS.tangent_matrix(), V, X,
-						  MS.residual(), tolerance, residual, noisy);
-	    cout << "SP = " << gmm::vect_sp(V, V0) << endl;
-	  
-	    if (convergence < 1) break; /* an error occured */
-
-	    if (convergence > 1) {/* convergence */
-	      
-	      gmm::copy(gmm::sub_vector(X, gmm::sub_interval(1, stot)), MS.state());
-	   
-	      CH(0,0) = size_type(-1);
-	      FRICTION.set_CH(CH);
-	      
-	      deltat = X[0]-X0[0];
-	      // (deltat < 0.) ? FRICTION.set_beta(-1.) : FRICTION.set_beta(1.); 
-	      FRICTION.set_beta(1./deltat);
-	      
-	      t = X[0];
-	      for (size_type i = 0; i < nb_dof_rhs; ++i) {
-		F2[i*N+N-1] = dz;
-		F2[i*N+N-2] = t*dyv;
-	      }
-	      
-	      final_model.rhs().set(F2);	    
-	      
-	      final_model.compute_tangent_matrix(MS);
-	      final_model.compute_residual(MS);
-
-	      scalar_type res = gmm::vect_norm2(MS.residual());
-	      cout << "final residual = " << res << endl;
-	      if (res < residual)
-		compute_tangent(T, MS.tangent_matrix(), V, noisy);
-	      else convergence = 1;
-		
-	      break;
-
-	    } // if (convergence > 1)
-	  
-	  } // for (size_type j = 1; j < maxcorrit; ++j)
-	
-	  if (convergence > 1) { /* convergence */
-	    if (law_num < 4) {
-	      pl->reset_unvalid_flag();
-	      final_model.compute_residual(MS);
-	      if (pl->get_unvalid_flag()) 
-		GMM_WARNING1("The solution is not completely valid, the determinant "
-			     "of the transformation is negative on "
-			     << pl->get_unvalid_flag() << " gauss points");
-	    }
-	    
-	    if (law_num < 4)
-	      gmm::copy(pELAS_nonlin->get_solution(MS), U);
-	    else
-	      gmm::copy(pELAS_lin->get_solution(MS), U);
-	    
-	    deltat = X[0]-X0[0];
-
-	    if (deltat < 0.0) cout << "Warning: deltat is negative!" << endl;
-	    
-	    gmm::copy(FRICTION.get_LN(MS), LN1);
-	    gmm::copy(FRICTION.get_LT(MS), LT1);
-
-	    gmm::mult(BN, U, UN);
-	    gmm::mult(BT, U, UT);
-	    gmm::mult(BT, U0, UT0);
-	     
-	    int nb_nodes = compute_test_functions(UN, UT, UT0, LN1, LT1, TST, TST0,
-					      contact_nodes, gap, deltat, friction_coef);
-
-	    
-	    scalar_type SP = gmm::vect_sp(V, V0);
-	    cout << "SP = " << SP << endl;
-	    
-	    if ((SP > 0.9) || ((SP > 0.7) && (nb_nodes < 2)))
-	      break;
-// 	    else {
-// 	      cout << "Do you want to accept this increment? (1, 0, -1) ";
-// 	      int sign;
-// 	      cin >> sign;
-// 	      if (sign != 0) {
-// 		if (sign < 0) gmm::scale(V, -1.0);
-// 		h = h_init;
-// 		++corrections;
-// 		break;
-// 	      }
-// 	    }
-	    
-	  } // if (convergence > 1)
-	  
-	  if (h > h_min) {
-	    FRICTION.set_CH(CH0);
-	    gmm::copy(X0, X);
-	    gmm::copy(V0, V);
-	    h = (h*h_dec_fac > h_min) ? h*h_dec_fac : h_min;
-	    ++corrections;
-	  }
-	  else { /* try to change the Jacobian */
-	      
-	    cout << "Set changes: ";
-	    for (int i = 0; i < nbc+1; ++i) {
-	      cin >> CH(i,0) >> CH(i,1) >> CH(i,2) >> CH(i,3);
-	      if (CH(i,0) == size_type(-1)) break;
-	    }
-	    
-	    for (int i = 0; i < nbc; ++i) {
-	      CH0(i,0) = i;
-	      CH0(i,1) = (TST0(i,0) <= 0) ? 1 : 0;
-	      if (TST0(i,1) < 0) { CH0(i,2) = 0; CH0(i,3) = 1; }
-	      else if (TST0(i,2) > 0) { CH0(i,2) = 1; CH0(i,3) = 0; }
-	      else { CH0(i,2) = 1; CH0(i,3) = 1; }
-	    }
-	    for (int i = 0; i < nbc; ++i) {
-	      if (CH(i,0) == size_type(-1)) break;
-	      CH0(CH(i,0), 1) = CH(i,1);
-	      CH0(CH(i,0), 2) = CH(i,2);
-	      CH0(CH(i,0), 3) = CH(i,3);
-	    }
-	    CH0(nbc,0) = size_type(-1);
-	    
-	    gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(1, stot)), MS.state());
-	    gmm::copy(V0, V);
-	    
-	    t = X0[0];
-	    for (size_type i = 0; i < nb_dof_rhs; ++i) {
-	      F2[i*N+N-1] = dz;
-	      F2[i*N+N-2] = t*dyv;
-	    }
-	    
-	    final_model.rhs().set(F2);
-	    FRICTION.set_WT(gmm::scaled(U00, -1.0));
-	    // (deltat0 < 0.0) ? FRICTION.set_beta(-1.0) : FRICTION.set_beta(1.0);
-	    FRICTION.set_beta(1./deltat0);
-	    
-	    final_model.compute_tangent_matrix(MS);
-	   
-	    FRICTION.set_CH(CH0);
-	    FRICTION.do_compute_tangent_matrix(MS, 0, 0);
-	    compute_tangent(T, MS.tangent_matrix(), V0, noisy);
-	   
-	    CH0(0,0) = size_type(-1);
-	    FRICTION.set_CH(CH0);
-	    FRICTION.set_WT(gmm::scaled(U0, -1.0));
-	      
-	    cout << "Choose a sign for the tangent (1, 0, -1): ";
-	    int sign;
-	    cin >> sign;
-	    if (sign == 0) {
-	      convergence = 1; /* no convergence */
-	      break;
-	    }
-	    if (sign < 0) gmm::scale(V0, -1.0);
-	    cout << "SP = " << gmm::vect_sp(V, V0) << endl;
-	    
-	    gmm::copy(X0, X);
-	    gmm::copy(V0, V);
-	    h = h_init;
-
-	  } // try to change the Jacobian
-	
-	} // while (1)
-	    
-	converged = (convergence > 1);
-	if (!converged) break;
-
-	CH0(0,0) = size_type(-1);
-	deltat0 = deltat;
-	gmm::copy(U0, U00);
-	gmm::copy(U, U0); 
-	gmm::copy(X, X0);
-	gmm::copy(V, V0);
-	gmm::copy(TST, TST0);
-
-	char s[100]; sprintf(s, "step%d", step+1);
-	gmm::vecsave(datafilename + s + ".U",U);
-	
-	plain_vector VM(mf_vm.nb_dof());
-	if (law_num < 4)
-	  pELAS_nonlin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
-	else
-	  pELAS_lin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
-	gmm::vecsave(datafilename + s + ".VM", VM);
-
-	gmm::vecsave(datafilename + s + ".X", X);
-	gmm::vecsave(datafilename + s + ".V", V);
-	Harwell_Boeing_save(datafilename + s + ".TST", TST);
-	
-	if ((h < h_max) && (corrections == 1) && (convergence > 1)) {
-	  h = (h*h_inc_fac < h_max) ? h*h_inc_fac : h_max;
-	}
-
-	cout << "end of Step n° " << step+1 << " / " << nb_step << endl;
-      
-      } // for (int step = 3; step < nb_step; ++step)
-    
-    } // Moore-Penrose
-
-  } // continuation
-  
-
-  if (law_num == 5 || law_num == 3 || law_num == 1) delete pINCOMP;    
-  
-  return converged;
-  
-}
-
-  
-/**************************************************************************/
-/*  main program.                                                         */
-/**************************************************************************/
-
-int main(int argc, char *argv[]) {
-
-  GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
-  FE_ENABLE_EXCEPT;        // Enable floating point exception for Nan.
-
-   // try {    
-    elastostatic_problem p;
-    p.PARAM.read_command_line(argc, argv);
-    p.init();
-    p.mesh.write_to_file(p.datafilename + ".mesh");
-    p.mf_u.write_to_file(p.datafilename + ".mf", true);
-    p.mf_rhs.write_to_file(p.datafilename + ".mfd", true);
-    p.mf_vm.write_to_file(p.datafilename + ".mfvm", true);
-    plain_vector U(p.mf_u.nb_dof());
-    if (!p.solve(U)) cerr << "Solve has failed\n";
-    if (p.PARAM.int_value("VTK_EXPORT")) {
-      cout << "export to " << p.datafilename + ".vtk" << "..\n";
-      getfem::vtk_export exp(p.datafilename + ".vtk",
-			     p.PARAM.int_value("VTK_EXPORT")==1);
-      exp.exporting(p.mf_u); 
-      exp.write_point_data(p.mf_u, U, "elastostatic_displacement");
-      cout << "export done, you can view the data file with (for example)\n"
-	"mayavi -d " << p.datafilename << ".vtk -f ExtractVectorNorm -f "
-	"WarpVector -m BandedSurfaceMap -m Outline &\n";
-    }
-  // }   GMM_STANDARD_CATCH_ERROR;
-
-  return 0;
-  
-}
diff --git a/contrib/contact_grd_trans/contact_continuation_load.cc b/contrib/contact_grd_trans/contact_continuation_load.cc
new file mode 100755
index 0000000..8cd3425
--- /dev/null
+++ b/contrib/contact_grd_trans/contact_continuation_load.cc
@@ -0,0 +1,1444 @@
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien  Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+/**
+   @file contact_continuation_load.cc
+   @brief Nonlinear Problem with Friction (large strain).
+
+   A rubber bar is submitted to a large torsion. If the standard
+   solver (Newton) fails, one tries to find a more suitable initial
+   approximation by numerical continuation with respect to the
+   Dirichlet condition and then restart the standard solver.
+   NOTE: The continuation is proposed only for the quasi-static case.
+   
+   This program is used to check that getfem++ is working. This is
+   also a good example of use of Getfem++.
+*/
+
+#include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
+#include "getfem/getfem_export.h"   /* export functions (save solution in a file)  */
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_model_solvers.h"
+#include "getfem/getfem_nonlinear_elasticity.h"
+#include "getfem/getfem_Coulomb_friction.h"
+#include "getfem/getfem_superlu.h"
+#include "gmm/gmm.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+/* some Getfem++ types that we will be using */
+using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
+using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
+using bgeot::base_vector;
+using bgeot::scalar_type; /* = double */
+using bgeot::size_type;   /* = unsigned long */
+using bgeot::base_matrix; /* small dense matrix. */
+
+/* definition of some matrix/vector types.  These ones are built
+ * using the predefined types in Gmm++
+ */
+typedef getfem::modeling_standard_sparse_vector sparse_vector;
+typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
+typedef getfem::modeling_standard_plain_vector  plain_vector;
+
+/*
+  structure for the frictional problem
+*/
+struct friction_problem {
+
+  enum { DIRICHLET_BOUNDARY_NUM = 0, FRICTION_BOUNDARY_NUM = 1, NEUMANN_BOUNDARY_NUM = 2};
+  getfem::mesh mesh;         /* the mesh */
+  getfem::mesh_im mim;       /* the integration methods */
+  getfem::mesh_fem mf_u;     /* main mesh_fem, for the elastostatic solution */
+  getfem::mesh_fem mf_p;     /* mesh_fem for the pressure.                   */
+  getfem::mesh_fem mf_rhs;   /* mesh_fem for the right hand side (f(x),..)   */
+  getfem::mesh_fem mf_coef;  /* mesh_fem used to represent pde coefficients  */
+  getfem::mesh_fem mf_vm;    /* mesh_fem used for the von Mises stress       */
+  scalar_type p1, p2, p3;    /* elastic coefficients.                        */
+  scalar_type LX, LY, LZ;    /* system dimensions                            */
+  scalar_type lambda, mu;    /* Lame coefficients                            */
+  scalar_type residual;      /* max residual for the iterative solvers       */
+  bool is_dynamic;
+  scalar_type rho;           /* density                                      */
+  size_type nocontact_mass;
+  std::string datafilename;
+  bgeot::md_param PARAM;
+
+  bool solve(plain_vector &U);
+  void init(void);
+  friction_problem(void) : mim(mesh), mf_u(mesh), mf_p(mesh), mf_rhs(mesh), mf_coef(mesh), mf_vm(mesh) {}
+};
+
+
+/* Read parameters from the .param file, build the mesh, set finite element
+   and integration methods and selects the boundaries.
+
+   (this is boilerplate code, not very interesting)
+ */
+void friction_problem::init(void) {
+  std::string MESH_TYPE = PARAM.string_value("MESH_TYPE","Mesh type ");
+  std::string FEM_TYPE  = PARAM.string_value("FEM_TYPE","FEM name");
+  std::string FEM_TYPE_P  = PARAM.string_value("FEM_TYPE_P","FEM name for the pressure");
+  std::string INTEGRATION = PARAM.string_value("INTEGRATION",
+					       "Name of integration method");
+  cout << "MESH_TYPE=" << MESH_TYPE << "\n";
+  cout << "FEM_TYPE="  << FEM_TYPE << "\n";
+  cout << "INTEGRATION=" << INTEGRATION << "\n";
+
+  /* First step : build the mesh */
+  bgeot::pgeometric_trans pgt = 
+    bgeot::geometric_trans_descriptor(MESH_TYPE);
+  size_type N = pgt->dim();
+  
+  LX = PARAM.real_value("LX", "Length along X axis");
+  LY = PARAM.real_value("LY", "Length along Y axis");
+  LZ = PARAM.real_value("LZ", "Length along Z axis");
+  std::string meshfilename = PARAM.string_value("MESHFILENAME");
+  int nb_refine = PARAM.int_value("NBREFINE") ? PARAM.int_value("NBREFINE") : 0;
+  scalar_type layerx = PARAM.real_value("LAYERX",
+					"Thickness of the refinement along the X-axis");
+  scalar_type layery = PARAM.real_value("LAYERY",
+					"Thickness of the refinement along the Y-axis");
+  scalar_type layerx_fact = PARAM.real_value("LAYERX_FACT", "Multiplicative factor");
+  scalar_type layery_fact = PARAM.real_value("LAYERY_FACT", "Multiplicative factor");
+  lambda = PARAM.real_value("LAMBDA", "Lame coefficient lambda");
+  mu = PARAM.real_value("MU", "Lame coefficient mu");
+
+  if (meshfilename.size() > 0)
+    mesh.read_from_file(meshfilename);
+  else {
+    std::vector<size_type> nsubdiv(N);
+    std::fill(nsubdiv.begin(),nsubdiv.end(),
+	      PARAM.int_value("NX", "Number of space steps "));
+    nsubdiv[1] = PARAM.int_value("NY") ? PARAM.int_value("NY") : nsubdiv[0];
+    if (N>2) nsubdiv[2] = PARAM.int_value("NZ") ? PARAM.int_value("NZ") : nsubdiv[0];
+    getfem::regular_unit_mesh(mesh, nsubdiv, pgt,
+			      PARAM.int_value("MESH_NOISED") != 0);
+
+    bgeot::base_matrix M(N,N);
+    for (size_type i=0; i < N; ++i) {
+      static const char *t[] = {"LX","LY","LZ"};
+      M(i,i) = (i<3) ? PARAM.real_value(t[i],t[i]) : 1.0;
+    }
+    if (N>1) { M(0,1) = PARAM.real_value("INCLINE") * PARAM.real_value("LY"); }
+    
+    /* scale the unit mesh to [LX,LY,..] and incline it */
+    mesh.transformation(M);
+  }
+
+  if (nb_refine > 0) { /* refinement in the right-bottom corner */
+    dal::bit_vector cvref;
+    for (int i = 0; i < nb_refine; ++i) {
+      cvref.clear();
+      for (dal::bv_visitor j(mesh.convex_index()); !j.finished(); ++j) {
+	if ((mesh.points_of_convex(j)[0][0] > LX * (1 - layerx)
+	     && mesh.points_of_convex(j)[1][0] > LX * (1 - layerx)
+	     && mesh.points_of_convex(j)[2][0] > LX * (1 - layerx))
+	    && (mesh.points_of_convex(j)[0][N-1] < LY * layery
+		&& mesh.points_of_convex(j)[1][N-1] < LY * layery
+		&& mesh.points_of_convex(j)[2][N-1] < LY * layery))
+	  cvref.add(j);
+      }
+      mesh.Bank_refine(cvref);
+      layerx *= layerx_fact;
+      layery *= layery_fact;
+    }
+  }
+
+  datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
+  residual = PARAM.real_value("RESIDUAL"); if (residual == 0.) residual = 1e-10;
+
+  is_dynamic = (PARAM.int_value("DYNAMIC", "Is dynamic?") != 0);
+  rho = PARAM.real_value("RHO", "Density");
+  nocontact_mass = PARAM.int_value("NOCONTACT_MASS", "Suppress the mass "
+				   "of contact nodes");
+
+  p1 = PARAM.real_value("P1", "First Elastic coefficient");
+  p2 = PARAM.real_value("P2", "Second Elastic coefficient");
+  p3 = PARAM.real_value("P3", "Third Elastic coefficient");
+  
+  mf_u.set_qdim(bgeot::dim_type(N));
+
+  /* set the finite element on the mf_u */
+  getfem::pfem pf_u = 
+    getfem::fem_descriptor(FEM_TYPE);
+  getfem::pintegration_method ppi = 
+    getfem::int_method_descriptor(INTEGRATION);
+
+  mim.set_integration_method(ppi);
+  mf_u.set_finite_element(pf_u);
+
+  mf_p.set_finite_element(getfem::fem_descriptor(FEM_TYPE_P));
+
+  /* set the finite element on mf_rhs (same as mf_u if DATA_FEM_TYPE is
+     not used in the .param file */
+  std::string data_fem_name = PARAM.string_value("DATA_FEM_TYPE");
+  if (data_fem_name.size() == 0) {
+    GMM_ASSERT1(pf_u->is_lagrange(), "You are using a non-lagrange FEM"
+		". In that case you need to set "
+		<< "DATA_FEM_TYPE in the .param file");
+    mf_rhs.set_finite_element(mesh.convex_index(), pf_u);
+  } else {
+    mf_rhs.set_finite_element(mesh.convex_index(), 
+			      getfem::fem_descriptor(data_fem_name));
+  }
+  
+  /* set the finite element on mf_coef. Here we use a very simple element
+   *  since the only function that need to be interpolated on the mesh_fem 
+   * is f(x)=1 ... */
+  mf_coef.set_finite_element(mesh.convex_index(),
+			     getfem::classical_fem(pgt,0));
+
+  mf_vm.set_classical_discontinuous_finite_element(1);
+
+  /* set boundary conditions
+   * (Dirichlet on the upper face, contact on the bottom face 
+   *  and on parts of the adjacent faces, Neumann elsewhere) */
+      cout << "Selecting the Dirichlet, Neumann and contact boundaries\n";
+  getfem::mesh_region border_faces;
+  getfem::outer_faces_of_mesh(mesh, border_faces);
+  for (getfem::mr_visitor it(border_faces); !it.finished(); ++it) {
+    assert(it.is_face());
+    base_node un = mesh.normal_of_face_of_convex(it.cv(), it.f());
+    un /= gmm::vect_norm2(un);
+    if (gmm::abs(un[N-1] - 1.0) < 1.0E-7) { 
+      mesh.region(DIRICHLET_BOUNDARY_NUM).add(it.cv(),it.f());
+    } else if (gmm::abs(un[N-1] + 1.0) < 1.0E-7) {
+      mesh.region(FRICTION_BOUNDARY_NUM).add(it.cv(),it.f());
+    } else if (mesh.points_of_convex(it.cv())[0][N-1] < LY * 0.3)
+      mesh.region(FRICTION_BOUNDARY_NUM).add(it.cv(),it.f());
+  }
+}
+
+/* The Iteration object for corrections */
+class iteration_corr {
+  size_type maxiter; /* Max. number of iterations.                       */
+  int noise;         /* if noise > 0 iterations are printed.             */
+  double resmax;     /* maximum residual.                                */
+  double diffmax;    /* maximum difference.                              */
+  size_type nit;     /* iteration number.                                */
+  double res;        /* last computed residual.                          */
+  double diff;       /* last computed difference.                        */
+public:
+  void init(void) { 
+    nit = 0; res = 0.0; diff = 0.0; 
+    }
+
+  iteration_corr(double r = 1.0E-8, double d = 1.0E-8, int noi = 0,
+		 size_type mit = size_type(-1))
+    : maxiter(mit), noise(noi), resmax(r), diffmax(d) { init(); }
+
+  void  operator ++(int) {  nit++; }
+
+  int get_noisy(void) const { return noise; }
+  void set_res(double r) { res = r; }
+  void set_diff(double d) { diff = d; }
+  size_type get_iteration(void) const { return nit; }
+
+  bool converged(void) { return (res <= resmax && diff <= diffmax); }
+
+  bool finished(void) {
+    if (noise > 0)
+      cout << "iter " << nit << " residual " << gmm::abs(res)
+	   << " difference " << gmm::abs(diff) << endl;
+    return ((nit >= maxiter || res > 1.0E+200) || converged());
+  }
+};
+
+/* The object for adaptation of the continuation to non-smoothness of
+   the problem by means of active selection functions */
+class selections {
+  size_type row, nba;
+  gmm::dense_matrix<bool> CH;
+  gmm::dense_matrix<size_type> ACT;
+  plain_vector LV;
+public:
+  void clear(void) { row = nba = 0; }
+  selections(void) { clear(); }
+  bool empty(void) { return (nba == 0); }
+
+  template<typename CH_MATRIX, typename T_MATRIX, typename VECT>
+  void proper_update
+  (const VECT &contact_nodes, const CH_MATRIX &CH_, const T_MATRIX &TST, scalar_type limit,
+   int noisy);
+
+  template<typename MODEL_STATE, typename CH_MATRIX, typename VECT>
+  bool compute_new_tangent
+  (MODEL_STATE &MS, getfem::mdbrick_abstract<MODEL_STATE> &final_model,
+   getfem::mdbrick_Dirichlet<MODEL_STATE> &DIRICHLET,
+   getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const VECT &contact_nodes,
+   plain_vector grad_XI, const plain_vector &F2_start, const plain_vector &deltaF2,
+   const plain_vector &X, plain_vector &T, CH_MATRIX &CH_, int noisy);
+
+  template<typename MODEL_STATE>
+  void determine_tangent_orientation
+  (getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const plain_vector &UN,
+   const plain_vector &UT, const plain_vector &UT0, const plain_vector &LN,
+   const plain_vector &LT, plain_vector &T);  
+};
+
+template<typename MAT>
+void compute_condition_number(const MAT &M) {
+/* computes the smallest and the largest eigenvalue of the matrix M
+   and then its condition number */
+  
+  size_type N = gmm::mat_nrows(M);
+  plain_vector V(N), U(N), W(N);
+  plain_vector V2(N), U2(N);  
+  gmm::fill_random(V);
+  gmm::fill_random(V2);
+  scalar_type lambda = 0., lambda2 = 0.;
+  gmm::SuperLU_factor<scalar_type> SLU;
+  SLU.build_with(M);
+  
+  for(size_type i = 0; i < 100; ++i) {
+    gmm::scale(V, 1./gmm::vect_norm2(V));
+    gmm::scale(V2, 1./gmm::vect_norm2(V2));
+    SLU.solve(U, V);
+    gmm::mult(M, V2, U2);
+    
+    lambda = gmm::vect_sp(U, V) / gmm::vect_sp(V, V);
+    lambda2 = gmm::vect_sp(U2, V2) / gmm::vect_sp(V2, V2);
+    
+    gmm::add(V, gmm::scaled(U, -1./lambda), W);
+//     if (i > 90)
+//       cout << "iteration " << i << " norm(W) = " <<  gmm::vect_norm2(W)
+// 	   << " lambda = " << lambda 
+// 	   << " lambda2 = " << lambda2 << endl;
+    if (gmm::vect_norm2(W) < 1E-2) break;
+    
+    gmm::copy(U, V);
+    gmm::copy(U2, V2);
+  }
+  
+  // cout << "Smallest eigenvalue : " << 1.0/lambda << endl;
+  // cout << "Largest eigenvalue : " << lambda2 << endl;
+  cout << "Condition number: " << lambda2 * lambda << endl;
+  
+}
+
+template<typename MAT, typename VECT1, typename VECT2>
+void compute_tangent(const MAT &A, const VECT1 &B, VECT2 &T, int noisy) {
+/* computes a unit tangent at the point X to the curve given implicitly by the equation H = 0
+   with the Jacobian grad H(X) = (A|B) which is positively oriented w.r.t. the vector T
+   and saves it into T, i.e.:
+   solves (A|B)T_+ = 0 & T.T_+ = 1;
+   sets T = T_+ / ||T_+||; */
+
+  bool singular_A = false;
+  size_type N = gmm::mat_nrows(A);
+  double rcond;
+		
+  try { /* whether A is singular; if not, the calculation can be accelerated provided that 
+	   A is sparse  */
+    scalar_type sp;
+    plain_vector Y(N);
+    if (noisy > 1) cout << "starting computing tangent" << endl;
+
+    gmm::SuperLU_solve(A, Y, B, rcond);
+    sp = gmm::vect_sp(gmm::sub_vector(T, gmm::sub_interval(0,N)), Y);
+		  
+    T[N] = 1.0 / (T[N] - sp);
+    gmm::copy(gmm::scaled(Y, -1.0*T[N]),
+	      gmm::sub_vector(T, gmm::sub_interval(0, N)));
+  }
+  catch (...) {
+    singular_A = true;
+  }
+  
+  if (singular_A) {
+    sparse_matrix C(N+1, N+1);
+    plain_vector R(N+1);
+
+    gmm::copy(A, gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(0, N)));
+    gmm::copy(gmm::col_vector(B),
+	      gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(N, 1)));
+    gmm::copy(gmm::row_vector(T),
+	      gmm::sub_matrix(C, gmm::sub_interval(N, 1), gmm::sub_interval(0, N+1)));
+
+    gmm::clear(R);
+    R[N] = 1.0;		  
+    
+    gmm::SuperLU_solve(C, T, R, rcond);
+  }
+
+  gmm::scale(T, 1.0/gmm::vect_norm2(T));
+}
+
+template<typename MAT, typename VECT1, typename VECT2>
+void correction_solver
+(const MAT &A, const VECT1 &B, VECT2 &X, VECT2 &T, const VECT1 &P, iteration_corr &iter) {
+/* computes one correction step of the Moore-Penrose method for continuing the implicit curve
+   H = 0 with P = H(X), (A|B) = grad H(X), X and T being the approximations of the point
+   and the tangent, respectively, i.e.:
+   solves (A|B)T_+ = 0 & T.T_+ = 1;
+   solves (A|B)dX = P; T.dX = 0;
+   sets X = X - dX;
+   sets T = T_+ / ||T_+||;  */
+
+  bool singular_A = false;
+  size_type N = gmm::mat_nrows(A);
+  plain_vector dX(N+1);
+
+  try { /* whether A is singular; if not, the calculation can be accelerated provided that 
+	   A is sparse */
+    scalar_type sp1, sp2;
+    plain_vector Y1(N), Y2(N);
+
+    compute_condition_number(A);
+
+    gmm::SuperLU_factor<scalar_type> SLU;
+    SLU.build_with(A);
+    SLU.solve(Y1, B);
+    SLU.solve(Y2, P);
+
+    sp1 = gmm::vect_sp(gmm::sub_vector(T, gmm::sub_interval(0,N)), Y1);
+    sp2 = gmm::vect_sp(gmm::sub_vector(T, gmm::sub_interval(0,N)), Y2);
+		
+    dX[N] = sp2 / (sp1 - T[N]);
+    gmm::add(gmm::scaled(Y1, -1.0*dX[N]), Y2);
+    gmm::copy(Y2, gmm::sub_vector(dX, gmm::sub_interval(0, N)));
+		
+    T[N] = 1.0 / (T[N] - sp1);
+    gmm::copy(gmm::scaled(Y1, -1.0*T[N]),
+	      gmm::sub_vector(T, gmm::sub_interval(0, N)) );
+  }
+  catch (...) {
+    singular_A = true;
+  }
+
+
+  try {
+    if (singular_A) {
+      plain_vector Q(N+1), R(N+1);
+      sparse_matrix C(N+1, N+1);
+
+      gmm::copy(A, gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(0, N)));
+      gmm::copy(gmm::col_vector(B),
+		gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(N, 1)));
+      gmm::copy(gmm::row_vector(T),
+		gmm::sub_matrix(C, gmm::sub_interval(N, 1), gmm::sub_interval(0, N+1)));
+		
+      gmm::copy(P, gmm::sub_vector(Q, gmm::sub_interval(0, N)));
+      Q[N] = 0.0;
+
+      gmm::clear(R);
+      R[N] = 1.0;	
+		    
+      gmm::SuperLU_factor<scalar_type> SLU;
+      SLU.build_with(C);
+      SLU.solve(dX, Q);
+      SLU.solve(T, R);
+    }
+  }
+  catch (...) {
+    cout << "SuperLU failed!" << endl;
+  }
+    
+  gmm::add(gmm::scaled(dX, -1.0), X);
+  gmm::scale(T, 1.0/gmm::vect_norm2(T));
+
+  iter.set_diff(gmm::vect_norm2(dX));
+
+}
+
+template<typename MODEL_STATE>
+void standard_solver
+(MODEL_STATE &MS, getfem::mdbrick_abstract<MODEL_STATE> &final_model,
+ getfem::mdbrick_Dirichlet<MODEL_STATE> &DIRICHLET, const plain_vector &F2,
+gmm::iteration &iter) {
+  /* standard solver (Newton) */
+
+  DIRICHLET.rhs().set(F2);
+// cout << "F2 = " << F2 << endl;
+// cout << "|U| = " << gmm::vect_norm2(MS.state()) << "\n";
+
+  getfem::basic_newton_line_search ls(size_type(-1), 5.0/3.0, 0.1, 0.5, 3.0);
+//   getfem::default_newton_line_search ls;
+  getfem::standard_solve(MS, final_model, iter,
+			 getfem::default_linear_solver(final_model), ls);
+}
+
+template<typename MODEL_STATE>
+void Newton_correction
+(MODEL_STATE &MS, getfem::mdbrick_abstract<MODEL_STATE> &final_model,
+ getfem::mdbrick_Dirichlet<MODEL_STATE> &DIRICHLET, const plain_vector &grad_XI,
+ const plain_vector &F2_start, const plain_vector &deltaF2, plain_vector &X, plain_vector &T,
+ iteration_corr &iter) {
+
+  size_type stot = gmm::mat_ncols(MS.tangent_matrix());
+  plain_vector F2 = F2_start;
+
+  gmm::copy(gmm::sub_vector(X, gmm::sub_interval(0, stot)), MS.state());
+  gmm::add(gmm::scaled(deltaF2, X[stot]), F2);
+  DIRICHLET.rhs().set(F2);
+
+  final_model.compute_residual(MS);
+
+  do {
+    if (iter.get_noisy() > 1)
+      cout << "starting computing tangent matrix" << endl;
+    final_model.compute_tangent_matrix(MS);
+
+    if (iter.get_noisy() > 1)
+      cout << "starting linear solver" << endl;
+    correction_solver(MS.tangent_matrix(), grad_XI, X, T, MS.residual(), iter);
+    if (iter.get_noisy() > 1) 
+      cout << "linear solver done" << endl;
+
+    gmm::copy(gmm::sub_vector(X, gmm::sub_interval(0, stot)), MS.state());
+    gmm::copy(F2_start, F2);
+    gmm::add(gmm::scaled(deltaF2, X[stot]), F2);
+    DIRICHLET.rhs().set(F2);
+
+    final_model.compute_residual(MS);
+    iter.set_res(gmm::vect_norm2(MS.residual()));
+
+    iter++;
+  } while (!iter.finished());
+}
+
+template<typename MODEL_STATE>
+void compute_displacement
+(MODEL_STATE &MS, getfem::mdbrick_abstract<MODEL_STATE> &final_model,
+ getfem::abstract_hyperelastic_law &l,
+ getfem::mdbrick_nonlinear_elasticity<MODEL_STATE> &ELAS_nonlin,
+ getfem::mdbrick_isotropic_linearized_elasticity<MODEL_STATE> &ELAS_lin, plain_vector &U,
+ size_type law_num) {
+
+  if (law_num < 4) {
+    l.reset_unvalid_flag();
+    final_model.compute_residual(MS);
+    if (l.get_unvalid_flag()) 
+      GMM_WARNING1("The solution is not completely valid, the determinant "
+		   "of the transformation is negative on "
+		   << l.get_unvalid_flag() << " Gauss points");
+    
+    gmm::copy(ELAS_nonlin.get_solution(MS), U);
+  } else
+    gmm::copy(ELAS_lin.get_solution(MS), U);
+}
+
+template<typename MODEL_STATE>
+void compute_von_Mises
+(MODEL_STATE &MS, getfem::mdbrick_nonlinear_elasticity<MODEL_STATE> &ELAS_nonlin,
+ getfem::mdbrick_isotropic_linearized_elasticity<MODEL_STATE> &ELAS_lin,
+ getfem::mesh_fem &mf_vm, plain_vector &VM, size_type law_num) {
+  /* computes the von Mises stress from the solution */
+  if (law_num < 4)
+    ELAS_nonlin.compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
+  else 
+    ELAS_lin.compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
+}
+
+template<typename MODEL_STATE>
+scalar_type compute_test_function
+(getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const plain_vector &UN,
+ const plain_vector &UT, const plain_vector &UT0, const plain_vector &LN,
+ const plain_vector &LT, size_type i, size_type j) {
+  
+  scalar_type r = FRICTION.get_r(), alpha = FRICTION.get_alpha(), beta = FRICTION.get_beta();
+  plain_vector gap(LN.size()), friction_coef(LN.size());
+  scalar_type tst;
+    
+  gmm::copy(FRICTION.get_gap(), gap);
+  gmm::copy(FRICTION.get_friction_coef(), friction_coef);
+
+  switch (j) {
+  case 0: tst = (LN[i] - r * alpha * (UN[i] - gap[i])) / r; break;
+  case 1: tst = (-friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i])) / r; break;
+  default: tst = (friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i])) / r; break;
+  }
+
+  return tst;
+}
+
+template<typename MODEL_STATE, typename T_MATRIX>
+void compute_test_functions
+(getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const plain_vector &UN,
+ const plain_vector &UT, const plain_vector &UT0, const plain_vector &LN,
+ const plain_vector &LT, T_MATRIX &TST) {
+  
+  scalar_type r = FRICTION.get_r();
+  scalar_type alpha = FRICTION.get_alpha(), beta = FRICTION.get_beta();
+  plain_vector gap(LN.size()), friction_coef(LN.size());
+    
+  gmm::copy(FRICTION.get_gap(), gap);
+  gmm::copy(FRICTION.get_friction_coef(), friction_coef);
+
+  for (size_type i = 0; i < LN.size(); ++i) {
+    TST(i, 0) = (LN[i] - r * alpha * (UN[i] - gap[i])) / r;
+    TST(i, 1) = (- friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i])) / r;
+    TST(i, 2) = (friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i])) / r;
+  }
+}
+
+template<typename MODEL_STATE, typename CH_MATRIX, typename T_MATRIX, typename VECT>
+void compute_activity
+(getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const VECT &contact_nodes,
+ const plain_vector &UN, const plain_vector &UT, const plain_vector &UT0,
+ const plain_vector &LN, const plain_vector &LT, CH_MATRIX &CH, T_MATRIX &TST, int noisy) {
+
+  compute_test_functions(FRICTION, UN, UT, UT0, LN, LT, TST);
+
+  if (noisy > 1)
+    cout << "characters of the solution:" << endl;
+
+  for (size_type i = 0; i < LN.size(); ++i) {
+    CH(i, 0) = (TST(i, 0) <= 0);
+    CH(i, 1) = (TST(i, 1) >= 0);
+    CH(i, 2) = (TST(i, 2) <= 0);
+
+    if (noisy > 1)
+      cout << "node " << i << ": " << contact_nodes[i] << " "
+	   << CH(i, 0) << CH(i, 1) << CH(i, 2)
+//            << " " << TST(i, 0) << " " << TST(i, 1) << " " << TST(i, 2)
+	   << endl;
+  }
+}
+
+template<typename MODEL_STATE, typename CH_MATRIX, typename T_MATRIX, typename VECT>
+size_type compute_activity
+(getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const VECT &contact_nodes,
+ const plain_vector &UN, const plain_vector &UT, const plain_vector &UT0,
+ const plain_vector &LN, const plain_vector &LT, const CH_MATRIX &CH0, CH_MATRIX &CH,
+ T_MATRIX &TST, scalar_type x_min, int noisy) {
+  
+  size_type nch = 0, nch_i = 0;
+
+  compute_activity(FRICTION, contact_nodes, UN, UT, UT0, LN, LT, CH, TST, noisy);
+
+  for (size_type i = 0; i < LN.size(); ++i) {
+    nch_i = 0;
+    for (size_type j = 0; j < 3; ++j) {
+      if ((CH(i, j) != CH0(i, j)) && (j == 0 || (j > 0 && (CH(i, 0) || CH0(i, 0))))
+	  && contact_nodes[i][0] >= x_min)
+	++nch_i;
+    }
+
+    if (nch_i > 0) {
+      if (nch == 0)
+	cout << "changes of characters:" << endl;
+      cout << "node " << i << ": " << contact_nodes[i] << " "
+	   << CH0(i, 0) << CH0(i, 1) << CH0(i, 2) << " -> "
+	   << CH(i, 0) << CH(i, 1) << CH(i, 2) << endl;
+      nch += nch_i;
+    }
+  }
+  
+  return nch;
+}
+
+template<typename MATRIX>
+void straight_insertion
+(MATRIX &M, plain_vector &KEY, size_type i) {
+/* places the i-th row of M according to the absolut values of the corresponding components
+   in KEY; increasing order is wanted in the first i components of KEY */
+
+  bool found;
+  size_type j = i;
+  std::vector<size_type> X(2);
+  scalar_type X_KEY;
+
+  X[0] = M(i, 0); X[1] = M(i, 1);
+  X_KEY = KEY[i];
+  if (j == 0) found = true;
+  else found = (gmm::abs(X_KEY) >= gmm::abs(KEY[j - 1]));
+ 
+  while (!found) { // seeking the appropriate  position
+    KEY[j] = KEY[j - 1];
+    M(j, 0) = M(j - 1, 0);
+    M(j, 1) = M(j - 1, 1);
+    --j;
+    if (j == 0) found = true;
+    else found = (gmm::abs(X_KEY) >= gmm::abs(KEY[j - 1]));
+  }
+
+  M(j, 0) = X[0]; M(j, 1) = X[1];
+  KEY[j] = X_KEY;
+}
+
+template<typename CH_MATRIX, typename T_MATRIX, typename VECT>
+void selections::proper_update
+(const VECT &contact_nodes, const CH_MATRIX &CH_, const T_MATRIX &TST, scalar_type limit,
+ int noisy) {
+
+  size_type nbc = gmm::mat_nrows(CH_);
+
+  if (noisy > 1) {
+    cout << "characters of the last computed solution:" << endl;
+    for (size_type i = 0; i < nbc; ++i)
+      cout << "node " << i << ": " << contact_nodes[i] << " " 
+	   << CH_(i, 0) << CH_(i, 1) << CH_(i, 2) << endl;
+  }
+
+  if (gmm::mat_nrows(CH) == 0) {
+    gmm::resize(CH, nbc, 3); gmm::resize(ACT, 3 * nbc, 2); gmm::resize(LV, 3 * nbc);
+  }
+
+  gmm::copy(CH_, CH);
+  nba = 0;
+
+  for (size_type i = 0; i < nbc; ++i) {   
+    for (size_type j = 0; j < 3; ++j)
+      if (gmm::abs(TST(i, j)) <= limit) {
+	if (nba == 0)
+	  cout << "test functions with values close to zero:" << endl;
+	cout << "TST(" << i << ", " << j << ") = " << TST(i, j) << endl;
+	
+	ACT(nba, 0) = i; ACT(nba, 1) = j; LV[nba] = TST(i, j);
+	straight_insertion(ACT, LV, nba);
+	++nba;
+      }
+  }
+
+  if (nba == 0)
+    cout << "No test functions with values close to zero were founded. " << endl;
+  if (nba >= nbc) {
+    row = nba;
+    cout << "The continuation path seems to be circular. " << endl;
+  }
+}
+
+template<typename MODEL_STATE, typename CH_MATRIX, typename VECT>
+bool selections::compute_new_tangent
+(MODEL_STATE &MS, getfem::mdbrick_abstract<MODEL_STATE> &final_model,
+ getfem::mdbrick_Dirichlet<MODEL_STATE> &DIRICHLET,
+ getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const VECT &contact_nodes,
+ plain_vector grad_XI, const plain_vector &F2_start, const plain_vector &deltaF2,
+ const plain_vector &X, plain_vector &T, CH_MATRIX &CH_, int noisy) {
+  /* comes through the proposed Jacobians and changes exactly one character */
+
+  bool new_tangent = false;
+  size_type stot = gmm::mat_ncols(MS.tangent_matrix());
+  plain_vector F2 = F2_start;
+  
+  if (row < nba) {
+    gmm::copy(gmm::sub_vector(X, gmm::sub_interval(0, stot)), MS.state());
+    gmm::add(gmm::scaled(deltaF2, X[stot]), F2);
+    DIRICHLET.rhs().set(F2);
+    
+    size_type i, j;
+    while (!new_tangent && row < nba) {
+	
+      i = ACT(row, 0), j = ACT(row, 1);
+      CH(i, j) = !CH(i, j);
+      
+      if ((CH(i, 0) && (CH(i, 1) || CH(i, 2))) || (!CH(i, 0) && CH(i, 1) != CH(i, 2))) {
+	/* the transition is meaningful */
+	cout << "enforcing transition of node " << i << ": " << contact_nodes[i] << " ";
+	switch (j) {
+	case 0: cout << !CH(i, 0) << CH(i, 1) << CH(i, 2); break;
+	case 1: cout << CH(i, 0) << !CH(i, 1) << CH(i, 2); break;
+	case 2: cout << CH(i, 0) << CH(i, 1) << !CH(i, 2); break;
+	}
+	cout << " -> " << CH(i, 0) << CH(i, 1) << CH(i, 2) << endl;
+	
+	FRICTION.set_character_matrix(CH);
+	final_model.compute_tangent_matrix(MS);
+	
+	compute_tangent(MS.tangent_matrix(), grad_XI, T, noisy);
+	new_tangent = true; gmm::copy(CH, CH_);
+      }
+      
+      CH(i, j) = !CH(i, j);
+      ++row;
+    }
+    
+    FRICTION.clear_character_matrix();
+  }
+  
+  return new_tangent;
+  
+}
+
+template<typename MODEL_STATE>
+void selections::determine_tangent_orientation
+(getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const plain_vector &UN,
+ const plain_vector &UT, const plain_vector &UT0, const plain_vector &LN,
+ const plain_vector &LT, plain_vector &T) {
+
+  size_type i = ACT(row - 1, 0), j = ACT(row - 1, 1);
+  scalar_type tst = compute_test_function(FRICTION, UN, UT, UT0, LN, LT, i, j);
+
+  if (LV[row - 1] * (tst - LV[row - 1])  > 0) {
+    gmm::scale(T, -1.0);
+    cout << "TST(i, j)(X0 + T) - TST(i, j)(X0) = " << LV[row - 1] - tst << ", ";
+  } else
+    cout << "TST(i, j)(X0 + T) - TST(i, j)(X0) = " << tst - LV[row - 1] << ", ";
+}
+  
+/**************************************************************************/
+/*  Model.                                                                */
+/**************************************************************************/
+
+bool friction_problem::solve(plain_vector &U) {
+  
+  size_type nb_dof_rhs = mf_rhs.nb_dof();
+  size_type N = mesh.dim();
+  size_type law_num = PARAM.int_value("LAW");
+  // Elasticity brick.
+  base_vector p(3); p[0] = p1; p[1] = p2; p[2] = p3;
+  
+  /* choose the material law */
+  getfem::abstract_hyperelastic_law *pl = 0, *pCG = 0;
+  switch (law_num) {
+  case 0:
+  case 1: pl = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
+  case 2:
+    if (N < 3) {
+      pCG = new getfem::Ciarlet_Geymonat_hyperelastic_law(); 
+      pl = new getfem::plane_strain_hyperelastic_law(pCG);
+    } else
+      pl = new getfem::Ciarlet_Geymonat_hyperelastic_law();
+    break;
+  case 3: pl = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
+  case 4 : case 5 : break;
+  default: GMM_ASSERT1(false, "no such law");
+  }
+  
+  getfem::mdbrick_abstract<> *pELAS = 0;
+  getfem::mdbrick_nonlinear_elasticity<> *pELAS_nonlin = 0;
+  getfem::mdbrick_isotropic_linearized_elasticity<> *pELAS_lin = 0;
+  
+  if (law_num < 4) {
+    p.resize(pl->nb_params());
+    pELAS = pELAS_nonlin
+      = new getfem::mdbrick_nonlinear_elasticity<>(*pl, mim, mf_u, p);
+  } else {
+    pELAS = pELAS_lin = new getfem::mdbrick_isotropic_linearized_elasticity<>
+      (mim, mf_u, law_num == 5 ? 0.0 : lambda, mu);
+  }
+  
+  getfem::mdbrick_abstract<> *pINCOMP = pELAS;
+  switch (law_num) {
+    case 1: 
+    case 3: pINCOMP = new getfem::mdbrick_nonlinear_incomp<>(*pELAS, mf_p);
+      break;
+    case 5: {
+      getfem::mdbrick_linear_incomp<> *pb = 
+        new getfem::mdbrick_linear_incomp<>(*pELAS, mf_p);
+      pINCOMP = pb;
+      pb->penalization_coeff().set(1.0/lambda);
+    }
+  }
+
+  size_type nb_step = int(PARAM.int_value("NBSTEP"));
+  scalar_type deltat = PARAM.real_value("DELTAT", "Time step");
+ 
+  // contact condition for the Lagrange elements
+  dal::bit_vector cn = mf_u.basic_dof_on_region(FRICTION_BOUNDARY_NUM);
+//   cout << "cn = " << cn << endl;
+//   cout << "cn.card()/N = " << cn.card()/N << endl;
+  sparse_matrix BN(cn.card()/N, mf_u.nb_dof());
+  sparse_matrix BT((N-1)*cn.card()/N, mf_u.nb_dof());
+  std::vector<base_node> contact_nodes;
+  plain_vector gap(cn.card()/N);
+  size_type jj = 0;
+  for (dal::bv_visitor i(cn); !i.finished(); ++i)
+    if (i % N == 0) {
+//       cout << "point de contact " << mf_u.point_of_dof(i) << endl;
+      BN(jj, i+N-1) = -1.;
+      gap[jj] = mf_u.point_of_basic_dof(i)[N-1];
+      contact_nodes.push_back(mf_u.point_of_basic_dof(i));
+      for (size_type k = 0; k < N-1; ++k) BT((N-1)*jj+k, i+k) = 1.;
+      ++jj;
+    }
+  
+    // creating force density vectors
+  int nbc = int(jj);
+//   sparse_matrix MMBN(nbc, nbc), MMBT(nbc*(N-1), nbc*(N-1));
+  plain_vector UN(nbc), UT(nbc*(N-1)), LN1(nbc), LT1(nbc*(N-1));
+//   {
+//     sparse_matrix BB(mf_u.nb_dof(), mf_u.nb_dof());
+//     getfem::asm_mass_matrix(BB, mim, mf_u, mf_u, FRICTION_BOUNDARY_NUM);
+//     std::vector<size_type> indN, indT;
+//     for (dal::bv_visitor i(cn); !i.finished(); ++i)
+//       if ((i%N) == N-1) indN.push_back(i); else indT.push_back(i);
+//     gmm::sub_index SUBI(indN);
+//     gmm::copy(gmm::sub_matrix(BB, SUBI, SUBI), MMBN);
+//     gmm::sub_index SUBJ(indT);
+//     gmm::copy(gmm::sub_matrix(BB, SUBJ, SUBJ), MMBT);    
+//   }
+
+
+
+  scalar_type friction_coef = PARAM.real_value("FRICTION_COEFF",
+					       "Friction cefficient");
+  scalar_type r = PARAM.real_value("R", "Augmentation parameter");
+  scalar_type alpha = PARAM.real_value("ALPHA") ? PARAM.real_value("ALPHA") : 1.0;
+  
+
+  getfem::mdbrick_Coulomb_friction<> FRICTION(*pINCOMP, BN, gap,
+					      friction_coef, BT);
+  FRICTION.set_r(r);
+  FRICTION.set_alpha(alpha);
+  FRICTION.set_beta(1./deltat);
+ 
+  // Defining the volumic source term.
+  base_vector f(N);
+  f[0] = PARAM.real_value("FORCEX","Amplitude of the gravity");
+  f[1] = PARAM.real_value("FORCEY","Amplitude of the gravity");
+  if (N>2)
+    f[2] = PARAM.real_value("FORCEZ","Amplitude of the gravity");
+  plain_vector F(nb_dof_rhs * N);
+  for (size_type i = 0; i < nb_dof_rhs; ++i) {
+    gmm::copy(f, gmm::sub_vector(F, gmm::sub_interval(i*N, N)));
+  }
+
+  getfem::mdbrick_source_term<> VOL_F(FRICTION, mf_rhs, F);
+
+  // Dirichlet condition
+  plain_vector F2(nb_dof_rhs * N);
+  getfem::mdbrick_Dirichlet<> DIRICHLET(VOL_F, DIRICHLET_BOUNDARY_NUM);
+  DIRICHLET.rhs().set(mf_rhs, F2);
+  DIRICHLET.set_constraints_type(getfem::constraints_type
+				   (PARAM.int_value("DIRICHLET_VERSION")));
+
+  getfem::mdbrick_abstract<> *pfinal_model = &DIRICHLET;
+  
+  getfem::mdbrick_dynamic<> *pDYNAMIC = 0;
+
+  // Eventual dynamic brick
+  if (is_dynamic) {
+    pfinal_model = pDYNAMIC = new getfem::mdbrick_dynamic<>(DIRICHLET, rho);
+    pDYNAMIC->set_dynamic_coeff(1./(deltat*deltat), 1.);
+    if (nocontact_mass)
+      pDYNAMIC->no_mass_on_boundary(FRICTION_BOUNDARY_NUM, nocontact_mass == 2);
+  }
+
+  // Generic solver.
+  getfem::standard_model_state MS(*pfinal_model);
+  size_type step0 = PARAM.int_value("STEP0") ? PARAM.int_value("STEP0") : 0;
+  bool start_standard_solver = (PARAM.int_value("STANDARD_SOLVER",
+						"Start with the standard solver?") != 0);
+  size_type step0_cont = start_standard_solver ? 0 : PARAM.int_value("STEP0_CONT");
+  size_type range_cont = start_standard_solver ? 1 : PARAM.int_value("RANGE_CONT");
+  size_type range_cont_inc = PARAM.int_value("RANGE_CONT_INC");
+  std::string X0filename = start_standard_solver ? "" : PARAM.string_value("X0FILENAME");
+  scalar_type h_init = PARAM.real_value("H_INIT", "Initial step length");
+  scalar_type h = PARAM.real_value("H") ? PARAM.real_value("H") : h_init;
+  scalar_type h_max = PARAM.real_value("H_MAX", "Maximal step length");
+  scalar_type h_min = PARAM.real_value("H_MIN", "Minimal step length");
+  scalar_type h_change = PARAM.real_value("H_CHANGE");
+  scalar_type h_inc = PARAM.real_value("H_INC");
+  scalar_type h_dec = PARAM.real_value("H_DEC");
+  scalar_type maxdist = PARAM.real_value("DISTANCE");
+  scalar_type XI_end = start_standard_solver ? 1. : PARAM.real_value("XI_END");
+  size_type maxit = PARAM.int_value("MAXITER");
+  gmm::iteration iter;
+
+  scalar_type dy = PARAM.real_value("DIRICHLET_Y",
+				    "Prescribed displacement in y");
+  scalar_type dxv = PARAM.real_value("DIRICHLET_X_SPEED",
+				     "Prescribed velocity in x");
+  scalar_type x_min = PARAM.real_value("X_MIN");
+  int noisy = PARAM.int_value("NOISY");
+
+
+  plain_vector U0 = U, UT0 = UT, V0(gmm::vect_size(U)), DF(gmm::vect_size(U));
+  gmm::dense_matrix<bool> CH_(nbc, 3), CH0_(nbc, 3);
+  gmm::dense_matrix<scalar_type> TST(nbc, 3);
+  short convergence = -1;
+//  plain_vector SumN(nb_step), SumT(nb_step),Pressure(nb_step);
+//  plain_vector maxT(nb_step);
+//  plain_vector maxN(nb_step);
+//  plain_vector max(nb_step);
+//  double Fmax =0;
+
+  if (step0 > 0){ /* load the foregoing values */
+    char s[100]; sprintf(s, "step%d", step0);
+    gmm::vecload(datafilename + s + ".U", U0);
+    gmm::vecload(datafilename + s + ".Y", MS.state());
+    if (is_dynamic)
+      gmm::vecload(datafilename + s + ".V", V0);
+  }
+ 
+
+  for (size_type step = step0; step < nb_step; ++step) {
+    cout << "beginning of step " << step+1 
+	     << ", number of variables : " << pfinal_model->nb_dof() << endl ;
+
+    convergence = -1;
+
+    do { /* seek the solution */
+      
+      if (is_dynamic) {
+	gmm::mult(pDYNAMIC->get_M(), gmm::scaled(U0, 1./(deltat*deltat)), DF);
+	gmm::mult_add(pDYNAMIC->get_M(), gmm::scaled(V0, 1./deltat), DF);
+	pDYNAMIC->set_DF(DF);
+      }
+      FRICTION.set_WT(gmm::scaled(U0, -1.0));
+      
+      /* in the first eleven iterations, the body is compressed,
+	 afterwards, it is pulling to the right while subject to a constant pressure */
+      for (size_type i = 0; i < nb_dof_rhs; ++i) {
+	F2[i*N+N-1] = (step < 10) ? (dy * step/10.0) : dy;
+	//  F2[i*N+N-1] = dy;
+	F2[i*N+N-2] = (step < 10) ? 0.0 : (step-10)*deltat*dxv;
+	// F2[i*N+N-1] = dy+dy*3*step/nb_step;
+      }
+
+      if (start_standard_solver) { /* the standard solver */
+	iter = gmm::iteration(residual, noisy, maxit ? maxit : 40000);
+	standard_solver(MS, *pfinal_model, DIRICHLET, F2, iter);
+
+	if (iter.converged()) {
+	  convergence = 1;
+	}
+	else {
+	  cout << "the standard solver has failed, ";
+	  if (convergence == 0) /* the initial approximation was given by the continuation */
+	    convergence = - 2;
+	}
+	  
+      } // the standard solver
+
+      if (convergence == -1) {
+	/* the solution has not been found by the standard solver; 
+	   proceed with continuation -- the continuation parameter XI is such that 
+	   the actual Dirichlet condition (load) is F2_start + XI * (F2 - F2_start) */
+
+	cout << "starting to continue" << endl;
+	GMM_ASSERT1(PARAM.int_value("DIRICHLET_VERSION") == 0, "The continuation only "
+		    "implemented for the Dirichlet condition with multipliers");
+	GMM_ASSERT1(!is_dynamic,
+		    "The continuation is proposed only for a quasi-static case");
+	
+	scalar_type difference = PARAM.real_value("DIFFERENCE");
+	if (difference == 0.) difference = 1e-10;
+	scalar_type minangle = PARAM.real_value("ANGLE");
+	scalar_type limit = PARAM.real_value("LIMIT", "limit for the test functions");
+	size_type maxit_corr = PARAM.int_value("MAXITER_CORR");
+	size_type thr_corr = PARAM.int_value("THRESHOLD_CORR");
+	size_type nb_step_cont = PARAM.int_value("NBSTEP_CONT");
+
+	short new_point;
+	scalar_type XI0;
+	size_type stot = gmm::mat_ncols(MS.tangent_matrix());
+	size_type ind =  DIRICHLET.first_ind();
+	size_type sc = gmm::vect_size(DIRICHLET.get_CRHS());
+	plain_vector UT_init(nbc*(N-1)), U_init(nb_dof_rhs * N), F2_start(nb_dof_rhs * N),
+	  F2_end = F2, deltaF2(nb_dof_rhs * N), grad_XI(stot), X0(stot+1), X(stot+1),
+	  T0(stot+1), T(stot+1), VM(mf_vm.nb_dof());;
+	gmm::dense_matrix<bool> CH(nbc, 3), CH0(nbc, 3);
+	gmm::dense_matrix<scalar_type> TST0(nbc, 3);
+
+ 	while (convergence == -1 && range_cont < step + 1) {
+	  cout << "Continuation " << step - range_cont + 1 << " -> " << step + 1 << endl;
+
+	  char s[100]; sprintf(s, "step%d", step - range_cont + 1);
+	  gmm::vecload(datafilename + s + ".U", U_init);
+	  FRICTION.set_WT(gmm::scaled(U_init, -1.0));
+	  gmm::mult(BT, U_init, UT_init);
+
+	  gmm::copy(F2_end, deltaF2);
+	  gmm::vecload(datafilename + s + ".F2", F2_start);
+	  gmm::add(gmm::scaled(F2_start, -1.0), deltaF2);
+	  DIRICHLET.rhs().set(deltaF2);
+	  pfinal_model->compute_tangent_matrix(MS);
+	  gmm::copy(DIRICHLET.get_CRHS(),
+		    gmm::sub_vector(grad_XI, gmm::sub_interval(ind, sc)));
+	  gmm::scale(grad_XI, -1.0);
+	  
+	  new_point = -1;
+	  if (step0_cont == 0 && (range_cont == 1 && X0filename.size() == 0)) {
+	    /* the starting point together with the corresponding tangent is given by
+	       the solution from the previous time step */
+	    cout << "the starting point is given by the solution "
+		 << "from the previous time step" << endl;
+	    sprintf(s, "step%d", step);
+	    gmm::vecload(datafilename + s + ".Y",  MS.state());
+	    gmm::vecload(datafilename + s + ".U",  U);
+	    gmm::vecload(datafilename + s + ".UN",  UN);
+	    gmm::vecload(datafilename + s + ".UT",  UT);
+	    gmm::vecload(datafilename + s + ".LN",  LN1);
+	    gmm::vecload(datafilename + s + ".LT",  LT1);
+	    gmm::vecload(datafilename + s + ".VM",  VM);
+	    sprintf(s, "step%d", step - 1);
+	    gmm::vecload(datafilename + s + ".UT",  UT0);
+	    gmm::copy(MS.state(), gmm::sub_vector(X0, gmm::sub_interval(0, stot)));
+	    XI0 = X0[stot] = 1. - 1. / range_cont;
+	    
+	    compute_activity(FRICTION, contact_nodes, UN, UT, UT0, LN1, LT1, CH0, TST0,
+			     noisy);
+	    // TST0 will not be up-to-date in the 1st iteration!!
+	    DIRICHLET.rhs().set(F2_start);
+	    FRICTION.set_character_matrix(CH0);
+	    pfinal_model->compute_tangent_matrix(MS);
+	    gmm::fill_random(T0);
+	    compute_tangent(MS.tangent_matrix(), grad_XI, T0, noisy);
+	    if (T0[stot] < 0) gmm::scale(T0, -1.0);
+	    FRICTION.clear_character_matrix();
+
+	    new_point = 1; 
+	  } else {
+	    if (step0_cont == 0) {
+	      if (range_cont > 1) {
+		/* an approximation of the starting point is given by
+		   the solution from the previous time step */
+		cout << "an approximation of the starting point is given by "
+		     << "the solution from the previous time step" << endl;
+		sprintf(s, "step%d", step);
+		gmm::vecload(datafilename + s + ".Y",  MS.state());
+		XI0 = X0[stot] = 1. - 1. / range_cont;
+	      } else {
+		/* an approximation of the starting point is loaded from a given file */
+		cout << "an approximation of the starting point is loaded" << endl;
+		gmm::vecload(X0filename, X0);
+		gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(0, stot)), MS.state());
+		XI0 = X0[stot];
+	      }
+
+	      cout << "XI0 = " << XI0 << endl;	    
+	      cout << "correcting the starting point" << endl;
+	      gmm::copy(F2_start, F2);
+	      gmm::add(gmm::scaled(deltaF2, XI0), F2);
+	      iter = gmm::iteration(residual, noisy, maxit ? maxit : 40000);
+	      standard_solver(MS, *pfinal_model, DIRICHLET, F2, iter);
+	      
+	      if (iter.converged()) {
+		gmm::copy(MS.state(), gmm::sub_vector(X0, gmm::sub_interval(0, stot)));
+		X0[stot] = XI0;
+		
+		/* the tangent is computed in the standard manner */
+		pfinal_model->compute_tangent_matrix(MS); 
+		gmm::fill_random(T0);
+		compute_tangent(MS.tangent_matrix(), grad_XI, T0, noisy);
+		if (T0[stot] < 0) gmm::scale(T0, -1.0);
+
+		new_point = 1;
+	      }
+	    } else  {
+	      /* the starting point is loaded together with the corresponding tangent */
+	      cout << "the starting point is loaded" << endl;
+	      char s1[100]; sprintf(s1, "step%d", step + 1);
+	      char s2[100]; sprintf(s2, "_%d", range_cont);
+	      char s3[100]; sprintf(s3, "_%d", step0_cont);
+	      gmm::vecload(datafilename + s1 + s2 + s3 + ".X", X0);
+	      gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(0, stot)), MS.state());
+	      XI0 = X0[stot];
+	      gmm::vecload(datafilename + s1 + s2 + s3 + ".T", T0);
+	      new_point = 1;
+	    }
+	    
+	    if (new_point == 1) {
+	      compute_displacement(MS, *pfinal_model, *pl, *pELAS_nonlin, *pELAS_lin, U,
+				   law_num);
+	      gmm::mult(BN, U, UN); gmm::mult(BT, U, UT);
+	      gmm::copy(FRICTION.get_LN(MS), LN1); gmm::copy(FRICTION.get_LT(MS), LT1);
+	      compute_activity(FRICTION, contact_nodes, UN, UT, UT_init, LN1, LT1, CH0, TST0,
+			       noisy + 1);
+	      compute_von_Mises(MS, *pELAS_nonlin, *pELAS_lin, mf_vm, VM, law_num);
+	    }
+	  }
+	    
+	  if (new_point == 1 && step0_cont == 0){
+	    char s1[100]; sprintf(s1, "step%d", step + 1);
+	    char s2[100]; sprintf(s2, "_%d", range_cont);
+	    gmm::vecsave(datafilename + s1 + s2 + "_0.U", U);
+	    gmm::vecsave(datafilename + s1 + s2 + "_0.UN", UN);
+	    gmm::vecsave(datafilename + s1 + s2 + "_0.UT", UT);
+	    gmm::vecsave(datafilename + s1 + s2 + "_0.LN", LN1);
+	    gmm::vecsave(datafilename + s1 + s2 + "_0.LT", LT1);
+	    gmm::vecsave(datafilename + s1 + s2 + "_0.X", X0);
+	    gmm::vecsave(datafilename + s1 + s2 + "_0.VM", VM);
+	  }
+	  
+	  size_type nb_dec;
+	  selections sel;
+	  iteration_corr iter_corr;
+	  size_type step_cont = step0_cont;
+	  h_init /= range_cont; h_max /= range_cont; h_min /= range_cont;
+	  h_change /= range_cont; maxdist /= range_cont; 
+	  
+	  while (new_point == 1 && gmm::abs(XI_end - XI0) > maxdist && -XI0 < step
+		 && step_cont < nb_step_cont) {
+	    cout << "beginning of step " << step + 1 << "_" << range_cont << "_"
+		 << step_cont + 1 << ", number of variables : " << stot + 1<< endl;
+	    nb_dec = 0;
+	    
+	    do { /* seek a new point */
+	      new_point = -1;
+	      cout << "XI0 = " << XI0 << ", h = " << h <<  ", deltaXI = " << h * T0[stot]
+		   << endl;
+	      
+	      gmm::copy(X0, X); gmm::copy(T0, T);
+	      gmm::add(gmm::scaled(T, h), X);
+	      
+	      iter_corr = iteration_corr(residual, difference, noisy,
+					 maxit_corr ? maxit_corr : 40000);
+	      Newton_correction(MS, *pfinal_model, DIRICHLET, grad_XI, F2_start, deltaF2,
+				X, T, iter_corr);
+	      
+	      if (iter_corr.converged()) {
+		compute_displacement(MS, *pfinal_model, *pl, *pELAS_nonlin, *pELAS_lin, U,
+				     law_num);
+		gmm::mult(BN, U, UN); gmm::mult(BT, U, UT);
+		gmm::copy(FRICTION.get_LN(MS), LN1); gmm::copy(FRICTION.get_LT(MS), LT1);
+		size_type nb_change;
+		if (step_cont == 0 && (range_cont == 1 && X0filename.size() == 0)) {
+		  compute_activity(FRICTION, contact_nodes, UN, UT, UT_init, LN1, LT1, CH0,
+				   CH, TST, x_min, noisy + 1);
+		  nb_change = 0;
+		} else
+		  nb_change = compute_activity(FRICTION, contact_nodes, UN, UT, UT_init, LN1,
+					       LT1, CH0, CH, TST, x_min, noisy - 1);
+		
+		scalar_type XI = X[stot], angle =  gmm::vect_sp(T0, T);
+		cout << "XI = " << XI << ", XI - XI0 = " << XI - XI0 << ", T0.T = "
+		     << angle;
+		if (((nb_change == 0 && angle >= minangle)
+		     || ((nb_change == 1 && h <= h_change) || step_cont == 0))
+		    && XI <= XI_end + maxdist) {
+// 		    && XI >= XI_end - maxdist) {
+		  char s1[100]; sprintf(s1, "step%d", step + 1);
+		  char s2[100]; sprintf(s2, "_%d", range_cont);
+		  char s3[100]; sprintf(s3, "_%d", step_cont+1);
+		  gmm::vecsave(datafilename + s1 + s2 + s3 + ".U", U);
+		  gmm::vecsave(datafilename + s1 + s2 + s3 + ".UN", UN);
+		  gmm::vecsave(datafilename + s1 + s2 + s3 + ".UT", UT);
+		  gmm::vecsave(datafilename + s1 + s2 + s3 + ".LN", LN1);
+		  gmm::vecsave(datafilename + s1 + s2 + s3 + ".LT", LT1);
+		  gmm::vecsave(datafilename + s1 + s2 + s3 + ".X", X);
+		  gmm::vecsave(datafilename + s1 + s2 + s3 + ".T", T);
+
+		  compute_von_Mises(MS, *pELAS_nonlin, *pELAS_lin, mf_vm, VM, law_num);
+		  gmm::vecsave(datafilename + s1 + s2 + s3 + ".VM", VM);
+		  
+		  XI0 = XI; gmm::copy(X, X0); gmm::copy(T, T0); gmm::copy(CH, CH0);
+		  gmm::copy(TST, TST0);
+		  if ((nb_dec == 0) && (iter_corr.get_iteration() <= thr_corr))
+		    h = (h_inc * h < h_max) ? h_inc * h : h_max; 
+		  sel.clear(); new_point = 1;
+		  
+		  cout << endl << "end of Step n° " << step + 1 << "_" << range_cont << "_"
+		       << step_cont + 1 << endl;
+		}
+		else
+		  cout << " - the point rejected" << endl;
+	      }
+	      
+	      if (new_point <= 0) {
+		if (h > h_min) {
+		  h = (h_dec * h > h_min) ? h_dec * h : h_min;
+		  ++nb_dec;
+		  new_point = 0;
+		} else { /* try to change the Jacobian */
+		  if (sel.empty()) {
+		    cout << "classical continuation has broken down, "
+			 << "starting searching for a new Jacobian" << endl;
+		    sel.proper_update(contact_nodes, CH0, TST0, limit, noisy);
+		  }
+		  gmm::copy(T0, T);
+		  if (sel.compute_new_tangent(MS, *pfinal_model, DIRICHLET, FRICTION,
+					      contact_nodes, grad_XI, F2_start, deltaF2,
+					      X0, T, CH0, noisy)) {
+		    gmm::add(gmm::sub_vector(X0, gmm::sub_interval(0, stot)),
+			     gmm::sub_vector(T, gmm::sub_interval(0, stot)), MS.state());
+		    compute_displacement(MS, *pfinal_model, *pl, *pELAS_nonlin, *pELAS_lin,
+					 U, law_num);
+		    gmm::mult(BN, U, UN); gmm::mult(BT, U, UT);
+		    gmm::copy(FRICTION.get_LN(MS), LN1);
+		    gmm::copy(FRICTION.get_LT(MS), LT1);
+		    sel.determine_tangent_orientation(FRICTION, UN, UT, UT_init, LN1, LT1,
+						      T);
+		    cout << "T0.T = " << gmm::vect_sp(T0, T) << endl;
+		    gmm::copy(T, T0);
+		    
+		    h = h_init; nb_dec = 0;
+		    new_point = 0;
+		  }
+		}
+	      }
+	    } while (new_point == 0);
+	      
+	    ++step_cont;
+	  } // the main loop of continuation
+	  
+	  if (new_point == 1 && gmm::abs(XI_end - XI0) <= maxdist) {
+	    start_standard_solver = true; convergence = 0;
+	    range_cont = 1; XI_end = 1.;
+	    cout << "stop continuing, restarting the standard solver"
+		 << " with a new initial approximation" << endl;
+	  } else {
+	    h = h_init = h_init * range_cont; h_max *= range_cont;
+	    h_min *= range_cont; h_change *= range_cont; maxdist *= range_cont; 
+	    range_cont += (range_cont == 1) ? 1 : range_cont_inc;
+	    h /= range_cont;
+	  }	  
+	  step0_cont = 0; X0filename = "";
+
+	} // loop of continuations for different values of range_cont
+	
+      } // continuation
+
+    } while (convergence == 0);
+    
+    if (convergence == 1) { /* solution in the actual step has been found */
+
+      compute_displacement(MS, *pfinal_model, *pl, *pELAS_nonlin, *pELAS_lin, U, law_num);
+      gmm::mult(BN, U, UN); gmm::mult(BT, U, UT); gmm::mult(BT, U0, UT0);
+      gmm::copy(FRICTION.get_LN(MS), LN1); gmm::copy(FRICTION.get_LT(MS), LT1);
+      if (step == step0)
+	compute_activity(FRICTION, contact_nodes, UN, UT, UT0, LN1, LT1, CH_, TST,
+			 noisy + 1);
+      else
+	compute_activity(FRICTION, contact_nodes, UN, UT, UT0, LN1, LT1, CH0_, CH_, TST,
+			 x_min, noisy);
+      
+      // gmm::copy(FRICTION.get_LN(MS), LN1);
+      // gmm::copy(FRICTION.get_LT(MS), LT1);
+      
+      //     {
+      //       gmm::iteration itercg(1e-12, 1);
+      //       plain_vector LLN(nbc), LLT(nbc*(N-1));
+      //       gmm::cg(MMBN, LLN, LN1, gmm::identity_matrix(), itercg);
+      //       itercg.init();
+      //       gmm::cg(MMBT, LLT, LT1, gmm::identity_matrix(), itercg);
+      //     }
+      /*    	cout << "LT1 = " << LT1 << endl;
+	    cout << "LN1 = " << LN1 << endl;
+      */
+      
+      
+      //    plain_vector LT2(nbc);
+      // 	maxT[step]=-LT1[0];
+      // 	maxN[step]=-LN1[0];
+      // Calculating forces on contact nodes and total contact pressure
+      //    for (int y = 0; y < nbc; ++y) {
+      //     
+      //     if (N>2) 
+      //         LT2[y] = sqrt(LT1[N*y]*LT1[N*y] + LT1[N*y +1]*LT1[N*y +1]);
+      // 	
+      // 	
+      //     if (N<3) 
+      //     	LT2[y]=LT1[y];
+      // 	
+      // // 	if (LT2[y]> maxT[step])
+      // // 		maxT[step]=-LT2[y];
+      // // 	
+      // // 	if (LN1[y]> maxN[step])
+      // // 		maxN[step]=-LN1[y];
+      // 	
+      // 	
+      //     	SumT[step]+= -LT2[y];
+      // 	SumN[step]+= -LN1[y]; 
+      // 	Pressure[step]+= SumN[step]/(LX*LY);
+      //     }
+      //     cout << "Tu vas marcher BORDEL 3 \n";
+      // // 	max[step]=sqrt(maxN[step]*maxN[step]+maxT[step]*maxT[step]);
+      //    
+      //     
+      //     cout << "\n  \n \n normal contact pressure " << Pressure << endl;
+      //     cout << "\n Total force along normal " << SumN << endl;
+      //     cout << "\n Total force along tangential plane " << SumT << endl;
+      // 
+      // 	gmm::vecsave(datafilename + ".SumT",SumT);
+      // 	gmm::vecsave(datafilename + ".SumN",SumN);
+      // // 	cout << "LT2 = " << LT2 << endl;
+      // 	cout << "LN2 = " << LN1 << endl;
+      
+      //    cout << "CN = " << FRICTION.get_LN(MS) << endl;
+
+      //   plain_vector UN(gmm::mat_nrows(BN));
+      //   gmm::mult(BN, U, UN);
+      //    cout << "UN = " << UN << endl;
+      
+      char s[100]; sprintf(s, "step%d", step+1);
+      gmm::vecsave(datafilename + s + ".F2", F2);
+      gmm::vecsave(datafilename + s + ".U", U);
+      gmm::vecsave(datafilename + s + ".Y", MS.state());
+      gmm::vecsave(datafilename + s + ".UN", UN);
+      gmm::vecsave(datafilename + s + ".UT", UT);
+      gmm::vecsave(datafilename + s + ".LN", LN1);
+      gmm::vecsave(datafilename + s + ".LT", LT1);
+      
+      
+      plain_vector VM(mf_vm.nb_dof());
+      compute_von_Mises(MS, *pELAS_nonlin, *pELAS_lin, mf_vm, VM, law_num);
+      gmm::vecsave(datafilename + s + ".VM", VM);
+      
+      if (is_dynamic) {
+	gmm::add(U, gmm::scaled(U0, -1.0), V0);
+	gmm::scale(V0, 1./deltat);
+	gmm::vecsave(datafilename + s + ".V", V0);
+      }
+
+      gmm::copy(U, U0); gmm::copy(CH_, CH0_);
+      cout << "end of Step n° " << step+1 << " / " << nb_step << endl;
+    
+    // 	if (max[step]> Fmax)
+    // 		Fmax = max[step];
+
+    } else /* solution has not been found */
+      break;
+    
+  } // the main cycle
+  
+//  cout << "end of all steps \n" ;
+    if (law_num == 5 || law_num == 3 || law_num == 1) delete pINCOMP;
+ /*  plain_vector VM(mf_u.nb_dof());
+     cout << "calcul von mises\n";
+   calcul_von_mises(mf_u, U0, mf_vm, VM, mu);
+     cout << "Fin calcul von mises\n";
+ */    
+
+  return (convergence == 1);
+  
+}
+
+  
+/**************************************************************************/
+/*  main program.                                                         */
+/**************************************************************************/
+
+int main(int argc, char *argv[]) {
+
+  GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
+  FE_ENABLE_EXCEPT;        // Enable floating point exception for Nan.
+
+   // try {    
+    friction_problem p;
+    p.PARAM.read_command_line(argc, argv);
+    p.init();
+    p.mesh.write_to_file(p.datafilename + ".mesh");
+    p.mf_u.write_to_file(p.datafilename + ".mf", true);
+    p.mf_rhs.write_to_file(p.datafilename + ".mfd", true);
+    p.mf_vm.write_to_file(p.datafilename + ".mfvm", true);
+    plain_vector U(p.mf_u.nb_dof());
+    if (!p.solve(U)) cerr << "Solve has failed\n";
+    if (p.PARAM.int_value("VTK_EXPORT")) {
+      cout << "export to " << p.datafilename + ".vtk" << "..\n";
+      getfem::vtk_export exp(p.datafilename + ".vtk",
+			     p.PARAM.int_value("VTK_EXPORT")==1);
+      exp.exporting(p.mf_u); 
+      exp.write_point_data(p.mf_u, U, "elastostatic_displacement");
+      cout << "export done, you can view the data file with (for example)\n"
+	"mayavi -d " << p.datafilename << ".vtk -f ExtractVectorNorm -f "
+	"WarpVector -m BandedSurfaceMap -m Outline &\n";
+    }
+  // }   GMM_STANDARD_CATCH_ERROR;
+
+  return 0;
+  
+}
diff --git a/contrib/contact_grd_trans/contact_continuation_time.cc b/contrib/contact_grd_trans/contact_continuation_time.cc
new file mode 100644
index 0000000..7c80c3e
--- /dev/null
+++ b/contrib/contact_grd_trans/contact_continuation_time.cc
@@ -0,0 +1,1284 @@
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien  Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+/**
+   @file contact_continuation_time.cc
+   @brief Nonlinear Problem with Friction(large strain).
+
+   A rubber bar is submitted to a large torsion. An attempt to compute
+   the solution by numerical continuation w.r.t. time. Not too
+   satisfactory because the structure of retrograde branches seems to
+   be very complicated (each sliding point may get stuck).
+
+   NOTE: In the case of neg_deltat = 0 the absolut value of deltat is
+   set in the friction condition, in the opposite case deltat is used
+   instead; in fact, neg_deltat = 0 should correspond to the case when
+   the term deltat does not occur in the denominator of the friction
+   condition whereas neg_deltat = 1 should correspond to the case when
+   it occurs there; however, in both cases the derivative with respect
+   to time is zero in the rows corresponding to the friction
+   conditions and both cases are actually some mixture of the
+   possibilities described above.
+   In the case of possibly more active functions when seeking a new
+   Jacobian, all possibilities are tested. Moreover, instead of using
+   some criterion for determining direction of a new tangent when
+   changing the Jacobian, both directions are tested --- unefficient.
+   
+   This program is used to check that getfem++ is working. This is
+   also a good example of use of Getfem++.
+*/
+
+#include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
+#include "getfem/getfem_export.h"   /* export functions (save solution in a file)  */
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_model_solvers.h"
+#include "getfem/getfem_nonlinear_elasticity.h"
+#include "getfem/getfem_Coulomb_friction.h"
+#include "getfem/getfem_superlu.h"
+#include "gmm/gmm.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+/* some Getfem++ types that we will be using */
+using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
+using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
+using bgeot::base_vector;
+using bgeot::scalar_type; /* = double */
+using bgeot::size_type;   /* = unsigned long */
+using bgeot::base_matrix; /* small dense matrix. */
+
+/* definition of some matrix/vector types.  These ones are built
+ * using the predefined types in Gmm++
+ */
+typedef getfem::modeling_standard_sparse_vector sparse_vector;
+typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
+typedef getfem::modeling_standard_plain_vector  plain_vector;
+
+/*
+  structure for the frictional problem
+*/
+struct friction_problem {
+
+  enum { DIRICHLET_BOUNDARY_NUM = 0, FRICTION_BOUNDARY_NUM = 1, NEUMANN_BOUNDARY_NUM = 2};
+  getfem::mesh mesh;         /* the mesh */
+  getfem::mesh_im mim;       /* the integration methods */
+  getfem::mesh_fem mf_u;     /* main mesh_fem, for the elastostatic solution */
+  getfem::mesh_fem mf_p;     /* mesh_fem for the pressure.                   */
+  getfem::mesh_fem mf_rhs;   /* mesh_fem for the right hand side (f(x),..)   */
+  getfem::mesh_fem mf_coef;  /* mesh_fem used to represent pde coefficients  */
+  getfem::mesh_fem mf_vm;    /* mesh_fem used for the VonMises stress        */
+  scalar_type p1, p2, p3;    /* elastic coefficients.                        */
+  scalar_type LX, LY, LZ;    /* system dimensions                            */
+  scalar_type lambda, mu;    /* Lame coefficients.                           */
+  scalar_type residual;      /* max residual for the iterative solvers       */
+  std::string datafilename;
+  bgeot::md_param PARAM;
+
+  bool solve(plain_vector &U);
+  void init(void);
+  friction_problem(void) : mim(mesh), mf_u(mesh), mf_p(mesh), mf_rhs(mesh), mf_coef(mesh), mf_vm(mesh) {}
+};
+
+
+/* Read parameters from the .param file, build the mesh, set finite element
+   and integration methods and selects the boundaries.
+
+   (this is boilerplate code, not very interesting)
+ */
+void friction_problem::init(void) {
+  std::string MESH_TYPE = PARAM.string_value("MESH_TYPE","Mesh type ");
+  std::string FEM_TYPE  = PARAM.string_value("FEM_TYPE","FEM name");
+  std::string FEM_TYPE_P  = PARAM.string_value("FEM_TYPE_P","FEM name for the pressure");
+  std::string INTEGRATION = PARAM.string_value("INTEGRATION",
+					       "Name of integration method");
+  cout << "MESH_TYPE=" << MESH_TYPE << "\n";
+  cout << "FEM_TYPE="  << FEM_TYPE << "\n";
+  cout << "INTEGRATION=" << INTEGRATION << "\n";
+
+  /* First step : build the mesh */
+  bgeot::pgeometric_trans pgt = 
+    bgeot::geometric_trans_descriptor(MESH_TYPE);
+  size_type N = pgt->dim();
+  std::vector<size_type> nsubdiv(N);
+  std::fill(nsubdiv.begin(),nsubdiv.end(),
+	    PARAM.int_value("NX", "Number of space steps "));
+  nsubdiv[1] = PARAM.int_value("NY") ? PARAM.int_value("NY") : nsubdiv[0];
+  if (N>2) nsubdiv[2] = PARAM.int_value("NZ") ? PARAM.int_value("NZ") : nsubdiv[0];
+  getfem::regular_unit_mesh(mesh, nsubdiv, pgt,
+			    PARAM.int_value("MESH_NOISED") != 0);
+
+  LX = PARAM.real_value("LX", "Length along X axis");
+  LY = PARAM.real_value("LY", "Length along Y axis");
+  LZ = PARAM.real_value("LZ", "Length along Z axis");
+  int nb_refine = PARAM.int_value("NBREFINE");
+  lambda = PARAM.real_value("LAMBDA", "Lame coefficient lambda");
+  mu = PARAM.real_value("MU", "Lame coefficient mu");
+  bgeot::base_matrix M(N,N);
+  for (size_type i=0; i < N; ++i) {
+    static const char *t[] = {"LX","LY","LZ"};
+    M(i,i) = (i<3) ? PARAM.real_value(t[i],t[i]) : 1.0;
+  }
+  if (N>1) { M(0,1) = PARAM.real_value("INCLINE") * PARAM.real_value("LY"); }
+  
+  /* scale the unit mesh to [LX,LY,..] and incline it */
+  mesh.transformation(M);
+
+  if (nb_refine > 0) { /* refinement in the right-bottom corner */
+    scalar_type layerx, layerz;
+    dal::bit_vector cvref;
+    layerx = 0.201; layerz = 1.5 * layerx;
+    for (int i=0; i < nb_refine; ++i) {
+      cvref.clear();
+      for (dal::bv_visitor j(mesh.convex_index()); !j.finished(); ++j) {
+	if ((mesh.points_of_convex(j)[0][0] > LX*(1-layerx))
+	    && (mesh.points_of_convex(j)[1][0] > LX*(1-layerx))
+	    && (mesh.points_of_convex(j)[2][0] > LX*(1-layerx))
+	    && (mesh.points_of_convex(j)[0][N-1] < LZ*layerz)
+	    &&  (mesh.points_of_convex(j)[1][N-1] < LZ*layerz)
+	    &&  (mesh.points_of_convex(j)[2][N-1] < LZ*layerz))
+	  cvref.add(j);
+      }
+      mesh.Bank_refine(cvref);
+      layerx = 0.5 * layerx;
+      if (i < 9) layerz = 0.5 * layerz;
+    }
+  }
+
+  datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
+  residual = PARAM.real_value("RESIDUAL"); if (residual == 0.) residual = 1e-10;
+
+  p1 = PARAM.real_value("P1", "First Elastic coefficient");
+  p2 = PARAM.real_value("P2", "Second Elastic coefficient");
+  p3 = PARAM.real_value("P3", "Third Elastic coefficient");
+  
+  mf_u.set_qdim(bgeot::dim_type(N));
+
+  /* set the finite element on the mf_u */
+  getfem::pfem pf_u = 
+    getfem::fem_descriptor(FEM_TYPE);
+  getfem::pintegration_method ppi = 
+    getfem::int_method_descriptor(INTEGRATION);
+
+  mim.set_integration_method(ppi);
+  mf_u.set_finite_element(pf_u);
+
+  mf_p.set_finite_element(getfem::fem_descriptor(FEM_TYPE_P));
+
+  /* set the finite element on mf_rhs (same as mf_u if DATA_FEM_TYPE is
+     not used in the .param file */
+  std::string data_fem_name = PARAM.string_value("DATA_FEM_TYPE");
+  if (data_fem_name.size() == 0) {
+    GMM_ASSERT1(pf_u->is_lagrange(), "You are using a non-lagrange FEM"
+		". In that case you need to set "
+		<< "DATA_FEM_TYPE in the .param file");
+    mf_rhs.set_finite_element(mesh.convex_index(), pf_u);
+  } else {
+    mf_rhs.set_finite_element(mesh.convex_index(), 
+			      getfem::fem_descriptor(data_fem_name));
+  }
+  
+  /* set the finite element on mf_coef. Here we use a very simple element
+   * since the only function that need to be interpolated on the mesh_fem 
+   * is f(x)=1 ... */
+  mf_coef.set_finite_element(mesh.convex_index(),
+			     getfem::classical_fem(pgt,0));
+  
+  mf_vm.set_classical_discontinuous_finite_element(1);
+
+  /* set boundary conditions
+   * (Dirichlet on the upper face, contact on the bottom face 
+   *  and on parts of the adjacent faces, Neumann elsewhere) */
+  cout << "Selecting Dirichlet, Neumann and contact boundaries\n";
+  getfem::mesh_region border_faces;
+  getfem::outer_faces_of_mesh(mesh, border_faces);
+  for (getfem::mr_visitor it(border_faces); !it.finished(); ++it) {
+    assert(it.is_face());
+    base_node un = mesh.normal_of_face_of_convex(it.cv(), it.f());
+    un /= gmm::vect_norm2(un);
+    if (gmm::abs(un[N-1] - 1.0) < 1.0E-7) {
+      mesh.region(DIRICHLET_BOUNDARY_NUM).add(it.cv(),it.f());
+    } else if (gmm::abs(un[N-1] + 1.0) < 1.0E-7) {
+      mesh.region(FRICTION_BOUNDARY_NUM).add(it.cv(),it.f());
+    } else if (mesh.points_of_convex(it.cv())[0][N-1] < LZ*0.3) {
+      mesh.region(FRICTION_BOUNDARY_NUM).add(it.cv(),it.f());
+    }
+  }
+}
+
+/* The Iteration object for corrections; to accelerate the
+   computation, heuristics is used if anglemin is used */
+class iteration_corr {
+  size_type maxiter; /* Max. number of iterations.                       */
+  int noise;         /* if noise > 0 iterations are printed.             */
+  double resmax;     /* maximum residual.                                */
+  double diffmax;    /* maximum difference.                              */
+  double anglemin;   /* minimum angle.                                   */
+  size_type nit;     /* iteration number.                                */
+  double res;        /* last computed residual.                          */
+  double diff;       /* last computed difference.                        */
+  double angle;      /* last computed angle.                             */
+public:
+  void init(void) { 
+    nit = 0; res = 0.0; diff = 0.0; angle = 0.0;
+    }
+
+  iteration_corr(double r = 1.0E-8, double d = 1.0E-8, int noi = 0,
+		 size_type mit = size_type(-1), double a = - 2.0)
+    : maxiter(mit), noise(noi), resmax(r), diffmax(d), anglemin(a) { init(); }
+
+  void  operator ++(int) {  nit++; }
+
+  int get_noisy(void) const { return noise; }
+  void set_res(double r) { res = r; }
+  void set_diff(double d) { diff = d; }
+  void set_angle(double a) { angle = a; }
+  size_type get_iteration(void) const { return nit; }
+  void set_iteration(size_type i) { nit = i; }
+
+  bool converged(void) { return ((res <= resmax) && (diff <= diffmax)); }
+
+  bool finished(void) {
+    if (noise > 0) {
+      cout << "iter " << nit << " residual " << gmm::abs(res)
+	   << " difference " << gmm::abs(diff);
+      if (anglemin >= -1.0)
+	cout << " angle = " << angle;
+      cout << endl;
+    }
+    return ((nit >= maxiter) || converged() || ((nit == 1) && (angle < anglemin)));
+  }
+};
+
+template<typename MAT>
+void compute_condition_number(const MAT &M) {
+/* computes the smallest and the largest eigenvalue of the matrix M
+   and consequently its condition number */
+  
+  size_type N = gmm::mat_nrows(M);
+  plain_vector V(N), U(N), W(N);
+  plain_vector V2(N), U2(N);  
+  gmm::fill_random(V);
+  gmm::fill_random(V2);
+  scalar_type lambda = 0., lambda2 = 0.;
+  gmm::SuperLU_factor<scalar_type> SLU;
+  SLU.build_with(M);
+  
+  for(size_type i = 0; i < 100; ++i) {
+    gmm::scale(V, 1./gmm::vect_norm2(V));
+    gmm::scale(V2, 1./gmm::vect_norm2(V2));
+    SLU.solve(U, V);
+    gmm::mult(M, V2, U2);
+    
+    lambda = gmm::vect_sp(U, V) / gmm::vect_sp(V, V);
+    lambda2 = gmm::vect_sp(U2, V2) / gmm::vect_sp(V2, V2);
+    
+    gmm::add(V, gmm::scaled(U, -1./lambda), W);
+//     if (i > 90)
+//       cout << "iteration " << i << " norm(W) = " <<  gmm::vect_norm2(W)
+// 	   << " lambda = " << lambda 
+// 	   << " lambda2 = " << lambda2 << endl;
+    if (gmm::vect_norm2(W) < 1E-2) break;
+    
+    gmm::copy(U, V);
+    gmm::copy(U2, V2);
+  }
+  
+  // cout << "Smallest eigenvalue : " << 1.0/lambda << endl;
+  // cout << "Largest eigenvalue : " << lambda2 << endl;
+  cout << "Condition number: " << lambda2 * lambda << endl;
+  
+}
+
+template<typename MAT, typename VECT1, typename VECT2>
+void compute_tangent(const MAT &A, const VECT1 &B, VECT2 &T, int noisy) {
+/* computes a unit tangent at the point X to the curve given implicitly by the equation H = 0
+   with the Jacobian grad H(X) = (A|B) which is positively oriented w.r.t. the vector T
+   and saves it into T, i.e.:
+   solves (A|B)T_+ = 0 & T.T_+ = 1;
+   sets T = T_+ / ||T_+||; */
+
+  bool singular_A = false;
+  size_type N = gmm::mat_nrows(A);
+  double rcond;
+		
+  try { /* whether A is singular; if not, the calculation can be accelerated provided that 
+	   A is sparse  */
+    scalar_type sp;
+    plain_vector Y(N);
+    if (noisy > 1) cout << "starting computing tangent" << endl;
+
+    gmm::SuperLU_solve(A, Y, B, rcond);
+    sp = gmm::vect_sp(gmm::sub_vector(T, gmm::sub_interval(0,N)), Y);
+		  
+    T[N] = 1.0 / (T[N] - sp);
+    gmm::copy(gmm::scaled(Y, -1.0*T[N]),
+	      gmm::sub_vector(T, gmm::sub_interval(0, N)));
+  }
+  catch (...) {
+    singular_A = true;
+  }
+  
+  if (singular_A) {
+    sparse_matrix C(N+1, N+1);
+    plain_vector R(N+1);
+
+    gmm::copy(A, gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(0, N)));
+    gmm::copy(gmm::col_vector(B),
+	      gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(N, 1)));
+    gmm::copy(gmm::row_vector(T),
+	      gmm::sub_matrix(C, gmm::sub_interval(N, 1), gmm::sub_interval(0, N+1)));
+
+    gmm::clear(R);
+    R[N] = 1.0;		  
+    
+    gmm::SuperLU_solve(C, T, R, rcond);
+  }
+
+  gmm::scale(T, 1.0/gmm::vect_norm2(T));
+
+}
+
+template<typename MAT, typename VECT1, typename VECT2>
+void correction_solver
+(const MAT &A, const VECT1 &B, VECT2 &X, VECT2 &T, const VECT1 &P, iteration_corr &iter) {
+/* computes one correction step of the Moore-Penrose method for continuing the implicit curve
+   H = 0 with P = H(X), (A|B) = grad H(X), X and T being the approximations of the point
+   and the tangent, respectively, i.e.:
+   solves (A|B)T_+ = 0 & T.T_+ = 1;
+   solves (A|B)dX = P; T.dX = 0;
+   sets X = X - dX;
+   sets T = T_+ / ||T_+||;  */
+
+  bool singular_A = false;
+  size_type N = gmm::mat_nrows(A);
+  plain_vector dX(N+1), T0 = T;
+
+  try { /* whether A is singular; if not, the calculation can be accelerated provided that 
+	   A is sparse */
+    scalar_type sp1, sp2;
+    plain_vector Y1(N), Y2(N);
+
+    compute_condition_number(A);
+
+    gmm::SuperLU_factor<scalar_type> SLU;
+    SLU.build_with(A);
+    SLU.solve(Y1, B);
+    SLU.solve(Y2, P);
+
+    sp1 = gmm::vect_sp(gmm::sub_vector(T, gmm::sub_interval(0,N)), Y1);
+    sp2 = gmm::vect_sp(gmm::sub_vector(T, gmm::sub_interval(0,N)), Y2);
+		
+    dX[N] = sp2 / (sp1 - T[N]);
+    gmm::add(gmm::scaled(Y1, -1.0*dX[N]), Y2);
+    gmm::copy(Y2, gmm::sub_vector(dX, gmm::sub_interval(0, N)));
+		
+    T[N] = 1.0 / (T[N] - sp1);
+    gmm::copy(gmm::scaled(Y1, -1.0*T[N]),
+	      gmm::sub_vector(T, gmm::sub_interval(0, N)) );
+  }
+  catch (...) {
+    singular_A = true;
+  }
+
+
+  try {
+    if (singular_A) {
+      plain_vector Q(N+1), R(N+1);
+      sparse_matrix C(N+1, N+1);
+
+      gmm::copy(A, gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(0, N)));
+      gmm::copy(gmm::col_vector(B),
+		gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(N, 1)));
+      gmm::copy(gmm::row_vector(T),
+		gmm::sub_matrix(C, gmm::sub_interval(N, 1), gmm::sub_interval(0, N+1)));
+		
+      gmm::copy(P, gmm::sub_vector(Q, gmm::sub_interval(0, N)));
+      Q[N] = 0.0;
+
+      gmm::clear(R);
+      R[N] = 1.0;	
+		    
+      gmm::SuperLU_factor<scalar_type> SLU;
+      SLU.build_with(C);
+      SLU.solve(dX, Q);
+      SLU.solve(T, R);
+    }
+  }
+  catch (...) {
+    cout << "SuperLU failed!" << endl;
+  }
+    
+  gmm::add(gmm::scaled(dX, -1.0), X);
+  gmm::scale(T, 1.0/gmm::vect_norm2(T));
+
+  iter.set_diff(gmm::vect_norm2(dX));
+  iter.set_angle(gmm::vect_sp(T, T0));
+
+}
+
+template<typename MODEL_STATE>
+void Newton_correction
+(MODEL_STATE &MS, getfem::mdbrick_Dirichlet<MODEL_STATE> &problem,
+ getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const plain_vector &grad_t,
+ const plain_vector &F2_init, const plain_vector &deltaF2, plain_vector &X, plain_vector &T,
+ scalar_type t0, bool neg_deltat, iteration_corr &iter) {
+
+  size_type stot = gmm::mat_ncols(MS.tangent_matrix());
+  scalar_type deltat = X[stot] - t0, t;
+  plain_vector F2 = F2_init;
+
+  gmm::copy(gmm::sub_vector(X, gmm::sub_interval(0, stot)), MS.state());
+  t = X[stot];
+
+  deltat = t - t0; if ((deltat < 0) && (!neg_deltat)) deltat = -deltat;
+  FRICTION.set_beta(1./deltat); 
+  // (deltat0 < 0) ? FRICTION.set_beta(-1.0) : FRICTION.set_beta(1.0);
+    
+  gmm::add(gmm::scaled(deltaF2, t), F2);
+  problem.rhs().set(F2);
+
+  problem.compute_residual(MS);
+
+  do {
+    if (iter.get_noisy() > 1)
+      cout << "starting computing tangent matrix" << endl;
+    problem.compute_tangent_matrix(MS);
+
+    if (iter.get_noisy() > 1)
+      cout << "starting linear solver" << endl;
+    correction_solver(MS.tangent_matrix(), grad_t, X, T, MS.residual(), iter);
+    if (iter.get_noisy() > 1) 
+      cout << "linear solver done" << endl;
+
+    gmm::copy(gmm::sub_vector(X, gmm::sub_interval(0, stot)), MS.state());
+    t = X[stot];
+    
+    deltat = t - t0; if ((deltat < 0) && (!neg_deltat)) deltat = -deltat;
+    FRICTION.set_beta(1./deltat); 
+    // (deltat0 < 0) ? FRICTION.set_beta(-1.0) : FRICTION.set_beta(1.0);
+    
+    gmm::copy(F2_init, F2);
+    gmm::add(gmm::scaled(deltaF2, t), F2);
+    problem.rhs().set(F2);
+
+    problem.compute_residual(MS);
+    iter.set_res(gmm::vect_norm2(MS.residual()));
+
+    iter++;
+  } while (!iter.finished());
+}
+
+template<typename MODEL_STATE>
+void compute_displacement
+(MODEL_STATE &MS, getfem::mdbrick_Dirichlet<MODEL_STATE> &problem,
+ getfem::abstract_hyperelastic_law *pl,
+ getfem::mdbrick_nonlinear_elasticity<MODEL_STATE> *pELAS_nonlin,
+ getfem::mdbrick_isotropic_linearized_elasticity<MODEL_STATE> *pELAS_lin, plain_vector &U,
+ size_type law_num) {
+
+  if (law_num < 4) {
+    pl->reset_unvalid_flag();
+    problem.compute_residual(MS);
+    if (pl->get_unvalid_flag()) 
+      GMM_WARNING1("The solution is not completely valid, the determinant "
+		   "of the transformation is negative on "
+		   << pl->get_unvalid_flag() << " Gauss points");
+    
+    gmm::copy(pELAS_nonlin->get_solution(MS), U);
+  } else
+    gmm::copy(pELAS_lin->get_solution(MS), U);
+}
+
+template<typename MODEL_STATE>
+void compute_Von_Mises
+(MODEL_STATE &MS, getfem::mdbrick_nonlinear_elasticity<MODEL_STATE> *pELAS_nonlin,
+ getfem::mdbrick_isotropic_linearized_elasticity<MODEL_STATE> *pELAS_lin,
+ getfem::mesh_fem &mf_vm, plain_vector &VM, size_type law_num) {
+  /* computes the Von Mises stress from the solution */
+  if (law_num < 4)
+    pELAS_nonlin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
+  else 
+    pELAS_lin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
+}
+
+template<typename MODEL_STATE, typename MATRIX, typename VECT>
+void test_functions
+(MODEL_STATE &MS, getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION,
+ const VECT &contact_nodes, const sparse_matrix &BN, const sparse_matrix &BT,
+ const plain_vector &U, const plain_vector &U0, MATRIX &TST, scalar_type limit, int noisy) {
+  /* saves the values of the test functions at the solution given by
+     MS.state() and U into TST */
+
+  size_type nb_dof_N = gmm::mat_nrows(BN), nb_dof_T = gmm::mat_nrows(BT);
+  scalar_type r = FRICTION.get_r(), alpha = FRICTION.get_alpha(), beta = FRICTION.get_beta();
+  plain_vector gap(nb_dof_N), friction_coef(nb_dof_N);
+  plain_vector UN(nb_dof_N), UT(nb_dof_T), UT0(nb_dof_T), LN(nb_dof_N), LT(nb_dof_T);
+    
+  gmm::copy(FRICTION.get_gap(), gap); gmm::copy(FRICTION.get_friction_coef(), friction_coef);
+  gmm::mult(BN, U, UN); gmm::mult(BT, U, UT); gmm::mult(BT, U0, UT0);
+  gmm::copy(FRICTION.get_LN(MS), LN); gmm::copy(FRICTION.get_LT(MS), LT);
+
+  if (noisy > 1)
+    cout << "characters, eventually limit values of the test functions:" << endl;  
+
+  for (size_type i = 0; i < nb_dof_N; ++i) {
+    TST(i, 0) = (LN[i] - r * alpha * (UN[i] - gap[i]));
+    TST(i, 1) = - friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i]);
+    TST(i, 2) = friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i]);
+
+    if (noisy > 1) {
+      cout << "node " << i << ": " << contact_nodes[i] << " "
+	   << (TST(i, 0) <= 0) << (TST(i, 1) >= 0) << (TST(i, 2) <= 0) << " ";
+
+      for (size_type j = 0; j < 3; ++j){
+	if (gmm::abs(TST(i,j)) <= limit && (j == 0 || (j > 0 && TST(i,0) <= limit)))
+	  cout << " ("<< j + 1 << "-th component close to the limit: " << TST(i,j) << ") ";
+      }
+
+      cout << endl;
+
+// 	cout << "LN[i] = " << LN[i] 
+// 	     << ", r * alpha * (UN[i] - gap[i]) = " << r * alpha * (UN[i] - gap[i])
+// 	     << ", - friction_coef[i] * LN[i] + LT[i] = "
+// 	     << -friction_coef[i] * LN[i] + LT[i]
+// 	     << ", friction_coef[i] * LN[i] + LT[i] = "
+// 	     << friction_coef[i] * LN[i] + LT[i] 
+// 	     << ", r * beta * (UT[i]-UT0[i]) = "
+// 	     << r * beta * (UT[i]-UT0[i]) << endl;
+    }
+  }
+}
+
+template<typename MODEL_STATE, typename MATRIX, typename VECT>
+size_type test_functions
+(MODEL_STATE &MS, getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION,
+ const VECT &contact_nodes, const sparse_matrix &BN, const sparse_matrix &BT,
+ const plain_vector &U, const plain_vector &U0, MATRIX &TST, MATRIX &TST0,
+ scalar_type limit, int noisy) {
+  /* saves the values of the test functions at the solution given by
+     MS.state() and U into TST; moreover, returns the number of
+     changes in comparison with TST0 */
+
+  size_type nb_dof_N = gmm::mat_nrows(BN), nb_dof_T = gmm::mat_nrows(BT);
+  size_type nb_change = 0;
+  scalar_type r = FRICTION.get_r(), alpha = FRICTION.get_alpha(), beta = FRICTION.get_beta();
+  plain_vector gap(nb_dof_N), friction_coef(nb_dof_N);
+  plain_vector UN(nb_dof_N), UT(nb_dof_T), UT0(nb_dof_T), LN(nb_dof_N), LT(nb_dof_T);
+    
+  gmm::copy(FRICTION.get_gap(), gap); gmm::copy(FRICTION.get_friction_coef(), friction_coef);
+  gmm::mult(BN, U, UN); gmm::mult(BT, U, UT); gmm::mult(BT, U0, UT0);
+  gmm::copy(FRICTION.get_LN(MS), LN); gmm::copy(FRICTION.get_LT(MS), LT);
+
+  if (noisy > 1)
+    cout << "changes of signs or limit values of the test functions (if any):" << endl;  
+
+  for (size_type i = 0; i < nb_dof_N; ++i) {
+    TST(i, 0) = (LN[i] - r * alpha * (UN[i] - gap[i]));
+    TST(i, 1) = - friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i]);
+    TST(i, 2) = friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i]);
+
+    for (size_type j = 0; j < 3; ++j) {
+      if (((TST0(i,j) < 0 && TST(i,j) > 0) || (TST0(i,j) > 0 && TST(i,j) < 0))
+	  && (j == 0 || (j > 0 && TST(i,0) < 0))) {
+	++nb_change;
+	if (noisy > 1)
+	  cout << "node " << i << ": " << contact_nodes[i]
+	       << (TST(i, 0) <= 0) << (TST(i, 1) >= 0) << (TST(i, 2) <= 0)
+	       << " - change of the sign of the " << j+1 << "-th component: "
+	       << TST0(i,j) << " -> " << TST(i,j) << endl;
+      } else if (gmm::abs(TST(i,j)) <= limit && (j == 0 || (j > 0 && TST(i,0) <= limit)))
+	cout << "node " << i << ": " << contact_nodes[i] 
+	     << " (" << j + 1 << "-th component close to the limit: " << TST(i,j) << endl;
+
+// 	cout << "LN[i] = " << LN[i] 
+// 	     << ", r * alpha * (UN[i] - gap[i]) = " << r * alpha * (UN[i] - gap[i])
+// 	     << ", - friction_coef[i] * LN[i] + LT[i] = "
+// 	     << -friction_coef[i] * LN[i] + LT[i]
+// 	     << ", friction_coef[i] * LN[i] + LT[i] = "
+// 	     << friction_coef[i] * LN[i] + LT[i] 
+// 	     << ", r * beta * (UT[i]-UT0[i]) = "
+// 	     << r * beta * (UT[i]-UT0[i]) << endl;
+    }
+  }
+  
+  return nb_change;
+}
+
+template<typename MATRIX>
+void straight_insertion
+(MATRIX &M, plain_vector &key, size_type i) {
+/* places the i-th row of M according to the corresponding values in key;
+   increasing order is wanted in the first i components of key */
+
+  bool found;
+  size_type j = i;
+  std::vector<size_type> X(3);
+  scalar_type X_key;
+
+  X[0] = M(i, 0); X[1] = M(i, 1); X[2] = M(i, 2);
+  X_key = key[i];
+  if (j == 0) found = true;
+  else found = (X_key >= key[j - 1]);
+ 
+  while (!found) { // seeking the appropriate  position
+    key[j] = key[j - 1];
+    M(j, 0) = M(j - 1, 0);
+    M(j, 1) = M(j - 1, 1);
+    M(j, 2) = M(j - 1, 2);
+    --j;
+    if (j == 0) found = true;
+    else found = (X_key >= key[j - 1]);
+  }
+
+  M(j, 0) = X[0]; M(j, 1) = X[1]; M(j, 2) = X[2];
+  key[j] = X_key;
+}
+	    
+template<typename CH_MATRIX, typename A_MATRIX, typename T_MATRIX, typename VECT>
+void compute_Jacobians
+(const VECT &contact_nodes, CH_MATRIX &CH, A_MATRIX &ACT, const T_MATRIX &TST,
+ scalar_type limit) {
+  /* computes CH and ACT determining the Jacobian and the active selection functions,
+     respectively; the items in ACT are ordered so that the corresponding values in KEY are
+     increasing (a heuristics is used!), the values of the test functions are saved in TST */
+  
+  size_type nbc = gmm::mat_nrows(TST);
+  plain_vector KEY(3*nbc);
+  
+  size_type pos = 0;
+  for (size_type i = 0; i < nbc; ++i) {
+
+    CH(i, 0) = (TST(i, 0) <= 0);
+    if (gmm::abs(TST(i, 0)) < limit) {
+      ACT(pos, 0) = i; ACT(pos, 1) = 0; ACT(pos, 2) = CH(i, 0);
+      KEY[pos] = gmm::abs(TST(i, 0));
+      straight_insertion(ACT, KEY, pos);
+      ++pos;
+    }
+
+    if (TST(i, 1) < 0) {                  // positive slip
+      CH(i, 1) = 0; CH(i, 2) = 1;
+      if (TST(i, 0) < limit) {    // contact is possible
+	ACT(pos, 0) = i; ACT(pos, 1) = 1; ACT(pos, 2) = CH(i, 1);
+	KEY[pos] = (-TST(i, 1) < 1./contact_nodes[i][0]) ?
+	  -TST(i, 1) : 1./contact_nodes[i][0];                  // (!)
+	straight_insertion(ACT, KEY, pos);
+	++pos;
+      }
+    }
+    else if (TST(i, 2) > 0) {              // negative slip
+      CH(i, 1) = 1; CH(i, 2) = 0;
+      if (TST(i, 0) < limit) {    // contact is possible
+	ACT(pos, 0) = i; ACT(pos, 1) = 2; ACT(pos, 2) = CH(i, 2);
+	KEY[pos] = (TST(i, 2) < 1./contact_nodes[i][0]) ?
+	  TST(i, 2) : 1./contact_nodes[i][0];                  // (!)
+	straight_insertion(ACT, KEY, pos);
+	++pos;
+      }
+    }
+    else {                                 // stick
+      CH(i, 1) = 1; CH(i, 2) = 1;
+      if (TST(i, 0) < limit) {     // contact is possible
+	if (TST(i, 1) < limit) {
+	  ACT(pos, 0) = i; ACT(pos, 1) = 1; ACT(pos, 2) = CH(i, 1);
+	  KEY[pos] = TST(i, 1);
+	  straight_insertion(ACT, KEY, pos);
+	  ++pos;
+	}
+
+	if (TST(i, 2) > -limit) {
+	  ACT(pos, 0) = i; ACT(pos, 1) = 2; ACT(pos, 2) = CH(i, 2);
+	  KEY[pos] = -TST(i, 2);
+	  straight_insertion(ACT, KEY, pos);
+	  ++pos;
+	}
+      }
+    }
+  }
+
+  ACT(pos, 0) = size_type(-1);
+}
+
+template<typename MODEL_STATE, typename MATRIX, typename VECT>
+bool test_Jacobian
+(MODEL_STATE &MS, getfem::mdbrick_Dirichlet<MODEL_STATE> &problem,
+ getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const VECT &contact_nodes,
+ const plain_vector &grad_t, const plain_vector &F2_init, const plain_vector &deltaF2,
+ const plain_vector &U00, const plain_vector &U0, scalar_type deltat0, plain_vector &T0,
+ const plain_vector &X0, const MATRIX &CH, scalar_type h, scalar_type minangle_back,
+ bool neg_deltat, iteration_corr &iter) {
+  /* tries to continuate according to the Jacobian given by CH;
+     returns `true' in the case of success, `false' otherwise */
+
+  bool success = false;
+  size_type stot = gmm::mat_ncols(MS.tangent_matrix());
+  plain_vector F2 = F2_init, T_test = T0, T(stot+1), X = X0;
+
+  if (iter.get_noisy() > 1)
+    cout << "testing the following Jacobian:" << endl;
+
+  for (size_type i = 0; i < gmm::mat_nrows(CH); ++i) {
+    if (iter.get_noisy() > 1)
+      cout << "node " << i << ": " << contact_nodes[i] << " "
+	   << CH(i, 0) << CH(i, 1) << CH(i, 2) << endl;
+    if ((!CH(i, 1) && !CH(i, 2)) || (!CH(i, 0) && (CH(i, 1) && CH(i, 2))))  /* not wanted */
+      return success; 
+    }
+	   
+  gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(0, stot)), MS.state());
+  
+  scalar_type t0 = X0[stot];
+  gmm::add(gmm::scaled(deltaF2, t0), F2);
+  problem.rhs().set(F2);
+
+  FRICTION.set_WT(gmm::scaled(U00, -1.0));
+  FRICTION.set_beta(1./deltat0);
+  
+  problem.compute_tangent_matrix(MS);
+
+  FRICTION.set_character_matrix(CH);
+  FRICTION.do_compute_tangent_matrix(MS, 0, 0);
+  compute_tangent(MS.tangent_matrix(), grad_t, T_test, iter.get_noisy());
+  
+  FRICTION.clear_character_matrix();
+  FRICTION.set_WT(gmm::scaled(U0, -1.0));
+  gmm::copy(T_test, T);
+
+  gmm::add(gmm::scaled(T, h), X);
+  iter.set_iteration(0);
+  Newton_correction(MS, problem, FRICTION, grad_t, F2_init, deltaF2, X, T, t0, neg_deltat,
+		    iter);
+  
+  if (iter.converged()) {
+    scalar_type angle = gmm::vect_sp(T, T0);
+    if (iter.get_noisy()) cout << "angle = " << angle << endl;;
+
+    if (angle >= minangle_back) { // tests whether we have not arrived at the incoming branch
+      cout << ", success? (1/0): ";  // for confirmation
+      cin >> success;
+    }
+  }
+
+  if (!success) { // try the opposite tangent
+    gmm::copy(X0, X);
+    gmm::scale(T_test, -1.0);
+    gmm::copy(T_test, T);
+    
+    gmm::add(gmm::scaled(T, h), X);
+    iter.set_iteration(0);
+    Newton_correction(MS, problem, FRICTION, grad_t, F2_init, deltaF2, X, T, t0, neg_deltat,
+		      iter);
+  
+    if (iter.converged()) {
+      scalar_type angle = gmm::vect_sp(T, T0);
+      if (iter.get_noisy()) cout << "angle = " << angle;
+
+      if (angle >= minangle_back) { // tests whether we have not
+				    // arrived at the incoming branch
+	cout << ", success? (1/0): ";  // for confirmation
+	cin >> success;
+      }
+    }
+  }
+
+  if (success) gmm::copy(T_test, T0);
+  return success;
+}
+
+template<typename MODEL_STATE, typename CH_MATRIX, typename A_MATRIX, typename VECT>
+bool systematic_test_Jacobians
+(MODEL_STATE &MS, getfem::mdbrick_Dirichlet<MODEL_STATE> &problem,
+ getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const VECT &contact_nodes,
+ const plain_vector &grad_t, const plain_vector &F2_init, const plain_vector &deltaF2,
+ const plain_vector &U00, const plain_vector &U0, scalar_type deltat0, plain_vector &T0,
+ const plain_vector &X0, CH_MATRIX &CH, const A_MATRIX &ACT, size_type level, scalar_type h,
+ scalar_type minangle_back, bool neg_deltat, iteration_corr &iter) {
+  /* recursive procedure for systematic testing of all possible Jacobians according the order
+     in ACT; returns true in the case success, false otherwise */
+
+  bool success = false;
+
+  if (level == 0)
+    success =
+      test_Jacobian(MS, problem, FRICTION, contact_nodes, grad_t, F2_init, deltaF2, U00, U0,
+		    deltat0, T0, X0, CH, h, minangle_back, neg_deltat, iter);
+  else
+    success = 
+      systematic_test_Jacobians(MS, problem, FRICTION, contact_nodes, grad_t, F2_init,
+				deltaF2, U00, U0, deltat0, T0, X0, CH, ACT, level - 1, h,
+				minangle_back, neg_deltat, iter);
+
+  if (!success){
+    CH(ACT(level, 0), ACT(level, 1)) = (ACT(level, 2) == 0);
+    if (level == 0)
+      success = 
+	test_Jacobian(MS, problem, FRICTION, contact_nodes, grad_t, F2_init, deltaF2, U00,
+		      U0, deltat0, T0, X0, CH, h, minangle_back, neg_deltat, iter);
+    else
+      success =
+	systematic_test_Jacobians(MS, problem, FRICTION, contact_nodes, grad_t, F2_init,
+				  deltaF2, U00, U0, deltat0, T0, X0, CH, ACT, level - 1, h,
+				  minangle_back, neg_deltat, iter);
+    CH(ACT(level, 0), ACT(level, 1)) = ACT(level, 2);
+  }
+
+  return success;
+}
+
+/**************************************************************************/
+/*  Model.                                                                */
+/**************************************************************************/
+
+bool friction_problem::solve(plain_vector &U) {
+  
+  size_type nb_dof_rhs = mf_rhs.nb_dof();
+  size_type N = mesh.dim();
+  size_type law_num = PARAM.int_value("LAW");
+  // Linearized elasticity brick.
+  base_vector p(3); p[0] = p1; p[1] = p2; p[2] = p3;
+ 
+  /* choose the material law */
+  getfem::abstract_hyperelastic_law *pl = 0;
+  switch (law_num) {
+    case 0:
+    case 1: pl = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
+    case 2: pl = new getfem::Ciarlet_Geymonat_hyperelastic_law(); break;
+    case 3: pl = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
+    case 4 : case 5 : break;
+    default: GMM_ASSERT1(false, "no such law");
+  }
+  
+  getfem::mdbrick_abstract<> *pELAS = 0;
+  getfem::mdbrick_nonlinear_elasticity<> *pELAS_nonlin = 0;
+  getfem::mdbrick_isotropic_linearized_elasticity<> *pELAS_lin = 0;
+  
+  if (law_num < 4) {
+    p.resize(pl->nb_params());
+    pELAS = pELAS_nonlin
+      = new getfem::mdbrick_nonlinear_elasticity<>(*pl, mim, mf_u, p);
+  } else {
+    pELAS = pELAS_lin = new getfem::mdbrick_isotropic_linearized_elasticity<>
+      (mim, mf_u, law_num == 5 ? 0.0 : lambda, mu);
+  }
+  
+  getfem::mdbrick_abstract<> *pINCOMP = pELAS;
+  switch (law_num) {
+    case 1: 
+    case 3: pINCOMP = new getfem::mdbrick_nonlinear_incomp<>(*pELAS, mf_p);
+      break;
+    case 5: {
+      getfem::mdbrick_linear_incomp<> *pb = 
+        new getfem::mdbrick_linear_incomp<>(*pELAS, mf_p);
+      pINCOMP = pb;
+      pb->penalization_coeff().set(1.0/lambda);
+    }
+  }
+  
+  size_type nb_step = int(PARAM.int_value("NBSTEP"));
+  bool neg_deltat = (PARAM.int_value("NEGATIVE_DELTAT",
+				     "Negative deltat is permitted or not") != 0);
+  scalar_type deltat = PARAM.real_value("DELTAT", "Time step");
+  if ((deltat < 0) && (!neg_deltat)) deltat = -deltat;
+ 
+  // contact condition for Lagrange elements
+  dal::bit_vector cn = mf_u.basic_dof_on_region(FRICTION_BOUNDARY_NUM);
+  sparse_matrix BN(cn.card()/N, mf_u.nb_dof());
+  sparse_matrix BT((N-1)*cn.card()/N, mf_u.nb_dof());
+  std::vector<base_node> contact_nodes;
+  plain_vector gap(cn.card()/N);
+  size_type jj = 0;
+  for (dal::bv_visitor i(cn); !i.finished(); ++i)
+    if (i % N == 0) {
+      BN(jj, i+N-1) = -1.;
+      gap[jj] = mf_u.point_of_basic_dof(i)[N-1];
+      contact_nodes.push_back(mf_u.point_of_basic_dof(i));
+      for (size_type k = 0; k < N-1; ++k) BT((N-1)*jj+k, i+k) = 1.;
+      ++jj;
+    }
+  
+  // creating force density vectors
+  size_type nbc = int(jj);
+//   sparse_matrix MMBN(nbc, nbc), MMBT(nbc*(N-1), nbc*(N-1));
+//   plain_vector LN1(nbc), LT1(nbc*(N-1));
+//   {
+//     sparse_matrix BB(mf_u.nb_dof(), mf_u.nb_dof());
+//     getfem::asm_mass_matrix(BB, mim, mf_u, mf_u, FRICTION_BOUNDARY_NUM);
+//     std::vector<size_type> indN, indT;
+//     for (dal::bv_visitor i(cn); !i.finished(); ++i)
+//       if ((i%N) == N-1) indN.push_back(i); else indT.push_back(i);
+//     gmm::sub_index SUBI(indN);
+//     gmm::copy(gmm::sub_matrix(BB, SUBI, SUBI), MMBN);
+//     gmm::sub_index SUBJ(indT);
+//     gmm::copy(gmm::sub_matrix(BB, SUBJ, SUBJ), MMBT);    
+//   }
+
+
+
+  scalar_type friction_coef = PARAM.real_value("FRICTION_COEFF", 
+					       "Friction cefficient");
+  scalar_type r = PARAM.real_value("R", "Augmentation parameter");
+  scalar_type alpha = PARAM.real_value("ALPHA", "Augmentation parameter");
+  gmm::dense_matrix<bool> CH(nbc, 3);
+  
+
+  getfem::mdbrick_Coulomb_friction<> FRICTION(*pINCOMP, BN, gap,
+					      friction_coef, BT);
+  FRICTION.set_r(r);
+  FRICTION.set_alpha(alpha);
+  FRICTION.set_beta(1./deltat);
+ 
+  // Defining the volumic source term.
+  base_vector f(N);
+  f[0] = PARAM.real_value("FORCEX","Amplitude of the gravity");
+  f[1] = PARAM.real_value("FORCEY","Amplitude of the gravity");
+  if (N>2)
+    f[2] = PARAM.real_value("FORCEZ","Amplitude of the gravity");
+  plain_vector F(nb_dof_rhs * N);
+  for (size_type i = 0; i < nb_dof_rhs; ++i) {
+    gmm::copy(f, gmm::sub_vector(F, gmm::sub_interval(i*N, N)));
+  }
+
+  getfem::mdbrick_source_term<> VOL_F(FRICTION, mf_rhs, F);
+
+  // Dirichlet condition
+  plain_vector F2(nb_dof_rhs * N);
+  getfem::mdbrick_Dirichlet<> final_model(VOL_F, DIRICHLET_BOUNDARY_NUM);
+  final_model.rhs().set(mf_rhs, F2);
+  final_model.set_constraints_type(getfem::constraints_type
+				   (PARAM.int_value("DIRICHLET_VERSION")));
+
+  // Generic solver.
+  getfem::standard_model_state MS(final_model);
+  size_type step0 = PARAM.int_value("STEP0") ? PARAM.int_value("STEP0") : 0;
+  size_type maxit = PARAM.int_value("MAXITER");
+  gmm::iteration iter;
+
+  scalar_type dz = PARAM.real_value("DIRICHLET_Z",
+				    "Prescribed displacement in z");
+  scalar_type dyv = PARAM.real_value("DIRICHLET_Y_SPEED",
+				     "Prescribed velocity in y"); 
+  int noisy = PARAM.int_value("NOISY");
+
+  plain_vector U0 = U;
+  size_type stot = gmm::mat_ncols(MS.tangent_matrix());
+  plain_vector X0(stot+1);
+
+  if (step0 > 0) { /* load the foregoing values */
+    char s[100]; sprintf(s, "step%d", step0);
+    gmm::vecload(datafilename + s + ".U", U0);
+    gmm::vecload(datafilename + s + ".X", X0);
+    gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(0, stot)), MS.state());
+  }
+
+  /* the standard solver is used for the first eleven steps when the body
+     is compressed, for the next iterations, when the body is pulling
+     to the right while subject to a constant pressure, numerical
+     continuation is used */
+
+  bool converged = true;
+  size_type step = step0;
+  while ((step < nb_step) && (step < 11) && converged) { /* standard solver */
+    cout << "beginning of step " << step+1
+	 << ", number of variables : " << final_model.nb_dof() << endl;
+
+    for (size_type i = 0; i < nb_dof_rhs; ++i) {
+      F2[i*N+N-1] = dz * step / 10.0;
+      F2[i*N+N-2] = 0.0;
+    }
+    final_model.rhs().set(F2);
+    
+    FRICTION.set_WT(gmm::scaled(U0, -1.0));
+    
+    
+    iter = gmm::iteration(residual, noisy, maxit ? maxit : 40000);
+//     cout << "|U| = " << gmm::vect_norm2(MS.state()) << "\n";
+    
+    
+    
+    /* let the default non-linear solve (Newton) do its job */
+    getfem::basic_newton_line_search ls(size_type(-1), 5.0/3.0, 0.1, 0.5, 3.0);
+//     getfem::default_newton_line_search ls;
+    getfem::standard_solve(MS, final_model, iter,
+			   getfem::default_linear_solver(final_model), ls);
+    
+    converged = iter.converged();
+
+    if (converged) {
+    
+      compute_displacement(MS, final_model, pl, pELAS_nonlin, pELAS_lin, U, law_num);
+    
+      char s[100]; sprintf(s, "step%d", step+1);
+      gmm::vecsave(datafilename + s + ".U",U);
+      
+      gmm::copy(MS.state(), gmm::sub_vector(X0, gmm::sub_interval(0, stot))); X0[stot] = 0.0;
+      gmm::vecsave(datafilename + s + ".X", X0);
+    
+      plain_vector VM(mf_vm.nb_dof());
+      compute_Von_Mises(MS, pELAS_nonlin, pELAS_lin, mf_vm, VM, law_num);
+      gmm::vecsave(datafilename + s + ".VM", VM);
+    
+      gmm::copy(U, U0);
+      cout << "end of Step n° " << step+1 << " / " << nb_step << endl;
+    }
+     
+    ++step;
+  } // standard solver
+ 
+  if ((nb_step > 11) && converged) { /* continuation */
+    GMM_ASSERT1(PARAM.int_value("DIRICHLET_VERSION") == 0,
+		"Continuations only implemented for Dirichlet "
+		"condition with multipliers");
+
+    scalar_type difference = PARAM.real_value("DIFFERENCE");
+    if (difference == 0.) difference = 1e-10;
+    scalar_type minangle = PARAM.real_value("ANGLE");
+    scalar_type minangle_back = PARAM.real_value("ANGLE_BACK");
+    size_type maxit_corr = PARAM.int_value("MAXITER_CORR"); 
+    size_type thr_corr = PARAM.int_value("THRESHOLD_CORR");
+    scalar_type limit = PARAM.real_value("LIMIT", "limit for the test functions");
+ 
+    scalar_type h_init = PARAM.real_value("H_INIT", "Initial step length");
+    scalar_type h_max = PARAM.real_value("H_MAX", "Maximal step length");
+    scalar_type h_min = PARAM.real_value("H_MIN", "Minimal step length");
+    scalar_type h_inc = PARAM.real_value("H_INC");
+    scalar_type h_dec = PARAM.real_value("H_DEC");
+    scalar_type h = PARAM.real_value("H") ? PARAM.real_value("H") : h_init;
+
+    scalar_type deltat0, t0, t;
+    plain_vector deltaF2(nb_dof_rhs * N);
+    plain_vector U00 = U0;
+    plain_vector X(stot+1), T0(stot+1), T(stot+1);
+    gmm::dense_matrix<scalar_type> TST(nbc,3), TST0(nbc,3);
+    size_type ind =  final_model.first_ind(), sc = gmm::vect_size(final_model.get_CRHS());
+    plain_vector grad_t(stot);
+
+    if (step0 >= 11)
+      for (size_type i = 0; i < nb_dof_rhs; ++i) {
+	F2[i*N+N-1] = dz;
+	F2[i*N+N-2] = 0.0;
+      }
+    for (size_type i = 0; i < nb_dof_rhs; ++i) {
+      deltaF2[i*N+N-1] = 0.0;
+      deltaF2[i*N+N-2] = dyv;
+    }    
+    final_model.rhs().set(deltaF2);  
+    final_model.compute_tangent_matrix(MS);
+    gmm::copy(final_model.get_CRHS(),
+	      gmm::sub_vector(grad_t, gmm::sub_interval(ind, sc)));
+    gmm::scale(grad_t, -1.0); 
+
+    char s[100]; sprintf(s, "step%d", step - 1);
+    plain_vector X00(stot+1);
+    gmm::vecload(datafilename + s + ".X",X00);
+    gmm::vecload(datafilename + s + ".U",U00); 
+
+    sprintf(s, "step%d", step);
+    gmm::vecload(datafilename + s + ".U",U0);
+    t0 = X0[stot];
+    deltat0 = (step > 11) ? t0 - X00[stot] : deltat;
+    if ((deltat0 < 0) && (!neg_deltat)) deltat0 = -deltat0;
+
+    gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(0, stot)), MS.state());
+    FRICTION.set_beta(1./deltat0);
+    // (deltat0 < 0) ? FRICTION.set_beta(-1.0) : FRICTION.set_beta(1.0);
+    FRICTION.set_WT(gmm::scaled(U00, -1.0));
+
+    test_functions(MS, FRICTION, contact_nodes, BN, BT, U0, U00, TST0, limit, noisy);
+
+      if (step == 11) {
+	gmm::fill_random(T0);
+	compute_tangent(MS.tangent_matrix(), grad_t, T0, noisy);
+	if (T0[stot] < 0)
+	  gmm::scale(T0, -1.0);
+      }
+      else
+	gmm::vecload(datafilename + s + ".T",T0);
+
+
+      size_type nb_dec;
+      bool new_Jacobian = false;
+      iteration_corr iter_corr;
+      short new_point = 1;
+
+      while ((new_point == 1) && (step < nb_step)) {
+	cout << "beginning of step " << step+1
+	     << ", number of variables : " << final_model.nb_dof() + 1 << endl;
+	
+	FRICTION.set_WT(gmm::scaled(U0, -1.0));
+	nb_dec = 0;
+      
+// 	cout << " |U| = " << gmm::vect_norm2(MS.state()) << "\n";
+	
+	do { /* seek a new point */
+	   new_point = -1;
+	   cout << "t0 = " << t0 <<  ", h = " << h << ", deltat = " << h * T0[stot] << endl;
+     
+	   gmm::copy(X0, X); gmm::copy(T0, T);
+	   gmm::add(gmm::scaled(T, h), X);
+	   
+	   iter_corr = iteration_corr(residual, difference, noisy,
+				      maxit_corr ? maxit_corr : 40000);
+	   Newton_correction(MS, final_model, FRICTION, grad_t, F2, deltaF2, X, T, t0,
+			     neg_deltat, iter_corr);
+	   
+	   if (iter_corr.converged()) {
+	     compute_displacement(MS, final_model, pl, pELAS_nonlin, pELAS_lin, U, law_num);
+	     size_type nb_change = test_functions(MS, FRICTION, contact_nodes, BN, BT, U,
+						  U0, TST, TST0, limit, noisy);
+	     
+	     t = X[stot]; scalar_type angle = gmm::vect_sp(T, T0);
+	     cout << "t = " << t << ", deltat = " << t - t0 << ", T0.T = " << angle;
+	     if ((angle > 0.9) || ((angle > 0.7) && (nb_change < 2)) || new_Jacobian) {
+	       new_point = 1;
+	       new_Jacobian = false;
+	     } else
+// 	     { cout << "Do you want to accept this increment? (1, 0, -1) ";
+// 	      int sign;
+// 	      cin >> sign;
+// 	      if (sign != 0) {
+// // 		if (sign < 0) gmm::scale(T, -1.0);
+// // 		h = h_init;
+// // 		++nb_dec;
+// 		break;
+// 	      }
+// 	    } 
+	       cout << " - the point rejected";
+	     cout << endl;
+	   }
+	   
+	   if (new_point <= 0) {
+	     if (h > h_min) {
+	       h = (h_dec * h > h_min) ? h_dec * h : h_min;
+	       ++nb_dec;
+	       new_point = 0;
+	     } else { /* try to change the Jacobian manually */
+	       cout << "classical continuation has broken down"
+		    << ", starting to change the Jacobian manually" << endl;
+	       
+	       new_Jacobian = false;
+	       iteration_corr iter_test(residual, difference, noisy,
+					maxit_corr ? maxit_corr : 40000, minangle);
+	       gmm::dense_matrix<size_type> ACT(3*nbc+1, 3);
+	       
+	       compute_Jacobians(contact_nodes, CH, ACT, TST0, limit);
+	       
+	       for (size_type level = 0; level < 3*nbc+1; ++level) {
+		 if (ACT(level, 0) == size_type(-1)) break;
+		 
+		 CH(ACT(level, 0), ACT(level, 1)) = (ACT(level, 2) == 0);
+		 cout << "change for node " << ACT(level, 0) << endl;
+		 
+		 if (level > 0) 
+		   new_Jacobian = systematic_test_Jacobians
+		     (MS, final_model, FRICTION, contact_nodes, grad_t, F2, deltaF2, U00, U0,
+		      deltat0, T0, X0, CH, ACT, level - 1, h_min, minangle_back, neg_deltat,
+		      iter_test);
+		 else
+		   new_Jacobian = test_Jacobian
+		     (MS, final_model, FRICTION, contact_nodes, grad_t, F2, deltaF2, U00, U0,
+		      deltat0, T0, X0, CH, h, minangle_back, neg_deltat, iter_test);
+		 
+		 if (new_Jacobian)
+		   break;
+		 else
+		   CH(ACT(level, 0), ACT(level, 1)) = ACT(level, 2);
+	       }
+	       
+	       if (new_Jacobian) {
+		 cout << "new Jacobian found, restarting the classical continuation" << endl;
+		 h = h_init;
+		 nb_dec = 0;
+		 new_point = 0;
+	       }
+	     }
+	   }
+	} while (new_point == 0);
+	  
+	if (new_point == 1) {
+
+	  gmm::copy(U0, U00); gmm::copy(U, U0); 
+	  gmm::copy(X, X0); gmm::copy(T, T0);
+	  gmm::copy(TST, TST0);
+	  deltat0 = deltat; t0 = X[stot];
+	  
+	  sprintf(s, "step%d", step+1);
+	  gmm::vecsave(datafilename + s + ".U",U);
+	  gmm::vecsave(datafilename + s + ".X", X);
+	  gmm::vecsave(datafilename + s + ".T", T);
+	  
+	  plain_vector VM(mf_vm.nb_dof());
+	  compute_Von_Mises(MS, pELAS_nonlin, pELAS_lin, mf_vm, VM, law_num);
+	  gmm::vecsave(datafilename + s + ".VM", VM);
+	  
+	  if ((h < h_max) && (nb_dec == 0) && (iter_corr.get_iteration() <= thr_corr))
+	    h = (h*h_inc < h_max) ? h*h_inc : h_max;
+	  
+	  cout << "end of Step n° " << step+1 << " / " << nb_step << endl;
+	  ++step;
+	}
+      } // the main loop of continuation
+
+      converged = (new_point == 1);
+  } // continuation
+  
+
+  if (law_num == 5 || law_num == 3 || law_num == 1) delete pINCOMP;    
+  
+  return converged;
+  
+}
+
+  
+/**************************************************************************/
+/*  main program.                                                         */
+/**************************************************************************/
+
+int main(int argc, char *argv[]) {
+
+  GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
+  FE_ENABLE_EXCEPT;        // Enable floating point exception for Nan.
+
+   // try {    
+    friction_problem p;
+    p.PARAM.read_command_line(argc, argv);
+    p.init();
+    p.mesh.write_to_file(p.datafilename + ".mesh");
+    p.mf_u.write_to_file(p.datafilename + ".mf", true);
+    p.mf_rhs.write_to_file(p.datafilename + ".mfd", true);
+    p.mf_vm.write_to_file(p.datafilename + ".mfvm", true);
+    plain_vector U(p.mf_u.nb_dof());
+    if (!p.solve(U)) cerr << "Solve has failed\n";
+    if (p.PARAM.int_value("VTK_EXPORT")) {
+      cout << "export to " << p.datafilename + ".vtk" << "..\n";
+      getfem::vtk_export exp(p.datafilename + ".vtk",
+			     p.PARAM.int_value("VTK_EXPORT")==1);
+      exp.exporting(p.mf_u); 
+      exp.write_point_data(p.mf_u, U, "elastostatic_displacement");
+      cout << "export done, you can view the data file with (for example)\n"
+	"mayavi -d " << p.datafilename << ".vtk -f ExtractVectorNorm -f "
+	"WarpVector -m BandedSurfaceMap -m Outline &\n";
+    }
+  // }   GMM_STANDARD_CATCH_ERROR;
+
+  return 0;
+  
+}
diff --git a/contrib/contact_grd_trans/my_getfem_Coulomb_friction.h b/contrib/contact_grd_trans/my_getfem_Coulomb_friction.h
deleted file mode 100644
index 691ddce..0000000
--- a/contrib/contact_grd_trans/my_getfem_Coulomb_friction.h
+++ /dev/null
@@ -1,442 +0,0 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
-
-/** @file getfem_Coulomb_friction.h
-    @author Yves Renard <Yves.Renard at insa-lyon.fr>
-    @author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
-    @date July 6, 2004.
-    @brief Unilateral contact and Coulomb friction condition brick.
- */
-#ifndef GETFEM_COULOMB_FRICTION_H__
-#define GETFEM_COULOMB_FRICTION_H__
-
-#include "getfem/getfem_modeling.h"
-
-namespace getfem {
-
-
-# define MDBRICK_COULOMB_FRICTION 434245
-
-  /**
-   * Unilateral contact and Coulomb friction condition brick.
-   * (for conformal small displacement problems)
-   * @ingroup bricks
-   */
-  template<typename MODEL_STATE = standard_model_state>
-  class mdbrick_Coulomb_friction : public mdbrick_abstract<MODEL_STATE>  {
-    
-    TYPEDEF_MODEL_STATE_TYPES;
-
-    mdbrick_abstract<MODEL_STATE> &sub_problem;
-    size_type num_fem;
-
-    T_MATRIX BN, BT;
-    typedef gmm::row_matrix<gmm::rsvector<value_type> > RT_MATRIX;
-    RT_MATRIX AUG_M; // For Hansbo augmentation.
-    VECTOR gap, threshold, WT, WN, friction_coef, RLN, RLT;
-    value_type r, alpha, beta;
-    size_type d, nbc;
-    gmm::dense_matrix<size_type> CH;
-
-    const mesh_fem *mf_u;
-    gmm::sub_interval SUBU, SUBN, SUBT;
-    
-    bool Tresca_version, symmetrized, contact_only, really_stationary;
-
-    template<typename VEC> static void ball_projection(const VEC &x,
-						       value_type radius) {
-      value_type a = gmm::vect_norm2(x);
-      if (radius <= 0) gmm::clear(const_cast<VEC&>(x));
-      else if (a > radius) gmm::scale(const_cast<VEC&>(x), radius/a); 
-    }
-
-    template<class VEC, class VECR>
-    static void ball_projection_grad_r(const VEC &x, value_type radius,
-				       VECR &g) {
-      value_type a = gmm::vect_norm2(x);
-      if (radius > 0 && a >= radius)
-	gmm::copy(gmm::scaled(x, value_type(1)/a), g);
-      else gmm::clear(g);
-    }
-
-    template <class VEC, class MAT>
-    static void ball_projection_grad(const VEC &x, double radius, MAT &g) {
-      if (radius <= value_type(0)) { gmm::clear(g); return; }
-      gmm::copy(gmm::identity_matrix(), g);
-      value_type a = gmm::vect_norm2(x);
-      if (a >= radius) { 
-	gmm::scale(g, radius/a);
-	// gmm::rank_one_update(g, gmm::scaled(x, -radius/(a*a*a)), x);
-	for (size_type i = 0; i < x.size(); ++i)
-	  for (size_type j = 0; j < x.size(); ++j)
-	    g(i,j) -= radius*x[i]*x[j] / (a*a*a);
-      }
-    }
-
-    void precomp(MODEL_STATE &MS, size_type i0) {
-      size_type i1 = this->mesh_fem_positions[num_fem];
-      gmm::resize(RLN, gmm::mat_nrows(BN));
-      gmm::resize(RLT, gmm::mat_nrows(BT));
-      SUBU = gmm::sub_interval(i0 + i1, mf_u->nb_dof());
-      SUBN = gmm::sub_interval(i0 + sub_problem.nb_dof(), gmm::mat_nrows(BN));
-      SUBT = gmm::sub_interval(i0 + sub_problem.nb_dof() + gmm::mat_nrows(BN),
-			       gmm::mat_nrows(BT));
-      gmm::add(gmm::sub_vector(MS.state(), SUBN), gmm::scaled(gap, r*alpha), RLN);
-      if (gmm::vect_size(WN) > 0)
-	gmm::mult_add(BN, gmm::scaled(WN, -r*alpha), RLN);
-      gmm::mult_add(BN, gmm::scaled(gmm::sub_vector(MS.state(), SUBU),
-				    -r*alpha), RLN);
-      if (gmm::mat_nrows(AUG_M) > 0)
-	gmm::mult_add(AUG_M, gmm::scaled(gmm::sub_vector(MS.state(),SUBN),-r),
-		      RLN);
-      if (!contact_only) {
-	gmm::copy(gmm::sub_vector(MS.state(), SUBT), RLT);
-	if (gmm::vect_size(WT) > 0)
-	  gmm::mult_add(BT, gmm::scaled(WT, -r*beta), RLT);
-	if (!really_stationary)
-	  gmm::mult_add(BT, gmm::scaled(gmm::sub_vector(MS.state(), SUBU),
-					-r*beta), RLT);
-      }
-    }
-
-    void proper_update(void) {
-      mf_u = this->mesh_fems[num_fem];
-      d = mf_u->linked_mesh().dim();
-      gmm::resize(BN, nbc, mf_u->nb_dof());
-      gmm::resize(BT, nbc*(d-1), mf_u->nb_dof());
-      gmm::resize(gap, nbc); gmm::resize(friction_coef, nbc);
-      gmm::resize(threshold, nbc);
-      // gmm::resize(WT, mf_u->nb_dof()); gmm::resize(WN, mf_u->nb_dof());
-      this->proper_additional_dof = gmm::mat_nrows(BN)
-	+ (contact_only ? 0 : gmm::mat_nrows(BT));
-      this->proper_mixed_variables.clear();
-      this->proper_mixed_variables.add(sub_problem.nb_dof(),
-				       this->proper_additional_dof);
-    }
-
-  public :
-    
-    inline size_type nb_contact_nodes(void) const
-    { return gmm::mat_nrows(BN); }
-    
-    virtual void do_compute_tangent_matrix(MODEL_STATE &MS, size_type i0,
-					   size_type) {
-      precomp(MS, i0);
-      
-      RT_MATRIX BBN(gmm::mat_nrows(BN), gmm::mat_ncols(BN));
-      RT_MATRIX MM(nb_contact_nodes(), nb_contact_nodes());
-      gmm::copy(gmm::scaled(BN, -alpha), BBN);
-      if (gmm::mat_nrows(AUG_M) > 0)
-	gmm::copy(gmm::scaled(AUG_M, -value_type(1)), MM);
-      size_type l = 0;
-      for (size_type i=0; i < nb_contact_nodes(); ++i) {
-	if (i == CH(l,0)) {
-	  if (CH(l,1) == 0) {
-	    gmm::clear(BBN[i]);
-	    if (gmm::mat_nrows(AUG_M) > 0) gmm::clear(MM[i]);
-	    MM(i, i) = -value_type(1)/r;
-	  }
-	  ++l;
-	}
-	else if (RLN[i] >= value_type(0)) {
-	  gmm::clear(BBN[i]);
-	  if (gmm::mat_nrows(AUG_M) > 0) gmm::clear(MM[i]);
-	  MM(i, i) = -value_type(1)/r;
-	}
-      }
-      gmm::copy(BBN, gmm::sub_matrix(MS.tangent_matrix(), SUBN, SUBU));
-      gmm::copy(MM, gmm::sub_matrix(MS.tangent_matrix(), SUBN));
-
-//       gmm::copy(gmm::scaled(BN, -alpha),
-// 		gmm::sub_matrix(MS.tangent_matrix(), SUBN, SUBU));
-//       gmm::clear(gmm::sub_matrix(MS.tangent_matrix(), SUBN));
-//       if (gmm::mat_nrows(AUG_M) > 0)
-// 	gmm::copy(gmm::scaled(AUG_M, -value_type(1)),
-// 		  gmm::sub_matrix(MS.tangent_matrix(), SUBN));
-//       for (size_type i=0; i < nb_contact_nodes(); ++i) {
-// 	if (RLN[i] >= value_type(0)) {
-// 	  gmm::clear(gmm::sub_matrix(MS.tangent_matrix(),
-// 				     gmm::sub_interval(SUBN.first()+i,1),
-// 				     SUBU));
-// 	  if (gmm::mat_nrows(AUG_M) > 0)
-// 	    gmm::clear(gmm::sub_matrix(MS.tangent_matrix(),
-// 				  gmm::sub_interval(SUBN.first()+i,1), SUBN));
-// 	  MS.tangent_matrix()(SUBN.first()+i, SUBN.first()+i)=-value_type(1)/r;
-// 	}
-//       }
-      
-      if (!contact_only) {
-	base_matrix pg(d-1, d-1);
-	base_vector vg(d-1);
-
-	RT_MATRIX BBT(gmm::mat_nrows(BT), gmm::mat_ncols(BT));
-	gmm::dense_matrix<value_type> BTi(d-1,  gmm::mat_ncols(BT));
-	
-	l = 0;
-	for (size_type i=0; i < nb_contact_nodes(); ++i) {
-	  gmm::sub_interval SUBI(i*(d-1), d-1);
-	  gmm::sub_interval SUBJ(SUBT.first()+i*(d-1),(d-1));
-	  gmm::sub_interval SUBJJ(i*(d-1),(d-1));
-	  value_type th = Tresca_version ? threshold[i]
-	    : - (MS.state())[SUBN.first()+i] * friction_coef[i];
-	  
-	  if (i == CH(l,0)) {
-	    std::vector<double> my_rlt(1);
-	    if (CH(l,2) == 0) my_rlt[0] = - 2.0;
-	    else if (CH(l,3) == 0) my_rlt[0] = 2.0;
-	    else my_rlt[0] = 0.0;
-	    ball_projection_grad(my_rlt, 1.0, pg);
-	  } else
-	    ball_projection_grad(gmm::sub_vector(RLT, SUBI), th, pg);
-	  if (!really_stationary)
-	    gmm::mult(gmm::scaled(pg, -beta), 
-		      gmm::sub_matrix(BT, SUBI,
-				      gmm::sub_interval(0,gmm::mat_ncols(BT))),
-		      BTi);
-	  gmm::copy(BTi, gmm::sub_matrix(BBT, SUBJJ, SUBU));
-
-	  if (!Tresca_version) {
-	    if (i == CH(l,0)) {
-	      std::vector<double> my_rlt(1);
-	      if (CH(l,2) == 0) my_rlt[0] = - 2.0;
-	      else if (CH(l,3) == 0) my_rlt[0] = 2.0;
-	      else my_rlt[0] = 0.0;
-	      ball_projection_grad_r(my_rlt, 1.0, vg);
-	      ++l;
-	    } else
-	      ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
-	    for (size_type k = 0; k < d-1; ++k)
-	      MS.tangent_matrix()(SUBT.first()+i*(d-1)+k, SUBN.first()+i)
-		= - friction_coef[i] * vg[k] / r;
-	  }
-	  for (size_type j = 0; j < d-1; ++j) pg(j,j) -= value_type(1);
-	  gmm::copy(gmm::scaled(pg,value_type(1)/r), 
-		    gmm::sub_matrix(MS.tangent_matrix(), SUBJ));
-	}
-	T_MATRIX BBBT(gmm::mat_nrows(BT), gmm::mat_ncols(BT));
-	gmm::copy(BBT, BBBT);
-	gmm::copy(BBBT, gmm::sub_matrix(MS.tangent_matrix(), SUBT, SUBU));
-      }
-
-//       if (!contact_only) {
-// 	base_matrix pg(d-1, d-1);
-// 	base_vector vg(d-1);
-	
-// 	for (size_type i=0; i < nb_contact_nodes(); ++i) {
-// 	  gmm::sub_interval SUBI(i*(d-1), d-1);
-// 	  gmm::sub_interval SUBJ(SUBT.first()+i*(d-1),(d-1));
-// 	  value_type th = Tresca_version ? threshold[i]
-// 	    : - (MS.state())[SUBN.first()+i] * friction_coef[i];
-	  
-// 	  ball_projection_grad(gmm::sub_vector(RLT, SUBI), th, pg);
-// 	  if (!really_stationary)
-// 	    gmm::mult(gmm::scaled(pg, -beta), 
-// 		      gmm::sub_matrix(BT, SUBI,
-// 				      gmm::sub_interval(0,gmm::mat_ncols(BT))),
-// 		      gmm::sub_matrix(MS.tangent_matrix(), SUBJ, SUBU));
-	  
-// 	  if (!Tresca_version) {
-// 	    ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
-// 	    for (size_type k = 0; k < d-1; ++k)
-// 	      MS.tangent_matrix()(SUBT.first()+i*(d-1)+k, SUBN.first()+i)
-// 		= - friction_coef[i] * vg[k] / r;
-// 	  }
-// 	  for (size_type j = 0; j < d-1; ++j) pg(j,j) -= value_type(1);
-// 	  gmm::copy(gmm::scaled(pg,value_type(1)/r), 
-// 		    gmm::sub_matrix(MS.tangent_matrix(), SUBJ));
-// 	}
-//       }
-
-      
-      if (symmetrized) {
-	T_MATRIX tmp(mf_u->nb_dof(), mf_u->nb_dof());
-	
-	gmm::resize(tmp, mf_u->nb_dof(), gmm::mat_nrows(BN));
-	gmm::copy(gmm::transposed(gmm::sub_matrix(MS.tangent_matrix(),
-						  SUBN, SUBU)), tmp);
-	gmm::copy(tmp, gmm::sub_matrix(MS.tangent_matrix(), SUBU, SUBN));
-	gmm::resize(tmp, mf_u->nb_dof(), mf_u->nb_dof());
-	gmm::mult(gmm::transposed(gmm::scaled(BN,-r*alpha)),
-		  gmm::sub_matrix(MS.tangent_matrix(), SUBN, SUBU), tmp);
-	gmm::add(tmp, gmm::sub_matrix(MS.tangent_matrix(), SUBU));
-	
-	if (!contact_only) {
-	  gmm::mult(gmm::transposed(gmm::scaled(BT,-r*beta)),
-		    gmm::sub_matrix(MS.tangent_matrix(), SUBT, SUBU), tmp);
-	  gmm::add(tmp, gmm::sub_matrix(MS.tangent_matrix(), SUBU));
-	  gmm::resize(tmp, mf_u->nb_dof(), gmm::mat_nrows(BT));
-	  gmm::copy(gmm::transposed(gmm::sub_matrix(MS.tangent_matrix(),
-						    SUBT, SUBU)), tmp);
-	  gmm::copy(tmp, gmm::sub_matrix(MS.tangent_matrix(), SUBU, SUBT));
-	}
-      }
-      else {
-	gmm::copy(gmm::scaled(gmm::transposed(BN), value_type(-1)),
-		  gmm::sub_matrix(MS.tangent_matrix(), SUBU, SUBN));
-	if (!contact_only)
-	  gmm::copy(gmm::scaled(gmm::transposed(BT), value_type(-1)), 
-		    gmm::sub_matrix(MS.tangent_matrix(), SUBU, SUBT));
-      }
-    }
-    
-    virtual void do_compute_residual(MODEL_STATE &MS, size_type i0,size_type) {
-      precomp(MS, i0);
-      value_type c1(1);
-      size_type l = 0;
-      
-      for (size_type i=0; i < nb_contact_nodes(); ++i) {
-	if (i == CH(l,0)) {
-	  if (CH(l,1) == 0) RLN[i] = value_type(0);
-	  if (!contact_only) {
-	    if (CH(l,2) == 0) 
-	      RLT[i] = Tresca_version ? 
-		-threshold[i] : friction_coef[i]*(MS.state())[SUBN.first()+i];
-	    else if (CH(l,3) == 0) 
-	      RLT[i] = Tresca_version ? 
-		threshold[i] : -friction_coef[i]*(MS.state())[SUBN.first()+i];
-	  }
-	  ++l;
-	}
-	else {
-	  RLN[i] = std::min(value_type(0), RLN[i]);
-	  if (!contact_only)
-	    ball_projection(gmm::sub_vector(RLT, gmm::sub_interval(i*(d-1),d-1)),
-			    Tresca_version ? threshold[i]
-			    : -friction_coef[i]*(MS.state())[SUBN.first()+i]);
-	}
-      }
-      
-      if (symmetrized) {
-	gmm::mult_add(gmm::transposed(BN), gmm::scaled(RLN, -c1),
-		      gmm::sub_vector(MS.residual(), SUBU));
-	if (!contact_only)
-	  gmm::mult_add(gmm::transposed(BT), gmm::scaled(RLT, -c1),
-			gmm::sub_vector(MS.residual(), SUBU));
-      } else {
-	gmm::mult_add(gmm::transposed(BN),
-		      gmm::scaled(gmm::sub_vector(MS.state(), SUBN),-c1),
-		      gmm::sub_vector(MS.residual(), SUBU));
-	if (!contact_only)
-	  gmm::mult_add(gmm::transposed(BT),
-			gmm::scaled(gmm::sub_vector(MS.state(), SUBT),-c1),
-			gmm::sub_vector(MS.residual(), SUBU));
-      }
-      
-      /* residual on LN */
-      gmm::add(gmm::scaled(gmm::sub_vector(MS.state(), SUBN), -c1/r),
-	       gmm::scaled(RLN, c1/r), gmm::sub_vector(MS.residual(), SUBN));
-      // gmm::scale(gmm::sub_vector(MS.residual(), SUBN), c1 / r);
-
-      /* residual on LT */
-      if (!contact_only) {
-	gmm::add(gmm::scaled(gmm::sub_vector(MS.state(),SUBT), -c1/r),
-		 gmm::scaled(RLT, c1/r), gmm::sub_vector(MS.residual(), SUBT));
-	// gmm::scale(gmm::sub_vector(MS.residual(), SUBT), c1 / r);
-      }
-    }
-
-    void init(void) {
-      this->add_sub_brick(sub_problem);
-      this->proper_is_linear_ = this->proper_is_coercive_ = false;
-      this->proper_is_symmetric_ = symmetrized && contact_only;
-      r = value_type(1);
-      beta = value_type(1);
-      alpha = value_type(1);
-      this->force_update();
-    }
-
-    void set_stationary(bool b) { really_stationary = b; }
-    void set_beta(value_type a) { beta = a; }
-    void set_alpha(value_type a) { alpha = a; }
-    void set_CH(const gmm::dense_matrix<size_type> &CH_) {
-      gmm::resize(CH, gmm::mat_nrows(CH_), gmm::mat_ncols(CH_ ));
-      gmm::copy(CH_, CH);
-    }
-
-    template<typename MAT> void set_augmented_matrix(const MAT &M) {
-      gmm::resize(AUG_M, gmm::mat_nrows(M), gmm::mat_ncols(M));
-      gmm::copy(M, AUG_M);
-    }
-
-    void set_r(value_type r_) { r = r_; }
-    value_type get_r(void) const { return r; }
-    template <class VEC> void set_WT(const VEC &WT_)
-    { gmm::resize(WT, gmm::vect_size(WT_)); gmm::copy(WT_, WT); }
-    template <class VEC> void set_WN(const VEC &WN_)
-    { gmm::resize(WN, gmm::vect_size(WN_)); gmm::copy(WN_, WN); }
-
-    VECTOR &get_gap(void) { return gap; }
-    const VECTOR &get_gap(void) const { return gap; }
-
-    VECTOR &get_friction_coef(void) { return friction_coef; }
-    const VECTOR &get_friction_coef(void) const { return friction_coef; }
-
-    SUBVECTOR get_LN(MODEL_STATE &MS) {
-      SUBN = gmm::sub_interval(this->first_index() + sub_problem.nb_dof(),
-			       gmm::mat_nrows(BN));
-      return gmm::sub_vector(MS.state(), SUBN);
-    }
-
-    SUBVECTOR get_LT(MODEL_STATE &MS) {
-      SUBT = gmm::sub_interval(this->first_index() + sub_problem.nb_dof()
-			       + gmm::mat_nrows(BN),  gmm::mat_nrows(BT));
-      return gmm::sub_vector(MS.state(), SUBT);
-    }
-
-    /* contact and friction */
-    template <class MAT, class VEC> mdbrick_Coulomb_friction
-    (mdbrick_abstract<MODEL_STATE> &problem, const MAT &BN_, const VEC &gap_,
-     scalar_type FC_, const MAT &BT_, size_type num_fem_=0)
-      : sub_problem(problem), num_fem(num_fem_) {
-      contact_only = Tresca_version = symmetrized = really_stationary = false;
-      nbc = gmm::mat_nrows(BN_);
-      init();
-      gmm::copy(BN_, BN); gmm::copy(BT_, BT); gmm::copy(gap_, gap);
-      std::fill(friction_coef.begin(), friction_coef.end(), FC_);
-    }
-
-    /* contact only.        */
-    template <class MAT, class VEC> mdbrick_Coulomb_friction
-    (mdbrick_abstract<MODEL_STATE> &problem, const MAT &BN_, const VEC &gap_,
-     size_type num_fem_=0) : sub_problem(problem), num_fem(num_fem_) {
-      contact_only = true;
-      Tresca_version = symmetrized = really_stationary = false;
-      nbc = gmm::mat_nrows(BN_);
-      init();
-      gmm::copy(BN_, BN); gmm::copy(gap_, gap);
-    }
-
-  };
-
-
-}  /* end of namespace getfem.                                             */
-
-
-#endif /* GETFEM_COULOMB_FRICTION_H__ */
diff --git a/contrib/crack_plate/Makefile.in b/contrib/crack_plate/Makefile.in
index 4463ec9..66c5363 100644
--- a/contrib/crack_plate/Makefile.in
+++ b/contrib/crack_plate/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -142,6 +142,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -160,6 +161,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -176,6 +178,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -240,6 +243,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -275,7 +279,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -356,13 +359,13 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-crack_bilaplacian$(EXEEXT): $(crack_bilaplacian_OBJECTS) $(crack_bilaplacian_DEPENDENCIES) 
+crack_bilaplacian$(EXEEXT): $(crack_bilaplacian_OBJECTS) $(crack_bilaplacian_DEPENDENCIES) $(EXTRA_crack_bilaplacian_DEPENDENCIES) 
 	@rm -f crack_bilaplacian$(EXEEXT)
 	$(CXXLINK) $(crack_bilaplacian_OBJECTS) $(crack_bilaplacian_LDADD) $(LIBS)
-crack_mindlin$(EXEEXT): $(crack_mindlin_OBJECTS) $(crack_mindlin_DEPENDENCIES) 
+crack_mindlin$(EXEEXT): $(crack_mindlin_OBJECTS) $(crack_mindlin_DEPENDENCIES) $(EXTRA_crack_mindlin_DEPENDENCIES) 
 	@rm -f crack_mindlin$(EXEEXT)
 	$(CXXLINK) $(crack_mindlin_OBJECTS) $(crack_mindlin_LDADD) $(LIBS)
-mortar_bilaplacian$(EXEEXT): $(mortar_bilaplacian_OBJECTS) $(mortar_bilaplacian_DEPENDENCIES) 
+mortar_bilaplacian$(EXEEXT): $(mortar_bilaplacian_OBJECTS) $(mortar_bilaplacian_DEPENDENCIES) $(EXTRA_mortar_bilaplacian_DEPENDENCIES) 
 	@rm -f mortar_bilaplacian$(EXEEXT)
 	$(CXXLINK) $(mortar_bilaplacian_OBJECTS) $(mortar_bilaplacian_LDADD) $(LIBS)
 
@@ -541,14 +544,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -598,10 +602,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/crack_plate/crack_bilaplacian.cc b/contrib/crack_plate/crack_bilaplacian.cc
index d705358..7e3e1ce 100644
--- a/contrib/crack_plate/crack_bilaplacian.cc
+++ b/contrib/crack_plate/crack_bilaplacian.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2009 Yves Renard, Julien Pommier, Jeremie Lasry.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier, Jeremie Lasry.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "crack_bilaplacian.h"
 #include "getfem/getfem_export.h"   /* export functions (save solution in a file)  */
@@ -27,6 +27,9 @@
 #include "getfem/getfem_fourth_order.h"
 #include "getfem/getfem_model_solvers.h"
 #include "getfem/getfem_superlu.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
   
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/contrib/crack_plate/crack_bilaplacian.h b/contrib/crack_plate/crack_bilaplacian.h
index c7f1552..b5b9870 100644
--- a/contrib/crack_plate/crack_bilaplacian.h
+++ b/contrib/crack_plate/crack_bilaplacian.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_config.h"
 #include "gmm/gmm.h"
@@ -38,6 +39,9 @@
 #include "getfem/getfem_mesh_fem_global_function.h"
 #include "getfem/getfem_mesh_fem_sum.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/contrib/crack_plate/crack_bilaplacian.param b/contrib/crack_plate/crack_bilaplacian.param
index e1778ff..4ae865f 100644
--- a/contrib/crack_plate/crack_bilaplacian.param
+++ b/contrib/crack_plate/crack_bilaplacian.param
@@ -25,7 +25,7 @@ ANGLE_ROT = 0. ;  % must not be used with conformal meshes (for FEM comparison)
 
 %%%%%  domain parameters                   %%%%%
 N = 2;
-CRACK_SEMI_LENGTH = 0.11 ; %% only usefull if SOL_REF = 1 or 2
+CRACK_SEMI_LENGTH = 0.11 ; %% only useful if SOL_REF = 1 or 2
 if ( (SOL_REF == 0) || (SOL_REF == 3) )
    LX = 1. ; LY = LX; LZ = LX;	% sizes of the domain.
    EPSILON=0.045 ; % thickness 
@@ -170,7 +170,7 @@ SEUIL = 1e-26 ;    % threshold for elimination of dofs at the end of the integra
 CUTOFF_FUNC = 3; % 0 for the exponential cutoff. 
                  % 1 for a 3rd degree polynomial cutoff.
                  % 2 for a 5th degree polynomial cutoff. 
-CUTOFF = 0.4;  % usefull only for exponential cutoff (parameter of the speed of decreasing)
+CUTOFF = 0.4;  % useful only for exponential cutoff (parameter of the speed of decreasing)
 CUTOFF1 = 0.01; % radius
 CUTOFF0 = 0.25;
 
diff --git a/contrib/crack_plate/crack_bilaplacian_mixed.param b/contrib/crack_plate/crack_bilaplacian_mixed.param
index 311f499..374259e 100644
--- a/contrib/crack_plate/crack_bilaplacian_mixed.param
+++ b/contrib/crack_plate/crack_bilaplacian_mixed.param
@@ -20,7 +20,7 @@ ANGLE_ROT = PI / 6 ;
 
 %%%%%  domain parameters                   %%%%%
 N = 2;
-CRACK_SEMI_LENGTH = 0.11 ; %% only usefull if SOL_REF = 1 or 2
+CRACK_SEMI_LENGTH = 0.11 ; %% only useful if SOL_REF = 1 or 2
 if SOL_REF == 0
    LX = 1. ; LY = LX; LZ = LX;	% sizes of the domain.
    EPSILON=0.045 ; % thickness 
@@ -159,7 +159,7 @@ SEUIL = 1e-26 ;    % threshold for elimination of dofs at the end of the integra
 CUTOFF_FUNC = 3; % 0 for the exponential cutoff. 
                  % 1 for a 3rd degree polynomial cutoff.
                  % 2 for a 5th degree polynomial cutoff. 
-CUTOFF = 0.4;  % usefull only for exponential cutoff (parameter of the speed of decreasing)
+CUTOFF = 0.4;  % useful only for exponential cutoff (parameter of the speed of decreasing)
 CUTOFF1 = 0.01; % radius
 CUTOFF0 = 0.25;
 
diff --git a/contrib/crack_plate/crack_bilaplacian_moment.cc b/contrib/crack_plate/crack_bilaplacian_moment.cc
index 02915bb..3572c52 100644
--- a/contrib/crack_plate/crack_bilaplacian_moment.cc
+++ b/contrib/crack_plate/crack_bilaplacian_moment.cc
@@ -1,22 +1,23 @@
-//===========================================================================
-//
-// Copyright (C) 2006-2009 Yves Renard, Julien Pommier, Jeremie Lasry.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier, Jeremie Lasry.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "crack_bilaplacian.h"
 #include "getfem/getfem_regular_meshes.h"
@@ -25,7 +26,8 @@
 #include "getfem/getfem_model_solvers.h"
 #include "getfem/getfem_superlu.h"
 
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 scalar_type moment = - 1. ;
 scalar_type bbeta = M_PI / 4. ;
diff --git a/contrib/crack_plate/crack_bilaplacian_problem.cc b/contrib/crack_plate/crack_bilaplacian_problem.cc
index 2f85aa9..7d2ac27 100644
--- a/contrib/crack_plate/crack_bilaplacian_problem.cc
+++ b/contrib/crack_plate/crack_bilaplacian_problem.cc
@@ -1,22 +1,23 @@
-//===========================================================================
-//
-// Copyright (C) 2006-2009 Yves Renard, Julien Pommier, Jeremie Lasry.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier, Jeremie Lasry.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "crack_bilaplacian.h"
 #include "getfem/getfem_regular_meshes.h"
@@ -25,6 +26,9 @@
 #include "getfem/getfem_model_solvers.h"
 #include "getfem/getfem_superlu.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 size_type is_global_dof_type_bis(getfem::pdof_description dof){
 size_type global_dof = 0 ;
    for (dim_type d = 0; d < 4 ; ++d){
@@ -245,8 +249,8 @@ void bilaplacian_crack_problem::init(void) {
   std::string SIMPLEX_INTEGRATION = PARAM.string_value("SIMPLEX_INTEGRATION",
 					 "Name of simplex integration method");
   std::string SINGULAR_INTEGRATION = PARAM.string_value("SINGULAR_INTEGRATION");
-  enrichment_option = PARAM.int_value("ENRICHMENT_OPTION",
-				      "Enrichment option");
+  enrichment_option = unsigned(PARAM.int_value("ENRICHMENT_OPTION",
+					       "Enrichment option"));
   enr_area_radius = PARAM.real_value("RADIUS_ENR_AREA",
 				     "radius of the enrichment area");
 
@@ -922,7 +926,7 @@ bool bilaplacian_crack_problem::solve(plain_vector &U) {
 
       const getfem::mesh::ind_cv_ct cvs = mf_u().convex_to_basic_dof(d);
       for (size_type i=0; i < cvs.size(); ++i) {
-        unsigned cv = cvs[i];
+        size_type cv = cvs[i];
         //if (pm_cvlist.is_in(cv)) flag1 = true; else flag2 = true;
 
         getfem::pfem pf = mf_u().fem_of_element(cv);
@@ -1082,7 +1086,7 @@ bool bilaplacian_crack_problem::solve(plain_vector &U) {
       // 	  mf_u().point_of_dof(d) << " M2(d,d) = " << M2(d,d) << "\n";
       if (M2(d,d) < PARAM.real_value("SEUIL")) {
 	cout << "removed : " << mf_u().point_of_basic_dof(d) << "\n";	
-	unsigned n = gmm::mat_nrows(H);
+	size_type n = gmm::mat_nrows(H);
 	gmm::resize(H, n+1, gmm::mat_ncols(H));
 	H(n, d) = 1;
       }
@@ -1118,7 +1122,7 @@ bool bilaplacian_crack_problem::solve(plain_vector &U) {
     for (size_type d = 0; d < mf_u().nb_dof(); ++d) {
       if (M2(d,d) < PARAM.real_value("SEUIL_FINAL")) {
 	cout << "OULALA " << d << " @ " << mf_u().point_of_basic_dof(d) << " : " << M2(d,d) << "\n";	
-        unsigned n = gmm::mat_nrows(H);
+        size_type n = gmm::mat_nrows(H);
 	gmm::resize(H1, n+1, gmm::mat_ncols(H));
 	H1(n, d) = 1;
       }
@@ -1168,7 +1172,7 @@ bool bilaplacian_crack_problem::solve(plain_vector &U) {
 	  GMM_ASSERT1(!mf_u().is_reduced(), "To be adapted");
 	  
 	  for (unsigned d=0; d < mf_u().nb_dof(); d += q) {
-	    unsigned cv = mf_u().first_convex_of_basic_dof(d) ;
+	    size_type cv = mf_u().first_convex_of_basic_dof(d) ;
 	    getfem::pfem pf = mf_u().fem_of_element(cv);
 	    unsigned ld = unsigned(-1);
 	    for (unsigned dd = 0; dd < mf_u().nb_basic_dof_of_element(cv); dd += q) {
diff --git a/contrib/crack_plate/crack_bilaplacian_sif.cc b/contrib/crack_plate/crack_bilaplacian_sif.cc
index 8550032..e594acb 100644
--- a/contrib/crack_plate/crack_bilaplacian_sif.cc
+++ b/contrib/crack_plate/crack_bilaplacian_sif.cc
@@ -1,32 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard,  Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard,  Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "crack_bilaplacian.h"
 #include "getfem/getfem_regular_meshes.h"
@@ -36,6 +27,8 @@
 #include "getfem/getfem_superlu.h"
 #include "getfem/getfem_derivatives.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 namespace getfem {
   /* build a "ring" of convexes of given center and radius */
@@ -149,7 +142,7 @@ namespace getfem {
     for (unsigned d = 0; d < mf_pre_u.nb_dof(); ++d) {
         // getting a getfem::pdof_description about the curent dof
         const getfem::mesh::ind_cv_ct cvs = mf_pre_u.convex_to_basic_dof(d);
-        unsigned cv = cvs[0], ld = unsigned(-1);
+        size_type cv = cvs[0], ld = unsigned(-1);
         // getting the local index  (ld)
         for (unsigned dd = 0; dd < mf_pre_u.nb_basic_dof_of_element(cv); dd += 1) {
            if (mf_pre_u.ind_basic_dof_of_element(cv)[dd] == d) {
@@ -454,7 +447,7 @@ void bilaplacian_crack_problem::compute_sif(const plain_vector &U, scalar_type r
     
     cout << "initialisations ls2, ls3, mls2, mls3 : OK\n" ;
     
-    int where = PARAM.int_value("WHERE") ;
+    int where = int(PARAM.int_value("WHERE"));
 // 1	getfem::mesh_im_level_set::INTEGRATE_INSIDE (integrate over p(x)<0),
 // 2	getfem::mesh_im_level_set::INTEGRATE_OUTSIDE (integrate over p(x)>0),
 // 3	getfem::mesh_im_level_set::INTEGRATE_ALL,
@@ -528,8 +521,8 @@ void bilaplacian_crack_problem::compute_sif(const plain_vector &U, scalar_type r
     cout << "mim2.set_integration_method(... -> OK\n";
     
     cout << "done.\nEntering in compute_crack_stress_intensity_factors_KL(... \n" ;
-  compute_crack_stress_intensity_factors_KL(ls, mim, mim2, mim3, mf_pre_u, mf_u(), U, ring_radius, D, nu, E, epsilon, KI, KII);
-  cout << "computation of crack SIF via J-Integral \nK1_J:" << KI << "\nK2_J:" << KII << "\n";
+    compute_crack_stress_intensity_factors_KL(ls, mim, mim2, mim3, mf_pre_u, mf_u(), U, ring_radius, D, nu, E, epsilon, KI, KII);
+    cout << "computation of crack SIF via J-Integral \nK1_J:" << KI << "\nK2_J:" << KII << "\n";
 }
 
 void bilaplacian_crack_problem::exact_sif(scalar_type &K1, scalar_type &K2){
diff --git a/contrib/crack_plate/crack_bilaplacian_singularities.cc b/contrib/crack_plate/crack_bilaplacian_singularities.cc
index 0ddefe6..09d4d71 100644
--- a/contrib/crack_plate/crack_bilaplacian_singularities.cc
+++ b/contrib/crack_plate/crack_bilaplacian_singularities.cc
@@ -1,26 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "crack_bilaplacian.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 void bilaplacian_singular_functions::update_mls(size_type cv_) const { 
   if (cv_ != cv) { 
     cv=cv_; 
diff --git a/contrib/crack_plate/crack_bilaplacian_tools.cc b/contrib/crack_plate/crack_bilaplacian_tools.cc
index 482853c..b67d9a5 100644
--- a/contrib/crack_plate/crack_bilaplacian_tools.cc
+++ b/contrib/crack_plate/crack_bilaplacian_tools.cc
@@ -1,22 +1,23 @@
-//===========================================================================
-//
-// Copyright (C) 2006-2009 Yves Renard, Julien Pommier, Jeremie Lasry.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier, Jeremie Lasry.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "crack_bilaplacian.h"
 #include "getfem/getfem_regular_meshes.h"
@@ -25,6 +26,9 @@
 #include "getfem/getfem_model_solvers.h"
 #include "getfem/getfem_superlu.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 // In this file :
 
 // void asm_normal_derivative_dirichlet_constraints_bis
diff --git a/contrib/crack_plate/crack_mindlin.cc b/contrib/crack_plate/crack_mindlin.cc
index 8ca249a..a0bd4c2 100644
--- a/contrib/crack_plate/crack_mindlin.cc
+++ b/contrib/crack_plate/crack_mindlin.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 /**
@@ -40,6 +40,10 @@
 #include "getfem/getfem_mesh_fem_global_function.h"
 #include "getfem/getfem_mesh_fem_sum.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
@@ -70,7 +74,7 @@ struct mindlin_singular_functions : public getfem::global_function, public getfe
   const getfem::level_set &ls;
   mutable getfem::mesher_level_set mls0, mls1;
   mutable size_type cv;
-  scalar_type lambda, mu, epsilon; // lame coefficient and half-thickness, usefull for exact solution
+  scalar_type lambda, mu, epsilon; // lame coefficient and half-thickness, useful for exact solution
   
   void update_mls(size_type cv_) const { 
     if (cv_ != cv) { 
@@ -102,13 +106,13 @@ struct mindlin_singular_functions : public getfem::global_function, public getfe
     case 3: {
       return sqrt(r)*sin(theta/2);
     } break;
-    case 4: {   // usefull for isotropic_linear_elasticity_2D
+    case 4: {   // useful for isotropic_linear_elasticity_2D
       return sqrt(r)*sin(theta/2)*cos(theta);
     } break;
-    case 5: {   // usefull for isotropic_linear_elasticity_2D
+    case 5: {   // useful for isotropic_linear_elasticity_2D
       return sqrt(r)*cos(theta/2)*cos(theta);
     } break;
-    case 6: {   // usefull for Yves's exact solution only (not for finite element computation)
+    case 6: {   // useful for Yves's exact solution only (not for finite element computation)
       return  sqrt(r) * (  10. * mu_ * sin(theta/2.) * ( 12. * mu_ + 6. * lambda_ - gamma * r * r) - 2. * r * r * gamma *  sin(5. * theta / 2.) * (4. * lambda_ + 3. * mu_) ) ;
     } break;
     case 7: {   // same comment as case 6
@@ -160,11 +164,11 @@ struct mindlin_singular_functions : public getfem::global_function, public getfe
       g[0] = - sin(theta/2.0)  / 2.0   / sqrt(r) ; 
       g[1] =   cos(theta/2.0)  / 2.0   / sqrt(r) ; 
     } break;
-    case 4: {  // usefull for isotropic_linear_elasticity_2D   -> expression to check with maple !
+    case 4: {  // useful for isotropic_linear_elasticity_2D   -> expression to check with maple !
       g[0] =   ( 3./4. * sin(theta/2.0) - 1./4. * sin(5.0/2.0*theta) )    / sqrt(r) ; 
       g[1] =   (   cos(theta/2.0) + cos(5.0/2.0*theta) )  / 4.0   / sqrt(r) ; 
     } break;
-    case 5: {  // usefull for isotropic_linear_elasticity_2D   -> expression to check with maple !
+    case 5: {  // useful for isotropic_linear_elasticity_2D   -> expression to check with maple !
       g[0] = (  3./4.* cos(theta/2.0) - 1./4. * cos(5.0/2.0*theta) )   / sqrt(r) ; 
       g[1] = (       - sin(theta/2.0) - sin(5.0/2.0*theta)      )   / 4.0   / sqrt(r) ; 
     } break;
@@ -371,7 +375,7 @@ struct crack_mindlin_problem{
 				                4 boundaries of the plate. The exact solution
 						is equal to the singularities.   */
   size_type dx_export ;        /* dx_export = 1 : exporting the "finite element solution"
-                                  dx_export = 2 : exporting the "exact solution" (usefull in the case of sol_ref = 3) */
+                                  dx_export = 2 : exporting the "exact solution" (useful in the case of sol_ref = 3) */
 
   scalar_type h_crack_length ;  // half-crack-length
 
diff --git a/contrib/crack_plate/crack_mindlin.pl b/contrib/crack_plate/crack_mindlin.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/crack_plate/crack_mindlin.pl
+++ b/contrib/crack_plate/crack_mindlin.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/crack_plate/mortar_bilaplacian.cc b/contrib/crack_plate/mortar_bilaplacian.cc
index e7c4d58..925ccea 100644
--- a/contrib/crack_plate/mortar_bilaplacian.cc
+++ b/contrib/crack_plate/mortar_bilaplacian.cc
@@ -1,28 +1,31 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 
 #include "mortar_bilaplacian.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 
 int main(int argc, char *argv[]) {
 
diff --git a/contrib/crack_plate/mortar_bilaplacian.h b/contrib/crack_plate/mortar_bilaplacian.h
index af0ab61..c0bb4c4 100644
--- a/contrib/crack_plate/mortar_bilaplacian.h
+++ b/contrib/crack_plate/mortar_bilaplacian.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_config.h"
 #include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
@@ -44,6 +45,10 @@
 #include "getfem/getfem_mesh_fem_global_function.h"
 #include "getfem/getfem_mesh_fem_sum.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
diff --git a/contrib/delaminated_crack/Makefile.in b/contrib/delaminated_crack/Makefile.in
index dcf65f6..85edf78 100644
--- a/contrib/delaminated_crack/Makefile.in
+++ b/contrib/delaminated_crack/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -102,6 +102,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -120,6 +121,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -136,6 +138,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -200,6 +203,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -235,7 +239,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -308,7 +311,7 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-delaminated_crack$(EXEEXT): $(delaminated_crack_OBJECTS) $(delaminated_crack_DEPENDENCIES) 
+delaminated_crack$(EXEEXT): $(delaminated_crack_OBJECTS) $(delaminated_crack_DEPENDENCIES) $(EXTRA_delaminated_crack_DEPENDENCIES) 
 	@rm -f delaminated_crack$(EXEEXT)
 	$(CXXLINK) $(delaminated_crack_OBJECTS) $(delaminated_crack_LDADD) $(LIBS)
 
@@ -480,14 +483,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -537,10 +541,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/delaminated_crack/delaminated_crack.cc b/contrib/delaminated_crack/delaminated_crack.cc
index 7c66b87..9557564 100644
--- a/contrib/delaminated_crack/delaminated_crack.cc
+++ b/contrib/delaminated_crack/delaminated_crack.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
  * Linear Elastostatic problem with a growing delaminated crack.
@@ -39,6 +39,10 @@
 #include "getfem/getfem_import.h"
 #include "gmm/gmm.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_vector;
diff --git a/contrib/delaminated_crack/delaminated_crack.pl b/contrib/delaminated_crack/delaminated_crack.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/delaminated_crack/delaminated_crack.pl
+++ b/contrib/delaminated_crack/delaminated_crack.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/icare/Makefile.am b/contrib/icare/Makefile.am
index 8fa24b6..9eb019c 100644
--- a/contrib/icare/Makefile.am
+++ b/contrib/icare/Makefile.am
@@ -8,8 +8,10 @@ CLEANFILES = icare.data
 icare_SOURCES = icare.cc icare.h
 
 SUPLDFLAGS = @SUPLDFLAGS@
-INCLUDES = -I$(top_srcdir)/src -I../../src
-LDADD    = ../../src/libgetfem.la -lm  $(SUPLDFLAGS)
+MUMPS_LIBS = @MUMPS_LIBS@
+# MUMPS_CFLAGS = @MUMPS_CFLAGS@
+INCLUDES = -I$(top_srcdir)/src -I../../src # $(MUMPS_CFLAGS)
+LDADD    = ../../src/libgetfem.la -lm $(MUMPS_LIBS) $(SUPLDFLAGS)
 
 TESTS = $(top_srcdir)/contrib/icare/icare.pl
 
diff --git a/contrib/icare/Makefile.in b/contrib/icare/Makefile.in
index 06b6bbd..49eec38 100644
--- a/contrib/icare/Makefile.in
+++ b/contrib/icare/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -56,7 +56,8 @@ am_icare_OBJECTS = icare.$(OBJEXT)
 icare_OBJECTS = $(am_icare_OBJECTS)
 icare_LDADD = $(LDADD)
 am__DEPENDENCIES_1 =
-icare_DEPENDENCIES = ../../src/libgetfem.la $(am__DEPENDENCIES_1)
+icare_DEPENDENCIES = ../../src/libgetfem.la $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
@@ -110,6 +111,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -128,6 +130,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -144,6 +147,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -208,6 +212,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -243,7 +248,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -265,8 +269,9 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 CLEANFILES = icare.data
 icare_SOURCES = icare.cc icare.h
-INCLUDES = -I$(top_srcdir)/src -I../../src
-LDADD = ../../src/libgetfem.la -lm  $(SUPLDFLAGS)
+# MUMPS_CFLAGS = @MUMPS_CFLAGS@
+INCLUDES = -I$(top_srcdir)/src -I../../src # $(MUMPS_CFLAGS)
+LDADD = ../../src/libgetfem.la -lm $(MUMPS_LIBS) $(SUPLDFLAGS)
 TESTS = $(top_srcdir)/contrib/icare/icare.pl
 EXTRA_DIST = \
 	icare.pl                  \
@@ -318,7 +323,7 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-icare$(EXEEXT): $(icare_OBJECTS) $(icare_DEPENDENCIES) 
+icare$(EXEEXT): $(icare_OBJECTS) $(icare_DEPENDENCIES) $(EXTRA_icare_DEPENDENCIES) 
 	@rm -f icare$(EXEEXT)
 	$(CXXLINK) $(icare_OBJECTS) $(icare_LDADD) $(LIBS)
 
@@ -490,14 +495,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -547,10 +553,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/icare/icare.cc b/contrib/icare/icare.cc
index 1d46aff..29740d1 100644
--- a/contrib/icare/icare.cc
+++ b/contrib/icare/icare.cc
@@ -1,29 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-/* *********************************************************************** */
-/*                                                                         */
-/* Copyright (C) 2002-2009 Michel Fournié, Julien Pommier,                 */
-/*                         Yves Renard, Nicolas Renon, Nicolas Roux.       */
-/*                                                                         */
-/* This program is free software; you can redistribute it and/or modify    */
-/* it under the terms of the GNU Lesser General Public License as          */
-/* published by the Free Software Foundation; version 2.1 of the License.  */
-/*                                                                         */
-/* 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 Lesser General Public License for more details.                     */
-/*                                                                         */
-/* You  should  have received a copy of the GNU Lesser General Public      */
-/* License along  with  this program;  if not, write to the Free Software  */
-/* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301,  */
-/* USA.                                                                    */
-/*                                                                         */
-/* *********************************************************************** */
-
-/**@file icare.cc
-   @brief Fluid flow (Navier-Stokes) around an obstacle.
-*/
-
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Michel FourniŽ, Julien Pommier,
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
 #include "getfem/getfem_export.h"   /* export functions (save solution in a file)  */
 #include "getfem/getfem_import.h"
@@ -56,7 +50,7 @@ typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
 typedef getfem::modeling_standard_plain_vector  plain_vector;
 
 enum {
-  DIRICHLET_BOUNDARY_NUM = 777777, 
+  DIRICHLET_BOUNDARY_NUM = 0, 
   NONREFLECTIVE_BOUNDARY_NUM,
   NORMAL_PART_DIRICHLET_BOUNDARY_NUM, 
   ON_CYLINDER_BOUNDARY_NUM,  
@@ -105,23 +99,27 @@ struct navier_stokes_problem {
   scalar_type t_export;
   void do_export(scalar_type t);
 
-  int option;
+  int option, time_order;
 
   std::auto_ptr<problem_definition> pdef;
 
   std::string datafilename;
   ftool::md_param PARAM;
 
-  plain_vector Un1, Un0, Pn1, Pn0, lambda; /* U_{n+1}, U_{n}, P_{n+1} and P_{n} */
+  plain_vector Un1, Un0, Pn1, Pn0, lambda, tmp; /* U_{n+1}, U_{n}, P_{n+1} and P_{n} */
+  plain_vector Unm1; /*U_{n-1} */
 
   base_small_vector sol_f(const base_small_vector &P, scalar_type t);
   base_small_vector Dir_cond(const base_small_vector &P, scalar_type t);
 
   void solve(void);
   //void solve_METHOD_SPLITTING(bool);
-  //void solve_FULLY_CONSERVATIVE();
+  //void solve_FULLY_CONSERVATIVE();
   //void solve_PREDICTION_CORRECTION();
   void solve_PREDICTION_CORRECTION2();
+  //void solve_PREDICTION_CORRECTION_ORDER2();
+  //  void solve_FULLY_EXPLICIT_ORDER2();
+
   void init(void);
   navier_stokes_problem(void) : mim(mesh), mf_u(mesh), mf_p(mesh),
 				mf_rhs(mesh), mf_mult(mesh)  {}
@@ -176,34 +174,51 @@ struct problem_definition {
   
   void initial_condition_u(navier_stokes_problem &p, plain_vector &U0) {
     GMM_ASSERT1(!p.mf_rhs.is_reduced(), "To be adapted");
-    plain_vector R(p.N*p.mf_rhs.nb_dof()), F(p.mf_u.nb_dof());
+    plain_vector R(p.N*p.mf_rhs.nb_dof());
     for (unsigned i=0; i < p.mf_rhs.nb_dof(); ++i) {
       base_small_vector
 	r = initial_velocity(p, p.mf_rhs.point_of_basic_dof(i));
       gmm::copy(r, gmm::sub_vector(R, gmm::sub_interval(i*p.N, p.N)));
     }
-    /* L2 projection from mf_rhs onto mf_u (we cannot interpolate directly
-       onto mf_u since it can be non-lagrangian) */
-    sparse_matrix M(p.mf_u.nb_dof(), p.mf_u.nb_dof());
-    getfem::asm_mass_matrix(M, p.mim, p.mf_u);
-    getfem::asm_source_term(F, p.mim, p.mf_u, p.mf_rhs, R);
-    gmm::iteration iter(1E-13);
-    gmm::cg(M, U0, F, gmm::identity_matrix(), iter);
+    gmm::copy(R,U0);
   }
+//  void initial_condition_u(navier_stokes_problem &p, plain_vector &U0) {
+//     GMM_ASSERT1(!p.mf_rhs.is_reduced(), "To be adapted");
+//     plain_vector R(p.N*p.mf_rhs.nb_dof()), F(p.mf_u.nb_dof());
+//     for (unsigned i=0; i < p.mf_rhs.nb_dof(); ++i) {
+//       base_small_vector
+// 	r = initial_velocity(p, p.mf_rhs.point_of_basic_dof(i));
+//       gmm::copy(r, gmm::sub_vector(R, gmm::sub_interval(i*p.N, p.N)));
+//     }
+//     /* L2 projection from mf_rhs onto mf_u (we cannot interpolate directly
+//        onto mf_u since it can be non-lagrangian) */
+//     sparse_matrix M(p.mf_u.nb_dof(), p.mf_u.nb_dof());
+//     getfem::asm_mass_matrix(M, p.mim, p.mf_u);
+//     getfem::asm_source_term(F, p.mim, p.mf_u, p.mf_rhs, R);
+//     gmm::iteration iter(1E-13);
+//     gmm::cg(M, U0, F, gmm::identity_matrix(), iter);
+//   }
+
   void initial_condition_p(navier_stokes_problem &p, plain_vector &P0) {
-    plain_vector PP(p.mf_rhs.nb_dof());
-    GMM_ASSERT1(!p.mf_rhs.is_reduced(), "To be adapted");
-    for (unsigned i=0; i < p.mf_rhs.nb_dof(); ++i)
-      PP[i] = initial_pressure(p, p.mf_rhs.point_of_basic_dof(i));
-
-    /* L2 projection from mf_rhs onto mf_p */
-    plain_vector F(p.mf_p.nb_dof());
-    sparse_matrix M(p.mf_p.nb_dof(), p.mf_p.nb_dof());
-    getfem::asm_mass_matrix(M, p.mim, p.mf_p);
-    getfem::asm_source_term(F, p.mim, p.mf_p, p.mf_rhs, PP);
-    gmm::iteration iter(1E-13);
-    gmm::cg(M, P0, F, gmm::identity_matrix(), iter);
+    GMM_ASSERT1(!p.mf_p.is_reduced(), "To be adapted");
+    for (unsigned i=0; i < p.mf_p.nb_dof(); ++i)
+      P0[i] = initial_pressure(p, p.mf_p.point_of_basic_dof(i));
   }
+
+//   void initial_condition_p(navier_stokes_problem &p, plain_vector &P0) {
+//     plain_vector PP(p.mf_rhs.nb_dof());
+//     GMM_ASSERT1(!p.mf_rhs.is_reduced(), "To be adapted");
+//     for (unsigned i=0; i < p.mf_rhs.nb_dof(); ++i)
+//       PP[i] = initial_pressure(p, p.mf_rhs.point_of_basic_dof(i));
+
+//     /* L2 projection from mf_rhs onto mf_p */
+//     plain_vector F(p.mf_p.nb_dof());
+//     sparse_matrix M(p.mf_p.nb_dof(), p.mf_p.nb_dof());
+//     getfem::asm_mass_matrix(M, p.mim, p.mf_p);
+//     getfem::asm_source_term(F, p.mim, p.mf_p, p.mf_rhs, PP);
+//     gmm::iteration iter(1E-13);
+//     gmm::cg(M, P0, F, gmm::identity_matrix(), iter);
+//   }
   virtual ~problem_definition() {}
 };
 
@@ -496,7 +511,7 @@ struct problem_rotating_cylinder : public problem_definition {
 
   virtual scalar_type initial_pressure(navier_stokes_problem &,
 				       const base_node &) {
-    return 0.5; 
+    return 0.0; // the mean value = 0 
   }
 
   problem_rotating_cylinder(scalar_type aa) : alpha(aa) {}
@@ -537,6 +552,7 @@ void navier_stokes_problem::init(void) {
   Tinitial = PARAM.real_value("Tinitial","Initial Time");
   dt_export = PARAM.real_value("DT_EXPORT", "Time step for export");
   noisy = PARAM.int_value("NOISY", "");
+  time_order = PARAM.int_value("TIME_ORDER", "Discretization time order");
   option = PARAM.int_value("OPTION", "option");
 
   //  R = PARAM.real_value("RADIUS","Radius of the cylinder");
@@ -609,15 +625,21 @@ void navier_stokes_problem::solve() {
   gmm::resize(Un1, mf_u.nb_dof());
   gmm::resize(Pn0, mf_p.nb_dof());
   gmm::resize(Pn1, mf_p.nb_dof());
-  //switch (option) {
+ 
+  if (time_order==2){
+    gmm::resize(Unm1, mf_u.nb_dof());
+  }
+
+  switch (option) {
   //case 0 : solve_METHOD_SPLITTING(true); break;
   //case 1 : solve_METHOD_SPLITTING(false); break;
   //case 2 : solve_FULLY_CONSERVATIVE(); break;
   //case 3 : solve_PREDICTION_CORRECTION(); break;
-  //case 4 : solve_PREDICTION_CORRECTION2(); break;
-  //default: GMM_ASSERT1(false, "unknown method");
-  //}
-  solve_PREDICTION_CORRECTION2();
+  case 4 : solve_PREDICTION_CORRECTION2(); break;
+    //case 5 : solve_PREDICTION_CORRECTION_ORDER2(); break;
+    //case 6 : solve_FULLY_EXPLICIT_ORDER2();break;
+  default: GMM_ASSERT1(false, "unknown method");
+  }
 }
 
 /**************************************************************************/
@@ -910,7 +932,7 @@ void navier_stokes_problem::solve() {
 // }
 
 
-/************************************************************/
+/******************************************************************************************/
 void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
 
   size_type nbdof_u = mf_u.nb_dof(), nbdof_p = mf_p.nb_dof();
@@ -920,6 +942,7 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
   gmm::sub_interval I1(0, nbdof_u);
 
   cout << "nbdof rhs = " << nbdof_rhs << endl;
+	cout << "h = "<< mesh.minimal_convex_radius_estimate()<< endl;
 
   // Discretization of laplace operator for u
   sparse_matrix K1(nbdof_u, nbdof_u);
@@ -931,46 +954,56 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
   sparse_matrix M(nbdof_u, nbdof_u);
   asm_mass_matrix(M, mim, mf_u, mpirg);
  
-
   // Matrix p div u
   sparse_matrix B(nbdof_p, nbdof_u);
   asm_stokes_B(B, mim, mf_u, mf_p, mpirg);
 
+  // Boundary terms p v.n
+  sparse_matrix Bbc(nbdof_p, nbdof_u);
+  asm_B_boundary(Bbc, mim, mf_u, mf_p,mf_u.linked_mesh().get_mpi_sub_region(DIRICHLET_BOUNDARY_NUM));
+  asm_B_boundary(Bbc, mim, mf_u, mf_p, mf_u.linked_mesh().get_mpi_sub_region(NONREFLECTIVE_BOUNDARY_NUM));
+  asm_B_boundary(Bbc, mim, mf_u, mf_p, mf_u.linked_mesh().get_mpi_sub_region(NORMAL_PART_DIRICHLET_BOUNDARY_NUM));
+  asm_B_boundary(Bbc, mim, mf_u, mf_p,mf_u.linked_mesh().get_mpi_sub_region(ON_CYLINDER_BOUNDARY_NUM));
+
+  if (N==3){
+    asm_B_boundary(Bbc, mim, mf_u, mf_p,mf_u.linked_mesh().get_mpi_sub_region(NEUMANN_BOUNDARY_NUM)); 
+  }
+
 //////////////////////////////////////////////////////////////////////////
 // To take into account the BOUNDAY CONDITIONS (Lagrange multipliers)
 //////////////////////////////////////////////////////////////////////////
   mf_mult.set_qdim(N);
   GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted");
   
-  dal::bit_vector dofon_nonref
-    = mf_mult.basic_dof_on_region(NONREFLECTIVE_BOUNDARY_NUM);
-  
-  dal::bit_vector dofon_Dirichlet_Out_Cylinder 
-    = mf_mult.basic_dof_on_region(DIRICHLET_BOUNDARY_NUM);
+  dal::bit_vector dofon_nonref = mf_mult.basic_dof_on_region(NONREFLECTIVE_BOUNDARY_NUM);
   
-  //(NORMAL_PART_DIRICHLET_BOUNDARY_NUM);
-  //(NEUMANN_BOUNDARY_NUM);
-  //dofon_NDirichlet.setminus(dofon_nonref);
-  //dofon_NDirichlet.setminus(dofon_Dirichlet_Out_Cylinder);
-  //dofon_Neumann.setminus(dofon_Dirichlet_On_cylinder);
-  //dofon_Neumann.setminus(dofon_nonref);
-  //dofon_Neumann.setminus(dofon_Dirichlet_Out_Cylinder);
-
-
-  // Normal part Dirichlet condition -- sur v en 2D  -- sur v et w en 3D
+  dal::bit_vector dofon_Dirichlet_Out_Cylinder = mf_mult.basic_dof_on_region(DIRICHLET_BOUNDARY_NUM);
   
-  //cout << dofon_Dirichlet_Out_Cylinder << endl;
-  //cout << dofon_nonref << endl;
-
-  mf_mult.set_qdim(1);
-  dal::bit_vector dofon_NDirichlet
-    = mf_mult.basic_dof_on_region(NORMAL_PART_DIRICHLET_BOUNDARY_NUM);
-  //dofon_NDirichlet.setminus(dofon_nonref);
-  //dofon_NDirichlet.setminus(dofon_Dirichlet_Out_Cylinder);
-
+	
+	
+	
+//(NORMAL_PART_DIRICHLET_BOUNDARY_NUM);  
+//dofon_NDirichlet.setminus(dofon_nonref);
+//dofon_NDirichlet.setminus(dofon_Dirichlet_Out_Cylinder);
+//(NEUMANN_BOUNDARY_NUM);
+//dofon_Neumann.setminus(dofon_Dirichlet_On_cylinder);
+//dofon_Neumann.setminus(dofon_nonref);
+//dofon_Neumann.setminus(dofon_Dirichlet_Out_Cylinder);
+	
+//*******************************************************************************************************  
+// Normal part Dirichlet condition -- sur v en 2D  -- sur v et w en 3D
+//*******************************************************************************************************  
+//cout << dofon_Dirichlet_Out_Cylinder << endl;
+//cout << dofon_nonref << endl;
+//
+//  mf_mult.set_qdim(1);
+  dal::bit_vector dofon_NDirichlet = mf_mult.basic_dof_on_region(NORMAL_PART_DIRICHLET_BOUNDARY_NUM);
+  dofon_NDirichlet.setminus(dofon_nonref);
+  dofon_NDirichlet.setminus(dofon_Dirichlet_Out_Cylinder);
+	
   std::vector<size_type> ind_ct_ndir;
   for (dal::bv_visitor i(dofon_NDirichlet); !i.finished(); ++i) {
-    if (dofon_Dirichlet_Out_Cylinder.is_in(i*N) || dofon_nonref.is_in(i*N))   
+    if (dofon_Dirichlet_Out_Cylinder.is_in(i) || dofon_nonref.is_in(i))   
       dofon_NDirichlet.sup(i);  // Suppress i because it is on the
     else                        // Dirichlet or non reflective boundary.
       ind_ct_ndir.push_back(i);
@@ -982,56 +1015,58 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
   getfem::mesh_region mpindirrg
     =mf_u.linked_mesh().get_mpi_sub_region(NORMAL_PART_DIRICHLET_BOUNDARY_NUM);
 
-  sparse_matrix HND1(nbdof_NDir, nbdof_u);
-  {
-    sparse_matrix A(mf_mult.nb_dof(), nbdof_u); 
-    getfem::generic_assembly assem;
-    // assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1).Normal())(:,:,i,i);"); - Good in 2D / Bad in 3D 
-    assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1))(:,:,2);"); // 2ieme composante V = (u,v,w) : v = 0
-    assem.push_mi(mim); assem.push_mf(mf_u); assem.push_mf(mf_mult);
-    assem.push_mat(A); assem.assembly(mpindirrg);
-    gmm::copy(gmm::sub_matrix(A, SUB_CT_NDIR, I1), HND1);
-  }
-  cout << "Nb of Normal part Dirichlet constraints (qdim=1): " << nbdof_NDir << endl;
- 
-  sparse_matrix HND;
+// sparse_matrix HND1(nbdof_NDir, nbdof_u);
+//  {
+//    sparse_matrix A(mf_mult.nb_dof(), nbdof_u); 
+//    getfem::generic_assembly assem;
+//    // assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1).Normal())(:,:,i,i);"); - Good in 2D / Bad in 3D 
+//    assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1))(:,:,2);"); // 2ieme composante V = (u,v,w) : v = 0
+//    assem.push_mi(mim); assem.push_mf(mf_u); assem.push_mf(mf_mult);
+//    assem.push_mat(A); assem.assembly(mpindirrg);
+//    gmm::copy(gmm::sub_matrix(A, SUB_CT_NDIR, I1), HND1);
+//  }
+//  cout << "Nb of Normal part Dirichlet constraints (qdim=1): " << nbdof_NDir << endl;
+// 
+//  sparse_matrix HND;
   if (N==2){
-    gmm::resize(HND,nbdof_NDir, nbdof_u);
-    gmm::copy(HND1,HND);
+    //gmm::resize(HND,nbdof_NDir, nbdof_u);
+    //gmm::copy(HND1,HND);
     I2 = gmm::sub_interval(nbdof_u, nbdof_NDir);
   }
-  else { //(N==3){
-    // Normal part Dirichlet condition Left - Right (in 3D only)
-    sparse_matrix HND2(nbdof_NDir, nbdof_u);
-    {
-      sparse_matrix A(mf_mult.nb_dof(), nbdof_u); 
-      getfem::generic_assembly assem;
-      assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1))(:,:,3);"); // 3ieme composante V = (u,v,w) : w = 0 
-      assem.push_mi(mim); assem.push_mf(mf_u); assem.push_mf(mf_mult);
-      assem.push_mat(A); assem.assembly(mpindirrg);
-      gmm::copy(gmm::sub_matrix(A, SUB_CT_NDIR, I1), HND2);
-    }
-    gmm::resize(HND,2*nbdof_NDir, nbdof_u);
-    gmm::copy(HND1,gmm::sub_matrix(HND,gmm::sub_interval(0,nbdof_NDir),I1) );
-
-    gmm::copy(HND2,gmm::sub_matrix(HND,gmm::sub_interval(nbdof_NDir,nbdof_NDir),I1) );
-
-    nbdof_NDir = 2*nbdof_NDir;
-    I2 = gmm::sub_interval(nbdof_u, nbdof_NDir);
-  }
- 
-  //M gmm::dense_matrix<double> DM(nbdof_NDir,nbdof_u);
-  //M gmm:: copy(HND,DM);
-  //M for(unsigned i=0;i<nbdof_NDir;++i){
-  //M    for(unsigned j=0;j<nbdof_u;++j){
-  //M      if (DM(i,j)!=0.0) cout << i<<" , "<<j<<" = "<<DM(i,j)<< endl;
-  //M   }
-  //M  }
-  
-
-  // Dirichlet condition except on cylinder
-  mf_mult.set_qdim(N);
-  GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted");
+//  else { //(N==3){
+//    // Normal part Dirichlet condition Left - Right (in 3D only)
+//    sparse_matrix HND2(nbdof_NDir, nbdof_u);
+//    {
+//      sparse_matrix A(mf_mult.nb_dof(), nbdof_u); 
+//      getfem::generic_assembly assem;
+//      assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1))(:,:,3);"); // 3ieme composante V = (u,v,w) : w = 0 
+//      assem.push_mi(mim); assem.push_mf(mf_u); assem.push_mf(mf_mult);
+//      assem.push_mat(A); assem.assembly(mpindirrg);
+//      gmm::copy(gmm::sub_matrix(A, SUB_CT_NDIR, I1), HND2);
+//    }
+//    gmm::resize(HND,2*nbdof_NDir, nbdof_u);
+//    gmm::copy(HND1,gmm::sub_matrix(HND,gmm::sub_interval(0,nbdof_NDir),I1) );
+//
+//    gmm::copy(HND2,gmm::sub_matrix(HND,gmm::sub_interval(nbdof_NDir,nbdof_NDir),I1) );
+//
+//    nbdof_NDir = 2*nbdof_NDir;
+//    I2 = gmm::sub_interval(nbdof_u, nbdof_NDir);
+//  }
+// 
+//	
+//  //M gmm::dense_matrix<double> DM(nbdof_NDir,nbdof_u);
+//  //M gmm:: copy(HND,DM);
+//  //M for(unsigned i=0;i<nbdof_NDir;++i){
+//  //M    for(unsigned j=0;j<nbdof_u;++j){
+//  //M      if (DM(i,j)!=0.0) cout << i<<" , "<<j<<" = "<<DM(i,j)<< endl;
+//  //M   }
+//  //M  }
+//
+//  // Dirichlet condition except on cylinder
+//  mf_mult.set_qdim(N);
+//  GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted");
+	//size_type nbdof_NDir = 0;
+//*******************************************************************************************************  
   
   //dal::bit_vector dofon_Dirichlet_Out_Cylinder 
   //  = mf_mult.basic_dof_on_region(DIRICHLET_BOUNDARY_NUM);
@@ -1090,7 +1125,7 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
     gmm::copy(gmm::sub_matrix(A, SUB_CT_DIR_CYL, I1), HDC);
   }
   cout << "Nb of Dirichlet constraints on cylinder : " << nbdof_Dir_On_Cylinder << endl;
-  gmm :: resize(lambda,  nbdof_Dir_On_Cylinder);
+  //??//gmm :: resize(lambda,  nbdof_Dir_On_Cylinder);
 
 
   // Non reflective condition
@@ -1126,50 +1161,50 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
 
   // In 3D - NEUMANN_BOUNDARY_NUM
   sparse_matrix HN;
-  size_type nbdof_neumann;
+  size_type nbdof_neumann=0;
   gmm::sub_interval I5;
   
   dofon_nonref= mf_mult.basic_dof_on_region(NONREFLECTIVE_BOUNDARY_NUM);
   dofon_Dirichlet_Out_Cylinder = mf_mult.basic_dof_on_region(DIRICHLET_BOUNDARY_NUM);
-  dofon_NDirichlet = mf_mult.basic_dof_on_region(NORMAL_PART_DIRICHLET_BOUNDARY_NUM);
+  //dofon_NDirichlet = mf_mult.basic_dof_on_region(NORMAL_PART_DIRICHLET_BOUNDARY_NUM);
   dofon_Dirichlet_On_Cylinder = mf_mult.basic_dof_on_region(ON_CYLINDER_BOUNDARY_NUM);
 
-  if (N==3){
-    mf_mult.set_qdim(1);
-
-    dal::bit_vector dofon_neumann = mf_mult.basic_dof_on_region(NEUMANN_BOUNDARY_NUM);
-
-    std::vector<size_type> ind_ct_neumann;
-    for (dal::bv_visitor i(dofon_neumann); !i.finished(); ++i) {
-      if (dofon_Dirichlet_Out_Cylinder.is_in(i*N) || dofon_nonref.is_in(i*N) ||
-	  dofon_NDirichlet.is_in(i*N) || dofon_Dirichlet_On_Cylinder.is_in(i*N) )   
-	dofon_neumann.sup(i); 
-      else                     
-	ind_ct_neumann.push_back(i);
-    } 
-    //cout << mf_mult.point_of_basic_dof(i)<< endl;
-    
-    nbdof_neumann = dofon_neumann.card();
-    gmm::sub_index SUB_CT_NEUMANN(ind_ct_neumann);
-    
-    I5 = gmm::sub_interval(nbdof_u+nbdof_NDir+nbdof_Dir_Out_Cylinder+nbdof_Dir_On_Cylinder+nbdof_nonref, nbdof_neumann);
-    getfem::mesh_region mpineumannrg = mf_u.linked_mesh().get_mpi_sub_region(NEUMANN_BOUNDARY_NUM);
-        
-    gmm::resize(HN,nbdof_neumann, nbdof_u);
-    {
-      sparse_matrix A(mf_mult.nb_dof(), nbdof_u); 
-      getfem::generic_assembly assem;
-      assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1))(:,:,3);"); // 3ieme composante V = (u,v,w) : w = 0
-      assem.push_mi(mim); assem.push_mf(mf_u); assem.push_mf(mf_mult);
-      assem.push_mat(A); assem.assembly(mpineumannrg);
-      gmm::copy(gmm::sub_matrix(A, SUB_CT_NEUMANN, I1), HN);
-    }
-    cout << "Nb of Neumann part in 3D  (qdim=1): " << nbdof_neumann << endl;
-    
-    mf_mult.set_qdim(N);
-
-
-  }
+  //if (N==3){
+//    mf_mult.set_qdim(1);
+//
+//    dal::bit_vector dofon_neumann = mf_mult.basic_dof_on_region(NEUMANN_BOUNDARY_NUM);
+//
+//    std::vector<size_type> ind_ct_neumann;
+//    for (dal::bv_visitor i(dofon_neumann); !i.finished(); ++i) {
+//      if (dofon_Dirichlet_Out_Cylinder.is_in(i*N) || dofon_nonref.is_in(i*N) ||
+//	  dofon_NDirichlet.is_in(i*N) || dofon_Dirichlet_On_Cylinder.is_in(i*N) )   
+//	dofon_neumann.sup(i); 
+//      else                     
+//	ind_ct_neumann.push_back(i);
+//    } 
+//    //cout << mf_mult.point_of_basic_dof(i)<< endl;
+//    
+//    nbdof_neumann = dofon_neumann.card();
+//    gmm::sub_index SUB_CT_NEUMANN(ind_ct_neumann);
+//    
+//    I5 = gmm::sub_interval(nbdof_u+nbdof_NDir+nbdof_Dir_Out_Cylinder+nbdof_Dir_On_Cylinder+nbdof_nonref, nbdof_neumann);
+//    getfem::mesh_region mpineumannrg = mf_u.linked_mesh().get_mpi_sub_region(NEUMANN_BOUNDARY_NUM);
+//        
+//    gmm::resize(HN,nbdof_neumann, nbdof_u);
+//    {
+//      sparse_matrix A(mf_mult.nb_dof(), nbdof_u); 
+//      getfem::generic_assembly assem;
+//      assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1))(:,:,3);"); // 3ieme composante V = (u,v,w) : w = 0
+//      assem.push_mi(mim); assem.push_mf(mf_u); assem.push_mf(mf_mult);
+//      assem.push_mat(A); assem.assembly(mpineumannrg);
+//      gmm::copy(gmm::sub_matrix(A, SUB_CT_NEUMANN, I1), HN);
+//    }
+//    cout << "Nb of Neumann part in 3D  (qdim=1): " << nbdof_neumann << endl;
+//    
+//    mf_mult.set_qdim(N);
+//
+//
+//  }
   
   /////////////////////////////////////////////////////////////////////////////////////////////////
 // Operators to solve NSE
@@ -1221,8 +1256,6 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
 
   }
 
-
-
   //Prise en compte de façon faible
   plain_vector HP(nbdof_p);
   { plain_vector A(nbdof_p); 
@@ -1238,14 +1271,16 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
   //K2(nbdof_p,nbdof_p) = 0.0;  
   */
 
-
-
   //Prise en compte de façon forte
   for (unsigned i=0;i<=nbdof_p; ++i) {
     K2(nbdof_p,i) = K2(i,nbdof_p) = 1.0;} // mean value of the pressure = 0
   //K2(nbdof_p, 0) = K2(0, nbdof_p) = 1.0;} // set the first pressure dof to 0
   K2(nbdof_p,nbdof_p) = 0.0;  
 
+  gmm::SuperLU_factor<double> SLUsys2, SLUsys3,SLUsys1;
+  SLUsys2.build_with(K2);
+
+	
 ///////////////////////////////////////////////////////////////////////////////////////////////// 
 // dynamic problem
 /////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1254,6 +1289,8 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
   plain_vector Phi(nbdof_p);
 
   /////// REPRISE DES CALCULS EVENTUELS //////
+  std::string initfile_Um1 = PARAM.string_value("INIT_FILE_Um1");
+  
   std::string initfile_U = PARAM.string_value("INIT_FILE_U");
   std::string initfile_P = PARAM.string_value("INIT_FILE_P");
   
@@ -1264,6 +1301,11 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
     gmm::vecload(initfile_U,Un0); 
     gmm::vecload(initfile_P,Pn0);
   }
+  
+  if (initfile_Um1.size() != 0) {
+    gmm::vecload(initfile_Um1,Unm1); 
+  }
+  
   ////// initialiser t et eviter les 2 initialisations suivantes
 
   std::ofstream coeffTP("coeffTP.data");
@@ -1275,58 +1317,198 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
   scalar_type BoxXmax =  PARAM.real_value("BOXXmax", "Particular Point xMax");
   scalar_type BoxYmin =  PARAM.real_value("BOXYmin", "Particular Point yMin");
   scalar_type BoxYmax =  PARAM.real_value("BOXYmax", "Particular Point yMax");
+  scalar_type BoxZmin, BoxZmax;
+
+  if (N==3) {
+    BoxZmin =  PARAM.real_value("BOXZmin", "Particular Point zMin");
+    BoxZmax =  PARAM.real_value("BOXZmax", "Particular Point zMax");
+  }
+	
+  base_node ptPartU(N+1), ptPartP(N+1);
 
-  base_node ptRef(N+2);
+	
   GMM_ASSERT1(!mf_p.is_reduced(), "To be adapted");
-  for (unsigned i=0; i< mf_p.nb_dof(); ++i){
-    bgeot :: base_node BN =  mf_p.point_of_basic_dof(i);
-    if (BN[0]<BoxXmax && BN[0] > BoxXmin && BN[1]< BoxYmax && BN[1] > BoxYmin ) {
-      for (unsigned j=0; j< N; j++) {ptRef[j] = BN[j];}
-      ptRef[N] = i; // c'est scalaire sur p
-      ptRef[N+1] = 0;
-    }
-  } 
-  
-  GMM_ASSERT1(!mf_u.is_reduced(), "To be adapted");
-  for (unsigned i=0; i< mf_u.nb_dof(); ++i){
-    bgeot :: base_node BN =  mf_u.point_of_basic_dof(i);
-    if (N==2) {
-      if (BN[0]==ptRef[0] && BN[1] ==ptRef[1]) {ptRef[3] = i+N-1;}
-      // c'est vectoriel sur u
-      //Attention c'est vectoriel => en sortie i <-> pt sur la dernière composante de la vitesse
-      // Vitesse =(U,V,W) alors en 2D --> sur V, en 3D --> sur W
-      // D'ou la modif : non pas i mais i+N-1
-    }
-    if (N==3) {
-      if (BN[0]==ptRef[0] && BN[1] ==ptRef[1] && BN[2] == ptRef[2]) {ptRef[4] = i+N-1;} 
-    }
-  }    
 
-  if (N==2) 
-    cout << "Reference Point for Cd and Cl  : (" <<  ptRef[0]<<","<< ptRef[1]<<")"<<endl;
-  if (N==3)
-    cout << "Reference Point for Cd and Cl  : (" <<  ptRef[0]<<","<< ptRef[1]<<","<< ptRef[2]<<")"<<endl;
-    
 
-  size_type sizelsystem;
+ if (N==2) {	 
+	 for (unsigned i=0; i< mf_p.nb_dof(); ++i){
+      bgeot :: base_node BN =  mf_p.point_of_basic_dof(i);
+      if (BN[0]<BoxXmax && BN[0] > BoxXmin && BN[1]< BoxYmax && BN[1] > BoxYmin ) {
+		  cout << "Point Part in Box -- i on mf_p= " << i <<",x="<<BN[0]<<",y="<<BN[1]<< endl;
+		  ptPartP[0] = BN[0];
+		  ptPartP[1] = BN[1];
+		  ptPartP[2] = i;
+		  break;
+      }
+    } 
+	 
+	 
+	 for (unsigned i=0; i< mf_u.nb_dof(); ++i){
+		 bgeot :: base_node BN =  mf_u.point_of_dof(i);
+		 if (BN[0]==ptPartP[0] && BN[1]==ptPartP[1] ) {
+			 cout << "Point Part in Box -- i on mf_u= " << i <<",x="<<BN[0]<<",y="<<BN[1]<< endl;
+			 // Attention c'est vectoriel => en sortie i <-> pt sur la dernière composante de la vitesse
+			 // Vitesse =(U,V,W) alors en 2D --> sur V, en 3D --> sur W
+			 // D'ou la modif dans ptPartU[2]
+			 ptPartU[0] = BN[0];
+			 ptPartU[1] = BN[1]; 
+			 ptPartU[2] = i - N + 1;
+		     break;
+
+		 } 
+	 }
+	 ptPartData << ptPartP[0] << " " << ptPartP[1] << endl; 
+	 
+  }
+	if (N==3) {	 
+		for (unsigned i=0; i< mf_p.nb_dof(); ++i){
+			bgeot :: base_node BN =  mf_p.point_of_basic_dof(i);
+			if (BN[0]<BoxXmax && BN[0] > BoxXmin && BN[1]< BoxYmax && BN[1] > BoxYmin  && BN[2]< BoxZmax && BN[2] > BoxZmin ) {
+				cout << "Point Part in Box -- i on mf_p= " << i <<",x="<<BN[0]<<",y="<<BN[1]<< ",z="<<BN[2]<< endl;
+				ptPartP[0] = BN[0];
+				ptPartP[1] = BN[1];
+				ptPartP[2] = BN[2];
+				ptPartP[3] = i;
+				break;
+			}
+		} 
+		
+		
+		for (unsigned i=0; i< mf_u.nb_dof(); ++i){
+			bgeot :: base_node BN =  mf_u.point_of_dof(i);
+			if (BN[0]==ptPartP[0] && BN[1]==ptPartP[1]&& BN[2]==ptPartP[2] ) {
+				cout << "Point Part in Box -- i on mf_u= " << i <<",x="<<BN[0]<<",y="<<BN[1]<<",z="<<BN[2]<< endl;
+				// Attention c'est vectoriel => en sortie i <-> pt sur la dernière composante de la vitesse
+				// Vitesse =(U,V,W) alors en 2D --> sur V, en 3D --> sur W
+				// D'ou la modif dans ptPartU[3]
+				ptPartU[0] = BN[0];
+				ptPartU[1] = BN[1]; 
+				ptPartU[2] = BN[2];
+				ptPartU[3] = i - N + 1;
+				break;
+				
+			} 
+		}
+		ptPartData << ptPartP[0] << " " << ptPartP[1] << " " << ptPartP[2] << endl; 
+		
+	} 
+
+  size_type sizelsystem = 0;
   size_type sizelsystemP = nbdof_p+1;
 
   if (N==2) 
-    sizelsystem = nbdof_u + nbdof_NDir + nbdof_Dir_Out_Cylinder + nbdof_Dir_On_Cylinder+ nbdof_nonref;
+    sizelsystem = nbdof_u + nbdof_NDir + nbdof_Dir_Out_Cylinder + nbdof_Dir_On_Cylinder + nbdof_nonref;
   if (N==3)
-    sizelsystem = nbdof_u + nbdof_NDir + nbdof_Dir_Out_Cylinder + nbdof_Dir_On_Cylinder+ nbdof_nonref + nbdof_neumann;
+    sizelsystem = nbdof_u + nbdof_NDir + nbdof_Dir_Out_Cylinder + nbdof_Dir_On_Cylinder + nbdof_nonref;// + nbdof_neumann;
 
   sparse_matrix A1(sizelsystem, sizelsystem);
   sparse_matrix A2(sizelsystem, sizelsystem); 
-  plain_vector    Y(sizelsystem), YY(nbdof_u);
+  sparse_matrix A2u(sizelsystem/2, sizelsystem/2); 
+  sparse_matrix A2v(sizelsystem/2, sizelsystem/2); 
+  sparse_matrix A1u(sizelsystem/2, sizelsystem/2); 
+  sparse_matrix A1v(sizelsystem/2, sizelsystem/2); 
+	
+	
+  plain_vector    Y(sizelsystem), YY(nbdof_u), Ytmp(nbdof_u);
 
   do_export(0);
   cout << "-----------------------------------------------------------" << endl;
   cout << "Dynamic problem implementation" << endl;
   cout << "-----------------------------------------------------------" << endl;
 
+	
+gmm :: sub_slice SUB_CT_Vu(0,sizelsystem/N,N);
+gmm :: sub_slice SUB_CT_Vv(1,sizelsystem/N,N);
+gmm :: sub_interval SUB_CT_V(0,nbdof_u);
+gmm :: sub_interval SUB_CT_P(0,nbdof_p);
+	
+// idŽees 	
+//gmm::copy(gmm::sub_vector(F1generic,SUB_CT_V1full),F1full);
+//gmm::copy(gmm::sub_vector(X1full,SUB_CT_V),X1);
+//gmm::copy(gmm::sub_vector(X2full,SUB_CT_V),X2);
+//gmm::copy(X1,gmm::sub_vector(USTAR,gmm::sub_slice(0,nbdof_u,2)));
+//gmm::copy(X2,gmm::sub_vector(USTAR,gmm::sub_slice(1,nbdof_u,2)));
+	
   for (scalar_type t = Tinitial + dt; t <= T; t += dt) {
-    /*
+
+    //******* Construction of the Matrix for the 3rd system (to obtain velocity) **********//
+    if (t==Tinitial+dt){ //time_order = 1 or first iterations with time_order = 2, computed once
+      gmm::clear(A2);
+      gmm::add(M, gmm::sub_matrix(A2, I1));
+      //// Normal Dirichlet condition
+      //gmm::copy(HND, gmm::sub_matrix(A2, I2, I1));
+      //gmm::copy(gmm::transposed(HND), gmm::sub_matrix(A2, I1, I2));
+      
+      // Dirichlet condition except on cylinder
+      gmm::copy(HD, gmm::sub_matrix(A2, I3, I1));
+      gmm::copy(gmm::transposed(HD), gmm::sub_matrix(A2, I1, I3));
+      
+      // Dirichlet condition on cylinder
+      gmm::copy(HDC, gmm::sub_matrix(A2, I3C, I1));
+      gmm::copy(gmm::transposed(HDC), gmm::sub_matrix(A2, I1, I3C));
+      
+      // Non reflective condition
+      gmm::copy(HNR, gmm::sub_matrix(A2, I4, I1));
+      gmm::copy(gmm::transposed(HNR), gmm::sub_matrix(A2, I1, I4));
+      
+      // Factorization LU
+      // SLUsys3.build_with(A2); // pour le systeme couple (u,v)
+		
+		
+		
+		gmm::clear(A2u);
+		//gmm::clear(A2v);
+
+		
+		gmm::copy(gmm::sub_matrix(A2,SUB_CT_Vu,SUB_CT_Vu),A2u);
+		//gmm::copy(gmm::sub_matrix(A2,SUB_CT_Vv,SUB_CT_Vv),A2v);
+
+	
+		//gmm::add(gmm::scaled(A2u,-1.0),A2v);
+		//cout <<"A2 "<< gmm::mat_norminf(A2v) << endl;
+		
+	SLUsys3.build_with(A2u);
+		
+    }
+
+    if ((time_order==2)&&(t==Tinitial+2*dt)){ // computed once
+      gmm::clear(A2);
+      gmm::add(gmm::scaled(M,1.5), gmm::sub_matrix(A2, I1));
+      //// Normal Dirichlet condition
+      //gmm::copy(HND, gmm::sub_matrix(A2, I2, I1));
+      //gmm::copy(gmm::transposed(HND), gmm::sub_matrix(A2, I1, I2));
+      
+      // Dirichlet condition except on cylinder
+      gmm::copy(HD, gmm::sub_matrix(A2, I3, I1));
+      gmm::copy(gmm::transposed(HD), gmm::sub_matrix(A2, I1, I3));
+      
+      // Dirichlet condition on cylinder
+      gmm::copy(HDC, gmm::sub_matrix(A2, I3C, I1));
+      gmm::copy(gmm::transposed(HDC), gmm::sub_matrix(A2, I1, I3C));
+      
+      // Non reflective condition
+      gmm::copy(HNR, gmm::sub_matrix(A2, I4, I1));
+      gmm::copy(gmm::transposed(HNR), gmm::sub_matrix(A2, I1, I4));
+      
+      // Factorization LU
+      //SLUsys3.build_with(A2); // pb en (u,v) couplŽ
+      
+		gmm::clear(A2u);
+		//gmm::clear(A2v);
+		
+		
+		gmm::copy(gmm::sub_matrix(A2,SUB_CT_Vu,SUB_CT_Vu),A2u);
+		//gmm::copy(gmm::sub_matrix(A2,SUB_CT_Vv,SUB_CT_Vv),A2v);
+		
+		SLUsys3.build_with(A2u);
+	
+		
+    }
+    
+  
+    //******* The matrix of the 3rd system is constructed and factorized
+   
+  /*
     //  cout<<"cylinder"<<gmm::sub_vector(Un0,SUB_CT_DIR_CYL) << endl;
 
     //cout<<"dir"<<gmm::sub_vector(Un0,SUB_CT_DIR) << endl;
@@ -1348,73 +1530,82 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
 
     // Assembly of the first linear system
    
-    gmm::clear(A1);
-    gmm::clear(A2);
-    gmm::clear(Y);
-    gmm::clear(YY);
+    if ((time_order==1)||(t==Tinitial+dt)){ //time_order = 1 or first iterations with time_order = 2, computed once
+      gmm::clear(A1);
+      gmm::clear(Y);
+      // laplace operator
+      gmm::copy(K1, gmm::sub_matrix(A1, I1));     
+      // Nonlinear part
+      //cout << "avant  asm_NS_uuT"<< endl;
+      getfem::asm_NS_uuT(gmm::sub_matrix(A1, I1), mim, mf_u, Un0, mpirg);   
+      //cout << "apres  asm_NS_uuT"<< endl;
+      // Dynamic part 
+      gmm::add(gmm::scaled(M, 1./dt), gmm::sub_matrix(A1, I1));
+		
+      gmm::mult(M, gmm::scaled(Un0, 1.0/dt), gmm::sub_vector(Y, I1));
+	
+	}
+
+    if ((time_order==2)&&(t>=Tinitial+2*dt)){
+      gmm::clear(A1);
+      gmm::clear(Y);
+      gmm::clear(Ytmp);
+      // laplace operator
+      gmm::copy(K1, gmm::sub_matrix(A1, I1));     
+      // Nonlinear part
+      //cout << "avant  asm_NS_uuT"<< endl;
+      getfem::asm_NS_uuT(gmm::sub_matrix(A1, I1), mim, mf_u, Un0, mpirg);  
+      //cout << "apres  asm_NS_uuT"<< endl;
+      // Dynamic part 
+      gmm::add(gmm::scaled(M, 1.5/dt), gmm::sub_matrix(A1, I1));
+      gmm::add(gmm::scaled(Un0, 2.0/dt),gmm::scaled(Unm1,-0.5/dt),Ytmp);
+      gmm::mult(M, Ytmp, gmm::sub_vector(Y, I1));
+		
+    }
 
-    // laplace operator
-    gmm::copy(K1, gmm::sub_matrix(A1, I1));
 
-    // Nonlinear part
-    getfem::asm_NS_uuT(gmm::sub_matrix(A1, I1), mim, mf_u, Un0, mpirg);
-    // Dynamic part
-    gmm::add(gmm::scaled(M, 1./dt), gmm::sub_matrix(A1, I1));
-    
-    gmm::add(M, gmm::sub_matrix(A2, I1));
-    
-    gmm::mult(M, gmm::scaled(Un0, 1./dt), gmm::sub_vector(Y, I1));
 #if GETFEM_PARA_LEVEL > 1
     MPI_SUM_VECTOR2(Y);
 #endif
-    
+   
     // Volumic source term -- inutile d'assambler car F = 0
     //pdef->source_term(*this, t, F);
     //getfem::asm_source_term(Y, mim, mf_u, mf_rhs, F,mpirg); // inutile (F=0)
    
-    // Normal Dirichlet condition
-    gmm::copy(HND, gmm::sub_matrix(A1, I2, I1));
-    gmm::copy(gmm::transposed(HND), gmm::sub_matrix(A1, I1, I2));
-        
-    gmm::copy(HND, gmm::sub_matrix(A2, I2, I1));
-    gmm::copy(gmm::transposed(HND), gmm::sub_matrix(A2, I1, I2));
+    // // Normal Dirichlet condition
+    //gmm::copy(HND, gmm::sub_matrix(A1, I2, I1));
+    //gmm::copy(gmm::transposed(HND), gmm::sub_matrix(A1, I1, I2));
    
     // Dirichlet condition except on cylinder
     gmm::copy(HD, gmm::sub_matrix(A1, I3, I1));
     gmm::copy(gmm::transposed(HD), gmm::sub_matrix(A1, I1, I3));
-    
-    gmm::copy(HD, gmm::sub_matrix(A2, I3, I1));
-    gmm::copy(gmm::transposed(HD), gmm::sub_matrix(A2, I1, I3));
 
     // Dirichlet condition on cylinder
     gmm::copy(HDC, gmm::sub_matrix(A1, I3C, I1));
     gmm::copy(gmm::transposed(HDC), gmm::sub_matrix(A1, I1, I3C));
-    
-    gmm::copy(HDC, gmm::sub_matrix(A2, I3C, I1));
-    gmm::copy(gmm::transposed(HDC), gmm::sub_matrix(A2, I1, I3C));
 
     // Non reflective condition
     gmm::copy(HNR, gmm::sub_matrix(A1, I4, I1));
     gmm::copy(gmm::transposed(HNR), gmm::sub_matrix(A1, I1, I4));
+		
     
-    gmm::copy(HNR, gmm::sub_matrix(A2, I4, I1));
-    gmm::copy(gmm::transposed(HNR), gmm::sub_matrix(A2, I1, I4));
-
-    if (N==3){
-    // Neumann condition in 3D
-      gmm::copy(HN, gmm::sub_matrix(A1, I5, I1));
-      gmm::copy(gmm::transposed(HN), gmm::sub_matrix(A1, I1, I5));
+   //  if (N==3){
+//     // Neumann condition in 3D
+//       gmm::copy(HN, gmm::sub_matrix(A1, I5, I1));
+//       gmm::copy(gmm::transposed(HN), gmm::sub_matrix(A1, I1, I5));
       
-      gmm::copy(HN, gmm::sub_matrix(A2, I5, I1));
-      gmm::copy(gmm::transposed(HN), gmm::sub_matrix(A2, I1, I5));
-    }
+//       gmm::copy(HN, gmm::sub_matrix(A2, I5, I1));
+//       gmm::copy(gmm::transposed(HN), gmm::sub_matrix(A2, I1, I5));
+//     }
     
     // Right hand side with Dirichlet boundary conditions
 
     gmm::resize(F, N * nbdof_rhs);
     pdef->dirichlet_condition(*this, t, F); // time independent => exit loop
+
     {
       plain_vector VV(mf_mult.nb_dof());
+      gmm::clear(VV);
       getfem::asm_source_term(VV, mim, mf_mult, mf_rhs, F, mpidirrg); // a optimiser indept time
 #if GETFEM_PARA_LEVEL > 1
       MPI_SUM_VECTOR2(VV);
@@ -1423,12 +1614,14 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
     }
     {
       plain_vector VV(mf_mult.nb_dof());
+      gmm::clear(VV);
       getfem::asm_source_term(VV, mim, mf_mult, mf_rhs, F, mpidircylrg); // a optimiser  indept time
 #if GETFEM_PARA_LEVEL > 1
       MPI_SUM_VECTOR2(VV);
 #endif
       gmm::copy(gmm::sub_vector(VV, SUB_CT_DIR_CYL), gmm::sub_vector(Y, I3C));
     }
+
     /*{
       plain_vector VV(mf_mult.nb_dof());
       getfem::asm_source_term(VV, mim, mf_mult, mf_rhs, F, mpindirrg); // a optimiser  indept time
@@ -1437,8 +1630,10 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
       #endif
       gmm::copy(gmm::sub_vector(VV, SUB_CT_NDIR), gmm::sub_vector(Y, I2));       
       }*/
-    {
+
+       {
       plain_vector VV(mf_mult.nb_dof());
+      gmm::clear(VV);
       // getfem::asm_source_term(VV, mim, mf_mult, mf_rhs, F, mpinonrefrg); // CL Périodiques
       if (non_reflective_bc == 0) {
  	asm_basic_non_reflective_bc(VV, mim, mf_u, Un0, mf_mult, dt, mpinonrefrg);
@@ -1451,44 +1646,185 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
 #endif   
       gmm::copy(gmm::sub_vector(VV, SUB_CT_NONREF), gmm::sub_vector(Y, I4));
     }
-     
+    
     // pressure part
+    gmm::clear(YY);
     gmm::mult(gmm::transposed(B), gmm::scaled(Pn0, -1.0), YY);
+
+#if GETFEM_PARA_LEVEL > 1
+    MPI_SUM_VECTOR2(YY);
+#endif
+    
+    gmm::add(YY, gmm::sub_vector(Y, I1));
+    
+    gmm::clear(YY);
+    gmm::mult(gmm::transposed(Bbc), Pn0, YY);
+ 
+
 #if GETFEM_PARA_LEVEL > 1
-      MPI_SUM_VECTOR2(YY);
+    MPI_SUM_VECTOR2(YY);
 #endif
     gmm::add(YY, gmm::sub_vector(Y, I1));
     
+	  
+	  gmm::clear(A1u);
+	 // gmm::clear(A1v);
+	  
+	  
+	  gmm::copy(gmm::sub_matrix(A1,SUB_CT_Vu,SUB_CT_Vu),A1u);
+	 // gmm::copy(gmm::sub_matrix(A1,SUB_CT_Vv,SUB_CT_Vv),A1v);
+	  
+	  
+	  
     //
     // Solving the first linear system
     //
+	  
     {
       double rcond;
       plain_vector X(sizelsystem);
+
+		//plain_vector Xu(sizelsystem/2);
+		//plain_vector Xv(sizelsystem/2);
+		//plain_vector Yu(sizelsystem/2);
+		//plain_vector Yv(sizelsystem/2);
+
+		
 #if  (GETFEM_PARA_LEVEL > 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER)
       MUMPS_distributed_matrix_solve(A1,X,Y);
-#elif (GETFEM_PARA_LEVEL==1 && GMM_USES_MUMPS)
+#elif (GETFEM_PARA_LEVEL==1 && defined(GMM_USES_MUMPS))
       MUMPS_solve(A1,X,Y);
       //#elif (GETFEM_PARA_LEVEL==0 && GMM_USES_MUMPS)
       //MUMPS_solve(A1,X,Y);
 #elif (GETFEM_PARA_LEVEL==0)
-      SuperLU_solve(A1, X, Y, rcond);
-      //      gmm::iteration iter(1E-8);
+      // SuperLU_solve(A1, X, Y, rcond);
+	  
+		//gmm::copy(gmm::sub_vector(Y,SUB_CT_Vu),Yu);
+	    //gmm::copy(gmm::sub_vector(Y,SUB_CT_Vv),Yv);
+
+		
+		//SuperLU_solve(A1u, Xu, Yu, rcond);
+		//SuperLU_solve(A1u, Xv, Yv, rcond);
+		
+		// Factorisation LU
+		SLUsys1.build_with(A1u);
+		//SLUsys1.solve(Xu,Yu);
+		//SLUsys1.solve(Xv,Yv);
+		SLUsys1.solve(gmm::sub_vector(X,SUB_CT_Vu),gmm::sub_vector(Y,SUB_CT_Vu));
+		SLUsys1.solve(gmm::sub_vector(X,SUB_CT_Vv),gmm::sub_vector(Y,SUB_CT_Vv));
+		
+		
+		//gmm::copy(gmm::sub_vector(Un0,gmm::sub_slice(0,nbdof_u/2,2)),gmm::sub_vector(Xu,gmm::sub_interval(0,nbdof_u/2)));
+	    //gmm::copy(gmm::sub_vector(Un0,gmm::sub_slice(1,nbdof_u/2,2)),gmm::sub_vector(Xv,gmm::sub_interval(0,nbdof_u/2)));
+		//gmm::iteration iter(1E-8);
+		//gmm::bicgstab(A1u,Xu,Yu,gmm::identity_matrix(),iter);				
+		//gmm::bicgstab(A1u,Xv,Yv,gmm::identity_matrix(),iter);
+		
+		
+		
+		//gmm::copy(Xu,gmm::sub_vector(X,SUB_CT_Vu));
+		//gmm::copy(Xv,gmm::sub_vector(X,SUB_CT_Vv));
+
+
+		//gmm::add(gmm::scaled(Xfull,-1.0),X);
+		//cout << gmm::vect_norminf(X) << endl;
+		
+      // gmm::iteration iter(1E-8);
       // gmm::gmres(A1,X,Y,gmm::identity_matrix(),10,iter);
-      //gmm::bicgstab(A1,X,Y,gmm::identity_matrix(),iter);
+      // gmm::bicgstab(A1,X,Y,gmm::identity_matrix(),iter);
       // ?? gmm::bicgstab(A1,X,Y,gmm::diagonal_precond<sparse_matrix>(A1),iter);
       // if (noisy) cout << "condition number: " << 1.0/rcond << endl;
 #endif
       gmm::copy(gmm::sub_vector(X, I1), USTAR);
+      //??//  gmm::copy(gmm::sub_vector(X, I3C), lambda);
+		
+		// Relation de compatibilitŽ int_domaine div(ustar)=0 //
+		scalar_type delta_in;
+		sparse_matrix Bbc_flux_in(nbdof_p, nbdof_u);
+		asm_B_boundary(Bbc_flux_in, mim, mf_u, mf_p,mf_u.linked_mesh().get_mpi_sub_region(DIRICHLET_BOUNDARY_NUM));
+		
+		gmm :: resize(lambda, nbdof_p); gmm :: clear(lambda); gmm::fill(lambda,1.0);
+		
+		gmm :: resize(tmp, nbdof_Dir_Out_Cylinder+nbdof_Dir_On_Cylinder); gmm :: clear(tmp);
+		
+		gmm :: mult(Bbc_flux_in,lambda,tmp);
+		gmm :: resize(lambda, nbdof_Dir_On_Cylinder+nbdof_Dir_Out_Cylinder); gmm :: clear(lambda); 
+		gmm :: copy(gmm::sub_vector(USTAR,I3),gmm::sub_vector(lambda,gmm::sub_interval(0,nbdof_Dir_Out_Cylinder)));
+		gmm :: copy(gmm::sub_vector(USTAR,I3C),gmm::sub_vector(lambda,gmm::sub_interval(nbdof_Dir_Out_Cylinder,nbdof_Dir_On_Cylinder)));
+		delta_in = gmm :: vect_sp(tmp,lambda);
+		
+		scalar_type delta_out;
+
+		sparse_matrix Bbc_flux_out(nbdof_p, nbdof_u);
+		asm_B_boundary(Bbc_flux_out, mim, mf_u, mf_p, mf_u.linked_mesh().get_mpi_sub_region(NONREFLECTIVE_BOUNDARY_NUM));
+		asm_B_boundary(Bbc_flux_out, mim, mf_u, mf_p, mf_u.linked_mesh().get_mpi_sub_region(NORMAL_PART_DIRICHLET_BOUNDARY_NUM));
+		//asm_B_boundary(Bbc_flux_out, mim, mf_u, mf_p,mf_u.linked_mesh().get_mpi_sub_region(ON_CYLINDER_BOUNDARY_NUM));
+		//asm_B_boundary(Bbc_flux_in, mim, mf_u, mf_p,mf_u.linked_mesh().get_mpi_sub_region(DIRICHLET_BOUNDARY_NUM));
+		gmm :: resize(lambda, nbdof_p); gmm :: clear(lambda); gmm::fill(lambda,1.0);
+		
+		gmm :: resize(tmp, nbdof_NDir+nbdof_nonref); gmm :: clear(tmp);
+		
+		gmm :: mult(Bbc_flux_out,lambda,tmp);
+		gmm :: resize(lambda, nbdof_NDir+nbdof_nonref); gmm :: clear(lambda); 
+		gmm :: copy(gmm::sub_vector(USTAR,I2),gmm::sub_vector(lambda,gmm::sub_interval(0,nbdof_NDir)));
+		gmm :: copy(gmm::sub_vector(USTAR,I4),gmm::sub_vector(lambda,gmm::sub_interval(nbdof_NDir,nbdof_nonref)));
+		delta_out = gmm :: vect_sp(tmp,lambda);
+		
+		cout<<"compatibilite" << delta_in << "  "<< delta_out << "  "<< delta_in-delta_out << endl;
+		gmm::scaled(gmm::sub_vector(USTAR,I2),delta_in/delta_out); 
+		gmm::scaled(gmm::sub_vector(USTAR,I4),delta_in/delta_out); 
+		gmm::scaled(gmm::sub_vector(USTAR,I2),delta_in/delta_out); 
+
+		if (N==3){
+			asm_B_boundary(Bbc_flux_out, mim, mf_u, mf_p,mf_u.linked_mesh().get_mpi_sub_region(NEUMANN_BOUNDARY_NUM)); 
+		}
+		
+		
+		//delta = 0.0;
+		//for (int ii = 0; ii <= nbdof_nonref; ii += 2) {
+		//   delta = delta+lambda[ii];
+		//}
+	    //delta=delta/nbdof_nonref;
+		//for (int ii = 0; ii <= nbdof_nonref; ii += 2) {
+		//	lambda[ii] = 1.0-delta;
+		//}
+		//cout << "delta" << delta << endl;
+		//gmm::add(lambda,gmm::sub_vector(X, I4));
+		//gmm::copy(gmm::sub_vector(X, I1), USTAR);
+		
     }
 
     cout << "U* - Un0 = " << gmm::vect_dist2(USTAR, Un0) << endl;
 
+
+ if (N==3){
+    plain_vector DU(mf_rhs.nb_dof() * N * N);
+    plain_vector DIV(mf_rhs.nb_dof());
+    compute_gradient(mf_u, mf_rhs, USTAR, DU);
+    for (unsigned i=0; i < mf_rhs.nb_dof(); ++i) {
+      DIV[i] = DU[i*N*N] +DU[i*N*N+4] +DU[i*N*N+8];
+    }
+    if (PARAM.int_value("VTK_EXPORT")) {
+      static int cnta=0;
+      char sa[128]; sprintf(sa, "SolIcare/DivUstar%d.vtk", cnta++);
+      getfem::vtk_export tata(sa, PARAM.int_value("VTK_EXPORT")==1);
+      tata.exporting(mf_rhs); 
+      tata.write_point_data(mf_rhs, DIV, "divergence");
+
+      char sb[128]; sprintf(sb, "SolIcare/Ustar%d.vtk", cnta++);
+      getfem::vtk_export tbtb(sb, PARAM.int_value("VTK_EXPORT")==1);
+      tbtb.exporting(mf_u); 
+      tbtb.write_point_data(mf_u, USTAR, "Ustar");
+
+    }
+
+    }
+
     //
     // Solving the second linear system
     //
     {
-      double rcond;
+      //double rcond;
       plain_vector X(sizelsystemP), Z(sizelsystemP);
       gmm::mult(B, USTAR, gmm::sub_vector(Z, IP));
 #if GETFEM_PARA_LEVEL > 1
@@ -1497,15 +1833,25 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
 
 #if  (GETFEM_PARA_LEVEL > 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER)
       MUMPS_distributed_matrix_solve(K2,X,Z);
-#elif (GETFEM_PARA_LEVEL==1 && GMM_USES_MUMPS)
+#elif (GETFEM_PARA_LEVEL==1 && defined(GMM_USES_MUMPS))
       MUMPS_solve(K2,X,Z);
       //#elif (GETFEM_PARA_LEVEL==0 && GMM_USES_MUMPS)
       //MUMPS_solve(K2,X,Z);
 #elif (GETFEM_PARA_LEVEL==0)
-      SuperLU_solve(K2,X,Z,rcond);
-      //      gmm::iteration iter(1E-8);
+      //      SuperLU_solve(K2,X,Z,rcond);
+
+      if ((time_order==1)||(t==Tinitial+dt)){ //time_order = 1 or first iterations with time_order = 2
+	SLUsys2.solve(X, Z);
+      }
+      if ((time_order==2)&&(t>=Tinitial+2*dt)){
+	//	SLUsys2.solve(X, gmm::scaled(gmm::sub_vector(Z,IP),1.5));
+	SLUsys2.solve(X, gmm::scaled(Z,1.5));
+      }
+
+
+      // gmm::iteration iter(1E-8);
       // gmm::gmres(K2,X,Z,gmm::identity_matrix(),10,iter);
-      //gmm::bicgstab(K2,X,Z,gmm::identity_matrix(),iter);
+      // gmm::bicgstab(K2,X,Z,gmm::identity_matrix(),iter);
       // ?? gmm::bicgstab(K2,X,Z,gmm::diagonal_precond<sparse_matrix>(K2),iter);
       // if (noisy) cout << "condition number: " << 1.0/rcond << endl;
 #endif
@@ -1521,25 +1867,63 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
       cout << "Mean value of phi " << (gmm::vect_sp(Phi,toto))/nbdof_p<< endl;
     */
 
-    gmm::mult(M, USTAR, USTARbis);
-    gmm::mult(gmm::transposed(B), gmm::scaled(Phi, -1.), USTARbis, USTARbis); // -B^t*Phi + USTARbis -> USTARbis
+    if ((time_order==1)||(t==Tinitial+dt)){ //time_order = 1 or first iterations with time_order = 2
+      gmm::mult(M, USTAR, USTARbis);
+    }
+    if ((time_order==2)&&(t>=Tinitial+2*dt)){
+      gmm::mult(gmm::scaled(M,1.5), USTAR, USTARbis);
+    }
+
+    gmm::mult(gmm::transposed(B), gmm::scaled(Phi, -1.0), USTARbis, USTARbis); // -B^t*Phi + USTARbis -> USTARbis
 #if GETFEM_PARA_LEVEL > 1
     MPI_SUM_VECTOR2(USTARbis);
 #endif 
 
     gmm::copy(USTARbis, gmm::sub_vector(Y, I1)); //gmm::copy(M, gmm::sub_matrix(A1, I1));
  
+  
+	  //
+	  // Solving the third linear system
+	  //
+    gmm::clear(YY);
+    gmm::mult(gmm::transposed(Bbc), Phi, YY);
+    
+#if GETFEM_PARA_LEVEL > 1
+    MPI_SUM_VECTOR2(YY);
+#endif
+    gmm::add(YY, gmm::sub_vector(Y, I1));
+ 
     {
       double rcond;
       plain_vector X(sizelsystem);
+	  //plain_vector Xu(sizelsystem/2);
+	  //plain_vector Xv(sizelsystem/2);
+	  //plain_vector Yu(sizelsystem/2);
+	  //plain_vector Yv(sizelsystem/2);
+		
 #if  (GETFEM_PARA_LEVEL > 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER)
                 MUMPS_distributed_matrix_solve(A2,X,Y);
-#elif (GETFEM_PARA_LEVEL==1 && GMM_USES_MUMPS)
+#elif (GETFEM_PARA_LEVEL==1 && defined(GMM_USES_MUMPS))
       MUMPS_solve(A2,X,Y);
-      //#elif (GETFEM_PARA_LEVEL==0 && GMM_USES_MUMPS)
+      //#elif (GETFEM_PARA_LEVEL==0 && defined(GMM_USES_MUMPS))
       //MUMPS_solve(A2,X,Y);
 #elif (GETFEM_PARA_LEVEL==0)
-      	          SuperLU_solve(A2, X, Y, rcond);
+      //SuperLU_solve(A2, X, Y, rcond);
+	  //SLUsys3.solve(X, Y);
+		
+	   
+		//gmm::copy(gmm::sub_vector(Y,SUB_CT_Vu),Yu);
+		//gmm::copy(gmm::sub_vector(Y,SUB_CT_Vv),Yv);
+		
+		//SuperLU_solve(A2u, Xu, Yu, rcond);
+		//SuperLU_solve(A2u, Xv, Yv, rcond);
+		//SLUsys3.solve(Xu, Yu);
+		//SLUsys3.solve(Xv, Yv);
+	
+		SLUsys3.solve(gmm::sub_vector(X,SUB_CT_Vu),gmm::sub_vector(Y,SUB_CT_Vu));
+		SLUsys3.solve(gmm::sub_vector(X,SUB_CT_Vv),gmm::sub_vector(Y,SUB_CT_Vv));
+		
+		
       //gmm::iteration iter(1E-8);
       //gmm::gmres(A2,X,Y,gmm::identity_matrix(),10,iter);
       //gmm::bicgstab(A2,X,Y,gmm::identity_matrix(),iter);
@@ -1547,9 +1931,38 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
       // if (noisy) cout << "condition number: " << 1.0/rcond << endl;
 #endif		  
 
-		  //gmm:: clear(Un1);
+      //gmm:: clear(Un1);
       gmm::copy(gmm::sub_vector(X, I1), Un1);
-      gmm::copy(gmm::sub_vector(X, I3C), lambda);
+		
+		
+		// Relation de compatibilitŽ int_domaine div(ustar)=0 //
+		scalar_type delta;
+		gmm :: resize(lambda,  nbdof_nonref);
+		gmm:: clear(lambda);
+		gmm::copy(gmm::sub_vector(X, I4),lambda);
+		delta = 0.0;
+		for (int ii = 0; ii <= nbdof_nonref; ii += 2) {
+			delta = delta+lambda[ii];
+		}
+	    delta=delta/nbdof_nonref;
+		for (int ii = 0; ii <= nbdof_nonref; ii += 2) {
+			lambda[ii] = 1.0-delta;
+		}
+		cout << "delta" << delta << endl;
+		gmm::add(lambda,gmm::sub_vector(X, I4));
+		gmm::copy(gmm::sub_vector(X, I1), Un1);
+		
+		
+		
+		
+      
+//??//      if ((time_order==1)||(t==Tinitial+dt)){
+//??//	gmm::add(gmm::scaled(gmm::sub_vector(X, I3C),1.0/dt), lambda);
+//??//      }
+//??//      if ((time_order==2)&&(t>=Tinitial+2*dt)){
+//??//	gmm::add(gmm::scaled(gmm::sub_vector(X, I3C),1.5/dt), lambda);
+//??//      }
+      
     }
 
 
@@ -1576,39 +1989,61 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
     pdef->validate_solution(*this, t);
     cout << "Un1 - Un0 = " << gmm::vect_dist2(Un1, Un0) << endl;
     
+    if (time_order==2){
+      gmm::copy(Un0, Unm1);
+    }
+    
     gmm::copy(Un1, Un0); gmm::copy(Pn1, Pn0);
+    
+    if (N==3){
+      plain_vector DU(mf_rhs.nb_dof() * N * N);
+      plain_vector DIV(mf_rhs.nb_dof());
+      compute_gradient(mf_u, mf_rhs, Un0, DU);
+      for (unsigned i=0; i < mf_rhs.nb_dof(); ++i) {
+	DIV[i] = DU[i*N*N] +DU[i*N*N+4] +DU[i*N*N+8];
+      }
+    if (PARAM.int_value("VTK_EXPORT")) {
+      static int cnta=0;
+      char sa[128]; sprintf(sa, "SolIcare/DivU%d.vtk", cnta++);
+      getfem::vtk_export tata(sa, PARAM.int_value("VTK_EXPORT")==1);
+      tata.exporting(mf_rhs); 
+      tata.write_point_data(mf_rhs, DIV, "divergence");
+    }
+
+    }
 
     do_export(t);
  
     //
-    // SORTIES : Coefficient de Trainé (Cd) et de Portance (Cl)
+    // SORTIES : Coefficient de TrainŽ (Cd) et de Portance (Cl)
     //
-    std::vector<scalar_type> Cd(1), Cl(1);
-    plain_vector TmpLambda(nbdof_u);    
-    gmm::copy(lambda,gmm::sub_vector(TmpLambda,SUB_CT_DIR_CYL));
-    
-    getfem :: traineePortance2D(Cd,Cl,mim,mf_u,TmpLambda,mpidircylrg);
-    
-    coeffTP << t <<" " <<  -Cd[0] << " " << -Cl[0] << endl;
-    
-    // Sauvegarde sur le disque ptPart.data
-    // time, coordonnées du point de Ref (x,y) en 2D et (x,y,z) en 3D (P,U,V) en 2D et (P,U,V,W) en 3D  au point de Ref
-    if (N==2) {
-      ptPartData <<  t <<" "<<ptRef[0]<<" "<<ptRef[1]<<" "<<  Pn1[int(ptRef[2])] << " " << 
-	Un1[int(ptRef[3])] << " " << Un1[int(ptRef[3]) + 1] << " " <<endl;
-    }
-    if (N==3) {
-      ptPartData <<  t <<" "<<ptRef[0]<<" "<<ptRef[1]<<" " << ptRef[2] <<  Pn1[int(ptRef[3])] << " " 
-		 << Un1[int(ptRef[4])] << " " << Un1[int(ptRef[4]) + 1] << " " << Un1[int(ptRef[4]) + 2] <<endl;
-    }
-    
-    
-    coeffTP.close();
-    ptPartData.close();
+ 
+	  
+	  
+	  if (N==2) {
+		  std::vector<scalar_type> Cxn(1), Cxp(1), Cyn(1), Cyp(1);
+		  getfem :: mesh_region mpioncylinder = mf_u.linked_mesh().get_mpi_sub_region(ON_CYLINDER_BOUNDARY_NUM);
+		  //Cxn[0] = 0; Cxp[0] = 0; Cyn[0] = 0; Cyp[0] = 0;
+		  getfem :: ClCd2D(Cxn,Cxp,Cyn,Cyp,mim,mf_u,mf_p,Un0,Pn1,mpioncylinder);
+		  coeffTP<<t<<" "<<nu*Cxn[0]<<" "<<Cxp[0]<<" "<<nu*Cxn[0]+Cxp[0]<<" "<<nu*Cyn[0]<<" "<<Cyp[0]<<" "<<nu*Cyn[0]+Cyp[0]<<" "<<endl;
+		  ptPartData << t << " " << Un1[ptPartU[2]] << " " << Un1[ptPartU[2] + 1] << " " << Pn1[ptPartP[2]] << endl;
+	  }
+	  
+	  if (N==3) {
+		  std::vector<scalar_type> Cxn(1), Cxp(1), Cyn(1), Cyp(1);
+		  getfem :: mesh_region mpioncylinder = mf_u.linked_mesh().get_mpi_sub_region(ON_CYLINDER_BOUNDARY_NUM);
+		  getfem :: ClCd3D(Cxn,Cxp,Cyn,Cyp,mim,mf_u,mf_p,Un0,Pn1,mpioncylinder);
+		  coeffTP <<t<<" "<<Cxn[0]<<" "<<Cxp[0]<<" "<<Cxn[0]+Cxp[0]<<" "<<Cyn[0]<<" "<<Cyp[0]<<" "<<Cyn[0]+Cyp[0]<<" " << endl;
+		  ptPartData <<t<<" "<<Un1[ptPartU[3]]<<" "<<Un1[ptPartU[3]+1]<<" " <<Un1[ptPartU[3]+2]<<" "<<Pn1[ptPartP[3]]<< endl;
+		}
+	  
   }
+	  
+  
+  coeffTP.close();
+  ptPartData.close();
 }
 
-
   void navier_stokes_problem::do_export(scalar_type t) {
     /*dal :: bit_vector  ddd = mf_p.points_index();
       cout << ddd  << endl;*/ 
@@ -1618,38 +2053,38 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
     mf_p.write_to_file("SolIcare/icare.mf_p", true);
     mim.write_to_file("SolIcare/icare.mim",true);
 
-    std::ofstream Uformat("Uformat.data");
+     std::ofstream Uformat("Uformat.data");
    
-    for(unsigned i=0;i<mf_u.nb_dof();++i){
-      base_node G = mf_u.point_of_basic_dof(i);
-      if (N==2){
-	Uformat << G[0] << "  " << G[1] << endl;
-      }
-    }
-    if (N==3){
-      for(unsigned i=0;i<mf_u.nb_dof();++i){
-	base_node G = mf_u.point_of_basic_dof(i);
-	Uformat << G[0] << "  " << G[1] << "  " << G[2] << endl;
-      }
-    }
-    Uformat.close();
+     for(unsigned i=0;i<mf_u.nb_dof();++i){
+       base_node G = mf_u.point_of_basic_dof(i);
+       if (N==2){
+ 	Uformat << G[0] << "  " << G[1] << endl;
+       }
+     }
+//     if (N==3){
+//       for(unsigned i=0;i<mf_u.nb_dof();++i){
+// 	base_node G = mf_u.point_of_basic_dof(i);
+// 	Uformat << G[0] << "  " << G[1] << "  " << G[2] << endl;
+//       }
+//     }
+     Uformat.close();
     
-    std::ofstream Pformat("Pformat.data");
+     std::ofstream Pformat("Pformat.data");
     
-    for(unsigned i=0;i<mf_p.nb_dof();++i){
-      base_node G = mf_p.point_of_basic_dof(i);
-      if (N==2){
-	Pformat << G[0] << "  " << G[1]  << endl;
-      }
+     for(unsigned i=0;i<mf_p.nb_dof();++i){
+		 base_node G = mf_p.point_of_basic_dof(i);
+       if (N==2){
+ 	Pformat << G[0] << "  " << G[1]  << endl;
+       }
     }
     
-    if (N==3){
-      for(unsigned i=0;i<mf_p.nb_dof();++i){
-	base_node G = mf_p.point_of_basic_dof(i);
-	Pformat << G[0] << "  " << G[1] << "  " << G[2]  << endl;
-      }
-    }
-    Pformat.close();
+//     if (N==3){
+//       for(unsigned i=0;i<mf_p.nb_dof();++i){
+// 	base_node G = mf_p.point_of_basic_dof(i);
+// 	Pformat << G[0] << "  " << G[1] << "  " << G[2]  << endl;
+//       }
+//     }
+     Pformat.close();
     
     
     exp.reset(new getfem::dx_export(datafilename + ".dx", false));
@@ -1662,15 +2097,15 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
     t_export = 0;
     first_export = false;
   }
-  if (t >= t_export-dt/20.0) {
+  if ((t >= t_export-dt/20.0)||(t>=99)) {
     t_export += dt_export;
     
     static int cnt = 0;
     char s[128]; sprintf(s, "SolIcare/icare.U%d", cnt++);
     gmm::vecsave(s, Un0);
-    
     exp->write_point_data(mf_u, Un0);
     exp->serie_add_object("velocity");
+    
     cout << "Saving Pressure, |p| = " << gmm::vect_norm2(Pn1) << "\n";
     exp->write_point_data(mf_p, Pn1);
     exp->serie_add_object("pressure");
@@ -1679,93 +2114,85 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
     char sp[128]; sprintf(sp, "SolIcare/icare.P%d", cntp++);
     gmm::vecsave(sp, Pn0);
     
-    if (N == 2) {
-      plain_vector DU(mf_rhs.nb_dof() * N * N);
-      plain_vector Rot(mf_rhs.nb_dof());
-      compute_gradient(mf_u, mf_rhs, Un0, DU);
-      for (unsigned i=0; i < mf_rhs.nb_dof(); ++i) {
-	Rot[i] = DU[i*N*N + 3] - DU[i*N*N + 2];
-	if ((Rot[i]*Rot[i])<=1.5){Rot[i]=0;}
-      }
-      cout << "Saving Rot, |rot| = " << gmm::vect_norm2(Rot) << "\n";
-      exp->write_point_data(mf_rhs, Rot);
-      exp->serie_add_object("rot");
-    
-   if (PARAM.int_value("VTK_EXPORT")) {
-            cout << "export to " << datafilename + "U.vtk" << "..\n";
+    if (PARAM.int_value("TIME_ORDER")==2){
+      static int cntm1 = 0;
+      char sm1[128]; sprintf(sm1, "SolIcare/icare.Um%d", cntm1++);
+      gmm::vecsave(sm1, Unm1);
+      exp->write_point_data(mf_u, Unm1);
+      exp->serie_add_object("velocity");
+    }
+
+
+    //if (N == 2) {
+    //plain_vector DU(mf_rhs.nb_dof() * N * N);
+    //plain_vector Rot(mf_rhs.nb_dof());
+    //compute_gradient(mf_u, mf_rhs, Un0, DU);
+    //for (unsigned i=0; i < mf_rhs.nb_dof(); ++i) {
+    //Rot[i] = DU[i*N*N + 3] - DU[i*N*N + 2];
+    //if ((Rot[i]*Rot[i])<=1.5){Rot[i]=0;}
+    //  }
+    //  cout << "Saving Rot, |rot| = " << gmm::vect_norm2(Rot) << "\n";
+    //  exp->write_point_data(mf_rhs, Rot);
+    //  exp->serie_add_object("rot");
+    //}
+    if (PARAM.int_value("VTK_EXPORT")) {
+      cout << "export to " << datafilename + "U.vtk" << "..\n";
       static int cnta=0;
       char sa[128]; sprintf(sa, "SolIcare/icareU%d.vtk", cnta++);
-      getfem::vtk_export tata( sa,
-                             PARAM.int_value("VTK_EXPORT")==1);
+      getfem::vtk_export tata( sa,PARAM.int_value("VTK_EXPORT")==1);
       tata.exporting(mf_u); 
       tata.write_point_data(mf_u, Un0, "vitesse");
-
+      
+      if (PARAM.int_value("TIME_ORDER")==2){
+	static int cntam1=0;
+	char sam1[128]; sprintf(sam1, "SolIcare/icareUm%d.vtk", cntam1++);
+	getfem::vtk_export tamtam( sam1,PARAM.int_value("VTK_EXPORT")==1);
+	tamtam.exporting(mf_u); 
+	tamtam.write_point_data(mf_u, Unm1, "vitesse");
+      }
+      
       static int cnte=0;
       char se[128]; sprintf(se, "SolIcare/icareP%d.vtk", cnte++);
-      getfem::vtk_export tete( se,
-                             PARAM.int_value("VTK_EXPORT")==1);
+      getfem::vtk_export tete( se,PARAM.int_value("VTK_EXPORT")==1);
       tete.exporting(mf_p);
       tete.write_point_data(mf_p, Pn0, "pression");
 
-      static int cnti=0;
-      char si[128]; sprintf(si, "SolIcare/icareRot%d.vtk", cnti++);
-      getfem::vtk_export titi( si,
-                             PARAM.int_value("VTK_EXPORT")==1);
-      titi.exporting(mf_rhs);
-      titi.write_point_data(mf_rhs, Rot, "rotationnel");
+      //static int cnti=0;
+      //char si[128]; sprintf(si, "SolIcare/icareRot%d.vtk", cnti++);
+      //getfem::vtk_export titi( si, PARAM.int_value("VTK_EXPORT")==1);
+      //titi.exporting(mf_rhs);
+      //titi.write_point_data(mf_rhs, Rot, "rotationnel");
       }
-    }
-    else if (N == 3) {
-      plain_vector DU(mf_rhs.nb_dof() * N * N);
-      plain_vector RotX(mf_rhs.nb_dof());
-      plain_vector RotY(mf_rhs.nb_dof());
-      plain_vector RotZ(mf_rhs.nb_dof());
-      compute_gradient(mf_u, mf_rhs, Un0, DU);
-      for (unsigned i=0; i < mf_rhs.nb_dof(); ++i) {
-	RotX[i] = DU[i*N*N + 7] - DU[i*N*N + 5];
-        RotY[i] = DU[i*N*N + 2] - DU[i*N*N + 6];
-        RotZ[i] = DU[i*N*N + 3] - DU[i*N*N + 1];
-      } 
-    if (PARAM.int_value("VTK_EXPORT")) {
-            cout << "export to " << datafilename + "U.vtk" << "..\n";
-      static int cntq=0;
-      char sq[128]; sprintf(sq, "SolIcare/icareU%d.vtk", cntq++);
-      getfem::vtk_export tata( sq,
-                             PARAM.int_value("VTK_EXPORT")==1);
-      tata.exporting(mf_u); 
-      tata.write_point_data(mf_u, Un0, "vitesse");
-      static int cntr=0;
-      char sr[128]; sprintf(sr, "SolIcare/icareP%d.vtk", cntr++);
-      getfem::vtk_export toto( sr,
-                             PARAM.int_value("VTK_EXPORT")==1);
-      toto.exporting(mf_p);
-      toto.write_point_data(mf_p, Pn0, "pression");
-      static int cntt=0;
-      char st[128]; sprintf(st, "SolIcare/icareRotX%d.vtk", cntt++);
-      getfem::vtk_export titi( st,
-                             PARAM.int_value("VTK_EXPORT")==1);
-      titi.exporting(mf_rhs);
-      titi.write_point_data(mf_rhs, RotX, "rotationnelX");
-      
-      static int cntu=0;
-      char su[128]; sprintf(su, "SolIcare/icareRotY%d.vtk", cntu++);
-      getfem::vtk_export tete( su,
-                             PARAM.int_value("VTK_EXPORT")==1);
-      tete.exporting(mf_rhs);
-      tete.write_point_data(mf_rhs, RotY, "rotationnelY");
-      
-      static int cntv=0;
-      char sv[128]; sprintf(sv, "SolIcare/icareRotZ%d.vtk", cntv++);
-      getfem::vtk_export tyty( sv,
-                             PARAM.int_value("VTK_EXPORT")==1);
-      tyty.exporting(mf_rhs);
-      tyty.write_point_data(mf_rhs, RotZ, "rotationnelZ");
-    }
-    }
-
-
+    
+    //else if (N == 3) {
+      // plain_vector DU(mf_rhs.nb_dof() * N * N);
+      //plain_vector RotX(mf_rhs.nb_dof());
+      //plain_vector RotY(mf_rhs.nb_dof());
+      //plain_vector RotZ(mf_rhs.nb_dof());
+      //compute_gradient(mf_u, mf_rhs, Un0, DU);
+      //for (unsigned i=0; i < mf_rhs.nb_dof(); ++i) {
+      //	RotX[i] = DU[i*N*N + 7] - DU[i*N*N + 5];
+      // RotY[i] = DU[i*N*N + 2] - DU[i*N*N + 6];
+      // RotZ[i] = DU[i*N*N + 3] - DU[i*N*N + 1];
+      //
+      //static int cntt=0;
+      //char st[128]; sprintf(st, "SolIcare/icareRotX%d.vtk", cntt++);
+      //getfem::vtk_export titi( st, PARAM.int_value("VTK_EXPORT")==1);
+      //titi.exporting(mf_rhs);
+      //titi.write_point_data(mf_rhs, RotX, "rotationnelX");
+      //static int cntu=0;
+      //char su[128]; sprintf(su, "SolIcare/icareRotY%d.vtk", cntu++);
+      //getfem::vtk_export tete( su, PARAM.int_value("VTK_EXPORT")==1);
+      //tete.exporting(mf_rhs);
+      //tete.write_point_data(mf_rhs, RotY, "rotationnelY");
+      //static int cntv=0;
+      //char sv[128]; sprintf(sv, "SolIcare/icareRotZ%d.vtk", cntv++);
+      //getfem::vtk_export tyty( sv, PARAM.int_value("VTK_EXPORT")==1);
+      //tyty.exporting(mf_rhs);
+      //tyty.write_point_data(mf_rhs, RotZ, "rotationnelZ");
+    //}
+  }
   }
-}
 
 /**************************************************************************/
 /*  main program.                                                         */
diff --git a/contrib/icare/icare.h b/contrib/icare/icare.h
index 3e87cd1..074c9ad 100644
--- a/contrib/icare/icare.h
+++ b/contrib/icare/icare.h
@@ -1,33 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Michel Fournié, Julien Pommier,                
-//                         Yves Renard, Nicolas Renon, Nicolas Roux.    
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Michel Fournié, Julien Pommier,
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 #ifndef NAVIER_STOKES_H_
 #define NAVIER_STOKES_H_
 
@@ -37,8 +37,34 @@
 #include "getfem/getfem_modeling.h"
 #include "gmm/gmm.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 namespace getfem {
 
+
+	/*
+	 * Adams-Bashfort - For explict treatment
+	 */
+	
+	template<typename VEC1, typename VEC>
+	void asm_NS_uuT_Explicite(const VEC1 &V, const mesh_im &mim,
+					const mesh_fem &mf, const VEC &U0,
+					const mesh_region &rg = mesh_region::all_convexes()) {
+		generic_assembly assem;    
+		assem.set("u=data(#1); "
+				  "t = comp(vBase(#1).vBase(#1).vGrad(#1));"
+				  "V(#1)+=u(l).u(i).t(i,k,:,j,l,j,k)"
+				   );
+		assem.push_mi(mim);
+		assem.push_mf(mf);
+		assem.push_data(U0);
+		assem.push_vec(V);
+		assem.assembly(rg);
+	}
+	
+	
+	
   /*
    * div(uuT) term. 
    */
@@ -60,82 +86,117 @@ namespace getfem {
     assem.assembly(rg);
   }
 
- template<typename VEC, typename VECTOR>
- void traineePortance2D(VEC &Cd, VEC &Cl, const mesh_im &mim,
-			const mesh_fem &mf, const VECTOR &lambda,
-			const mesh_region &rg) {
-
-   generic_assembly assem;
-   assem.set("l=data$1(#1); V$1()+=comp(vBase(#1).Normal())(i,1,1).l(i);V$2()+=comp(vBase(#1).Normal())(i,1,2).l(i);");
-   
-   assem.push_mi(mim);
-   
-   assem.push_mf(mf);
-   assem.push_data(lambda);
-
-   assem.push_vec(Cd);
-   assem.push_vec(Cl);
-
-   assem.assembly(rg); //region = bord du cylindre
-						 
- }
+  /*
+   * Boundary term for the pressure 
+   */
+  
+  template<typename MAT>
+  void asm_B_boundary(const MAT &M, const mesh_im &mim,
+		      const mesh_fem &mfu, const mesh_fem &mfp,
+		      const mesh_region &rg) {
+    generic_assembly assem;    
+    assem.set("M$1(#2, #1)+=-comp(Base(#2).vBase(#1).Normal())(:,:,i,i);");
+    assem.push_mi(mim);
+    assem.push_mf(mfu);
+    assem.push_mf(mfp);
+    assem.push_mat(const_cast<MAT&>(M));
+    assem.assembly(rg);
+  }
 
 
 
+ //template<typename VEC, typename VECTOR>
+// void traineePortance2D(VEC &Cd, VEC &Cl, const mesh_im &mim,
+//			const mesh_fem &mf, const VECTOR &lambda,
+//			const mesh_region &rg) {
+//
+//   generic_assembly assem;
+//   assem.set("l=data$1(#1); V$1()+=comp(vBase(#1).Normal())(i,1,1).l(i);V$2()+=comp(vBase(#1).Normal())(i,1,2).l(i);");
+//   
+//   assem.push_mi(mim);
+//   
+//   assem.push_mf(mf);
+//   assem.push_data(lambda);
+//
+//   assem.push_vec(Cd);
+//   assem.push_vec(Cl);
+//
+//   assem.assembly(rg); //region = bord du cylindre
+//						 
+// }
+
+	
+	
+	template<typename VEC, typename VECTOR>
+	void ClCd2D(VEC &Cxn, VEC &Cxp,VEC &Cyn, VEC &Cyp, const mesh_im &mim,
+						   const mesh_fem &mf1,const mesh_fem &mf2, const VECTOR &U0,const VECTOR &P0, const mesh_region &rg) {
+		
+		generic_assembly assem;
+		
+		assem.set("u=data$1(#1); p=data$2(#2);"
+				  "t1=comp(vGrad(#1).Normal());"
+				  "V$1()+=2*t1(i,1,1,1).u(i) + t1(i,1,2,2).u(i) + t1(i,2,1,2).u(i);"
+				  "t2=comp(Base(#2).Normal());"
+				  "V$2()+=-1*t2(i,1).p(i);"
+				  "t3=comp(vGrad(#1).Normal());"
+				  "V$3()+=2*t3(i,2,2,2).u(i) + t3(i,1,2,1).u(i) + t3(i,2,1,1).u(i);"
+				  "t4=comp(Base(#2).Normal());"
+				  "V$4()+=-1*t4(i,2).p(i);");
+		
+		
+		//assem.set("nuDxU=data$1(#1); nuDyU=data$2(#1); nuDxV=data$3(#1); nuDyV=data$4(#1); p=data$5(#2);"
+		//		  "t1=comp(vBase(#1).Normal());"
+		//		  "V$1()+=2*t1(i,1,1).nuDxU(i) + t1(i,1,2).nuDyU(i) + t1(i,1,2).nuDxV(i);"
+		//		  "t2=comp(Base(#2).Normal());"
+		//		  "V$2()+=-1*t2(i,1).p(i);"
+		//		  "t3=comp(vBase(#1).Normal());"
+		//		  "V$3()+=2*t3(i,1,2).nuDyV(i) + t3(i,1,1).nuDyU(i) + t3(i,1,1).nuDxV(i);"
+		//		  "t4=comp(Base(#2).Normal());"
+		//		  "V$4()+=-1*t4(i,2).p(i);");
+		
+		
+		assem.push_mi(mim);
+		assem.push_mf(mf1);
+		assem.push_mf(mf2);
+
+		assem.push_data(U0);
+		assem.push_data(P0);
+		
+		assem.push_vec(Cxn); 
+		assem.push_vec(Cxp);
+		assem.push_vec(Cyn); 
+		assem.push_vec(Cyp);
+		
+		assem.assembly(rg); //region = bord du cylindre
+		
+	}
+		
 
  template<typename VEC, typename VECTOR>
- void traineePortance3D(VEC &Cxn, VEC &Cxp,VEC &Cyn, VEC &Cyp, const mesh_im &mim,
-			const mesh_fem &mf1, const mesh_fem &mf2,
-			const VECTOR &nuDxU, const VECTOR &nuDyU, const VECTOR &nuDzU,
-			const VECTOR &nuDxV, const VECTOR &nuDyV, const VECTOR &nuDzV, 
-			const VECTOR &nuDxW, const VECTOR &nuDyW, const VECTOR &nuDzW, 
-			const VECTOR &PP, const mesh_region &rg) {
+ void ClCd3D(VEC &Cxn, VEC &Cxp,VEC &Cyn, VEC &Cyp, const mesh_im &mim,
+			const mesh_fem &mf1, const mesh_fem &mf2,const VECTOR &U0, 
+			const VECTOR &P0, const mesh_region &rg) {
 
    generic_assembly assem;
 
-   assem.set("nuDxU=data$1(#1); nuDyU=data$2(#1); nuDzU=data$3(#1); nuDxV=data$4(#1); nuDyU=data$5(#1); nuDzU=data$6(#1); nuDxW=data$7(#1); nuDyW=data$8(#1);  nuDzW=data$9(#1);    p=data$10(#2);"
-	     "t1=comp(vBase(#1).Normal());"
-             "V$1()+=2*t1(i,1,1).nuDxU(i) + t1(i,2,2).nuDxU(i) + t1(i,1,2).nuDxV(i) + t1(i,1,3).nuDxW(i) + t1(i,3,3).nuDxU(i);"
-	     "t2=comp(vBase(#2).Normal());"
-             "V$2()+=t2(i,1,1).p(i);"
-	     "t3=comp(vBase(#1).Normal());"
-             "V$3()+=2*t3(i,2,2).nuDxV(i) + t3(i,2,1).nuDxU(i) + t3(i,1,1).nuDxV(i) + t3(i,2,3).nuDxW(i) + t3(i,3,3).nuDxV(i);"
-	     "t4=comp(vBase(#2).Normal());"
-             "V$4()+=t4(i,1,2).p(i);");
-
-
-
-
-   assem.set("nuDxU=data$1(#1); nuDyU=data$2(#1); nuDxV=data$3(#1); nuDyV=data$4(#1); p=data$5(#2);"
-	     "t1=comp(vBase(#1).Normal());"
-             "V$1()+=2*t1(i,1,1).nuDxU(i) + t1(i,1,2).nuDyU(i) + t1(i,2,2).nuDxV(i);"
-	     "t2=comp(vBase(#2).Normal());"
-             "V$2()+=-1*t2(i,1,1).p(i);"
-	     "t3=comp(vBase(#1).Normal());"
-             "V$3()+=2*t3(i,2,2).nuDyV(i) + t3(i,1,1).nuDyU(i) + t3(i,2,1).nuDxV(i);"
-	     "t4=comp(vBase(#2).Normal());"
-             "V$4()+=-1*t4(i,1,2).p(i);");
-
-
+	assem.set("u=data$1(#1); p=data$2(#2);"
+			  "t1=comp(vGrad(#1).Normal());"
+			  "V$1()+=2*t1(i,1,1,1).u(i) + t1(i,1,2,2).u(i) + t1(i,2,1,2).u(i) + t1(i,3,1,3).u(i) + t1(i,1,3,3).u(i);"
+			  "t2=comp(Base(#2).Normal());"
+			  "V$2()+=-1*t2(i,1).p(i);"
+			  "t3=comp(vGrad(#1).Normal());"
+			  "V$3()+=2*t3(i,2,2,2).u(i) + t3(i,1,2,1).u(i) + t3(i,2,1,1).u(i) + t3(i,3,2,3).u(i) + t3(i,2,3,3).u(i);"
+			  "t4=comp(Base(#2).Normal());"
+			  "V$4()+=-1*t4(i,2).p(i);");
+	 
    assem.push_mi(mim);
 
    assem.push_mf(mf1);
    assem.push_mf(mf2);
 
-   assem.push_data(nuDxU);   
-   assem.push_data(nuDyU);
-   assem.push_data(nuDzU);
-
-   assem.push_data(nuDxV);   
-   assem.push_data(nuDyV);
-   assem.push_data(nuDzV);
-
-   assem.push_data(nuDxW);   
-   assem.push_data(nuDyW);
-   assem.push_data(nuDzW);
+   assem.push_data(U0);   
+   assem.push_data(P0);
    
-   assem.push_data(PP);
-
    assem.push_vec(Cxn); 
    assem.push_vec(Cxp);
    assem.push_vec(Cyn); 
diff --git a/contrib/icare/icare.param b/contrib/icare/icare.param
index 9423d16..b1a25bf 100644
--- a/contrib/icare/icare.param
+++ b/contrib/icare/icare.param
@@ -2,29 +2,54 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % parameters for program stokes                                           %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-N = 3;
+N = 2;
 QUAD = 0;
-NU = 1/80;       % Viscosity coefficient. (NU = 1 / Re)
+NU = 1/80;        % test 1/100 sinon, Viscosity coefficient. (NU = 1 / Re)
 ALPHA = 0.0;   	  % rate of rotation of the cylinder
+                  % The RADIUS must be less than 1 
+
+PRINT_PT_PART = 1; % 0 = no output values in the point define in BOXX
+				 % 1 = output
+
+CLCD = 1; % Computation of the Lift and Drag Coefficients
 
-BOXXmin = 4.5;
-BOXXmax = 5.5;
-BOXYmin = -0.5;
-BOXYmax =  0.5;
+POSTPROCESS = 0;
+IstartPostprocess = 0;
+PasPostprocess = 1;
+NbPostprocess = 1;
 
 
-%INIT_FILE_U="icare.U100000000";
-%INIT_FILE_P="icare.P100000000";
+if (N==2)
+  BOXXmin = 9.9;
+  BOXXmax = 10.1;
+  BOXYmin = -0.1;
+  BOXYmax =  0.1;
+end;
+  
+if (N==3)
+  BOXXmin = 4.5;
+  BOXXmax = 5.5;
+  BOXYmin = -0.5;
+  BOXYmax =  0.5;
+  BOXZmin = -0.1;
+  BOXZmax = 0.1;
+end;
+
+%INIT_FILE_Um1="SolIcare/icare.1Um1";
+%INIT_FILE_U="icare.U500";
+%INIT_FILE_P="icare.P500";
 
 
 Tinitial = 0;
 DT = 0.01;        % Time step
-%T = 5.1;         % Final time
-T=100.01;
+T = 250;         % Final time
 
 NOISY = 0;
 
+TIME_ORDER = 1 % 1 = Euler of order 1
+               % 2 = Euler of order 2
+
+
 OPTION = 4;  % 0 = Stokes avec schema de splitting 1
              % 1 = Navier Stokes avec schema de splitting 1
 	     % 2 = Navier Stokes with energy conserving midpoint scheme
@@ -35,14 +60,26 @@ PROBLEM = 3; % 1 = Reference solution for Stokes
              % 2 = Reference solution for Navier Stokes
 	     % 3 = flow around a cylinder (centered at 0)
 
-NON_REFLECTIVE_BC = 0;   % 0 : basic condition
+NON_REFLECTIVE_BC = 0;   % 0 : basic condition 
+                               % if (N==2) : optimal condition, all
+                               % terms are considered 
+                               % if (N==3) : some terms are neglect
+                               % => bad choice
 			 % 1 : improved condition
+                               % interpolation of the hessian is
+                               % made ... so it is not optimal 
+                               % if (N==2) : the basic condition is
+                               % better
+                               % if (N==3) : all terms are considered
+
 
 if (N == 2 && ~QUAD)
 % MESHNAME = 'maillage003.mesh'; % name of the mesh file
 %MESHNAME = 'gmshv2:pouet5_v2.msh';
-%MESHNAME = 'navier_stokes_cylinder1.mesh'; % name of the mesh file
- MESHNAME = 'gmshv2:triangular.msh';
+%MESHNAME = 'MESHES/navier_stokes_cylinder2.mesh'; % name of the mesh file
+%MESHNAME = 'gmshv2:triangular.msh';
+%MESHNAME = 'gmshv2:yannick.msh';
+MESHNAME = 'gmshv2:MESHES/mejdi.msh';
 %MESHNAME = 'gmshv2:Rkd2.msh';
 %MESHNAME = 'maillage02.mesh';
 %MESHNAME = 'structured:GT="GT_PK(2,1)";SIZES=[1,1];NOISED=0;NSUBDIV=[30,30]';
@@ -59,29 +96,44 @@ end
 
 if (N == 2 && QUAD)
 %  MESHNAME = 'structured:GT="GT_QK(2,1)";SIZES=[1,1];NOISED=0;NSUBDIV=[10,10]';
-  MESHNAME = 'gmshv2:rectangularQ.msh';
+%  MESHNAME = 'gmshv2:rectangularRitesh2D.msh';
+%  MESHNAME = 'gmshv2:rectangular.msh';
+%  MESHNAME = 'gmshv2:mesh100_2D.msh';
+%  MESHNAME = 'gmshv2:cyl2DsmScaling.msh';
+
+MESHNAME = 'gmshv2:cyl2D_400k-ddl.msh';
+%MESHNAME = 'gmshv2:cyl2D_1,7M-ddl.msh';
+
+%   MESHNAME = 'gmshv2:cyl2D.msh';
   FEM_TYPE = 'FEM_QK(2,2)';  % QK method
   FEM_TYPE_P = 'FEM_QK(2,1)';
   % DATA_FEM_TYPE = 'FEM_QK(2,1)';
   INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(2,10)'; 
+  %INTEGRATION = 'IM_QUAD(7)'; 
 end
 
 if (N == 3 && ~QUAD)
   %MESHNAME = 'structured:GT="GT_PK(3,1)";SIZES=[1,1,1];NSUBDIV=[5,5,5]';
-  MESHNAME = 'gmshv2:tralala_3D.msh';
+%  MESHNAME = 'gmshv2:tralala_3D.msh';
+   MESHNAME = 'gmshv2:cyl3D.msh';
   FEM_TYPE = 'FEM_PK(3,2)';  % PK method
   FEM_TYPE_P = 'FEM_PK(3,1)';
   % DATA_FEM_TYPE = 'FEM_PK(3,1)'; 
-  INTEGRATION = 'IM_TETRAHEDRON(6)'; 
+  INTEGRATION = 'IM_TETRAHEDRON(8)'; 
 end
 
 if (N == 3 && QUAD)
-  MESHNAME = 'gmshv2:rectangularRitesh3D.msh';
+%  MESHNAME = 'gmshv2:rectangularRitesh3D.msh';
+  MESHNAME = 'gmshv2:cylinder3D.msh';
+%   MESHNAME = 'gmshv2:cyl3D.msh';
+%   MESHNAME = 'gmshv2:cyl3D-20.msh';
+%   MESHNAME = 'gmshv2:cyl3D-40.msh';
+%   MESHNAME = 'gmshv2:cyl3D-60.msh';
   FEM_TYPE = 'FEM_QK(3,2)';  % QK method
   FEM_TYPE_P = 'FEM_QK(3,1)';
   % DATA_FEM_TYPE = 'FEM_QK(3,1)';
-  %INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(3,10)'; 
-  INTEGRATION = 'IM_HEXAHEDRON(5)'; 
+  INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(3,10)'; 
+  %INTEGRATION = 'IM_HEXAHEDRON(9)'; 
 end
 
 
@@ -92,4 +144,6 @@ RESIDUAL = 1E-9;     	% residual for conjugate gradient.
 ROOTFILENAME = 'icare';     % Root of data files.
 DX_EXPORT = 1; % export solution to a .dx file ?
 VTK_EXPORT = 1; 
-DT_EXPORT = 250*DT;
+DT_EXPORT = 100*DT;
+DT_MUMPS_ANALYSE=50;
+BORNE=1;
diff --git a/contrib/icare/icare.pl b/contrib/icare/icare.pl
index 85b8597..055c404 100755
--- a/contrib/icare/icare.pl
+++ b/contrib/icare/icare.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/inter_element_test/Makefile.in b/contrib/inter_element_test/Makefile.in
index a3f7176..d521538 100644
--- a/contrib/inter_element_test/Makefile.in
+++ b/contrib/inter_element_test/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -102,6 +102,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -120,6 +121,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -136,6 +138,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -200,6 +203,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -235,7 +239,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -305,7 +308,7 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-inter_element$(EXEEXT): $(inter_element_OBJECTS) $(inter_element_DEPENDENCIES) 
+inter_element$(EXEEXT): $(inter_element_OBJECTS) $(inter_element_DEPENDENCIES) $(EXTRA_inter_element_DEPENDENCIES) 
 	@rm -f inter_element$(EXEEXT)
 	$(CXXLINK) $(inter_element_OBJECTS) $(inter_element_LDADD) $(LIBS)
 
@@ -477,14 +480,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -534,10 +538,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/inter_element_test/inter_element.cc b/contrib/inter_element_test/inter_element.cc
index c9247e4..c2075a9 100644
--- a/contrib/inter_element_test/inter_element.cc
+++ b/contrib/inter_element_test/inter_element.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/getfem_modeling.h"
 
 #include "getfem/getfem_modeling.h"
@@ -26,6 +26,9 @@
 #include "getfem/getfem_export.h"
 #include "gmm/gmm_superlu_interface.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
 using bgeot::scalar_type; /* = double */
diff --git a/contrib/inter_element_test/inter_element.pl b/contrib/inter_element_test/inter_element.pl
index 85b8597..055c404 100755
--- a/contrib/inter_element_test/inter_element.pl
+++ b/contrib/inter_element_test/inter_element.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/mixed_dynamic_friction/Makefile.in b/contrib/mixed_dynamic_friction/Makefile.in
index bf729a0..211e34f 100644
--- a/contrib/mixed_dynamic_friction/Makefile.in
+++ b/contrib/mixed_dynamic_friction/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -112,6 +112,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -130,6 +131,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -146,6 +148,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -210,6 +213,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -245,7 +249,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -321,10 +324,10 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-mixed_dynamic_friction$(EXEEXT): $(mixed_dynamic_friction_OBJECTS) $(mixed_dynamic_friction_DEPENDENCIES) 
+mixed_dynamic_friction$(EXEEXT): $(mixed_dynamic_friction_OBJECTS) $(mixed_dynamic_friction_DEPENDENCIES) $(EXTRA_mixed_dynamic_friction_DEPENDENCIES) 
 	@rm -f mixed_dynamic_friction$(EXEEXT)
 	$(CXXLINK) $(mixed_dynamic_friction_OBJECTS) $(mixed_dynamic_friction_LDADD) $(LIBS)
-mixed_scalar_hyperbolic$(EXEEXT): $(mixed_scalar_hyperbolic_OBJECTS) $(mixed_scalar_hyperbolic_DEPENDENCIES) 
+mixed_scalar_hyperbolic$(EXEEXT): $(mixed_scalar_hyperbolic_OBJECTS) $(mixed_scalar_hyperbolic_DEPENDENCIES) $(EXTRA_mixed_scalar_hyperbolic_DEPENDENCIES) 
 	@rm -f mixed_scalar_hyperbolic$(EXEEXT)
 	$(CXXLINK) $(mixed_scalar_hyperbolic_OBJECTS) $(mixed_scalar_hyperbolic_LDADD) $(LIBS)
 
@@ -497,14 +500,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -554,10 +558,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/mixed_dynamic_friction/mixed_dynamic_friction.cc b/contrib/mixed_dynamic_friction/mixed_dynamic_friction.cc
index 621ed85..3296930 100644
--- a/contrib/mixed_dynamic_friction/mixed_dynamic_friction.cc
+++ b/contrib/mixed_dynamic_friction/mixed_dynamic_friction.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    Dynamic friction in linear elasticity with a mixed formulation in
@@ -34,6 +34,10 @@
 #include "gmm/gmm.h"
 #include <fstream>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
@@ -526,7 +530,7 @@ void friction_problem::solve(void) {
     DYNAMIC.set_DFV(DFV);
     
     iter.init();
-    gmm::default_newton_line_search ls;
+    getfem::default_newton_line_search ls;
     getfem::standard_solve(MS, DYNAMIC, iter,
 			   getfem::default_linear_solver(DYNAMIC), ls);
     
diff --git a/contrib/mixed_dynamic_friction/mixed_dynamic_friction.pl b/contrib/mixed_dynamic_friction/mixed_dynamic_friction.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/mixed_dynamic_friction/mixed_dynamic_friction.pl
+++ b/contrib/mixed_dynamic_friction/mixed_dynamic_friction.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/mixed_dynamic_friction/mixed_scalar_hyperbolic.cc b/contrib/mixed_dynamic_friction/mixed_scalar_hyperbolic.cc
index cb869a0..d894af7 100644
--- a/contrib/mixed_dynamic_friction/mixed_scalar_hyperbolic.cc
+++ b/contrib/mixed_dynamic_friction/mixed_scalar_hyperbolic.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
  * Dynamic friction in linear elasticity.
@@ -37,6 +37,10 @@
 #include "gmm/gmm.h"
 #include <fstream>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
@@ -462,7 +466,7 @@ void hyperbolic_problem::solve(void) {
     DYNAMIC.set_DFV(DFV);
     
     iter.init();
-    gmm::default_newton_line_search ls;
+    getfem::default_newton_line_search ls;
     getfem::standard_solve(MS, DYNAMIC, iter,
 			   getfem::default_linear_solver(DYNAMIC), ls);
     
diff --git a/contrib/mixed_elastostatic/Makefile.in b/contrib/mixed_elastostatic/Makefile.in
index 2fd45aa..a637ec8 100644
--- a/contrib/mixed_elastostatic/Makefile.in
+++ b/contrib/mixed_elastostatic/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -102,6 +102,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -120,6 +121,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -136,6 +138,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -200,6 +203,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -235,7 +239,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -308,7 +311,7 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-mixed_elastostatic$(EXEEXT): $(mixed_elastostatic_OBJECTS) $(mixed_elastostatic_DEPENDENCIES) 
+mixed_elastostatic$(EXEEXT): $(mixed_elastostatic_OBJECTS) $(mixed_elastostatic_DEPENDENCIES) $(EXTRA_mixed_elastostatic_DEPENDENCIES) 
 	@rm -f mixed_elastostatic$(EXEEXT)
 	$(CXXLINK) $(mixed_elastostatic_OBJECTS) $(mixed_elastostatic_LDADD) $(LIBS)
 
@@ -480,14 +483,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -537,10 +541,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/mixed_elastostatic/mixed_elastostatic.cc b/contrib/mixed_elastostatic/mixed_elastostatic.cc
index d5c8fa5..e743f1d 100644
--- a/contrib/mixed_elastostatic/mixed_elastostatic.cc
+++ b/contrib/mixed_elastostatic/mixed_elastostatic.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file mixed_elastostatic.cc
@@ -41,6 +41,10 @@
 #include "getfem/getfem_interpolation.h"
 #include "getfem/getfem_import.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
diff --git a/contrib/mixed_elastostatic/mixed_elastostatic.pl b/contrib/mixed_elastostatic/mixed_elastostatic.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/mixed_elastostatic/mixed_elastostatic.pl
+++ b/contrib/mixed_elastostatic/mixed_elastostatic.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/static_contact_gears/Makefile.in b/contrib/static_contact_gears/Makefile.in
index f07b4e1..4560dac 100644
--- a/contrib/static_contact_gears/Makefile.in
+++ b/contrib/static_contact_gears/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -113,6 +113,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -131,6 +132,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -147,6 +149,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -211,6 +214,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -246,7 +250,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -316,10 +319,10 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-static_contact_gears$(EXEEXT): $(static_contact_gears_OBJECTS) $(static_contact_gears_DEPENDENCIES) 
+static_contact_gears$(EXEEXT): $(static_contact_gears_OBJECTS) $(static_contact_gears_DEPENDENCIES) $(EXTRA_static_contact_gears_DEPENDENCIES) 
 	@rm -f static_contact_gears$(EXEEXT)
 	$(CXXLINK) $(static_contact_gears_OBJECTS) $(static_contact_gears_LDADD) $(LIBS)
-static_contact_gears_u1_u2$(EXEEXT): $(static_contact_gears_u1_u2_OBJECTS) $(static_contact_gears_u1_u2_DEPENDENCIES) 
+static_contact_gears_u1_u2$(EXEEXT): $(static_contact_gears_u1_u2_OBJECTS) $(static_contact_gears_u1_u2_DEPENDENCIES) $(EXTRA_static_contact_gears_u1_u2_DEPENDENCIES) 
 	@rm -f static_contact_gears_u1_u2$(EXEEXT)
 	$(CXXLINK) $(static_contact_gears_u1_u2_OBJECTS) $(static_contact_gears_u1_u2_LDADD) $(LIBS)
 
@@ -492,14 +495,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -549,10 +553,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/static_contact_gears/static_contact_gears.cc b/contrib/static_contact_gears/static_contact_gears.cc
index 9ecdb7f..e301216 100644
--- a/contrib/static_contact_gears/static_contact_gears.cc
+++ b/contrib/static_contact_gears/static_contact_gears.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Konstantinos Poulios.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Konstantinos Poulios.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_model_solvers.h"
 #include "getfem/getfem_import.h"   /* import functions (load a mesh from file)    */
@@ -25,6 +25,9 @@
 #include "getfem/getfem_Coulomb_friction.h"
 #include "gmm/gmm.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::dim_type;
 using bgeot::size_type;   /* = unsigned long */
@@ -222,12 +225,12 @@ bool elastostatic_contact_problem::solve() {
     (dataname_r, mu * (3*lambda + 2*mu) / (lambda + mu) );  // r ~= Young modulus
   std::string multname_n, multname_t;
   if (frictionless) {
-    getfem::add_nonmatching_meshes_contact_brick
+    getfem::add_nodal_contact_between_nonmatching_meshes_brick
       (md, mim, varname_u, multname_n, dataname_r, cb_rgs1, cb_rgs2);
   } else {
     std::string dataname_frict_coeff="friction_coefficient";
     md.add_initialized_scalar_data(dataname_frict_coeff, frict_coeff);
-    getfem::add_nonmatching_meshes_contact_with_friction_brick
+    getfem::add_nodal_contact_between_nonmatching_meshes_brick
       (md, mim, mim, varname_u, varname_u, multname_n, multname_t,
        dataname_r, dataname_frict_coeff, cb_rgs1, cb_rgs2);
   }
@@ -254,7 +257,7 @@ bool elastostatic_contact_problem::solve() {
 
   gmm::iteration iter(residual, 1, 40000);
 
-  gmm::default_newton_line_search ls;
+  getfem::default_newton_line_search ls;
   getfem::standard_solve(md, iter, getfem::rselect_linear_solver(md,"superlu"), ls);
 
   if (!iter.converged()) return false; // Solution has not converged
diff --git a/contrib/static_contact_gears/static_contact_gears_u1_u2.cc b/contrib/static_contact_gears/static_contact_gears_u1_u2.cc
index e882270..99aad9c 100644
--- a/contrib/static_contact_gears/static_contact_gears_u1_u2.cc
+++ b/contrib/static_contact_gears/static_contact_gears_u1_u2.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Konstantinos Poulios.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Konstantinos Poulios.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_model_solvers.h"
 #include "getfem/getfem_import.h"   /* import functions (load a mesh from file)    */
@@ -25,6 +25,10 @@
 #include "getfem/getfem_Coulomb_friction.h"
 #include "gmm/gmm.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::dim_type;
 using bgeot::size_type;   /* = unsigned long */
@@ -233,13 +237,13 @@ bool elastostatic_contact_problem::solve() {
     (dataname_r, mu * (3*lambda + 2*mu) / (lambda + mu) );  // r ~= Young modulus
   std::string multname_n, multname_t;
   if (frictionless) {
-    getfem::add_nonmatching_meshes_contact_brick
+    getfem::add_nodal_contact_between_nonmatching_meshes_brick
       (md, mim1, mim2, varname_u1, varname_u2, multname_n, dataname_r,
        cb_rgs1, cb_rgs2);
   } else {
     std::string dataname_frict_coeff="friction_coefficient";
     md.add_initialized_scalar_data(dataname_frict_coeff, frict_coeff);
-    getfem::add_nonmatching_meshes_contact_with_friction_brick
+    getfem::add_nodal_contact_between_nonmatching_meshes_brick
       (md, mim1, mim2, varname_u1, varname_u2, multname_n, multname_t,
        dataname_r, dataname_frict_coeff, cb_rgs1, cb_rgs2);
   }
@@ -267,7 +271,7 @@ bool elastostatic_contact_problem::solve() {
 
   gmm::iteration iter(residual, 1, 40000);
 
-  gmm::default_newton_line_search ls;
+  getfem::default_newton_line_search ls;
   getfem::standard_solve(md, iter, getfem::rselect_linear_solver(md,"superlu"), ls);
 
   if (!iter.converged()) return false; // Solution has not converged
diff --git a/contrib/static_friction/Makefile.in b/contrib/static_friction/Makefile.in
index 67840aa..1764924 100644
--- a/contrib/static_friction/Makefile.in
+++ b/contrib/static_friction/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -100,6 +100,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -118,6 +119,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -134,6 +136,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -198,6 +201,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -233,7 +237,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -306,7 +309,7 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-static_friction$(EXEEXT): $(static_friction_OBJECTS) $(static_friction_DEPENDENCIES) 
+static_friction$(EXEEXT): $(static_friction_OBJECTS) $(static_friction_DEPENDENCIES) $(EXTRA_static_friction_DEPENDENCIES) 
 	@rm -f static_friction$(EXEEXT)
 	$(CXXLINK) $(static_friction_OBJECTS) $(static_friction_LDADD) $(LIBS)
 
@@ -478,14 +481,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -535,10 +539,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/static_friction/static_friction.cc b/contrib/static_friction/static_friction.cc
index 54657f2..b59c968 100644
--- a/contrib/static_friction/static_friction.cc
+++ b/contrib/static_friction/static_friction.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
  * Solve the Signorini problem with static Coulomb friction.
@@ -36,6 +36,10 @@
 #include "gmm/gmm.h"
 #include <fstream>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
@@ -841,7 +845,7 @@ void friction_problem::solve(void) {
       if (Dirichlet == 3) gmm::fill(MS.state(), scalar_type(-1));
       gmm::iteration iter(residual, int(noisy), 40000);
       
-      gmm::default_newton_line_search ls;
+      getfem::default_newton_line_search ls;
       getfem::model_problem<MODEL_STATE> mdpb(MS,FRICTION,ls);
       
       int l = gmm::get_warning_level();
diff --git a/contrib/static_friction/static_friction.pl b/contrib/static_friction/static_friction.pl
index fe40872..d66ab32 100755
--- a/contrib/static_friction/static_friction.pl
+++ b/contrib/static_friction/static_friction.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/xfem_contact/Makefile.am b/contrib/xfem_contact/Makefile.am
index 9a248b3..f76cd88 100644
--- a/contrib/xfem_contact/Makefile.am
+++ b/contrib/xfem_contact/Makefile.am
@@ -1,11 +1,18 @@
-# SUBDIRS = 
+if METIS
+optprogs = xfem_dirichlet
+else
+optprogs = 
+endif
 
-check_PROGRAMS = xfem_contact xfem_dirichlet
+check_PROGRAMS = xfem_contact xfem_stokes $(optprogs)
 
 CLEANFILES = 
 
 xfem_contact_SOURCES = xfem_contact.cc
+if METIS
 xfem_dirichlet_SOURCES = xfem_dirichlet.cc
+endif
+xfem_stokes_SOURCES = xfem_stokes.cc
 
 SUPLDFLAGS = @SUPLDFLAGS@
 INCLUDES = -I$(top_srcdir)/src -I../../src
@@ -16,7 +23,8 @@ TESTS = $(top_srcdir)/contrib/xfem_contact/xfem_contact.pl
 EXTRA_DIST = \
 	xfem_contact.pl                  \
 	xfem_contact.param               \
-	xfem_dirichlet.param
+	xfem_dirichlet.param             \
+	xfem_stokes.param
 
 
 TESTS_ENVIRONMENT = perl
diff --git a/contrib/xfem_contact/Makefile.in b/contrib/xfem_contact/Makefile.in
index 3e7f8c7..67e111d 100644
--- a/contrib/xfem_contact/Makefile.in
+++ b/contrib/xfem_contact/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -14,8 +14,6 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
-
-# SUBDIRS = 
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
@@ -35,7 +33,8 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-check_PROGRAMS = xfem_contact$(EXEEXT) xfem_dirichlet$(EXEEXT)
+check_PROGRAMS = xfem_contact$(EXEEXT) xfem_stokes$(EXEEXT) \
+	$(am__EXEEXT_1)
 subdir = contrib/xfem_contact
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -52,17 +51,24 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
+ at METIS_TRUE@am__EXEEXT_1 = xfem_dirichlet$(EXEEXT)
 am_xfem_contact_OBJECTS = xfem_contact.$(OBJEXT)
 xfem_contact_OBJECTS = $(am_xfem_contact_OBJECTS)
 xfem_contact_LDADD = $(LDADD)
 am__DEPENDENCIES_1 =
 xfem_contact_DEPENDENCIES = ../../src/libgetfem.la \
 	$(am__DEPENDENCIES_1)
-am_xfem_dirichlet_OBJECTS = xfem_dirichlet.$(OBJEXT)
+am__xfem_dirichlet_SOURCES_DIST = xfem_dirichlet.cc
+ at METIS_TRUE@am_xfem_dirichlet_OBJECTS = xfem_dirichlet.$(OBJEXT)
 xfem_dirichlet_OBJECTS = $(am_xfem_dirichlet_OBJECTS)
 xfem_dirichlet_LDADD = $(LDADD)
 xfem_dirichlet_DEPENDENCIES = ../../src/libgetfem.la \
 	$(am__DEPENDENCIES_1)
+am_xfem_stokes_OBJECTS = xfem_stokes.$(OBJEXT)
+xfem_stokes_OBJECTS = $(am_xfem_stokes_OBJECTS)
+xfem_stokes_LDADD = $(LDADD)
+xfem_stokes_DEPENDENCIES = ../../src/libgetfem.la \
+	$(am__DEPENDENCIES_1)
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
@@ -76,8 +82,10 @@ CXXLD = $(CXX)
 CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(xfem_contact_SOURCES) $(xfem_dirichlet_SOURCES)
-DIST_SOURCES = $(xfem_contact_SOURCES) $(xfem_dirichlet_SOURCES)
+SOURCES = $(xfem_contact_SOURCES) $(xfem_dirichlet_SOURCES) \
+	$(xfem_stokes_SOURCES)
+DIST_SOURCES = $(xfem_contact_SOURCES) \
+	$(am__xfem_dirichlet_SOURCES_DIST) $(xfem_stokes_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 am__tty_colors = \
@@ -107,6 +115,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -125,6 +134,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -141,6 +151,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -205,6 +216,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -240,7 +252,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -260,16 +271,20 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+ at METIS_FALSE@optprogs = 
+ at METIS_TRUE@optprogs = xfem_dirichlet
 CLEANFILES = 
 xfem_contact_SOURCES = xfem_contact.cc
-xfem_dirichlet_SOURCES = xfem_dirichlet.cc
+ at METIS_TRUE@xfem_dirichlet_SOURCES = xfem_dirichlet.cc
+xfem_stokes_SOURCES = xfem_stokes.cc
 INCLUDES = -I$(top_srcdir)/src -I../../src
 LDADD = ../../src/libgetfem.la -lm $(SUPLDFLAGS)
 TESTS = $(top_srcdir)/contrib/xfem_contact/xfem_contact.pl
 EXTRA_DIST = \
 	xfem_contact.pl                  \
 	xfem_contact.param               \
-	xfem_dirichlet.param
+	xfem_dirichlet.param             \
+	xfem_stokes.param
 
 TESTS_ENVIRONMENT = perl
 all: all-am
@@ -315,12 +330,15 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-xfem_contact$(EXEEXT): $(xfem_contact_OBJECTS) $(xfem_contact_DEPENDENCIES) 
+xfem_contact$(EXEEXT): $(xfem_contact_OBJECTS) $(xfem_contact_DEPENDENCIES) $(EXTRA_xfem_contact_DEPENDENCIES) 
 	@rm -f xfem_contact$(EXEEXT)
 	$(CXXLINK) $(xfem_contact_OBJECTS) $(xfem_contact_LDADD) $(LIBS)
-xfem_dirichlet$(EXEEXT): $(xfem_dirichlet_OBJECTS) $(xfem_dirichlet_DEPENDENCIES) 
+xfem_dirichlet$(EXEEXT): $(xfem_dirichlet_OBJECTS) $(xfem_dirichlet_DEPENDENCIES) $(EXTRA_xfem_dirichlet_DEPENDENCIES) 
 	@rm -f xfem_dirichlet$(EXEEXT)
 	$(CXXLINK) $(xfem_dirichlet_OBJECTS) $(xfem_dirichlet_LDADD) $(LIBS)
+xfem_stokes$(EXEEXT): $(xfem_stokes_OBJECTS) $(xfem_stokes_DEPENDENCIES) $(EXTRA_xfem_stokes_DEPENDENCIES) 
+	@rm -f xfem_stokes$(EXEEXT)
+	$(CXXLINK) $(xfem_stokes_OBJECTS) $(xfem_stokes_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -330,6 +348,7 @@ distclean-compile:
 
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xfem_contact.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xfem_dirichlet.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xfem_stokes.Po at am__quote@
 
 .cc.o:
 @am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -491,14 +510,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -548,10 +568,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/xfem_contact/xfem_contact.cc b/contrib/xfem_contact/xfem_contact.cc
index 90cb9af..68ff901 100644
--- a/contrib/xfem_contact/xfem_contact.cc
+++ b/contrib/xfem_contact/xfem_contact.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
  * Goal : scalar Signorini problem with Xfem.
@@ -36,6 +36,10 @@
 #include "getfem/getfem_import.h"
 #include "gmm/gmm.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_vector;
diff --git a/contrib/xfem_contact/xfem_contact.pl b/contrib/xfem_contact/xfem_contact.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/xfem_contact/xfem_contact.pl
+++ b/contrib/xfem_contact/xfem_contact.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/xfem_contact/xfem_dirichlet.cc b/contrib/xfem_contact/xfem_dirichlet.cc
index 88e63b3..7a8d8b0 100644
--- a/contrib/xfem_contact/xfem_dirichlet.cc
+++ b/contrib/xfem_contact/xfem_dirichlet.cc
@@ -1,25 +1,25 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-
-/**
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+/*
  * Goal : scalar Dirichlet problem with Xfem.
  *
  * Research program.
@@ -36,6 +36,24 @@
 #include "getfem/getfem_import.h"
 #include "getfem/getfem_inter_element.h"
 #include "gmm/gmm.h"
+#include "getfem/bgeot_mesh_structure.h"
+#include "getfem/getfem_config.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
+extern "C" void METIS_PartGraphKway(int *, int *, int *, int *, int *, int *,
+			    int *, int *, int *, int *, int *);
+extern "C" void METIS_PartGraphRecursive(int *, int *, int *, int *, int *, int *,
+			    int *, int *, int *, int *, int *);
+
+
+extern "C" void METIS_mCPartGraphKway(int *, int *, int *, int *, int *, int *, int *,
+				      int *, int *, float *, int *, int *, int *);
+extern "C" void METIS_mCPartGraphRecursive(int *, int *, int *, int *, int *, int *, int *,
+				      int *, int *, int *, int *, int *);
+
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
@@ -62,30 +80,54 @@ typedef gmm::row_matrix<sparse_vector> sparse_row_matrix;
 double Radius;
 int u_version;
 double u_alpha = 1.5;
-double u_B = 20;
-double u_n = 7.0;
+double u_B = 20.0;
+double u_n = 8.0;
 double dtheta = M_PI/36;
+double sol5_a = 0.075, sol5_b = 30.0;
 
 double u_exact(const base_node &p) {
   double R = Radius, r=gmm::vect_norm2(p), T=atan2(p[1], p[0])+dtheta;
   switch (u_version) {
-    case 0: {
-      double sum = std::accumulate(p.begin(), p.end(), double(0));
-      
-      return 5.0 * sin(sum) * (r*r - Radius*Radius);
-    }
-    case 1: {
-      double A=u_alpha, n=u_n;
-      return (R*R - r*r *(1+A*(1.0 + sin(n*T))));
-    }
-    case 2: {
-      double A=u_alpha, n=u_n, B=u_B;
-      return (R*R - r*r *(1+A*(1.0 + sin(n*T)))) * cos(B*r);      
-    }
-    case 3: {
-      double A=u_alpha, n=u_n;
-      return 5*(R*R*R*R - r*r*r*r*(1+A*(1.0 + sin(n*T))));      
-    }
+  case 0: {
+    double sum = std::accumulate(p.begin(), p.end(), double(0));
+    
+    return 5.0 * sin(sum) * (r*r - Radius*Radius);
+  }
+  case 1: {
+    double A=u_alpha, n=u_n;
+    return (R*R - r*r *(1+A*(1.0 + sin(n*T))));
+  }
+  case 2: {
+    double A=u_alpha, n=u_n, B=u_B;
+    return (R*R - r*r *(1+A*(1.0 + sin(n*T)))) * cos(B*r);      
+  }
+  case 3: {
+    double A=u_alpha, n=u_n;
+    return 5*(R*R*R*R - r*r*r*r*(1+A*(1.0 + sin(n*T))));      
+  }
+  case 4:{
+    return 5.0 * (r*r*r - Radius*Radius*Radius);
+  }
+  case 5:{
+    double a = sol5_a, b = sol5_b;
+    T = atan2(p[1], p[0]);
+    return 5.0 * r*r*(r - Radius*(1 - a*sin(b*T)));
+  }
+  case 6:{
+    double sum = std::accumulate(p.begin(), p.end(), double(0));
+    
+    return 5.0 * sin(sum) * (r*r*r - Radius*Radius*Radius);
+  }
+  case 7:{
+    double sum = std::accumulate(p.begin(), p.end(), double(0));
+    
+    return 5.0 * sin(sum) * (r*r*r*r - Radius*Radius*Radius*Radius);
+  }
+  case 8:{
+    double rho=gmm::sqrt(p[0]*p[0]+ p[1]*p[1]+ p[2]*p[2]); 
+    
+    return 5.0 * ( Radius*Radius* Radius-rho*rho*rho);
+  }
   }
   GMM_ASSERT1(false, "Invalid exact solution");
 }
@@ -123,9 +165,33 @@ double g_exact(const base_node &p) {
   case 3: {
     double A=u_alpha, T=atan2(p[1], p[0])+dtheta, n=u_n;
     return -5*r*r*r*sqrt(16.0 + 32.0*A*A + 32.0*A*sin(n*T) + 32.0*A
-			+ 32.0*A*A*sin(n*T) - 16*gmm::sqr(A*cos(n*T))
-		       + gmm::sqr(A*cos(n*T)*n));
+			 + 32.0*A*A*sin(n*T) - 16*gmm::sqr(A*cos(n*T))
+			 + gmm::sqr(A*cos(n*T)*n));
   }   
+  case 4: {
+    r=gmm::vect_norm2(p);
+    return 15*r*r;
+  }
+  case 5:{
+    double a = sol5_a, b = sol5_b;
+    double T = atan2(p[1], p[0]);
+    return 5.0*r*sqrt( gmm::sqr(3*r-2*Radius*(1-a*sin(b*T)))
+		       + gmm::sqr(R*cos(b*T)*b*a));
+  }  
+  case 6: {
+    double sum=std::accumulate(p.begin(), p.end(), double(0)), T=atan2(p[1], p[0]);
+    return 5*cos(sum)*(cos(T)+sin(T))*(r*r*r-Radius*Radius*Radius)+15*r*r*sin(sum);
+    //  return 5.0*sqrt( gmm::sqr(5*cos(sum)*(cos(T)+sin(T))*(r*r*r-Radius*Radius*Radius)+15*r*r*sin(sum))
+    //	     + gmm::sqr(5*cos(sum)*(cos(T)-sin(T))*(r*r*r-Radius*Radius*Radius))) ;
+  }  
+  case 7: {
+    double sum=std::accumulate(p.begin(), p.end(), double(0)), T=atan2(p[1], p[0]);
+    return 5*cos(sum)*(cos(T)+sin(T))*(r*r*r*r-Radius*Radius*Radius*Radius)+20*r*r*r*sin(sum);
+  }  
+  case 8: {
+    double rho=gmm::sqrt(p[0]*p[0]+ p[1]*p[1]+ p[2]*p[2]); 
+    return -15*rho*rho; ;
+  }
   }
   return 0;
 }
@@ -156,6 +222,27 @@ double rhs(const base_node &p) {
     double A=u_alpha, T=atan2(p[1], p[0])+dtheta, n=u_n;
     return -5*r*r*(-16.0-16.0*A*sin(n*T)-16.0*A+A*sin(n*T)*n*n);
   }
+  case 4: {
+    r=gmm::vect_norm2(p);
+    return -45.0*r;
+  }
+  case 5:{
+    double a = sol5_a, b = sol5_b;
+    double T = atan2(p[1], p[0]);
+    return 5.0*(4.0*Radius-9.0*r-4.0*Radius*sin(b*T)*a+Radius*sin(b*T)*b*b*a);
+  }  
+  case 6: {
+    double sum = std::accumulate(p.begin(), p.end(), double(0));
+    return 5.0 * (2*sin(sum)*(r*r*r-Radius*Radius*Radius)-6*r*sum*cos(sum)-9*r*sin(sum));
+  }
+  case 7: {
+    double sum = std::accumulate(p.begin(), p.end(), double(0));
+    return 5.0 * (2*sin(sum)*(r*r*r*r-Radius*Radius*Radius*Radius)-8*r*r*sum*cos(sum)-16*r*r*sin(sum));
+  }
+  case 8: {
+    double rho=gmm::sqrt(p[0]*p[0]+ p[1]*p[1]+ p[2]*p[2]); 
+    return 60*rho;
+  }
   }
   return 0;
 }
@@ -163,7 +250,7 @@ double rhs(const base_node &p) {
 double ls_value(const base_node &p) {
   double R = Radius, r=gmm::vect_norm2(p);
   switch (u_version) {
-  case 0: return gmm::vect_norm2_sqr(p) - R*R;
+  case 0: case 4: case 6: case 7:  return gmm::vect_norm2_sqr(p) - R*R;
   case 1: case 2: {
     double A=u_alpha, T=atan2(p[1],p[0])+dtheta, n=u_n;
     return -(R*R - r*r*(1+A*(1.0 + sin(n*T)))) / 15.0;
@@ -172,6 +259,18 @@ double ls_value(const base_node &p) {
     double A=u_alpha, T=atan2(p[1], p[0])+dtheta, n=u_n;
     return -(R*R*R*R - r*r*r*r*(1+A*(1.0 + sin(n*T)))) / 4.0;      
   } 
+  case 5:{
+    double a = sol5_a, b = sol5_b;
+    double T = atan2(p[1], p[0]);
+    return r*r*(r - Radius*(1 - a*sin(b*T))) / (Radius*sqrt(Radius+Radius*Radius*b*b*a*a));
+  } 
+  case 8:{
+    double rho=gmm::sqrt(p[0]*p[0]+ p[1]*p[1]+ p[2]*p[2]); 
+    return (rho*rho*rho - Radius*Radius*Radius);
+  }
+    //  case 6:{
+    //return r*r*r-R*R*R;
+    //}
   }
   return 0;
 }
@@ -283,6 +382,150 @@ void asm_stabilization_symm_term
   assem.assembly(rg);
 }
 
+
+
+/**************************************************************/
+/* assembling patch vector                                     */
+/**************************************************************/
+
+template<class VEC>
+void asm_patch_vector     
+(const VEC &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf_mult,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+  VEC &RM = const_cast<VEC &>(RM_);
+    
+  getfem::generic_assembly assem("t=comp(Base(#1)); V(#1)+= t(:);");
+  assem.push_mi(mim);
+  assem.push_mf(mf_mult);
+  assem.push_vec(RM);
+  // assem.set("RM(#1)+=comp(Base(#1))()");
+  assem.assembly(rg);
+
+}
+/**************************************************************/
+/* assembling patch matrix                                     */
+/**************************************************************/
+
+template<class MAT>
+void asm_stabilization_patch_term
+(const MAT &RM_, const getfem::mesh &mesh, const getfem::mesh_im &mimbounddown, const getfem::mesh_fem &mf_mult,
+ scalar_type ratio_size, scalar_type h ){
+  MAT &M1 = const_cast<MAT &>(RM_);
+  
+  /****************************************************/
+  /*        " select patch "                          */
+  /****************************************************/
+  
+  
+  
+  // assemby patch vector
+  const getfem::mesh_fem &mf_P0 = getfem::classical_mesh_fem(mesh, 0);
+  size_type nbe = mf_P0.nb_dof();
+  int ne = 0;
+  double size_of_crack = 0;
+  plain_vector Patch_Vector(nbe);
+  asm_patch_vector(Patch_Vector, mimbounddown, mf_P0);
+  // cout<<"patch_vectot="<< Patch_Vector<<endl;
+  dal::bit_vector  Patch_element_list, Patch_dof_ind;
+  for (size_type i = 0; i < nbe; ++i) {
+    if (Patch_Vector[i] != scalar_type(0)){
+      size_type cv = mf_P0.first_convex_of_basic_dof(i);
+      Patch_element_list.add(cv);
+      Patch_dof_ind.add(i);
+      ne++;
+      size_of_crack=size_of_crack + Patch_Vector[i];
+    }
+  }
+  // cout<<"Path_element_list="<< Patch_element_list <<endl;
+  //cout<<"Path_dof_ind="<< Patch_dof_ind <<endl;
+  cout<<"number of element in patch="<< ne <<endl;
+  std::vector<int> xadj(ne+1), adjncy, numelt(ne), part(ne);
+  std::vector<int> vwgt(ne), indelt(mesh.convex_index().last_true()+1);
+  std::vector<double> vwgtt(ne);
+  int j = 0, k = 0;
+  for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+    numelt[j] = int(ic);
+    indelt[ic] = j;
+  }
+  j = 0;
+  for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+    size_type ind_dof_patch = mf_P0.ind_basic_dof_of_element(ic)[0];
+    vwgt[indelt[ic]] = int(1000000*Patch_Vector[ind_dof_patch]);
+    vwgtt[indelt[ic]] = Patch_Vector[ind_dof_patch];
+    xadj[j] = k;
+    bgeot::mesh_structure::ind_set s;
+    mesh.neighbours_of_convex(ic, s);
+    for (bgeot::mesh_structure::ind_set::iterator it = s.begin(); it != s.end(); ++it) {
+      if (Patch_element_list.is_in(*it)) { adjncy.push_back(indelt[*it]); ++k; }
+    }
+  }
+  
+  xadj[j] = k;
+  std::vector<int> adjwgt(k);
+  // cout<<"xadj="<<xadj<<endl;
+  //cout<<"adjncy="<<adjncy<<endl;
+  //cout<<"vwgt="<<vwgt<<endl;
+  
+  cout<<"ratio size beween mesh and coarse mesh= "<< ratio_size <<endl;
+  
+  int wgtflag = 2, edgecut, nparts=int(size_of_crack/(ratio_size*h)), numflag = 0;
+      // float ubvec[1] = {1.03f};
+  int  options[5] = {0,0,0,0,0};
+  //METIS_mCPartGraphKway(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+  //		    &numflag, &nparts, &(ubvec[0]),  options, &edgecut, &(part[0]));
+  // METIS_mCPartGraphRecursive(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+  //			 &numflag, &nparts,  options, &edgecut, &(part[0]));
+  //METIS_PartGraphKway(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+  //	  &numflag, &nparts, options, &edgecut, &(part[0]));
+  METIS_PartGraphRecursive(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+			   &numflag, &nparts, options, &edgecut, &(part[0]));
+  
+  //cout<<"size_of_mesh="<<h<<endl;
+  //cout<<"size_of_crack="<< size_of_crack <<endl;
+  cout<<"nb_partition="<<nparts<<endl;
+  // cout<<"partition="<<part<<endl;
+  //cout<<"edgecut="<<edgecut<<endl;
+  
+
+  /**************************************************************/
+  /*        Assembly matrices                                   */
+  /**************************************************************/
+  
+  
+  std::vector<double> size_patch(nparts);
+  size_type nb_dof_mult=mf_mult.nb_dof();
+  sparse_matrix M0(nb_dof_mult, nbe);
+  getfem::asm_mass_matrix(M0, mimbounddown, mf_mult, mf_P0);
+  
+  for (size_type i=0; i < size_type(ne); i++) {
+    size_patch[part[i]]= size_patch[part[i]] + vwgtt[i];	  
+  }
+  
+  //cout<<"size_patch="<<size_patch<<endl;
+  
+  sparse_row_matrix MAT_aux(nparts, nb_dof_mult);
+  for (size_type r=0; r < nbe; r++) {
+    size_type cv = mf_P0.first_convex_of_basic_dof(r);
+    gmm::add(gmm::mat_col(M0, r), gmm::mat_row(MAT_aux, part[indelt[cv]]));
+  }
+  
+  sparse_row_matrix MAT_proj(nbe, nb_dof_mult);
+  
+  for (size_type r=0; r < nbe; r++) {
+    size_type cv = mf_P0.first_convex_of_basic_dof(r);
+    int p=part[indelt[cv]];
+    gmm::copy(gmm::scaled(gmm::mat_row(MAT_aux, p), 1./size_patch[p]),
+	      gmm::mat_row(MAT_proj, r));
+  }
+  
+  gmm::mult(M0, MAT_proj, M1);
+  
+}
+
+
+
+
+
 /*
  * Elementary extrapolation matrices
  */
@@ -351,12 +594,6 @@ void compute_mass_matrix_extra_element
   // cout << "M = " << M << endl;
 }
 
-
-
-
-
-
-
 /* 
  * Main program 
  */
@@ -373,19 +610,30 @@ int main(int argc, char *argv[]) {
   
   // Load the mesh
   getfem::mesh mesh;
-  std::string MESH_FILE = PARAM.string_value("MESH_FILE", "Mesh file");
-  getfem::import_mesh(MESH_FILE, mesh);
-  unsigned N = mesh.dim();
-  
+  // std::string MESH_FILE = PARAM.string_value("MESH_FILE", "Mesh file");
+  //getfem::import_mesh(MESH_FILE, mesh);
+  //unsigned N = mesh.dim();
+
+  std::string MESH_TYPE = PARAM.string_value("MESH_TYPE","Mesh type");
+  bgeot::pgeometric_trans pgt = 
+    bgeot::geometric_trans_descriptor(MESH_TYPE);
+  size_type N = pgt->dim();
+  std::vector<size_type> nsubdiv(N);
+  std::fill(nsubdiv.begin(),nsubdiv.end(),
+	    PARAM.int_value("NX", "Nomber of space steps "));
+  getfem::regular_unit_mesh(mesh, nsubdiv, pgt,
+			    PARAM.int_value("MESH_NOISED") != 0);
+  //  base_small_vector tt(N); tt[1] = -0.5;
+  //  mesh.translation(tt); 
   // center the mesh in (0, 0).
   base_node Pmin(N), Pmax(N);
   mesh.bounding_box(Pmin, Pmax);
   Pmin += Pmax; Pmin /= -2.0;
   // Pmin[N-1] = -Pmax[N-1];
   mesh.translation(Pmin);
-  scalar_type h = mesh.minimal_convex_radius_estimate();
+  cout<<"Creating mesh done"<<endl; 
+  scalar_type h = 2. * mesh.minimal_convex_radius_estimate();
   cout << "h = " << h << endl;
-  
   // Level set definition
   unsigned lsdeg = unsigned(PARAM.int_value("LEVEL_SET_DEGREE", "level set degree"));
   bool simplify_level_set = 
@@ -398,8 +646,13 @@ int main(int argc, char *argv[]) {
   for (unsigned i = 0; i < lsmf.nb_dof(); ++i) {
     lsup.values()[i] = lsdown.values()[i] = ls.values()[i]
       = ls_value(lsmf.point_of_basic_dof(i));
-    lsdown.values(1)[i] = lsmf.point_of_basic_dof(i)[1];
-    lsup.values(1)[i] = -lsmf.point_of_basic_dof(i)[1];
+    if(N==2){
+      lsdown.values(1)[i] = lsmf.point_of_basic_dof(i)[1];
+      lsup.values(1)[i] = -lsmf.point_of_basic_dof(i)[1];
+    }else{
+      lsdown.values(2)[i] = lsmf.point_of_basic_dof(i)[2];
+      lsup.values(2)[i] = -lsmf.point_of_basic_dof(i)[2];
+    }
   }
   
   if (simplify_level_set) {
@@ -491,20 +744,37 @@ int main(int argc, char *argv[]) {
   getfem::mesh_fem mf_mult(mesh);
   std::string FEMM = PARAM.string_value("FEM_MULT", "fem for multipliers");
   mf_mult.set_finite_element(mesh.convex_index(),
-			     getfem::fem_descriptor(FEMM));
+				 getfem::fem_descriptor(FEMM));
   // getfem::partial_mesh_fem mf_mult(pre_mf_mult);
+  cout << "NX="                      << PARAM.int_value("NX", "Nomber of space steps ")     << "\n"; 
+  cout << "MESH_TYPE="               << MESH_TYPE                 << "\n";
+  cout << "FEM_TYPE="                << FEM                       << "\n";
+  cout << "FEM_MULT="                << FEMM                      << "\n";
+
+  int stabilized_dirichlet =
+    int(PARAM.int_value("STABILIZED_DIRICHLET", "Stabilized version of "
+			"Dirichlet condition or not"));
+  cout << "stabilized_dirichlet ="<< stabilized_dirichlet << "\n";
 
   // Range_basis call
   cols.clear();
-  sparse_matrix BRBB(nb_dof, mf_mult.nb_dof());
-  getfem::asm_mass_matrix(BRBB, mimbounddown, mf, mf_mult);
+  sparse_matrix BRBB;
+  if (stabilized_dirichlet) {
+    gmm::resize(BRBB, mf_mult.nb_dof(), mf_mult.nb_dof());
+    getfem::asm_mass_matrix(BRBB, mimbounddown, mf_mult, mf_mult);
+    // cout << BRBB << endl;
+  } else {
+    gmm::resize(BRBB, nb_dof, mf_mult.nb_dof());
+    getfem::asm_mass_matrix(BRBB, mimbounddown, mf, mf_mult);
+  }
   cout << "Selecting dofs for the multiplier" << endl;
-  cout << "nb_dof_mult = " << mf_mult.nb_dof() << endl;
-  gmm::range_basis(BRBB, cols);
+  // cout << "nb_dof = " << mf.nb_dof() << endl;
+  //cout << "nb_dof_mult = " << mf_mult.nb_dof() << endl;
+  gmm::range_basis(BRBB, cols, 1e-12);
   mf_mult.reduce_to_basic_dof(cols);
   // penser à l'optimisation sur les mailles ...
-
-
+  
+  
   // kept_dof_mult = select_dofs_from_im(pre_mf_mult, mimbounddown, N-1);
   // mf_mult.adapt(kept_dof_mult, rejected_elt);
   size_type nb_dof_mult = mf_mult.nb_dof();
@@ -513,27 +783,187 @@ int main(int argc, char *argv[]) {
   // Mass matrix on the boundary
   sparse_matrix B2(mf_rhs.nb_dof(), nb_dof);
   getfem::asm_mass_matrix(B2, mimboundup, mf_rhs, mf);
-
   sparse_matrix B(nb_dof_mult, nb_dof);
   getfem::asm_mass_matrix(B, mimbounddown, mf_mult, mf);
 
-  int stabilized_dirichlet =
-    int(PARAM.int_value("STABILIZED_DIRICHLET", "Stabilized version of "
-			"Dirichlet condition or not"));
   scalar_type dir_gamma0(0);
   sparse_matrix MA(nb_dof_mult, nb_dof_mult), KA(nb_dof, nb_dof);
   sparse_matrix BA(nb_dof_mult, nb_dof);
+  sparse_row_matrix M1(nb_dof_mult, nb_dof_mult);
   if (stabilized_dirichlet > 0) {
-
+    
     sparse_row_matrix E1(nb_dof, nb_dof);
+    
+    if (stabilized_dirichlet == 3) {
+      
+      std::string datafilename;
+      datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
+      mesh.write_to_file(datafilename + ".mesh");
+      cout<<"save mesh done"<<endl;
+      scalar_type tpa = PARAM.real_value("TPA", "Type of patch assembly");
+
+      if(tpa){
+	
+	scalar_type ratio_size = PARAM.real_value("RATIO_GR_MESH", "ratio size between mesh and patches");
+	//       cout<<"ratio size beween mesh and coarse mesh= "<< ratio_size <<endl;
+	
+	asm_stabilization_patch_term(M1, mesh, mimbounddown, mf_mult, ratio_size, h);
+       
+	//	cout<<'patch matrix='<<M1<<endl; 
+      }else{
+      
+      
+      /****************************************************/
+      /*        " select patch "                          */
+      /****************************************************/
+      
+
+
+      // assemby patch vector
+      size_type nbe = mf_P0.nb_dof();
+      int ne = 0;
+      double size_of_crack = 0;
+      plain_vector Patch_Vector(nbe);
+      asm_patch_vector(Patch_Vector, mimbounddown, mf_P0);
+      // cout<<"patch_vectot="<< Patch_Vector<<endl;
+      dal::bit_vector  Patch_element_list, Patch_dof_ind;
+      for (size_type i = 0; i < nbe; ++i) {
+	if (Patch_Vector[i] != scalar_type(0)){
+	  size_type cv = mf_P0.first_convex_of_basic_dof(i);
+	  Patch_element_list.add(cv);
+	  Patch_dof_ind.add(i);
+	  ne++;
+	  size_of_crack=size_of_crack + Patch_Vector[i];
+	}
+      }
+      // cout<<"Path_element_list="<< Patch_element_list <<endl;
+      //cout<<"Path_dof_ind="<< Patch_dof_ind <<endl;
+      cout<<"number of element in patch="<< ne <<endl;
+      std::vector<int> xadj(ne+1), adjncy, numelt(ne), part(ne);
+      std::vector<int> vwgt(ne), indelt(mesh.convex_index().last_true()+1);
+      std::vector<double> vwgtt(ne);
+      int j = 0, k = 0;
+      for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+	numelt[j] = int(ic);
+	indelt[ic] = j;
+      }
+      j = 0;
+      for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+	size_type ind_dof_patch = mf_P0.ind_basic_dof_of_element(ic)[0];
+	vwgt[indelt[ic]] = int(1000000*Patch_Vector[ind_dof_patch]);
+	vwgtt[indelt[ic]] = Patch_Vector[ind_dof_patch];
+	xadj[j] = k;
+	bgeot::mesh_structure::ind_set s;
+	mesh.neighbours_of_convex(ic, s);
+	for (bgeot::mesh_structure::ind_set::iterator it = s.begin(); it != s.end(); ++it) {
+	  if (Patch_element_list.is_in(*it)) { adjncy.push_back(indelt[*it]); ++k; }
+	}
+      }
+
+      xadj[j] = k;
+      std::vector<int> adjwgt(k);
+      // cout<<"xadj="<<xadj<<endl;
+      //cout<<"adjncy="<<adjncy<<endl;
+      //cout<<"vwgt="<<vwgt<<endl;
+
+      scalar_type ratio_size = PARAM.real_value("RATIO_GR_MESH", "ratio size between mesh and patches");
+      cout<<"ratio size beween mesh and coarse mesh= "<< ratio_size <<endl;
+
+      int wgtflag = 2, edgecut, nparts=int(size_of_crack/(ratio_size*h)), numflag = 0;
+
+      // float ubvec[1] = {1.03f};
+      int  options[5] = {0,0,0,0,0};
+      //METIS_mCPartGraphKway(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+      //		    &numflag, &nparts, &(ubvec[0]),  options, &edgecut, &(part[0]));
+      // METIS_mCPartGraphRecursive(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+      //			 &numflag, &nparts,  options, &edgecut, &(part[0]));
+      //METIS_PartGraphKway(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+      //	  &numflag, &nparts, options, &edgecut, &(part[0]));
+      METIS_PartGraphRecursive(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+			       &numflag, &nparts, options, &edgecut, &(part[0]));
+      
+      //cout<<"size_of_mesh="<<h<<endl;
+      //cout<<"size_of_crack="<< size_of_crack <<endl;
+      cout<<"nb_partition="<<nparts<<endl;
+      // cout<<"partition="<<part<<endl;
+      //cout<<"edgecut="<<edgecut<<endl;
+      
+
+      /**************************************************************/
+      /*        Assembly matrices                                   */
+      /**************************************************************/
+
+
+      std::vector<double> size_patch(nparts);
+
+      sparse_matrix M0(nb_dof_mult, nbe);
+      getfem::asm_mass_matrix(M0, mimbounddown, mf_mult, mf_P0);
+
+      for (size_type i=0; i < size_type(ne); i++) {
+	size_patch[part[i]]= size_patch[part[i]] + vwgtt[i];	  
+      }
+
+      //cout<<"size_patch="<<size_patch<<endl;
+
+      sparse_row_matrix MAT_aux(nparts, nb_dof_mult);
+      for (size_type r=0; r < nbe; r++) {
+	size_type cv = mf_P0.first_convex_of_basic_dof(r);
+	gmm::add(gmm::mat_col(M0, r), gmm::mat_row(MAT_aux, part[indelt[cv]]));
+      }
+      
+      sparse_row_matrix MAT_proj(nbe, nb_dof_mult);
+
+      for (size_type r=0; r < nbe; r++) {
+	size_type cv = mf_P0.first_convex_of_basic_dof(r);
+	int p=part[indelt[cv]];
+	gmm::copy(gmm::scaled(gmm::mat_row(MAT_aux, p), 1./size_patch[p]),
+		  gmm::mat_row(MAT_proj, r));
+      }
+     
+      gmm::mult(M0, MAT_proj, M1);
+
+
+      }
+
+
+  
+//       sparse_matrix MAT_proj(nbe, nb_dof_mult);
+
+//       for (int r=0; r<nbe; r++){
+// 	for (int jj=0; jj<nb_dof_mult; jj++){
+// 	  size_type cv = mf_P0.first_convex_of_basic_dof(r);
+// 	  int p=part[indelt[cv]];
+// 	  for (int i=0; i<ne; i++){
+// 	    if ( part[i]== p) {
+// 	      size_type ind_dof_patch= mf_P0.ind_basic_dof_of_element(numelt[i])[0];
+// 	      MAT_proj(r,jj) += M0(jj,ind_dof_patch);
+// 	    }
+// 	  }
+//  	  MAT_proj(r,jj) /=  size_patch[p];
+// 	}
+//       }
+//       gmm::mult(M0, MAT_proj, M1);
+
+      // cout<<"M0="<<M0<<endl;
+      //cout<<"MAT_proj="<<MAT_proj<<endl;
+      // cout<<"M1="<<M1<<endl;
+
+    }//end stabilized_dirichlet == 3
+    
+    
+
+
 
     if (stabilized_dirichlet == 2) {
+      
+      /***************************************************************/ 
+      /*           Computation of the extrapolation operator.        */
+      /***************************************************************/
 
-      // Computation of the extrapolation operator
       scalar_type min_ratio =
 	PARAM.real_value("MINIMAL_ELT_RATIO",
 			 "Threshold ratio for the fully stab Dirichlet");
-
+      
       cout << "Computation of the extrapolation operator" << endl;
       dal::bit_vector elt_black_list, dof_black_list;
       size_type nbe = mf_P0.nb_dof();
@@ -619,13 +1049,21 @@ int main(int argc, char *argv[]) {
     dir_gamma0 = PARAM.real_value("DIRICHLET_GAMMA0",
 				  "Stabilization parameter for "
 				  "Dirichlet condition");
-    getfem::asm_mass_matrix(MA, mimbounddown, mf_mult);
-    asm_stabilization_mixed_term(BA, mimbounddown, mf, mf_mult, lsdown);
-    asm_stabilization_symm_term(KA, mimbounddown, mf, lsdown);
-    gmm::scale(MA, -dir_gamma0 * h);
-    gmm::scale(BA, -dir_gamma0 * h);
-    gmm::scale(KA, -dir_gamma0 * h);
-
+   
+    if (stabilized_dirichlet == 3) {
+      getfem::asm_mass_matrix(MA, mimbounddown, mf_mult);
+      gmm::scale(M1, dir_gamma0 );
+      gmm::scale(MA, -dir_gamma0 );
+      gmm::add(M1, MA);
+
+    }else{
+      getfem::asm_mass_matrix(MA, mimbounddown, mf_mult);
+      asm_stabilization_mixed_term(BA, mimbounddown, mf, mf_mult, lsdown);
+      asm_stabilization_symm_term(KA, mimbounddown, mf, lsdown);
+      gmm::scale(MA, -dir_gamma0 * h);
+      gmm::scale(BA, -dir_gamma0 * h);
+      gmm::scale(KA, -dir_gamma0 * h);
+    }
     if (stabilized_dirichlet == 2) {
       sparse_matrix A1(nb_dof_mult, nb_dof);
       gmm::copy(BA, A1);
@@ -641,7 +1079,67 @@ int main(int argc, char *argv[]) {
   test_mim(mim, mf_rhs, false);
   test_mim(mimbounddown, mf_rhs, true);
 
-  // Brick system
+#if 1
+
+  /***************************************************************/ 
+  /*          New brick system                                   */
+  /***************************************************************/
+  getfem::model model;
+  
+  model.add_fem_variable("u", mf);
+  model.add_fem_variable("Lambda", mf_mult);
+  getfem::add_Laplacian_brick(model, mim, "u");
+  
+  
+  if (stabilized_dirichlet > 0){
+    getfem::add_explicit_matrix(model, "Lambda", "Lambda", MA);
+    if (stabilized_dirichlet != 3) {
+      getfem::add_explicit_matrix(model, "u", "u", KA);
+    }
+  }
+  
+  //Volumic source term
+  plain_vector F(nb_dof_rhs);
+  getfem::interpolation_function(mf_rhs, F, rhs);
+  model.add_initialized_fem_data("VolumicData", mf_rhs, F);
+  getfem::add_source_term_brick(model, mim, "u", "VolumicData");
+  
+  // Neumann condition
+  getfem::interpolation_function(mf_rhs, F, g_exact);
+  plain_vector R(nb_dof);
+  gmm::mult(gmm::transposed(B2), F, R);
+  getfem::add_explicit_rhs(model, "u", R);
+  
+  // Dirichlet condition
+  
+  getfem::add_constraint_with_multipliers(model, "u", "Lambda", B, plain_vector(nb_dof_mult));
+ 
+  //Solving the problem
+  cout<< "Stabilized_parameter="<< dir_gamma0 <<endl;
+  gmm::iteration iter(1e-9, 1, 40000);
+
+  //getfem::standard_solve(model, iter);
+
+
+  getfem::default_newton_line_search lsear;
+  getfem::standard_solve(model, iter, getfem::rselect_linear_solver(model,"mumps"), lsear);
+
+
+  plain_vector U(nb_dof);
+  gmm::copy(model.real_variable("u"), U);
+  plain_vector LAMBDA(nb_dof_mult);
+  gmm::copy(model.real_variable("Lambda"), LAMBDA);
+  
+  // cout<<"desplacement="<<U<<endl;
+  
+  // cout<<"Mult="<<LAMBDA<<endl;
+
+#else
+
+  /***************************************************************/ 
+  /*          Old brick system                                   */
+  /***************************************************************/
+
   getfem::mdbrick_generic_elliptic<> brick_laplacian(mim, mf);
 
   getfem::mdbrick_source_term<> brick_volumic_rhs(brick_laplacian);
@@ -659,8 +1157,14 @@ int main(int argc, char *argv[]) {
   getfem::mdbrick_constraint<> brick_constraint(brick_volumic_rhs);
   brick_constraint.set_constraints(B, plain_vector(nb_dof_mult));
   brick_constraint.set_constraints_type(getfem::AUGMENTED_CONSTRAINTS);
-  if (stabilized_dirichlet > 0)
-    brick_constraint.set_optional_matrices(KA, MA);
+
+  //add stabilized term
+  if (stabilized_dirichlet > 0){
+    if (stabilized_dirichlet == 3) {
+      brick_constraint.set_optional_matrices(KA, MA);
+    }else{
+      brick_constraint.set_optional_matrices(KA, MA);}
+  }
 
   getfem::mdbrick_abstract<> *final_brick = &brick_constraint;
     
@@ -674,16 +1178,26 @@ int main(int argc, char *argv[]) {
   plain_vector LAMBDA(nb_dof_mult);
   gmm::copy(brick_constraint.get_mult(MS), LAMBDA);
 
+ 
+
+#endif
+
+
+
+
   // interpolation of the solution on mf_rhs
   GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted");
-  plain_vector Uint(nb_dof_rhs), Vint(nb_dof_rhs), Eint(nb_dof_rhs);
+  plain_vector Uint(nb_dof_rhs), Vint(nb_dof_rhs), Eint(nb_dof_rhs),lambda_int(nb_dof_rhs);
   getfem::interpolation(mf, mf_rhs, U, Uint);
+  //getfem::interpolation(mf_mult, mf_rhs, LAMBDA, lambda_int);
   for (size_type i = 0; i < nb_dof_rhs; ++i) {
     Vint[i] = u_exact(mf_rhs.point_of_basic_dof(i));
     Eint[i] = gmm::abs(Uint[i] - Vint[i]);
   }
-    
-  // computation of error on u.
+  /***************************************************************/ 
+  /*          computation of error on u.                         */
+  /***************************************************************/
+
   double errmax = 0.0, exactmax = 0.0;
   for (size_type i = 0; i < nb_dof_rhs; ++i)
     if (ls_value(mf_rhs.point_of_basic_dof(i)) <= 0.0) {
@@ -691,7 +1205,15 @@ int main(int argc, char *argv[]) {
       exactmax = std::max(exactmax, Vint[i]);
     }
     else Eint[i] = 0.0;
-  cout << "Linfty error: " << 100.0 * errmax / exactmax << "%" << endl;
+
+  mf_rhs.write_to_file("xfem_dirichlet.mf", true);
+  mf_mult.write_to_file("xfem_dirichlet.mfmult", true);
+  gmm::vecsave("xfem_dirichlet_exact.U", Vint);
+  gmm::vecsave("xfem_dirichlet.U", Uint);
+  gmm::vecsave("xfem_dirichlet.L", LAMBDA);
+  gmm::vecsave("xfem_dirichlet.map_error", Eint);
+
+  // cout << "Linfty error: " << 100.0 * errmax / exactmax << "%" << endl;
   cout << "L2 error: " << 100.0
     * getfem::asm_L2_dist(mim, mf, U, mf_rhs, Vint)
     / getfem::asm_L2_norm(mim, mf_rhs, Vint) << "%" << endl;
@@ -699,8 +1221,9 @@ int main(int argc, char *argv[]) {
     * getfem::asm_H1_dist(mim, mf, U, mf_rhs, Vint)
     / getfem::asm_H1_norm(mim, mf_rhs, Vint) << "%" << endl;
 
-  // computation of error on multipliers.
-
+  /*********************************************************************/  
+  /*         computation of error on multipliers.                      */
+  /*********************************************************************/
   gmm::resize(BA, nb_dof_mult, nb_dof_rhs); gmm::clear(BA);
   gmm::resize(KA, nb_dof_rhs, nb_dof_rhs);  gmm::clear(KA);
   gmm::resize(B, nb_dof_mult, nb_dof_mult); gmm::clear(B);
@@ -718,73 +1241,225 @@ int main(int argc, char *argv[]) {
   // cout << "L2^2 max on multipliers: " << gmm::vect_sp(KA, Vint, Vint);
   // cout << "  LAMBDA^2: " << gmm::vect_sp(B, LAMBDA, LAMBDA);
   // cout << "  Double produit: " <<  2*gmm::vect_sp(BA, Vint, LAMBDA)<<endl;
-
-  // exporting solution in vtk format.
-  {
-    getfem::vtk_export exp("xfem_dirichlet.vtk", (2==1));
+  if(1){
+    
+    /*********************************************************************/  
+    /*         exporting solution in vtk format.                         */
+    /*********************************************************************/
+    {
+      getfem::vtk_export exp("xfem_dirichlet.vtk", (2==1));
     exp.exporting(mf); 
     exp.write_point_data(mf, U, "solution");
     cout << "export done, you can view the data file with (for example)\n"
       "mayavi -d xfem_dirichlet.vtk -f WarpScalar -m BandedSurfaceMap "
       "-m Outline\n";
-  }
-  // exporting error in vtk format.
-  {
-    getfem::vtk_export exp("xfem_dirichlet_error.vtk", (2==1));
-    exp.exporting(mf_rhs); 
-    exp.write_point_data(mf_rhs, Eint, "error");
-    cout << "export done, you can view the data file with (for example)\n"
-      "mayavi -d xfem_dirichlet_error.vtk -f WarpScalar -m BandedSurfaceMap "
-      "-m Outline\n";
-  }
-  // exporting multipliers in vtk format.
-  {
-    getfem::vtk_export exp("xfem_dirichlet_mult.vtk", (2==1));
-    exp.exporting(mf_mult); 
-    exp.write_point_data(mf_mult, LAMBDA, "multipliers");
-    cout << "export done, you can view the data file with (for example)\n"
-      "mayavi -d xfem_dirichlet_mult.vtk -f WarpScalar -m BandedSurfaceMap "
-      "-m Outline\n";
-  }
+    }
+    // exporting error in vtk format.
+    {
+      getfem::vtk_export exp("xfem_dirichlet_error.vtk", (2==1));
+      exp.exporting(mf_rhs); 
+      exp.write_point_data(mf_rhs, Eint, "error");
+      cout << "export done, you can view the data file with (for example)\n"
+	"mayavi -d xfem_dirichlet_error.vtk -f WarpScalar -m BandedSurfaceMap "
+	"-m Outline\n";
+    }
+    // exporting multipliers in vtk format.
+    {
+      getfem::vtk_export exp("xfem_dirichlet_mult.vtk", (2==1));
+      exp.exporting(mf_mult); 
+      exp.write_point_data(mf_mult, LAMBDA, "multipliers");
+      cout << "export done, you can view the data file with (for example)\n"
+	"mayavi -d xfem_dirichlet_mult.vtk -f WarpScalar -m BandedSurfaceMap "
+	"-m Outline\n";
+    }
+    
+    lsmf.write_to_file("xfem_dirichlet_ls.mf", true);
+    
+    gmm::vecsave("xfem_dirichlet_ls.U", ls.values());
+    
+    //save solution
+    
+    /*********************************************************************/  
+    /*         Save the solution.                                        */
+    /*********************************************************************/
+    mf.write_to_file("xfem_dirichlet.mfsol", true);
+    gmm::vecsave("xfem_dirichlet.Usol", U);
+    
+    mf_mult.write_to_file("xfem_dirichlet.mf_mult", true);
+    gmm::vecsave("xfem_dirichlet.Lsol", LAMBDA);
+    cout << "saving solution done"<<endl;
+    
+    unsigned nrefine = mf.linked_mesh().convex_index().card() < 200 ? 32 : 4;
+    /*********************************************************************/  
+    /*         Creationg Slice                                           */
+    /*********************************************************************/
+    
+    if (N==2) {
+      cout << "saving the slice solution for matlab\n";
+      getfem::stored_mesh_slice sl, sl0,sll;
+      
+      
+      getfem::mesh_slicer slicer(mf.linked_mesh());
+      getfem::slicer_build_stored_mesh_slice sbuild(sl);
+      getfem::mesh_slice_cv_dof_data<plain_vector> mfU(mf, U);
+      getfem::slicer_isovalues iso(mfU, 0.0, 0);
+      getfem::slicer_build_stored_mesh_slice sbuild0(sl0);
+      
+      slicer.push_back_action(sbuild);  // full slice in sl
+      slicer.push_back_action(iso);     // extract isosurface 0
+      slicer.push_back_action(sbuild0); // store it into sl0
+      slicer.exec(nrefine, mf.convex_index());
+      
+      getfem::mesh_slicer slicer2(mf.linked_mesh());
+      getfem::mesh_slice_cv_dof_data<plain_vector> 
+	mfL(ls.get_mesh_fem(), ls.values());
+      getfem::slicer_isovalues iso2(mfL, 0.0, 0);
+      getfem::slicer_build_stored_mesh_slice sbuildl(sll);
+      slicer2.push_back_action(iso2);     // extract isosurface 0
+      slicer2.push_back_action(sbuildl); // store it into sll
+      slicer2.exec(nrefine, mf.convex_index());
+      
+      sl.write_to_file("xfem_dirichlet.sl", true);
+      sl0.write_to_file("xfem_dirichlet.sl0", true);
+      sll.write_to_file("xfem_dirichlet.sll", true);
+      plain_vector UU(sl.nb_points()), LL(sll.nb_points()); 
+      sl.interpolate(mf, U, UU);
+      gmm::vecsave("xfem_dirichlet.slU", UU);
+      // gmm::scale(LAMBDA, 0.005);
+      sll.interpolate(mf_mult, LAMBDA, LL);
+      gmm::vecsave("xfem_dirichlet.slL", LL);
+    }else{
+      cout << "saving the slice solution for matlab\n";
+      // Create slice of the sphere to plot the Solution in the half sphere
+      // getfem::slicer_boundary exbond(mf.linked_mesh());//extract boundary
+      getfem::stored_mesh_slice  sl, sll, sl0, slU, slsph;
+      
+    
+      
+      getfem::mesh_slicer slicer(mf.linked_mesh());
+      getfem::slicer_build_stored_mesh_slice sbuild(sl);
+      getfem::mesh_slice_cv_dof_data<plain_vector> mfU(mf, U);
+      getfem::slicer_isovalues iso(mfU, 0.0, 0);
+      getfem::slicer_build_stored_mesh_slice sbuild0(sl0);
+      
+      slicer.push_back_action(sbuild);  // full slice in sl
+      slicer.push_back_action(iso);     // extract isosurface 0
+      slicer.push_back_action(sbuild0); // store it into sl0
+      slicer.exec(nrefine, mf.convex_index());
+      
 
-  lsmf.write_to_file("xfem_dirichlet_ls.mf", true);
-  gmm::vecsave("xfem_dirichlet_ls.U", ls.values());
 
-  unsigned nrefine = mf.linked_mesh().convex_index().card() < 200 ? 32 : 4;
-  if (1) {
-    cout << "saving the slice solution for matlab\n";
-    getfem::stored_mesh_slice sl, sl0,sll;
+      getfem::mesh_slicer slicer2(ls.get_mesh_fem().linked_mesh());
+      getfem::mesh_slice_cv_dof_data<plain_vector> 
+	mfL(ls.get_mesh_fem(), ls.values());
+      getfem::slicer_isovalues  iso2(mfL, 0.0, 0);
+      //getfem::slicer_half_space hs(base_node(0,0,0), base_node(0,1,0),-1);
+      // getfem::slicer_intersect  sect(iso2,hs);
+      getfem::slicer_build_stored_mesh_slice sbuildlu(slU);
+      slicer2.push_back_action(sbuild);                 // Full slice in slfulll
+      slicer2.push_back_action(iso2);                   // extract isosurface 0
+      // slicer2.push_back_action(hs);                  // cut with half space
+      // slicer2.push_back_action(exbond);              // extract boundary
+      slicer2.push_back_action(sbuildlu);               // store it into slU
+      slicer2.exec(nrefine, ls.get_mesh_fem().convex_index());
+      
+      sl.write_to_file("xfem_dirichlet.sl", true);
+      sl0.write_to_file("xfem_dirichlet.sl0", true);
+      slU.write_to_file("xfem_dirichlet.slU", true);
+      plain_vector  UU(slU.nb_points());
+      
+      slU.interpolate(mf, U, UU);
+      gmm::vecsave("xfem_dirichlet.sl_U", UU);
+      
+   
+      
+      // Create slice of the sphere to plot the multiplier at the boundary
+      
+      getfem::mesh_slicer slicer3(mf.linked_mesh());
+      //getfem::mesh_slice_cv_dof_data<plain_vector> 
+      //  mfL(ls.get_mesh_fem(), ls.values());
+      getfem::slicer_isovalues  iso3(mfL, 0.0, 0);
+      getfem::slicer_half_space hs(base_node(0,0,0), base_node(0,1,0),-1);
+      //    getfem::slicer_intersect  sect3(iso3,hs);
+      getfem::slicer_build_stored_mesh_slice sbuildl(sll);
+      slicer3.push_back_action(sbuild);            // Full slice in sl
+      slicer3.push_back_action(iso3);              // extract isosurface 0
+      slicer3.push_back_action(hs);                // cut with half space
+      slicer3.push_back_action(sbuildl);           // store it into sll
+      slicer3.exec(nrefine, mf.convex_index());
+      
+      sll.write_to_file("xfem_dirichlet.sll", true);
+      plain_vector  LL(sll.nb_points()), UUb(sll.nb_points());
+      
+      sll.interpolate(mf, U, UUb);
+      gmm::vecsave("xfem_dirichlet.slUb", UUb);
+      
+      gmm::scale(LAMBDA, 0.005);
+      sll.interpolate(mf_mult, LAMBDA, LL);
+      gmm::vecsave("xfem_dirichlet.slL", LL);
+      
+      getfem::slicer_boundary exbond1(mf.linked_mesh());//extract boundary
+      getfem::mesh_slicer slicer4(mf.linked_mesh());
+      //getfem::slicer_build_stored_mesh_slice sbuildfull(sl);
+      getfem::slicer_sphere sph(base_node(0,0), Radius, -1 );
+      // getfem::slicer_half_space hs1(base_node(0,0,0), base_node(0,1,0),-1);
+      //getfem::slicer_intersect  sect4(sph,hs1);
+      getfem::slicer_build_stored_mesh_slice sbuildsph(slsph);
+      
+      slicer4.push_back_action(sbuild);  // Full slice in sl
+      slicer4.push_back_action(sph);         // extract sphere 
+      //slicer4.push_back_action(hs1);         // cut with half space
+      slicer4.push_back_action(exbond1);      // extract boundary
+      slicer4.push_back_action(sbuildsph);   // store it into slsph
+      
+      slicer4.exec(nrefine, mf.convex_index());
+      slsph.write_to_file("xfem_dirichlet.slsph", true);
+    
+      plain_vector UUs(slsph.nb_points()); 
+      slsph.interpolate(mf, U, UUs);
+      gmm::vecsave("xfem_dirichlet.slUsph", UUs);
+    }
+    
+    /********************************************/
+    /*exacte solution                           */
+    /********************************************/
+    plain_vector UE(nb_dof_rhs);
+    plain_vector UEE(nb_dof);
+    for (size_type i = 0; i < nb_dof_rhs; ++i) {
+      UE[i] = u_exact(mf_rhs.point_of_basic_dof(i));
+    }
+    mf.write_to_file("xfem_dirichlet.mfE", true);
+    getfem::interpolation(mf_rhs, mf, UE, UEE);
+    gmm::vecsave("xfem_dirichlet_exact.UE", UEE);
+    getfem::stored_mesh_slice sle, sl0e,slle;
+    getfem::mesh_slicer slicere(mf.linked_mesh());
+    getfem::slicer_build_stored_mesh_slice sbuilde(sle);
+    getfem::mesh_slice_cv_dof_data<plain_vector> mfUe(mf, UEE);
+    getfem::slicer_isovalues isoe(mfUe, 0.0, 0);
+    getfem::slicer_build_stored_mesh_slice sbuild0e(sl0e);
     
+    slicere.push_back_action(sbuilde);  // full slice in sle
+    slicere.push_back_action(isoe);     // extract isosurface 0
+    slicere.push_back_action(sbuild0e); // store it into sl0e
+    slicere.exec(nrefine, mf.convex_index());
     
-    getfem::mesh_slicer slicer(mf.linked_mesh());
-    getfem::slicer_build_stored_mesh_slice sbuild(sl);
-    getfem::mesh_slice_cv_dof_data<plain_vector> mfU(mf, U);
-    getfem::slicer_isovalues iso(mfU, 0.0, 0);
-    getfem::slicer_build_stored_mesh_slice sbuild0(sl0);
     
-    slicer.push_back_action(sbuild);  // full slice in sl
-    slicer.push_back_action(iso);     // extract isosurface 0
-    slicer.push_back_action(sbuild0); // store it into sl0
-    slicer.exec(nrefine, mf.convex_index());
     
-    getfem::mesh_slicer slicer2(mf.linked_mesh());
+    getfem::mesh_slicer slicer2e(mf.linked_mesh());
     getfem::mesh_slice_cv_dof_data<plain_vector> 
-      mfL(ls.get_mesh_fem(), ls.values());
-    getfem::slicer_isovalues iso2(mfL, 0.0, 0);
-    getfem::slicer_build_stored_mesh_slice sbuildl(sll);
-    slicer2.push_back_action(iso2);     // extract isosurface 0
-    slicer2.push_back_action(sbuildl); // store it into sl0
-    slicer2.exec(nrefine, mf.convex_index());
+      mfLe(ls.get_mesh_fem(), ls.values());
+    getfem::slicer_isovalues iso2e(mfLe, 0.0, 0);
+    getfem::slicer_build_stored_mesh_slice sbuildle(slle);
+    slicer2e.push_back_action(iso2e);     // extract isosurface 0
+    slicer2e.push_back_action(sbuildle); // store it into sl0e
+    slicer2e.exec(nrefine, mf.convex_index());
     
-    sl.write_to_file("xfem_dirichlet.sl", true);
-    sl0.write_to_file("xfem_dirichlet.sl0", true);
-    sll.write_to_file("xfem_dirichlet.sll", true);
-    plain_vector UU(sl.nb_points()), LL(sll.nb_points()); 
-    sl.interpolate(mf, U, UU);
-    gmm::vecsave("xfem_dirichlet.slU", UU);
-    // gmm::scale(LAMBDA, 0.005);
-    sll.interpolate(mf_mult, LAMBDA, LL);
-    gmm::vecsave("xfem_dirichlet.slL", LL);
+    sle.write_to_file("xfem_dirichlet.sle", true);
+    sl0e.write_to_file("xfem_dirichlet.sl0e", true);
+    slle.write_to_file("xfem_dirichlet.slle", true);
+    plain_vector UUE(sle.nb_points());
+    sle.interpolate(mf, UEE, UUE);
+    gmm::vecsave("xfem_dirichlet.slUE", UUE);
   }
   
   return 0; 
diff --git a/contrib/xfem_contact/xfem_dirichlet.param b/contrib/xfem_contact/xfem_dirichlet.param
index bfd4925..d65c7c0 100644
--- a/contrib/xfem_contact/xfem_dirichlet.param
+++ b/contrib/xfem_contact/xfem_dirichlet.param
@@ -3,21 +3,27 @@
 % parameters for program xfem_dirichlet                                   %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-QUAD = 1;
+QUAD = 0;
 N = 2;
-RADIUS = 0.47;             % radius of the real circular domain.
+RADIUS = 0.4;              % radius of the real circular domain.
 LEVEL_SET_DEGREE = 2;      % Degree of the piecewise polynomial
                            % defining the level set.
-EXACT_SOL = 3;             % Which exact solution.
+EXACT_SOL = 3;             % Which exact solution(8 is three dimensional solution).
+TPA=0;
 SIMPLIFY_LEVEL_SET = 0;
-STABILIZED_DIRICHLET = 2; % 0 = no, 1 = Barbosa-Hughes stab, 2 = fully stab.
-MINIMAL_ELT_RATIO = 0.005;  % threshold ratio for the fully stab Dirichlet.
-DIRICHLET_GAMMA0 = 0.1;  % Barbosa Hughes stabilization parameter
-		   
+STABILIZED_DIRICHLET = 3;  % 0 = no, 1 = Barbosa-Hughes stab, 2 = fully stab., 3 = Patch stab.
+MINIMAL_ELT_RATIO = 0.1;  % threshold ratio for the fully stab Dirichlet.
+DIRICHLET_GAMMA0 = 0.0000001;   % Barbosa Hughes stabilization parameter
+RATIO_GR_MESH = 2;         % Ratio size between mesh and patches.
+	   
 OK = 0;
+NX = 10;                  % space step.
+MESH_NOISED = 0;           % Set to one if you want to "shake" the mesh
+
 
 if (N == 1) 
-  MESH_FILE='structured:GT="GT_PK(1,1)";SIZES=[1];NOISED=0;NSUBDIV=[3]';
+ % MESH_FILE='structured:GT="GT_PK(1,1)";SIZES=[1];NOISED=0;NSUBDIV=[3]';
+  MESH_TYPE = 'GT_PK(1,1)'; 
   IM = 'IM_GAUSS1D(6)';     % Integration method.
   IM_SIMPLEX = IM;          % Integration method on sub-triangles.
   FEM = 'FEM_PK(1,1)';      % Finite element method for the unknown.
@@ -27,9 +33,11 @@ if (N == 1)
 end;
 
 if (N == 2 && QUAD)
-  MESH_FILE='structured:GT="GT_QK(2,1)";SIZES=[1,1];NOISED=0;NSUBDIV=[32,32]';
+  MESH_TYPE = 'GT_QK(2,1)'; 
   IM = 'IM_GAUSS_PARALLELEPIPED(2,6)';        % Integration method.
+% IM='IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6), 5)';
   IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),2)';   % Integration method on sub-triangles.
+% IM_SIMPLEX ='IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(4), 3)';
   FEM = 'FEM_QK(2,1)';      % Finite element method for the unknown.
 %  FEM = 'FEM_PRODUCT(FEM_PK_WITH_CUBIC_BUBBLE(1,1), FEM_PK_WITH_CUBIC_BUBBLE(1,1))';      % Finite element method for the unknown.
   FEM_RHS = 'FEM_QK(2,3)';     % Finite element method for the rhs
@@ -38,27 +46,41 @@ if (N == 2 && QUAD)
 end;
 
 if (N == 2 && ~QUAD)
-  MESH_FILE='structured:GT="GT_PK(2,1)";SIZES=[1,1];NOISED=0;NSUBDIV=[3,3]';
-%  IM = 'IM_HCT_COMPOSITE(IM_TRIANGLE(6))';
-  IM = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(9),2)';    % Integration method.
-  IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(9),2)';
-  FEM = 'FEM_PK(2,1)';      % Finite element method for the unknown.
-  FEM_MULT = 'FEM_PK(2,0)'; % Finite element method for multipliers
+  MESH_TYPE = 'GT_PK(2,1)';
+% IM = 'IM_HCT_COMPOSITE(IM_TRIANGLE(6))';
+  IM = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),1)';    % Integration method.
+  IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),2)';
+  FEM = 'FEM_PK(2,2)';      % Finite element method for the unknown.
+  FEM_MULT = 'FEM_PK(2,1)'; % Finite element method for multipliers
 %  FEM = 'FEM_PK_WITH_CUBIC_BUBBLE(2,1)';
 %  FEM = 'FEM_P1_PIECEWISE_LINEAR_BUBBLE';
   FEM_RHS = 'FEM_PK(2,3)';  % Finite element method for the rhs
   OK = 1;
 end;
 
+if (N == 3 && QUAD)
+  MESH_TYPE = 'GT_QK(3,1)'; 
+  IM = 'IM_GAUSS_PARALLELEPIPED(3,6)';        % Integration method.
+% IM='IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(6), 5)';
+  IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(6),2)';   % Integration method on sub-triangles.
+% IM_SIMPLEX ='IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(4), 3)';
+  FEM = 'FEM_QK(3,2)';      % Finite element method for the unknown.
+%  FEM = 'FEM_PRODUCT(FEM_PK_WITH_CUBIC_BUBBLE(1,1), FEM_PK_WITH_CUBIC_BUBBLE(1,1))';      % Finite element method for the unknown.
+  FEM_RHS = 'FEM_QK(3,3)';     % Finite element method for the rhs
+  FEM_MULT = 'FEM_QK(3,1)'; % Finite element method for multipliers
+  OK = 1;
+end;
+
 if (N == 3 && ~QUAD)
-  MESH_FILE='structured:GT="GT_PK(3,1)";SIZES=[1,1,1];NOISED=0;NSUBDIV=[3,3,3]';
+ % MESH_FILE='structured:GT="GT_PK(3,1)";SIZES=[1,1,1];NOISED=0;NSUBDIV=[3,3,3]';
+  MESH_TYPE = 'GT_PK(3,1)';
   IM = 'IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(6),1)';    % Integration method.
   IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(6),1)'; 
   FEM = 'FEM_PK(3,2)';      % Finite element method for the unknown.
-  FEM_RHS = FEM;            % Finite element method for the rhs
+  FEM_RHS ='FEM_PK(3,3)';            % Finite element method for the rhs
   FEM_MULT = 'FEM_PK(3,1)'; % Finite element method for multipliers
-  FEM_MULT_DEGREE = 1;      % Degree for multipliers definition
-   OK = 1;
+  FEM_MULT_DEGREE = 2;      % Degree for multipliers definition
+  OK = 1;
 end;
 
 if (~OK)
@@ -67,5 +89,5 @@ end;
 
 
 %%%%%   saving parameters                                             %%%%%
-ROOTFILENAME = 'xfem_dirichlet';     % Root of data files.
+ROOTFILENAME = 'xfem_dirichlet_toto';     % Root of data files.
 VTK_EXPORT = 2 % export solution to a .vtk file ?
diff --git a/contrib/xfem_contact/xfem_stokes.cc b/contrib/xfem_contact/xfem_stokes.cc
new file mode 100644
index 0000000..7afe5b9
--- /dev/null
+++ b/contrib/xfem_contact/xfem_stokes.cc
@@ -0,0 +1,1067 @@
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+/**
+ * Goal : scalar Dirichlet problem with Xfem.
+ *
+ * Research program.
+ */
+
+#include "getfem/getfem_assembling.h" /* import assembly methods      */
+#include "getfem/getfem_export.h"     /* export functions             */
+#include "getfem/getfem_derivatives.h"
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_model_solvers.h"
+#include "getfem/getfem_mesh_im_level_set.h"
+#include "getfem/getfem_partial_mesh_fem.h"
+#include "getfem/getfem_Coulomb_friction.h"
+#include "getfem/getfem_import.h"
+#include "getfem/getfem_inter_element.h"
+#include "gmm/gmm.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
+/* some Getfem++ types that we will be using */
+using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
+using bgeot::base_vector;
+using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
+using bgeot::scalar_type; /* = double */
+using bgeot::short_type;  /* = short */
+using bgeot::size_type;   /* = unsigned long */
+using bgeot::dim_type;
+using bgeot::base_matrix; /* small dense matrix. */
+
+/* definition of some matrix/vector types. These ones are built
+ * using the predefined types in Gmm++
+ */
+typedef getfem::modeling_standard_sparse_vector sparse_vector;
+typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
+typedef getfem::modeling_standard_plain_vector  plain_vector;
+
+typedef gmm::row_matrix<sparse_vector> sparse_row_matrix;
+
+int Nxy;
+
+int DIRICHLET_BOUNDARY_NUM = 0;
+int NEUMANN_BOUNDARY_NUM = 1;
+
+scalar_type nu;
+double Radius;
+int u_version;
+
+
+/*
+ * Exact solution for the velocity u
+ */
+
+  base_small_vector u_exact(const base_node &p){  
+	  return base_small_vector	(							 
+			p[0]*p[0]*(p[0]-1.0)*(p[0]-1.0)*(2.0*p[1]-6.0*p[1]*p[1]+4.0*p[1]*p[1]*p[1]),
+		   -p[1]*p[1]*(p[1]-1.0)*(p[1]-1.0)*(2.0*p[0]-6.0*p[0]*p[0]+4.0*p[0]*p[0]*p[0]) ) ;  
+  }
+  
+
+/* 
+ * Exact solution for the pressure p
+ */
+
+  double p_exact(const base_node &p) {
+      return p[0]*p[0]*p[1]*p[1];
+  }
+
+/*
+ * Value of the normal derivative on the level-set. The fluid is outside
+ */
+
+  base_small_vector g_exact_ls(const base_node &p){
+      double R = Radius;
+      return base_small_vector( (-1.0/(2.0*R))*2.0*p[0]*(2.0*p[0]-1.0)*(2.0*p[0]-1.0)*(p[0]-1.0)*2.0*p[1]*(2.0*p[1]-1.0)*(p[1]-1.0)-(1.0/(2.0*R))*(2.0*p[1]-1.0)*p[0]*p[0]*(1.0-p[0])*(1.0-p[0])*(2.0-12.0*p[1]+12.0*p[1]*p[1]),
+          (1.0/(2.0*R))*(2*p[0]-1.0)*p[1]*p[1]*(p[1]-1.0)*(p[1]-1.0)*(2.0-12.0*p[0]+12.0*p[0]*p[0])+(1.0/(2.0*R))*2.0*p[1]*(2.0*p[1]-1.0)*(2.0*p[1]-1.0)*(p[1]-1.0)*2.0*p[0]*(2.0*p[0]-1.0)*(p[0]-1.0) ) ;
+  }
+
+/*
+ * Value of the normal derivative on the box boundary.
+ */
+  base_small_vector g_exact(const base_node &p){
+      
+      if (p[0] < 1e-7) {
+        return base_small_vector( 0.0, -2.0*p[1]*p[1]*(p[1]-1.0)*(p[1]-1.0)
+               ) ;
+      }
+      if (p[0] > 1.0 - 1e-7) {
+        return base_small_vector( 0.0, 2.0*p[1]*p[1]*(p[1]-1.0)*(p[1]-1.0)
+               ) ;
+      }
+      if (p[1] > 1.0 - 1e-7) {
+        return base_small_vector( -2.0*p[0]*p[0]*(p[0]-1.0)*(p[0]-1.0), 0.0
+               ) ;
+      }
+      if (p[1] < 1e-7) {
+        return base_small_vector( 2.0*p[0]*p[0]*(p[0]-1.0)*(p[0]-1.0), 0.0
+               ) ;
+      }
+      else {
+        return base_small_vector( 0.0, 0.0
+               ) ;
+      }   
+  }
+
+/*
+ * Right-hand-side corresponding to the exact solution
+ */
+
+  base_small_vector rhs(const base_node &p){
+    return  base_small_vector( -nu*( (4*(2*p[1]-1))*(6*p[1]*p[1]*p[0]*p[0]+p[1]*p[1]-6*p[1]*p[1]*p[0]-6*p[0]*p[0]*p[1]-p[1]+6*p[0]*p[1]-6*p[0]*p[0]*p[0]+3*p[0]*p[0]+3*p[0]*p[0]*p[0]*p[0])   ) + 2.0*p[0]*p[1]*p[1],
+							  -nu*( -(4*(-1+2*p[0]))*(6*p[1]*p[1]*p[0]*p[0]+p[0]*p[0]-6*p[0]*p[0]*p[1]-6*p[1]*p[1]*p[0]+6*p[0]*p[1]-p[0]+3*p[1]*p[1]*p[1]*p[1]-6*p[1]*p[1]*p[1]+3*p[1]*p[1])  ) + 2.0*p[1]*p[0]*p[0] );
+  }
+
+/*
+ * The level-set : a circle of radius R = Radius
+ */
+
+  double ls_value(const base_node &p) {
+      double R = Radius;
+      return  (p[0]-0.5)*(p[0]-0.5) + (p[1]-0.5)*(p[1]-0.5)- R*R;
+  }
+  
+
+/*
+ * Test procedure
+ */
+
+void test_mim(getfem::mesh_im_level_set &mim, getfem::mesh_fem &mf_rhs,
+	      bool bound) {
+  if (!u_version) {
+    unsigned N = unsigned(mim.linked_mesh().dim());
+    size_type nbdof = mf_rhs.nb_dof();
+    plain_vector V(nbdof), W(1);
+    std::fill(V.begin(), V.end(), 1.0);
+    
+    getfem::generic_assembly assem("u=data(#1); V()+=comp(Base(#1))(i).u(i);");
+    assem.push_mi(mim); assem.push_mf(mf_rhs); assem.push_data(V);
+    assem.push_vec(W);
+    assem.assembly(getfem::mesh_region::all_convexes());
+    double exact(0), R2 = Radius*Radius, R3 = R2*Radius;
+    switch (N) {
+      case 1: exact = bound ? 1.0 : 2.0*Radius; break;
+      case 2: exact = bound ? Radius*M_PI : R2*M_PI; break;
+      case 3: exact = bound ? 2.0*M_PI*R2 : 4.0*M_PI*R3/3.0; break;
+      default: assert(N <= 3);
+    }
+    if (bound) cout << "Boundary length: "; else cout << "Area: ";
+    cout << W[0] << " should be " << exact << endl;
+    assert(gmm::abs(exact-W[0])/exact < 0.01); 
+  }
+}
+
+/*
+ * Assembly of stabilization terms
+ */
+
+
+template<typename VECT1> class level_set_unit_normal 
+  : public getfem::nonlinear_elem_term {
+  const getfem::mesh_fem &mf;
+  const VECT1 &U;
+  size_type N;
+  base_matrix gradU;
+  bgeot::base_vector coeff;
+  bgeot::multi_index sizes_;
+public:
+  level_set_unit_normal(const getfem::mesh_fem &mf_, const VECT1 &U_) 
+    : mf(mf_), U(U_), N(mf_.linked_mesh().dim()), gradU(1, N)
+  { sizes_.resize(1); sizes_[0] = short_type(N); }
+  const bgeot::multi_index &sizes() const {  return sizes_; }
+  virtual void compute(getfem::fem_interpolation_context& ctx,
+		       bgeot::base_tensor &t) {
+    size_type cv = ctx.convex_num();
+    coeff.resize(mf.nb_dof_of_element(cv));
+    gmm::copy(gmm::sub_vector(U, gmm::sub_index(mf.ind_dof_of_element(cv))),
+	      coeff);
+    ctx.pf()->interpolation_grad(ctx, coeff, gradU, 1);
+    scalar_type norm = gmm::vect_norm2(gmm::mat_row(gradU, 0));
+    for (size_type i = 0; i < N; ++i) t[i] = - gradU(0, i) / norm;
+    // cout << "point " << ctx.xreal() << " norm = " << t << endl;
+  }
+};
+
+
+template<class MAT>
+void asm_stabilization_mixed_term
+(const MAT &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf, 
+ const getfem::mesh_fem &mf_mult, getfem::level_set &ls,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+  MAT &RM = const_cast<MAT &>(RM_);
+
+  level_set_unit_normal<std::vector<scalar_type> >
+    nterm(ls.get_mesh_fem(), ls.values());
+
+  getfem::generic_assembly assem("t=comp(vBase(#2).vGrad(#1).NonLin(#3));"
+				 "M(#2, #1)+= t(:,j,:,j,i,i)");
+  assem.push_mi(mim);
+  assem.push_mf(mf);
+  assem.push_mf(mf_mult);
+  assem.push_mf(ls.get_mesh_fem());
+  assem.push_mat(RM);
+  assem.push_nonlinear_term(&nterm);
+  assem.assembly(rg);
+}
+
+
+template<class MAT>
+void asm_stabilization_symm_term
+(const MAT &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf, 
+ getfem::level_set &ls,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+  MAT &RM = const_cast<MAT &>(RM_);
+
+  level_set_unit_normal<std::vector<scalar_type> >
+    nterm(ls.get_mesh_fem(), ls.values());
+
+  getfem::generic_assembly
+    assem("t=comp(vGrad(#1).NonLin(#2).vGrad(#1).NonLin(#2));"
+	  "M(#1, #1)+= sym(t(:,k,i,i,:,k,j,j))");
+  assem.push_mi(mim);
+  assem.push_mf(mf);
+  assem.push_mf(ls.get_mesh_fem());
+  assem.push_mat(RM);
+  assem.push_nonlinear_term(&nterm);
+  assem.assembly(rg);
+}
+
+
+
+
+
+template<class MAT>
+void asm_mass_matrix_pl(const MAT &RM_, const getfem::mesh_im &mim,  const getfem::mesh_fem &mf_p, const getfem::mesh_fem &mf, 
+						 getfem::level_set &ls,
+						 const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+	MAT &RM = const_cast<MAT &>(RM_);
+	
+	level_set_unit_normal<std::vector<scalar_type> >
+    nterm(ls.get_mesh_fem(), ls.values());
+	
+	getfem::generic_assembly
+    assem("t=comp(Base(#1).vBase(#2).NonLin(#3));"
+		  "M(#1, #2)+= t(:,:,i,i)");
+	assem.push_mi(mim);
+	assem.push_mf(mf_p);
+	assem.push_mf(mf);
+	assem.push_mf(ls.get_mesh_fem());
+	assem.push_mat(RM);
+	assem.push_nonlinear_term(&nterm);
+	assem.assembly(rg);
+}
+					
+
+
+template<class MAT>
+void asm_mass_matrix_up(const MAT &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf_p, const getfem::mesh_fem &mf, 
+					getfem::level_set &ls,
+					const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+	MAT &RM = const_cast<MAT &>(RM_);
+	
+	level_set_unit_normal<std::vector<scalar_type> >
+    nterm(ls.get_mesh_fem(), ls.values());
+	
+	getfem::generic_assembly
+    assem("t=comp(Base(#1).NonLin(#3).NonLin(#3).vGrad(#2));"
+		  "M(#1, #2)+= t(:,i,j,:,i,j)");
+	assem.push_mi(mim);
+	assem.push_mf(mf_p);
+	assem.push_mf(mf);
+	assem.push_mf(ls.get_mesh_fem());
+	assem.push_mat(RM);
+	assem.push_nonlinear_term(&nterm);
+	assem.assembly(rg);
+}
+				   
+				   
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+ * Elementary extrapolation matrices
+ */
+
+void compute_mass_matrix_extra_element(base_matrix &M, const getfem::mesh_im &mim, const getfem::mesh_fem &mf,
+ size_type cv1, size_type cv2) {
+
+  getfem::pfem pf1_old = 0;
+  static getfem::pfem_precomp pfp1 = 0;
+  static getfem::papprox_integration pai1_old = 0;
+  bgeot::geotrans_inv_convex gic;
+  bgeot::base_tensor t1, t2;
+  getfem::base_matrix G1, G2;
+  
+  const getfem::mesh &m(mf.linked_mesh());
+  
+  GMM_ASSERT1(mf.convex_index().is_in(cv1) && mim.convex_index().is_in(cv1) &&
+	      mf.convex_index().is_in(cv2) && mim.convex_index().is_in(cv2),
+	      "Bad element");
+    
+  bgeot::pgeometric_trans pgt1 = m.trans_of_convex(cv1);
+  getfem::pintegration_method pim1 = mim.int_method_of_element(cv1);
+  getfem::papprox_integration pai1 =
+    getfem::get_approx_im_or_fail(pim1);
+  getfem::pfem pf1 = mf.fem_of_element(cv1);
+  size_type nbd1 = pf1->nb_dof(cv1);
+  
+  if (pf1 != pf1_old || pai1 != pai1_old) {
+    pfp1 = fem_precomp(pf1, &pai1->integration_points(), pim1);
+    pf1_old = pf1; pai1_old = pai1;
+  }
+  
+  bgeot::vectors_to_base_matrix(G1, m.points_of_convex(cv1));
+  getfem::fem_interpolation_context ctx1(pgt1, pfp1, 0, G1, cv1,size_type(-1));
+  
+  getfem::pfem pf2 = mf.fem_of_element(cv2);
+  size_type nbd2 = pf1->nb_dof(cv2);
+  base_node xref2(pf2->dim());
+  bgeot::pgeometric_trans pgt2 = m.trans_of_convex(cv2);
+  gic.init(m.points_of_convex(cv2), pgt2);
+
+  gmm::resize(M, nbd1, nbd2); gmm::clear(M);
+
+  bgeot::vectors_to_base_matrix(G2, m.points_of_convex(cv2));
+  
+  getfem::fem_interpolation_context ctx2(pgt2, pf2, base_node(pgt2->dim()),
+					 G2, cv2, size_type(-1));
+
+  for (unsigned ii=0; ii < pai1->nb_points_on_convex(); ++ii) {
+    ctx1.set_ii(ii);
+    scalar_type coeff = pai1->integration_coefficients()[ii] * ctx1.J();
+    bool converged;
+    gic.invert(ctx1.xreal(), xref2, converged);
+    GMM_ASSERT1(converged, "geometric transformation not well inverted ... !");
+    // cout << "xref2 = " << xref2 << endl;
+    ctx2.set_xref(xref2);
+
+    pf1->real_base_value(ctx1, t1);
+    pf2->real_base_value(ctx2, t2);
+    
+    for (size_type i = 0; i < nbd1; ++i)
+      for (size_type j = 0; j < nbd2; ++j)
+	M(i,j) += t1[i] * t2[j] * coeff;
+  }
+  
+}
+
+
+
+/* 
+ * Main program 
+ */
+
+int main(int argc, char *argv[]) {
+
+  GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
+  FE_ENABLE_EXCEPT;        // Enable floating point exception for Nan.
+    
+  // Read parameters.
+  bgeot::md_param PARAM;
+  PARAM.read_command_line(argc, argv);
+  u_version = int(PARAM.int_value("EXACT_SOL", "Which exact solution"));
+  nu = double(PARAM.real_value("NU", "Viscosité"));
+  
+  
+  // Load the mesh
+  getfem::mesh mesh;
+ 
+   std::string MESH_FILE = PARAM.string_value("MESH_FILE", "Mesh file");
+   getfem::import_mesh(MESH_FILE, mesh);
+
+  /* //to make tables for results
+  Nxy  = PARAM.int_value("Nxy","Number of subdivision for the mesh in x and y direction");
+  std::ostringstream oss;
+  oss << Nxy;
+  std::string NxyStr = oss.str();
+  std::string meshname1 = "structured:GT=\"GT_PK(2,1)\";SIZES=[1,1];NOISED=0;";
+    //(PARAM.string_value("MESHNAME1", "Nom du fichier de maillage"));
+  std::string meshname2
+    (PARAM.string_value("MESHNAME2", "Nom du fichier de maillage"));
+  std::string meshname = meshname1 +  "NSUBDIV=[" + NxyStr + "," + NxyStr + "];" +  meshname2;
+  getfem::import_mesh(meshname, mesh);
+  */
+  unsigned N = mesh.dim();
+  
+  // center the mesh in (0, 0).
+  base_node Pmin(N), Pmax(N);
+  mesh.bounding_box(Pmin, Pmax);
+  Pmin += Pmax; Pmin /= -2.0;
+  // Pmin[N-1] = -Pmax[N-1];
+  
+  // mesh.translation(Pmin);
+  
+  scalar_type h = mesh.minimal_convex_radius_estimate();
+  cout << "h = " << h << endl;
+  
+/*
+ * Level set definition
+ */
+
+  unsigned lsdeg = unsigned(PARAM.int_value("LEVEL_SET_DEGREE", "level set degree"));
+  bool simplify_level_set = 
+    (PARAM.int_value("SIMPLIFY_LEVEL_SET",
+		     "simplification or not of the level sets") != 0);
+  Radius = PARAM.real_value("RADIUS", "Domain radius");
+  getfem::level_set ls(mesh, dim_type(lsdeg));
+
+
+  //getfem::level_set lsup(mesh, dim_type(lsdeg), true), lsdown(mesh, dim_type(lsdeg), true);
+  const getfem::mesh_fem &lsmf = ls.get_mesh_fem();
+  for (unsigned i = 0; i < lsmf.nb_dof(); ++i) {
+    ls.values()[i] = ls_value(lsmf.point_of_dof(i));
+	  }
+ 
+	
+  if (simplify_level_set) {
+    scalar_type simplify_rate = std::min(0.03, 0.05 * sqrt(h));
+    cout << "Simplification of level sets with rate: " <<
+      simplify_rate << endl;
+    ls.simplify(simplify_rate);
+ //   lsup.simplify(simplify_rate);
+ //   lsdown.simplify(simplify_rate); 
+  }
+  
+	getfem::mesh_level_set mls(mesh); //, mlsup(mesh), mlsdown(mesh);
+  mls.add_level_set(ls);
+  mls.adapt();
+ // mlsup.add_level_set(lsup);
+ // mlsup.adapt();
+ // mlsdown.add_level_set(lsdown);
+ // mlsdown.adapt();
+
+  
+  getfem::mesh mcut;
+  mls.global_cut_mesh(mcut);
+  mcut.write_to_file("cut.mesh");
+	
+/*	getfem::mesh mcutdown;
+	mlsdown.global_cut_mesh(mcutdown);
+	mcutdown.write_to_file("cutdown.mesh");
+	getfem::mesh mcutup;
+	mlsup.global_cut_mesh(mcutup);
+	mcutup.write_to_file("cutup.mesh");
+	
+*/	
+	
+	
+	
+  
+  // Integration method on the domain
+  std::string IM = PARAM.string_value("IM", "Mesh file");
+  std::string IMS = PARAM.string_value("IM_SIMPLEX", "Mesh file");
+  int intins = getfem::mesh_im_level_set::INTEGRATE_OUTSIDE;
+  getfem::mesh_im uncutmim(mesh);
+  uncutmim.set_integration_method(mesh.convex_index(),
+				  getfem::int_method_descriptor(IM));
+  getfem::mesh_im_level_set mim(mls, intins,
+				getfem::int_method_descriptor(IMS));
+  mim.set_integration_method(mesh.convex_index(),
+			     getfem::int_method_descriptor(IM));
+  mim.adapt();
+  
+  
+  // Integration methods on the boudary
+  int intbound = getfem::mesh_im_level_set::INTEGRATE_BOUNDARY;
+  getfem::mesh_im_level_set mimbound(mls, intbound,
+					 getfem::int_method_descriptor(IMS));
+  mimbound.set_integration_method(mesh.convex_index(),
+				      getfem::int_method_descriptor(IM));
+  mimbound.adapt();
+ // getfem::mesh_im_level_set mimboundup(mlsup, intbound,
+//				       getfem::int_method_descriptor(IMS));
+ // mimboundup.set_integration_method(mesh.convex_index(),
+//				    getfem::int_method_descriptor(IM));
+ // mimboundup.adapt();
+
+  
+  // Finite element method for the unknown velocity u
+  getfem::mesh_fem pre_mf(mesh);
+  std::string FEM = PARAM.string_value("FEM", "finite element method");
+  pre_mf.set_qdim(N);
+  pre_mf.set_finite_element(mesh.convex_index(),
+			    getfem::fem_descriptor(FEM));
+	
+  getfem::partial_mesh_fem mf(pre_mf);
+	
+  dal::bit_vector kept_dof = select_dofs_from_im(pre_mf, mim);
+	
+  dal::bit_vector rejected_elt;
+  for (dal::bv_visitor cv(mim.convex_index()); !cv.finished(); ++cv)
+    if (mim.int_method_of_element(cv) == getfem::im_none())
+      rejected_elt.add(cv);
+  mf.adapt(kept_dof, rejected_elt);
+  size_type nb_dof = mf.nb_dof();
+  cout << "nb_dof = " << nb_dof << endl;
+  
+  // Finite element method for the pressure p
+  getfem::mesh_fem pre_mf_p(mesh);
+  std::string FEM_p = PARAM.string_value("FEM_p", "fem for pressure");
+  pre_mf_p.set_finite_element(mesh.convex_index(),
+				 getfem::fem_descriptor(FEM_p));
+  getfem::partial_mesh_fem mf_p(pre_mf_p);
+  dal::bit_vector kept_dof_p = select_dofs_from_im(pre_mf_p, mim);
+  dal::bit_vector rejected_elt_p;
+  for (dal::bv_visitor cv(mim.convex_index()); !cv.finished(); ++cv)
+    if (mim.int_method_of_element(cv) == getfem::im_none())
+      rejected_elt_p.add(cv);
+  mf_p.adapt(kept_dof_p, rejected_elt_p);
+  size_type nb_dof_p = mf_p.nb_dof();
+  cout << "nb_dof_p = " << nb_dof_p << endl;
+  
+  // Finite element method for the rhs
+  getfem::mesh_fem mf_rhs(mesh);
+  std::string FEMR = PARAM.string_value("FEM_RHS", "finite element method");
+  mf_rhs.set_qdim(N);
+  mf_rhs.set_finite_element(mesh.convex_index(),
+			    getfem::fem_descriptor(FEMR));
+  size_type nb_dof_rhs = mf_rhs.nb_dof();
+  cout << "nb_dof_rhs = " << nb_dof_rhs << endl;
+  
+  // A P0 finite element
+  const getfem::mesh_fem &mf_P0 = getfem::classical_mesh_fem(mesh, 0);
+  
+  // Finite element method for the multipliers
+  getfem::mesh_fem pre_mf_mult(mesh);
+  std::string FEMM = PARAM.string_value("FEM_MULT", "fem for multipliers");
+  pre_mf_mult.set_qdim(N);
+  pre_mf_mult.set_finite_element(mesh.convex_index(),
+				 getfem::fem_descriptor(FEMM));
+  getfem::partial_mesh_fem mf_mult(pre_mf_mult);
+	
+	
+	
+	
+	
+  dal::bit_vector kept_dof_mult
+    = select_dofs_from_im(pre_mf_mult, mimbound, N-1);
+  mf_mult.adapt(kept_dof_mult, rejected_elt);
+	
+	
+  size_type nb_dof_mult = mf_mult.nb_dof();
+  cout << "nb_dof_mult = " << nb_dof_mult << endl;
+
+ /*
+	// Alternative : RANGE_BASIS ............. gmm 
+	sparse_matrix BBB(pre_mf.nb_dof(), pre_mf.nb_dof());
+	getfem::asm_mass_matrix(BBB, mim, pre_mf, pre_mf);
+	std::set<size_type> columns;
+	gmm::range_basis(BBB,columns,1.e-12);
+	dal::bit_vector kept_dof_mult;
+	for (std::set<size_type>:: iterator it=columns.begin();it!=columns.end();++it){
+		kept_dof_mult.add(*it);	
+	};
+	*/
+	
+	
+		
+	
+	
+	
+	
+	
+  // Mass matrix on the boundary
+  sparse_matrix B2(mf_rhs.nb_dof(), pre_mf.nb_dof());
+  getfem::asm_mass_matrix(B2, mimbound, mf_rhs, pre_mf);
+	
+  sparse_matrix B(nb_dof_mult, nb_dof);
+  getfem::asm_mass_matrix(B, mimbound, mf_mult, mf);
+	
+  int stabilized_dirichlet =
+    int(PARAM.int_value("STABILIZED_DIRICHLET", "Stabilized version of "
+			"Dirichlet condition or not"));
+  scalar_type dir_gamma0(0);
+  sparse_matrix MA(nb_dof_mult, nb_dof_mult), KA(nb_dof, nb_dof);
+  sparse_matrix BA(nb_dof_mult, nb_dof);
+	
+	
+	
+	// Stabilization of the pressure
+	sparse_matrix Mup(nb_dof_p, nb_dof);
+	sparse_matrix Mpp(nb_dof_p, nb_dof_p);
+	sparse_matrix Mpl(nb_dof_p, nb_dof_mult);
+	
+	
+	getfem::asm_mass_matrix(Mpp,mimbound,mf_p,mf_p);
+	asm_mass_matrix_pl(Mpl,mimbound,mf_p,mf_mult,ls);
+	asm_mass_matrix_up(Mup,mimbound,mf_p,mf,ls);
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+  if (stabilized_dirichlet > 0) {
+
+    sparse_row_matrix E1(nb_dof, nb_dof);
+
+    if (stabilized_dirichlet == 2) {
+      // Computation of the extrapolation operator
+      scalar_type min_ratio =
+	PARAM.real_value("MINIMAL_ELT_RATIO",
+			 "Threshold ratio for the fully stab Dirichlet");
+
+      cout << "Computation of the extrapolation operator" << endl;
+      dal::bit_vector elt_black_list, dof_black_list;
+      size_type nbe = mf_P0.nb_dof();
+      plain_vector ratios(nbe);
+      sparse_matrix MC1(nbe, nbe), MC2(nbe, nbe);
+      getfem::asm_mass_matrix(MC1, mim, mf_P0);
+      getfem::asm_mass_matrix(MC2, uncutmim, mf_P0);
+      for (size_type i = 0; i < nbe; ++i) {
+	size_type cv = mf_P0.first_convex_of_dof(i);
+	ratios[cv] = gmm::abs(MC1(i,i)) / gmm::abs(MC2(i,i));
+	if (ratios[cv] > 0 && ratios[cv] < min_ratio) elt_black_list.add(cv);
+      }
+      
+	
+      sparse_matrix EO(nb_dof, nb_dof);
+      sparse_row_matrix T1(nb_dof, nb_dof), EX(nb_dof, nb_dof);
+      asm_mass_matrix(EO, uncutmim, mf);
+
+      for (size_type i = 0; i < nb_dof; ++i) {
+	bool found = false;
+	getfem::mesh::ind_cv_ct ct = mf.convex_to_dof(i);
+	getfem::mesh::ind_cv_ct::const_iterator it;
+	for (it = ct.begin(); it != ct.end(); ++it)
+	  if (!elt_black_list.is_in(*it)) found = true;
+	if (found)
+	  { gmm::clear(gmm::mat_col(EO, i)); EO(i,i) = scalar_type(1); }
+	else
+	  dof_black_list.add(i);
+      }
+
+      bgeot::mesh_structure::ind_set is;
+      base_matrix Mloc;
+      for (dal::bv_visitor i(elt_black_list); !i.finished(); ++i) {
+	mesh.neighbours_of_convex(i, is);
+	size_type cv2 = size_type(-1);
+	scalar_type ratio = scalar_type(0);
+	for (size_type j = 0; j < is.size(); ++j) {
+	  scalar_type r = ratios[is[j]];
+	  if (r > ratio) { ratio = r; cv2 = is[j]; }
+	}
+	GMM_ASSERT1(cv2 != size_type(-1), "internal error");
+	compute_mass_matrix_extra_element(Mloc, uncutmim, mf, i, cv2);
+	for (size_type ii = 0; ii < gmm::mat_nrows(Mloc); ++ii) 
+	  for (size_type jj = 0; jj < gmm::mat_ncols(Mloc); ++jj)
+	    EX(mf.ind_dof_of_element(i)[ii], mf.ind_dof_of_element(cv2)[jj])
+	      += Mloc(ii, jj);
+      }
+
+      gmm::copy(gmm::identity_matrix(), E1);
+      gmm::copy(gmm::identity_matrix(), T1);
+      for (dal::bv_visitor i(dof_black_list); !i.finished(); ++i)
+	gmm::copy(gmm::mat_row(EX, i), gmm::mat_row(T1, i));
+
+      plain_vector BE(nb_dof), BS(nb_dof);
+      for (dal::bv_visitor i(dof_black_list); !i.finished(); ++i) {
+	BE[i] = scalar_type(1);
+	// TODO: store LU decomp.
+	double rcond; 
+	gmm::SuperLU_solve(EO, BS, BE, rcond);
+	gmm::mult(gmm::transposed(T1), BS, gmm::mat_row(E1, i));
+	BE[i] = scalar_type(0);
+      }
+      gmm::clean(E1, 1e-13);
+
+//       gmm::clean(EO, 1e-13); cout << "E0 = " << gmm::transposed(EO) << endl; getchar();
+//       cout << "T1 = " << T1 << endl; getchar();
+      
+
+      cout << "Extrapolation operator computed" << endl;
+
+//       sparse_row_matrix A1(nb_dof, nb_dof);
+//       gmm::mult(E1, gmm::transposed(EO), A1);
+//       gmm::clean(A1, 1e-13);
+//       cout << "A1 = " << A1 << endl;
+
+    }
+
+    dir_gamma0 = PARAM.real_value("DIRICHLET_GAMMA0",
+				  "Stabilization parameter for "
+				  "Dirichlet condition");
+    getfem::asm_mass_matrix(MA, mimbound, mf_mult);
+    asm_stabilization_mixed_term(BA, mimbound, mf, mf_mult, ls);
+    asm_stabilization_symm_term(KA, mimbound, mf, ls);
+    gmm::scale(MA, -dir_gamma0 * h);
+    gmm::scale(BA, -dir_gamma0 * h);
+    gmm::scale(KA, -dir_gamma0 * h);
+
+	gmm::scale(Mup,  dir_gamma0 * h);
+	gmm::scale(Mpp, -dir_gamma0 * h);  
+	gmm::scale(Mpl, dir_gamma0 * h);  
+	  
+	  
+    if (stabilized_dirichlet == 2) {
+      sparse_matrix A1(nb_dof_mult, nb_dof);
+      gmm::copy(BA, A1);
+      gmm::mult(gmm::transposed(E1), gmm::transposed(A1), gmm::transposed(BA));
+      sparse_matrix A2(nb_dof, nb_dof);
+      gmm::mult(gmm::transposed(E1), KA, A2);
+      gmm::mult(gmm::transposed(E1), gmm::transposed(A2), gmm::transposed(KA));
+    }
+  
+     gmm::add(BA, B);
+
+  }
+
+  // Tests
+  test_mim(mim, mf_rhs, false);
+  test_mim(mimbound, mf_rhs, true);
+
+  /* 
+   * Choose boundaries
+   */
+  getfem::mesh_region r;
+  getfem::outer_faces_of_mesh(mesh,r);
+
+  base_node BBmin, BBmax;
+  mesh.bounding_box(BBmin, BBmax);
+  cout << "mesh bounding box: " << BBmin << " ... " << BBmax << endl;
+
+  for (getfem::mr_visitor i(r); !i.finished(); ++i) {
+//  base_node G = gmm::mean_value(mesh.points_of_face_of_convex(i.cv(),i.f()));
+
+/*    if ((gmm::abs(G[0]-BBmin[0]) < 1e-7)||((gmm::abs(G[0]-BBmax[0]) < 1e-7))||((gmm::abs(G[1]-BBmin[1]) < 1e-7 && gmm::abs(G[0]-BBmin[0]) > h && gmm::abs(G[0]-BBmax[0]) > h))||((gmm::abs(G[1]-BBmax[1]) < 1e-7 && gmm::abs(G[0]-BBmax[0]) > h && gmm::abs(G[0]-BBmin[0]) > h))) {
+      mesh.region(DIRICHLET_BOUNDARY_NUM).add(i.cv(),i.f());
+ compteur = compteur +1;
+cout << compteur << " " << G[0] << " " << G[1] << endl;
+    }
+    else {
+      mesh.region(NEUMANN_BOUNDARY_NUM).add(i.cv(),i.f());
+    }
+*/
+     mesh.region(DIRICHLET_BOUNDARY_NUM).add(i.cv(),i.f());
+  }
+
+	
+  // Model system
+
+  getfem::model MS;
+
+
+ // Linearized elasticity brick
+ // MS.add_initialized_fixed_size_data("lambada", plain_vector(1, 0.0));    // lambada vu comme un scalaire egal à 0
+  MS.add_initialized_fixed_size_data("nu", plain_vector(1, nu));
+  MS.add_fem_variable("u", mf);
+  getfem::add_generic_elliptic_brick(MS, mim, "u", "nu");
+	
+	
+//	getfem::add_isotropic_linearized_elasticity_brick(MS, mim, "u", "lambada", "nu");	
+
+  // Linearized incompressibility condition brick
+  MS.add_fem_variable("p", mf_p);  // Adding the pressure as variable
+  add_linear_incompressibility(MS, mim, "u", "p");	
+	
+ /*
+  // Neumann condition on the box boundary
+  plain_vector G(nb_dof_rhs);
+  getfem::interpolation_function(mf_rhs, G, g_exact);
+
+  MS.add_initialized_fem_data("NeumannData", mf_rhs, G);
+  getfem::add_source_term_brick(MS, mim, "u", "NeumannData", NEUMANN_BOUNDARY_NUM);
+*/
+	
+/*  // Neumann condition on the level-set lsup
+  MS.add_multiplier("LAMBDAN", mf_mult, "u");
+  plain_vector G(nb_dof_rhs);
+  getfem::interpolation_function(mf_rhs, G, g_exact);
+  plain_vector G2(nb_dof);
+  gmm::mult(gmm::transposed(B2), G, G2);
+  MS.add_initialized_fem_data("Neumanndata", mf, G2);
+  //MS.add_initialized_fixed_size_data("B2data", gmm::transposed(B2));
+  //getfem::add_constraint_with_multipliers(MS, "u", "LAMBDAN", gmm::transposed(B2), G2);
+  getfem::add_source_term_brick(MS, mim, "u", "Neumanndata");
+*/
+	
+	
+	/*plain_vector G(nb_dof_rhs);
+	getfem::interpolation_function(mf_rhs, G, g_exact_ls);
+	plain_vector G2(mf_mult.nb_dof());
+	getfem::interpolation(mf_rhs, mf_mult,G,G2);
+
+	
+	MS.add_initialized_fem_data("Neumanndata", mf_mult, G2);
+	add_source_term_brick(MS,mimboundup,"u","Neumanndata", NEUMANN_BOUNDARY_NUM);
+	*/
+
+  // Dirichlet on the box boundary
+ 
+	
+//	cout << B << endl;
+	
+
+  // Dirichlet condition on the box boundary
+  MS.add_initialized_fem_data("Dirichletdata", mf, plain_vector(nb_dof));
+  getfem::add_Dirichlet_condition_with_multipliers(MS, mim, "u", mf, DIRICHLET_BOUNDARY_NUM, "Dirichletdata");
+
+
+  // Dirichlet condition on the level-set lsdown
+  MS.add_fem_variable("LAMBDA", mf_mult);
+  plain_vector H(nb_dof_rhs);
+  getfem::interpolation_function(mf_rhs, H, u_exact);
+ 	
+	plain_vector H3(nb_dof_mult);
+	getfem :: asm_source_term(H3,mimbound,mf_mult,mf_rhs,H);
+	
+	cout << mf_mult.nb_dof() << endl;
+  getfem::add_constraint_with_multipliers(MS, "u", "LAMBDA", B, H3);
+
+//	getfem::add_constraint_with_penalization(MS, "u", 1.e9, B, H3);
+	
+  if (stabilized_dirichlet > 0){
+       getfem::add_explicit_matrix(MS, "LAMBDA", "LAMBDA", MA);
+       getfem::add_explicit_matrix(MS, "u", "u", KA);
+	  
+	  getfem::add_explicit_matrix(MS, "u", "p", gmm::transposed(Mup));
+	  getfem::add_explicit_matrix(MS, "p", "p", Mpp);
+	  getfem::add_explicit_matrix(MS, "p", "LAMBDA", Mpl);
+	  getfem::add_explicit_matrix(MS, "LAMBDA", "p", gmm::transposed(Mpl));	  
+  }
+
+
+  // Volumic source term
+  plain_vector F(nb_dof_rhs); 
+  getfem::interpolation_function(mf_rhs, F, rhs);
+  MS.add_initialized_fem_data("VolumicData", mf_rhs, F);
+  getfem::add_source_term_brick(MS, mim, "u", "VolumicData");
+//cout << F2 << endl;  
+
+	
+
+ /* MS.assembly(getfem::model::BUILD_ALL);
+	MS.interval_of_variables("u");
+	MS.real_tangent_matrix();
+	*/
+	
+	
+	
+	
+  // Solving the problem
+  // cout << "Total number of unknown: " << final_brick->nb_dof() << endl;
+  gmm::iteration iter(1e-9, 1, 40000);
+  getfem::standard_solve(MS, iter);
+  plain_vector U(nb_dof);
+  gmm::copy(MS.real_variable("u"), U);
+	
+//  plain_vector LAMBDA(nb_dof_rhs);
+//  gmm::copy(MS.real_variable("LAMBDA"), LAMBDA);
+
+  // interpolation of the solution on mf_rhs
+  plain_vector Uint(nb_dof_rhs), Vint(nb_dof_rhs), Eint(nb_dof_rhs), Vex(nb_dof_rhs), Uex(nb_dof);
+  
+  getfem::interpolation_function(mf_rhs, Vex, u_exact);
+  getfem::interpolation(mf_rhs, mf, Vex, Uex);
+
+  getfem::interpolation_function(mf_rhs, Vint, u_exact);
+  getfem::interpolation(mf, mf_rhs, U, Uint);
+  for (size_type i = 0; i < nb_dof_rhs; ++i) {
+       Eint[i] = gmm::abs(Uint[i] - Vint[i]);
+  }
+
+
+  // computation of error on u.
+  double errmax = 0.0, exactmax = 0.0;
+  for (size_type i = 0; i < nb_dof_rhs; ++i)
+    if (ls_value(mf_rhs.point_of_dof(i)) >= 0.0) {
+      errmax = std::max(errmax, Eint[i]);
+      exactmax = std::max(exactmax, Vint[i]);
+    }
+    else Eint[i] = 0.0;
+  cout << "Linfty error: (absolute) " << errmax << \
+						"(relative) " <<100.0 * errmax / exactmax << "%" << endl;
+
+  
+  cout << "L2 error: " << getfem::asm_L2_dist(mim, mf, U, mf_rhs, Vint) <<
+	"(relative) " << 100.0
+    * getfem::asm_L2_dist(mim, mf, U, mf_rhs, Vint)
+    / getfem::asm_L2_norm(mim, mf_rhs, Vint) << "%" << endl;
+	
+	
+  cout << "H1 error: " << getfem::asm_H1_dist(mim, mf, U, mf_rhs, Vint) <<
+	"(relative) " << 100.0
+    * getfem::asm_H1_dist(mim, mf, U, mf_rhs, Vint)
+    / getfem::asm_H1_norm(mim, mf_rhs, Vint) << "%" << endl;
+
+/*
+  // computation of error on multipliers.
+cout << "OKKKK" << endl;
+
+  gmm::resize(BA, nb_dof_mult, nb_dof_rhs); gmm::clear(BA);
+  gmm::resize(KA, nb_dof_rhs, nb_dof_rhs);  gmm::clear(KA);
+  gmm::resize(B, nb_dof_mult, nb_dof_mult); gmm::clear(B);
+  
+cout << "OKIDOC" << endl;
+  
+  asm_stabilization_mixed_term(BA, mimbounddown, mf_rhs, mf_mult, lsdown);
+
+cout << "OKIDOC" << endl;
+
+  getfem::asm_mass_matrix(B, mimbounddown, mf_mult, mf_mult);
+  asm_stabilization_symm_term(KA, mimbounddown, mf_rhs, lsdown);
+
+  scalar_type err_l2_mult =
+    ( gmm::vect_sp(B, LAMBDA, LAMBDA) + gmm::vect_sp(KA, Vint, Vint)
+      + 2 * gmm::vect_sp(BA, Vint, LAMBDA) ) / gmm::vect_sp(KA, Vint, Vint);
+
+
+    
+  cout << "L2 error on multipliers: "
+       << gmm::sgn(err_l2_mult) * gmm::sqrt(gmm::abs(err_l2_mult)) * 100.0
+       << "%" << endl;
+  // cout << "L2^2 max on multipliers: " << gmm::vect_sp(KA, Vint, Vint);
+  // cout << "  LAMBDA^2: " << gmm::vect_sp(B, LAMBDA, LAMBDA);
+  // cout << "  Double produit: " <<  2*gmm::vect_sp(BA, Vint, LAMBDA)<<endl;
+
+
+
+*/
+
+  // exporting solution in vtk format.
+  {
+    getfem::vtk_export exp("xfem_dirichlet.vtk", (2==1));
+    exp.exporting(mf); 
+    exp.write_point_data(mf, U, "solution");
+    //cout << "export done, you can view the data file with (for example)\n"
+    //  "mayavi -d xfem_dirichlet.vtk -f WarpScalar -m BandedSurfaceMap "
+    //  "-m Outline\n";
+  }
+  // exporting exact solution in vtk format.
+  {
+    getfem::vtk_export exp("xfem_dirichlet_exact.vtk", (2==1));
+    exp.exporting(mf); 
+    exp.write_point_data(mf, Uex, "solution");
+
+    //cout << "export done, you can view the data file with (for example)\n"
+    //  "mayavi -d xfem_dirichlet.vtk -f WarpScalar -m BandedSurfaceMap "
+    //  "-m Outline\n";
+  }
+  // exporting error in vtk format.
+  {
+    getfem::vtk_export exp("xfem_dirichlet_error.vtk", (2==1));
+    exp.exporting(mf_rhs); 
+    exp.write_point_data(mf_rhs, Eint, "error");
+    //cout << "export done, you can view the data file with (for example)\n"
+    //  "mayavi -d xfem_dirichlet_error.vtk -f WarpScalar -m BandedSurfaceMap "
+    //  "-m Outline\n";
+  }
+/*  // exporting multipliers in vtk format.
+  {
+    getfem::vtk_export exp("xfem_dirichlet_mult.vtk", (2==1));
+    exp.exporting(mf_mult); 
+    exp.write_point_data(mf_mult, LAMBDA, "multipliers");
+    //cout << "export done, you can view the data file with (for example)\n"
+    //  "mayavi -d xfem_dirichlet_mult.vtk -f WarpScalar -m BandedSurfaceMap "
+    //  "-m Outline\n";
+  }
+*/
+
+  lsmf.write_to_file("xfem_dirichlet_ls.mf", true);
+  gmm::vecsave("xfem_dirichlet_ls.U", ls.values());
+
+
+/*
+  unsigned nrefine = mf.linked_mesh().convex_index().card() < 200 ? 32 : 4;
+  if (0) {
+    //cout << "saving the slice solution for matlab\n";
+    getfem::stored_mesh_slice sl, sl0,sll;
+    
+    
+    getfem::mesh_slicer slicer(mf.linked_mesh());
+    getfem::slicer_build_stored_mesh_slice sbuild(sl);
+    getfem::mesh_slice_cv_dof_data<plain_vector> mfU(mf,U);
+    getfem::slicer_isovalues iso(mfU, 0.0, 0);
+    getfem::slicer_build_stored_mesh_slice sbuild0(sl0);
+    
+    slicer.push_back_action(sbuild);  // full slice in sl
+    slicer.push_back_action(iso);     // extract isosurface 0
+    slicer.push_back_action(sbuild0); // store it into sl0
+    slicer.exec(nrefine, mf.convex_index());
+    
+    getfem::mesh_slicer slicer2(mf.linked_mesh());
+    getfem::mesh_slice_cv_dof_data<plain_vector> 
+      mfL(ls.get_mesh_fem(), ls.values());
+    getfem::slicer_isovalues iso2(mfL, 0.0, 0);
+    getfem::slicer_build_stored_mesh_slice sbuildl(sll);
+    slicer2.push_back_action(iso2);     // extract isosurface 0
+    slicer2.push_back_action(sbuildl); // store it into sl0
+    slicer2.exec(nrefine, mf.convex_index());
+    
+    sl.write_to_file("xfem_dirichlet.sl", true);
+    sl0.write_to_file("xfem_dirichlet.sl0", true);
+    sll.write_to_file("xfem_dirichlet.sll", true);
+    plain_vector UU(sl.nb_points()), LL(sll.nb_points()); 
+    sl.interpolate(mf, U, UU);
+    gmm::vecsave("xfem_dirichlet.slU", UU);
+    // gmm::scale(LAMBDA, 0.005);
+    sll.interpolate(mf_mult, LAMBDA, LL);
+    gmm::vecsave("xfem_dirichlet.slL", LL);
+  }
+*/
+  return 0; 
+}
diff --git a/contrib/xfem_contact/xfem_stokes.param b/contrib/xfem_contact/xfem_stokes.param
new file mode 100644
index 0000000..0ea3008
--- /dev/null
+++ b/contrib/xfem_contact/xfem_stokes.param
@@ -0,0 +1,76 @@
+% -*- matlab -*- (enables emacs matlab mode)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% parameters for program xfem_dirichlet                                   %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+NU = 1.0;	        % Viscosity coefficient.
+
+QUAD = 0;
+N = 2;
+RADIUS = 0.21;             % radius of the real circular domain.
+LEVEL_SET_DEGREE = 2;      % Degree of the piecewise polynomial.
+                           % defining the level set.
+EXACT_SOL = 4;             % Which exact solution.
+SIMPLIFY_LEVEL_SET = 0;
+STABILIZED_DIRICHLET = 1;    % 0 = no, 1 = Barbosa-Hughes stab, 2 = fully stab.
+MINIMAL_ELT_RATIO = 0.005;   % threshold ratio for the fully stab Dirichlet.
+DIRICHLET_GAMMA0 = 0.01;     % Barbosa Hughes stabilization parameter
+		   
+OK = 0;
+
+if (N == 1) 
+  MESH_FILE='structured:GT="GT_PK(1,1)";SIZES=[1];NOISED=0;NSUBDIV=[10]';
+  IM = 'IM_GAUSS1D(6)';     % Integration method.
+  IM_SIMPLEX = IM;          % Integration method on sub-triangles.
+  FEM = 'FEM_PK(1,1)';      % Finite element method for the unknown.
+  FEM_RHS = FEM;            % Finite element method for the rhs
+  FEM_MULT = 'FEM_PK(1,1)'; % Finite element method for multipliers
+  OK = 1;
+end;
+
+if (N == 2 && QUAD)
+  MESH_FILE='structured:GT="GT_QK(2,1)";SIZES=[1,1];NOISED=0;NSUBDIV=[40,40]';
+  IM = 'IM_GAUSS_PARALLELEPIPED(2,6)';        % Integration method.
+  IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),2)';   % Integration method on sub-triangles.
+  FEM = 'FEM_QK(2,2)';      % Finite element method for the velocity u.
+  FEM_RHS = 'FEM_QK(2,2)';     % Finite element method for the rhs
+  FEM_p = 'FEM_QK(2,1)';      % Finite element method for the pressure p.
+%  FEM = 'FEM_PRODUCT(FEM_PK_WITH_CUBIC_BUBBLE(1,1), FEM_PK_WITH_CUBIC_BUBBLE(1,1))';      % Finite element method for the unknown.
+  FEM_MULT = 'FEM_QK(2,0)'; % Finite element method for multipliers
+  OK = 1;
+end;
+
+if (N == 2 && ~QUAD)
+  MESH_FILE='structured:GT="GT_PK(2,1)";SIZES=[1,1];NOISED=0;NSUBDIV=[20,20]';
+%  IM = 'IM_HCT_COMPOSITE(IM_TRIANGLE(6))';
+  IM = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(9),2)';    % Integration method.
+  IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(9),2)';
+  FEM =     'FEM_PK(2,2)';      % Finite element method for the velocity u.
+  FEM_RHS = 'FEM_PK(2,2)';  % Finite element method for the rhs
+  FEM_p =   'FEM_PK(2,1)';      % Finite element method for the pressure p.
+  FEM_MULT = 'FEM_PK(2,1)'; % Finite element method for multipliers
+  OK = 1;
+end;
+
+if (N == 3 && ~QUAD)
+  MESH_FILE='structured:GT="GT_PK(3,1)";SIZES=[1,1,1];NOISED=0;NSUBDIV=[3,3,3]';
+  IM = 'IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(6),1)';    % Integration method.
+  IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(6),1)'; 
+  FEM = 'FEM_PK(3,2)';      % Finite element method for the unknown.
+  FEM_RHS = FEM;            % Finite element method for the rhs
+  FEM_MULT = 'FEM_PK(3,1)'; % Finite element method for multipliers
+  FEM_MULT_DEGREE = 1;      % Degree for multipliers definition
+   OK = 1;
+end;
+
+if (~OK)
+  error ('Adapt the parameter file first');
+end;
+
+
+%%%%%   saving parameters                                             %%%%%
+ROOTFILENAME = 'xfem_dirichlet';     % Root of data files.
+VTK_EXPORT = 2 % export solution to a .vtk file ?
+
+%  FEM = 'FEM_PK_WITH_CUBIC_BUBBLE(2,1)';
+%  FEM = 'FEM_P1_PIECEWISE_LINEAR_BUBBLE';
\ No newline at end of file
diff --git a/contrib/xfem_large_strain/Makefile.am b/contrib/xfem_large_strain/Makefile.am
index 5e909a3..a299d3d 100644
--- a/contrib/xfem_large_strain/Makefile.am
+++ b/contrib/xfem_large_strain/Makefile.am
@@ -1,11 +1,14 @@
 # SUBDIRS = 
 
-check_PROGRAMS = xfem_large_strain linear_incomp_xfem vertex_large_strain 
+check_PROGRAMS = xfem_large_strain nonlinear_incomp_xfem vertex_large_strain linear_incomp_xfem
 CLEANFILES = 
 
 xfem_large_strain_SOURCES = xfem_large_strain.cc
 linear_incomp_xfem_SOURCES = linear_incomp_xfem.cc
-vertex_large_strain_SOURCES = vertex_large_strain.cc getfem_nonlinear_elastoptim.h
+nonlinear_incomp_xfem_SOURCES = nonlinear_incomp_xfem.cc
+vertex_large_strain_SOURCES = vertex_large_strain.cc \
+                              getfem_nonlinear_elastoptim.h \
+                              compressible_getfem_nonlinear_elastoptim.h
 SUPLDFLAGS = @SUPLDFLAGS@
 INCLUDES = -I$(top_srcdir)/src -I../../src $(MUMPS_CFLAGS)
 LDADD    = ../../src/libgetfem.la -lm $(MUMPS_LIBS) $(SUPLDFLAGS)
@@ -13,9 +16,9 @@ LDADD    = ../../src/libgetfem.la -lm $(MUMPS_LIBS) $(SUPLDFLAGS)
 TESTS = $(top_srcdir)/contrib/xfem_large_strain/xfem_large_strain.pl
 EXTRA_DIST = \
 	xfem_large_strain.pl            \
-        vertex_large_strain.param       \
+	vertex_large_strain.param       \
 	xfem_large_strain.param  	\
-	linear_incomp_xfem.param        \
-        vertex_large_strain.param
+	nonlinear_incomp_xfem.param        \
+	vertex_large_strain.param
 
 TESTS_ENVIRONMENT = perl
diff --git a/contrib/xfem_large_strain/Makefile.in b/contrib/xfem_large_strain/Makefile.in
index 0dbd618..595e6ff 100644
--- a/contrib/xfem_large_strain/Makefile.in
+++ b/contrib/xfem_large_strain/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -36,7 +36,8 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 check_PROGRAMS = xfem_large_strain$(EXEEXT) \
-	linear_incomp_xfem$(EXEEXT) vertex_large_strain$(EXEEXT)
+	nonlinear_incomp_xfem$(EXEEXT) vertex_large_strain$(EXEEXT) \
+	linear_incomp_xfem$(EXEEXT)
 subdir = contrib/xfem_large_strain
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -59,6 +60,11 @@ linear_incomp_xfem_LDADD = $(LDADD)
 am__DEPENDENCIES_1 =
 linear_incomp_xfem_DEPENDENCIES = ../../src/libgetfem.la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_nonlinear_incomp_xfem_OBJECTS = nonlinear_incomp_xfem.$(OBJEXT)
+nonlinear_incomp_xfem_OBJECTS = $(am_nonlinear_incomp_xfem_OBJECTS)
+nonlinear_incomp_xfem_LDADD = $(LDADD)
+nonlinear_incomp_xfem_DEPENDENCIES = ../../src/libgetfem.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 am_vertex_large_strain_OBJECTS = vertex_large_strain.$(OBJEXT)
 vertex_large_strain_OBJECTS = $(am_vertex_large_strain_OBJECTS)
 vertex_large_strain_LDADD = $(LDADD)
@@ -91,9 +97,11 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(linear_incomp_xfem_SOURCES) $(vertex_large_strain_SOURCES) \
-	$(xfem_large_strain_SOURCES)
+SOURCES = $(linear_incomp_xfem_SOURCES) \
+	$(nonlinear_incomp_xfem_SOURCES) \
+	$(vertex_large_strain_SOURCES) $(xfem_large_strain_SOURCES)
 DIST_SOURCES = $(linear_incomp_xfem_SOURCES) \
+	$(nonlinear_incomp_xfem_SOURCES) \
 	$(vertex_large_strain_SOURCES) $(xfem_large_strain_SOURCES)
 ETAGS = etags
 CTAGS = ctags
@@ -124,6 +132,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -142,6 +151,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -158,6 +168,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -222,6 +233,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -257,7 +269,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -280,16 +291,20 @@ top_srcdir = @top_srcdir@
 CLEANFILES = 
 xfem_large_strain_SOURCES = xfem_large_strain.cc
 linear_incomp_xfem_SOURCES = linear_incomp_xfem.cc
-vertex_large_strain_SOURCES = vertex_large_strain.cc getfem_nonlinear_elastoptim.h
+nonlinear_incomp_xfem_SOURCES = nonlinear_incomp_xfem.cc
+vertex_large_strain_SOURCES = vertex_large_strain.cc \
+                              getfem_nonlinear_elastoptim.h \
+                              compressible_getfem_nonlinear_elastoptim.h
+
 INCLUDES = -I$(top_srcdir)/src -I../../src $(MUMPS_CFLAGS)
 LDADD = ../../src/libgetfem.la -lm $(MUMPS_LIBS) $(SUPLDFLAGS)
 TESTS = $(top_srcdir)/contrib/xfem_large_strain/xfem_large_strain.pl
 EXTRA_DIST = \
 	xfem_large_strain.pl            \
-        vertex_large_strain.param       \
+	vertex_large_strain.param       \
 	xfem_large_strain.param  	\
-	linear_incomp_xfem.param        \
-        vertex_large_strain.param
+	nonlinear_incomp_xfem.param        \
+	vertex_large_strain.param
 
 TESTS_ENVIRONMENT = perl
 all: all-am
@@ -335,13 +350,16 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-linear_incomp_xfem$(EXEEXT): $(linear_incomp_xfem_OBJECTS) $(linear_incomp_xfem_DEPENDENCIES) 
+linear_incomp_xfem$(EXEEXT): $(linear_incomp_xfem_OBJECTS) $(linear_incomp_xfem_DEPENDENCIES) $(EXTRA_linear_incomp_xfem_DEPENDENCIES) 
 	@rm -f linear_incomp_xfem$(EXEEXT)
 	$(CXXLINK) $(linear_incomp_xfem_OBJECTS) $(linear_incomp_xfem_LDADD) $(LIBS)
-vertex_large_strain$(EXEEXT): $(vertex_large_strain_OBJECTS) $(vertex_large_strain_DEPENDENCIES) 
+nonlinear_incomp_xfem$(EXEEXT): $(nonlinear_incomp_xfem_OBJECTS) $(nonlinear_incomp_xfem_DEPENDENCIES) $(EXTRA_nonlinear_incomp_xfem_DEPENDENCIES) 
+	@rm -f nonlinear_incomp_xfem$(EXEEXT)
+	$(CXXLINK) $(nonlinear_incomp_xfem_OBJECTS) $(nonlinear_incomp_xfem_LDADD) $(LIBS)
+vertex_large_strain$(EXEEXT): $(vertex_large_strain_OBJECTS) $(vertex_large_strain_DEPENDENCIES) $(EXTRA_vertex_large_strain_DEPENDENCIES) 
 	@rm -f vertex_large_strain$(EXEEXT)
 	$(CXXLINK) $(vertex_large_strain_OBJECTS) $(vertex_large_strain_LDADD) $(LIBS)
-xfem_large_strain$(EXEEXT): $(xfem_large_strain_OBJECTS) $(xfem_large_strain_DEPENDENCIES) 
+xfem_large_strain$(EXEEXT): $(xfem_large_strain_OBJECTS) $(xfem_large_strain_DEPENDENCIES) $(EXTRA_xfem_large_strain_DEPENDENCIES) 
 	@rm -f xfem_large_strain$(EXEEXT)
 	$(CXXLINK) $(xfem_large_strain_OBJECTS) $(xfem_large_strain_LDADD) $(LIBS)
 
@@ -352,6 +370,7 @@ distclean-compile:
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/linear_incomp_xfem.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nonlinear_incomp_xfem.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vertex_large_strain.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xfem_large_strain.Po at am__quote@
 
@@ -515,14 +534,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -572,10 +592,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/xfem_large_strain/compressible_getfem_nonlinear_elastoptim.h b/contrib/xfem_large_strain/compressible_getfem_nonlinear_elastoptim.h
new file mode 100644
index 0000000..03b2fa2
--- /dev/null
+++ b/contrib/xfem_large_strain/compressible_getfem_nonlinear_elastoptim.h
@@ -0,0 +1,863 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+
+
+#include "getfem/getfem_modeling.h"
+#include "getfem/getfem_models.h"
+#include "getfem/getfem_assembling_tensors.h"
+#include "getfem/getfem_derivatives.h"
+#include "getfem/getfem_interpolation.h"
+#include "getfem/getfem_assembling.h" 
+#include "getfem/getfem_export.h"   
+#include "getfem/getfem_derivatives.h"
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_model_solvers.h"
+#include "getfem/getfem_nonlinear_elasticity.h"
+#include "getfem/getfem_mesh_im_level_set.h"
+#include "getfem/getfem_mesh_fem_level_set.h"
+#include "getfem/getfem_mesh_fem_product.h"
+#include "getfem/getfem_mesh_fem_global_function.h"
+#include "getfem/getfem_spider_fem.h"
+#include "getfem/getfem_mesh_fem_sum.h"
+#include "getfem/getfem_superlu.h"
+#include "gmm/gmm.h"
+#include "gmm/gmm_inoutput.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
+namespace getfem {
+
+
+
+  //  inline scalar_type mat_euclidean_sp(base_matrix &Sigma, base_matrix &Ealpha) {
+  //  return gmm::vect_sp((std::vector<scalar_type> &)Sigma, (std::vector<scalar_type> &)Ealpha);
+  //
+  //  }
+
+
+  
+
+//=======================================================================
+//=                /******************************/                     =
+//=  compressible  /*   Term 1 d(L)/d(alpha)     */                     =
+//=                /******************************/                     =
+//=======================================================================
+
+
+ template<typename VECT1, typename VECT2>
+  class elasticity_nonlinear_optim_term_compressible1
+    : public getfem::nonlinear_elem_term {
+    const mesh_fem &mf_u;
+    std::vector<scalar_type> U, U_ls;
+    const mesh_fem *mf_data;
+    const VECT2 &PARAMS;
+    const getfem::level_set &ls;
+    size_type N, cv_old, NFem;
+    const abstract_hyperelastic_law &AHL;
+    base_vector params, coeff, valP, u_ls;
+    base_matrix E, Sigma, gradU, gradU_ls, U_ls_theta;// U_ls_theta le terme U_ls multiplier par le vecteur 
+    base_tensor tt;
+    bgeot::multi_index sizes_;
+    mesher_level_set mls_x, mls_y;
+  public:
+   elasticity_nonlinear_optim_term_compressible1 
+    (const mesh_fem &mf_u_, const VECT1 &U_, const VECT1 &U_ls_,
+     const mesh_fem *mf_data_, const VECT2 &PARAMS_,
+     const abstract_hyperelastic_law &AHL_, const getfem::level_set &ls_) 
+      : mf_u(mf_u_), U(mf_u_.nb_basic_dof()), U_ls(mf_u_.nb_basic_dof()),
+	mf_data(mf_data_), PARAMS(PARAMS_), ls(ls_),
+	N(mf_u_.linked_mesh().dim()), NFem(mf_u_.get_qdim()), AHL(AHL_),
+	params(AHL_.nb_params()), u_ls(N), E(N, N), Sigma(N, N),
+	gradU(NFem, N), gradU_ls(NFem, N),
+	tt(N, N, N, N), sizes_(NFem, N, NFem, N) {
+      sizes_.resize(1); sizes_[0] = 1;
+      cv_old = size_type(-1);
+      mf_u.extend_vector(U_, U);
+      mf_u.extend_vector(U_ls_, U_ls);
+      if (gmm::vect_size(PARAMS) == AHL_.nb_params())
+	gmm::copy(PARAMS, params);
+    }
+    const bgeot::multi_index &sizes() const { return sizes_; }
+    virtual void compute(getfem::fem_interpolation_context& ctx,
+			 bgeot::base_tensor &t) {
+      size_type cv = ctx.convex_num();
+      coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector	(U, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation_grad(ctx, coeff, gradU, mf_u.get_qdim());
+      
+      gmm::mult(gmm::transposed(gradU), gradU, E);
+      gmm::add(gradU, E);
+      gmm::add(gmm::transposed(gradU), E);
+      gmm::scale(E, scalar_type(0.5));
+      
+      for (unsigned int alpha = 0; alpha < N; ++alpha)
+	gradU(alpha, alpha)+= scalar_type(1);
+
+      //cout << "------------------------------- " <<  endl;
+      //cout << "Le Tenseur F :" << gradU  <<endl;
+      //cout << "------------------------------- " <<  endl;
+
+ 
+      scalar_type J = gmm::lu_det(gradU);
+      // Computation of d/dalpha (grad U)
+
+      coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector
+		(U_ls, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation_grad(ctx, coeff, gradU_ls, mf_u.get_qdim());
+      if (cv != cv_old) {
+	  mls_x = ls.mls_of_convex(cv, 1);
+	  mls_y = ls.mls_of_convex(cv, 0);
+	  cv_old = cv;
+	}
+      scalar_type x = mls_x(ctx.xref());
+     // cout << "------------------------------- " <<  endl;
+     // cout << "la valeur (compressible) x :" <<  x <<endl;
+     // cout << "------------------------------- " <<  endl;
+      scalar_type y = mls_y(ctx.xref());
+     // cout << "------------------------------- " <<  endl;
+    //  cout << "la valeur (compressible) y :" << y  <<endl;
+    //  cout << "------------------------------- " <<  endl;
+      scalar_type r2 = x*x+y*y;
+      //cout << "------------------------------- " <<  endl;
+      //cout << "la valeur (compressible) r2 :" << r2  <<endl;
+      //cout << "------------------------------- " <<  endl;
+      gmm::scale(gradU_ls, log(r2) / scalar_type(2));
+
+      ctx.pf()->interpolation(ctx, coeff, u_ls, mf_u.get_qdim());
+      base_vector Runit(2);
+      Runit[0] = x / r2; Runit[1] = y / r2; 
+      gmm::rank_one_update(gradU_ls, Runit, u_ls);
+
+
+      // Computation of d(E)/d(alpha)
+      
+      base_matrix Ealpha(N, N);
+      gmm::mult(gmm::transposed(gradU_ls), gradU, Sigma);
+      /* cout << "-------------------------------------- " << endl; */
+      /* cout << "Le Tenseur gradU_ls :" <<   gradU_ls     << endl; */
+      /* cout << "-------------------------------------- " << endl; */
+      gmm::add(Sigma, gmm::transposed(Sigma), Ealpha);
+      gmm::scale(Ealpha, 0.5);
+      //cout << "-------------------------------------- " << endl;
+      //cout << "Le Tenseur d(E)/d(alpha) :"   << Ealpha  << endl;
+      //cout << "-------------------------------------- " << endl;
+      // The term sigma:dE/dalpha
+      AHL.sigma(E, Sigma, params, J);
+      //cout << "-------------------------------------- " << endl;
+      //cout << " la valeur du tenseur sigma :" << Sigma  << endl;
+      //cout << "-------------------------------------- " << endl;
+      t[0] = mat_euclidean_sp(Sigma, Ealpha);
+     // cout << "============================================================================ " <<  endl;
+     // cout << "The term sigma:dE/dalpha :" << t[0] << endl;
+     // cout << "============================================================================ " <<  endl;
+     
+    }
+    virtual void prepare(fem_interpolation_context& ctx, size_type nb) {
+      GMM_ASSERT1(nb != 0, "Oops");
+      /*if (nb == 1) {
+	size_type cv = ctx.convex_num();
+	
+	if (cv != cv_old) {
+	  mls_x = ls.mls_of_convex(cv, 1);
+	  mls_y = ls.mls_of_convex(cv, 0);
+	  cv_old = cv;
+	}
+
+      } else*/
+      if (mf_data) {
+	size_type cv = ctx.convex_num();
+	size_type nbp = AHL.nb_params();
+	coeff.resize(mf_data->nb_basic_dof_of_element(cv)*nbp);
+	for (size_type i = 0; i < mf_data->nb_basic_dof_of_element(cv); ++i)
+	  for (size_type k = 0; k < nbp; ++k)
+	    coeff[i * nbp + k]
+	      = PARAMS[mf_data->ind_basic_dof_of_element(cv)[i]*nbp+k];
+	ctx.pf()->interpolation(ctx, coeff, params, dim_type(nbp));
+      }
+    } 
+    
+  };
+
+/***********************************************************************************************************************/
+/***********************************************************************************************************************/
+/***********************************************************************************************************************/
+/***********************************************************************************************************************/
+/***********************************************************************************************************************/
+
+  //===================================================================
+  //=                                                                 =
+  //= Compressible Terms of the tangent matrix for optimization       =
+  //=                                                                 =
+  //===================================================================
+
+//==================================================================================
+//=     /***********************************************************/              =
+//=     /* Term 2 d^2(L)/d(alpha)d(u^h)   The part [*]:Grad(v^h)   */              = Compressible
+//=     /***********************************************************/              =
+//==================================================================================
+
+
+ template<typename VECT1, typename VECT2>
+  class elasticity_nonlinear_optim_term_compressible2
+    : public getfem::nonlinear_elem_term {
+    const mesh_fem &mf_u;
+    std::vector<scalar_type> U, U_ls;
+    const mesh_fem *mf_data;
+    const VECT2 &PARAMS;
+    const getfem::level_set &ls;
+    size_type N, cv_old, NFem;
+    const abstract_hyperelastic_law &AHL;
+    base_vector params, coeff,  u_ls;
+    base_matrix E, Sigma, gradU, gradU_ls, U_ls_theta;// U_ls_theta le terme U_ls multiplier par le vecteur 
+    base_tensor GSigma;
+    bgeot::multi_index sizes_;
+    mesher_level_set mls_x, mls_y;
+  public:
+    elasticity_nonlinear_optim_term_compressible2
+    (const mesh_fem &mf_u_, const VECT1 &U_, const VECT1 &U_ls_, 
+     const mesh_fem *mf_data_, const VECT2 &PARAMS_,
+     const abstract_hyperelastic_law &AHL_, const getfem::level_set &ls_) 
+      : mf_u(mf_u_), U(mf_u_.nb_basic_dof()), U_ls(mf_u_.nb_basic_dof()),
+	mf_data(mf_data_), PARAMS(PARAMS_), ls(ls_),
+	N(mf_u_.linked_mesh().dim()), NFem(mf_u_.get_qdim()), AHL(AHL_),
+	params(AHL_.nb_params()), u_ls(N), E(N, N), Sigma(N, N),
+	gradU(NFem, N), gradU_ls(NFem, N),
+	GSigma(N, N, N, N) ,sizes_(NFem, N, NFem, N) {
+      sizes_.resize(2); sizes_[0] = short_type(N); sizes_[1] = short_type(N);
+      cv_old = size_type(-1);
+      mf_u.extend_vector(U_, U);
+      mf_u.extend_vector(U_ls_, U_ls);
+      if (gmm::vect_size(PARAMS) == AHL_.nb_params())
+	gmm::copy(PARAMS, params);
+    }
+    const bgeot::multi_index &sizes() const {  return sizes_; }
+    virtual void compute(getfem::fem_interpolation_context& ctx,
+			 bgeot::base_tensor &t) {
+      size_type cv = ctx.convex_num();
+      coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector
+		(U, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation_grad(ctx, coeff, gradU, mf_u.get_qdim());
+
+      // Computation of tensor E 
+
+      gmm::mult(gmm::transposed(gradU), gradU, E);
+      gmm::add(gradU, E);
+      gmm::add(gmm::transposed(gradU), E);
+      gmm::scale(E, scalar_type(0.5));
+
+      // Computation of J determinant of tensor F 
+
+      for (unsigned int alpha = 0; alpha < N; ++alpha)
+	gradU(alpha, alpha)=gradU(alpha, alpha)+ scalar_type(1); // gradU contient le tenseur F
+      scalar_type J = gmm::lu_det(gradU);
+      
+
+      // Computation of d(gradU)/d(alpha) 
+
+      coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector
+		(U_ls, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation_grad(ctx, coeff, gradU_ls, mf_u.get_qdim());
+
+      if (cv != cv_old) {
+	  mls_x = ls.mls_of_convex(cv, 1);
+	  mls_y = ls.mls_of_convex(cv, 0);
+	  cv_old = cv;
+      }
+
+      scalar_type x = mls_x(ctx.xref());
+      
+      scalar_type y = mls_y(ctx.xref());
+      
+
+      scalar_type r2 = x*x+y*y;
+      gmm::scale(gradU_ls, 0.5*log(r2));
+
+      ctx.pf()->interpolation(ctx, coeff, u_ls, mf_u.get_qdim());
+      base_vector Runit(2);
+      Runit[0] = x / r2; Runit[1] = y / r2; 
+      gmm::rank_one_update(gradU_ls, Runit, u_ls); // gradU_ls contain d(gradU)/d(alpha) 
+
+      // Computation of d(E)/d(alpha) 
+      
+      base_matrix Ealpha(N, N), GsEalpha(N, N);
+      gmm::mult(gmm::transposed(gradU_ls), gradU, Sigma);
+      gmm::add(Sigma, gmm::transposed(Sigma), Ealpha);
+      gmm::scale(Ealpha, 0.5);
+
+      // The term sigma.d(E)/d(alpha)
+      base_matrix eas(N,N);
+      AHL.sigma(E, Sigma, params, J);
+      gmm::mult(Ealpha, Sigma, eas);
+
+      // The term grad_sigma:d(E)/d(alpha)
+      scalar_type temp ;
+      AHL.grad_sigma(E, GSigma, params, J);
+      for (size_type i = 0; i < N; ++i)
+	for (size_type j = 0; j < N; ++j){
+	  temp = 0.0;
+	  for (size_type k = 0; k < N; ++k)
+	    for (size_type l = 0; l < N; ++l) {
+	      temp += GSigma(i,j,k,l) * Ealpha(l,k);	     	
+	    }
+	  GsEalpha(i,j)=temp;
+	}
+
+      // The term F.grad_sigma:d(E)/d(alpha)
+      gmm::mult(gradU, GsEalpha, Sigma);
+      gmm::add(Sigma, eas);// on a plus besoin du contenue de GsEalpha
+            
+      
+      for (size_type i = 0; i < N; ++i)
+	for (size_type j = 0; j < N; ++j)
+	  t(i,j) = eas(i, j);
+    }
+
+    virtual void prepare(fem_interpolation_context& ctx, size_type nb) {
+      GMM_ASSERT1(nb != 0, "Oops");
+     if (mf_data) {
+	size_type cv = ctx.convex_num();
+	size_type nbp = AHL.nb_params();
+	coeff.resize(mf_data->nb_basic_dof_of_element(cv)*nbp);
+	for (size_type i = 0; i < mf_data->nb_basic_dof_of_element(cv); ++i)
+	  for (size_type k = 0; k < nbp; ++k)
+	    coeff[i * nbp + k]
+	      = PARAMS[mf_data->ind_basic_dof_of_element(cv)[i]*nbp+k];
+	ctx.pf()->interpolation(ctx, coeff, params, dim_type(nbp));
+      }
+    } 
+    
+  };
+
+
+//==============================================================================================
+//=     /***********************************************************************/              =
+//=     /* Term 3 d^2(L)/d(alpha)d(u^h)    The part [*]:Ln(r).Grad(v^h)        */              = Compressible
+//=     /***********************************************************************/              =
+//==============================================================================================
+
+
+ template<typename VECT1, typename VECT2>
+  class elasticity_nonlinear_optim_term_compressible3
+    : public getfem::nonlinear_elem_term {
+    const mesh_fem &mf_u;
+    std::vector<scalar_type> U, U_ls;
+    const mesh_fem *mf_data;
+    const VECT2 &PARAMS;
+    const getfem::level_set &ls;
+    size_type N, cv_old, NFem;
+    const abstract_hyperelastic_law &AHL;
+    base_vector params, coeff, u_ls;
+    base_matrix E, Sigma, gradU, gradU_ls, U_ls_theta;// U_ls_theta le terme U_ls multiplier par le vecteur 
+    base_tensor GSigma;
+    bgeot::multi_index sizes_;
+    mesher_level_set mls_x, mls_y;
+  public:
+    elasticity_nonlinear_optim_term_compressible3
+    (const mesh_fem &mf_u_, const VECT1 &U_, const VECT1 &U_ls_, 
+     const mesh_fem *mf_data_, const VECT2 &PARAMS_,
+     const abstract_hyperelastic_law &AHL_, const getfem::level_set &ls_) 
+      : mf_u(mf_u_), U(mf_u_.nb_basic_dof()), U_ls(mf_u_.nb_basic_dof()),
+	mf_data(mf_data_), PARAMS(PARAMS_), ls(ls_),
+	N(mf_u_.linked_mesh().dim()), NFem(mf_u_.get_qdim()), AHL(AHL_),
+	params(AHL_.nb_params()), u_ls(N), E(N, N), Sigma(N, N),
+	gradU(NFem, N), gradU_ls(NFem, N),
+	GSigma(N, N, N, N) ,sizes_(NFem, N, NFem, N) {
+      sizes_.resize(2); sizes_[0] = short_type(N); sizes_[1] = short_type(N);
+      cv_old = size_type(-1);
+      mf_u.extend_vector(U_, U);
+      
+      mf_u.extend_vector(U_ls_, U_ls);
+      
+      if (gmm::vect_size(PARAMS) == AHL_.nb_params())
+	gmm::copy(PARAMS, params);
+    }
+    const bgeot::multi_index &sizes() const {  return sizes_; }
+    virtual void compute(getfem::fem_interpolation_context& ctx,
+			 bgeot::base_tensor &t) {
+      size_type cv = ctx.convex_num();
+      coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector
+		(U, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation_grad(ctx, coeff, gradU, mf_u.get_qdim());
+      
+      if (cv != cv_old) {
+	  mls_x = ls.mls_of_convex(cv, 1);
+	  mls_y = ls.mls_of_convex(cv, 0);
+	  cv_old = cv;
+      }
+
+      scalar_type x = mls_x(ctx.xref());
+      scalar_type y = mls_y(ctx.xref());
+      scalar_type r2 = x*x+y*y;
+      // Computation of tensor E
+      gmm::mult(gmm::transposed(gradU), gradU, E);
+      gmm::add(gradU, E);
+      gmm::add(gmm::transposed(gradU), E);
+      gmm::scale(E, scalar_type(0.5));
+
+      for (unsigned int alpha = 0; alpha < N; ++alpha)
+	gradU(alpha, alpha)=gradU(alpha, alpha)+ scalar_type(1); // GradU contient le tenseur F maintenant
+      scalar_type J = gmm::lu_det(gradU);
+
+      /*****************************/      
+      /*****************************/
+
+      // Computation of F.Sigma 
+      AHL.sigma(E, Sigma, params, J);
+      base_matrix eas(N,N);
+      gmm::mult(gradU, Sigma, eas);
+      // cout << "Avant multiplication log :" << eas << endl ;
+      // cout << "Valeur du rayon :" << r2 << endl ;
+      // cout << "*****************************************************************\n" ;
+      // cout << "Avant multiplication log" << eas << endl;
+      gmm::scale(eas, 0.5*log(r2));
+      // cout << "Aprés multiplication log" << eas << endl;
+      for (size_type i = 0; i < N; ++i)
+	for (size_type j = 0; j < N; ++j)
+	  t(i,j) = eas(i, j);    
+      }
+
+    virtual void prepare(fem_interpolation_context& ctx, size_type nb) {
+      GMM_ASSERT1(nb != 0, "Oops");
+      if (mf_data) {
+	size_type cv = ctx.convex_num();
+	size_type nbp = AHL.nb_params();
+	coeff.resize(mf_data->nb_basic_dof_of_element(cv)*nbp);
+	for (size_type i = 0; i < mf_data->nb_basic_dof_of_element(cv); ++i)
+	  for (size_type k = 0; k < nbp; ++k)
+	    coeff[i * nbp + k]
+	      = PARAMS[mf_data->ind_basic_dof_of_element(cv)[i]*nbp+k];
+	ctx.pf()->interpolation(ctx, coeff, params, dim_type(nbp));
+      }
+    } 
+    
+  };
+
+
+//============================================================================================================
+//=     /*************************************************************************************/              =
+//=     /* Term 4 d^2(L)/d(alpha)d(u^h)   The part [*]:1/r(cos\theta, sin\theta)(v^h)_ls)    */              = Compressible
+//=     /*************************************************************************************/              =
+//============================================================================================================
+
+
+ template<typename VECT1, typename VECT2>
+  class elasticity_nonlinear_optim_term_compressible4
+    : public getfem::nonlinear_elem_term {
+    const mesh_fem &mf_u;
+    std::vector<scalar_type> U, U_ls;
+    const mesh_fem *mf_data;
+    const VECT2 &PARAMS;
+    const getfem::level_set &ls;
+    size_type N, cv_old, NFem;
+    const abstract_hyperelastic_law &AHL;
+    base_vector params, coeff, u_ls;
+    base_matrix E, Sigma, gradU, gradU_ls, U_ls_theta;// U_ls_theta le terme U_ls multiplier par le vecteur 
+    base_tensor GSigma;
+    bgeot::multi_index sizes_;
+    mesher_level_set mls_x, mls_y;
+  public:
+        elasticity_nonlinear_optim_term_compressible4
+    (const mesh_fem &mf_u_, const VECT1 &U_, const VECT1 &U_ls_, 
+     const mesh_fem *mf_data_, const VECT2 &PARAMS_,
+     const abstract_hyperelastic_law &AHL_, const getfem::level_set &ls_) 
+      : mf_u(mf_u_), U(mf_u_.nb_basic_dof()), U_ls(mf_u_.nb_basic_dof()),
+	mf_data(mf_data_), PARAMS(PARAMS_), ls(ls_),
+	N(mf_u_.linked_mesh().dim()), NFem(mf_u_.get_qdim()), AHL(AHL_),
+	params(AHL_.nb_params()), u_ls(N), E(N, N), Sigma(N, N),
+	gradU(NFem, N), gradU_ls(NFem, N), 
+	GSigma(N, N, N, N) ,sizes_(NFem, N, NFem, N) {
+      sizes_.resize(1); sizes_[0] = short_type(N);
+      cv_old = size_type(-1);
+      mf_u.extend_vector(U_, U);
+      mf_u.extend_vector(U_ls_, U_ls);
+      if (gmm::vect_size(PARAMS) == AHL_.nb_params())
+	gmm::copy(PARAMS, params);
+    }
+    const bgeot::multi_index &sizes() const {  return sizes_; }
+    virtual void compute(getfem::fem_interpolation_context& ctx,
+			 bgeot::base_tensor &t) {
+      size_type cv = ctx.convex_num();
+      coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector
+		(U, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation_grad(ctx, coeff, gradU, mf_u.get_qdim());
+
+      if (cv != cv_old) {
+	  mls_x = ls.mls_of_convex(cv, 1);
+	  mls_y = ls.mls_of_convex(cv, 0);
+	  cv_old = cv;
+      }
+      scalar_type x = mls_x(ctx.xref());
+      scalar_type y = mls_y(ctx.xref());
+      scalar_type r2 = x*x+y*y;
+      // Computation of tensor E
+      gmm::mult(gmm::transposed(gradU), gradU, E);
+      gmm::add(gradU, E);
+      gmm::add(gmm::transposed(gradU), E);
+      gmm::scale(E, scalar_type(0.5));
+
+
+      for (unsigned int alpha = 0; alpha < N; ++alpha)
+	gradU(alpha, alpha)=gradU(alpha, alpha)+ scalar_type(1);
+      scalar_type J = gmm::lu_det(gradU);
+      
+
+      // Computation of F.Sigma 
+      AHL.sigma(E, Sigma, params, J);
+      base_matrix eas(N,N);
+      gmm::mult(gradU, Sigma, eas); // eas contient le tenseur F fois sigma
+       base_small_vector V(2), W(2); V[0] = x; V[1] = y;
+      gmm::mult(gmm::transposed(eas), gmm::scaled(V, 1./r2), W);
+      for (size_type i = 0; i < N; ++i) t[i] = W[i];
+    }
+
+    virtual void prepare(fem_interpolation_context& ctx, size_type nb) {
+      GMM_ASSERT1(nb != 0, "Oops");
+      if (mf_data) {
+	size_type cv = ctx.convex_num();
+	size_type nbp = AHL.nb_params();
+	coeff.resize(mf_data->nb_basic_dof_of_element(cv)*nbp);
+	for (size_type i = 0; i < mf_data->nb_basic_dof_of_element(cv); ++i)
+	  for (size_type k = 0; k < nbp; ++k)
+	    coeff[i * nbp + k]
+	      = PARAMS[mf_data->ind_basic_dof_of_element(cv)[i]*nbp+k];
+	ctx.pf()->interpolation(ctx, coeff, params, dim_type(nbp));
+      }
+    } 
+    
+  };
+
+
+//========================================================================================
+//=             /*********************************************************/              =
+//=             /*              Term 5 d^2(L)/d^2(alpha)                 */              = Compressible
+//=             /*********************************************************/              =
+//========================================================================================
+
+ template<typename VECT1, typename VECT2>
+  class elasticity_nonlinear_optim_term_compressible5
+    : public getfem::nonlinear_elem_term {
+    const mesh_fem &mf_u;
+    std::vector<scalar_type> U, U_ls;
+    const mesh_fem *mf_data;
+    const VECT2 &PARAMS;
+    const getfem::level_set &ls;
+    size_type N, cv_old, NFem;
+    const abstract_hyperelastic_law &AHL;
+    base_vector params, coeff, u_ls;
+    base_matrix E, Sigma, gradU, gradU_ls, gradU2_ls;
+    //  gradU_ls pour contenir du/dalpha et gradU2_ls pour contenir d^2u/dalpha
+    base_tensor GSigma;
+    bgeot::multi_index sizes_;
+    mesher_level_set mls_x, mls_y;
+  public:
+    elasticity_nonlinear_optim_term_compressible5
+    (const mesh_fem &mf_u_, const VECT1 &U_, const VECT1 &U_ls_, 
+     const mesh_fem *mf_data_, const VECT2 &PARAMS_,
+     const abstract_hyperelastic_law &AHL_, const getfem::level_set &ls_) 
+      : mf_u(mf_u_), U(mf_u_.nb_basic_dof()), U_ls(mf_u_.nb_basic_dof()),
+	mf_data(mf_data_), PARAMS(PARAMS_), ls(ls_),
+	N(mf_u_.linked_mesh().dim()), NFem(mf_u_.get_qdim()), AHL(AHL_),
+	params(AHL_.nb_params()), u_ls(N), E(N, N), Sigma(N, N),
+	gradU(NFem, N), gradU_ls(NFem, N), gradU2_ls(NFem, N),
+	GSigma(N, N, N, N) ,sizes_(NFem, N, NFem, N) {
+      sizes_.resize(1); sizes_[0] = 1;
+      cv_old = size_type(-1);
+      mf_u.extend_vector(U_, U);
+      mf_u.extend_vector(U_ls_, U_ls);
+      if (gmm::vect_size(PARAMS) == AHL_.nb_params())
+	gmm::copy(PARAMS, params);
+    }
+    const bgeot::multi_index &sizes() const {  return sizes_; }
+    virtual void compute(getfem::fem_interpolation_context& ctx,
+			 bgeot::base_tensor &t) {
+      size_type cv = ctx.convex_num();
+      coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector
+		(U, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation_grad(ctx, coeff, gradU, mf_u.get_qdim());
+
+      if (cv != cv_old) {
+	  mls_x = ls.mls_of_convex(cv, 1);
+	  mls_y = ls.mls_of_convex(cv, 0);
+	  cv_old = cv;
+      }
+
+      scalar_type x = mls_x(ctx.xref());
+      scalar_type y = mls_y(ctx.xref());
+      scalar_type r2 = x*x+y*y;
+      // Computation of E
+      gmm::mult(gmm::transposed(gradU), gradU, E);
+      gmm::add(gradU, E);
+      gmm::add(gmm::transposed(gradU), E);
+      gmm::scale(E, scalar_type(0.5));
+
+      
+      for (unsigned int alpha = 0; alpha < N; ++alpha)
+	gradU(alpha, alpha)=gradU(alpha, alpha)+ scalar_type(1);
+      scalar_type J = gmm::lu_det(gradU);
+
+      // Computation of d(grad U)/d(alpha) 
+      coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector
+		(U_ls, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation_grad(ctx, coeff, gradU_ls, mf_u.get_qdim()); 
+      ctx.pf()->interpolation_grad(ctx, coeff, gradU2_ls, mf_u.get_qdim());
+      gmm::scale(gradU_ls, log(r2) / scalar_type(2));
+      gmm::scale(gradU2_ls, log(r2) * log(r2) * 0.25);
+      ctx.pf()->interpolation(ctx, coeff, u_ls, mf_u.get_qdim());
+      base_vector Runit(2),Runitlog(2);
+      Runit[0] = x / r2; Runit[1] = y / r2;
+      Runitlog[0] = (x * log(r2))/ (0.5 * r2); Runitlog[1] = (y * log(r2)) / (0.5 * r2);
+      gmm::rank_one_update(gradU_ls, Runit, u_ls);        // gradU_ls contient d(grad U)/d(alpha)
+      gmm::rank_one_update(gradU2_ls, Runitlog, u_ls);    // gradU2_ls contient d^2(grad U)/(d(alpha))^2 
+      
+      // Computation of d(E)/d(alpha) 
+      
+      base_matrix Ealpha(N, N);
+      gmm::mult(gmm::transposed(gradU_ls), gradU, Sigma);
+      gmm::add(Sigma, gmm::transposed(Sigma), Ealpha);
+      gmm::scale(Ealpha, 0.5);
+      
+      // Computation of d2(E)/d2(alpha)
+      base_matrix Ealpha2(N, N);
+      gmm::mult(gmm::transposed(gradU2_ls), gradU, Sigma);
+      gmm::add(Sigma, gmm::transposed(Sigma), Ealpha2);
+      gmm::scale(Ealpha2, 0.5);
+      
+      gmm::mult(gmm::transposed(gradU_ls), gradU_ls, Sigma);
+      gmm::add(Sigma, Ealpha2);
+
+      // Computation of Sigma:d^2(E)/d^2(alpha)  
+      AHL.sigma(E, Sigma, params, J);
+      t[0]=mat_euclidean_sp(Sigma, Ealpha2);
+       
+      // Computation of grad_Sigma:d(E)/d(alpha)
+      // scalar_type temp ;
+      AHL.grad_sigma(E, GSigma, params, J);
+      for (size_type i = 0; i < N; ++i)
+	for (size_type j = 0; j < N; ++j)
+	  for (size_type k = 0; k < N; ++k)
+	    for (size_type l = 0; l < N; ++l)
+	      t[0]  += GSigma(i,j,k,l) * Ealpha(l,k) * Ealpha(i,j);
+
+      
+    }
+
+    virtual void prepare(fem_interpolation_context& ctx, size_type nb) {
+      GMM_ASSERT1(nb != 0, "Oops");
+            
+      if (mf_data) {
+	size_type cv = ctx.convex_num();
+	size_type nbp = AHL.nb_params();
+	coeff.resize(mf_data->nb_basic_dof_of_element(cv)*nbp);
+	for (size_type i = 0; i < mf_data->nb_basic_dof_of_element(cv); ++i)
+	  for (size_type k = 0; k < nbp; ++k)
+	    coeff[i * nbp + k]
+	      = PARAMS[mf_data->ind_basic_dof_of_element(cv)[i]*nbp+k];
+	ctx.pf()->interpolation(ctx, coeff, params, dim_type(nbp));
+      }
+    } 
+    
+  };
+
+
+
+
+  /********************************************************************************************************************/
+  /********************************************************************************************************************/
+  /********************************************************************************************************************/
+  /********************************************************************************************************************/
+  /********************************************************************************************************************/
+  /********************************************************************************************************************/
+
+
+ 
+  //=========================================================================
+  //
+  //  Nonlinear elasticity Brick                                       Compressible
+  //
+  //=========================================================================
+
+
+  //=========================================================================
+  //
+  //  Assembling the tangent of the additional term                    Compressible
+  //
+  //=========================================================================
+
+
+template<typename VECT0, typename VECT1, typename VECT2> 
+  
+  void asm_nonlinear_elasticity_optim_compressible_tangent_matrix_alpha_u
+  (const VECT0 &V_, const mesh_im &mim, 
+   const getfem::mesh_fem &mf_u, const VECT1 &U, const VECT2 &U_ls,
+   dal::bit_vector &u_enriched_dof, const VECT2 &/*alpha*/, 
+   const getfem::mesh_fem *mf_data, const VECT2 &PARAMS,
+   const abstract_hyperelastic_law &AHL, const getfem::level_set &ls,
+   const mesh_region &rg = mesh_region::all_convexes()) {
+    VECT0 &V = const_cast<VECT0 &>(V_);
+    GMM_ASSERT1(mf_u.get_qdim() >= mf_u.linked_mesh().dim(),
+		"wrong qdim for the mesh_fem");
+
+    elasticity_nonlinear_optim_term_compressible2 <VECT1, VECT2>
+      nterm1(mf_u, U, U_ls, mf_data, PARAMS, AHL, ls);
+    elasticity_nonlinear_optim_term_compressible3 <VECT1, VECT2>
+      nterm2(mf_u, U, U_ls, mf_data, PARAMS, AHL, ls);
+    elasticity_nonlinear_optim_term_compressible4 <VECT1, VECT2>
+      nterm3(mf_u, U, U_ls, mf_data, PARAMS, AHL, ls);
+
+    gmm::clear(V);
+
+    getfem::generic_assembly assem2;
+    if (mf_data)
+      assem2.set("V(#1)+=comp(NonLin$1(#1,#2)(i,j).vGrad(#1)(:,i,j));"
+		 "V(#1)+=comp(NonLin$2(#1,#2)(i).vBase(#1)(:,i))");
+    else
+      assem2.set("V(#1)+=comp(NonLin$1(#1)(i,j).vGrad(#1)(:,i,j));"
+		 "V(#1)+=comp(NonLin$2(#1)(i).vBase(#1)(:,i))");
+    assem2.push_mi(mim);
+    assem2.push_mf(mf_u);
+    if (mf_data) assem2.push_mf(*mf_data);
+    assem2.push_nonlinear_term(&nterm2);
+    assem2.push_nonlinear_term(&nterm3);
+    assem2.push_vec(V);
+    assem2.assembly(rg);
+
+    for (size_type i = 0; i < mf_u.nb_dof(); ++i)
+      if (!(u_enriched_dof.is_in(i))) V[i] = 0.0;
+
+    getfem::generic_assembly assem1;
+    
+    if (mf_data)
+      assem1.set("V(#1)+=comp(NonLin(#1,#2)(i,j).vGrad(#1)(:,i,j))");
+    else
+      assem1.set("V(#1)+=comp(NonLin(#1)(i,j).vGrad(#1)(:,i,j))");
+    assem1.push_mi(mim);
+    assem1.push_mf(mf_u);
+    if (mf_data) assem1.push_mf(*mf_data);
+    assem1.push_nonlinear_term(&nterm1);
+    assem1.push_vec(V);
+    assem1.assembly(rg);
+
+  }
+
+
+
+
+
+  template<typename VECT1, typename VECT2> 
+  scalar_type asm_nonlinear_elasticity_optim_compressible_tangent_matrix_alpha_alpha
+  (const mesh_im &mim, 
+   const getfem::mesh_fem &mf_u, const VECT1 &U, const VECT2 &U_ls,
+   dal::bit_vector &/*u_enriched_dof*/, const VECT2 &/*alpha*/, 
+   const getfem::mesh_fem *mf_data, const VECT2 &PARAMS,
+   const abstract_hyperelastic_law &AHL, const getfem::level_set &ls,
+   const mesh_region &rg = mesh_region::all_convexes()) {
+    std::vector<scalar_type> V(1);
+    GMM_ASSERT1(mf_u.get_qdim() >= mf_u.linked_mesh().dim(),
+		"wrong qdim for the mesh_fem");
+
+    elasticity_nonlinear_optim_term_compressible5<VECT1, VECT2>
+      nterm1(mf_u, U, U_ls, mf_data, PARAMS, AHL, ls);
+
+    getfem::generic_assembly assem1;
+    
+    if (mf_data)
+      assem1.set("V()+=comp(NonLin(#1,#2))(1)");
+    else
+      assem1.set("V()+=comp(NonLin(#1))(1)");
+    assem1.push_mi(mim);
+    assem1.push_mf(mf_u);
+    if (mf_data) assem1.push_mf(*mf_data);
+    assem1.push_nonlinear_term(&nterm1);
+    assem1.push_vec(V);
+    assem1.assembly(rg);
+    return V[0];
+  }
+
+
+  //=========================================================================
+  //=========================================================================
+  //==       Assembling the right hand side of the additional term         == Compressible
+  //=========================================================================
+  //=========================================================================
+
+
+  template<typename VECT1, typename VECT2, typename VECT3> 
+  void asm_nonlinear_elasticity_optim_compressible_rhs
+  (const VECT1 &R1_, const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, const VECT1 &U, const VECT3 &U_ls,
+   dal::bit_vector &/*u_enriched_dof*/,
+   const VECT2 &/*alpha*/, const getfem::mesh_fem *mf_data, const VECT3 &PARAMS,
+   const abstract_hyperelastic_law &AHL, const getfem::level_set &ls,
+   const mesh_region &rg = mesh_region::all_convexes()) {
+    VECT1 &R1 = const_cast<VECT1 &>(R1_);
+    GMM_ASSERT1(mf_u.get_qdim() >= mf_u.linked_mesh().dim(),
+		"wrong qdim for the mesh_fem");
+
+
+    GMM_ASSERT1(!mf_u.is_reduced(), "Do not work for reduced fems");
+
+    
+    
+    {
+      elasticity_nonlinear_optim_term_compressible1<VECT2, VECT3>
+	nterm(mf_u, U, U_ls, mf_data, PARAMS, AHL, ls);
+      
+      getfem::generic_assembly assem;
+      if (mf_data)
+	assem.set("t=comp(NonLin(#1,#2))); V() += t(i)");
+      else
+	assem.set("t=comp(NonLin(#1)); V() += t(i)");
+      // comp() to be optimized ?
+      assem.push_mi(mim);
+      assem.push_mf(mf_u);
+      if (mf_data) assem.push_mf(*mf_data);
+      assem.push_nonlinear_term(&nterm);
+      assem.push_vec(R1);
+      assem.assembly(rg);
+
+    }
+    
+
+  }
+
+
+
+}  /* end of namespace getfem.                                             */
+
diff --git a/contrib/xfem_large_strain/getfem_nonlinear_elastoptim.h b/contrib/xfem_large_strain/getfem_nonlinear_elastoptim.h
index 0d2cf92..3dd7ffa 100644
--- a/contrib/xfem_large_strain/getfem_nonlinear_elastoptim.h
+++ b/contrib/xfem_large_strain/getfem_nonlinear_elastoptim.h
@@ -1,23 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #include "getfem/getfem_modeling.h"
@@ -112,8 +122,9 @@ namespace getfem {
 	gradU(alpha, alpha)+= scalar_type(1);
       
       scalar_type J = gmm::lu_det(gradU);
-
+      
       t[0] = (J - scalar_type(1)) * valP[0];
+     
     }
     virtual void prepare(fem_interpolation_context& ctx, size_type nb) {
       GMM_ASSERT1(nb != 0, "Oops");
@@ -122,10 +133,12 @@ namespace getfem {
 	valP.resize(1);
 	size_type cv = ctx.convex_num();
 	coeff.resize(mf_p.nb_basic_dof_of_element(cv));
-	gmm::copy(gmm::sub_vector
-	     (P_ls, gmm::sub_index(mf_p.ind_basic_dof_of_element(cv))), coeff);
+
+	gmm::copy(gmm::sub_vector (P_ls, gmm::sub_index(mf_p.ind_basic_dof_of_element(cv))), coeff);
+	// cout<< "La valeur du vecteur P_ls :" << P_ls << endl;
+
 	ctx.pf()->interpolation(ctx, coeff, valP, 1);
-	
+	// cout<<"Le terme RHS dL/dBeta valeur de valP[0] apres ctx.pf()->interpolation :" << valP << endl;
 
 	if (cv != cv_old) {
 	  mls_x = ls.mls_of_convex(cv, 1);
@@ -133,9 +146,20 @@ namespace getfem {
 	  cv_old = cv;
 	}
 	scalar_type x = mls_x(ctx.xref());
+	// cout<<" "<<endl;
+	// cout<<"Le terme RHS dL/dBeta valeur de x :"<< x << endl;
 	scalar_type y = mls_y(ctx.xref());
+	// cout<<" "<<endl;
+	// cout<<"Le terme RHS dL/dBeta valeur de y :"<< y << endl;
+	// cout<<" "<<endl;
+	// cout<<"Le terme RHS dL/dBeta valeur de log(x*x+y*y) :" << log(x*x+y*y) << endl;
+	// cout<<"Le terme RHS dL/dBeta valeur de log(x*x+y*y)/2 :" << log(x*x+y*y)/ scalar_type(2) << endl;
+	// cout<<"Le terme RHS dL/dBeta valeur de valP[0] dans prepare :" << valP[0]  << endl;
 
 	valP[0] *= log(x*x+y*y) / scalar_type(2);
+	//cout<<"Le terme RHS dL/dBeta valeur de valP[0] dans prepare :" << valP[0]  << endl;
+
+
       } else if (mf_data) {
 	size_type cv = ctx.convex_num();
 	size_type nbp = AHL.nb_params();
@@ -207,7 +231,6 @@ namespace getfem {
 		(U, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
       ctx.pf()->interpolation_grad(ctx, coeff, gradU, mf_u.get_qdim());
 
-
       gmm::mult(gmm::transposed(gradU), gradU, E);
       gmm::add(gradU, E);
       gmm::add(gmm::transposed(gradU), E);
@@ -227,9 +250,18 @@ namespace getfem {
 		(U_ls, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
       ctx.pf()->interpolation_grad(ctx, coeff, gradU_ls, mf_u.get_qdim());
       scalar_type x = mls_x(ctx.xref());
+      cout << "------------------------------- " <<  endl;
+      cout << "la valeur (incompressible)  x :" <<  x <<endl;
+      cout << "------------------------------- " <<  endl;
       scalar_type y = mls_y(ctx.xref());
+      cout << "------------------------------- " <<  endl;
+      cout << "la valeur (incompressible)  y :" << y  <<endl;
+      cout << "------------------------------- " <<  endl;
       scalar_type r2 = x*x+y*y;
-      gmm::scale(gradU_ls, log(r2) / scalar_type(2));
+      cout << "------------------------------- " <<  endl;
+      cout << "le rayon (incompressible) r2 :" << r2  <<endl;
+      cout << "------------------------------- " <<  endl;
+      gmm::scale(gradU_ls, log(r2)/scalar_type(2));
 
       ctx.pf()->interpolation(ctx, coeff, u_ls, mf_u.get_qdim());
       base_vector Runit(2);
@@ -244,7 +276,7 @@ namespace getfem {
       gmm::scale(Ealpha, 0.5);
 
       // The term sigma:dE/dalpha
-      AHL.sigma(E, Sigma, params);
+      AHL.sigma(E, Sigma, params, J);
       t[0] = mat_euclidean_sp(Sigma, Ealpha);
 
       // The term pJF^{-T}:dgradu/dalpha
@@ -366,6 +398,7 @@ namespace getfem {
       gmm::copy(gmm::sub_vector
 		(U_ls, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
       ctx.pf()->interpolation_grad(ctx, coeff, gradU_ls, mf_u.get_qdim());
+
       scalar_type x = mls_x(ctx.xref());
       scalar_type y = mls_y(ctx.xref());
       scalar_type r2 = x*x+y*y;
@@ -385,12 +418,12 @@ namespace getfem {
 
       // The term sigma.d(E)/d(alpha)
       base_matrix eas(N,N);
-      AHL.sigma(E, Sigma, params);
+      AHL.sigma(E, Sigma, params, J);
       gmm::mult(Ealpha, Sigma, eas);
 
       // The term grad_sigma:d(E)/d(alpha)
       scalar_type temp ;
-      AHL.grad_sigma(E, GSigma, params);
+      AHL.grad_sigma(E, GSigma, params, J);
       for (size_type i = 0; i < N; ++i)
 	for (size_type j = 0; j < N; ++j){
 	  temp = 0.0;
@@ -422,23 +455,24 @@ namespace getfem {
 
     virtual void prepare(fem_interpolation_context& ctx, size_type nb) {
       GMM_ASSERT1(nb != 0, "Oops");
-      if (nb == 1) {
-	size_type cv = ctx.convex_num();
+      
+      size_type cv = ctx.convex_num();
+      if (cv != cv_old) {
+	  mls_x = ls.mls_of_convex(cv, 1);
+	  mls_y = ls.mls_of_convex(cv, 0);
+	  cv_old = cv;
+      }
 
+      if (nb == 1) {
 	valP.resize(1);
 	coeff.resize(mf_p.nb_basic_dof_of_element(cv));
 	gmm::copy(gmm::sub_vector
 	     (P_ls, gmm::sub_index(mf_p.ind_basic_dof_of_element(cv))), coeff);
 	ctx.pf()->interpolation(ctx, coeff, valP, 1);
 
-	if (cv != cv_old) {
-	  mls_x = ls.mls_of_convex(cv, 1);
-	  mls_y = ls.mls_of_convex(cv, 0);
-	  cv_old = cv;
-	}
-
       } else if (mf_data) {
-	size_type cv = ctx.convex_num();
+
+     // size_type cv = ctx.convex_num();
 	size_type nbp = AHL.nb_params();
 	coeff.resize(mf_data->nb_basic_dof_of_element(cv)*nbp);
 	for (size_type i = 0; i < mf_data->nb_basic_dof_of_element(cv); ++i)
@@ -524,13 +558,14 @@ namespace getfem {
       
 
       // Computation of F.Sigma 
-      AHL.sigma(E, Sigma, params);
+      AHL.sigma(E, Sigma, params, J);
       base_matrix eas(N,N);
       gmm::mult(gradU, Sigma, eas);
       // Computation of p.J.F^{-T}
       gmm::lu_inverse(gradU);
-      gmm::add(gmm::scaled(gmm::transposed(gradU), valP[0] * J), eas);     
-      gmm::scale(eas, log(r2)*0.5);  
+      gmm::add(gmm::scaled(gmm::transposed(gradU), valP[0] * J), eas); 
+      gmm::scale(eas, 0.5*log(r2));
+      
      for (size_type i = 0; i < N; ++i)
 	for (size_type j = 0; j < N; ++j)
 	  t(i,j) = eas(i, j);    
@@ -640,7 +675,7 @@ namespace getfem {
       
 
       // Computation of F.Sigma 
-      AHL.sigma(E, Sigma, params);
+      AHL.sigma(E, Sigma, params, J);
       base_matrix eas(N,N);
       gmm::mult(gradU, Sigma, eas);
       // Computation of p.J.F^{-T}
@@ -785,12 +820,12 @@ namespace getfem {
       gmm::add(Sigma, Ealpha2);
 
       // Computation of Sigma:d^2(E)/d^2(alpha)  
-      AHL.sigma(E, Sigma, params);
+      AHL.sigma(E, Sigma, params, J);
       t[0]=mat_euclidean_sp(Sigma, Ealpha2);
        
       // Computation of grad_Sigma:d(E)/d(alpha)
       scalar_type temp ;
-      AHL.grad_sigma(E, GSigma, params);
+      AHL.grad_sigma(E, GSigma, params, J);
       for (size_type i = 0; i < N; ++i)
 	for (size_type j = 0; j < N; ++j)
 	  for (size_type k = 0; k < N; ++k)
diff --git a/contrib/xfem_large_strain/linear_incomp_xfem.cc b/contrib/xfem_large_strain/linear_incomp_xfem.cc
index c0ab06c..ec91e38 100644
--- a/contrib/xfem_large_strain/linear_incomp_xfem.cc
+++ b/contrib/xfem_large_strain/linear_incomp_xfem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
   
 /**
  * Linear Elastostatic problem with a crack.
@@ -40,6 +40,10 @@
 #include "gmm/gmm.h"
 #include "gmm/gmm_inoutput.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
@@ -342,10 +346,10 @@ void crack_problem::init(void) {
 }
 
 
-base_small_vector ls_function(const base_node P, int num = 0) {
-  scalar_type x = P[0], y = P[1], x0=0, y0=0, phi, ll;
+base_small_vector ls_function(const base_node P, int num = 1) {
+  scalar_type x = P[0], y = P[1], x0=0., y0=0.025, phi, ll;
   base_small_vector res(2), cracktip(2), t(2), xx(2);
-  cracktip[0]=0.5; cracktip[1]= 0.;
+  cracktip[0]=0.5; cracktip[1]= 0.025;
   switch (num) {
 
     case 0: {
@@ -360,8 +364,8 @@ base_small_vector ls_function(const base_node P, int num = 0) {
     } break;
 
     case 1: {
-      res[0] = y;
-      res[1] = -0.5 + x;
+      res[0] = y - cracktip[1];
+      res[1] = x- cracktip[0];
     } break;
     case 2: {
       res[0] = x - 0.25;
@@ -445,8 +449,8 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
   ls.reinit();  
   
   for (size_type d = 0; d < ls.get_mesh_fem().nb_basic_dof(); ++d) {
-    ls.values(0)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[0];
-    ls.values(1)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[1];
+    ls.values(0)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d))[0];
+    ls.values(1)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d))[1];
   }
   ls.touch();
 
diff --git a/contrib/xfem_large_strain/linear_incomp_xfem.param b/contrib/xfem_large_strain/linear_incomp_xfem.param
deleted file mode 100644
index 7a561de..0000000
--- a/contrib/xfem_large_strain/linear_incomp_xfem.param
+++ /dev/null
@@ -1,94 +0,0 @@
-%-*- mat-lab -*- (enables emacs matlab mode)
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% parameters for program crack                                            %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-MU = 10.0;	        % Lam%G�%@ coefficient.
-dgr = 1;                % degree of enrichment in u
-dgrp = 1;                % degree of enrichment in p
-
-QUAD = 0;
-
-BIMATERIAL = 0;         % 1 : To enable the bimaterial case
-
-if BIMATERIAL
-  MU_UP = 10.0;	
-  MU_DOWN = 1.0;
-end
-
-REFINEMENT_RADIUS = 0.;  % REF: 0.4;  % 0 for no refinement
-REFINEMENT_PROCESS = 0;  % nb of desired refinement steps
-
-REFERENCE_TEST =0 ;   % 1 to compute a reference solution exported into files
-ERROR_TO_REF_SOL =1; % 1 to compute errors wrt the reference solution
-INF_SUP_COMP = 1;   % Compute or not the inf_sup condition
-
-%%%%%   discretisation parameters  :                     	      %%%%%
-
-NX =10;	        % space step.
-MESH_NOISED = 0;        % Set to one if you want to "shake" the mesh
-
-
-if (~QUAD)
-   MESH_TYPE = 'GT_PK(2,1)';         % linear triangles
-  FEM_TYPE = 'FEM_PK_WITH_CUBIC_BUBBLE(2,1)';
-  %FEM_TYPE = 'FEM_PK(2,2);
-  %FEM_TYPE = 'FEM_PK(2,1)';  % PK element %REF: P3
-  DATA_FEM_TYPE = 'FEM_PK_WITH_CUBIC_BUBBLE(2,1)';
-  INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6), 5)';
-  FEM_TYPE_P = 'FEM_PK(2,1)'; 
-  MORTAR_FEM_TYPE = FEM_TYPE;
-else
-  % MESH_TYPE = 'GT_LINEAR_QK(2)';
-  MESH_TYPE = 'GT_QK(2, 1)';
-  FEM_TYPE = 'FEM_QK(2,1)';  % Q1 fem for quadrangles
-  DATA_FEM_TYPE = 'FEM_QK(2,1)';
-  INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS_PARALLELEPIPED(2, 1), 5)';
-  FEM_TYPE_P = 'FEM_QK(2,1)'; 
-  MORTAR_FEM_TYPE = FEM_TYPE;
-end;
-
-FEM_DISC = 'FEM_PK_DISCONTINUOUS(2,4,0.0001)'; % Discontinuous P1 for triangles
-
-MIXED_PRESSURE=1;       % Mixed version or not.
-DIRICHLET_VERSION = 0;  % 0 = multipliers, 1 = penalization, 2 = elimination
-
-% integration meth. for sub-simplexe of elements crossed by the level-set
-SIMPLEX_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),3)';
-
-% integration meth. for quasi-polar integration of sub-simplexes
-% adjascent to the level-set
-% (comment it to disable quasipolar integration). Should be a
-% method defined on a square for 2D, or defined on a prism for 3D.
-% SINGULAR_INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(2, 10)';
-SINGULAR_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS_PARALLELEPIPED(2, 6), 9)';
-
-% Enable the following 2 lines to use the precomputed solution as enrichement 
-% GLOBAL_FUNCTION_MF = "bimaterial_crack12.meshfem"
-% GLOBAL_FUNCTION_U  = "bimaterial_crack12.U"
-
-
-ENRICHMENT_OPTION = 2 ; % 0 = Pas d'enrichissement
-	                % 1 = standard XFEM on a fixed zone			
-		        % 2 = global functions with cutoff
-			
-
-
-RADIUS_ENR_AREA = 0.2;  % For XFEM 
-
-CUTOFF_FUNC = 3; % 0 for the exponential cutoff. 
-                 % 1 for a 3rd degree polynomial cutoff
-                 % 2 for a 5th degree polynomial cutoff
-CUTOFF = 0.2;
-CUTOFF1 = 0.01;
-CUTOFF0 = 0.49;
-
-                              
-
-RESIDUAL = 1E-9;     	% residual for iterative methods if any.
-
-%%%%%   saving parameters                                             %%%%%
-ROOTFILENAME = 'linear_incomp_xfem';     % Root of data files.
-VTK_EXPORT = 0 % 2 export solution to a .vtk file ?
-
diff --git a/contrib/xfem_large_strain/nonlinear_incomp_xfem.cc b/contrib/xfem_large_strain/nonlinear_incomp_xfem.cc
new file mode 100644
index 0000000..1b409fb
--- /dev/null
+++ b/contrib/xfem_large_strain/nonlinear_incomp_xfem.cc
@@ -0,0 +1,1402 @@
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+/**
+  Nonlinear elastostatic  crack problem
+  This is an example of use of Getfem++.
+*/
+
+#include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
+#include "getfem/getfem_export.h"   /* export functions (save solution in a file)  */
+#include "getfem/getfem_derivatives.h"
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_model_solvers.h"
+#include "getfem/getfem_nonlinear_elasticity.h"
+#include "getfem/getfem_mesh_im_level_set.h"
+#include "getfem/getfem_mesh_fem_level_set.h"
+#include "getfem/getfem_mesh_fem_product.h"
+#include "getfem/getfem_mesh_fem_global_function.h"
+#include "getfem/getfem_spider_fem.h"
+#include "getfem/getfem_mesh_fem_sum.h"
+#include "getfem/getfem_superlu.h"
+#include "getfem_nonlinear_elastoptim.h" /*Optimization procedure to evaluate the order of singularities*/
+#include "gmm/gmm.h"
+#include "gmm/gmm_inoutput.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
+/* some Getfem++ types that we will be using */
+using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
+using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
+using bgeot::base_vector;
+using bgeot::scalar_type; /* = double */
+using bgeot::size_type;   /* = unsigned long */
+using bgeot::dim_type;
+using bgeot::short_type;
+using bgeot::base_matrix; /* small dense matrix. */
+
+/* definition of some matrix/vector types. These ones are built
+ * using the predefined types in Gmm++
+ */
+typedef getfem::modeling_standard_sparse_vector sparse_vector;
+typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
+typedef getfem::modeling_standard_plain_vector  plain_vector;
+
+/**************************************************************************/
+/*                                                                        */
+/*                            Enrichment.                                 */
+/*                                                                        */
+/**************************************************************************/
+
+scalar_type alpha_md = 0.5;
+scalar_type beta_md = 0.5;
+
+struct generic_u_singular_xy_function : public getfem::abstract_xy_function {
+    int n;
+    virtual scalar_type val(scalar_type x, scalar_type y) const;
+    virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+    virtual base_matrix hess(scalar_type x, scalar_type y) const;
+    generic_u_singular_xy_function(int n_) : n(n_) {}
+  };
+
+
+scalar_type 
+generic_u_singular_xy_function::val(scalar_type x, scalar_type y) const {
+  scalar_type r = sqrt(x*x + y*y);  
+  if (r < 1e-10)  return 0;
+  scalar_type theta = atan2(y, x);
+  
+  if (n <= 0)
+    return pow(r, alpha_md-n) * cos(scalar_type(n) * theta * 0.5);
+  else
+    return pow(r, alpha_md+n) * sin(scalar_type(n) * theta * 0.5);
+}
+
+
+base_small_vector
+generic_u_singular_xy_function::grad(scalar_type x, scalar_type y) const {
+  scalar_type r = sqrt(x*x + y*y);
+  if (r < 1e-10) {
+    GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
+  }
+  scalar_type theta = atan2(y,x);
+  base_small_vector res(2);
+  scalar_type cos_n_2 = cos(scalar_type(n) * theta * 0.5);
+  scalar_type sin_n_2 = sin(scalar_type(n) * theta * 0.5);
+
+  if (n <= 0) {
+    res[0] = alpha_md * x * cos_n_2 - scalar_type(n) * 0.5 * y * sin_n_2;
+    res[1] = alpha_md  * y * cos_n_2 + scalar_type(n) * 0.5 * x * sin_n_2;
+  } else {
+    res[0] = alpha_md  * x * sin_n_2 + scalar_type(n) * 0.5 * y * cos_n_2;
+    res[1] = alpha_md  * y * sin_n_2 - scalar_type(n) * 0.5 * x * cos_n_2;
+  }
+
+  gmm::scale(res, pow(r, alpha_md - 2));
+  return res;
+}
+
+
+base_matrix generic_u_singular_xy_function::hess(scalar_type, scalar_type)
+  const {
+  GMM_ASSERT1(false, "To be done !");
+}
+
+struct generic_p_singular_xy_function : public getfem::abstract_xy_function {
+  int n;
+  virtual scalar_type val(scalar_type x, scalar_type y) const;
+  virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+  virtual base_matrix hess(scalar_type x, scalar_type y) const;
+  generic_p_singular_xy_function(int n_) : n(n_) {}
+};
+
+scalar_type
+generic_p_singular_xy_function::val(scalar_type x, scalar_type y) const {
+  scalar_type r = sqrt(x*x + y*y);  
+  if (r < 1e-10)  return 0;
+  scalar_type theta = atan2(y, x);
+  
+  if (n <= 0)
+    return pow(r, beta_md) * cos(scalar_type(n) * theta * 0.5);
+  else
+    return pow(r, beta_md) * sin(scalar_type(n) * theta * 0.5);
+}
+
+
+base_small_vector
+generic_p_singular_xy_function::grad(scalar_type x, scalar_type y) const {
+  scalar_type r = sqrt(x*x + y*y);
+  if (r < 1e-10) {
+    GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
+  }
+  scalar_type theta = atan2(y, x);
+  base_small_vector res(2);
+  scalar_type cos_n_2 = cos(scalar_type(n) * theta * 0.5);
+  scalar_type sin_n_2 = sin(scalar_type(n) * theta * 0.5);
+
+  if (n <= 0) {
+    res[0] = beta_md * x * cos_n_2 - scalar_type(n) * 0.5 * y * sin_n_2;
+    res[1] = beta_md  * y * cos_n_2 + scalar_type(n) * 0.5 * x * sin_n_2;
+  } else {
+    res[0] = beta_md  * x * sin_n_2 + scalar_type(n) * 0.5 * y * cos_n_2;
+    res[1] = beta_md  * y * sin_n_2 - scalar_type(n) * 0.5 * x * cos_n_2;
+  }
+
+  gmm::scale(res, pow(r, beta_md - 2));
+  return res;
+}
+
+
+base_matrix generic_p_singular_xy_function::hess(scalar_type, scalar_type)
+  const {
+  GMM_ASSERT1(false, "To be done !");
+}
+
+
+///////////*/*/*/*///////////////////////////////////////////////////////////
+//                                                                         //
+//    Singular functions for crack problem  from Stephenson article        //
+//                                                                         //
+///////////*/*/*/*///////////////////////////////////////////////////////////
+ 
+struct steph_u_singular_xy_function : public getfem::abstract_xy_function {
+    unsigned l;
+    virtual scalar_type val(scalar_type x, scalar_type y) const;
+    virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+    virtual base_matrix hess(scalar_type x, scalar_type y) const;
+    steph_u_singular_xy_function(unsigned l_) : l(l_) {}
+  };
+
+
+scalar_type steph_u_singular_xy_function::val(scalar_type x, scalar_type y) const {
+  
+  scalar_type r = sqrt(x*x + y*y);  
+  if (r < 1e-10)  return 0;
+  scalar_type theta = atan2(y, x);
+  scalar_type res = 0;
+    switch(l){
+      case 0 : res = r*sin(theta*0.5)*sin(theta*0.5) ; break;
+      case 1 : res = sqrt(r)*sin(theta*0.5)          ; break;
+      default: GMM_ASSERT2(false, "arg");
+    }
+  return res;
+}
+
+
+base_small_vector steph_u_singular_xy_function::grad(scalar_type x, scalar_type y) const {
+  scalar_type r = sqrt(x*x + y*y);
+  
+  scalar_type theta = atan2(y, x);
+  base_small_vector res(2);
+  if (r < 1e-10) {
+    GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
+  }
+  
+    switch(l){
+    case 0 :
+      res[0] = sin(theta*0.5)*sin(theta*0.5);
+      res[1] = sin(theta*0.5)*cos(theta*0.5);
+      break;
+    case 1 :
+      res[0] = (-1/sqrt(r))*0.5*sin(theta*0.5) ;
+      res[1] = 0.5*sqrt(r)*sin(theta*0.5);
+      break;
+      
+      default: GMM_ASSERT2(false, "arg");
+    }
+
+  return res;
+}
+
+
+base_matrix steph_u_singular_xy_function::hess(scalar_type, scalar_type)
+  const {
+  GMM_ASSERT1(false, "To be done !");
+}
+
+
+/*
+  structure for the elastostatic problem
+*/
+struct cr_nl_elastostatic_problem {
+
+  enum { BOUNDARY_NUM0 = 0, BOUNDARY_NUM1 = 1, BOUNDARY_NUM2 = 2, BOUNDARY_NUM3 = 3, BOUNDARY_NUM4 = 4, PART_CAL_ERROR = 5,DIRICHLET_BOUND=6, MORTAR_BOUNDARY_IN=42, MORTAR_BOUNDARY_OUT=43};
+  getfem::mesh mesh;         /* the mesh */
+  getfem::level_set ls;      /* The two level sets defining the crack.       */
+  getfem::mesh_level_set mls;       /* the integration methods for cutted element.    */
+  getfem::mesh_im_level_set mim;
+  getfem::mesh_fem mf_pre_u, mf_pre_mortar;
+  getfem::mesh_fem mf_mult, mf_mult_p;
+
+  getfem::mesh_fem_level_set mfls_u,mfls_mortar;
+  getfem::mesh_fem_global_function mf_sing_u;
+  
+  getfem::mesh_fem mf_partition_of_unity;
+  getfem::mesh_fem_product mf_product;
+  getfem::mesh_fem_sum mf_u_sum/*, mf_u_sumCE*/;
+  
+  getfem::mesh_fem mf_pre_p; /* mesh_fem for the pressure for mixed form     */
+  getfem::mesh_fem_level_set mfls_p;   /* mesh_fem for the pressure enriched with H.   */
+  getfem::mesh_fem_global_function mf_sing_p;
+  getfem::mesh_fem_product mf_product_p;
+  getfem::mesh_fem_sum mf_p_sum /*, mf_p_sumCE*/;
+
+  base_small_vector cracktip;
+  
+  scalar_type pr1, pr2, pr3, AMP_LOAD_X, AMP_LOAD_Y, nb_step;
+ 
+
+
+  struct spider_param {
+    getfem::spider_fem *fem;
+    scalar_type theta0;
+    scalar_type radius;
+    unsigned Nr;
+    unsigned Ntheta;
+    int K;
+    int bimat_enrichment;
+    scalar_type epsilon;
+  };
+
+  spider_param spider;
+
+
+  getfem::mesh_fem mf_us;
+  getfem::mesh_fem& mf_u() { return mf_u_sum; }
+  getfem::mesh_fem& mf_pe() { return mf_p_sum; }
+  getfem::mesh_fem mf_rhs;
+  
+ 
+  scalar_type residual;        /* max residual for the iterative solvers         */
+  bool mixed_pressure;
+  //bool sing_search;
+  unsigned dir_with_mult;
+  scalar_type cutoff_radius, cutoff_radius1, cutoff_radius0, enr_area_radius;
+  size_type cutoff_func;
+
+  typedef enum { NO_ENRICHMENT=0, 
+		 FIXED_ZONE=1, 
+		 GLOBAL_WITH_MORTAR=2,
+		 GLOBAL_WITH_CUTOFF=3,
+		 SPIDER_FEM_ALONE=4,
+		 SPIDER_FEM_ENRICHMENT=5 } enrichment_option_enum;
+  enrichment_option_enum enrichment_option;
+
+  std::string datafilename;
+
+  int reference_test;
+  std::string GLOBAL_FUNCTION_MF, GLOBAL_FUNCTION_U,  GLOBAL_FUNCTION_P;
+
+  bgeot::md_param PARAM;
+
+  bool solve(plain_vector &U, plain_vector &P);
+  void init(void);
+  cr_nl_elastostatic_problem(void) : ls(mesh, 1, true), mls(mesh), mim(mls), 
+				     mf_pre_u(mesh), mf_pre_mortar(mesh), mf_mult(mesh), mf_mult_p(mesh),
+				     mfls_u(mls, mf_pre_u), mfls_mortar(mls, mf_pre_mortar),	
+				     mf_sing_u(mesh),
+				     mf_partition_of_unity(mesh),
+				     mf_product(mf_partition_of_unity, mf_sing_u),
+				     mf_u_sum(mesh),
+				     mf_pre_p(mesh), mfls_p(mls, mf_pre_p), 
+				     mf_sing_p(mesh), mf_product_p(mf_partition_of_unity, mf_sing_p), 
+				     mf_p_sum(mesh),
+				     mf_us(mesh),  mf_rhs(mesh) {}
+};
+
+std::string name_of_dof(getfem::pdof_description dof) {
+  char s[200];
+  sprintf(s, "UnknownDof[%p]", (void*)dof);
+  for (dim_type d = 0; d < 4; ++d) {
+    if (dof == getfem::lagrange_dof(d)) {
+      sprintf(s, "Lagrange[%d]", d); goto found;
+    }
+    if (dof == getfem::normal_derivative_dof(d)) {
+      sprintf(s, "D_n[%d]", d); goto found;
+    }
+    if (dof == getfem::global_dof(d)) {
+      sprintf(s, "GlobalDof[%d]", d);
+    }
+    if (dof == getfem::mean_value_dof(d)) {
+      sprintf(s, "MeanValue[%d]", d);
+    }
+    if (getfem::dof_xfem_index(dof) != 0) {
+      sprintf(s, "Xfem[idx:%d]", int(dof_xfem_index(dof)));
+    }
+    
+    for (dim_type r = 0; r < d; ++r) {
+      if (dof == getfem::derivative_dof(d, r)) {
+	sprintf(s, "D_%c[%d]", "xyzuvw"[r], d); goto found;
+      }
+      for (dim_type t = 0; t < d; ++t) {
+	if (dof == getfem::second_derivative_dof(d, r, t)) {
+	  sprintf(s, "D2%c%c[%d]", "xyzuvw"[r], "xyzuvw"[t], d); 
+	  goto found;
+	}
+      }
+    }
+  }
+ found:
+  return s;
+}
+
+
+
+
+
+
+/* Read parameters from the .param file, build the mesh, set finite element
+   and integration methods and selects the boundaries.
+
+   (this is boilerplate code, not very interesting)
+ */
+void cr_nl_elastostatic_problem::init(void) {
+
+  std::string MESH_TYPE = PARAM.string_value("MESH_TYPE", "Mesh type");
+  std::string FEM_TYPE  = PARAM.string_value("FEM_TYPE", "FEM name");
+  std::string FEM_TYPE_P  = PARAM.string_value("FEM_TYPE_P", "FEM name for the pressure");
+  std::string INTEGRATION = PARAM.string_value("INTEGRATION", "Name of integration method");
+  std::string SIMPLEX_INTEGRATION = PARAM.string_value("SIMPLEX_INTEGRATION", "Name of simplex integration method");
+  std::string SINGULAR_INTEGRATION = PARAM.string_value("SINGULAR_INTEGRATION", "Singular integration");
+  enrichment_option = enrichment_option_enum(PARAM.int_value("ENRICHMENT_OPTION", "Enrichment option"));
+  /* Lecture des parametres */
+  pr1 = PARAM.real_value("P1", "First Elastic coefficient");
+  pr2 = PARAM.real_value("P2", "Second Elastic coefficient");
+  pr3 = PARAM.real_value("P3", "Third Elastic coefficient");
+  AMP_LOAD_X = PARAM.real_value("AMP_LOAD_X", "Amp load x");
+  AMP_LOAD_Y = PARAM.real_value("AMP_LOAD_Y", "Amp load y");
+  nb_step  = PARAM.real_value("nb_step", "nb_step");
+  reference_test = int(PARAM.int_value("REFERENCE_TEST", "Reference test"));
+  datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
+  residual = PARAM.real_value("RESIDUAL"); if (residual == 0.) residual = 1e-10;
+  
+ /* Affichage */
+
+  cout << "MESH_TYPE=" << MESH_TYPE << "\n";
+  cout << "FEM_TYPE="  << FEM_TYPE << "\n";
+  cout << "FEM_TYPE_P  =" << FEM_TYPE_P <<"\n";  
+  cout << "INTEGRATION=" << INTEGRATION << "\n";
+  cout << "AMP_LOAD_X = " << AMP_LOAD_X << "\n";
+  cout << "AMP_LOAD_Y = " << AMP_LOAD_Y << "\n";
+  cout << "Reference_test " << AMP_LOAD_Y << "\n";
+
+  /* First step : build the mesh */
+
+  bgeot::pgeometric_trans pgt = bgeot::geometric_trans_descriptor(MESH_TYPE);
+  size_type N = pgt->dim();
+  std::vector<size_type> nsubdiv(N);
+  
+  long int  NX_aff = PARAM.int_value("NX", "Nomber of space steps ");
+  std::fill(nsubdiv.begin(),nsubdiv.end(),NX_aff);
+  cout << "Number of space step NX= " << NX_aff << "\n";
+  
+  getfem::regular_unit_mesh(mesh, nsubdiv, pgt, PARAM.int_value("MESH_NOISED") != 0);
+  
+  base_small_vector tt(N); tt[1] = -0.5;
+  mesh.translation(tt);
+  
+  cracktip.resize(2); // Coordonnee du fond de fissure
+  cracktip[0] = 0.5;
+  cracktip[1] = 0.;
+  scalar_type refinement_radius;
+  refinement_radius = PARAM.real_value("REFINEMENT_RADIUS", "Refinement Radius");
+  cout << "refinement_radius= " << refinement_radius << "\n";
+  size_type refinement_process;
+  refinement_process = PARAM.int_value("REFINEMENT_PROCESS", "Refinement process");
+  cout << "refinement_process= " << refinement_process << "\n";
+  
+  if (refinement_radius > 0) {
+    for (size_type ref = 0; ref < refinement_process; ++ref){
+      dal::bit_vector conv_to_refine;
+      for(dal::bv_visitor i(mesh.convex_index()); !i.finished(); ++i){
+	for(size_type j=0; j < 3; ++j)
+	  if(gmm::vect_dist2(mesh.points_of_convex(i)[j],cracktip)
+	     < refinement_radius )
+	    conv_to_refine.add(i);
+      }
+      mesh.Bank_refine(conv_to_refine);
+      
+      refinement_radius = refinement_radius/3.;
+      cout <<"refining process step " << ref << " ... refining "
+	   << conv_to_refine.size() <<" convexes..." << endl;
+    }
+    cout << "refinement process completed." << endl ;
+  }
+
+  mesh.write_to_file("le_maillage.mesh");
+ if (residual == 0.) residual = 1e-10;
+  enr_area_radius = PARAM.real_value("RADIUS_ENR_AREA",
+				     "radius of the enrichment area");
+  
+  GLOBAL_FUNCTION_MF = PARAM.string_value("GLOBAL_FUNCTION_MF");
+  GLOBAL_FUNCTION_U = PARAM.string_value("GLOBAL_FUNCTION_U");
+  GLOBAL_FUNCTION_P = PARAM.string_value("GLOBAL_FUNCTION_P");
+  cutoff_func = PARAM.int_value("CUTOFF_FUNC", "cutoff function");
+  cutoff_radius = PARAM.real_value("CUTOFF", "Cutoff");
+  cutoff_radius1 = PARAM.real_value("CUTOFF1", "Cutoff1");
+  cutoff_radius0 = PARAM.real_value("CUTOFF0", "Cutoff0"); 
+  mf_u().set_qdim(dim_type(N));
+
+  /* set the finite element on the mf_u */
+  getfem::pfem pf_u = 
+    getfem::fem_descriptor(FEM_TYPE);
+  getfem::pintegration_method ppi = 
+    getfem::int_method_descriptor(INTEGRATION);
+
+  /* set the finite element and integration method on the singular mesh */
+
+  getfem::pintegration_method simp_ppi = 
+    getfem::int_method_descriptor(SIMPLEX_INTEGRATION);
+  getfem::pintegration_method sing_ppi = (SINGULAR_INTEGRATION.size() ?
+		getfem::int_method_descriptor(SINGULAR_INTEGRATION) : 0);
+
+  mim.set_integration_method(mesh.convex_index(), ppi);
+  mls.add_level_set(ls);
+  
+  mim.set_simplex_im(simp_ppi, sing_ppi);
+  mf_pre_u.set_finite_element(mesh.convex_index(), pf_u);
+  mf_pre_mortar.set_finite_element(mesh.convex_index(), 
+				   getfem::fem_descriptor(PARAM.string_value("MORTAR_FEM_TYPE")));
+  mf_mult.set_finite_element(mesh.convex_index(), pf_u);
+  mf_mult.set_qdim(dim_type(N));
+  mf_partition_of_unity.set_classical_finite_element(1);
+
+  mixed_pressure = (PARAM.int_value("MIXED_PRESSURE","Mixed version or not.") != 0);
+  //sing_search = (PARAM.int_value("SINGULAR_SEARCH","Singular search or not.") != 0);
+  dir_with_mult = unsigned(PARAM.int_value("DIRICHLET_VERSION", "Version of Dirichlet"));
+
+  if (mixed_pressure) {
+        getfem::pfem pf_p = 
+        getfem::fem_descriptor(FEM_TYPE_P);
+	mf_pre_p.set_finite_element(mesh.convex_index(), pf_p);
+	mf_mult_p.set_finite_element(mesh.convex_index(), pf_p);
+    
+  }  
+
+
+
+
+  /* set the finite element on mf_rhs (same as mf_u is DATA_FEM_TYPE is
+     not used in the .param file */
+  std::string data_fem_name = PARAM.string_value("DATA_FEM_TYPE");
+  if (data_fem_name.size() == 0) {
+    GMM_ASSERT1(pf_u->is_lagrange(), "You are using a non-lagrange FEM"
+		". In that case you need to set "
+		<< "DATA_FEM_TYPE in the .param file");
+    mf_rhs.set_finite_element(mesh.convex_index(), pf_u);
+  } else {
+    mf_rhs.set_finite_element(mesh.convex_index(), 
+			      getfem::fem_descriptor(data_fem_name));
+  }
+  
+  /* set the finite element on mf_coef. Here we use a very simple element
+   *  since the only function that need to be interpolated on the mesh_fem 
+   * is f(x)=1 ... */
+  
+
+  /* set boundary conditions
+   * (Neuman on the upper face, Dirichlet elsewhere) */
+
+/*******************************************************************************/
+/*         Select the part of convex where the error will be calculation       */
+/*******************************************************************************/
+
+
+  //for(getfem::mr_visitor it_err(mesh.convex_index()); !it_err.finished(); ++it_err){   
+  
+  //base_node un1_cal_err = mesh.normal_of_face_of_convex(it_err.cv(), it_err.f());
+  //un1_cal_err /= gmm::vect_norm2(un1_cal_err);
+  //if (un1_cal_err[1]> -0.5) mesh.region(PART_CAL_ERROR).add(it_err.cv());   
+  //
+  //    }
+
+
+
+  cout << "Selecting Neumann and Dirichlet boundaries\n";
+  getfem::mesh_region border_faces;
+  getfem::outer_faces_of_mesh(mesh, border_faces);
+  for (getfem::mr_visitor it(border_faces); !it.finished(); ++it) {
+    assert(it.is_face());
+    base_node un = mesh.normal_of_face_of_convex(it.cv(), it.f());
+    un /= gmm::vect_norm2(un);
+
+    if (un[0]  > 0.5) mesh.region(BOUNDARY_NUM1).add(it.cv(), it.f());
+    if (un[1]  > 0.5) mesh.region(BOUNDARY_NUM2).add(it.cv(), it.f());
+    if (un[0]  < -0.5) mesh.region(BOUNDARY_NUM3).add(it.cv(), it.f());
+    if (un[1]  < -0.5) mesh.region(BOUNDARY_NUM4).add(it.cv(), it.f());   
+
+  }
+}
+
+
+
+base_small_vector ls_function(const base_node P, int num = 0) {
+  scalar_type x = P[0], y = P[1];
+  base_small_vector res(2);
+  switch (num) {
+    case 0: {
+      res[0] = y;
+      res[1] = -.5 + x;
+    } break;
+    case 1: {
+      res[0] = gmm::vect_dist2(P, base_node(0.5, 0.)) - .25;
+      res[1] = gmm::vect_dist2(P, base_node(0.25, 0.0)) - 0.27;
+    } break;
+    case 2: {
+      res[0] = x - 0.25;
+      res[1] = gmm::vect_dist2(P, base_node(0.25, 0.0)) - 0.35;
+    } break;
+    default: assert(0);
+  }
+  return res;
+}
+
+
+
+struct matrix_G {
+
+  const sparse_matrix &B;
+  const sparse_matrix &S;
+  mutable plain_vector W1, W2;
+
+  gmm::SuperLU_factor<scalar_type> SLUF;
+
+  matrix_G(const sparse_matrix &BB, const sparse_matrix &SS)
+    : B(BB), S(SS), W1(gmm::mat_nrows(SS)), W2(gmm::mat_nrows(SS)) {
+    SLUF.build_with(SS);
+  }
+  
+};
+
+template <typename vector1, typename vector2>
+void mult(const matrix_G &G, const vector1 &X, vector2 &Y) {
+  gmm::mult(gmm::transposed(G.B), X, G.W1);
+  // gmm::iteration it(1E-6, 0);
+  // gmm::cg(G.S, G.W2, G.W1,  gmm::identity_matrix(), it);
+  G.SLUF.solve(G.W2, G.W1);
+  gmm::mult(G.B, G.W2, Y);
+}
+
+template <typename vector1, typename vector2>
+void mult(const matrix_G &G, const vector1 &X, const vector2 &b, vector2 &Y)
+{ mult(G, X, Y); gmm::add(b, Y); }
+
+
+scalar_type smallest_eigen_value(const sparse_matrix &B,
+				 const sparse_matrix &M,
+				 const sparse_matrix &S) {
+  cout << "matrice B = "<< B;
+  size_type n = gmm::mat_nrows(M);
+  scalar_type lambda;
+  plain_vector V(n), W(n), V2(n);
+  gmm::fill_random(V2);
+  matrix_G G(B, S);
+  
+  do {
+    gmm::copy(V2, V);
+    gmm::scale(V, 1./gmm::vect_norm2(V));
+    gmm::mult(M, V, W);
+    
+    gmm::iteration it(1E-3, 0);
+    gmm::cg(G, V2, W,  gmm::identity_matrix(), it);    
+    lambda = gmm::vect_norm2(V2);
+
+//  compute the Rayleigh quotient
+
+//     mult(G, V2, W);
+//     scalar_type lambda2 = gmm::vect_sp(V2, W);
+//     gmm::mult(M, V2, W);
+//     lambda2 /= gmm::vect_sp(V2, W);
+//     cout << "lambda2 = " << sqrt(lambda2) << endl;
+
+    cout << "lambda = " << sqrt(1./lambda) << endl;
+    cout << "residu = " << gmm::vect_dist2(V2, gmm::scaled(V, lambda)) << endl;
+    
+  } while (gmm::vect_dist2(V2, gmm::scaled(V, lambda)) > 1E-3);
+  
+  return sqrt(1./lambda);
+}
+/**************************************************************************/
+/*  Model.                                                                */
+/**************************************************************************/
+
+bool cr_nl_elastostatic_problem::solve(plain_vector &U, plain_vector &P) {
+  size_type nb_dof_rhs = mf_rhs.nb_dof();
+  // size_type nb_dof_mult = mf_mult.nb_dof();
+  size_type N = mesh.dim();
+  ls.reinit();
+  size_type law_num = PARAM.int_value("LAW");
+  size_type line_search_version = PARAM.int_value("line_search_version");
+  size_type Pseudo_Potential = PARAM.int_value("Pseudo_Potential");
+  std::cout<<"law num  "<< law_num << endl;
+  
+  base_vector pr(3); pr[0] = pr1; pr[1] = pr2; pr[2] = pr3;
+
+  for (size_type d = 0; d < ls.get_mesh_fem().nb_basic_dof(); ++d) {
+    ls.values(0)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[0];
+    ls.values(1)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[1];
+    
+  }
+  ls.touch();
+
+  mls.adapt();
+  mim.adapt();
+  mfls_u.adapt();
+  mfls_p.adapt();
+  mfls_mortar.adapt(); mfls_mortar.set_qdim(2);
+
+  //  bool load_global_fun = GLOBAL_FUNCTION_MF.size() != 0;
+
+
+  cout << "Setting up the singular functions for the enrichment\n";
+
+  //size_type nb_enr_func_u = size_type(PARAM.int_value("NB_ENR_FUNC_U", "Number of Enriched function for u"));
+    size_type nb_enr_func_p = size_type(PARAM.int_value("NB_ENR_FUNC_P", "Number of Enriched function for p"));
+
+    //std::vector<getfem::pglobal_function> vfunc(2*nb_enr_func_u);
+  std::vector<getfem::pglobal_function> vfunc_p(2*nb_enr_func_p);
+  std::vector<getfem::pglobal_function> vfunc(2);
+  //std::vector<getfem::pglobal_function> vfunc_p(2);
+
+  std::cout << "Using default singular functions\n";
+  for (unsigned i = 0; i < vfunc.size(); ++i){
+    
+    // getfem::abstract_xy_function *s;
+//     if (i < nb_enr_func_u){
+//      s = new generic_u_singular_xy_function(i+1);
+//     }
+//     else{
+//      s = new generic_u_singular_xy_function(-(i+1));
+//       }
+
+    getfem::abstract_xy_function *s = 
+        new steph_u_singular_xy_function(i);
+
+    if (enrichment_option != FIXED_ZONE && 
+	enrichment_option != GLOBAL_WITH_MORTAR) {
+      /* use the product of the singularity function
+	 with a cutoff */
+
+      getfem::abstract_xy_function *c = 
+	new getfem::cutoff_xy_function(int(cutoff_func),
+				       cutoff_radius, 
+				       cutoff_radius1,cutoff_radius0);
+      s  = new getfem::product_of_xy_functions(*s, *c);
+      
+    }
+    vfunc[i]=getfem::global_function_on_level_set(ls, *s);       
+  }
+  
+  for (unsigned i = 0; i < vfunc_p.size() ;++i){
+    
+
+   getfem::abstract_xy_function *sp;
+       if (i < nb_enr_func_p)
+         sp = new generic_p_singular_xy_function(i+1);
+       else
+         sp = new generic_p_singular_xy_function(-(i+1));
+                     
+    if (enrichment_option != FIXED_ZONE && 
+	enrichment_option != GLOBAL_WITH_MORTAR) {
+      /* use the product of the singularity function
+	 with a cutoff */
+      getfem::abstract_xy_function *cp = 
+	new getfem::cutoff_xy_function(int(cutoff_func),
+				       cutoff_radius, 
+				       cutoff_radius1,cutoff_radius0);
+      sp  = new getfem::product_of_xy_functions(*sp, *cp);
+      
+    }
+    vfunc_p[i]=getfem::global_function_on_level_set(ls, *sp);           
+  }
+  
+  mf_sing_u.set_functions(vfunc);
+  mf_sing_p.set_functions(vfunc_p);  
+
+  if (enrichment_option == SPIDER_FEM_ALONE || 
+      enrichment_option == SPIDER_FEM_ENRICHMENT) {
+    spider.fem = new getfem::spider_fem(spider.radius, mim, spider.Nr,
+					spider.Ntheta, spider.K, cracktip,
+					spider.theta0, spider.bimat_enrichment,
+					spider.epsilon);
+    mf_us.set_finite_element(mesh.convex_index(),spider.fem->get_pfem());
+
+    for (dal::bv_visitor_c i(mf_us.convex_index()); !i.finished(); ++i) {
+      if (mf_us.fem_of_element(i)->nb_dof(i) == 0) {
+	mf_us.set_finite_element(i,0);
+      }
+    }
+    spider.fem->check();
+  }
+
+  switch (enrichment_option) {
+
+  case FIXED_ZONE :
+    {
+      dal::bit_vector enriched_dofs;
+      plain_vector X(mf_partition_of_unity.nb_dof());
+      plain_vector Y(mf_partition_of_unity.nb_dof());
+      getfem::interpolation(ls.get_mesh_fem(), mf_partition_of_unity,
+			    ls.values(1), X);
+      getfem::interpolation(ls.get_mesh_fem(), mf_partition_of_unity,
+			    ls.values(0), Y);
+      for (size_type j = 0; j < mf_partition_of_unity.nb_dof(); ++j) {
+	if (gmm::sqr(X[j]) + gmm::sqr(Y[j]) <= gmm::sqr(enr_area_radius))
+	  enriched_dofs.add(j);
+      }
+      if (enriched_dofs.card() < 3)
+	GMM_WARNING0("There is " << enriched_dofs.card() <<
+		     " enriched dofs for the crack tip");
+      mf_product.set_enrichment(enriched_dofs);
+      mf_u_sum.set_mesh_fems(mf_product, mfls_u);
+      mf_product_p.set_enrichment(enriched_dofs);
+      mf_p_sum.set_mesh_fems(mf_product_p, mfls_p);
+    }
+    break;
+  
+
+    case GLOBAL_WITH_MORTAR: {
+      // Selecting the element in the enriched domain
+
+      dal::bit_vector cvlist_in_area;
+      dal::bit_vector cvlist_out_area;
+      for (dal::bv_visitor cv(mesh.convex_index()); 
+	   !cv.finished(); ++cv) {
+	bool in_area = true;
+	/* For each element, we test all of its nodes. 
+	   If all the nodes are inside the enrichment area,
+	   then the element is completly inside the area too */ 
+	for (unsigned j=0; j < mesh.nb_points_of_convex(cv); ++j) {
+	  if (gmm::sqr(mesh.points_of_convex(cv)[j][0] - cracktip[0]) + 
+	      gmm::sqr(mesh.points_of_convex(cv)[j][1] - cracktip[1]) > 
+	      gmm::sqr(enr_area_radius)) {
+	    in_area = false; break;
+	  }
+	}
+
+	/* "remove" the global function on convexes outside the enrichment
+	   area */
+	if (!in_area) {
+	  cvlist_out_area.add(cv);
+	  mf_sing_u.set_finite_element(cv, 0);
+	  mf_u().set_dof_partition(cv, 1);
+	  //mf_sing_p.set_finite_element(cv, 0);
+	  //mf_p().set_dof_partition(cv, 1);
+	  
+	} else cvlist_in_area.add(cv);
+      }
+
+      /* extract the boundary of the enrichment area, from the
+	 "inside" point-of-view, and from the "outside"
+	 point-of-view */
+      getfem::mesh_region r_border, r_enr_out;
+      getfem::outer_faces_of_mesh(mesh, r_border);
+
+      getfem::outer_faces_of_mesh(mesh, cvlist_in_area, 
+				  mesh.region(MORTAR_BOUNDARY_IN));
+      getfem::outer_faces_of_mesh(mesh, cvlist_out_area, 
+				  mesh.region(MORTAR_BOUNDARY_OUT));
+      for (getfem::mr_visitor v(r_border); !v.finished(); ++v) {
+	mesh.region(MORTAR_BOUNDARY_OUT).sup(v.cv(), v.f());
+      }
+      mf_u_sum.set_mesh_fems(mf_sing_u, mfls_u);
+      mf_p_sum.set_mesh_fems(mf_sing_p, mfls_p);
+    } break;
+
+  case GLOBAL_WITH_CUTOFF :{
+    if(cutoff_func == 0)
+      cout<<"Using exponential Cutoff..."<<endl;
+    else
+      cout<<"Using Polynomial Cutoff..."<<endl;
+      mf_u_sum.set_mesh_fems(mf_sing_u, mfls_u);
+      mf_p_sum.set_mesh_fems(mf_sing_p, mfls_p);
+  } break;
+
+  case SPIDER_FEM_ALONE : { 
+    mf_u_sum.set_mesh_fems(mf_us); 
+  } break;
+    
+  case SPIDER_FEM_ENRICHMENT : {
+    mf_u_sum.set_mesh_fems(mf_us, mfls_u); 
+  } break;
+    
+  case NO_ENRICHMENT: {
+    cout<<"No enrichment..."<<endl;
+    mf_u_sum.set_mesh_fems(mfls_u);
+    mf_p_sum.set_mesh_fems(mfls_p);
+  } break;
+  
+  }
+  
+
+  U.resize(mf_u().nb_basic_dof());
+  P.resize(mf_pe().nb_basic_dof());
+  
+
+
+  if (mixed_pressure)
+    
+    cout << "Number of dof for P mf_pe: " << mf_pe().nb_basic_dof() << endl;
+    cout << "Number of dof for u: " << mf_u().nb_basic_dof() << endl;
+
+  unsigned Q = mf_u().get_qdim();
+  if (0) {
+    for (unsigned d=0; d < mf_u().nb_dof(); d += Q) {
+      printf("dof %4d @ %+6.2f:%+6.2f: ", d, 
+	     mf_u().point_of_basic_dof(d)[0], mf_u().point_of_basic_dof(d)[1]);
+
+      const getfem::mesh::ind_cv_ct cvs = mf_u().convex_to_basic_dof(d);
+      for (unsigned i=0; i < cvs.size(); ++i) {
+	size_type cv = cvs[i];
+	//if (pm_cvlist.is_in(cv)) flag1 = true; else flag2 = true;
+
+	getfem::pfem pf = mf_u().fem_of_element(cv);
+	unsigned ld = unsigned(-1);
+	for (unsigned dd = 0; dd < mf_u().nb_basic_dof_of_element(cv); dd += Q) {
+	  if (mf_u().ind_basic_dof_of_element(cv)[dd] == d) {
+	    ld = dd/Q; break;
+	  }
+	}
+	if (ld == unsigned(-1)) {
+	  cout << "DOF " << d << "NOT FOUND in " << cv << " BUG BUG\n";
+	} else {
+	  printf(" %3d:%.16s", int(cv), name_of_dof(pf->dof_types().at(ld)).c_str());
+	}
+      }
+      printf("\n");
+    }
+  }
+  
+  //////////////////////////////////////////////////////////////////////
+  //                                                                  //
+  //     find the dofs on the upper right and lower right corners     //
+  //                                                                  //
+  //////////////////////////////////////////////////////////////////////
+
+   cout << "Find the dofs on the upper right and lower right corners" << endl;
+     scalar_type d1 = 1.0, d2 = 1.0;
+     size_type icorner1 = size_type(-1), icorner2 = size_type(-1);
+     base_node corner1 = base_node(1.0, -0.5);
+     base_node corner2 = base_node(1.0, 0.5);
+     GMM_ASSERT1(!(mf_u().is_reduced()), "To be adapted for reduced fems");
+     
+     for (size_type i = 0; i < mf_u().nb_basic_dof(); i+=N) {
+    
+       scalar_type dd1 = gmm::vect_dist2(mf_u().point_of_basic_dof(i), corner1);
+       if (dd1 < d1) { icorner1 = i; d1 = dd1; }
+       scalar_type dd2 = gmm::vect_dist2(mf_u().point_of_basic_dof(i), corner2);
+       if (dd2 < d2) { icorner2 = i; d2 = dd2; }
+       
+       }
+
+    GMM_ASSERT1(((d1 < 1E-8) && (d2 < 1E-8)),
+   	       "Upper right or lower right corners not found d1 = "
+   	       << d1 << " d2 = " << d2);
+
+  /*******************************************/
+  /*                                         */
+  /*         choose the material law         */
+  /*                                         */
+  /*******************************************/
+
+  getfem::abstract_hyperelastic_law *pl1 = 0, *pl = 0;
+  switch (law_num) {
+    case 0:
+    case 1: pl1 = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
+    case 2: pl1 = new getfem::Ciarlet_Geymonat_hyperelastic_law(); break;
+    case 3: pl1 = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
+    default: GMM_ASSERT1(false, "no such law");
+  }
+
+  if (N == 2) {
+   cout << "2D plane strain hyper-elasticity\n";
+   pl = new getfem::plane_strain_hyperelastic_law(pl1);
+   } else pl = pl1;
+
+  pr.resize(pl->nb_params());
+  cout << "parametre du loi de comportements "<< pr << endl ;
+
+  //pl1->test_derivatives(3, 5e-9, pr);
+
+
+  getfem::model model;
+  
+  // Main unknown of the problem (displacement).
+
+   model.add_fem_variable("u", mf_u());
+
+  // model.add_fem_variable("u",  error_cal);
+
+  // Nonlinear elasticity brick
+  model.add_initialized_fixed_size_data("params", pr);
+  getfem::add_nonlinear_elasticity_brick(model, mim, "u", *pl, "params");
+
+  // Incompressibility
+  if (mixed_pressure && (law_num == 1 || law_num == 3)) {
+    cout << "mixed pressure <|-------------------------|>" << endl;
+    model.add_fem_variable("p", mf_pe());
+    getfem::add_nonlinear_incompressibility_brick(model, mim, "u", "p", size_type(-1));
+  }
+
+ // Defining the Neumann condition right hand side.
+  plain_vector F_Neumann(nb_dof_rhs * N);
+ // Neumann condition brick.
+   
+  for(size_type i = 0; i < F_Neumann.size(); i=i+N) F_Neumann[i] = AMP_LOAD_X;
+  for(size_type i = 1; i < F_Neumann.size(); i=i+N) F_Neumann[i] = AMP_LOAD_Y;
+  
+   
+   model.add_initialized_fem_data("NeumannData", mf_rhs, F_Neumann );
+
+  getfem::add_source_term_brick (model, mim, "u", "NeumannData", BOUNDARY_NUM2);
+
+    //Dirichlet condition brick
+
+    plain_vector F_Diri(nb_dof_rhs * N);
+    
+    // for(size_type i = 0; i < F_Diri.size(); i=i+N) F_Diri[i] = 0;
+    // for(size_type i = 1; i < F_Diri.size(); i=i+N) F_Diri[i] = 0;
+  
+    // gmm::resize(F_Diri, nb_dof_mult);
+    
+    model.add_initialized_fem_data("Dirichletdata", mf_rhs, F_Diri);
+    if (PARAM.int_value("DIRICHLET_VERSION") == 0)
+    add_Dirichlet_condition_with_multipliers (model, mim, "u", mf_u(), BOUNDARY_NUM4, "Dirichletdata");
+    else
+    add_Dirichlet_condition_with_penalization (model, mim, "u", 1E15, BOUNDARY_NUM4, "Dirichletdata");
+
+//     ////////////////////////////////////////// 
+//     //
+//     //     Symetrie condition
+//     //
+//     //////////////////////////////////////////
+
+    model.add_initialized_fixed_size_data("Dirichletsymdata",
+					  plain_vector(N, 0.0));
+    plain_vector HH(N*N); HH[0] = 1.0;
+    model.add_initialized_fixed_size_data("Hdata", HH); 
+
+    getfem::add_generalized_Dirichlet_condition_with_multipliers(model, mim, "u", 1, BOUNDARY_NUM3, "Dirichletsymdata", "Hdata");
+
+
+  
+
+
+//     getfem::partial_mesh_fem symetrie_NUM3(mf_u());
+//     dal::bit_vector symetrie_dofs_NUM3 = mf_u().basic_dof_on_region(BOUNDARY_NUM3);
+//     cout << "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" << endl;
+//     cout << "Size of vector  :" << symetrie_dofs_NUM3.card() << endl;
+//     cout << "Basic dof on region BOUNDARY_NUM3  :" << symetrie_dofs_NUM3 << endl;
+//     cout << "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" << endl;
+//     cout << "test  :" << symetrie_dofs_NUM3[1] << endl;
+//     cout << "test  :" << symetrie_dofs_NUM3[2] << endl;
+//     GMM_ASSERT1(N==2, "To be corrected for 3D computation");
+
+//     sparse_matrix BB((symetrie_dofs_NUM3.size()/2), mf_u().nb_dof());
+    
+   
+//     // for (size_type i = 0; i < mf_u().nb_basic_dof(); i+=N) 
+//     //    {}
+//     for (size_type j = 0; j < symetrie_dofs_NUM3.size()+1 ; j+=N ){
+//     for (size_type i = 0; i < (symetrie_dofs_NUM3.size()/2)+1 ; ++i )
+//       {
+//         BB(j,symetrie_dofs_NUM3[i])=1.0;
+// 	  }}
+   
+//     // BB (0, icorner1)   = 1.0;
+//     // BB (1, icorner1+1) = 1.0;
+//     // BB (2, icorner2)   = 1.0;
+
+//   // cout << "matrice BB   :" << BB << endl;
+//   // std::vector<scalar_type> LRH(3);
+//   // model.add_fixed_size_variable("dir", 3);
+//   // getfem::add_constraint_with_multipliers(model, "u", "dir", BB, LRH);
+
+////////////////////////////////////////////////////
+// Recuperation de la matrice tangente
+////////////////////////////////////////////////////
+  
+  gmm::csc_matrix<double> TM;
+  cout << " Recuperation de la matrice tangente... " << endl;
+  cout << " Before copy Matrix TM  : " << TM << endl;
+  gmm::copy(model.real_tangent_matrix(),TM);
+  // cout << " After copy Matrix TM   : " << TM(0,0) << endl;
+  cout << " Here befor : " << endl;
+  MatrixMarket_save("Matrix_Market_Tangent_matrix_nonlin_NX23", TM);
+  cout << " Here after " << endl;
+  Harwell_Boeing_save("Harwell_Boeing_Tangent_matrix_nonlin_NX23", TM);
+ 
+  gmm::iteration iter(residual, 1, 40000);
+
+  /* prepare the export routine for OpenDX (all time steps will be exported) 
+     (can be viewed with "dx -edit nonlinear_elastostatic.net")
+  */
+  getfem::dx_export exp(datafilename + ".dx",
+			PARAM.int_value("VTK_EXPORT")==1);
+  getfem::stored_mesh_slice sl; sl.build(mesh, getfem::slicer_boundary(mesh),8); 
+  exp.exporting(sl,true); exp.exporting_mesh_edges();
+  //exp.begin_series("deformationsteps");
+  exp.write_point_data(mf_u(), U, "stepinit"); 
+  exp.serie_add_object("deformationsteps");
+
+  GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted for reduced mesh_fems");
+    
+  getfem::simplest_newton_line_search simls;
+  getfem::default_newton_line_search dlnrs;
+  getfem::systematic_newton_line_search sylnrs;
+
+//  simplest_newton_line_search 1 *** default_newton_line_search 2 *** systematic_newton_line_search 3
+ cout << "line search value" <<line_search_version<< endl;
+ switch (line_search_version){
+     
+    case 1:{
+      if (Pseudo_Potential == 1){
+	bool with_pseudo_potential = true;
+        //getfem::simplest_newton_line_search simls;
+	getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+			       getfem::model_real_plain_vector>(model), simls, with_pseudo_potential);
+	cout << "/******************/" << endl;
+	cout << "/* Enery Criteria */" << endl;
+	cout << "/******************/" << endl;
+      }
+      getfem::standard_solve(model, iter,getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+			       getfem::model_real_plain_vector>(model), simls );
+      cout << "=============================== " << endl;
+      cout << "= Simplest_newton_line_search = " << endl;
+      cout << "=============================== " << endl;
+      cout << "alpha_md valeur de l'ordre de singularite =  " << alpha_md << endl;
+    }break;
+    case 2:{
+      if (Pseudo_Potential == 1){
+	bool with_pseudo_potential = true;
+	//getfem::default_newton_line_search dlnrs;
+	getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+			       getfem::model_real_plain_vector>(model), dlnrs, with_pseudo_potential);
+	cout << "/******************/" << endl;
+	cout << "/* Enery Criteria */" << endl;
+	cout << "/******************/" << endl;
+      }
+      getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+			       getfem::model_real_plain_vector>(model), dlnrs);
+      cout << "============================== " << endl;
+      cout << "= Default_newton_line_search = " << endl;
+      cout << "============================== " << endl;   
+      cout << "alpha_md valeur de l'ordre de singularite =  " << alpha_md << endl;
+    }break;
+    
+
+    case 3: {
+      if (Pseudo_Potential == 1){
+	bool with_pseudo_potential = true;
+	//getfem::systematic_newton_line_search sylnrs;
+	getfem::standard_solve(model, iter,getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+			       getfem::model_real_plain_vector>(model), sylnrs,  with_pseudo_potential);
+	cout << "/******************/" << endl;
+	cout << "/* Enery Criteria */" << endl;
+	cout << "/******************/" << endl;
+      }
+      getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+			       getfem::model_real_plain_vector>(model), sylnrs); 
+      cout << "================================= " << endl;
+      cout << "= Systematic_newton_line_search = " << endl;
+      cout << "================================= " << endl;
+      cout << "alpha_md valeur de l'ordre de singularite =  " << alpha_md << endl;
+    }break;
+    default: GMM_ASSERT1(false, "No such line search");
+    }
+
+  
+  
+
+   // Solution extraction
+   gmm::copy(model.real_variable("u"), U);
+   if (mixed_pressure && (law_num == 1 || law_num == 3)) {
+     gmm::copy(model.real_variable("p"), P);}
+
+  
+  return (iter.converged());
+
+if (reference_test == 1) {
+      
+      cout << "Exporting reference solution...";
+      dal::bit_vector blocked_dof = mf_u().basic_dof_on_region(5);
+      getfem::mesh_fem mf_refined(mesh, dim_type(N));
+      std::string FEM_DISC = PARAM.string_value("FEM_DISC","fem disc ");
+      mf_refined.set_finite_element(mesh.convex_index(),
+				    getfem::fem_descriptor(FEM_DISC));
+      
+      plain_vector W(mf_refined.nb_dof());
+      getfem::interpolation(mf_u(), mf_refined, U, W);
+      
+      
+      mf_refined.write_to_file(datafilename + "_refined_test.meshfem_refined", true);
+      gmm::vecsave(datafilename + "_refined_test.U_refined", W);
+
+      
+      mf_refined.set_qdim(1);
+      plain_vector PP(mf_refined.nb_dof());
+      getfem::interpolation(mf_pe(), mf_refined, P, PP);
+      mf_refined.write_to_file(datafilename + "_refined_test.p_meshfem_refined", true);
+      gmm::vecsave(datafilename + "_refined_test.P_refined", PP);
+      cout << "done" << endl;
+  }
+}
+
+void export_interpolated_on_line(const getfem::mesh_fem &mf,
+				 const getfem::base_vector &U,
+				 const base_node &x0,
+				 const base_small_vector &dir,
+				 const int nb_points, 
+				 const std::string &filename) {
+  getfem::mesh_trans_inv mti(mf.linked_mesh());
+  scalar_type h = 1.0/(2*nb_points);
+  for (int i=-nb_points; i <= nb_points; ++i) {
+    mti.add_point(x0 + 2*(i*h)*dir);
+  }
+
+  getfem::base_vector V(mti.nb_points() * mf.get_qdim());
+  getfem::base_matrix M;
+  getfem::interpolation(mf, mti, U, V, M, 0, false);
+  
+  std::ofstream f(filename.c_str()); f.precision(16);
+  
+  for (size_type i=0; i < mti.nb_points(); ++i) {
+    for (unsigned q=0; q < mf.get_qdim(); ++q) {
+      f << V[i*mf.get_qdim()+q] << " ";
+    }
+    f << "\n";
+  }
+}
+  
+/**************************************************************************/
+/*  main program.                                                         */
+/**************************************************************************/
+
+int main(int argc, char *argv[]) {
+
+  GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
+  FE_ENABLE_EXCEPT;        // Enable floating point exception for Nan.
+
+  cr_nl_elastostatic_problem p;
+  p.PARAM.read_command_line(argc, argv);
+  p.init();
+  p.mesh.write_to_file(p.datafilename + ".mesh");
+  //getfem::mesh_region &rg_error_calc = p.mesh.region(1);
+  //getfem::mesh_region &rg2 = p.mesh.region(2);
+  plain_vector U, P;
+  
+  if (!p.solve(U, P)) GMM_ASSERT1(false,"Solve has failed");
+  
+  cout << "Saving the solution" << endl;
+  getfem::mesh mcut;
+  p.mls.global_cut_mesh(mcut);
+  unsigned Q = p.mf_u().get_qdim();
+  
+  getfem::mesh_fem mf(mcut, dim_type(Q));
+  mf.set_classical_discontinuous_finite_element(2, 1E-7);
+  
+  plain_vector V(mf.nb_dof());
+  getfem::interpolation(p.mf_u(), mf, U, V);
+  mf.write_to_file(p.datafilename + ".meshfem", true);
+  gmm::vecsave(p.datafilename + ".U", V);
+  
+  getfem::mesh_fem mf_p(mcut);
+  mf_p.set_classical_discontinuous_finite_element(2, 1E-7);
+  
+  plain_vector PP(mf_p.nb_dof());
+  getfem::interpolation(p.mf_pe(), mf_p, P, PP);
+  mf_p.write_to_file(p.datafilename + ".p_meshfem", true);
+  gmm::vecsave(p.datafilename + ".P", PP);
+      
+  cout << "Interpolating solution for the drawing" << endl;
+  getfem::stored_mesh_slice sl;
+  getfem::mesh mcut_refined;
+  //getfem::mesh mcut_refined_p;
+  
+  unsigned NX = unsigned(p.PARAM.int_value("NX")), nn;
+  if (NX < 6) nn = 24;
+  else if (NX < 12) nn = 6;
+  else if (NX < 30) nn = 3;
+  else nn = 3;
+  
+  /* choose an adequate slice refinement based on the distance
+     to the crack tip */
+  std::vector<bgeot::short_type> nrefine(mcut.convex_index().last_true()+1);
+  for (dal::bv_visitor cv(mcut.convex_index()); !cv.finished(); ++cv) {
+    scalar_type dmin=0, d;
+    base_node Pmin,Pp;
+    for (unsigned i=0; i < mcut.nb_points_of_convex(cv); ++i) {
+      Pp = mcut.points_of_convex(cv)[i];
+      d = gmm::vect_norm2(ls_function(Pp));
+      if (d < dmin || i == 0) { dmin = d; Pmin = Pp; }
+    }
+    
+    if (dmin < 1e-5)
+      nrefine[cv] = short_type(nn*8);
+    else if (dmin < .1) 
+      nrefine[cv] = short_type(nn*2);
+    else nrefine[cv] = short_type(nn);
+    // if (dmin < .01)
+    //  cout << "cv: "<< cv << ", dmin = " << dmin << "Pmin=" << Pmin
+    //       << " " << nrefine[cv] << "\n";
+  }
+  
+  {
+    getfem::mesh_slicer slicer(mcut); 
+    getfem::slicer_build_mesh bmesh(mcut_refined);
+    slicer.push_back_action(bmesh);
+    slicer.exec(nrefine, getfem::mesh_region::all_convexes());
+  }
+  /*
+    sl.build(mcut, 
+    getfem::slicer_build_mesh(mcut_refined), nrefine);*/
+  
+  getfem::mesh_im mim_refined(mcut_refined); 
+  mim_refined.set_integration_method(getfem::int_method_descriptor
+				     ("IM_TRIANGLE(6)"));
+  
+  // getfem::mesh_im mim_refined_p(mcut_refined_p); 
+  // mim_refined.set_integration_method(getfem::int_method_descriptor
+  //				     ("IM_TRIANGLE(6)"));  
+  
+  
+  getfem::mesh_fem mf_refined(mcut_refined, dim_type(Q));
+  mf_refined.set_classical_discontinuous_finite_element(2,0.001);
+  plain_vector W(mf_refined.nb_dof());
+ 
+  
+  if (p.PARAM.int_value("VTK_EXPORT")) {
+    
+     getfem::mesh_fem mf_refined_p(mcut_refined, 1);
+    
+    mf_refined_p.set_classical_discontinuous_finite_element(2, 0.001);
+  
+    plain_vector PPW(mf_refined_p.nb_dof());
+   
+   
+    getfem::interpolation(p.mf_pe(), mf_refined_p, P, PPW);
+
+    
+    cout << "export to " << p.datafilename + ".vtk" << "..\n";
+    getfem::vtk_export exp(p.datafilename + ".vtk",
+			   p.PARAM.int_value("VTK_EXPORT")==1);
+    
+    exp.exporting(mf_refined); 
+    
+    //exp.write_point_data(mf_refined_vm, DN, "error");
+    getfem::interpolation(p.mf_pe(), mf_refined_p, P, PPW);
+    
+    exp.write_point_data(mf_refined, W, "elastostatic_displacement");
+    exp.write_point_data(mf_refined_p, PPW, "Pressure");
+
+    base_node line_x0(0.70001,0);
+    base_small_vector line_dir(0, 0.5001);
+
+    
+    cout << "export done, you can view the data file with (for example)\n"
+      "mayavi -d " << p.datafilename << ".vtk -f  "
+      "WarpVector -m BandedSurfaceMap -m Outline\n";
+  }
+    
+  if(p.PARAM.int_value("ERROR_TO_REF_SOL") == 1){
+    cout << "Computing error with respect to a reference solution..." << endl;
+
+   
+    std::string REFERENCE_MF  = "referenceNX120_incomMR_diri_LD_015_enriold_func.meshfem";
+    std::string REFERENCE_U   = "referenceNX120_incomMR_diri_LD_015_enriold_func.U";
+    std::string REFERENCE_MFP = "referenceNX120_incomMR_diri_LD_015_enriold_func.p_meshfem";
+    std::string REFERENCE_P   = "referenceNX120_incomMR_diri_LD_015_enriold_func.P";
+                                                                  
+    cout << "Load reference displacement from "
+	 << REFERENCE_MF << " and " << REFERENCE_U << "\n";
+
+    getfem::mesh ref_m ; 
+    ref_m.read_from_file(REFERENCE_MF);
+        
+    
+    enum { Part_cal_error = 82};
+      for(dal::bv_visitor i(ref_m.convex_index()); !i.finished(); ++i){
+	for(size_type j=0; j < 3; ++j){
+        base_node cord_err = ref_m.points_of_convex(i)[j];
+	//cout << "coordonne-erreur " << cord_err[1] << endl;
+	 if (cord_err[1] > -0.39) ref_m.region(Part_cal_error).add(i);
+	}   
+        }
+
+
+    getfem::mesh_fem ref_mf(ref_m); 
+    ref_mf.read_from_file(REFERENCE_MF);    
+    
+      
+    plain_vector ref_U(ref_mf.nb_dof());
+    gmm::vecload(REFERENCE_U, ref_U);
+    
+    
+
+    cout << "Load reference pressure from "
+	 << REFERENCE_MFP << " and " << REFERENCE_P << "\n";
+    getfem::mesh_fem ref_mfp(ref_m); 
+    ref_mfp.read_from_file(REFERENCE_MFP);
+    plain_vector ref_P(ref_mfp.nb_dof());
+    gmm::vecload(REFERENCE_P, ref_P);
+    
+    getfem::mesh_im ref_mim(ref_m);
+    getfem::pintegration_method ppi = 
+      getfem::int_method_descriptor("IM_TRIANGLE(6)");
+    ref_mim.set_integration_method(ref_m.convex_index(), ppi);
+    
+    plain_vector interp_U(ref_mf.nb_dof());
+    getfem::interpolation(p.mf_u(), ref_mf, U, interp_U);
+
+
+    plain_vector interp_U_error(ref_mf.nb_dof());
+    gmm::add(interp_U, gmm::scaled(ref_U, -1.), interp_U_error);
+    gmm::vecsave(p.datafilename+".U_map_error", interp_U_error);
+
+    cout << "To ref L2 ERROR on U:"
+	 << getfem::asm_L2_dist(ref_mim, ref_mf, interp_U, ref_mf, ref_U, Part_cal_error) << endl;
+    
+    cout << "To ref H1 ERROR on U:"
+	 << getfem::asm_H1_dist(ref_mim, ref_mf, interp_U,
+				ref_mf, ref_U, Part_cal_error ) << endl;
+    
+    plain_vector interp_P(ref_mfp.nb_dof());
+    getfem::interpolation(p.mf_pe(), ref_mfp, P, interp_P, Part_cal_error);
+
+    plain_vector interp_P_error(ref_mfp.nb_dof());
+    gmm::add(interp_P, gmm::scaled(ref_P, -1.), interp_P_error);
+    gmm::vecsave(p.datafilename+".P_map_error", interp_P_error);
+    
+    cout << "To ref L2 ERROR on P:"
+	 << getfem::asm_L2_dist(ref_mim, ref_mfp, interp_P,
+				ref_mfp, ref_P) << endl;
+    
+    gmm::add(gmm::scaled(interp_U, -1.), ref_U);
+    gmm::vecsave(p.datafilename + ".diff_ref", ref_U);
+    
+  }
+
+
+  return 0; 
+}
+
diff --git a/contrib/xfem_large_strain/nonlinear_incomp_xfem.param b/contrib/xfem_large_strain/nonlinear_incomp_xfem.param
new file mode 100644
index 0000000..ac8d234
--- /dev/null
+++ b/contrib/xfem_large_strain/nonlinear_incomp_xfem.param
@@ -0,0 +1,163 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%-*- mat-lab -*- (enables emacs matlab mode)                              %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% parameters for program crack                                            %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+MU = 10.0;	        % Lame coefficient.
+QUAD = 0;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%           Nonlinear elasticity                    %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Elastic coefficients                      %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Just for indication 			   %
+%Ogden mu=4.225E05			   %
+%Mooney-Rivlin c1=0.4375*mu c2=0.0625*mu   %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Mooney-Rivlin.                           %  
+%                                         %%%%%%%%%%%
+%W(F)=C_10(I_1-3)+C_01(I_2-3)                       %  
+%For rubbers the Numerical Value are                %
+%C_10 = 0.183 MPa.                                    %
+%C_01 = 0.0034 MPa.                                   %    
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
+
+P1 = 1.83 ;	        % First elastic coefficient.
+P2 = 0.034 ;   		% Second elastic coefficient.
+P3 = 0 ;   	        % Third elastic coefficient.
+
+%P1 = 1 ;	        % First elastic coefficient.%
+%P2 = 1 ;   	        % Second elastic coefficient.%
+%P3 = 1 ;   	        % Third elastic coefficient.%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Hyperelastic law                          %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+LAW = 3 ;     % 1 : SaintVenant-Kirchhoff + incompressibility
+              % 2 : Ciarlet_Geymonat
+              % 3 : Mooney_Rivlin + incompressibility
+
+
+BIMATERIAL = 0;         % 1 : To enable the bimaterial case
+
+if BIMATERIAL
+  MU_UP = 10.0;	
+  MU_DOWN = 1.0;
+end
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%            Line search version           %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+line_search_version = 2     % 1 for simplest_newton_line_search
+                       	    % 2 for default_newton_line_search 
+    		            % 3 for systematic_newton_line_search
+                            % 4 for Quadratic_newton_line_search
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+%            Energy criteria                %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pseudo_Potential = 0   % 1    Enable energy criteria
+                       % else Disable energy criteria 
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Hyperelastic law                          %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+REFINEMENT_RADIUS = 0 ;   % REF: 0.4;  % 0 for no refinement
+REFINEMENT_PROCESS = 0 ;  % nb of desired refinement steps
+
+REFERENCE_TEST = 0;     % 1 to compute a reference solution exported into files
+ERROR_TO_REF_SOL = 0;   % 1 to compute errors wrt the reference solution
+INF_SUP_COMP = 0;       % Compute or not the inf_sup condition
+
+%%%%%   discretisation parameters  :                     	      %%%%%
+
+NB_ENR_FUNC_U = 2;
+NB_ENR_FUNC_P = 2;
+
+NX = 140;	         % space step.
+MESH_NOISED = 1;         % Set to one if you want to "shake" the mesh.
+AMP_LOAD_X = 0;          % Load in X direction. 
+AMP_LOAD_Y = 0.11;       % Load in Y direction.
+nb_step  = 6;
+NOISY = 1 ;
+stnst = 0 ; % 1 Applying load progressively (don't work) 
+
+if (~QUAD)
+  MESH_TYPE = 'GT_PK(2,1)';         % linear triangles
+  FEM_TYPE = 'FEM_PK_WITH_CUBIC_BUBBLE(2,1)';
+ %FEM_TYPE = 'FEM_PK(2,2)';  % PK element %REF: P3
+  DATA_FEM_TYPE = 'FEM_PK(2,1)';
+  INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6), 5)';
+  FEM_TYPE_P = 'FEM_PK(2,1)'; 
+  MORTAR_FEM_TYPE = FEM_TYPE;
+else
+  % MESH_TYPE = 'GT_LINEAR_QK(2)';
+  MESH_TYPE = 'GT_QK(2, 1)';
+  FEM_TYPE = 'FEM_QK(2,1)';  % Q1 fem for quadrangles
+  DATA_FEM_TYPE = 'FEM_QK(2,1)';
+  INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS_PARALLELEPIPED(2, 1), 5)';
+  FEM_TYPE_P = 'FEM_QK(2,1)'; 
+  MORTAR_FEM_TYPE = FEM_TYPE;
+end;
+
+FEM_DISC = 'FEM_PK_DISCONTINUOUS(2,3,0.0001)'; % Discontinuous P1 for triangles
+
+MIXED_PRESSURE = 1;       % Mixed version or not.
+DIRICHLET_VERSION = 0;    % 0 = multipliers, 1 = penalization, 2 = elimination
+
+% integration meth. for sub-simplexe of elements crossed by the level-set
+SIMPLEX_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),3)';
+
+% integration meth. for quasi-polar integration of sub-simplexes
+% adjascent to the level-set
+% (comment it to disable quasipolar integration). Should be a
+% method defined on a square for 2D, or defined on a prism for 3D.
+% SINGULAR_INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(2, 10)';
+SINGULAR_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS_PARALLELEPIPED(2, 6), 9)';
+
+% Enable the following 2 lines to use the precomputed solution as enrichement 
+% GLOBAL_FUNCTION_MF = "bimaterial_crack12.meshfem"
+% GLOBAL_FUNCTION_U  = "bimaterial_crack12.U"
+
+
+ENRICHMENT_OPTION = 1 ; % 0 = Pas d'enrichissement
+	                % 1 = standard XFEM on a fixed zone
+			% 2 = global functions with mortar junction
+		        % 3 = global functions with cutoff
+			% 4 = spider fem alone
+	                % 5 = spider fem enrichment
+
+
+RADIUS_ENR_AREA = 0.2;  % For XFEM and the mortar junction
+
+CUTOFF_FUNC = 1; % 0 for the exponential cutoff. 
+                 % 1 for a 3rd degree polynomial cutoff
+                 % 2 for a 5th degree polynomial cutoff
+CUTOFF = 0.2;
+CUTOFF1 = 0.01;
+CUTOFF0 = 0.49;
+
+SPIDER_RADIUS =  0.4;
+SPIDER_NR = 10;               % size of the cartesian mesh in r for spider fem
+SPIDER_NTHETA = 10;           % size of the cartesian mesh in theta for spider fem
+SPIDER_K=1;                   % order of the  spider fem 
+SPIDER_BIMAT_ENRICHMENT = 0;  % 0 for a sqrt spider enrichment
+                              % 1 for sqrt(r)cos(ln(r)) and sqrt(r)sin(ln(r)) spider enrichment
+
+RESIDUAL = 1E-9;     	% residual for iterative methods if any.
+MAXITER = 5000;
+%%%%%   saving parameters                %%%%%
+% STD= Standard XFEM                         %
+% COE= Cutoff_enrichement                    %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ROOTFILENAME = 'ref_NX140_incomp_MR_Fixed_zone_enrichement_amp0_11_lns2';     % Root of data files.
+VTK_EXPORT = 0 % 2 export solution to a .vtk file ?
+
+
diff --git a/contrib/xfem_large_strain/vertex_large_strain.cc b/contrib/xfem_large_strain/vertex_large_strain.cc
index 2bf4907..c44d91d 100644
--- a/contrib/xfem_large_strain/vertex_large_strain.cc
+++ b/contrib/xfem_large_strain/vertex_large_strain.cc
@@ -1,30 +1,31 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
   
 /**
  * Linear Elastostatic problem with a crack.
  *
  * This program is used to check that getfem++ is working. This is also 
  * a good example of use of Getfem++.
- */
+ *
+ **/
 
 #include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
 #include "getfem/getfem_export.h"   /* export functions (save solution in a file)  */
@@ -40,9 +41,14 @@
 #include "getfem/getfem_mesh_fem_sum.h"
 #include "getfem/getfem_superlu.h"
 #include "getfem_nonlinear_elastoptim.h"
+#include "compressible_getfem_nonlinear_elastoptim.h"
 #include "gmm/gmm.h"
 #include "gmm/gmm_inoutput.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
@@ -59,6 +65,7 @@ using bgeot::base_matrix; /* small dense matrix. */
 /* definition of some matrix/vector types. These ones are built
  * using the predefined types in Gmm++
  */
+
 typedef getfem::modeling_standard_sparse_vector sparse_vector;
 typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
 typedef getfem::modeling_standard_plain_vector  plain_vector;
@@ -71,8 +78,8 @@ typedef getfem::modeling_standard_plain_vector  plain_vector;
 /**************************************************************************/
 
 
-scalar_type alpha_md = 0.5;
-scalar_type beta_md = 0.5;
+scalar_type alpha_md = 0.6;
+scalar_type beta_md = -0.5;
 
 struct generic_u_singular_xy_function : public getfem::abstract_xy_function {
     int n;
@@ -87,7 +94,7 @@ scalar_type
 generic_u_singular_xy_function::val(scalar_type x, scalar_type y) const {
   scalar_type r = sqrt(x*x + y*y);  
   if (r < 1e-10)  return 0;
-  scalar_type theta = atan2(x, y);
+  scalar_type theta = atan2(y, x);
   
   if (n <= 0)
     return pow(r, alpha_md) * cos(scalar_type(n) * theta * 0.5);
@@ -102,7 +109,7 @@ generic_u_singular_xy_function::grad(scalar_type x, scalar_type y) const {
   if (r < 1e-10) {
     GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
   }
-  scalar_type theta = atan2(x, y);
+  scalar_type theta = atan2(y, x);
   base_small_vector res(2);
   scalar_type cos_n_2 = cos(scalar_type(n) * theta * 0.5);
   scalar_type sin_n_2 = sin(scalar_type(n) * theta * 0.5);
@@ -137,7 +144,7 @@ scalar_type
 generic_p_singular_xy_function::val(scalar_type x, scalar_type y) const {
   scalar_type r = sqrt(x*x + y*y);  
   if (r < 1e-10)  return 0;
-  scalar_type theta = atan2(x, y);
+  scalar_type theta = atan2(y, x);
   
   if (n <= 0)
     return pow(r, beta_md) * cos(scalar_type(n) * theta * 0.5);
@@ -152,7 +159,7 @@ generic_p_singular_xy_function::grad(scalar_type x, scalar_type y) const {
   if (r < 1e-10) {
     GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
   }
-  scalar_type theta = atan2(x, y);
+  scalar_type theta = atan2(y, x);
   base_small_vector res(2);
   scalar_type cos_n_2 = cos(scalar_type(n) * theta * 0.5);
   scalar_type sin_n_2 = sin(scalar_type(n) * theta * 0.5);
@@ -179,13 +186,15 @@ base_matrix generic_p_singular_xy_function::hess(scalar_type, scalar_type)
 
 
 /**************************************************************************/
-/*                                                                        */
-/* Brick definition.                                                      */
+/* Incompressible cases                                                   */
+/* Brick for incompressible formulation definition.                       */
 /*                                                                        */
 /**************************************************************************/
 
 namespace getfem {
 
+#define COEFF_MULT_ALPHABETA 1
+
 struct nonlinear_elasticity_optim_brick : public virtual_brick {
   
   const abstract_hyperelastic_law &AHL;
@@ -194,12 +203,12 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
   virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
 				      const model::varnamelist &vl,
 				      const model::varnamelist &dl,
-                                        const model::mimlist &mims,
-                                        model::real_matlist &matl,
-                                        model::real_veclist &vecl,
-                                        model::real_veclist &,
-                                        size_type region,
-                                        build_version version) const {
+                                      const model::mimlist &mims,
+                                            model::real_matlist &matl,
+                                            model::real_veclist &vecl,
+				            model::real_veclist &,
+                                            size_type region,
+                                            build_version version) const {
       GMM_ASSERT1(mims.size() == 1,
 		  "Nonlinear elasticity brick need a single mesh_im");
       GMM_ASSERT1(vl.size() == 4,
@@ -207,7 +216,7 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
       GMM_ASSERT1(dl.size() == 1,
 		  "Wrong number of data for nonlinear elasticity brick, "
                   << dl.size() << " should be 1 (vector).");
-      GMM_ASSERT1(matl.size() == 7,  "Wrong number of terms for nonlinear "
+      GMM_ASSERT1(matl.size() == 11,  "Wrong number of terms for nonlinear "
 		  "elasticity brick");
 
       const model_real_plain_vector &u = md.real_variable(vl[0]);
@@ -274,34 +283,49 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
 	  (V, mim, mf_u, u, U_ls, u_enriched_dof,
 	   mf_p, p, P_ls, p_enriched_dof, alpha, beta, mf_params,
 	   params, AHL, ls,rg);
-	gmm::copy(gmm::row_vector(V), matl[0]);
+	cout << "IIncomp********alpha u******* Vecteur alpha u V:" << V << endl; 
+	gmm::copy(gmm::row_vector(gmm::scaled(V, COEFF_MULT_ALPHABETA)),
+		  matl[0]);
+	gmm::copy(gmm::col_vector(V), matl[7]);
 
-	gmm::resize(V, gmm::vect_size(p));
+        gmm::resize(V, gmm::vect_size(p));
 	gmm::clear(V);
 	asm_nonlinear_elasticity_optim_tangent_matrix_alpha_p
 	  (V, mim, mf_u, u, U_ls, u_enriched_dof,
 	   mf_p, p, P_ls, p_enriched_dof, alpha, beta, mf_params,
 	   params, AHL, ls,rg);
-	gmm::copy(gmm::row_vector(V), matl[1]);
+	cout << "IIncomp********alpha p******* Vecteur alpha p V:" << V << endl; 
+
+	gmm::copy(gmm::row_vector(gmm::scaled(V, COEFF_MULT_ALPHABETA)),
+		  matl[1]);
+	gmm::copy(gmm::col_vector(V), matl[8]);
 
 	(matl[2])(0,0)
 	  = asm_nonlinear_elasticity_optim_tangent_matrix_alpha_alpha
 	  (mim, mf_u, u, U_ls, u_enriched_dof,
 	   mf_p, p, P_ls, p_enriched_dof, alpha, beta, mf_params,
-	   params, AHL, ls,rg);
+	   params, AHL, ls,rg) * COEFF_MULT_ALPHABETA;
 
+	cout << "IIncomp********alpha alpha******* Vecteur alpha alpha :" << 
+	  (matl[2])(0,0) << endl; 
 	
 	matl[5](0,0)
 	  = asm_nonlinear_elasticity_optim_tangent_matrix_beta_alpha
 	  (mim, mf_u, u, U_ls, u_enriched_dof,
 	   mf_p, p, P_ls, p_enriched_dof, alpha, beta, mf_params,
-	   params, AHL, ls,rg);
+	   params, AHL, ls,rg) * COEFF_MULT_ALPHABETA;
+
+	cout << "IIncomp********beta alpha******* Vecteur beta alpha :" <<
+	  matl[5](0,0) << endl; 
 
 	matl[6](0,0)
 	  = asm_nonlinear_elasticity_optim_tangent_matrix_beta_beta
 	  (mim, mf_u, u, U_ls, u_enriched_dof,
 	   mf_p, p, P_ls, p_enriched_dof, alpha, beta, mf_params,
-	   params, AHL, ls,rg);
+	   params, AHL, ls,rg) * COEFF_MULT_ALPHABETA;
+
+	cout << "IIncomp********beta beta******* Vecteur beta beta :" <<
+	  matl[6](0,0) << endl;
 
 	gmm::resize(V, gmm::vect_size(u));
 	gmm::clear(V);
@@ -309,7 +333,9 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
 	  (V, mim, mf_u, u, U_ls, u_enriched_dof,
 	   mf_p, p, P_ls, p_enriched_dof, alpha, beta, mf_params,
 	   params, AHL, ls,rg);
-	gmm::copy(gmm::row_vector(V), matl[3]);
+	gmm::copy(gmm::scaled(gmm::row_vector(V), COEFF_MULT_ALPHABETA),
+		  matl[3]);
+	gmm::copy(gmm::col_vector(V), matl[9]);
 
 
 	gmm::resize(V, gmm::vect_size(p));
@@ -318,7 +344,9 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
 	  (V, mim, mf_u, u, U_ls, u_enriched_dof,
 	   mf_p, p, P_ls, p_enriched_dof, alpha, beta, mf_params,
 	   params, AHL, ls,rg);
-	gmm::copy(gmm::row_vector(V), matl[4]);
+	gmm::copy(gmm::scaled(gmm::row_vector(V), COEFF_MULT_ALPHABETA),
+		  matl[4]);
+	gmm::copy(gmm::col_vector(V), matl[10]);
 
       }
 
@@ -329,7 +357,11 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
 					   mf_p, p, P_ls, p_enriched_dof,
 					   alpha, beta,
 					   mf_params, params, AHL, ls, rg);
-	gmm::scale(vecl[0], scalar_type(-1));
+	// gmm::scale(vecl[0], scalar_type(-1));
+	
+	gmm::scale(vecl[0], scalar_type(-COEFF_MULT_ALPHABETA));
+	gmm::scale(vecl[3], scalar_type(-COEFF_MULT_ALPHABETA));
+
       }
 
     }
@@ -344,7 +376,7 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
     }
 
   };
-  
+
   //=========================================================================
   //  Add a nonlinear elasticity brick.  
   //=========================================================================
@@ -358,13 +390,20 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
     pbrick pbr = new nonlinear_elasticity_optim_brick(AHL, ls);
 
     model::termlist tl;
-    tl.push_back(model::term_description(varname_alpha, varname_u, true));
-    tl.push_back(model::term_description(varname_alpha, varname_p, true));
+    tl.push_back(model::term_description(varname_alpha, varname_u, false));
+    tl.push_back(model::term_description(varname_alpha, varname_p, false));
     tl.push_back(model::term_description(varname_alpha, varname_alpha, true));
-    tl.push_back(model::term_description(varname_beta, varname_u, true));
-    tl.push_back(model::term_description(varname_beta, varname_p, true));
+    tl.push_back(model::term_description(varname_beta, varname_u, false));
+    tl.push_back(model::term_description(varname_beta, varname_p, false));
     tl.push_back(model::term_description(varname_beta, varname_alpha, true));
     tl.push_back(model::term_description(varname_beta, varname_beta, true));
+    //
+    //Non symetrie pour multiplier les lignes work in progress 
+    //
+    tl.push_back(model::term_description(varname_u, varname_alpha, false));
+    tl.push_back(model::term_description(varname_p, varname_alpha, false));
+    tl.push_back(model::term_description(varname_u, varname_beta, false));
+    tl.push_back(model::term_description(varname_p, varname_beta, false));
     model::varnamelist dl(1, dataname_law);
     model::varnamelist vl(1, varname_u);
     vl.push_back(varname_p);
@@ -373,17 +412,166 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
     return md.add_brick(pbr, vl, dl, tl, model::mimlist(1,&mim), region);
   }
 
+}
 
 
+/**************************************************************************/
+/*                                                                        */
+/* Compressible cases                                                     */
+/*      Brick for Compressible formulation definition.                    */
+/*                                                                        */
+/**************************************************************************/
 
 
+namespace getfem {
 
+struct nonlinear_elasticity_optim_brick_compressible : public virtual_brick {
+  
+  const abstract_hyperelastic_law &AHL;
+  const getfem::level_set &ls;
+  
+  virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+				      const model::varnamelist &vl,
+				      const model::varnamelist &dl,
+                                      const model::mimlist &mims,
+                                            model::real_matlist &matl,
+                                            model::real_veclist &vecl,
+                                            model::real_veclist &,
+                                            size_type region,
+                                            build_version version) const {
+      GMM_ASSERT1(mims.size() == 1,
+		  "Nonlinear elasticity brick need a single mesh_im");
+      GMM_ASSERT1(vl.size() == 2,
+		  "Nonlinear elasticity brick need a single variable");
+      GMM_ASSERT1(dl.size() == 1,
+		  "Wrong number of data for nonlinear elasticity brick, "
+                  << dl.size() << " should be 1 (vector).");
+      GMM_ASSERT1(matl.size() == 3,  "Wrong number of terms for nonlinear "
+		  "elasticity brick");
 
-}
+      const model_real_plain_vector &u = md.real_variable(vl[0]);
+      const mesh_fem &mf_u = *(md.pmesh_fem_of_variable(vl[0]));
 
+      const model_real_plain_vector &alpha = md.real_variable(vl[1]);
+      
 
+      const mesh_fem *mf_params = md.pmesh_fem_of_variable(dl[0]);
+      const model_real_plain_vector &params = md.real_variable(dl[0]);
+      const mesh_im &mim = *mims[0];
 
+      size_type sl = gmm::vect_size(params);
+      if (mf_params) sl = sl * mf_params->get_qdim() / mf_params->nb_dof();
+      GMM_ASSERT1(sl == AHL.nb_params(), "Wrong number of coefficients for the "
+		  "nonlinear constitutive elastic law");
 
+      mesh_region rg(region);
+      mf_u.linked_mesh().intersect_with_mpi_region(rg);
+
+         
+      
+      std::vector<scalar_type> U_ls(gmm::vect_size(u));
+      
+      dim_type d = mf_u.linked_mesh().dim();
+      dal::bit_vector u_enriched_dof;
+      for (dal::bv_visitor cv(mf_u.linked_mesh().convex_index());
+	   !cv.finished(); ++cv) {
+	pfem pf = mf_u.fem_of_element(cv);
+	for (size_type j = 0; j< pf->nb_dof(cv); ++j)
+	  if (pf->dof_types()[j] == global_dof(d)) {
+	    for (size_type k = 0; k < d; ++k) {
+	      size_type dof = mf_u.ind_basic_dof_of_element(cv)[j*d+k];
+	      u_enriched_dof.add(dof);
+	      U_ls[dof] = u[dof];
+	    }
+	  }
+      }
+ 
+      if (version & model::BUILD_MATRIX) {
+	std::vector<scalar_type> V(gmm::vect_size(u));
+	GMM_TRACE2("Nonlinear elasticity stiffness matrix assembly");
+
+	asm_nonlinear_elasticity_optim_compressible_tangent_matrix_alpha_u
+	  (V, mim, mf_u, u, U_ls, u_enriched_dof, alpha, mf_params, params, AHL, ls,rg);
+	gmm::copy(gmm::row_vector(gmm::scaled(V, COEFF_MULT_ALPHABETA)),
+		  matl[0]);
+	gmm::copy(gmm::col_vector(V), matl[2]);
+      
+        
+       	cout << "CComp********alpha u********** Vecteur alpha u V:" << V << endl; 
+
+
+	(matl[1])(0,0)
+	  = asm_nonlinear_elasticity_optim_compressible_tangent_matrix_alpha_alpha
+	  (mim, mf_u, u, U_ls, u_enriched_dof, alpha, mf_params, params, AHL, ls, rg)* COEFF_MULT_ALPHABETA;
+
+       	cout << "CComp********alpha alpha****** Vecteur alpha alpha :" << 
+	  (matl[1])(0,0) << endl; 
+
+      }
+
+
+      if (version & model::BUILD_RHS) {
+	asm_nonlinear_elasticity_optim_compressible_rhs(vecl[0], mim, 
+					   mf_u, u, U_ls, u_enriched_dof,
+					   alpha, mf_params, params, AHL, ls, rg);
+	//gmm::scale(vecl[0], scalar_type(-1));
+	cout << "CComp********_Right_hand_side******* Partie dL/dalpha :" << 
+	  vecl[0] << endl; 
+	gmm::scale(vecl[0], scalar_type(-COEFF_MULT_ALPHABETA));
+
+
+      }
+
+    }
+
+
+    nonlinear_elasticity_optim_brick_compressible(const abstract_hyperelastic_law &AHL_,
+				     const getfem::level_set &ls_)
+      : AHL(AHL_), ls(ls_) {
+      set_flags("Nonlinear elasticity brick", false /* is linear*/,
+                true /* is symmetric */, true /* is coercive */,
+		true /* is real */, false /* is complex */);
+    }
+
+  };
+
+  //=========================================================================
+  //  Add a nonlinear elasticity brick compressible cases.  
+  //=========================================================================
+
+  size_type add_nonlinear_elasticity_optim_compressible_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &varname_alpha, const abstract_hyperelastic_law &AHL, const std::string &dataname_law,
+   const getfem::level_set &ls, size_type region = size_type(-1)) {
+    pbrick pbr = new nonlinear_elasticity_optim_brick_compressible(AHL, ls);
+
+    model::termlist tl;
+    tl.push_back(model::term_description(varname_alpha, varname_u, false));
+    tl.push_back(model::term_description(varname_alpha, varname_alpha, true));
+
+    //
+    //Non symetrie pour multiplier la partie work in progress 
+    //
+    tl.push_back(model::term_description(varname_u, varname_alpha, false));
+
+    
+    model::varnamelist dl(1, dataname_law);
+    model::varnamelist vl(1, varname_u);
+    vl.push_back(varname_alpha);
+    
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1,&mim), region);
+  }
+
+}
+
+
+
+/*****************************************************************************************************************/
+/*****************************************************************************************************************/
+/*****************************************************************************************************************/
+/*****************************************************************************************************************/
+/*****************************************************************************************************************/
+/*****************************************************************************************************************/
 
 
 /**************************************************************************/
@@ -394,7 +582,7 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
 
 struct crack_problem {
 
-  enum { DIRICHLET_BOUNDARY_NUM = 0, NEUMANN1_BOUNDARY_NUM = 1, NEUMANN2_BOUNDARY_NUM=2, NEUMANN3_BOUNDARY_NUM=3, NEUMANN4_BOUNDARY_NUM=4, MORTAR_BOUNDARY_IN=42, MORTAR_BOUNDARY_OUT=43};
+  enum { DIRICHLET_BOUNDARY_NUM = 0, BOUNDARY_NUM1 = 1, BOUNDARY_NUM2=2, BOUNDARY_NUM3 = 3, BOUNDARY_NUM4 = 4, MORTAR_BOUNDARY_IN=42, MORTAR_BOUNDARY_OUT=43};
   getfem::mesh mesh;  /* the mesh */
   getfem::level_set ls;      /* The two level sets defining the crack.       */
   getfem::mesh_level_set mls;       /* the integration methods for cutted element.    */
@@ -414,7 +602,7 @@ struct crack_problem {
   getfem::mesh_fem_product mf_product_p;
   getfem::mesh_fem_sum mf_p_sum;
 
-  scalar_type pr1, pr2, pr3, AMP_LOAD_X, AMP_LOAD_Y, nb_step;   /* elastic coefficients,Amplitude of load, number of step loadings*/
+  scalar_type pr1, pr2, pr3, AMP_LOAD_X, AMP_LOAD_Y, NB_STEP;   /* elastic coefficients,Amplitude of load, number of step loadings*/
 
   base_small_vector cracktip;
 
@@ -550,7 +738,7 @@ void crack_problem::init(void) {
   pr3 = PARAM.real_value("P3", "Third Elastic coefficient");
   AMP_LOAD_X = PARAM.real_value("AMP_LOAD_X", "Amp load x");
   AMP_LOAD_Y = PARAM.real_value("AMP_LOAD_Y", "Amp load y");
-  nb_step  = PARAM.real_value("nb_step", "nb_step");
+  NB_STEP  = PARAM.real_value("NB_STEP", "NB_STEP");
   reference_test = int(PARAM.int_value("REFERENCE_TEST", "Reference test"));
   cout << "AMP_LOAD_X = " << AMP_LOAD_X << "\n";
   cout << "AMP_LOAD_Y = " << AMP_LOAD_Y << "\n";
@@ -570,9 +758,9 @@ void crack_problem::init(void) {
   base_small_vector tt(N); tt[1] = -0.5;
   mesh.translation(tt); 
   
-  cracktip.resize(2); // Coordonn�e du fond de fissure
-  cracktip[0] = 0.9;
-  cracktip[1] = 0.;
+  cracktip.resize(2); // Coordonn%G�%@e du fond de fissure
+  cracktip[0] = 0.5;
+  cracktip[1] = 0.1;
 
   scalar_type refinement_radius;
   refinement_radius = PARAM.real_value("REFINEMENT_RADIUS", "Refinement Radius");
@@ -683,10 +871,10 @@ void crack_problem::init(void) {
     base_node un = mesh.normal_of_face_of_convex(i.cv(), i.f());
     un /= gmm::vect_norm2(un);
     
-    if (un[0]  > 0.5) mesh.region(NEUMANN1_BOUNDARY_NUM).add(i.cv(), i.f());
-    if (un[1]  > 0.5) mesh.region(NEUMANN2_BOUNDARY_NUM).add(i.cv(), i.f());
-    if (un[0]  < -0.5) mesh.region(NEUMANN3_BOUNDARY_NUM).add(i.cv(), i.f());
-    if (un[1]  < -0.5) mesh.region(NEUMANN4_BOUNDARY_NUM).add(i.cv(), i.f());
+    if (un[0]  >  0.5) mesh.region(BOUNDARY_NUM1).add(i.cv(), i.f());
+    if (un[1]  >  0.5) mesh.region(BOUNDARY_NUM2).add(i.cv(), i.f());
+    if (un[0]  < -0.5) mesh.region(BOUNDARY_NUM3).add(i.cv(), i.f());
+    if (un[1]  < -0.5) mesh.region(BOUNDARY_NUM4).add(i.cv(), i.f());
   }
   
   
@@ -698,8 +886,8 @@ base_small_vector ls_function(const base_node P, int num = 0) {
   base_small_vector res(2);
   switch (num) {
     case 0: {
-      res[0] = y;
-      res[1] = -.5 + x;
+       res[0] = y;
+       res[1] = -.5 + x;
     } break;
     case 1: {
       res[0] = gmm::vect_dist2(P, base_node(0.5, 0.)) - .25;
@@ -778,17 +966,6 @@ scalar_type smallest_eigen_value(const sparse_matrix &B,
   
   return sqrt(1./lambda);
 }
-  
-
-
-
-
-
-
-
-
-
-
 
 /*****************************************************************/
 /*   Model.                                                      */
@@ -805,14 +982,13 @@ namespace getfem {
     typedef VEC VECTOR;
     typedef typename gmm::linalg_traits<VECTOR>::value_type T;
     typedef typename gmm::number_traits<T>::magnitude_type R;
-
     model &md;
-    gmm::abstract_newton_line_search &ls;
+    getfem::abstract_newton_line_search &ls;
     VECTOR stateinit, &state;
     const VECTOR &rhs;
     const MATRIX &K;
     bool with_pseudo_potential;
-
+    // bool with_incompressible_terms;
     void compute_tangent_matrix(void)
     { md.to_variables(state); md.assembly(model::BUILD_MATRIX); }
 
@@ -826,6 +1002,13 @@ namespace getfem {
     void compute_pseudo_potential(void)
     { md.to_variables(state); md.assembly(model::BUILD_PSEUDO_POTENTIAL); }
 
+    void perturbation(void) {
+      R res = gmm::vect_norm2(state), ampl = res / R(1000);
+      if (res == R(0)) ampl = 1E-30;
+      std::vector<R> V(gmm::vect_size(state));
+      gmm::fill_random(V);
+      gmm::add(gmm::scaled(V, ampl), state);
+    }
 
     const VECTOR &residual(void) { return rhs; }
 
@@ -847,12 +1030,9 @@ namespace getfem {
 	alpha = ls.next_try();
 	gmm::add(stateinit, gmm::scaled(dr, alpha), state);
 	
-	// Ici, on récupère alpha et beta de l'enrichissement
-	alpha_md
-	  = state[md.interval_of_variable("alpha").first()];
-	beta_md
-	  = state[md.interval_of_variable("beta").first()];
-
+	// Ici, on recupere alpha et beta de l'enrichissement
+	alpha_md = state[md.interval_of_variable("alpha").first()];
+	beta_md = state[md.interval_of_variable("beta").first()];
 
 	
 	if (alpha < 1E-10) break;
@@ -869,37 +1049,37 @@ namespace getfem {
 	alpha = ls.converged_value();
 	gmm::add(stateinit, gmm::scaled(dr, alpha), state);
 	
-	// Ici, on récupère alpha et beta de l'enrichissement
+	// Ici, on recupere alpha et beta de l'enrichissement
+
 	alpha_md
 	  = state[md.interval_of_variable("alpha").first()];
+
 	beta_md
 	  = state[md.interval_of_variable("beta").first()];
 
-
 	res = ls.converged_residual();
 	compute_residual();
       }
-      cout << "alpha = " << alpha_md << endl << "beta = " << beta_md << endl;
+      cout << "alpha = " << alpha_md << endl ;
+      cout << "beta  = " << beta_md  << endl;
+     
       return alpha;
     }
 
-    my_model_pb(model &m, gmm::abstract_newton_line_search &ls_, VECTOR &st,
-	     const VECTOR &rhs_, const MATRIX &K_,
-	     bool with_pseudo_pot = false)
-      : md(m), ls(ls_), state(st), rhs(rhs_), K(K_),
-	with_pseudo_potential(with_pseudo_pot) {}
+    my_model_pb(model &m, getfem::abstract_newton_line_search &ls_, VECTOR &st,
+	     const VECTOR &rhs_, const MATRIX &K_, bool with_pseudo_pot = false )
+      : md(m), ls(ls_), state(st), rhs(rhs_), K(K_), with_pseudo_potential(with_pseudo_pot) {}
 
   };
 
-  static rmodel_plsolver_type rdefault_linear_solver(const model &md) {
-    return default_linear_solver<model_real_sparse_matrix,
-      model_real_plain_vector>(md);
-  } 
+   static rmodel_plsolver_type rdefault_linear_solver(const model &md) {
+     return default_linear_solver <model_real_sparse_matrix, model_real_plain_vector>(md);
+   } 
   
   template <typename MATRIX, typename VECTOR, typename PLSOLVER>
   void my_solve(model &md, gmm::iteration &iter,
 		PLSOLVER lsolver,
-		gmm::abstract_newton_line_search &ls, const MATRIX &K,
+		getfem::abstract_newton_line_search &ls, const MATRIX &K,
 		const VECTOR &rhs, bool with_pseudo_potential = false) {
     
     VECTOR state(md.nb_dof());
@@ -922,27 +1102,161 @@ namespace getfem {
   
   void my_solve(model &md, gmm::iteration &iter,
 		rmodel_plsolver_type lsolver,
-		gmm::abstract_newton_line_search &ls,
-		bool with_pseudo_potential) {
+		getfem::abstract_newton_line_search &ls,
+		bool with_pseudo_potential ) {
     my_solve(md, iter, lsolver, ls, md.real_tangent_matrix(),
-		   md.real_rhs(), with_pseudo_potential);
+	     md.real_rhs(), with_pseudo_potential );
   }
   
   
   void my_solve(model &md, gmm::iteration &iter,
-		bool with_pseudo_potential = false) {
-    gmm::default_newton_line_search ls;
-    my_solve(md, iter, rdefault_linear_solver(md), ls,
-	     with_pseudo_potential);
+		bool with_pseudo_potential = false ) {
+    getfem::default_newton_line_search ls;
+    my_solve(md, iter, rdefault_linear_solver(md), ls, with_pseudo_potential );
   }
-  
 }
+/*****************************************************************/
+/*                                                               */
+/*   Compressible solver                                         */
+/*                                                               */
+/*****************************************************************/
+
+namespace getfem {
+ template <typename MAT, typename VEC> 
+  struct my_model_pb_comp {
+
+    typedef MAT MATRIX;
+    typedef VEC VECTOR;
+    typedef typename gmm::linalg_traits<VECTOR>::value_type T;
+    typedef typename gmm::number_traits<T>::magnitude_type R;
+    model &md;
+    getfem::abstract_newton_line_search &ls;
+    VECTOR stateinit, &state;
+    const VECTOR &rhs;
+    const MATRIX &K;
+    bool with_pseudo_potential;
+    // bool with_incompressible_terms;
+    void compute_tangent_matrix(void)
+    { md.to_variables(state); md.assembly(model::BUILD_MATRIX); }
+
+    const MATRIX &tangent_matrix(void) { return K; }
+    
+    inline T scale_residual(void) const { return T(1); }
+
+    void compute_residual(void)
+    { md.to_variables(state); md.assembly(model::BUILD_RHS); }
 
+    void compute_pseudo_potential(void)
+    { md.to_variables(state); md.assembly(model::BUILD_PSEUDO_POTENTIAL); }
+
+    void perturbation(void) {
+      R res = gmm::vect_norm2(state), ampl = res / R(1000);
+      if (res == R(0)) ampl = 1E-30;
+      std::vector<R> V(gmm::vect_size(state));
+      gmm::fill_random(V);
+      gmm::add(gmm::scaled(V, ampl), state);
+    }
 
+    const VECTOR &residual(void) { return rhs; }
 
+    R residual_norm(void) { return gmm::vect_norm2(rhs); }
+
+    R line_search(VECTOR &dr, const gmm::iteration &iter) {
+      gmm::resize(stateinit, md.nb_dof());
+      gmm::copy(state, stateinit);
+      R alpha(1), res;
+      if (with_pseudo_potential) {
+	compute_pseudo_potential();
+	res = md.pseudo_potential();
+      } else {
+	res = residual_norm();
+      }
 
+      ls.init_search(res, iter.get_iteration());
+      do {
+	alpha = ls.next_try();
+	gmm::add(stateinit, gmm::scaled(dr, alpha), state);
+	
+	// Ici, on r%G�%@cup%G�%@re alpha et beta de l'enrichissement
+	alpha_md
+	  = state[md.interval_of_variable("alpha").first()];
 
+	if (alpha < 1E-10) break;
+	if (with_pseudo_potential) {
+	  compute_pseudo_potential();
+	  res = md.pseudo_potential();
+	} else {
+	  compute_residual();
+	  res = residual_norm();
+	}
+      } while (!ls.is_converged(res));
 
+      if (alpha != ls.converged_value() || with_pseudo_potential) {
+	alpha = ls.converged_value();
+	gmm::add(stateinit, gmm::scaled(dr, alpha), state);
+	
+	// Ici, on recupere alpha et beta de l'enrichissement
+
+	alpha_md
+	  = state[md.interval_of_variable("alpha").first()];
+
+	res = ls.converged_residual();
+	compute_residual();
+      }
+      cout << "alpha = " << alpha_md << endl ;
+      return alpha;
+    }
+
+    my_model_pb_comp(model &m, getfem::abstract_newton_line_search &ls_, VECTOR &st,
+	     const VECTOR &rhs_, const MATRIX &K_, bool with_pseudo_pot = false )
+      : md(m), ls(ls_), state(st), rhs(rhs_), K(K_), with_pseudo_potential(with_pseudo_pot) {}
+
+  };
+
+  //  static rmodel_plsolver_type rdefault_linear_solver(const model &md) {
+  //  return default_linear_solver <model_real_sparse_matrix, model_real_plain_vector>(md);
+  // } 
+  
+  template <typename MATRIX, typename VECTOR, typename PLSOLVER>
+  void my_solve_comp(model &md, gmm::iteration &iter,
+		PLSOLVER lsolver,
+		getfem::abstract_newton_line_search &ls, const MATRIX &K,
+		const VECTOR &rhs, bool with_pseudo_potential = false) {
+    
+    VECTOR state(md.nb_dof());
+    
+    md.from_variables(state); // copy the model variables in the state vector
+    
+    if (md.is_linear()) {
+      md.assembly(model::BUILD_ALL);
+      (*lsolver)(K, state, rhs, iter);
+    }
+    else {
+      my_model_pb_comp<MATRIX, VECTOR> mdpb(md, ls, state, rhs, K,
+				    with_pseudo_potential);
+      classical_Newton(mdpb, iter, *lsolver);
+    }
+    
+    md.to_variables(state); // copy the state vector into the model variables
+  }
+
+  
+  void my_solve_comp(model &md, gmm::iteration &iter,
+		rmodel_plsolver_type lsolver,
+		getfem::abstract_newton_line_search &ls,
+		bool with_pseudo_potential ) {
+    my_solve_comp(md, iter, lsolver, ls, md.real_tangent_matrix(),
+	     md.real_rhs(), with_pseudo_potential );
+  }
+  
+  
+  void my_solve_comp(model &md, gmm::iteration &iter,
+		bool with_pseudo_potential = false ) {
+    getfem::default_newton_line_search ls;
+    my_solve_comp(md, iter, rdefault_linear_solver(md), ls, with_pseudo_potential );
+  }
+ 
+}
 
 
 
@@ -955,8 +1269,12 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
   size_type nb_dof_rhs = mf_rhs.nb_dof();
   size_type N = mesh.dim();
   ls.reinit();
-  size_type law_num = PARAM.int_value("LAW");
+  size_type LAW_NUM = PARAM.int_value("LAW");
+  size_type line_search_version = PARAM.int_value("line_search_version");
+  size_type PROBLEM_VERSION = PARAM.int_value("PROBLEM_VERSION");
+
   //size_type newton_version = PARAM.int_value("newton_version");
+
   base_vector pr(3); pr[0] = pr1; pr[1] = pr2; pr[2] = pr3;
 
   for (size_type d = 0; d < ls.get_mesh_fem().nb_basic_dof(); ++d) {
@@ -964,7 +1282,6 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
     ls.values(1)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[1];
   }
   ls.touch();
-
   mls.adapt();
   mim.adapt();
   mfls_u.adapt();
@@ -976,10 +1293,8 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
 
   cout << "Setting up the singular functions for the enrichment\n";
 
-  size_type nb_enr_func_u = size_type(PARAM.int_value("NB_ENR_FUNC_U",
-				   "Number of Enriched function for u"));
-  size_type nb_enr_func_p = size_type(PARAM.int_value("NB_ENR_FUNC_P",
-				   "Number of Enriched function for p"));
+  size_type nb_enr_func_u = size_type(PARAM.int_value("NB_ENR_FUNC_U", "Number of Enriched function for u"));
+  size_type nb_enr_func_p = size_type(PARAM.int_value("NB_ENR_FUNC_P", "Number of Enriched function for p"));
 
   std::vector<getfem::pglobal_function> vfunc(2*nb_enr_func_u);
   std::vector<getfem::pglobal_function> vfunc_p(2*nb_enr_func_p);
@@ -1185,9 +1500,12 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
     }
   }
   
-  ///////////////////////////////////////////////////////////////
-  // find the dofs on the upper right and lower right corners  //
-  ///////////////////////////////////////////////////////////////
+  /////////////////////////////////////////////////////////////////////////
+  //                                                                     //
+  //      find the dofs on the upper right and lower right corners       //
+  //                                                                     //
+  /////////////////////////////////////////////////////////////////////////
+
   cout << "Find the dofs on the upper right and lower right corners" << endl;
   scalar_type d1 = 1.0, d2 = 1.0;
   size_type icorner1 = size_type(-1), icorner2 = size_type(-1);
@@ -1212,25 +1530,28 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
   /***********************************************/
   // Choose the material law.
  
-  getfem::abstract_hyperelastic_law *pl = 0;
-  switch (law_num) {
-  case 0: pl = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
-  case 1: pl = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
-  case 2: pl = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
-  case 3: pl = new getfem::Ciarlet_Geymonat_hyperelastic_law(); break;
-  default: GMM_ASSERT1(false, "no such law");
+  getfem::abstract_hyperelastic_law *pl1 = 0, *pl = 0;
+  switch (LAW_NUM) {
+    case 0:
+    case 1: pl1 = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
+    case 2: pl1 = new getfem::Ciarlet_Geymonat_hyperelastic_law(); break;
+    case 3: pl1 = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
+    default: GMM_ASSERT1(false, "no such law");
   }
+
+  if (N == 2) {
+   cout << "2D plane strain hyper-elasticity\n";
+   pl = new getfem::plane_strain_hyperelastic_law(pl1);
+   } else pl = pl1;
+
   pr.resize(pl->nb_params());
-  
-//   if (mixed_pressure) 
-//     cout << "Number of dof for P: " << mf_pe.nb_dof() << endl;
-//   cout << "Number of dof for u: " << mf_u.nb_dof() << endl;
-  
+
   getfem::model model;
   model.add_fem_variable("u", mf_u());
   model.add_fixed_size_variable("alpha", 1);
+  if (mixed_pressure) {
   model.add_fixed_size_variable("beta", 1);
-  
+  }
   model.add_initialized_fixed_size_data("coefficients", pr);
   
   getfem::add_nonlinear_elasticity_brick(model, mim, "u", *pl, "coefficients");
@@ -1240,19 +1561,24 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
     getfem::add_nonlinear_incompressibility_brick(model, mim, "u" , "p", size_type(-1));
     }
   // Add nonlinear elasticity optimazition brick
-
-  add_nonlinear_elasticity_optim_brick(model, mim, "u" , "p", "alpha", "beta",
-				       *pl, "coefficients", ls);
-
- //  getfem::mdbrick_nonlinear_elasticity<>  ELAS(*pl, mim, mf_u(), pr);
- //   getfem::mdbrick_nonlinear_incomp<> INCOMP(ELAS, mf_pe());
-
-
-
-
-
-
-
+  if (mixed_pressure) {
+    add_nonlinear_elasticity_optim_brick(model, mim, "u" , "p", "alpha", "beta", *pl, "coefficients", ls);
+    cout << "IIIIIncompressible Singular Search\n";
+ }
+ else{
+   add_nonlinear_elasticity_optim_compressible_brick(model, mim, "u" , "alpha", *pl, "coefficients", ls);
+   cout << "CCCCCompressible Singular Search\n";
+ }
+
+  /**************************************************************************/
+  /*                                                                        */
+  /* Two problems with different boundary conditions can be solved          */
+  /*                                                                        */
+  /**************************************************************************/
+  
+  switch (PROBLEM_VERSION){
+  case 0 :{
+    cout << "Solving Neumann condition problem *********"<< endl ;
   // Defining the Neumann condition right hand side.
   plain_vector F_Neumann1(nb_dof_rhs * N);
   plain_vector F_Neumann2(nb_dof_rhs * N);
@@ -1260,189 +1586,211 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
   plain_vector F_Neumann4(nb_dof_rhs * N);
   // Neumann condition brick.
    
-  for(size_type i = 0; i < F_Neumann1.size(); i=i+N)
-    F_Neumann1[i] = AMP_LOAD_X;
-  for(size_type i = 1; i < F_Neumann1.size(); i=i+N)
-    F_Neumann1[i] = AMP_LOAD_Y;
-  for(size_type i = 0; i < F_Neumann2.size(); i=i+N)
-    F_Neumann2[i] = AMP_LOAD_X;
-  for(size_type i = 1; i < F_Neumann2.size(); i=i+N)
-    F_Neumann2[i] = AMP_LOAD_Y;
-  for(size_type i = 0; i < F_Neumann3.size(); i=i+N)
-    F_Neumann3[i] = -AMP_LOAD_X;
-  for(size_type i = 1; i < F_Neumann3.size(); i=i+N)
-    F_Neumann3[i] = -AMP_LOAD_Y;
-  for(size_type i = 0; i < F_Neumann4.size(); i=i+N)
-    F_Neumann4[i] = -AMP_LOAD_X;
-  for(size_type i = 1; i < F_Neumann4.size(); i=i+N)
-    F_Neumann4[i] = -AMP_LOAD_Y;
+  for(size_type i = 0; i < F_Neumann1.size(); i=i+N)  F_Neumann1[i] = AMP_LOAD_X;
+  for(size_type i = 1; i < F_Neumann1.size(); i=i+N)  F_Neumann1[i] = AMP_LOAD_X;
+  for(size_type i = 0; i < F_Neumann2.size(); i=i+N)  F_Neumann2[i] = AMP_LOAD_X;
+  for(size_type i = 1; i < F_Neumann2.size(); i=i+N)  F_Neumann2[i] = AMP_LOAD_X;
+  for(size_type i = 0; i < F_Neumann3.size(); i=i+N)  F_Neumann3[i] = -AMP_LOAD_X;
+  for(size_type i = 1; i < F_Neumann3.size(); i=i+N)  F_Neumann3[i] = -AMP_LOAD_X;
+  for(size_type i = 0; i < F_Neumann4.size(); i=i+N)  F_Neumann4[i] = -AMP_LOAD_X;
+  for(size_type i = 1; i < F_Neumann4.size(); i=i+N)  F_Neumann4[i] = -AMP_LOAD_X;
    
    model.add_initialized_fem_data("NeumannData1", mf_rhs,F_Neumann1 );
   getfem::add_source_term_brick
-    (model, mim, "u", "NeumannData1", NEUMANN1_BOUNDARY_NUM);
+    (model, mim, "u", "NeumannData1", BOUNDARY_NUM1);
 
    model.add_initialized_fem_data("NeumannData2", mf_rhs,F_Neumann2 );
   getfem::add_source_term_brick
-    (model, mim, "u", "NeumannData2", NEUMANN2_BOUNDARY_NUM);
+    (model, mim, "u", "NeumannData2", BOUNDARY_NUM2);
 
    model.add_initialized_fem_data("NeumannData3", mf_rhs,F_Neumann3 );
    getfem::add_source_term_brick
-    (model, mim, "u", "NeumannData3", NEUMANN3_BOUNDARY_NUM);
+    (model, mim, "u", "NeumannData3", BOUNDARY_NUM3);
 
-   model.add_initialized_fem_data("NeumannData4", mf_rhs,F_Neumann3 );
+   model.add_initialized_fem_data("NeumannData4", mf_rhs,F_Neumann4 );
    getfem::add_source_term_brick
-    (model, mim, "u", "NeumannData4", NEUMANN4_BOUNDARY_NUM);
+    (model, mim, "u", "NeumannData4", BOUNDARY_NUM4);
 
-  GMM_ASSERT1(N==2, "To be corrected for 3D computation");
-  sparse_matrix BB(3, mf_u().nb_dof());
-  BB(0, icorner1) = 1.0;
-  BB(1, icorner1+1) = 1.0;
-  BB(2, icorner2) = 1.0;
-  std::vector<scalar_type> LRH(3);
-  model.add_fixed_size_variable("dir", 3);
-  getfem::add_constraint_with_multipliers(model, "u", "dir", BB, LRH);
 
 
-   // + nouvelle brique
+       GMM_ASSERT1(N==2, "To be corrected for 3D computation");
+       sparse_matrix BB(3, mf_u().nb_dof());
+       BB(0, icorner1) = 1.0;
+       BB(1, icorner1+1) = 1.0;
+       BB(2, icorner2) = 1.0;
+       std::vector<scalar_type> LRH(3);
+       model.add_fixed_size_variable("dir", 3);
+       getfem::add_constraint_with_multipliers(model, "u", "dir", BB, LRH); 
 
 
+  } break;
+  case 1 :{
+  // Defining the Neumann condition right hand side.
+    cout << "Solving Dirichlet condition problem //////////"<< endl ;
+
+  plain_vector F_Neumann(nb_dof_rhs * N);
+ // Neumann condition brick.
    
+  // for(size_type i = 0; i < F_Neumann.size(); i=i+N) F_Neumann[i] = AMP_LOAD_X;
+
+     for(size_type i = 1; i < F_Neumann.size(); i=i+N) F_Neumann[i] = AMP_LOAD_Y;
+  
    
-   
-   // KILL_RIGID_MOTIONS.set_constraints(BB, plain_vector(4));
-   // KILL_RIGID_MOTIONS.set_constraints_type(getfem::constraints_type(dir_with_mult));
+   model.add_initialized_fem_data("NeumannData", mf_rhs, F_Neumann );
+
+  getfem::add_source_term_brick (model, mim, "u", "NeumannData", BOUNDARY_NUM2);
 
-   // Dirichlet condition brick.
-   // getfem::mdbrick_Dirichlet<> DIRICHLET (KILL_RIGID_MOTIONS, DIRICHLET_BOUNDARY_NUM, mf_mult);
+    //Dirichlet condition brick
+
+    plain_vector F_Diri(nb_dof_rhs * N);
+    
+    // for(size_type i = 0; i < F_Diri.size(); i=i+N) F_Diri[i] = 0;
+    // for(size_type i = 1; i < F_Diri.size(); i=i+N) F_Diri[i] = 0;
+  
+    // gmm::resize(F_Diri, nb_dof_mult);
     
-   // DIRICHLET.set_constraints_type(getfem::constraints_type(PARAM.int_value("DIRICHLET_VERSION")));
+    model.add_initialized_fem_data("Dirichletdata", mf_rhs, F_Diri);
+    if (PARAM.int_value("DIRICHLET_VERSION") == 0)
+    add_Dirichlet_condition_with_multipliers (model, mim, "u", mf_u(), BOUNDARY_NUM4, "Dirichletdata");
+    else
+    add_Dirichlet_condition_with_penalization (model, mim, "u", 1E15, BOUNDARY_NUM4, "Dirichletdata");
 
-   // getfem::mdbrick_abstract<> *final_model = &DIRICHLET;
+     ////////////////////////////////////////// 
+     //                                      //
+     //          Symetrie condition          // 
+     //                                      //
+     //////////////////////////////////////////
 
-/*************************************/
-/*       Generic solve.              */
-/*************************************/
+    model.add_initialized_fixed_size_data("Dirichletsymdata",
+					  plain_vector(N, 0.0));
+    plain_vector HH(N*N); HH[0] = 1.0;
+    model.add_initialized_fixed_size_data("Hdata", HH); 
 
-   // getfem::standard_model_state MS(*final_model);
-   // size_type maxit = PARAM.int_value("MAXITER"); 
-   // gmm::iteration iter;
-  
-   //size_type stnst = PARAM.int_value("stnst");
-  
-  //if (stnst==1) {
- 
- /**********************/
- /*   Step loading     */
- /**********************/
-  // cout << "By step amigoo###################################<<<<<>>>>>>######" << endl;
-  // cout << "Nb de Step " << nb_step <<endl;     
-  // for (int step = 0; step < nb_step; ++step) {
-  // plain_vector DF(F);
-
-  //gmm::copy(gmm::scaled(F, (step+1.)/(scalar_type)nb_step), DF);
-  //NEUMANN4.source_term().set(DF);
-
-       /************************************/
-       /* increment  imposed displacement  */
-       /************************************/ 
-     
-  //KILL_RIGID_MOTIONS.set_constraints(BB, plain_vector(3));
+    getfem::add_generalized_Dirichlet_condition_with_multipliers(model, mim, "u", 1, BOUNDARY_NUM3, "Dirichletsymdata", "Hdata");
 
-    /********************************************************/
-    /* let the default non-linear solve (Newton) do its job */
-    /********************************************************/ 
+  }break;
+  default: GMM_ASSERT1(false, "no such problem");
+  }
 
-    // cout << "step " << step << ", number of variables : " << final_model->nb_dof() << endl;
-    // cout << "DF " << DF <<  endl;
 
-    // iter = gmm::iteration(residual, int(PARAM.int_value("NOISY", "Noisy = ")), maxit ? maxit : 40000);
-    
-    // gmm::abstract_newton_line_search alnrs;
-    // gmm::simplest_newton_line_search silnrs;
-    // gmm::default_newton_line_search dlnrs;
-    // gmm::systematic_newton_line_search sylnrs;
-    
-    // getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), dlnrs);
-
-    // pl->reset_unvalid_flag();
-    //   final_model->compute_residual(MS);
-    // if (pl->get_unvalid_flag())
-    //  GMM_WARNING1("The solution is not completely valid, the determinant "
-    //               "of the transformation is negative on "
-    //               << pl->get_unvalid_flag() << " gauss points");
-
-  //}   
-
-  //}
-  //else{
-  //cout << "Resolution direct =============D=I=R=E=C=T====================> " << endl;
- /****************/
- /*Sans iteration*/
- /****************/
- // iter = gmm::iteration(residual, int(PARAM.int_value("NOISY", "Noisy = ")),
-// 			  maxit ? maxit : 40000);
-    
-    
-//  // gmm::abstract_newton_line_search alnrs;
-//     gmm::simplest_newton_line_search silnrs;
-//     gmm::default_newton_line_search dlnrs;
-//     gmm::systematic_newton_line_search sylnrs;
-    
-//     switch (newton_version){
-    
-//  // case 0: getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), alnrs);
-//     case 1:{
-//       getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), silnrs);
-//       cout << "============================ " << endl;
-//       cout << "=:simplest_newton_line_search= " << endl;
-//       cout << "============================ " << endl;
-//     }break;
-//     case 2:{
-//       getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), dlnrs);
-//       cout << "============================ " << endl;
-//       cout << "=default_newton_line_search= " << endl;
-//       cout << "============================ " << endl;
-//     }break;
-    
 
-//     case 3: {
-//       getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), sylnrs);
-//       cout << "=============================== " << endl;
-//       cout << "=systematic_newton_line_search= " << endl;
-//       cout << "=============================== " << endl;
-//     }break;
-//     default: GMM_ASSERT1(false, "No such newton");
-//     }
-//     pl->reset_unvalid_flag();
-//     final_model->compute_residual(MS);
-//     if (pl->get_unvalid_flag()) 
-//       GMM_WARNING1("The solution is not completely valid, the determinant "
-// 		   "of the transformation is negative on "
-// 		   << pl->get_unvalid_flag() << " gauss points");
-//   }
+
+
+
+   // + nouvelle brique
+
+ 
+   
+   
+  
   gmm::iteration iter(residual, 1, 40000);
   cout << "Solving..." << endl;
   iter.init();
-  alpha_md = 0.5; beta_md = 0.5;
+  // alpha_md = 0.5; beta_md = -0.3;
   std::vector<scalar_type> alpha_v(1), beta_v(1);
-  alpha_v[0] = beta_v[0] = 0.5;
+  alpha_v[0] = alpha_md; beta_v[0] = beta_md;
   gmm::copy(alpha_v, model.set_real_variable("alpha"));
-  gmm::copy(beta_v, model.set_real_variable("beta"));
 
+  if (mixed_pressure) {
+  gmm::copy(beta_v, model.set_real_variable("beta"));
+  }
   gmm::fill_random(model.set_real_variable("u"));
   gmm::scale(model.set_real_variable("u"), 1e-4);
+
+  if (mixed_pressure) {
   gmm::fill_random(model.set_real_variable("p"));
   gmm::scale(model.set_real_variable("p"), 1e-4);
+  }
+
+
+
+   // Recuperation de la matrice tangente  
+   //  gmm::csc_matrix<double> TM;
+   //   cout << " Recuperation de la matrice tangente... " << endl;
+   //   cout << " Before copy Matrix TM  : " << TM << endl;
+   //   gmm::copy(model.real_tangent_matrix(),TM);
+   //   // cout << " After copy Matrix TM   : " << TM(0,0) << endl;
+   //   cout << " Here befor : " << endl;
+   //   MatrixMarket_save("Matrix_Market_Tangent_matrix_", TM);
+   //   cout << " Here after " << endl;
+   //   Harwell_Boeing_save("Harwell_Boeing_Tangent_matrix_", TM);
+
+
+  getfem::simplest_newton_line_search simls(size_t(-1), 6.0/5.0, 0.1, 3.0/5.0);
+  getfem::default_newton_line_search dlnrs;
+  getfem::systematic_newton_line_search sylnrs;
+  getfem::quadratic_newton_line_search qdlnrs;
+
+
+// Line search version
+
+cout << "line search value" <<line_search_version<< endl;
+ switch (line_search_version){
+     
+    case 1:{
+      if (mixed_pressure) {
+	getfem::my_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix, 
+		   getfem::model_real_plain_vector>(model), simls, false);
+    }
+   else
+     {getfem::my_solve_comp(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix, 
+		   getfem::model_real_plain_vector>(model), simls, false);}
+    }break;
+
+    case 2:{
+     if (mixed_pressure) {
+       getfem::my_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix, 
+		   getfem::model_real_plain_vector>(model), dlnrs, false); }
+   else
+   {getfem::my_solve_comp(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix, 
+		   getfem::model_real_plain_vector>(model), dlnrs, false);} 
+
+    }break;
     
 
-  getfem::my_solve(model, iter);
+    case 3: {
+     if (mixed_pressure) {
+  getfem::my_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix, 
+		   getfem::model_real_plain_vector>(model), sylnrs, false);
+ }
+ else
+   {getfem::my_solve_comp(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix, 
+		   getfem::model_real_plain_vector>(model), sylnrs, false);}
+
+    }break;
+
+    case 4: {
+      if (mixed_pressure) {
+	getfem::my_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix, 
+		   getfem::model_real_plain_vector>(model), qdlnrs, false);
+    }
+     else
+       {getfem::my_solve_comp(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix, 
+		   getfem::model_real_plain_vector>(model), qdlnrs, false);} 
+   }break;
+
+
+
+
+    default: GMM_ASSERT1(false, "No such line search");
+    }
+
+
+
+
+
+// Solution extration
+
   gmm::resize(U, mf_u().nb_dof());
   gmm::copy(model.real_variable("u"), U);
 
-
   cout << "alpha = " << alpha_md << endl;
+  if (mixed_pressure) {
   cout << "beta = " << beta_md << endl;
-
+  }
+  
+  
+  
 
 
 //  /*************************************/
@@ -1770,3 +2118,5 @@ int main(int argc, char *argv[]) {
   
   return 0; 
 }
+
+
diff --git a/contrib/xfem_large_strain/vertex_large_strain.param b/contrib/xfem_large_strain/vertex_large_strain.param
index af18eaf..3df5b3b 100644
--- a/contrib/xfem_large_strain/vertex_large_strain.param
+++ b/contrib/xfem_large_strain/vertex_large_strain.param
@@ -1,78 +1,184 @@
-% -*- matlab -*- (enables emacs matlab mode)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%-*- mat-lab -*- (enables emacs matlab mode)                              %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% parameters for program nonlinear elastostatic problem                   %
+% parameters for program crack                                            %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-%%%%% pde parameters :	        				      %%%%%
-LX = .5;		% size in X.
-LY = 1.0;	        % size in Y.
-LZ = 2.0;		% size in Z.
-P1 = 100.;	        % First elastic coefficient.
-P2 = 10.;   	        % Second elastic coefficient.
-P3 = -1.4;   	        % Third elastic coefficient.
-LAW = 2;     % 0 : SaintVenant-Kirchhoff
-             % 1 : SaintVenant-Kirchhoff+incompressibility
-             % 2 : Ciarlet-Geymonat
-             % 3 : Mooney-Rivlin (+incompressibility)
-
-FORCEX = 0;          % Amplitude of the external force
-FORCEY = -0.050;
-FORCEZ = 0;
-TORSION = 2.65; %3.14;
-EXTENSION = 0.0;
+
+MU = 10.0;	        % Lame coefficient.
+QUAD = 0;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%           Nonlinear elasticity                    %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Elastic coefficients                      %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Just for indication 			   %
+%Ogden mu=4.225E05			   %
+%Mooney-Rivlin c1=0.4375*mu c2=0.0625*mu   %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Mooney-Rivlin.                           %  
+%                                         %%%%%%%%%%%
+%W(F)=C_10(I_1-3)+C_01(I_2-3)                       %  
+%For rubbers the Numerical Value are                %
+% C_10 =0.183 MPa.                                  %
+% C_01 =0.0034 MPa.                                 %    
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
+
+ P1 = 1.83 ;	        % First elastic coefficient.
+ P2 = 0.034 ;   	% Second elastic coefficient.
+ P3 = 0 ;   	        % Third elastic coefficient.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Saint-Venant kirchoff                              %  
+%                                                   %
+% W = lambda*0.5*trace(E)^2 + mu*tr(E^2)            %
+%                                                   %  
+% For rubbers the Numerical Value are               %
+% lamda = P1 = 1000000 MPa.                         %
+% Mu    = P2 = 0.33333 MPa.                         %    
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
+
+% P1 = 1000000 ;	        % First elastic coefficient.%
+% P2 = 0.33333 ;   	        % Second elastic coefficient.%
+% P3 = 0 ;   	        % Third elastic coefficient.%
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Hyperelastic law                          %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+LAW = 2 ;     % 1 : SaintVenant-Kirchhoff + incompressibility
+              % 2 : Ciarlet_Geymonat
+              % 3 : Mooney_Rivlin + incompressibility
+
+
+BIMATERIAL = 0;         % 1 : To enable the bimaterial case
+
+if BIMATERIAL
+  MU_UP = 10.0;	
+  MU_DOWN = 1.0;
+end
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%            Line search version           %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+line_search_version = 2     % 1 for simplest_newton_line_search
+                       	    % 2 for default_newton_line_search 
+    		            % 3 for systematic_newton_line_search
+			    % 4 for Quadratic_newton_line_search
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+%            Energy criteria                %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pseudo_Potential = 0   % 1    Enable energy criteria
+                       % else Disable energy criteria 
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Hyperelastic law                          %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+REFINEMENT_RADIUS = 0.05 ;   % REF: 0.4;  % 0 for no refinement
+REFINEMENT_PROCESS = 1 ;  % nb of desired refinement steps
+
+REFERENCE_TEST = 0;     % 1 to compute a reference solution exported into files
+ERROR_TO_REF_SOL = 0;   % 1 to compute errors wrt the reference solution
+INF_SUP_COMP = 0;       % Compute or not the inf_sup condition
+
 %%%%%   discretisation parameters  :                     	      %%%%%
-MESH_TYPE = 'GT_PK(2,1)';         % linear triangles
-%MESH_TYPE = 'GT_QK(3,1)'; % linear rectangles
-%MESH_TYPE = 'GT_PRISM(3,1)';     % 3D prisms
-NX = 2;            	          % space step.
-NZ = 5;
 
 NB_ENR_FUNC_U = 2;
 NB_ENR_FUNC_P = 2;
 
+NX = 4 ;	         % space step.
+MESH_NOISED = 0;         % Set to one if you want to "shake" the mesh.
+AMP_LOAD_X = 0;          % Load in X direction. 
+AMP_LOAD_Y = 0.11;       % Load in Y direction.
+nb_step  = 6;
+NOISY = 0;
+stnst = 0; % 1 Applying load progressively (don't work) 
+
+if (~QUAD)
+  MESH_TYPE = 'GT_PK(2,1)';         % linear triangles
+  FEM_TYPE = 'FEM_PK_WITH_CUBIC_BUBBLE(2,1)';
+ %FEM_TYPE = 'FEM_PK(2,2)';  % PK element %REF: P3
+  DATA_FEM_TYPE = 'FEM_PK(2,1)';
+  INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6), 5)';
+  FEM_TYPE_P = 'FEM_PK(2,1)'; 
+  MORTAR_FEM_TYPE = FEM_TYPE;
+else
+  % MESH_TYPE = 'GT_LINEAR_QK(2)';
+  MESH_TYPE = 'GT_QK(2, 1)';
+  FEM_TYPE = 'FEM_QK(2,1)';  % Q1 fem for quadrangles
+  DATA_FEM_TYPE = 'FEM_QK(2,1)';
+  INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS_PARALLELEPIPED(2, 1), 5)';
+  FEM_TYPE_P = 'FEM_QK(2,1)'; 
+  MORTAR_FEM_TYPE = FEM_TYPE;
+end;
+
+FEM_DISC = 'FEM_PK_DISCONTINUOUS(2,3,0.0001)'; % Discontinuous P1 for triangles
+
+MIXED_PRESSURE = 0;       % Mixed version or not.
+DIRICHLET_VERSION = 0;    % 0 = multipliers, 1 = penalization, 2 = elimination
+
+% integration meth. for sub-simplexe of elements crossed by the level-set
+SIMPLEX_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),3)';
+
+% integration meth. for quasi-polar integration of sub-simplexes
+% adjascent to the level-set
+% (comment it to disable quasipolar integration). Should be a
+% method defined on a square for 2D, or defined on a prism for 3D.
+% SINGULAR_INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(2, 10)';
+SINGULAR_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS_PARALLELEPIPED(2, 6), 9)';
+
+% Enable the following 2 lines to use the precomputed solution as enrichement 
+% GLOBAL_FUNCTION_MF = "bimaterial_crack12.meshfem"
+% GLOBAL_FUNCTION_U  = "bimaterial_crack12.U"
+
+
+ENRICHMENT_OPTION = 3 ; % 0 = Pas d'enrichissement
+	                % 1 = standard XFEM on a fixed zone
+			% 2 = global functions with mortar junction
+		        % 3 = global functions with cutoff
+			% 4 = spider fem alone
+	                % 5 = spider fem enrichment
+
+
+RADIUS_ENR_AREA = 0.2;  % For XFEM and the mortar junction
+
+CUTOFF_FUNC = 1; % 0 for the exponential cutoff. 
+                 % 1 for a 3rd degree polynomial cutoff
+                 % 2 for a 5th degree polynomial cutoff
+
+CUTOFF = 0.2;
+CUTOFF1 = 0.01;
+CUTOFF0 = 0.49;
+
+SPIDER_RADIUS =  0.4;
+SPIDER_NR = 10;               % size of the cartesian mesh in r for spider fem
+SPIDER_NTHETA = 10;           % size of the cartesian mesh in theta for spider fem
+SPIDER_K=1;                   % order of the  spider fem 
+SPIDER_BIMAT_ENRICHMENT = 0;  % 0 for a sqrt spider enrichment
+                              % 1 for sqrt(r)cos(ln(r)) and sqrt(r)sin(ln(r)) spider enrichment
+
+RESIDUAL = 1E-9;     	% residual for iterative methods if any.
+MAXITER = 5000;
+%%%%%   saving parameters                %%%%%
+% STD= Standard XFEM                         %
+% COE= Cutoff_enrichement                    %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ROOTFILENAME = 'Singular_search_test';     % Root of data files.
+VTK_EXPORT = 0 % 2 export solution to a .vtk file ?
+
 
-MESH_NOISED = 0; % Set to one if you want to "shake" the mesh
-
-FEM_TYPE = 'FEM_PK(2,2)';  % P1 for triangles
-%FEM_TYPE = 'FEM_PK_WITH_CUBIC_BUBBLE(3, 1)';
-%FEM_TYPE = 'FEM_PK_WITH_CUBIC_BUBBLE(3, 2)';
-%FEM_TYPE = 'FEM_QK(3,1)';  % Q1 fem for quadrangles
-%FEM_TYPE = 'FEM_PRODUCT(FEM_PK(2,1),FEM_PK(1,1))'; % tensorial product of FEM for prisms
-%FEM_TYPE = 'FEM_PK_HIERARCHICAL(2,2)'; % Hierarchical PK on simplexes
-%FEM_TYPE = 'FEM_PK_HIERARCHICAL_COMPOSITE(2,1,2)'; % Hierarchical PK with s divisions
-
-FEM_TYPE_P = 'FEM_PK(2,1)';  % P1 for triangles
-%FEM_TYPE_P = 'FEM_PK_DISCONTINUOUS(3,1)';  % Discontinuous P1 for triangles
-
-% DATA_FEM_TYPE must be defined if your main FEM is not Lagrangian
-%DATA_FEM_TYPE = 'FEM_PK(2,1)';
-DATA_FEM_TYPE = 'FEM_PK(2,2)'
-
-
-%INTEGRATION = 'IM_TETRAHEDRON(6)'
-INTEGRATION = 'IM_TRIANGLE(6)'; % quadrature rule for polynomials up
-                               % to degree 6 on triangles
-%INTEGRATION = 'IM_EXACT_SIMPLEX(2)'; % exact integration on triangles
-%INTEGRATION = 'IM_NC(2,6)';     % newton-cotes of degree 6 on triangles
-%INTEGRATION = 'IM_NC_PARALLELEPIPED(2,6)'; % newton-cotes, degree 6,
-                                          % quadrangles
-%INTEGRATION = 'IM_NC_PRISM(3,12)'; % newton-cotes, degree 12, prims
-%INTEGRATION = 'IM_GAUSS1D(10)'; % Gauss-Legendre integration on the
-                               % segment of order 10
-%INTEGRATION = 'IM_GAUSSLOBATTO1D(10)'; % Gauss-Lobatto-Legendre
-                                      % integration on the segment
-                                      % of order 10
-%INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(3,5)'; % Product of two
-                                              % IM_GAUSS1D(10) (for
-                                              % quadrangles)
-%INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS1D(5), 3)';
-%INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(7), 3)';
-
-RESIDUAL = 1E-6;     	% residu for iterative solvers.
-MAXITER = 500;
-DIRICHLET_VERSION=0;
-NBSTEP = 5;
-%%%%%   saving parameters                                             %%%%%
-ROOTFILENAME = 'nonlinear_elastostatic';     % Root of data files.
-VTK_EXPORT = 1 % export solution to a .vtk file ?
-NOISY=2 
diff --git a/contrib/xfem_large_strain/xfem_large_strain.cc b/contrib/xfem_large_strain/xfem_large_strain.cc
index 3dbfe29..331aa89 100644
--- a/contrib/xfem_large_strain/xfem_large_strain.cc
+++ b/contrib/xfem_large_strain/xfem_large_strain.cc
@@ -1,30 +1,28 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-  
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
 /**
- * Linear Elastostatic problem with a crack.
- *
- * This program is used to check that getfem++ is working. This is also 
- * a good example of use of Getfem++.
- */
+  Nonlinear elastostatic  crack problem
+  This is an example of use of Getfem++.
+*/
 
 #include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
 #include "getfem/getfem_export.h"   /* export functions (save solution in a file)  */
@@ -39,22 +37,24 @@
 #include "getfem/getfem_spider_fem.h"
 #include "getfem/getfem_mesh_fem_sum.h"
 #include "getfem/getfem_superlu.h"
+#include "getfem_nonlinear_elastoptim.h" /*Optimization procedure to evaluate the order of singularities*/
 #include "gmm/gmm.h"
 #include "gmm/gmm_inoutput.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
 using bgeot::base_vector;
 using bgeot::scalar_type; /* = double */
 using bgeot::size_type;   /* = unsigned long */
-using bgeot::dim_type; 
+using bgeot::dim_type;
 using bgeot::short_type;
-using bgeot::base_vector;
 using bgeot::base_matrix; /* small dense matrix. */
 
-
-
 /* definition of some matrix/vector types. These ones are built
  * using the predefined types in Gmm++
  */
@@ -63,35 +63,272 @@ typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
 typedef getfem::modeling_standard_plain_vector  plain_vector;
 
 /**************************************************************************/
-/*  Structure for the crack problem.                                      */
+/*                                                                        */
+/*                            Enrichment.                                 */
+/*                                                                        */
 /**************************************************************************/
 
-struct crack_problem {
+scalar_type alpha_md = 0.5;
+scalar_type beta_md = 0.5;
+
+struct generic_u_singular_xy_function : public getfem::abstract_xy_function {
+    int n;
+    virtual scalar_type val(scalar_type x, scalar_type y) const;
+    virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+    virtual base_matrix hess(scalar_type x, scalar_type y) const;
+    generic_u_singular_xy_function(int n_) : n(n_) {}
+  };
+
+
+scalar_type 
+generic_u_singular_xy_function::val(scalar_type x, scalar_type y) const {
+  scalar_type r = sqrt(x*x + y*y);  
+  if (r < 1e-10)  return 0;
+  scalar_type theta = atan2(y, x);
+  
+  if (n <= 0)
+    return pow(r, alpha_md-n) * cos(scalar_type(n) * theta * 0.5);
+  else
+    return pow(r, alpha_md+n) * sin(scalar_type(n) * theta * 0.5);
+}
+
+
+base_small_vector
+generic_u_singular_xy_function::grad(scalar_type x, scalar_type y) const {
+  scalar_type r = sqrt(x*x + y*y);
+  if (r < 1e-10) {
+    GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
+  }
+  scalar_type theta = atan2(y,x);
+  base_small_vector res(2);
+  scalar_type cos_n_2 = cos(scalar_type(n) * theta * 0.5);
+  scalar_type sin_n_2 = sin(scalar_type(n) * theta * 0.5);
+
+  if (n <= 0) {
+    res[0] = alpha_md * x * cos_n_2 - scalar_type(n) * 0.5 * y * sin_n_2;
+    res[1] = alpha_md  * y * cos_n_2 + scalar_type(n) * 0.5 * x * sin_n_2;
+  } else {
+    res[0] = alpha_md  * x * sin_n_2 + scalar_type(n) * 0.5 * y * cos_n_2;
+    res[1] = alpha_md  * y * sin_n_2 - scalar_type(n) * 0.5 * x * cos_n_2;
+  }
+
+  gmm::scale(res, pow(r, alpha_md - 2));
+  return res;
+}
+
+
+base_matrix generic_u_singular_xy_function::hess(scalar_type, scalar_type)
+  const {
+  GMM_ASSERT1(false, "To be done !");
+}
+
+struct generic_p_singular_xy_function : public getfem::abstract_xy_function {
+  int n;
+  virtual scalar_type val(scalar_type x, scalar_type y) const;
+  virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+  virtual base_matrix hess(scalar_type x, scalar_type y) const;
+  generic_p_singular_xy_function(int n_) : n(n_) {}
+};
+
+scalar_type
+generic_p_singular_xy_function::val(scalar_type x, scalar_type y) const {
+  scalar_type r = sqrt(x*x + y*y);  
+  if (r < 1e-10)  return 0;
+  scalar_type theta = atan2(y, x);
+  
+  if (n <= 0)
+    return pow(r, beta_md) * cos(scalar_type(n) * theta * 0.5);
+  else
+    return pow(r, beta_md) * sin(scalar_type(n) * theta * 0.5);
+}
+
+
+base_small_vector
+generic_p_singular_xy_function::grad(scalar_type x, scalar_type y) const {
+  scalar_type r = sqrt(x*x + y*y);
+  if (r < 1e-10) {
+    GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
+  }
+  scalar_type theta = atan2(y, x);
+  base_small_vector res(2);
+  scalar_type cos_n_2 = cos(scalar_type(n) * theta * 0.5);
+  scalar_type sin_n_2 = sin(scalar_type(n) * theta * 0.5);
+
+  if (n <= 0) {
+    res[0] = beta_md * x * cos_n_2 - scalar_type(n) * 0.5 * y * sin_n_2;
+    res[1] = beta_md  * y * cos_n_2 + scalar_type(n) * 0.5 * x * sin_n_2;
+  } else {
+    res[0] = beta_md  * x * sin_n_2 + scalar_type(n) * 0.5 * y * cos_n_2;
+    res[1] = beta_md  * y * sin_n_2 - scalar_type(n) * 0.5 * x * cos_n_2;
+  }
+
+  gmm::scale(res, pow(r, beta_md - 2));
+  return res;
+}
+
+
+base_matrix generic_p_singular_xy_function::hess(scalar_type, scalar_type)
+  const {
+  GMM_ASSERT1(false, "To be done !");
+}
+
+
+///////////*/*/*/*////////////////////////////////////////////////////////////////////////
+//                                                                                      //
+//    Displacement Singular functions for crack problem  from Stephenson article 1982   //
+//                                                                                      //
+///////////*/*/*/*////////////////////////////////////////////////////////////////////////
+ 
+struct steph_u_singular_xy_function : public getfem::abstract_xy_function {
+    unsigned l;
+    virtual scalar_type val(scalar_type x, scalar_type y) const;
+    virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+    virtual base_matrix hess(scalar_type x, scalar_type y) const;
+    steph_u_singular_xy_function(unsigned l_) : l(l_) {}
+  };
+
+
+scalar_type steph_u_singular_xy_function::val(scalar_type x, scalar_type y) const {
+  
+  scalar_type r = sqrt(x*x + y*y);  
+  if (r < 1e-10)  return 0;
+  scalar_type theta = atan2(y, x);
+  scalar_type res = 0;
+    switch(l){
+      case 0 : res = r*sin(theta*0.5)*sin(theta*0.5) ; break;
+      case 1 : res = sqrt(r)*sin(theta*0.5)          ; break;
+      default: GMM_ASSERT2(false, "arg");
+    }
+  return res;
+}
+
+
+base_small_vector steph_u_singular_xy_function::grad(scalar_type x, scalar_type y) const {
+  scalar_type r = sqrt(x*x + y*y);
+  
+  scalar_type theta = atan2(y, x);
+  base_small_vector res(2);
+  if (r < 1e-10) {
+    GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
+  }
+  
+    switch(l){
+    case 0 :
+      res[0] = sin(theta*0.5)*sin(theta*0.5);
+      res[1] = sin(theta*0.5)*cos(theta*0.5);
+      break;
+    case 1 :
+      res[0] = (-1/sqrt(r))*0.5*sin(theta*0.5) ;
+      res[1] = 0.5*sqrt(r)*sin(theta*0.5);
+      break;
+      
+      default: GMM_ASSERT2(false, "arg");
+    }
+
+  return res;
+}
+
+
+base_matrix steph_u_singular_xy_function::hess(scalar_type, scalar_type)
+  const {
+  GMM_ASSERT1(false, "To be done !");
+}
+
+
+///////////*/*/*/*////////////////////////////////////////////////////////////////////
+//                                                                                  //
+//    Pressure Singular functions for crack problem  from Stephenson article 1982   //
+//                                                                                  //
+///////////*/*/*/*////////////////////////////////////////////////////////////////////
+ 
+struct steph_p_singular_xy_function : public getfem::abstract_xy_function {
+    unsigned l;
+    virtual scalar_type val(scalar_type x, scalar_type y) const;
+    virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+    virtual base_matrix hess(scalar_type x, scalar_type y) const;
+    steph_p_singular_xy_function(unsigned l_) : l(l_) {}
+  };
+
 
-  enum { DIRICHLET_BOUNDARY_NUM = 0, NEUMANN1_BOUNDARY_NUM = 1, NEUMANN2_BOUNDARY_NUM=2, NEUMANN3_BOUNDARY_NUM=3, NEUMANN4_BOUNDARY_NUM=4, MORTAR_BOUNDARY_IN=42, MORTAR_BOUNDARY_OUT=43};
-  getfem::mesh mesh;  /* the mesh */
+scalar_type steph_p_singular_xy_function::val(scalar_type x, scalar_type y) const {
+  
+  scalar_type r = sqrt(x*x + y*y);  
+  if (r < 1e-10)  return 0;
+  scalar_type theta = atan2(y, x);
+  scalar_type res = 0;
+    switch(l){
+      case 0 : res = 1/r ; break;
+      case 1 : res = sin(theta*0.5)/sqrt(r) ; break;
+      default: GMM_ASSERT2(false, "arg");
+    }
+  return res;
+}
+
+
+base_small_vector steph_p_singular_xy_function::grad(scalar_type x, scalar_type y) const {
+  scalar_type r = sqrt(x*x + y*y);
+  scalar_type theta = atan2(y, x);
+  base_small_vector res(2);
+  if (r < 1e-10) {
+    GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
+  }
+  
+    switch(l){
+    case 0 :
+      res[0] =- 1/(r*r) ;
+      res[1] = 0 ;
+      break;
+    case 1 :
+      res[0] = (-0.5*sin(theta*0.5))/(r*sqrt(r)) ;
+      res[1] = (0.5*sin(theta*0.5))/(r*sqrt(r));
+      break;
+      
+      default: GMM_ASSERT2(false, "arg");
+    }
+
+  return res;
+}
+
+
+base_matrix steph_p_singular_xy_function::hess(scalar_type, scalar_type)
+  const {
+  GMM_ASSERT1(false, "To be done !");
+}
+
+
+
+
+
+/*
+  structure for the elastostatic problem
+*/
+struct cr_nl_elastostatic_problem {
+
+  enum { BOUNDARY_NUM0 = 0, BOUNDARY_NUM1 = 1, BOUNDARY_NUM2 = 2, BOUNDARY_NUM3 = 3, BOUNDARY_NUM4 = 4, PART_CAL_ERROR = 5,DIRICHLET_BOUND=6, MORTAR_BOUNDARY_IN=42, MORTAR_BOUNDARY_OUT=43};
+  getfem::mesh mesh;         /* the mesh */
   getfem::level_set ls;      /* The two level sets defining the crack.       */
-  getfem::mesh_level_set mls;       /* the integration methods.              */
-  getfem::mesh_im_level_set mim;    /* the integration methods.              */
+  getfem::mesh_level_set mls;       /* the integration methods for cutted element.    */
+  getfem::mesh_im_level_set mim;
   getfem::mesh_fem mf_pre_u, mf_pre_mortar;
   getfem::mesh_fem mf_mult, mf_mult_p;
+
   getfem::mesh_fem_level_set mfls_u,mfls_mortar;
   getfem::mesh_fem_global_function mf_sing_u;
   
   getfem::mesh_fem mf_partition_of_unity;
   getfem::mesh_fem_product mf_product;
-  getfem::mesh_fem_sum mf_u_sum;
+  getfem::mesh_fem_sum mf_u_sum/*, mf_u_sumCE*/;
   
   getfem::mesh_fem mf_pre_p; /* mesh_fem for the pressure for mixed form     */
   getfem::mesh_fem_level_set mfls_p;   /* mesh_fem for the pressure enriched with H.   */
   getfem::mesh_fem_global_function mf_sing_p;
   getfem::mesh_fem_product mf_product_p;
-  getfem::mesh_fem_sum mf_p_sum;
-
-  scalar_type pr1, pr2, pr3, AMP_LOAD_X, AMP_LOAD_Y,nb_step;   /* elastic coefficients,Amplitude of load, number of step loadings*/
+  getfem::mesh_fem_sum mf_p_sum /*, mf_p_sumCE*/;
 
   base_small_vector cracktip;
-
+  
+  scalar_type pr1, pr2, pr3, AMP_LOAD_X, AMP_LOAD_Y, nb_step;
+ 
 
 
   struct spider_param {
@@ -107,26 +344,18 @@ struct crack_problem {
 
   spider_param spider;
 
-  getfem::mesh_fem mf_us;
-  //getfem::mesh_fem mf_p;
 
+  getfem::mesh_fem mf_us;
   getfem::mesh_fem& mf_u() { return mf_u_sum; }
-  //getfem::mesh_fem& mfls_p() { return mf_p_sum; }
   getfem::mesh_fem& mf_pe() { return mf_p_sum; }
-  // getfem::mesh_fem& mf_u() { return mf_us; }
+  getfem::mesh_fem mf_rhs;
   
-  //scalar_type mu;            /* Lame coefficients.                */
-  getfem::mesh_fem mf_rhs;   /* mesh_fem for the right hand side (f(x),..)   */
-  
-  
-  int bimaterial;           /* For bimaterial interface fracture */
-  //double mu_up, mu_down;  /*Lame coeff for bimaterial case*/
  
-  scalar_type residual;      /* max residual for the iterative solvers      */
+  scalar_type residual;        /* max residual for the iterative solvers         */
   bool mixed_pressure;
+  //bool sing_search;
   unsigned dir_with_mult;
   scalar_type cutoff_radius, cutoff_radius1, cutoff_radius0, enr_area_radius;
-  
   size_type cutoff_func;
 
   typedef enum { NO_ENRICHMENT=0, 
@@ -138,7 +367,7 @@ struct crack_problem {
   enrichment_option_enum enrichment_option;
 
   std::string datafilename;
-  
+
   int reference_test;
   std::string GLOBAL_FUNCTION_MF, GLOBAL_FUNCTION_U,  GLOBAL_FUNCTION_P;
 
@@ -146,18 +375,17 @@ struct crack_problem {
 
   bool solve(plain_vector &U, plain_vector &P);
   void init(void);
-  crack_problem(void) : ls(mesh, 1, true), mls(mesh), mim(mls), 
-			mf_pre_u(mesh), mf_pre_mortar(mesh), mf_mult(mesh), mf_mult_p(mesh),
-			mfls_u(mls, mf_pre_u), mfls_mortar(mls, mf_pre_mortar),	
-			mf_sing_u(mesh),
-			mf_partition_of_unity(mesh),
-                        mf_product(mf_partition_of_unity, mf_sing_u),
-			mf_u_sum(mesh), mf_pre_p(mesh), mfls_p(mls, mf_pre_p), 
-                        mf_sing_p(mesh), mf_product_p(mf_partition_of_unity, mf_sing_p), 
-                	mf_p_sum(mesh),
-			mf_us(mesh), /*mf_pe(mesh),*/ mf_rhs(mesh)
- {}
-
+  cr_nl_elastostatic_problem(void) : ls(mesh, 1, true), mls(mesh), mim(mls), 
+				     mf_pre_u(mesh), mf_pre_mortar(mesh), mf_mult(mesh), mf_mult_p(mesh),
+				     mfls_u(mls, mf_pre_u), mfls_mortar(mls, mf_pre_mortar),	
+				     mf_sing_u(mesh),
+				     mf_partition_of_unity(mesh),
+				     mf_product(mf_partition_of_unity, mf_sing_u),
+				     mf_u_sum(mesh),
+				     mf_pre_p(mesh), mfls_p(mls, mf_pre_p), 
+				     mf_sing_p(mesh), mf_product_p(mf_partition_of_unity, mf_sing_p), 
+				     mf_p_sum(mesh),
+				     mf_us(mesh),  mf_rhs(mesh) {}
 };
 
 std::string name_of_dof(getfem::pdof_description dof) {
@@ -197,28 +425,25 @@ std::string name_of_dof(getfem::pdof_description dof) {
 }
 
 
+
+
+
+
 /* Read parameters from the .param file, build the mesh, set finite element
- * and integration methods and selects the boundaries.
- */
-void crack_problem::init(void) {
-  std::string MESH_TYPE = PARAM.string_value("MESH_TYPE","Mesh type ");
-  std::string FEM_TYPE  = PARAM.string_value("FEM_TYPE","FEM name");
-  std::string FEM_TYPE_P  = PARAM.string_value("FEM_TYPE_P","FEM name p");
-  std::string INTEGRATION = PARAM.string_value("INTEGRATION",
-					       "Name of integration method");
-  std::string SIMPLEX_INTEGRATION = PARAM.string_value("SIMPLEX_INTEGRATION",
-					 "Name of simplex integration method");
-  std::string SINGULAR_INTEGRATION = PARAM.string_value("SINGULAR_INTEGRATION");
-
-  enrichment_option = enrichment_option_enum(PARAM.int_value("ENRICHMENT_OPTION",
-							     "Enrichment option"));
- 
- /* Affichage */
+   and integration methods and selects the boundaries.
 
-  cout << "MESH_TYPE=" << MESH_TYPE << "\n";
-  cout << "FEM_TYPE="  << FEM_TYPE << "\n";
-  cout << "FFEM_TYPE_P  =" << FEM_TYPE_P <<"\n";  
-  cout << "INTEGRATION=" << INTEGRATION << "\n";
+   (this is boilerplate code, not very interesting)
+ */
+void cr_nl_elastostatic_problem::init(void) {
+
+  std::string MESH_TYPE = PARAM.string_value("MESH_TYPE", "Mesh type");
+  std::string FEM_TYPE  = PARAM.string_value("FEM_TYPE", "FEM name");
+  std::string FEM_TYPE_P  = PARAM.string_value("FEM_TYPE_P", "FEM name for the pressure");
+  std::string INTEGRATION = PARAM.string_value("INTEGRATION", "Name of integration method");
+  std::string SIMPLEX_INTEGRATION = PARAM.string_value("SIMPLEX_INTEGRATION", "Name of simplex integration method");
+  std::string SINGULAR_INTEGRATION = PARAM.string_value("SINGULAR_INTEGRATION", "Singular integration");
+  enrichment_option = enrichment_option_enum(PARAM.int_value("ENRICHMENT_OPTION", "Enrichment option"));
+  /* Lecture des parametres */
   pr1 = PARAM.real_value("P1", "First Elastic coefficient");
   pr2 = PARAM.real_value("P2", "Second Elastic coefficient");
   pr3 = PARAM.real_value("P3", "Third Elastic coefficient");
@@ -226,28 +451,37 @@ void crack_problem::init(void) {
   AMP_LOAD_Y = PARAM.real_value("AMP_LOAD_Y", "Amp load y");
   nb_step  = PARAM.real_value("nb_step", "nb_step");
   reference_test = int(PARAM.int_value("REFERENCE_TEST", "Reference test"));
+  datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
+  residual = PARAM.real_value("RESIDUAL"); if (residual == 0.) residual = 1e-10;
+  
+ /* Affichage */
+
+  cout << "MESH_TYPE=" << MESH_TYPE << "\n";
+  cout << "FEM_TYPE="  << FEM_TYPE << "\n";
+  cout << "FEM_TYPE_P  =" << FEM_TYPE_P <<"\n";  
+  cout << "INTEGRATION=" << INTEGRATION << "\n";
   cout << "AMP_LOAD_X = " << AMP_LOAD_X << "\n";
   cout << "AMP_LOAD_Y = " << AMP_LOAD_Y << "\n";
-  
+  cout << "Reference_test " << AMP_LOAD_Y << "\n";
+
   /* First step : build the mesh */
- 
-  bgeot::pgeometric_trans pgt =  bgeot::geometric_trans_descriptor(MESH_TYPE);
+
+  bgeot::pgeometric_trans pgt = bgeot::geometric_trans_descriptor(MESH_TYPE);
   size_type N = pgt->dim();
   std::vector<size_type> nsubdiv(N);
-  std::fill(nsubdiv.begin(),nsubdiv.end(),
-	    PARAM.int_value("NX", "Nomber of space steps "));
-
-  long int  NX_aff=PARAM.int_value("NX", "Nomber of space steps ");
+  
+  long int  NX_aff = PARAM.int_value("NX", "Nomber of space steps ");
+  std::fill(nsubdiv.begin(),nsubdiv.end(),NX_aff);
   cout << "Number of space step NX= " << NX_aff << "\n";
-  getfem::regular_unit_mesh(mesh, nsubdiv, pgt,
-			    PARAM.int_value("MESH_NOISED") != 0);
+  
+  getfem::regular_unit_mesh(mesh, nsubdiv, pgt, PARAM.int_value("MESH_NOISED") != 0);
+  
   base_small_vector tt(N); tt[1] = -0.5;
-  mesh.translation(tt); 
+  mesh.translation(tt);
   
-  cracktip.resize(2); // Coordonn�e du fond de fissure
-  cracktip[0] = 0.9;
+  cracktip.resize(2); // Coordonnee du fond de fissure
+  cracktip[0] = 0.5;
   cracktip[1] = 0.;
-
   scalar_type refinement_radius;
   refinement_radius = PARAM.real_value("REFINEMENT_RADIUS", "Refinement Radius");
   cout << "refinement_radius= " << refinement_radius << "\n";
@@ -273,40 +507,33 @@ void crack_problem::init(void) {
     cout << "refinement process completed." << endl ;
   }
 
-  mesh.write_to_file("toto.mesh");
-
-
-  datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
-  residual = PARAM.real_value("RESIDUAL");
-  if (residual == 0.) residual = 1e-10;
+  mesh.write_to_file("le_maillage.mesh");
+ if (residual == 0.) residual = 1e-10;
   enr_area_radius = PARAM.real_value("RADIUS_ENR_AREA",
 				     "radius of the enrichment area");
   
   GLOBAL_FUNCTION_MF = PARAM.string_value("GLOBAL_FUNCTION_MF");
   GLOBAL_FUNCTION_U = PARAM.string_value("GLOBAL_FUNCTION_U");
   GLOBAL_FUNCTION_P = PARAM.string_value("GLOBAL_FUNCTION_P");
-
-  
-
-
   cutoff_func = PARAM.int_value("CUTOFF_FUNC", "cutoff function");
-
   cutoff_radius = PARAM.real_value("CUTOFF", "Cutoff");
   cutoff_radius1 = PARAM.real_value("CUTOFF1", "Cutoff1");
-  cutoff_radius0 = PARAM.real_value("CUTOFF0", "Cutoff0");
+  cutoff_radius0 = PARAM.real_value("CUTOFF0", "Cutoff0"); 
   mf_u().set_qdim(dim_type(N));
-  
 
   /* set the finite element on the mf_u */
   getfem::pfem pf_u = 
     getfem::fem_descriptor(FEM_TYPE);
   getfem::pintegration_method ppi = 
     getfem::int_method_descriptor(INTEGRATION);
+
+  /* set the finite element and integration method on the singular mesh */
+
   getfem::pintegration_method simp_ppi = 
     getfem::int_method_descriptor(SIMPLEX_INTEGRATION);
   getfem::pintegration_method sing_ppi = (SINGULAR_INTEGRATION.size() ?
 		getfem::int_method_descriptor(SINGULAR_INTEGRATION) : 0);
-  
+
   mim.set_integration_method(mesh.convex_index(), ppi);
   mls.add_level_set(ls);
   
@@ -318,28 +545,27 @@ void crack_problem::init(void) {
   mf_mult.set_qdim(dim_type(N));
   mf_partition_of_unity.set_classical_finite_element(1);
 
-  mixed_pressure =
-    (PARAM.int_value("MIXED_PRESSURE","Mixed version or not.") != 0);
-  dir_with_mult = unsigned(PARAM.int_value("DIRICHLET_VERSION",
-					   "Version of Dirichlet"));
+  mixed_pressure = (PARAM.int_value("MIXED_PRESSURE","Mixed version or not.") != 0);
+  //sing_search = (PARAM.int_value("SINGULAR_SEARCH","Singular search or not.") != 0);
+  dir_with_mult = unsigned(PARAM.int_value("DIRICHLET_VERSION", "Version of Dirichlet"));
+
   if (mixed_pressure) {
         getfem::pfem pf_p = 
         getfem::fem_descriptor(FEM_TYPE_P);
+	mf_pre_p.set_finite_element(mesh.convex_index(), pf_p);
+	mf_mult_p.set_finite_element(mesh.convex_index(), pf_p);
+    
+  }  
+
 
-  mf_pre_p.set_finite_element(mesh.convex_index(), pf_p);
-  mf_mult_p.set_finite_element(mesh.convex_index(), pf_p);
 
-  // mf_p.set_finite_element(mesh.convex_index(), pf_p);
-  
-    
-  }
 
   /* set the finite element on mf_rhs (same as mf_u is DATA_FEM_TYPE is
      not used in the .param file */
   std::string data_fem_name = PARAM.string_value("DATA_FEM_TYPE");
   if (data_fem_name.size() == 0) {
-    GMM_ASSERT1(pf_u->is_lagrange(), "You are using a non-lagrange FEM. "
-		<< "In that case you need to set "
+    GMM_ASSERT1(pf_u->is_lagrange(), "You are using a non-lagrange FEM"
+		". In that case you need to set "
 		<< "DATA_FEM_TYPE in the .param file");
     mf_rhs.set_finite_element(mesh.convex_index(), pf_u);
   } else {
@@ -347,26 +573,47 @@ void crack_problem::init(void) {
 			      getfem::fem_descriptor(data_fem_name));
   }
   
+  /* set the finite element on mf_coef. Here we use a very simple element
+   *  since the only function that need to be interpolated on the mesh_fem 
+   * is f(x)=1 ... */
+  
+
   /* set boundary conditions
    * (Neuman on the upper face, Dirichlet elsewhere) */
+
+/*******************************************************************************/
+/*         Select the part of convex where the error will be calculation       */
+/*******************************************************************************/
+
+
+  //for(getfem::mr_visitor it_err(mesh.convex_index()); !it_err.finished(); ++it_err){   
+  
+  //base_node un1_cal_err = mesh.normal_of_face_of_convex(it_err.cv(), it_err.f());
+  //un1_cal_err /= gmm::vect_norm2(un1_cal_err);
+  //if (un1_cal_err[1]> -0.5) mesh.region(PART_CAL_ERROR).add(it_err.cv());   
+  //
+  //    }
+
+
+
   cout << "Selecting Neumann and Dirichlet boundaries\n";
   getfem::mesh_region border_faces;
   getfem::outer_faces_of_mesh(mesh, border_faces);
-  for (getfem::mr_visitor i(border_faces); !i.finished(); ++i) {
-    
-    base_node un = mesh.normal_of_face_of_convex(i.cv(), i.f());
+  for (getfem::mr_visitor it(border_faces); !it.finished(); ++it) {
+    assert(it.is_face());
+    base_node un = mesh.normal_of_face_of_convex(it.cv(), it.f());
     un /= gmm::vect_norm2(un);
-    
-    if (un[0]  > 0.5) mesh.region(NEUMANN1_BOUNDARY_NUM).add(i.cv(), i.f());
-    if (un[1]  > 0.5) mesh.region(NEUMANN2_BOUNDARY_NUM).add(i.cv(), i.f());
-    if (un[0]  < -0.5) mesh.region(NEUMANN3_BOUNDARY_NUM).add(i.cv(), i.f());
-    if (un[1]  < -0.5) mesh.region(NEUMANN4_BOUNDARY_NUM).add(i.cv(), i.f());
+
+    if (un[0]  > 0.5) mesh.region(BOUNDARY_NUM1).add(it.cv(), it.f());
+    if (un[1]  > 0.5) mesh.region(BOUNDARY_NUM2).add(it.cv(), it.f());
+    if (un[0]  < -0.5) mesh.region(BOUNDARY_NUM3).add(it.cv(), it.f());
+    if (un[1]  < -0.5) mesh.region(BOUNDARY_NUM4).add(it.cv(), it.f());   
+
   }
-  
-  
 }
 
 
+
 base_small_vector ls_function(const base_node P, int num = 0) {
   scalar_type x = P[0], y = P[1];
   base_small_vector res(2);
@@ -439,6 +686,7 @@ scalar_type smallest_eigen_value(const sparse_matrix &B,
     lambda = gmm::vect_norm2(V2);
 
 //  compute the Rayleigh quotient
+
 //     mult(G, V2, W);
 //     scalar_type lambda2 = gmm::vect_sp(V2, W);
 //     gmm::mult(M, V2, W);
@@ -452,24 +700,26 @@ scalar_type smallest_eigen_value(const sparse_matrix &B,
   
   return sqrt(1./lambda);
 }
-  
-
-
-/*****************************************************************/
-/*   Model.                                                      */
-/*****************************************************************/
+/**************************************************************************/
+/*  Model.                                                                */
+/**************************************************************************/
 
-bool crack_problem::solve(plain_vector &U, plain_vector &P) {
+bool cr_nl_elastostatic_problem::solve(plain_vector &U, plain_vector &P) {
   size_type nb_dof_rhs = mf_rhs.nb_dof();
+  // size_type nb_dof_mult = mf_mult.nb_dof();
   size_type N = mesh.dim();
   ls.reinit();
   size_type law_num = PARAM.int_value("LAW");
-  size_type newton_version = PARAM.int_value("newton_version");
+  size_type line_search_version = PARAM.int_value("line_search_version");
+  size_type Pseudo_Potential = PARAM.int_value("Pseudo_Potential");
+  std::cout<<"law num  "<< law_num << endl;
+  
   base_vector pr(3); pr[0] = pr1; pr[1] = pr2; pr[2] = pr3;
 
   for (size_type d = 0; d < ls.get_mesh_fem().nb_basic_dof(); ++d) {
     ls.values(0)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[0];
     ls.values(1)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[1];
+    
   }
   ls.touch();
 
@@ -479,101 +729,71 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
   mfls_p.adapt();
   mfls_mortar.adapt(); mfls_mortar.set_qdim(2);
 
-  bool load_global_fun = GLOBAL_FUNCTION_MF.size() != 0;
+  //  bool load_global_fun = GLOBAL_FUNCTION_MF.size() != 0;
 
 
   cout << "Setting up the singular functions for the enrichment\n";
 
+  // size_type nb_enr_func_u = size_type(PARAM.int_value("NB_ENR_FUNC_U", "Number of Enriched function for u"));
+  // size_type nb_enr_func_p = size_type(PARAM.int_value("NB_ENR_FUNC_P", "Number of Enriched function for p"));
+
+    //std::vector<getfem::pglobal_function> vfunc(2*nb_enr_func_u);
+    //std::vector<getfem::pglobal_function> vfunc_p(2*nb_enr_func_p);
   std::vector<getfem::pglobal_function> vfunc(2);
   std::vector<getfem::pglobal_function> vfunc_p(2);
-  if (!load_global_fun) {
-  std::cout << "Using default singular functions\n";
-    for (unsigned i = 0; i < vfunc.size(); ++i){
-      /* use the singularity */
-     
-      getfem::abstract_xy_function *s = 
-	new getfem::crack_singular_xy_function(i+12);
-      
-      if (enrichment_option != FIXED_ZONE && 
-	  enrichment_option != GLOBAL_WITH_MORTAR) {
-	/* use the product of the singularity function
-	   with a cutoff */
-	getfem::abstract_xy_function *c = 
-	  new getfem::cutoff_xy_function(int(cutoff_func),
-					 cutoff_radius, 
-					 cutoff_radius1,cutoff_radius0);
-	s  = new getfem::product_of_xy_functions(*s, *c);
-        
-      }
-      vfunc[i]=getfem::global_function_on_level_set(ls, *s);           
-    }
 
-     for (unsigned i = 0; i < vfunc_p.size() ;++i){
-       /* use the singularity */
+  std::cout << "Using default singular functions\n";
+  for (unsigned i = 0; i < vfunc.size(); ++i){
+    
+    // getfem::abstract_xy_function *s;
+//     if (i < nb_enr_func_u){
+//      s = new generic_u_singular_xy_function(i+1);
+//     }
+//     else{
+//      s = new generic_u_singular_xy_function(-(i+1));
+//       }
+
+    getfem::abstract_xy_function *s = 
+        new steph_u_singular_xy_function(i);
+
+    if (enrichment_option != FIXED_ZONE && 
+	enrichment_option != GLOBAL_WITH_MORTAR) {
+      /* use the product of the singularity function
+	 with a cutoff */
+
+      getfem::abstract_xy_function *c = 
+	new getfem::cutoff_xy_function(int(cutoff_func),
+				       cutoff_radius, 
+				       cutoff_radius1,cutoff_radius0);
+      s  = new getfem::product_of_xy_functions(*s, *c);
       
-       getfem::abstract_xy_function *sp = 
- 	new getfem::crack_singular_xy_function(i+14);      
-       if (enrichment_option != FIXED_ZONE && 
- 	  enrichment_option != GLOBAL_WITH_MORTAR) {
- 	/* use the product of the singularity function
- 	   with a cutoff */
- 	getfem::abstract_xy_function *cp = 
-	  new getfem::cutoff_xy_function(int(cutoff_func),
- 					 cutoff_radius, 
- 					 cutoff_radius1,cutoff_radius0);
- 	sp  = new getfem::product_of_xy_functions(*sp, *cp);
-        
-       }
-       vfunc_p[i]=getfem::global_function_on_level_set(ls, *sp);           
     }
-  } else {
-    cout << "Load singular functions from " << GLOBAL_FUNCTION_MF << " and " << GLOBAL_FUNCTION_U <<" and " << GLOBAL_FUNCTION_P << "\n";
-    getfem::mesh *m = new getfem::mesh(); 
-    m->read_from_file(GLOBAL_FUNCTION_MF);
-    getfem::mesh_fem *mf_c = new getfem::mesh_fem(*m); 
-    mf_c->read_from_file(GLOBAL_FUNCTION_MF);
-    std::fstream f(GLOBAL_FUNCTION_U.c_str(), std::ios::in);
-    std::fstream fp(GLOBAL_FUNCTION_P.c_str(), std::ios::in);
-    plain_vector W(mf_c->nb_dof());
-    plain_vector WP(mf_c->nb_dof());
-
-
+    vfunc[i]=getfem::global_function_on_level_set(ls, *s);       
+  }
   
-    for (unsigned i=0; i < mf_c->nb_dof(); ++i) {
-      f >> W[i]; GMM_ASSERT1(f.good(), "problem while reading " << GLOBAL_FUNCTION_U);
+  for (unsigned i = 0; i < vfunc_p.size() ;++i){
+    
+
+   // getfem::abstract_xy_function *sp;
+   //        if (i < nb_enr_func_p)
+   //          sp = new generic_p_singular_xy_function(i+1);
+   //        else
+   //          sp = new generic_p_singular_xy_function(-(i+1));
+    getfem::abstract_xy_function *sp = 
+        new steph_p_singular_xy_function(i);
+                 
+    if (enrichment_option != FIXED_ZONE && 
+	enrichment_option != GLOBAL_WITH_MORTAR) {
+      /* use the product of the singularity function
+	 with a cutoff */
+      getfem::abstract_xy_function *cp = 
+	new getfem::cutoff_xy_function(int(cutoff_func),
+				       cutoff_radius, 
+				       cutoff_radius1,cutoff_radius0);
+      sp  = new getfem::product_of_xy_functions(*sp, *cp);
       
-      //cout << "The precalculated dof " << i << " of coordinates " << mf_c->point_of_dof(i) << " is "<< W[i] <<endl; 
-      /*scalar_type x = pow(mf_c->point_of_dof(i)[0],2); scalar_type y = pow(mf_c->point_of_dof(i)[1],2);
-	scalar_type r = std::sqrt(pow(x,2) + pow(y,2));
-	scalar_type sgny = (y < 0 ? -1.0 : 1.0);
-	scalar_type sin2 = sqrt(gmm::abs(.5-x/(2*r))) * sgny;
-	scalar_type cos2 = sqrt(gmm::abs(.5+x/(2*r)));
-	W[i] = std::sqrt(r) * sin2;
-      */
     }
-    unsigned nb_func = mf_c->get_qdim();
-    cout << "read " << nb_func << " global functions OK.\n";
-    vfunc.resize(nb_func);
-    getfem::interpolator_on_mesh_fem *global_interp = 
-      new getfem::interpolator_on_mesh_fem(*mf_c, W);
-    for (size_type i=0; i < nb_func; ++i) {
-      /* use the precalculated function for the enrichment*/
-      //getfem::abstract_xy_function *s = new getfem::crack_singular_xy_function(i);
-      getfem::abstract_xy_function *s = new getfem::interpolated_xy_function(*global_interp,i);
-
-      if (enrichment_option != FIXED_ZONE && 
-	  enrichment_option != GLOBAL_WITH_MORTAR) {
-
-	/* use the product of the enrichment function
-	   with a cutoff */
-	getfem::abstract_xy_function *c = 
-	  new getfem::cutoff_xy_function(int(cutoff_func),
-					 cutoff_radius, 
-					 cutoff_radius1,cutoff_radius0);
-	s = new getfem::product_of_xy_functions(*s, *c);
-      }    
-      vfunc[i] = getfem::global_function_on_level_set(ls, *s);
-    }    
+    vfunc_p[i]=getfem::global_function_on_level_set(ls, *sp);           
   }
   
   mf_sing_u.set_functions(vfunc);
@@ -586,6 +806,7 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
 					spider.theta0, spider.bimat_enrichment,
 					spider.epsilon);
     mf_us.set_finite_element(mesh.convex_index(),spider.fem->get_pfem());
+
     for (dal::bv_visitor_c i(mf_us.convex_index()); !i.finished(); ++i) {
       if (mf_us.fem_of_element(i)->nb_dof(i) == 0) {
 	mf_us.set_finite_element(i,0);
@@ -700,7 +921,7 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
 
 
   if (mixed_pressure)
-    //cout << "Number of dof for P mfls: " << mfls_p().nb_basic_dof() << endl;
+    
     cout << "Number of dof for P mf_pe: " << mf_pe().nb_basic_dof() << endl;
     cout << "Number of dof for u: " << mf_u().nb_basic_dof() << endl;
 
@@ -732,221 +953,266 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
     }
   }
   
+  //////////////////////////////////////////////////////////////////////
+  //                                                                  //
+  //     find the dofs on the upper right and lower right corners     //
+  //                                                                  //
+  //////////////////////////////////////////////////////////////////////
+
+   cout << "Find the dofs on the upper right and lower right corners" << endl;
+     scalar_type d1 = 1.0, d2 = 1.0;
+     size_type icorner1 = size_type(-1), icorner2 = size_type(-1);
+     base_node corner1 = base_node(1.0, -0.5);
+     base_node corner2 = base_node(1.0, 0.5);
+     GMM_ASSERT1(!(mf_u().is_reduced()), "To be adapted for reduced fems");
+     
+     for (size_type i = 0; i < mf_u().nb_basic_dof(); i+=N) {
+    
+       scalar_type dd1 = gmm::vect_dist2(mf_u().point_of_basic_dof(i), corner1);
+       if (dd1 < d1) { icorner1 = i; d1 = dd1; }
+       scalar_type dd2 = gmm::vect_dist2(mf_u().point_of_basic_dof(i), corner2);
+       if (dd2 < d2) { icorner2 = i; d2 = dd2; }
+       
+       }
 
-  // find the dofs on the upper right and lower right corners
-
-  scalar_type d1 = 1.0, d2 = 1.0;
-  size_type icorner1 = size_type(-1), icorner2 = size_type(-1);
-  base_node corner1 = base_node(1.0, -0.5);
-  base_node corner2 = base_node(1.0, 0.5);
-  GMM_ASSERT1(!(mf_u().is_reduced()), "To be adapted for reduced fems");
-  for (size_type i = 0; i < mf_u().nb_basic_dof(); i+=N) {
-    scalar_type dd1 = gmm::vect_dist2(mf_u().point_of_basic_dof(i), corner1);
-    if (dd1 < d1) { icorner1 = i; d1 = dd1; }
-    scalar_type dd2 = gmm::vect_dist2(mf_u().point_of_basic_dof(i), corner2);
-    if (dd2 < d2) { icorner2 = i; d2 = dd2; }
-  }
+    GMM_ASSERT1(((d1 < 1E-8) && (d2 < 1E-8)),
+   	       "Upper right or lower right corners not found d1 = "
+   	       << d1 << " d2 = " << d2);
 
-  GMM_ASSERT1(((d1 < 1E-8) && (d2 < 1E-8)),
-	      "Upper right or lower right corners not found d1 = "
-	      << d1 << " d2 = " << d2);
-  // Nonlinear-elasticity brick.
+  /*******************************************/
+  /*                                         */
+  /*         choose the material law         */
+  /*                                         */
+  /*******************************************/
 
-  // Choose the material law.
- 
- getfem::abstract_hyperelastic_law *pl = 0;
+  getfem::abstract_hyperelastic_law *pl1 = 0, *pl = 0;
   switch (law_num) {
-    case 0: pl = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
-    case 1: pl = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
+    case 0:
+    case 1: pl1 = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
+    case 2: pl1 = new getfem::Ciarlet_Geymonat_hyperelastic_law(); break;
+    case 3: pl1 = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
     default: GMM_ASSERT1(false, "no such law");
   }
 
+  if (N == 2) {
+   cout << "2D plane strain hyper-elasticity\n";
+   pl = new getfem::plane_strain_hyperelastic_law(pl1);
+   } else pl = pl1;
+
   pr.resize(pl->nb_params());
-  getfem::mdbrick_nonlinear_elasticity<>  ELAS(*pl, mim, mf_u(), pr);
+  cout << "parametre du loi de comportements "<< pr << endl ;
 
-  getfem::mdbrick_nonlinear_incomp<> INCOMP(ELAS, mf_pe());
+  //pl1->test_derivatives(3, 5e-9, pr);
 
-  // Defining the Neumann condition right hand side.
-  plain_vector F_Neumann1(nb_dof_rhs * N);
-  plain_vector F_Neumann2(nb_dof_rhs * N);
-  plain_vector F_Neumann3(nb_dof_rhs * N);
-  plain_vector F_Neumann4(nb_dof_rhs * N);
-  // Neumann condition brick.
-  
-  // down side
-  for(size_type i = 0; i < F_Neumann1.size(); i=i+N) F_Neumann1[i] = AMP_LOAD_X;
-  for(size_type i = 1; i < F_Neumann1.size(); i=i+N) F_Neumann1[i] = AMP_LOAD_Y;
-  for(size_type i = 0; i < F_Neumann2.size(); i=i+N) F_Neumann2[i] = AMP_LOAD_X;
-  for(size_type i = 1; i < F_Neumann2.size(); i=i+N) F_Neumann2[i] = AMP_LOAD_Y;
-  for(size_type i = 0; i < F_Neumann3.size(); i=i+N) F_Neumann3[i] = -AMP_LOAD_X;
-  for(size_type i = 1; i < F_Neumann3.size(); i=i+N) F_Neumann3[i] = -AMP_LOAD_Y;
-  for(size_type i = 0; i < F_Neumann4.size(); i=i+N) F_Neumann4[i] = -AMP_LOAD_X;
-  for(size_type i = 1; i < F_Neumann4.size(); i=i+N) F_Neumann4[i] = -AMP_LOAD_Y;
-  
-  getfem::mdbrick_source_term<> NEUMANN1(INCOMP, mf_rhs, F_Neumann1,
-					 NEUMANN1_BOUNDARY_NUM);
-  getfem::mdbrick_source_term<> NEUMANN2(NEUMANN1, mf_rhs, F_Neumann2,
-					 NEUMANN2_BOUNDARY_NUM);
-  //gmm::scale(F, -1.0);
-  
-  getfem::mdbrick_source_term<> NEUMANN3(NEUMANN2, mf_rhs, F_Neumann3,
-					 NEUMANN3_BOUNDARY_NUM);
-  getfem::mdbrick_source_term<> NEUMANN4(NEUMANN3, mf_rhs, F_Neumann4,
-					 NEUMANN4_BOUNDARY_NUM);
+
+  getfem::model model;
   
+  // Main unknown of the problem (displacement).
 
-  getfem::mdbrick_constraint<> KILL_RIGID_MOTIONS(NEUMANN4);
-  GMM_ASSERT1(N==2, "To be corrected for 3D computation");
-  sparse_matrix BB(4, mf_u().nb_dof());
-  BB(0, icorner1) = 1.0;
-  BB(1, icorner1+1) = 1.0;
-  BB(2, icorner2) = 1.0;
-  BB(3, icorner2+1) = 1.0;
-  KILL_RIGID_MOTIONS.set_constraints(BB, plain_vector(4));
-  KILL_RIGID_MOTIONS.set_constraints_type(getfem::constraints_type(dir_with_mult));
-
-  // Dirichlet condition brick.
-  getfem::mdbrick_Dirichlet<> DIRICHLET (KILL_RIGID_MOTIONS, DIRICHLET_BOUNDARY_NUM, mf_mult);
-    
- DIRICHLET.set_constraints_type(getfem::constraints_type(PARAM.int_value("DIRICHLET_VERSION")));
+   model.add_fem_variable("u", mf_u());
 
- getfem::mdbrick_abstract<> *final_model = &DIRICHLET;
+  // model.add_fem_variable("u",  error_cal);
 
-/*************************************/
-/*       Generic solve.              */
-/*************************************/
+  // Nonlinear elasticity brick
+  model.add_initialized_fixed_size_data("params", pr);
+  getfem::add_nonlinear_elasticity_brick(model, mim, "u", *pl, "params");
 
-  getfem::standard_model_state MS(*final_model);
-  size_type maxit = PARAM.int_value("MAXITER"); 
-  gmm::iteration iter;
-  
-  size_type stnst = PARAM.int_value("stnst");
+  // Incompressibility
+
+  if (mixed_pressure && (law_num == 1 || law_num == 3)) {
+    cout << "mixed pressure <|-------------------------|>" << endl;
+    model.add_fem_variable("p", mf_pe());
+    getfem::add_nonlinear_incompressibility_brick(model, mim, "u", "p", size_type(-1));
+  }
+
+ // Defining the Neumann condition right hand side.
+  plain_vector F_Neumann(nb_dof_rhs * N);
+ // Neumann condition brick.
+   
+  for(size_type i = 0; i < F_Neumann.size(); i=i+N) F_Neumann[i] = AMP_LOAD_X;
+  for(size_type i = 1; i < F_Neumann.size(); i=i+N) F_Neumann[i] = AMP_LOAD_Y;
   
-if (stnst==1) {
- 
-/********************/
- /* Step loading     */
- /********************/
-    cout << "By step amigoo###################################<<<<<>>>>>>######" << endl;
-    cout << "Nb de Step " << nb_step <<endl;     
-for (int step = 0; step < nb_step; ++step) {
-  //plain_vector DF(F);
-
-  //gmm::copy(gmm::scaled(F, (step+1.)/(scalar_type)nb_step), DF);
-  //NEUMANN4.source_term().set(DF);
-
-       /************************************/
-       /* increment  imposed displacement  */
-       /************************************/ 
-     
-  //KILL_RIGID_MOTIONS.set_constraints(BB, plain_vector(3));
+   
+   model.add_initialized_fem_data("NeumannData", mf_rhs, F_Neumann );
 
-    /********************************************************/
-    /* let the default non-linear solve (Newton) do its job */
-    /********************************************************/ 
+  getfem::add_source_term_brick (model, mim, "u", "NeumannData", BOUNDARY_NUM2);
 
-    cout << "step " << step << ", number of variables : " << final_model->nb_dof() << endl;
-    //cout << "DF " << DF <<  endl;
+    //Dirichlet condition brick
 
-    iter = gmm::iteration(residual, int(PARAM.int_value("NOISY", "Noisy = ")),
-                          maxit ? maxit : 40000);
+    plain_vector F_Diri(nb_dof_rhs * N);
     
-    // gmm::abstract_newton_line_search alnrs;
-    // gmm::simplest_newton_line_search silnrs;
-    gmm::default_newton_line_search dlnrs;
-    // gmm::systematic_newton_line_search sylnrs;
+    // for(size_type i = 0; i < F_Diri.size(); i=i+N) F_Diri[i] = 0;
+    // for(size_type i = 1; i < F_Diri.size(); i=i+N) F_Diri[i] = 0;
+  
+    // gmm::resize(F_Diri, nb_dof_mult);
     
-    getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), dlnrs);
+    model.add_initialized_fem_data("Dirichletdata", mf_rhs, F_Diri);
+    if (PARAM.int_value("DIRICHLET_VERSION") == 0)
+    add_Dirichlet_condition_with_multipliers (model, mim, "u", mf_u(), BOUNDARY_NUM4, "Dirichletdata");
+    else
+    add_Dirichlet_condition_with_penalization (model, mim, "u", 1E15, BOUNDARY_NUM4, "Dirichletdata");
 
-    pl->reset_unvalid_flag();
-    final_model->compute_residual(MS);
-    if (pl->get_unvalid_flag())
-      GMM_WARNING1("The solution is not completely valid, the determinant "
-                   "of the transformation is negative on "
-                   << pl->get_unvalid_flag() << " gauss points");
+//     ////////////////////////////////////////// 
+//     //                                      //
+//     //     Symetrie condition               // 
+//     //                                      //
+//     //////////////////////////////////////////
 
-    }   
+    model.add_initialized_fixed_size_data("Dirichletsymdata",
+					  plain_vector(N, 0.0));
+    plain_vector HH(N*N); HH[0] = 1.0;
+    model.add_initialized_fixed_size_data("Hdata", HH); 
 
-  }
-  else{
- cout << "Resolution direct =============D=I=R=E=C=T====================> " << endl;
- /****************/
- /*Sans iteration*/
- /****************/
-iter = gmm::iteration(residual, int(PARAM.int_value("NOISY", "Noisy = ")),
-			  maxit ? maxit : 40000);
-    
-    
- // gmm::abstract_newton_line_search alnrs;
-    gmm::simplest_newton_line_search silnrs;
-    gmm::default_newton_line_search dlnrs;
-    gmm::systematic_newton_line_search sylnrs;
+    getfem::add_generalized_Dirichlet_condition_with_multipliers(model, mim, "u", 1, BOUNDARY_NUM3, "Dirichletsymdata", "Hdata");
+
+
+  
+
+
+//     getfem::partial_mesh_fem symetrie_NUM3(mf_u());
+//     dal::bit_vector symetrie_dofs_NUM3 = mf_u().basic_dof_on_region(BOUNDARY_NUM3);
+//     cout << "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" << endl;
+//     cout << "Size of vector  :" << symetrie_dofs_NUM3.card() << endl;
+//     cout << "Basic dof on region BOUNDARY_NUM3  :" << symetrie_dofs_NUM3 << endl;
+//     cout << "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" << endl;
+//     cout << "test  :" << symetrie_dofs_NUM3[1] << endl;
+//     cout << "test  :" << symetrie_dofs_NUM3[2] << endl;
+//     GMM_ASSERT1(N==2, "To be corrected for 3D computation");
+
+//     sparse_matrix BB((symetrie_dofs_NUM3.size()/2), mf_u().nb_dof());
     
-    switch (newton_version){
+   
+//     // for (size_type i = 0; i < mf_u().nb_basic_dof(); i+=N) 
+//     //    {}
+//     for (size_type j = 0; j < symetrie_dofs_NUM3.size()+1 ; j+=N ){
+//     for (size_type i = 0; i < (symetrie_dofs_NUM3.size()/2)+1 ; ++i )
+//       {
+//         BB(j,symetrie_dofs_NUM3[i])=1.0;
+// 	  }}
+   
+//     // BB (0, icorner1)   = 1.0;
+//     // BB (1, icorner1+1) = 1.0;
+//     // BB (2, icorner2)   = 1.0;
+
+//   // cout << "matrice BB   :" << BB << endl;
+//   // std::vector<scalar_type> LRH(3);
+//   // model.add_fixed_size_variable("dir", 3);
+//   // getfem::add_constraint_with_multipliers(model, "u", "dir", BB, LRH);
+
+
+ 
+  gmm::iteration iter(residual, 1, 40000);
+
+  /* prepare the export routine for OpenDX (all time steps will be exported) 
+     (can be viewed with "dx -edit nonlinear_elastostatic.net")
+  */
+  getfem::dx_export exp(datafilename + ".dx",
+			PARAM.int_value("VTK_EXPORT")==1);
+  getfem::stored_mesh_slice sl; sl.build(mesh, getfem::slicer_boundary(mesh),8); 
+  exp.exporting(sl,true); exp.exporting_mesh_edges();
+  //exp.begin_series("deformationsteps");
+  exp.write_point_data(mf_u(), U, "stepinit"); 
+  exp.serie_add_object("deformationsteps");
+
+  GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted for reduced mesh_fems");
     
- // case 0: getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), alnrs);
+  getfem::simplest_newton_line_search simls;
+  getfem::default_newton_line_search dlnrs;
+  getfem::systematic_newton_line_search sylnrs;
+  getfem::quadratic_newton_line_search qdlnrs;
+
+//  simplest_newton_line_search 1 *** default_newton_line_search 2 *** systematic_newton_line_search 3
+ cout << "line search value" <<line_search_version<< endl;
+ switch (line_search_version){
+     
     case 1:{
-      getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), silnrs);
-      cout << "============================ " << endl;
-      cout << "=:simplest_newton_line_search= " << endl;
-      cout << "============================ " << endl;
+      if (Pseudo_Potential == 1){
+	bool with_pseudo_potential = true;
+        //gmm::simplest_newton_line_search simls;
+	getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+			       getfem::model_real_plain_vector>(model), simls, with_pseudo_potential);
+	cout << "/******************/" << endl;
+	cout << "/* Enery Criteria */" << endl;
+	cout << "/******************/" << endl;
+      }
+      getfem::standard_solve(model, iter,getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+			       getfem::model_real_plain_vector>(model), simls );
+      cout << "=============================== " << endl;
+      cout << "= Simplest_newton_line_search = " << endl;
+      cout << "=============================== " << endl;
+      cout << "alpha_md valeur de l'ordre de singularite =  " << alpha_md << endl;
     }break;
+
     case 2:{
-      getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), dlnrs);
-      cout << "============================ " << endl;
-      cout << "=default_newton_line_search= " << endl;
-      cout << "============================ " << endl;
+      if (Pseudo_Potential == 1){
+	bool with_pseudo_potential = true;
+	getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+			       getfem::model_real_plain_vector>(model), dlnrs, with_pseudo_potential);
+	cout << "/******************/" << endl;
+	cout << "/* Enery Criteria */" << endl;
+	cout << "/******************/" << endl;
+      }
+      getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+			       getfem::model_real_plain_vector>(model), dlnrs);
+      cout << "================================ " << endl;
+      cout << "=  Default_newton_line_search  = " << endl;
+      cout << "================================ " << endl;   
+      cout << "alpha_md valeur de l'ordre de singularite =  " << alpha_md << endl;
     }break;
     
 
     case 3: {
-      getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), sylnrs);
-      cout << "=============================== " << endl;
-      cout << "=systematic_newton_line_search= " << endl;
-      cout << "=============================== " << endl;
+      if (Pseudo_Potential == 1){
+	bool with_pseudo_potential = true;
+	getfem::standard_solve(model, iter,getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+			       getfem::model_real_plain_vector>(model), sylnrs,  with_pseudo_potential);
+	cout << "/******************/" << endl;
+	cout << "/* Enery Criteria */" << endl;
+	cout << "/******************/" << endl;
+      }
+      getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+			       getfem::model_real_plain_vector>(model), sylnrs); 
+      cout << "=================================== " << endl;
+      cout << "=  Systematic_newton_line_search  = " << endl;
+      cout << "=================================== " << endl;
+      cout << "alpha_md valeur de l'ordre de singularite =  " << alpha_md << endl;
     }break;
-    default: GMM_ASSERT1(false, "No such newton");
+
+    case 4: {
+      if (Pseudo_Potential == 1){
+	bool with_pseudo_potential = true;
+	getfem::standard_solve(model, iter,getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+			       getfem::model_real_plain_vector>(model), qdlnrs,  with_pseudo_potential);
+	cout << "/******************/" << endl;
+	cout << "/* Enery Criteria */" << endl;
+	cout << "/******************/" << endl;
+      }
+      getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+			       getfem::model_real_plain_vector>(model), qdlnrs); 
+      cout << "================================== " << endl;
+      cout << "=  Quadratic_newton_line_search  = " << endl;
+      cout << "================================== " << endl;
+      cout << "alpha_md valeur de l'ordre de singularite =  " << alpha_md << endl;
+    }break;
+
+
+
+
+    default: GMM_ASSERT1(false, "No such line search");
     }
-    pl->reset_unvalid_flag();
-    final_model->compute_residual(MS);
-    if (pl->get_unvalid_flag()) 
-      GMM_WARNING1("The solution is not completely valid, the determinant "
-		   "of the transformation is negative on "
-		   << pl->get_unvalid_flag() << " gauss points");
-  }
-  
 
- /*************************************/
- /*  Computation of the inf-sup bound */ 
- /*************************************/
+  
+  
 
-  if (PARAM.int_value("INF_SUP_COMP") && mixed_pressure) {
-    
-    cout << "Sparse matrices computation for the test of inf-sup condition"
-	 << endl;
-
-    sparse_matrix Mis(mf_pe().nb_dof(), mf_pe().nb_dof());
-    sparse_matrix Sis(mf_u().nb_dof(), mf_u().nb_dof());
-    sparse_matrix Bis(mf_pe().nb_dof(),mf_u().nb_dof());
-    getfem::asm_mass_matrix(Mis, mim, mf_pe());
-    getfem::asm_stiffness_matrix_for_homogeneous_laplacian_componentwise(Sis, mim, mf_u());
-    getfem::asm_mass_matrix(Sis, mim, mf_u());    
-    cout << "Inf-sup condition test" << endl;
-    INCOMP.get_B(MS,Bis);
-    scalar_type lambda = smallest_eigen_value(Bis, Mis, Sis);
-    cout << "The inf-sup test gives " << lambda << endl;
-  }
+   // Solution extraction
+   gmm::copy(model.real_variable("u"), U);
+   if (mixed_pressure && (law_num == 1 || law_num == 3)) {
+     gmm::copy(model.real_variable("p"), P);}
 
-     // Solution extraction
-    
-    gmm::copy(ELAS.get_solution(MS), U);
-    gmm::copy(INCOMP.get_pressure(MS), P);
-    return (iter.converged());
+  
+  return (iter.converged());
 
-      
-      
-      
- if (reference_test == 1) {
+if (reference_test == 1) {
       
       cout << "Exporting reference solution...";
       dal::bit_vector blocked_dof = mf_u().basic_dof_on_region(5);
@@ -970,7 +1236,7 @@ iter = gmm::iteration(residual, int(PARAM.int_value("NOISY", "Noisy = ")),
       gmm::vecsave(datafilename + "_refined_test.P_refined", PP);
       cout << "done" << endl;
   }
-  }
+}
 
 void export_interpolated_on_line(const getfem::mesh_fem &mf,
 				 const getfem::base_vector &U,
@@ -997,8 +1263,7 @@ void export_interpolated_on_line(const getfem::mesh_fem &mf,
     f << "\n";
   }
 }
-				 
-
+  
 /**************************************************************************/
 /*  main program.                                                         */
 /**************************************************************************/
@@ -1008,15 +1273,14 @@ int main(int argc, char *argv[]) {
   GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
   FE_ENABLE_EXCEPT;        // Enable floating point exception for Nan.
 
-  //getfem::getfem_mesh_level_set_noisy();
-
-
-  crack_problem p;
+  cr_nl_elastostatic_problem p;
   p.PARAM.read_command_line(argc, argv);
   p.init();
   p.mesh.write_to_file(p.datafilename + ".mesh");
-  
+  //getfem::mesh_region &rg_error_calc = p.mesh.region(1);
+  //getfem::mesh_region &rg2 = p.mesh.region(2);
   plain_vector U, P;
+  
   if (!p.solve(U, P)) GMM_ASSERT1(false,"Solve has failed");
   
   cout << "Saving the solution" << endl;
@@ -1090,52 +1354,24 @@ int main(int argc, char *argv[]) {
   // getfem::mesh_im mim_refined_p(mcut_refined_p); 
   // mim_refined.set_integration_method(getfem::int_method_descriptor
   //				     ("IM_TRIANGLE(6)"));  
-  mcut.write_to_file(p.datafilename + ".meshvm");
+  
   
   getfem::mesh_fem mf_refined(mcut_refined, dim_type(Q));
   mf_refined.set_classical_discontinuous_finite_element(2,0.001);
   plain_vector W(mf_refined.nb_dof());
-  
-  //getfem::mesh_fem mf_refined_p(mcut_refined_p, dim_type(Q));
-  //mf_refined_p.set_classical_discontinuous_finite_element(2,0.001);
-  //plain_vector PPW(mf_refined.nb_dof());
-  //getfem::interpolation(p.mf_pe(), mf_refined, P, PPW);
-  
-  getfem::interpolation(p.mf_u(), mf_refined, U, W);
-  mf_refined.write_to_file(p.datafilename + ".meshfemuvm", true);
-  gmm::vecsave(p.datafilename + ".Uvm", W);
-  
-
-  
-  getfem::mesh_fem mf_vm(mcut_refined,  1);
-  mf_vm.set_classical_discontinuous_finite_element(2, 0.001);
-  plain_vector Vm(mf_vm.nb_dof());
  
-  cout << "compute Von_mises" << endl;
-  getfem::interpolation_von_mises(mf_refined, mf_vm, W, Vm);
-  
-  gmm::vecsave(p.datafilename + ".VM",Vm);
-  mf_vm.write_to_file(p.datafilename + ".meshfemvm", true); 
   
   if (p.PARAM.int_value("VTK_EXPORT")) {
     
-    getfem::mesh_fem mf_refined_vm(mcut_refined, 1);
-    getfem::mesh_fem mf_refined_p(mcut_refined, 1);
-
-    mf_refined_vm.set_classical_discontinuous_finite_element(2, 0.001);
-    mf_refined_p.set_classical_discontinuous_finite_element(2, 0.001);
-
-    cerr << "mf_refined_vm.nb_dof=" << mf_refined_vm.nb_dof() << "\n";
+     getfem::mesh_fem mf_refined_p(mcut_refined, 1);
     
-    plain_vector VM(mf_refined_vm.nb_dof());
+    mf_refined_p.set_classical_discontinuous_finite_element(2, 0.001);
+  
     plain_vector PPW(mf_refined_p.nb_dof());
    
-    cout << "computing von mises\n";
-    
-    getfem::interpolation_von_mises(mf_refined, mf_refined_vm, W, VM);
+   
     getfem::interpolation(p.mf_pe(), mf_refined_p, P, PPW);
-    plain_vector D(mf_refined_vm.nb_dof() * Q), 
-      DN(mf_refined_vm.nb_dof());
+
     
     cout << "export to " << p.datafilename + ".vtk" << "..\n";
     getfem::vtk_export exp(p.datafilename + ".vtk",
@@ -1145,17 +1381,13 @@ int main(int argc, char *argv[]) {
     
     //exp.write_point_data(mf_refined_vm, DN, "error");
     getfem::interpolation(p.mf_pe(), mf_refined_p, P, PPW);
-    exp.write_point_data(mf_refined_vm, VM, "von_mises_stress");
+    
     exp.write_point_data(mf_refined, W, "elastostatic_displacement");
-    exp.write_point_data(mf_refined_vm, PPW, "Pressure");
+    exp.write_point_data(mf_refined_p, PPW, "Pressure");
 
     base_node line_x0(0.70001,0);
     base_small_vector line_dir(0, 0.5001);
-    unsigned line_nb_points = 1000;
-    export_interpolated_on_line(mf_refined_vm, VM, 
-				line_x0, line_dir, line_nb_points,
-				"von_mises_on_line.data");
-    
+
     
     cout << "export done, you can view the data file with (for example)\n"
       "mayavi -d " << p.datafilename << ".vtk -f  "
@@ -1164,21 +1396,39 @@ int main(int argc, char *argv[]) {
     
   if(p.PARAM.int_value("ERROR_TO_REF_SOL") == 1){
     cout << "Computing error with respect to a reference solution..." << endl;
-    
-    std::string REFERENCE_MF = "Solution_160_ref_raffine_P1BP1.meshfem";
-    std::string REFERENCE_U = "Solution_160_ref_raffine_P1BP1.U";
-    std::string REFERENCE_MFP = "Solution_160_ref_raffine_P1BP1.p_meshfem";
-    std::string REFERENCE_P = "Solution_160_ref_raffine_P1BP1.P";
-    
+
+   
+    std::string REFERENCE_MF  = "TestEnrichemen**tPressureStephNX40.meshfem";
+    std::string REFERENCE_U   = "TestEnrichemen**tPressureStephNX40.U";
+    std::string REFERENCE_MFP = "TestEnrichemen**tPressureStephNX40.p_meshfem";
+    std::string REFERENCE_P   = "TestEnrichemen**tPressureStephNX40.P";
+                                                                  
     cout << "Load reference displacement from "
 	 << REFERENCE_MF << " and " << REFERENCE_U << "\n";
-    getfem::mesh ref_m; 
+
+    getfem::mesh ref_m ; 
     ref_m.read_from_file(REFERENCE_MF);
+        
+    
+    enum { Part_cal_error = 82};
+      for(dal::bv_visitor i(ref_m.convex_index()); !i.finished(); ++i){
+	for(size_type j=0; j < 3; ++j){
+        base_node cord_err = ref_m.points_of_convex(i)[j];
+	//cout << "coordonne-erreur " << cord_err[1] << endl;
+	 if (cord_err[1] > -0.39) ref_m.region(Part_cal_error).add(i);
+	}   
+        }
+
+
     getfem::mesh_fem ref_mf(ref_m); 
-    ref_mf.read_from_file(REFERENCE_MF);
+    ref_mf.read_from_file(REFERENCE_MF);    
+    
+      
     plain_vector ref_U(ref_mf.nb_dof());
     gmm::vecload(REFERENCE_U, ref_U);
     
+    
+
     cout << "Load reference pressure from "
 	 << REFERENCE_MFP << " and " << REFERENCE_P << "\n";
     getfem::mesh_fem ref_mfp(ref_m); 
@@ -1200,15 +1450,14 @@ int main(int argc, char *argv[]) {
     gmm::vecsave(p.datafilename+".U_map_error", interp_U_error);
 
     cout << "To ref L2 ERROR on U:"
-	 << getfem::asm_L2_dist(ref_mim, ref_mf, interp_U,
-				ref_mf, ref_U) << endl;
+	 << getfem::asm_L2_dist(ref_mim, ref_mf, interp_U, ref_mf, ref_U, Part_cal_error) << endl;
     
     cout << "To ref H1 ERROR on U:"
 	 << getfem::asm_H1_dist(ref_mim, ref_mf, interp_U,
-				ref_mf, ref_U) << endl;
+				ref_mf, ref_U, Part_cal_error ) << endl;
     
     plain_vector interp_P(ref_mfp.nb_dof());
-    getfem::interpolation(p.mf_pe(), ref_mfp, P, interp_P);
+    getfem::interpolation(p.mf_pe(), ref_mfp, P, interp_P, Part_cal_error);
 
     plain_vector interp_P_error(ref_mfp.nb_dof());
     gmm::add(interp_P, gmm::scaled(ref_P, -1.), interp_P_error);
@@ -1216,12 +1465,26 @@ int main(int argc, char *argv[]) {
     
     cout << "To ref L2 ERROR on P:"
 	 << getfem::asm_L2_dist(ref_mim, ref_mfp, interp_P,
-				ref_mfp, ref_P) << endl;
-    
+				ref_mfp, ref_P, Part_cal_error) << endl;
+    cout << "/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/ " << endl;
+    cout << "/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/ " << endl;
+    cout << "                                                                                            " << endl;
+
+    cout << "Norme of displacement error vector %%% asm_L2_norm %%% : " 
+	 << getfem::asm_L2_norm(ref_mim, ref_mf, interp_U_error, Part_cal_error)
+         << endl;
+    cout << "Norme of displacement error vector %%% asm_H1_norm %%% : " 
+	 << getfem::asm_H1_norm(ref_mim, ref_mf, interp_U_error, Part_cal_error)
+         << endl;
+    cout << "Norme of pressure error vector     %%% asm_L2_norm %%% : " 
+	 << getfem::asm_L2_norm(ref_mim, ref_mfp, interp_P_error, Part_cal_error)
+         << endl;
     gmm::add(gmm::scaled(interp_U, -1.), ref_U);
     gmm::vecsave(p.datafilename + ".diff_ref", ref_U);
     
   }
-  
+
+
   return 0; 
 }
+
diff --git a/contrib/xfem_large_strain/xfem_large_strain.param b/contrib/xfem_large_strain/xfem_large_strain.param
index 73b4bbe..db0206f 100644
--- a/contrib/xfem_large_strain/xfem_large_strain.param
+++ b/contrib/xfem_large_strain/xfem_large_strain.param
@@ -1,22 +1,23 @@
-%-*- mat-lab -*- (enables emacs matlab mode)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%-*- mat-lab -*- (enables emacs matlab mode)                              %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % parameters for program crack                                            %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 
-MU = 10.0;	        % Lam� coefficient.
+MU = 10.0;	        % Lame coefficient.
 QUAD = 0;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%Nonlinear elasticity                               %%
+%%           Nonlinear elasticity                    %%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %Elastic coefficients                      %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %Just for indication 			   %
-%Ogden mu=4.225E05			   
-%Mooney-Rivlin c1=0.4375*mu c2=0.0625*mu
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Ogden mu=4.225E05			   %
+%Mooney-Rivlin c1=0.4375*mu c2=0.0625*mu   %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %Mooney-Rivlin.                           %  
@@ -27,18 +28,21 @@ QUAD = 0;
 %C_01=0.0034 MPa.                                   %    
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
-P1 = 1.83 ;	        % First elastic coefficient.%
-P2 = 0.034 ;   	        % Second elastic coefficient.%
-P3 = 0 ;   	        % Third elastic coefficient.%
+%P1 = 1.83 ;	        % First elastic coefficient.
+%P2 = 0.034 ;   		% Second elastic coefficient.
+%P3 = 0 ;   	        % Third elastic coefficient.
+
+P1 = 1 ;	        % First elastic coefficient.%
+P2 = 1 ;   	        % Second elastic coefficient.%
+P3 = 1 ;   	        % Third elastic coefficient.%
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %Hyperelastic law                          %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-LAW = 2;     % 0 : Mooney-Rivlin (+incompressibility)
-             % 1 : SaintVenant-Kirchhoff
-             % 2 : SaintVenant-Kirchhoff+incompressibility
-             % 3 : Ciarlet-Geymonat
+LAW = 2 ;     % 1 : SaintVenant-Kirchhoff + incompressibility
+              % 2 : Ciarlet_Geymonat
+              % 3 : Mooney_Rivlin + incompressibility
 
 
 BIMATERIAL = 0;         % 1 : To enable the bimaterial case
@@ -48,34 +52,42 @@ if BIMATERIAL
   MU_DOWN = 1.0;
 end
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%Newton_versions                           %
+%            Line search version           %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-newton_version = 2     % 1 for simplest_newton_line_search
-                       % 2 for default_newton_line_search 
-    		       % 3 for systematic_newton_line_search 	
+line_search_version = 2     % 1 for simplest_newton_line_search
+                       	    % 2 for default_newton_line_search 
+    		            % 3 for systematic_newton_line_search
+ 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+%            Energy criteria                %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pseudo_Potential = 0   % 1    Enable energy criteria
+                       % else Disable energy criteria 
+
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %Hyperelastic law                          %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-REFINEMENT_RADIUS = 0 ;  % REF: 0.4;  % 0 for no refinement
+REFINEMENT_RADIUS = 0 ;   % REF: 0.4;  % 0 for no refinement
 REFINEMENT_PROCESS = 0 ;  % nb of desired refinement steps
 
-REFERENCE_TEST = 0;   % 1 to compute a reference solution exported into files
-ERROR_TO_REF_SOL = 1; % 1 to compute errors wrt the reference solution
-INF_SUP_COMP = 0; % Compute or not the inf_sup condition
+REFERENCE_TEST = 1;     % 1 to compute a reference solution exported into files
+ERROR_TO_REF_SOL = 0;   % 1 to compute errors wrt the reference solution
+INF_SUP_COMP = 0;       % Compute or not the inf_sup condition
 
 %%%%%   discretisation parameters  :                     	      %%%%%
 
-NB_ENR_FUNC_U = 2;
-NB_ENR_FUNC_P = 2;
+NB_ENR_FUNC_U = 3;
+NB_ENR_FUNC_P = 3;
 
-NX = 2;	        % space step.
-MESH_NOISED = 0;        % Set to one if you want to "shake" the mesh.
-AMP_LOAD_X = 0.01;      % Load in X direction. 
-AMP_LOAD_Y = 0.01;      % Load in Y direction.
-nb_step  = 5;
+NX = 20 ;	         % space step.
+MESH_NOISED = 0;         % Set to one if you want to "shake" the mesh.
+AMP_LOAD_X = 0;       % Load in X direction. 
+AMP_LOAD_Y = 0.1;       % Load in Y direction.
+nb_step  = 6;
 NOISY = 0;
 stnst = 0; % 1 Applying load progressively (don't work) 
 
@@ -99,8 +111,9 @@ end;
 
 FEM_DISC = 'FEM_PK_DISCONTINUOUS(2,3,0.0001)'; % Discontinuous P1 for triangles
 
-MIXED_PRESSURE=1;       % Mixed version or not.
-DIRICHLET_VERSION = 0;  % 0 = multipliers, 1 = penalization, 2 = elimination
+MIXED_PRESSURE = 0;       % Mixed version or not.
+SINGULAR_SEARCH = 0;	  % With singularity order search or not.
+DIRICHLET_VERSION = 0;    % 0 = multipliers, 1 = penalization, 2 = elimination
 
 % integration meth. for sub-simplexe of elements crossed by the level-set
 SIMPLEX_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),3)';
@@ -142,9 +155,11 @@ SPIDER_BIMAT_ENRICHMENT = 0;  % 0 for a sqrt spider enrichment
                               % 1 for sqrt(r)cos(ln(r)) and sqrt(r)sin(ln(r)) spider enrichment
 
 RESIDUAL = 1E-9;     	% residual for iterative methods if any.
-MAXITER = 500;
+MAXITER = 5000;
 %%%%%   saving parameters                                             %%%%%
-ROOTFILENAME = 'NX10_20enrichi_P1P1B_0.5load';     % Root of data files.
+% STD= Standard XFEM
+% COE= Cutoff_enrichement
+ROOTFILENAME = 'test_dirichlet_NX20';     % Root of data files.
 VTK_EXPORT = 0 % 2 export solution to a .vtk file ?
 
 
diff --git a/contrib/xfem_large_strain/xfem_large_strain.pl b/contrib/xfem_large_strain/xfem_large_strain.pl
index 5355162..6d63c0a 100644
--- a/contrib/xfem_large_strain/xfem_large_strain.pl
+++ b/contrib/xfem_large_strain/xfem_large_strain.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/xfem_stab_unilat_contact/Makefile.in b/contrib/xfem_stab_unilat_contact/Makefile.in
index fbb63a9..425a03d 100644
--- a/contrib/xfem_stab_unilat_contact/Makefile.in
+++ b/contrib/xfem_stab_unilat_contact/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -104,6 +104,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -122,6 +123,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -138,6 +140,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -202,6 +205,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -237,7 +241,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -310,7 +313,7 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-xfem_stab_unilat_contact$(EXEEXT): $(xfem_stab_unilat_contact_OBJECTS) $(xfem_stab_unilat_contact_DEPENDENCIES) 
+xfem_stab_unilat_contact$(EXEEXT): $(xfem_stab_unilat_contact_OBJECTS) $(xfem_stab_unilat_contact_DEPENDENCIES) $(EXTRA_xfem_stab_unilat_contact_DEPENDENCIES) 
 	@rm -f xfem_stab_unilat_contact$(EXEEXT)
 	$(CXXLINK) $(xfem_stab_unilat_contact_OBJECTS) $(xfem_stab_unilat_contact_LDADD) $(LIBS)
 
@@ -482,14 +485,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -539,10 +543,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.cc b/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.cc
index d42e8ed..f1319c3 100644
--- a/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.cc
+++ b/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
  * Goal : stabilization of unilateral contact with Xfem.
@@ -42,6 +42,16 @@
 #include "getfem/getfem_mesh_fem_sum.h"
 #include "gmm/gmm_inoutput.h"
 
+extern "C" void METIS_PartGraphKway(int *, int *, int *, int *, int *, int *,
+			    int *, int *, int *, int *, int *);
+extern "C" void METIS_PartGraphRecursive(int *, int *, int *, int *, int *, int *,
+			    int *, int *, int *, int *, int *);
+
+
+extern "C" void METIS_mCPartGraphKway(int *, int *, int *, int *, int *, int *, int *,
+				      int *, int *, float *, int *, int *, int *);
+extern "C" void METIS_mCPartGraphRecursive(int *, int *, int *, int *, int *, int *, int *,
+				      int *, int *, int *, int *, int *);
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
@@ -313,7 +323,7 @@ void asm_mass_matrix_tang_mixed_term
   ls.set_shift(-1e-7);
   assem.assembly(rg);
   ls.set_shift(0.);
-  cout << "RM = " << RM << endl;
+  //cout << "RM = " << RM << endl;
 
 }
 
@@ -400,6 +410,148 @@ void asm_stabilization_symm_tang_term
   ls.set_shift(0.);
 }
 
+
+
+
+/**************************************************************/
+/* assembling patch vector                                     */
+/**************************************************************/
+
+template<class VEC>
+void asm_patch_vector     
+(const VEC &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf_mult,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+  VEC &RM = const_cast<VEC &>(RM_);
+    
+  getfem::generic_assembly assem("t=comp(Base(#1)); V(#1)+= t(:);");
+  assem.push_mi(mim);
+  assem.push_mf(mf_mult);
+  assem.push_vec(RM);
+  // assem.set("RM(#1)+=comp(Base(#1))()");
+  assem.assembly(rg);
+
+}
+/**************************************************************/
+/* assembling patch matrix                                     */
+/**************************************************************/
+
+template<class MAT>
+void asm_stabilization_patch_term
+(const MAT &RM_, const getfem::mesh &mesh, const getfem::mesh_im &mimbounddown, const getfem::mesh_fem &mf_mult,
+ scalar_type ratio_size, scalar_type h ){
+  MAT &M1 = const_cast<MAT &>(RM_);
+  
+  /****************************************************/
+  /*        " select patch "                          */
+  /****************************************************/
+  
+  
+  
+  // assemby patch vector
+  const getfem::mesh_fem &mf_P0 = getfem::classical_mesh_fem(mesh, 0);
+  size_type nbe = mf_P0.nb_dof();
+  int ne = 0;
+  double size_of_crack = 0;
+  plain_vector Patch_Vector(nbe);
+  asm_patch_vector(Patch_Vector, mimbounddown, mf_P0);
+  // cout<<"patch_vectot="<< Patch_Vector<<endl;
+  dal::bit_vector  Patch_element_list, Patch_dof_ind;
+  for (size_type i = 0; i < nbe; ++i) {
+    if (Patch_Vector[i] != scalar_type(0)){
+      size_type cv = mf_P0.first_convex_of_basic_dof(i);
+      Patch_element_list.add(cv);
+      Patch_dof_ind.add(i);
+      ne++;
+      size_of_crack=size_of_crack + Patch_Vector[i];
+    }
+  }
+   cout<<"Path_element_list="<< Patch_element_list <<endl;
+  //cout<<"Path_dof_ind="<< Patch_dof_ind <<endl;
+  cout<<"number of element in patch="<< ne <<endl;
+  std::vector<int> xadj(ne+1), adjncy, numelt(ne), part(ne);
+  std::vector<int> vwgt(ne), indelt(mesh.convex_index().last_true()+1);
+  std::vector<double> vwgtt(ne);
+  int j = 0, k = 0;
+  for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+    numelt[j] = int(ic);
+    indelt[ic] = j;
+  }
+  j = 0;
+  for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+    size_type ind_dof_patch = mf_P0.ind_basic_dof_of_element(ic)[0];
+    vwgt[indelt[ic]] = int(1000000*Patch_Vector[ind_dof_patch]);
+    vwgtt[indelt[ic]] = Patch_Vector[ind_dof_patch];
+    xadj[j] = k;
+    bgeot::mesh_structure::ind_set s;
+    mesh.neighbours_of_convex(ic, s);
+    for (bgeot::mesh_structure::ind_set::iterator it = s.begin(); it != s.end(); ++it) {
+      if (Patch_element_list.is_in(*it)) { adjncy.push_back(indelt[*it]); ++k; }
+    }
+  }
+  
+  xadj[j] = k;
+  std::vector<int> adjwgt(k);
+  // cout<<"xadj="<<xadj<<endl;
+  //cout<<"adjncy="<<adjncy<<endl;
+  //cout<<"vwgt="<<vwgt<<endl;
+  
+  cout<<"ratio size beween mesh and coarse mesh= "<< ratio_size <<endl;
+  
+  int wgtflag = 2, edgecut, nparts=int(size_of_crack/(ratio_size*h)), numflag = 0;
+      // float ubvec[1] = {1.03f};
+  int  options[5] = {0,0,0,0,0};
+  //METIS_mCPartGraphKway(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+  //		    &numflag, &nparts, &(ubvec[0]),  options, &edgecut, &(part[0]));
+  // METIS_mCPartGraphRecursive(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+  //			 &numflag, &nparts,  options, &edgecut, &(part[0]));
+  //METIS_PartGraphKway(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+  //	  &numflag, &nparts, options, &edgecut, &(part[0]));
+  METIS_PartGraphRecursive(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+			   &numflag, &nparts, options, &edgecut, &(part[0]));
+  
+  //cout<<"size_of_mesh="<<h<<endl;
+  cout<<"size_of_crack="<< size_of_crack <<endl;
+  cout<<"nb_partition="<<nparts<<endl;
+  cout<<"partition="<<part<<endl;
+  cout<<"edgecut="<<edgecut<<endl;
+  
+
+  /**************************************************************/
+  /*        Assembly matrices                                   */
+  /**************************************************************/
+  
+  
+  std::vector<double> size_patch(nparts);
+  size_type nb_dof_mult=mf_mult.nb_dof();
+  sparse_matrix M0(nb_dof_mult, nbe);
+  getfem::asm_mass_matrix(M0, mimbounddown, mf_mult, mf_P0);
+  
+  for (size_type i=0; i < size_type(ne); i++) {
+    size_patch[part[i]]= size_patch[part[i]] + vwgtt[i];	  
+  }
+  
+  //cout<<"size_patch="<<size_patch<<endl;
+  
+  sparse_row_matrix MAT_aux(nparts, nb_dof_mult);
+  for (size_type r=0; r < nbe; r++) {
+    size_type cv = mf_P0.first_convex_of_basic_dof(r);
+    gmm::add(gmm::mat_col(M0, r), gmm::mat_row(MAT_aux, part[indelt[cv]]));
+  }
+  
+  sparse_row_matrix MAT_proj(nbe, nb_dof_mult);
+  
+  for (size_type r=0; r < nbe; r++) {
+    size_type cv = mf_P0.first_convex_of_basic_dof(r);
+    int p=part[indelt[cv]];
+    gmm::copy(gmm::scaled(gmm::mat_row(MAT_aux, p), 1./size_patch[p]),
+	      gmm::mat_row(MAT_proj, r));
+  }
+  
+  gmm::mult(M0, MAT_proj, M1);
+  
+}
+
+
 /**************************************************************************************/
 /* asembling masse matrix for  inf-sup condition                                            */
 /**************************************************************************************/
@@ -410,19 +562,19 @@ void asm_mass_matrix_for_inf_sup
  getfem::level_set &ls, const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
   MAT &RM = const_cast<MAT &>(RM_);
   
-  level_set_unit_normal<std::vector<scalar_type> >
-    nterm(ls.get_mesh_fem(), ls.values());
+//  level_set_unit_normal<std::vector<scalar_type> >
+//    nterm(ls.get_mesh_fem(), ls.values());
   nonlin_h<std::vector<scalar_type> >
     nlinh(ls.get_mesh_fem().linked_mesh());
   
   
   getfem::generic_assembly assem("t=comp(NonLin(#2).Base(#1).Base(#1));"
-				 "M(#2,#1)+= t(i,:,:)");
+				 "M(#1,#1)+= t(i,:,:)");
   assem.push_mi(mim);
   assem.push_mf(mf_mult);
   assem.push_mf(ls.get_mesh_fem());
   assem.push_mat(RM);
-  assem.push_nonlinear_term(&nterm);
+ // assem.push_nonlinear_term(&nterm);
   assem.push_nonlinear_term(&nlinh);
   
   gmm::clear(RM);
@@ -466,15 +618,19 @@ struct unilateral_contact_problem {
   
   scalar_type mu, lambda;    /* Lame coeff                   */
   
-  int dgr;          /* Order of enrichement for u */
+  int dgr;                   /* Order of enrichement for u */ 
+  scalar_type stabilized_problem;         
   scalar_type  friction_coeff;
+  scalar_type tresca_threshold;
+  scalar_type ratio_size;
   
   getfem::mesh_fem mf_rhs;   /* mesh_fem for the right hand side (f(x),..)   */
   
   
   scalar_type residual;      /* max residual for the iterative solvers      */
   bool contact_only;
-  bool stabilized_problem, strmesh;
+  bool Tresca_version;
+  bool Test_of_coer, strmesh, rangeP_P;
   scalar_type cutoff_radius, cutoff_radius1, cutoff_radius0, enr_area_radius;
   
   size_type cutoff_func;
@@ -627,6 +783,8 @@ void  unilateral_contact_problem::init(void) {
   mesh.write_to_file("toto.mesh");
   
   h = mesh.maximal_convex_radius_estimate();
+  // h = 2. * mesh.minimal_convex_radius_estimate();
+
   cout << "h = " << h << endl;
   
   cont_gamma0 = PARAM.real_value("CONTACT_GAMMA0",
@@ -652,6 +810,8 @@ void  unilateral_contact_problem::init(void) {
   
 
   friction_coeff= PARAM.real_value("FRICTION_COEFF", "Friction_coeff");
+  tresca_threshold= PARAM.real_value("TRESCA_THRESHOLD", "Tresca_threshold");
+  ratio_size= PARAM.real_value("RATIO_SIZE", "ratio size beween mesh and coarse mesh");
   
   /* set the finite element on the mf_u */
   getfem::pfem pf_u = 
@@ -684,10 +844,13 @@ void  unilateral_contact_problem::init(void) {
   
   
   
-  contact_only =
-    (PARAM.int_value("CONTACT_ONLY"," contact_only or not.") != 0);
-   stabilized_problem =
-    (PARAM.int_value("STABILIZED_PROBLEM"," stabilized_problem or not.") != 0);
+  contact_only = (PARAM.int_value("CONTACT_ONLY"," contact_only or not.") != 0);
+  Tresca_version=(PARAM.int_value("TRESCA_VERSION"," tresca version or not.") != 0);
+  cout<< "Tresca Version="<< Tresca_version<< endl;
+  stabilized_problem = PARAM.real_value("STABILIZED_PROBLEM"," stabilized_problem or not.");
+  Test_of_coer= (PARAM.int_value("STABILIZED_PROBLEM"," stabilized_problem or not.") != 0);
+  rangeP_P =
+    (PARAM.int_value("rangeP_P"," The creteria of choise in range bases is performed by comparison to p  or not.") != 0);
   
   mf_contt.set_finite_element(mesh.convex_index(), pf_mult_cont);
   
@@ -940,16 +1103,26 @@ bool  unilateral_contact_problem::solve(plain_vector &U, plain_vector &LAMBDA, p
   
   std::set<size_type> cols;
   cols.clear(); 
-  sparse_matrix BRBB(mf_pre_uu().nb_dof(), mf_cont().nb_dof());
-  mf_u().set_qdim(1);
-  asm_mass_matrix(BRBB, mimbound, mf_pre_uu(), mf_cont());
-  //asm_mass_matrix(BRBB, mimbound, mf_cont(), mf_cont());
-  // cout << "BRBB " << BRBB << endl;
-  cout << "Selecting dofs for the multiplier" << endl;
-  cout << "nb_dof_mult = " << mf_cont().nb_dof() << endl;
-  gmm::range_basis(BRBB, cols);
-  mf_cont().reduce_to_basic_dof(cols);
-  mf_u().set_qdim(dim_type(N));
+  if (rangeP_P){
+    sparse_matrix BRBB(mf_cont().nb_dof(), mf_cont().nb_dof());
+    asm_mass_matrix(BRBB, mimbound, mf_cont(), mf_cont());
+    cout << "Selecting dofs for the multiplier PP" << endl;
+    cout << "nb_dof_mult = " << mf_cont().nb_dof() << endl;
+    gmm::range_basis(BRBB, cols);
+    mf_cont().reduce_to_basic_dof(cols);
+  }else{
+    sparse_matrix BRBB(mf_pre_uu().nb_dof(), mf_cont().nb_dof());
+    mf_pre_uu().set_qdim(1);
+    asm_mass_matrix(BRBB, mimbound, mf_pre_uu(), mf_cont());
+    cout << "Selecting dofs for the multiplier UP" << endl;
+    cout << "nb_dof_mult = " << mf_cont().nb_dof() << endl;
+    gmm::range_basis(BRBB, cols);
+    mf_cont().reduce_to_basic_dof(cols);
+    mf_pre_uu().set_qdim(dim_type(N));
+}
+  
+  
+  
   
   size_type nb_dof = mf_u().nb_dof();
   cout << "nb_dof = " << nb_dof << endl;
@@ -995,9 +1168,10 @@ bool  unilateral_contact_problem::solve(plain_vector &U, plain_vector &LAMBDA, p
   // if (!contact_only){
  getfem::CONTACT_B_MATRIX CAT(nb_dof_cont, nb_dof);
  // }
-  if (stabilized_problem) {
-    cout<<"Cont_gamma0="<< cont_gamma0 <<endl;
-    cout<< "Assembling stabilized mixed term for contact problem"<<endl;
+ cout<<"Cont_gamma0="<< cont_gamma0 <<endl;
+  if (stabilized_problem==1) {
+    cout<<"stabilized_problem="<<stabilized_problem<<endl;
+        cout<< "Assembling stabilized mixed term for contact problem"<<endl;
     asm_stabilization_mixed_term(CA, mimbound, mf_u(), mf_cont(), ls, lambda, mu);
     gmm::scale(CA, -cont_gamma0 * h);
     if (!contact_only){
@@ -1013,7 +1187,7 @@ bool  unilateral_contact_problem::solve(plain_vector &U, plain_vector &LAMBDA, p
   // if (!contact_only){
   sparse_matrix KAT(nb_dof, nb_dof);
     //}
-  if (stabilized_problem) {
+  if (stabilized_problem==1) {
     cout<<"Assembling symetrique term for stabilized contact problem"<<endl;
     asm_stabilization_symm_term(KA, mimbound, mf_u(), ls, lambda, mu);
     gmm::scale(KA, -cont_gamma0 * h);
@@ -1028,15 +1202,38 @@ bool  unilateral_contact_problem::solve(plain_vector &U, plain_vector &LAMBDA, p
   
   getfem::CONTACT_B_MATRIX MA(nb_dof_cont, nb_dof_cont);
   getfem::CONTACT_B_MATRIX MAT(nb_dof_cont, nb_dof_cont);
-  if (stabilized_problem) {
+  getfem::CONTACT_B_MATRIX M1(nb_dof_cont, nb_dof_cont);
+  getfem::CONTACT_B_MATRIX M1T(nb_dof_cont, nb_dof_cont);
+  if (stabilized_problem!=0) {
     cout<<"Assembling mass term for stabilized problem"<<endl;
     getfem::asm_mass_matrix(MA, mimbound, mf_cont());
-    gmm::scale(MA, cont_gamma0 * h);
-    cout << "MA = " << MA << endl;
     if (!contact_only){
       cout<<"Assembling mass tangent term for stabilized problem"<<endl;
       getfem::asm_mass_matrix(MAT, mimbound, mf_cont());
-      gmm::scale(MAT, cont_gamma0 * h);
+     
+    }
+    if (stabilized_problem==1) {
+      gmm::scale(MA, cont_gamma0 * h);
+      //cout << "MA = " << MA << endl;
+      if (!contact_only){ 
+	gmm::scale(MAT, cont_gamma0 * h);
+      }
+    }
+    if (stabilized_problem==2) {
+      cout<<"Patch Stabilization"<<endl;
+      //gmm::scale(MA, cont_gamma0);
+      asm_stabilization_patch_term(M1, mesh, mimbound, mf_cont(), ratio_size, 2.*h);
+      gmm::scale(M1, -cont_gamma0);
+      gmm::scale(MA, cont_gamma0);
+      gmm::add(M1, MA);
+      // cout << "MA = " << MA << endl;
+      if (!contact_only){ 
+	//gmm::scale(MAT, cont_gamma0);
+	asm_stabilization_patch_term(M1T, mesh, mimbound, mf_cont(), ratio_size, 2.*h);
+	gmm::scale(M1T, -cont_gamma0);
+	gmm::scale(MAT, cont_gamma0);
+	gmm::add(M1T, MAT);
+      }
     }
   }
   
@@ -1053,11 +1250,18 @@ bool  unilateral_contact_problem::solve(plain_vector &U, plain_vector &LAMBDA, p
   // Linearized elasticity brick.
   model.add_initialized_scalar_data("lambda", lambda);
   model.add_initialized_scalar_data("mu", mu);
-if (!contact_only){
-  cout<<"Friction coeff="<< friction_coeff<<endl;
-  model.add_initialized_scalar_data("friction_coeff", friction_coeff);
- }
- model.add_initialized_scalar_data("augmentation_parameter", R/h);
+  if (!contact_only){
+    cout<<"Friction coeff="<< friction_coeff<<endl;
+    model.add_initialized_scalar_data("Friction_coeff", friction_coeff);
+    if (Tresca_version){
+      cout<<"tresca_threshold="<<tresca_threshold <<endl;
+      model.add_initialized_scalar_data("Tresca_threshold", tresca_threshold);
+    }
+    
+    
+  }
+  model.add_initialized_scalar_data("augmentation_parameter", R/h);
+  //model.add_initialized_scalar_data("augmentation_parameter", R);
   getfem::add_isotropic_linearized_elasticity_brick
     (model, mim, "u", "lambda", "mu");
   //  model.add_initialized_scalar_data("augmentation_parameter", R/h);
@@ -1065,37 +1269,86 @@ if (!contact_only){
   //("augmentation_parameter", mu * (3*lambda + 2*mu) / (h*(lambda + mu)) );  // r ~= Young modulus
   
   
-  
-  if (stabilized_problem) {
-    // cout << "KA = " << KA << endl;
-    cout << "gamma = " << cont_gamma0 * h << endl;
-    getfem::add_explicit_matrix(model, "u", "u", KA);
-    // Defining the contact condition.
-    gmm::add(CA, BN); 
+    
+  if (stabilized_problem!=0) {
+    if (stabilized_problem==1){
+      // cout << "KA = " << KA << endl;
+      cout << "gamma = " << cont_gamma0 * h << endl;
+      getfem::add_explicit_matrix(model, "u", "u", KA);
+      // Defining the contact condition.
+      gmm::add(CA, BN);
+      if (!contact_only){
+	getfem::add_explicit_matrix(model, "u", "u", KAT);
+	gmm::add(CAT, BT); 
+      }
+
+    }
+
     if (contact_only){
       getfem::add_Hughes_stab_basic_contact_brick(model, "u", "Lambda",
-						  "augmentation_parameter",
-						  BN, MA);
-    }else { 
-      getfem::add_explicit_matrix(model, "u", "u", KAT);
-      // Defining the contact condition.
-      gmm::add(CAT, BT); 
-      getfem::add_Hughes_stab_friction_contact_brick
-	(model, "u", "Lambda", "Lambda_t", "augmentation_parameter",
-	 BN, BT, MA, MAT, "friction_coeff");
-                }
-  }  else {		
-    getfem::add_basic_contact_brick(model, "u", "Lambda",
-				    "augmentation_parameter", BN);
-    
-    if (!contact_only){
-      getfem::add_basic_contact_with_friction_brick
-	(model, "u", "Lambda", "Lambda_t",
-	 "augmentation_parameter", BN, BT, "friction_coeff","","",true);
+						  "augmentation_parameter", BN, MA);
+    }else{
+      if (Tresca_version){
+	getfem::add_Hughes_stab_with_friction_contact_brick
+	  (model, "u", "Lambda", "Lambda_t", "augmentation_parameter",
+	   BN, BT, MA, MAT, "Friction_coeff","","",1, Tresca_version, "Tresca_threshold");
+      }else{
+	getfem::add_Hughes_stab_with_friction_contact_brick
+	  (model, "u", "Lambda", "Lambda_t", "augmentation_parameter",
+	   BN, BT, MA, MAT, "Friction_coeff");
+      }
+    }
+
+  }else{
+    if (contact_only){		
+      getfem::add_basic_contact_brick(model, "u", "Lambda",
+				      "augmentation_parameter", BN);
+    }else{
+      if (Tresca_version){
+     	getfem::add_basic_contact_with_friction_brick
+	  (model, "u", "Lambda", "Lambda_t",
+	   "augmentation_parameter", BN, BT, "Friction_coeff","","",1,Tresca_version,"Tresca_threshold");
+      }else{
+	getfem::add_basic_contact_with_friction_brick
+	  (model, "u", "Lambda", "Lambda_t",
+	   "augmentation_parameter", BN, BT, "Friction_coeff");
+      }
       
     }
+    
   }
   
+
+ // if (stabilized_problem) {
+//     // cout << "KA = " << KA << endl;
+//     cout << "gamma = " << cont_gamma0 * h << endl;
+//     getfem::add_explicit_matrix(model, "u", "u", KA);
+//     // Defining the contact condition.
+//     gmm::add(CA, BN); 
+//     if (contact_only){
+//       getfem::add_Hughes_stab_basic_contact_brick(model, "u", "Lambda",
+// 						  "augmentation_parameter",
+// 						  BN, MA);
+//     }else { 
+//       getfem::add_explicit_matrix(model, "u", "u", KAT);
+//       // Defining the contact condition.
+//       gmm::add(CAT, BT); 
+//       getfem::add_Hughes_stab_with_friction_contact_brick
+// 	(model, "u", "Lambda", "Lambda_t", "augmentation_parameter",
+// 	 BN, BT, MA, MAT, "friction_coeff");
+//     }
+//   }  else {		
+//     getfem::add_basic_contact_brick(model, "u", "Lambda",
+// 				    "augmentation_parameter", BN);
+    
+//     if (!contact_only){
+//       getfem::add_basic_contact_with_friction_brick
+// 	(model, "u", "Lambda", "Lambda_t",
+// 	 "augmentation_parameter", BN, BT, "friction_coeff","","",0);
+      
+//     }
+//   }
+  
   
   // Defining the Neumann condition right hand side.
   
@@ -1106,7 +1359,7 @@ if (!contact_only){
   
   for(size_type i = 0; i < F.size(); i=i+N*N) {
     base_node pt = mf_rhs.point_of_basic_dof(i / (N*N));
-    for(size_type j = 0; j < N; ++j){ F[i+j+j*N] =sin(2*M_PI*pt[1])*0.04;}
+    for(size_type j = 0; j < N; ++j){ F[i+j+j*N] =sin(2*M_PI*pt[1])*0.4;}
     
     // scalar_type coeff = pt[1] > 0. ? -1 : 1;
     // for(size_type j = 0; j < N; ++j){ F[i+j+j*N] =  coeff*0.1; FF[i+j+j*N] = (pt[0]-0.5)*2.0;}
@@ -1152,55 +1405,137 @@ if (!contact_only){
   model.add_fixed_size_variable("dir", size);
   getfem::add_constraint_with_multipliers(model, "u", "dir", BB, LRH);
 
-  //classical inf-sup condition
-
- //  if (PARAM.int_value("INF_SUP_COMP")) {
-    
-//     cout << "Sparse matrices computation for the test of inf-sup condition"
-// 	 << endl;
-
-//     sparse_matrix Sis(nb_dof, nb_dof);
-//     sparse_matrix Siss(nb_dof, nb_dof);
-//     sparse_matrix Mis(nb_dof_cont, nb_dof);
-//     sparse_matrix Miss(nb_dof_cont, nb_dof_cont);
-//     sparse_matrix Bis(nb_dof_cont, nb_dof_cont);
-//     sparse_matrix Biss(nb_dof_cont, nb_dof_cont);
-//     sparse_matrix BissMis(nb_dof_cont, nb_dof);
-//     sparse_matrix BBissMis(nb_dof_cont, nb_dof);
-
-
-//     asm_mass_matrix_for_inf_sup(Miss, mimbound, mf_cont(), ls); // int_gamma_c 1/h psi_i psi_j
-//     getfem::asm_mass_matrix(Sis, mimbound, mf_u());
-//     getfem::asm_mass_matrix(Bis, mimbound, mf_cont());
-//     gmm::copy(gmm::lu_inverse(Bis), Biss);
-//     gmm::copy(BN, Mis);
-//     gmm::mult(Biss, Mis, BissMis);
-//     gmm::mult(Miss, BissMis, BBissMis);
-//     gmm::mult(gmm::transposed(BissMis), BBissMis, Siss);
+  //verified coercivit condition
+  
+  
 
+  
+  
+  
+  
+  //classical inf-sup condition
+  
+  //   if (PARAM.int_value("INF_SUP_COMP")) {
+  
+  //      cout << "Sparse matrices computation for the test of inf-sup condition"
+  // 	 << endl;
+  
+  //   //  sparse_matrix MUU(nb_dof, nb_dof);
+  //     sparse_matrix MPP(nb_dof_cont, nb_dof_cont);
+  //     sparse_matrix BBB(nb_dof_cont, nb_dof);
+  //     sparse_matrix MTILD(nb_dof_cont, nb_dof_cont);
+  //     plain_vector VVV(nb_dof),VVV1(nb_dof),VVV0(nb_dof), dd1(nb_dof_cont), dd2(nb_dof_cont), YYY(nb_dof_cont), ZZZ(nb_dof_cont);
+  //     scalar_type lllambda;
+//     asm_mass_matrix_for_inf_sup(MTILD, mimbound, mf_cont(), ls); // int_gamma_c 1/h psi_i psi_j
+//     asm_mass_matrix_mixed_term(BBB, mimbound, mf_u(), mf_cont(), ls);
+//    // getfem::asm_mass_matrix(MUU, mimbound, mf_u());
+//     getfem::asm_mass_matrix(MPP, mimbound, mf_cont());
+//     gmm::fill_random(VVV);
+//   //  gmm::scaled(VVV,gmm::vect_norm2(VVV));//x_n/norm(x_n)
+// do{
+//     gmm::mult(BBB, VVV, dd1);
+  
+//    gmm::lu_solve(MPP, YYY,dd1);
+  
+//    gmm::mult(MTILD, YYY, dd2);
+//    gmm::lu_solve(gmm::transposed(MPP), ZZZ,dd2);
+
+//    gmm::mult(gmm::transposed(BBB), ZZZ, VVV1);
+//    lllambda = gmm::vect_sp(VVV1,VVV);//gmm::vect_norm2(VVV);
+//    gmm::copy(VVV,VVV0);
+//    gmm::copy(VVV1,VVV);
+//    cout << "lambda = " << lllambda << endl;
+// }while (gmm::vect_dist2(VVV1, gmm::scaled(VVV0, lllambda )) > 1E-3);
+
+// //cout << "lambda = " << sqrt(1./lllambda) << endl;
+// cout << "residu = " << gmm::vect_dist2(VVV1, gmm::scaled(VVV, lllambda)) << endl;
+// //     gmm::copy(gmm::lu_inverse(Bis), Biss);
+// //     gmm::copy(BN, Mis);
+// //     gmm::mult(Biss, Mis, BissMis);
+// //     gmm::mult(Miss, BissMis, BBissMis);
+// //     gmm::mult(gmm::transposed(BissMis), BBissMis, Siss);
+
+
+// //     cout << "Inf-sup condition test" << endl;
+// //     scalar_type lllambda = smallest_eigen_value(Siss, Siss, Sis);
+// //     cout << "The inf-sup test gives " << lllambda << endl;
 
-//     cout << "Inf-sup condition test" << endl;
-//     scalar_type lllambda = smallest_eigen_value(Siss, Siss, Sis);
-//     cout << "The inf-sup test gives " << lllambda << endl;
 //   }
 
 
   
   // Generic solve.
 
-  gmm::iteration iter(residual, 1, 40);
+  gmm::iteration iter(residual, 1, 2000);
   cout << "Solving..." << endl;
   iter.init();
+  //getfem::standard_solve(model, iter);
 
+  getfem::simplest_newton_line_search lse; // (size_t(-1), 6.0/5.0, 0.2, 3.0/5.0);
+  //getfem::standard_solve(model, iter,
+  //	getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+  //			 getfem::model_real_plain_vector>(model) , lse);
 
-  gmm::simplest_newton_line_search lse; // (size_t(-1), 6.0/5.0, 0.2, 3.0/5.0);
-  getfem::standard_solve(model, iter,
-	getfem::default_linear_solver<getfem::model_real_sparse_matrix,
-			 getfem::model_real_plain_vector>(model) , lse);
-
+  getfem::standard_solve(model, iter, getfem::rselect_linear_solver(model,"mumps"), lse);
 
   gmm::Harwell_Boeing_save("toto.hb", model.real_tangent_matrix());
 
+
+  //Test of coercivity
+  if (PARAM.int_value("Test_of_coer")) {
+    cout << "Compute the smallest eigenvalue" << endl;
+    size_type  nb_up;
+    gmm::sub_interval interval; 
+    nb_up= gmm::nnz(model.real_variable("u"));
+    interval = model.interval_of_variable("u");
+    cout<< "nb_up=" << nb_up << endl;
+    cout <<"nbdof_in_u="<<  gmm::nnz(model.real_variable("u"))<<endl;
+    cout <<"nbdof_in_p="<<  gmm::nnz(model.real_variable("Lambda"))<<endl;
+    sparse_matrix KKK(gmm::nnz(model.real_variable("u")), gmm::nnz(model.real_variable("u"))), 
+		       KKKK(gmm::nnz(model.real_variable("u")), gmm::nnz(model.real_variable("u")));
+
+
+    gmm::copy(gmm::sub_matrix(model.real_tangent_matrix(),interval, interval) ,KKK); 
+    plain_vector VVV(gmm::nnz(model.real_variable("u"))), VVV1(gmm::nnz(model.real_variable("u"))) ;
+    gmm::fill_random(VVV);   
+    scalar_type lllambda(0), lllambda_aux(1), lllambda_max(0);
+    do{
+      lllambda_aux= lllambda;
+      // gmm::copy(VVV,VVV1);
+      gmm::copy(gmm::scaled(VVV, (1./gmm::vect_norm2(VVV))),VVV1);
+      // cout<<"norm="<<gmm::vect_norm2(VVV1)<<endl;
+      gmm::mult(KKK,VVV1,VVV);
+      lllambda=gmm::vect_sp(VVV,VVV1); 
+      // cout<<"lllambda="<< lllambda<<endl;
+    }while (gmm::abs(lllambda-lllambda_aux ) > 1E-12);
+    lllambda_max=lllambda;
+    cout<<"lllambda_max="<< lllambda_max<<endl;
+
+
+    gmm::copy(gmm::identity_matrix(),KKKK);
+    gmm::scale(KKKK,-2.*lllambda_max);
+    gmm::add(KKKK,KKK);
+    //  cout<<KKKK<<endl;
+
+
+
+    gmm::fill_random(VVV);   
+    lllambda=0;
+    lllambda_aux=1;
+    do{
+      lllambda_aux= lllambda;
+      gmm::copy(gmm::scaled(VVV,(1./gmm::vect_norm2(VVV))),VVV1);
+      gmm::mult(KKK,VVV1,VVV);
+      lllambda=gmm::vect_sp(VVV,VVV1); 
+      // cout<<"lllambda="<< lllambda<<endl;
+    }while (gmm::abs(lllambda-lllambda_aux ) > 1E-10);
+    cout<<"lllambda_min="<<  lllambda+2.*lllambda_max <<endl;
+      }
+  
+
+
+
+
   gmm::resize(U, mf_u().nb_dof());
   gmm::copy(model.real_variable("u"), U);
   gmm::resize(LAMBDA, mf_cont().nb_dof());
@@ -1209,6 +1544,8 @@ if (!contact_only){
   if (!contact_only) {
     gmm::resize(LAMBDA_T, mf_cont().nb_dof());
     gmm::copy(model.real_variable("Lambda_t"), LAMBDA_T);
+
+
   }
   
   return (iter.converged());
@@ -1261,7 +1598,7 @@ int main(int argc, char *argv[]) {
   
   cout << p.mf_u().nb_basic_dof() << endl;
   cout << p.mf_cont().nb_basic_dof() << endl;
-  
+   cout << p.mf_cont().nb_dof() << endl;
   //construction of mesh refined
   
   // getfem::stored_mesh_slice slr;
@@ -1314,8 +1651,9 @@ int main(int argc, char *argv[]) {
     plain_vector PPP(mf_cont.nb_dof());
     getfem::interpolation(p.mf_cont(), mf_cont, Lambda, PPP);
     
-    
-    
+    //if (!p.contact_only) {
+     
+    //}
     getfem::level_set ls(mcut, 1, true);
     for (size_type d = 0; d < ls.get_mesh_fem().nb_basic_dof(); ++d) {
       ls.values(0)[d] =ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[0];
@@ -1324,8 +1662,8 @@ int main(int argc, char *argv[]) {
     ls.touch();
     
     const getfem::mesh_fem &lsmf = ls.get_mesh_fem();
-    lsmf.write_to_file("xfem_stab_unilat_contact_ls.mf", true);
-    gmm::vecsave("xfem_stab_unilat_contact_ls.U", ls.values());
+    lsmf.write_to_file(p.datafilename + "_ls.mf", true);
+    gmm::vecsave(p.datafilename + "_ls.U", ls.values());
     
     
     
@@ -1353,18 +1691,53 @@ int main(int argc, char *argv[]) {
     slicer2.push_back_action(iso2);     // extract isosurface 0
     slicer2.push_back_action(sbuildl); // store it into sl0
     slicer2.exec(nrefine, mf.convex_index());
-    
-    sl.write_to_file("xfem_stab_unilat_contact.sl", true);
-    sl0.write_to_file("xfem_stab_unilat_contact.sl0", true);
-    sll.write_to_file("xfem_stab_unilat_contact.sll", true);
+
+    if (p.reference_test) {
+    sl.write_to_file(p.datafilename + "_ref.sl", true);
+    sl0.write_to_file(p.datafilename + "_ref.sl0", true);
+    sll.write_to_file(p.datafilename + "_ref.sll", true);
     plain_vector LL(sll.nb_points()); 
     //  gmm::scale(PP, 0.005);
     sll.interpolate(mf_cont, PPP, LL);
-    gmm::vecsave("xfem_stab_unilat_contact.slL", LL);
+    gmm::vecsave(p.datafilename + "_ref.slL", LL);
+
+    if (!p.contact_only) {
+      getfem::mesh_fem mf_tang_cont(mcut, 1);
+      mf_tang_cont.set_classical_discontinuous_finite_element(2, 1E-5);
+      plain_vector PPPT(mf_tang_cont.nb_dof());
+      getfem::interpolation(p.mf_cont(), mf_tang_cont, Lambda_t, PPPT);
+
+
+      plain_vector LLT(sll.nb_points()); 
+      sll.interpolate(mf_tang_cont, PPPT, LLT);
+      gmm::vecsave(p.datafilename + "_ref.slLT", LLT);
+    }
     //    plain_vector UU(sl.nb_points()), LL(sll.nb_points()); 
     //    sl.interpolate(mf, V, UU);
     //    gmm::vecsave("xfem_stab_unilat_contact.slU", UU);
-    
+    }else{
+      sl.write_to_file(p.datafilename + ".sl", true);
+      sl0.write_to_file(p.datafilename + ".sl0", true);
+      sll.write_to_file(p.datafilename + ".sll", true);
+      plain_vector LL(sll.nb_points()); 
+           //  gmm::scale(PP, 0.005);
+      sll.interpolate(mf_cont, PPP, LL);
+      gmm::vecsave(p.datafilename + ".slL", LL);
+
+      if (!p.contact_only) {
+	getfem::mesh_fem mf_tang_cont(mcut, 1);
+	mf_tang_cont.set_classical_discontinuous_finite_element(2, 1E-5);
+	plain_vector PPPT(mf_tang_cont.nb_dof());
+	getfem::interpolation(p.mf_cont(), mf_tang_cont, Lambda_t, PPPT);
+	
+	plain_vector LLT(sll.nb_points()); 
+	sll.interpolate(mf_tang_cont, PPPT, LLT);
+	gmm::vecsave(p.datafilename + ".slLT", LLT);
+      }
+      //    plain_vector UU(sl.nb_points()), LL(sll.nb_points()); 
+      //    sl.interpolate(mf, V, UU);
+      //    gmm::vecsave("xfem_stab_unilat_contact.slU", UU);
+    }
   } 	  
   
 
@@ -1450,16 +1823,52 @@ int main(int argc, char *argv[]) {
   }
   
   
+
+
+ cout << "plot Von mises" << endl;
+
+
+  getfem::mesh_im mim_refined(mcut); 
+  mim_refined.set_integration_method(getfem::int_method_descriptor
+				     ("IM_TRIANGLE(6)"));
+
+  mcut.write_to_file(p.datafilename + ".meshvm");
+
+  getfem::mesh_fem mf_refined(mcut,dim_type(Q));
+  mf_refined.set_classical_discontinuous_finite_element(4, 0.001);
+  plain_vector W(mf_refined.nb_dof());
+  
+  getfem::interpolation(p.mf_u(), mf_refined, U, W);
+
+  mf_refined.write_to_file(p.datafilename + ".meshfemuvm", true);
+  gmm::vecsave(p.datafilename + ".Uvm", W);
+ 
+  getfem::mesh_fem mf_vm(mcut,  1);
+  mf_vm.set_classical_discontinuous_finite_element(4, 0.001);
+  plain_vector Vm(mf_vm.nb_dof());
+
+  
+  cout << "compute Von_mises" << endl;
+  getfem::interpolation_von_mises(mf_refined, mf_vm, W, Vm);
+
+  gmm::vecsave(p.datafilename + ".VM",Vm);
+  mf_vm.write_to_file(p.datafilename + ".meshfemvm", true);  
+
+
+
+
+
+
   //Compute error 
   
   if(p.PARAM.int_value("ERROR_TO_REF_SOL") == 1){
     cout << "Computing error with respect to a reference solution..." << endl;
-    std::string REFERENCE_MF = "xfem_stab_unilat_contact.meshfem_refined";
-    std::string REFERENCE_U = "xfem_stab_unilat_contact.U_refined";
-    std::string REFERENCE_MF_cont = "xfem_stab_unilat_contact.cont_meshfem_refined";
-    std::string REFERENCE_cont = "xfem_stab_unilat_contact.cont_refined";
-    std::string REFERENCE_MF_tang_cont = "xfem_stab_unilat_contact.tang_cont_meshfem_refined";
-    std::string REFERENCE_tang_cont = "xfem_stab_unilat_contact.tang_cont_refined";
+    std::string REFERENCE_MF = p.datafilename + ".meshfem_refined";
+    std::string REFERENCE_U = p.datafilename + ".U_refined";
+    std::string REFERENCE_MF_cont = p.datafilename + ".cont_meshfem_refined";
+    std::string REFERENCE_cont = p.datafilename + ".cont_refined";
+    std::string REFERENCE_MF_tang_cont = p.datafilename + ".tang_cont_meshfem_refined";
+    std::string REFERENCE_tang_cont = p.datafilename + ".tang_cont_refined";
     
     
     cout << "Load reference displacement from "
@@ -1479,26 +1888,34 @@ int main(int argc, char *argv[]) {
     ref_mf_cont.read_from_file(REFERENCE_MF_cont);
     plain_vector ref_cont(ref_mf_cont.nb_dof());
     gmm::vecload(REFERENCE_cont, ref_cont);
+
+   
     
-     cout << "Load reference tangent pressure from "
-	  << REFERENCE_MF_tang_cont << " and " << REFERENCE_tang_cont << "\n";
-     getfem::mesh ref_m_tang_cont; 
-     ref_m_tang_cont.read_from_file(REFERENCE_MF_tang_cont);
-     getfem::mesh_fem ref_mf_tang_cont(ref_m_tang_cont); 
-     ref_mf_tang_cont.read_from_file(REFERENCE_MF_tang_cont);
-     plain_vector ref_tang_cont(ref_mf_tang_cont.nb_dof());
-     gmm::vecload(REFERENCE_tang_cont, ref_tang_cont);
-     
-     getfem::level_set ls(ref_m_cont, 1, true);
-     
-     
+   
 
-     for (size_type d = 0; d < ls.get_mesh_fem().nb_basic_dof(); ++d) {
-       ls.values(0)[d] =ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[0];
-       ls.values(1)[d] =ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[1];
-     }
-     ls.touch();
-     getfem::mesh_level_set mls(ref_m);
+    // if (!p.contact_only) {
+    
+    cout << "Load reference tangent pressure from "
+	 << REFERENCE_MF_tang_cont << " and " << REFERENCE_tang_cont << "\n";
+    getfem::mesh ref_m_tang_cont; 
+    ref_m_tang_cont.read_from_file(REFERENCE_MF_tang_cont);
+    getfem::mesh_fem ref_mf_tang_cont(ref_m_tang_cont);
+    ref_mf_tang_cont.read_from_file(REFERENCE_MF_tang_cont);
+    
+    plain_vector ref_tang_cont(ref_mf_tang_cont.nb_dof());
+    gmm::vecload(REFERENCE_tang_cont, ref_tang_cont);
+    // }
+    
+    getfem::level_set ls(ref_m_cont, 1, true);
+    
+    
+    
+    for (size_type d = 0; d < ls.get_mesh_fem().nb_basic_dof(); ++d) {
+      ls.values(0)[d] =ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[0];
+      ls.values(1)[d] =ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[1];
+    }
+    ls.touch();
+    getfem::mesh_level_set mls(ref_m);
     getfem::mesh_level_set mls_cont(ref_m_cont);
     getfem::mesh_level_set mls_tang_cont(ref_m_tang_cont);
     mls.add_level_set(ls);
@@ -1525,12 +1942,19 @@ int main(int argc, char *argv[]) {
     mimboundd.set_integration_method(ref_m_cont.convex_index(),
 				     getfem::int_method_descriptor(INTEGRATION1));
     mimboundd.adapt();
-    
+
+
+
     getfem::mesh_im_level_set mimbounddt(mls_tang_cont, intboundd,
 					 getfem::int_method_descriptor(SIMPLEX_INTEGRATION1));
-    mimbounddt.set_integration_method(ref_m_cont.convex_index(),
-				     getfem::int_method_descriptor(INTEGRATION1));
-    mimbounddt.adapt();
+    if (!p.contact_only) {
+     
+      mimbounddt.set_integration_method( ref_m_tang_cont.convex_index(),
+					getfem::int_method_descriptor(INTEGRATION1));
+      mimbounddt.adapt();
+    }
+
+
 
     //Interpolation of  U on a reference mesh 
     getfem::mesh_im ref_mim(ref_m);
@@ -1569,19 +1993,20 @@ int main(int argc, char *argv[]) {
 	 << getfem::asm_L2_dist(mimboundd, ref_mf_cont, interp_cont,
 				ref_mf_cont, ref_cont) << endl;
     //Interpolation of  Lambda_t on a reference mesh 
-    
     plain_vector interp_tang_cont(ref_mf_tang_cont.nb_dof());
-    getfem::interpolation(p.mf_cont(), ref_mf_tang_cont, Lambda_t, interp_tang_cont);
-    
-    plain_vector interp_tang_cont_error(ref_mf_tang_cont.nb_dof());
-    gmm::add(interp_tang_cont, gmm::scaled(ref_tang_cont, -1.), interp_tang_cont_error);
-    gmm::vecsave(p.datafilename+".tang_cont_map_error", interp_tang_cont_error);
-    
-    cout << "To ref L2 ERROR on P tangent:"
-	 << getfem::asm_L2_dist(mimbounddt, ref_mf_tang_cont, interp_tang_cont,
-				ref_mf_tang_cont, ref_tang_cont) << endl;
-    
-    
+    if (!p.contact_only) {
+     
+      getfem::interpolation(p.mf_cont(), ref_mf_tang_cont, Lambda_t, interp_tang_cont);
+      
+      plain_vector interp_tang_cont_error(ref_mf_tang_cont.nb_dof());
+      gmm::add(interp_tang_cont, gmm::scaled(ref_tang_cont, -1.), interp_tang_cont_error);
+      gmm::vecsave(p.datafilename+".tang_cont_map_error", interp_tang_cont_error);
+      
+      cout << "To ref L2 ERROR on P tangent:"
+	   << getfem::asm_L2_dist(mimbounddt, ref_mf_tang_cont, interp_tang_cont,
+				  ref_mf_tang_cont, ref_tang_cont) << endl;
+      
+    }
   }
   
   return 0; 
diff --git a/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.param b/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.param
index 3d22946..97dc7e9 100644
--- a/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.param
+++ b/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.param
@@ -7,13 +7,14 @@
 Mu = 1.0;	            % Lame coefficient.
 Lambda=1.0                  % Lame coefficient.
 dgr = 1;                    % degree of enrichment in u
-CONTACT_GAMMA0 = 0.000001;  % Stabilization parameter for contact condition
+CONTACT_GAMMA0 = 0.001;  % Stabilization parameter for contact condition
 R=100;                      % Augmented parameter
 STABILIZED_PROBLEM = 0;     % stabilized_problem or not
 strmesh = 1;
 CONTACT_ONLY=1;
+TRESCA_VIRSION=1;
 FRICTION_COEFF=0.3; 
-
+rangeP_P=1;
 
 
 %%if BIMATERIAL
@@ -30,7 +31,7 @@ ERROR_TO_REF_SOL =1;        % 1 to compute errors wrt the reference solution
 
 %%%%%   discretisation parameters  :                     	      %%%%%
 
-NX = 20;                    % space step.
+NX = 10;                    % space step.
 MESH_NOISED = 0;            % Set to one if you want to "shake" the mesh
 
 
diff --git a/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.pl b/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.pl
index 5355162..6d63c0a 100644
--- a/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.pl
+++ b/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/cubature/CUBE4D_5.IM b/cubature/CUBE4D_5.IM
new file mode 100755
index 0000000..d521989
--- /dev/null
+++ b/cubature/CUBE4D_5.IM
@@ -0,0 +1,22 @@
+% Integration formulae of order 5 on a 4D cube with 24 points
+% taken from the  Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_CUBE4D(5)
+N = 4
+GEOTRANS = GT_QK(4,1)
+NBPT = 2
+2, .9472135954999579392818347337462550, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .0694444444444444444444444444444443
+2, .8535533905932737622004221810524245, .8535533905932737622004221810524245, .8535533905932737622004221810524245, .8535533905932737622004221810524245, .0277777777777777777777777777777777
+%2,0.894427190999915878563669467492510, 0., 0., 0., 1.11111111111111111111111111111111,
+%2, 0.707106781186547524400844362104849, 0.707106781186547524400844362104849, 0.707106781186547524400844362104849, 0.707106781186547524400844362104849, 0.444444444444444444444444444444444
+NBF = 8
+IM_HEXAHEDRON(5)
+IM_HEXAHEDRON(5)
+IM_HEXAHEDRON(5)
+IM_HEXAHEDRON(5)
+IM_HEXAHEDRON(5)
+IM_HEXAHEDRON(5)
+IM_HEXAHEDRON(5)
+IM_HEXAHEDRON(5)
+
+
diff --git a/cubature/CUBE4D_9.IM b/cubature/CUBE4D_9.IM
new file mode 100755
index 0000000..b3acc67
--- /dev/null
+++ b/cubature/CUBE4D_9.IM
@@ -0,0 +1,30 @@
+% Integration formulae of order 9 on a 4D cube with 145 points (and a negative weight on first point..)
+% taken from the  Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_CUBE4D(9)
+N = 4
+GEOTRANS = GT_QK(4,1)
+NBPT = 6
+2, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .5000000000000000000000000000000000, -.1188190337123157276190528324946187
+2, .7862262698859065681937539899765865, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .0499486076365920058340898066793095
+2, .9986896251736089652064035531296960, .9986896251736089652064035531296960, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .0020172156696163625491233219281849
+2, .8972839260992424387132917896649810, .8972839260992424387132917896649810, .8972839260992424387132917896649810, .5000000000000000000000000000000000, .0061981539685801749952003251303653
+2, .9590240438009825431508991023300510, .9590240438009825431508991023300510, .9590240438009825431508991023300510, .9590240438009825431508991023300510, .0010517384819698170066364425704555
+2, .7329438624669667186446168650628540, .7329438624669667186446168650628540, .7329438624669667186446168650628540, .9547931157691535763471652940742300, .0071195039662922548096059557419487
+%2, 0., 0., 0., 0., -1.90110453939705164190484531991390
+%2,0.572452539771813136387507979953173, 0., 0., 0., 0.799177722185472093345436906868952
+%2,0.997379250347217930412807106259392, 0.997379250347217930412807106259392, 0., 0., 0.0322754507138618007859731508509594
+%2,0.794567852198484877426583579329962,0.794567852198484877426583579329962,0.794567852198484877426583579329962,0.,0.0991704634972827999232052020858457
+%2,0.918048087601965086301798204660102,0.918048087601965086301798204660102,0.918048087601965086301798204660102,0.918048087601965086301798204660102,0.0168278157115170721061830811272882
+%2,0.465887724933933437289233730125708,0.465887724933933437289233730125708,0.465887724933933437289233730125708,0.909586231538307152694330588148460,0.113912063460676076953695291871180
+NBF = 8
+IM_HEXAHEDRON(9)
+IM_HEXAHEDRON(9)
+IM_HEXAHEDRON(9)
+IM_HEXAHEDRON(9)
+IM_HEXAHEDRON(9)
+IM_HEXAHEDRON(9)
+IM_HEXAHEDRON(9)
+IM_HEXAHEDRON(9)
+
+
diff --git a/cubature/GAUSSLOBATTO1D1.IM b/cubature/GAUSSLOBATTO1D1.IM
new file mode 100755
index 0000000..f3edfd9
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D1.IM
@@ -0,0 +1,9 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(1)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=1
+1, 0., .500000000000000000000000000000000000000000000000000000000000
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D11.IM b/cubature/GAUSSLOBATTO1D11.IM
new file mode 100755
index 0000000..e8252b1
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D11.IM
@@ -0,0 +1,12 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(11)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=4
+1, 0., .238095238095238095238095238095238095238095238095238095238095e-1
+1, .84888051860716535063983893016267430206414817564001954204594e-1, .138413023680782974005350203145033146748813640089941234591252
+1, .265575603264642893098114059045616835297201264164077621448666, .215872690604931311708935511140681138965472074195773051123019
+1, .500000000000000000000000000000000000000000000000000000000000, .243809523809523809523809523809523809523809523809523809523809
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D13.IM b/cubature/GAUSSLOBATTO1D13.IM
new file mode 100755
index 0000000..08e09e3
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D13.IM
@@ -0,0 +1,12 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(13)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=4
+1, 0., .178571428571428571428571428571428571428571428571428571428571e-1
+1, .64129925745196692331277119389668280948109665161508322540292e-1, .105352113571753019691496032887878162227673083080523884041632
+1, .204149909283428848927744634301023405027149505241333751628870, .170561346241752182382120338553874085887555487802790804737505
+1, .395350391048760565615671369827324372352227297456659450554576, .206229397329351940783526485701104894741914286259542454077970
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D15.IM b/cubature/GAUSSLOBATTO1D15.IM
new file mode 100755
index 0000000..e0e0c3a
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D15.IM
@@ -0,0 +1,13 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(15)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=5
+1, 0., .138888888888888888888888888888888888888888888888888888888889e-1
+1, .50121002294269921343827377790831020974259852216947788785344e-1, .827476807804027625231698600146041529195536146125796707231012e-1
+1, .161406860244631123277057286454328774644485176193046710229518, .137269356250080867640352809289686362970625610493254643268368
+1, .318441268086910920644623965645670393489678861199560924839863, .173214255486523172557565766069859143973766353125458203015303
+1, .500000000000000000000000000000000000000000000000000000000000, .185759637188208616780045351473922902494331065759637188208617
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D17.IM b/cubature/GAUSSLOBATTO1D17.IM
new file mode 100755
index 0000000..9f0cb3c
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D17.IM
@@ -0,0 +1,13 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(17)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=5
+1, 0., .111111111111111111111111111111111111111111111111111111111111e-1
+1, .40233045916770593085533669588830932923228462276862064255187e-1, .666529954255350555631135853776964490548129374988987074438202e-1
+1, .130613067447247462498446912570084637491907449311536657267446, .112444671031563226059728910865523921376956456980875320569753
+1, .261037525094777752169412453634371001056613553334716765542872, .146021341839841878937791128687221946103744194843853772295688
+1, .417360521166806487686890117020913233384424828225258134433550, .163769880591948728328255263958446572353375299565261088579427
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D19.IM b/cubature/GAUSSLOBATTO1D19.IM
new file mode 100755
index 0000000..d44812a
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D19.IM
@@ -0,0 +1,14 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(19)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=6
+1, 0., .909090909090909090909090909090909090909090909090909090909091e-2
+1, .32999284795970432833862931950308182730041334945018887054186e-1, .548061366334974322307017247901753550247370718236383653988127e-1
+1, .107758263168427790688791091945770948246401272452968189158682, .935849408901526020540707609497174597845971188125641593034686e-1
+1, .217382336501897496764518015261124167858473927218991512154422, .124024052132014157020042433210936376671836584823856939628032
+1, .352120932206530304284044242220471245529496782825697945266050, .143439562389504044339611201665767615591826773727965914171059
+1, .500000000000000000000000000000000000000000000000000000000000, .150108797727845346892965940584988204035823083442131061178680
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D21.IM b/cubature/GAUSSLOBATTO1D21.IM
new file mode 100755
index 0000000..9932560
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D21.IM
@@ -0,0 +1,14 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(21)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=6
+1, 0., .757575757575757575757575757575757575757575757575757575757576e-2
+1, .27550363888558888296209930848390643194371724024986338143054e-1, .458422587065980653341712970670396431551530707088913693106640e-1
+1, .90360339177996660825679209141548669654766671048177855288342e-1, .789873527821850575823355313501701341255531582117285798633435e-1
+1, .183561923484069661168797572778172070878078127299249503517423, .106254208880510572679151038683433135097672811382670416747947
+1, .300234529517325533867825104216516549736125983602346481756031, .125637801599600640146622206073798091666719238674901822785133
+1, .431723533572536222567969072130153051550792944358970807274209, .135702620455348088500144169249801420197325963446050235535497
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D23.IM b/cubature/GAUSSLOBATTO1D23.IM
new file mode 100755
index 0000000..f0dbe1a
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D23.IM
@@ -0,0 +1,15 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(23)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=7
+1, 0., .641025641025641025641025641025641025641025641025641025641026e-2
+1, .23345076678918044051547267622275424186746055651318407405314e-1, .389008433734094638967944941665667925339174087467514605229837e-1
+1, .76826217674063841567037196450623320210981670142795687155676e-1, .674909633448041745599573812946854446280863460463397092613593e-1
+1, .156905765459121286963620480216822223535411900937807786468654, .918234326017750460037471293734053616232368434841189995727658e-1
+1, .258545089454331899126531383181533189613903368940704994761138, .110383896783055043042767004189698148733631436666997602365805
+1, .375356534946880003715663149812886509255594343753512070350742, .122007895153338178229289074180078106265631100208278030113414
+1, .500000000000000000000000000000000000000000000000000000000000, .125965424666723368022069320770619471918173216874515575814277
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D25.IM b/cubature/GAUSSLOBATTO1D25.IM
new file mode 100755
index 0000000..775ef8b
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D25.IM
@@ -0,0 +1,15 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(25)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=7
+1, 0., .549450549450549450549450549450549450549450549450549450549451e-2
+1, .20032477366369549322449918992287805466804240713676031817921e-1, .334186422488406423170353303730264125288210267253412169234334e-1
+1, .66099473084826374499889898545867893375063823452781932620587e-1, .582933279493558257704983353273251150023529274500366395982189e-1
+1, .135565700454336929707663799739559202171330234152839098693878, .800109258814760712064104989937973202519012748164405350843474e-1
+1, .224680298535676472341688647070459682768930840223042933088104, .974130746867080593201658891879422560743143780259323781382047e-1
+1, .328637993328643577478048298179162677583443232929846626722542, .109563126504885377435581261977083806479166057229437913068074
+1, .441834065558148066170611645131919916029245477871859615898338, .115806397234228529444814178646319595157949830258305822684010
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D27.IM b/cubature/GAUSSLOBATTO1D27.IM
new file mode 100755
index 0000000..6d278b8
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D27.IM
@@ -0,0 +1,16 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(27)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=8
+1, 0., .476190476190476190476190476190476190476190476190476190476190e-2
+1, .17377036748080713602074303965199411146174932001453329963751e-1, .290149465143006245484402920126409977178433634130074518874935e-1
+1, .57458977888511850587299184258885174005642957396261013591309e-1, .508300351628590338018330853944003577404917968583029524889669e-1
+1, .118240155024092399647940762011854190911315739842354831622647, .702558499012140547302234028218364453117421773012039790937081e-1
+1, .196873397265077144438235030681633246410134483120040107157085, .863948236268004745260385497041752936783178315134026453644873e-1
+1, .289680972643163759539051530630709793507830897253784815807454, .984936179823066780462501732537032974318019754167452142348594e-1
+1, .392323022318102880887160276863541143673921049398479468262748, .105986792963410460063715038488610458311827872697180131591388
+1, .500000000000000000000000000000000000000000000000000000000000, .108524058174407824757475107125456775806426156076505726855377
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D29.IM b/cubature/GAUSSLOBATTO1D29.IM
new file mode 100755
index 0000000..9661a38
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D29.IM
@@ -0,0 +1,16 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(29)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=8
+1, 0., .416666666666666666666666666666666666666666666666666666666667e-2
+1, .15215976864891033523878630816270379305504626748082634965660e-1, .254251805029599527016224597827276572469359137688934919607797e-1
+1, .50399733453263953502685869240075261625001195477427787287786e-1, .446968486629654004955260400830418574669436050188994892392643e-1
+1, .103995854069092468034455864518427147095963086009900488657794, .621276910662570491747681663286566003871990156349497701014740e-1
+1, .173805648558753455266058390179709259839220993585212831307110, .770134904035821404078224702424972577227081209918206614293875e-1
+1, .256970289056431194109054607076562651555511347850873714311672, .887459566958520626505378347641788850791573725880856067573957e-1
+1, .350084765549618395950823272638849676092269511546111167672845, .968450119126017921584567994267610151531789970092036625918375e-1
+1, .449336863239025276078483497477041118733379542799904430041225, .100979154089114935744599562705470060277210308321480651255298
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D3.IM b/cubature/GAUSSLOBATTO1D3.IM
new file mode 100755
index 0000000..625e2ef
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D3.IM
@@ -0,0 +1,10 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(3)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=2
+1, 0., .166666666666666666666666666666666666666666666666666666666667
+1, .500000000000000000000000000000000000000000000000000000000000, .666666666666666666666666666666666666666666666666666666666668
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D31.IM b/cubature/GAUSSLOBATTO1D31.IM
new file mode 100755
index 0000000..24bcfe4
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D31.IM
@@ -0,0 +1,17 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(31)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=9
+1, 0., .367647058823529411764705882352941176470588235294117647058824e-2
+1, .13433911684290842921510249063139284705520425438745256776754e-1, .224609702716271048237004773116062216590998542221354492455681e-1
+1, .44560002042213202188098746801136766234560274065633617839094e-1, .395991352518435595951322149764172520491821092634233867616593e-1
+1, .92151874389114846446624723381236672641798801466438220925068e-1, .552964545035140806878863526100384018197161122536382150683774e-1
+1, .154485509686157647302540321313773351596793468904792285796301, .689938731009632795281007874770125853329516328900044026984709e-1
+1, .229307300334949230438133296247968374162426676017584427339528, .801973309988107697581641829323756451329090206586914032496804e-1
+1, .313912783217261479046382659632371093720091342799859713267448, .885021267578289352184728726816462459105382395892224688500747e-1
+1, .405244013240841305847868492623443014327503788538750714711064, .936081698388096179460442414303108681335648762971252960440287e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .953309373767347166497036235141267363946645449456364031984491e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D33.IM b/cubature/GAUSSLOBATTO1D33.IM
new file mode 100755
index 0000000..e05a770
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D33.IM
@@ -0,0 +1,17 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(33)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=9
+1, 0., .326797385620915032679738562091503267973856209150326797385621e-2
+1, .11947221293900728567740537829149966619093278640402952258748e-1, .199853144054570330687995882050504396471527249542297425578152e-1
+1, .39675407326233063081072687284361288218823256905479703276208e-1, .353185834428168324996114800838931665506483131317767918886260e-1
+1, .82203232390954893143176818836031371283164620417090721135754e-1, .495081358587514011972118026593360539590343414317196854573294e-1
+1, .138160335358378659346894817348964660425237397922620554841258, .621052665664835501316981794483733899803947757525133778641170e-1
+1, .205747582840669119413232053403220265499581605341891046617858, .727059807869011339915016052472133862427388585327721514391982e-1
+1, .282792481543938012328856431629662602075120777418153679028028, .809697586188012446321633533501142359803970357771417227070442e-1
+1, .366818673560859507916167333987202028967431905340870776188773, .866310547447281130053072019133417108622886794056730343091914e-1
+1, .455125453257673944488677494955719132519698049479437597765521, .895079317198515411469094034717625840976067089226702257961895e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D35.IM b/cubature/GAUSSLOBATTO1D35.IM
new file mode 100755
index 0000000..312558f
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D35.IM
@@ -0,0 +1,18 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(35)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=10
+1, 0., .292397660818713450292397660818713450292397660818713450292398e-2
+1, .10694116888959952423682968444888718592861331094595279277834e-1, .178966825930882385577127845175611782307832925048426251844998e-1
+1, .35549235923706878141029870601725693774915908874024696655238e-1, .316909458813148684258478452091586897789922163705181539793793e-1
+1, .73769711101676953457022014979468687381452309580567375865338e-1, .445658785496035422240043952780765889604388715847003959646753e-1
+1, .124252898723693492918181255183027979798170322167102148284960, .561576707386525220354550077318905120953864296130486462051020e-1
+1, .185545931367389751116583846885633726465694421405219326543697, .661336402243753884630233669548626818123027098398137908719772e-1
+1, .255885357159643248611045181187538315114392200174257596784414, .742069712979694425048403218342049251459662226109483406188946e-1
+1, .333247576087750694850749948077536494038518312261134940526345, .801454620220306209899554840917970096865967172080793328268205e-1
+1, .415406988295359214312422923277559788123552224617074323619774, .837782922635714336350686388701304747066352773683085083378131e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .850009596424136173223363578082616101599485725831061427899484e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D37.IM b/cubature/GAUSSLOBATTO1D37.IM
new file mode 100755
index 0000000..ee2fb9b
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D37.IM
@@ -0,0 +1,18 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(37)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=10
+1, 0., .263157894736842105263157894736842105263157894736842105263158e-2
+1, .9628147553042914037276780707884542385044688436875659713374e-2, .161185615942444707458025140586470150516260701463731095265061e-1
+1, .32032750593667282141909207534686535042213083409474321044076e-1, .285909010637834130023768135866213912526030070440817145249659e-1
+1, .66561010955024929345076392691857393018544355841503967984722e-1, .403158819980598015723884230568602858330182251708810199399037e-1
+1, .112315869523972064792841236202654328313639070261734086723908, .509957498497254078418906028664432604337531744810181943084061e-1
+1, .168111798854844355076798338514420573762127129004254353040030, .603546138143373625497148525011966799361590679125845683198745e-1
+1, .232503567984056869175932019085508008496574215431238336956656, .681502411793620922448903964945159908720383313398169969136747e-1
+1, .303823408143045350306762648092087816667398335350544693329895, .741807770354584129073565068669833024655756471169243587084652e-1
+1, .380224147038506752408799321536455964029241095036311281163628, .782900513237377435790849483968216861515489682954554753349193e-1
+1, .459727031380589081012027740920222768488803564953545767490584, .803716431939228745038633632245419669510459295454961411588879e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D39.IM b/cubature/GAUSSLOBATTO1D39.IM
new file mode 100755
index 0000000..4715ee0
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D39.IM
@@ -0,0 +1,19 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(39)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=11
+1, 0., .238095238095238095238095238095238095238095238095238095238095e-2
+1, .8713851697725985882759361722297061570414205881792792352983e-2, .145924200492527293047292718065854071328605755774022440101599e-1
+1, .29011851520127232851948674669282411675174562977995154850811e-1, .259215845004248125363614859264148780152071795112277146331920e-1
+1, .60352622338204767774423201847527976144709224245401779185061e-1, .366369590925370721262739305209468518286401470259684831383220e-1
+1, .101999036961143797627843705169820680454790169725111741826687, .464927339789430326505688320746072030299104839832459926795938e-1
+1, .152974486968888383686341803402666685621141996947077251470668, .552585416095616676335002433921938873811543469692278740765004e-1
+1, .212084019869084656536489064830957356332113495720758755547356, .627290605954344740075787678539996158519476607413795006408040e-1
+1, .277942108360498949402741825196324357632471256716467573532750, .687292314300206717904498087075726317588624924124032911561135e-1
+1, .349005071745617556362324066070623883989464482969806883829044, .731184312239887296336352653171967516097530304094937638975446e-1
+1, .423607242098907266996820835757165282241125503343361759567474, .757937875558406922266253407526454555250206170414328264983493e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .766925951660874742757922025337698738285250278945318581563443e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D41.IM b/cubature/GAUSSLOBATTO1D41.IM
new file mode 100755
index 0000000..0d007ee
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D41.IM
@@ -0,0 +1,19 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(41)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=11
+1, 0., .216450216450216450216450216450216450216450216450216450216450e-2
+1, .7923780771176911723855188893964851697243231940241772053095e-2, .132728738412508789558139522602714567237786507838684367062010e-1
+1, .26397858000385659737893116692135245043968977329318192916398e-1, .236072326468703760618878674323959922005749894668565101574612e-1
+1, .54968854904547764735171087110456604900232958576426356366954e-1, .334328029322765380062020970785485462845766896335495627368887e-1
+1, .93025536194039431977279075971932478780665742546451550753154e-1, .425450301959192239078556180478740683571890905421950696146433e-1
+1, .139756380019398920940059051800767120703327286940249649738061, .507502874008238371862186518748000954411017664375040666139280e-1
+1, .194165280857870514386894197065036700327279847696152201721922, .578738223269695332950181838607280840711049818767407746527904e-1
+1, .255092562405048825095624382158364979164364182102424091281464, .637638483267151377654222296544149216862750861038200720792575e-1
+1, .321239644930540230969521359879910435358346448028531860291529, .682948443068707133430886811030851281405420814902094595923986e-1
+1, .391196707420357479106022453267303618362496652992903467438132, .713702461356807001681179967833944690442864754444394177616981e-1
+1, .463472729994550832619455604767946321903610381833241750515514, .729245097221208968082102197399850735484056860563144640473109e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D43.IM b/cubature/GAUSSLOBATTO1D43.IM
new file mode 100755
index 0000000..126a1f8
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D43.IM
@@ -0,0 +1,20 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(43)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=12
+1, 0., .197628458498023715415019762845849802371541501976284584980237e-2
+1, .7236422060633710959268616630950450489694603930177479119567e-2, .121243003857658682586998294685485205798888635735206232771851e-1
+1, .24121022144644897932180160074285422075824037275600302787436e-1, .215879355851209173744382328060211355762285181763820359922447e-1
+1, .50270720979827494524919839826316421044100825930352632722344e-1, .306262385647771031906914237201777466689542138275629029502925e-1
+1, .85174451674357056888399690354997557700744058493336357749444e-1, .390677247377849948709671276739823565676700045378139841223174e-1
+1, .128152479413969658027418228466501604356390385523069892862706, .467486230817561709167503534533485520634160783618914272939110e-1
+1, .178368177769931895761927233198615628054344059098850639312758, .535195508621682557675918139577333145872035341048698748128486e-1
+1, .234844114431577915934942339923850094434826742536328644801788, .592487553313745656510630023621302592842459980417485732954788e-1
+1, .296481031042762585402024755892452180224023138002913023559442, .638247373508794383180742765278353838977596887811376972364145e-1
+1, .362079225527103466446561183660432397913404446695291352031596, .671584363193019099507824488503554245640746693419422570410570e-1
+1, .430361897979665800704068693508616533045727771412779130738296, .691849681929036972617513669314722196935189869646369117329220e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .698648900063736825700798532398731769866480585374617341382847e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D45.IM b/cubature/GAUSSLOBATTO1D45.IM
new file mode 100755
index 0000000..28725ee
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D45.IM
@@ -0,0 +1,20 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(45)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=12
+1, 0., .181159420289855072463768115942028985507246376811594202898551e-2
+1, .6634723247419558223456630922762512314040103793349049679906e-2, .111184267323556044964802174086492620050176192239169745974084e-1
+1, .22125889535056820986511434724677584464633478522129651817468e-1, .198158406667339047346310816817358634793092440210505829253431e-1
+1, .46147162443246739002423501766896125395789943060861848397862e-1, .281549243623230995104741698390589971642242228145224933854699e-1
+1, .78267964922563979688347481288328857079461949594834714406916e-1, .359909310276469911078195303343400629900325450513271872191024e-1
+1, .117914758789753346106312359523853174339469775381550067611436, .431845149839645341082814096532915965108641116273791577943270e-1
+1, .164379947367935650082167570906496621712988355526783726167442, .496074138420417937070748854978562144413051915739330975708622e-1
+1, .216834321010352343905295227728858114780552501436759663211850, .551450434464843020552120615137983022031643064384762325675358e-1
+1, .274341813392838690875890754215188775588455890843755295097072, .596985968512456595161469441753589964535657767009518443797119e-1
+1, .335876193312244543983305410320195328149411065613650152688440, .631868210140104000636240453456865580062120086871590542472583e-1
+1, .400339373304583666381713730437504634594062204289261893121279, .655474709368019711772251129082650571537148716289912415278838e-1
+1, .466581003131385710943179095804161345101888395541186134143022, .667384219334931887983928604825387997375176384641762012523592e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D47.IM b/cubature/GAUSSLOBATTO1D47.IM
new file mode 100755
index 0000000..5a44ce5
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D47.IM
@@ -0,0 +1,21 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(47)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=13
+1, 0., .166666666666666666666666666666666666666666666666666666666667e-2
+1, .6105027534253145364097964563419740923508003188290461239091e-2, .102325844664871926542712359095814255514168391823983732543676e-1
+1, .20367930873732760570077410580238398736748534857361504040258e-1, .182523693971356860161914943775548702387906683080989446345772e-1
+1, .42508614632688710838425033131576724176551365436575845115480e-1, .259681141842457373216669448567446890052560190695344219996624e-1
+1, .72161767082341711238093369914125951942966191994092954906250e-1, .332568643376563923469349966567997205463679797064449423155211e-1
+1, .108840170379641609800406023885626321260268486963982328469372, .399993874181464909008132180694180172477943323715565151820834e-1
+1, .151941475592432816619817283105311224369685632997407266147836, .460850699553102109563448113570242728560689916347627386379012e-1
+1, .200757926360003365951189501409466921016909810941654501300426, .514140151739789154137518224535670827918308109374097488886833e-1
+1, .254487942590560808690520038715598419467725766219313446622422, .558987331341604440781221162155195934534543154201289295286150e-1
+1, .312249271070386383385642693869640983656841846756140309068138, .594655897034059127047221223170935785573793405205555420601850e-1
+1, .373093467915561709910056559156362235068040400820232908112370, .620560194689751453476076562196484851797968944534480594902694e-1
+1, .436021470258446513645507687452672701552229338159203754455898, .636274887691657235085572083693789566452204678961431315096817e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .641541946493309641686994130620052825199133476657039923913294e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D49.IM b/cubature/GAUSSLOBATTO1D49.IM
new file mode 100755
index 0000000..cacd8b6
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D49.IM
@@ -0,0 +1,21 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(49)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=13
+1, 0., .153846153846153846153846153846153846153846153846153846153846e-2
+1, .5636293844262172785376654814349329502683228655198220994610e-2, .944842901213173279067602383813360096837243278295331509485688e-2
+1, .18811062616141335124668664358934918984477681089652652115344e-1, .168661518429779996887613742913779549959195787571827537904211e-1
+1, .39282226591221329437434739125655822436617675722870228517317e-1, .240241995405903136579896563903310209755081435311081600999073e-1
+1, .66737838020438214512774251095114972629569806396220366176788e-1, .308175125712737013910900270521396343659377236204541224203563e-1
+1, .100761408446281280481606180714828301121830713192360841900358, .371435250611455686580420414931243688743957924621669253334512e-1
+1, .140837091818667459737297306048036992001160745798040833428648, .429064319900021810937406261795342036448947295198737044084601e-1
+1, .186357350253841556099740546419389481909497246797714207345238, .480189011769506554018486981854312016057282442710619721520082e-1
+1, .236632128985060727350878302809502843787186249283851277026243, .524034431153685264949529184456820880802892709975886555974429e-1
+1, .290899306466876607218158058833075087878819764706376763456148, .559935970599301676501054399399431205217540930926319129085785e-1
+1, .348336243570373639612979481048944909294222405586751317284494, .587349420469045035383478101482410471114901694452260627407174e-1
+1, .408072252364972549339397164057120123811863920061932007752486, .605859231442216730221433478521131956164303514431104854746501e-1
+1, .469201794109040135897256362609124332668453019391966382950466, .615184819000414381507635746454870247777410085381803960124891e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D5.IM b/cubature/GAUSSLOBATTO1D5.IM
new file mode 100755
index 0000000..fd4e449
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D5.IM
@@ -0,0 +1,10 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(5)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=2
+1, 0., .833333333333333333333333333333333333333333333333333333333333e-1
+1, .276393202250021030359082633126872376455938164038847427572910, .416666666666666666666666666666666666666666666666666666666666
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D51.IM b/cubature/GAUSSLOBATTO1D51.IM
new file mode 100755
index 0000000..7ef8b0a
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D51.IM
@@ -0,0 +1,22 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(51)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=14
+1, 0., .142450142450142450142450142450142450142450142450142450142450e-2
+1, .5219518135724689425562679972740281166560485166095899171246e-2, .875098743803278950968486718135962439935403676762603146489170e-2
+1, .17425798774590540367866598439434972665509634659039877372378e-1, .156314758676011921623924950323976817580554306820644071373744e-1
+1, .36408270637442110570126617963640634219784656903881221350816e-1, .222888289665308493720373711206931177818922725758967985150855e-1
+1, .61898956892738760666728475402929579036643743433243354285580e-1, .286327848400813658695436141269703119508106325294368387942301e-1
+1, .93539756552093855870954067620731043963341083339048312650436e-1, .345746711800216381403173675150636096766678043004382691295039e-1
+1, .130886425076770044580286387125797362998503429483030936381575, .400311609852692290841190352419751768913472107350526745204076e-1
+1, .173414668151595242410647562408769525902811104392579867437986, .449256826296452799860681509730313010164092849300188453714885e-1
+1, .220527469528719409968665962565937612546033718146165368320294, .491895372929763815896544656349943163869494044098204433775991e-1
+1, .271563462192958798160693674580378988878614379597627434424592, .527628739106265056091909947399509438466570357602852376199058e-1
+1, .325806209005485664781456710706416702118262424138498939256300, .555955326287185164641309796710773319448695113123507892155807e-1
+1, .382494258448540933331599209743334168109275316540198144332390, .576477501273259914068766666873650439913498374601174255117312e-1
+1, .440831833050739475780645865862341835890285154053172375713830, .588907182929780795332495397241821186005642008580209696053016e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .593069888313815135426199018528759945072976725087396907439843e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D53.IM b/cubature/GAUSSLOBATTO1D53.IM
new file mode 100755
index 0000000..9fa86a3
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D53.IM
@@ -0,0 +1,22 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(53)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=14
+1, 0., .132275132275132275132275132275132275132275132275132275132275e-2
+1, .4847298690772937241453544067700950704265633170196590917347e-2, .812794197875210909949507644855484155967295191472253843720574e-2
+1, .16187857071434347828114560428263719229997063411737679482102e-1, .145271103389895723534263899117912141009164344192280618119264e-1
+1, .33837416439220737536928790695504783770783890199380353999330e-1, .207334576215033605189929243893135553677258034767923801250409e-1
+1, .57564491394348580793846830871375163299169405152113342802907e-1, .266690385236637442001627567357501032518809953980167034225613e-1
+1, .87059514971830901977742786901697749544699992123399574285196e-1, .322568290401772691951228467312392156549271450243330429605072e-1
+1, .121937902997215117423952137366904537986166617277573282691844, .374240617548538513902839695715808752117143984373053438094600e-1
+1, .161744935535213341140309377463305755520976402481877715884116, .421033975607551628697455938989599159947536634091556432665574e-1
+1, .205961655081412196760843960119143961297352923216924837444576, .462338429988560878610176973496930444473152172769404774927708e-1
+1, .254011623034210309785191658527760078518633370111423994954706, .497615552062478364379726773754575675541209407497974291198564e-1
+1, .305268431211818596032057922397945127675886216375209298110312, .526405468805279472411887758974550839267643555081391919422675e-1
+1, .359063866689198814022923745545333747322946192537992066531726, .548332868979883125442929318956030209417161177190799199163892e-1
+1, .414696622345997819558648661125617458507549600036909680734022, .563111900386195062703182120568301057054912545924890514933355e-1
+1, .471441439153243551186728174213126618386969718269283169653968, .570549898363139172666573964150201335316779707512487925978023e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D55.IM b/cubature/GAUSSLOBATTO1D55.IM
new file mode 100755
index 0000000..fde4861
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D55.IM
@@ -0,0 +1,23 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(55)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=15
+1, 0., .123152709359605911330049261083743842364532019704433497536946e-2
+1, .4513505865715091860627443350214348656266829531532571420476e-2, .756908492998379839542896330342786928172421932727542056944041e-2
+1, .15077096356031853143799306056089627132362118375153218171440e-1, .135354031484124137704257127225129269401276106349213754589370e-1
+1, .31528640739508744228981575858318538795142278692178225442666e-1, .193342199898564898739162871335622054971425531015516504928898e-1
+1, .53667140011955860617885042973456560991991749245221800803941e-1, .248979045466187804613341705877387858052963659217990353324378e-1
+1, .81223631859106717378963341906587715242238150972176740253454e-1, .301592519142613675140322317588168405445030860560186840791403e-1
+1, .113863551396765629322914682931773508357687020470960529884954, .350544690002989995926334292120068043474674125337739548240897e-1
+1, .151190669321816005803012785711453444605785868153381852837216, .395241565139428008920851160875547009022029362151477473449563e-1
+1, .192751873898283525014548191287820640551973256670620433810082, .435140667205678028188130776078165301844127624770588033245342e-1
+1, .238042662814015458210591713438197018025010870016085886109059, .469757710573981562489182534937850130445343345120126115219412e-1
+1, .286513264143252806181211794515820545400373649967902242322173, .498672508185749303267845887670342417580393232955522927913043e-1
+1, .337575308579044496869992988460581312360197634829237218169588, .521534082318382687113535560956211439902889273012784338358176e-1
+1, .390608970857869490095474073837502665769111824407837236749336, .538064929167842696867934270233034418136125147248867068589393e-1
+1, .444970493302203945146106198872159572524305647565748769566770, .548064389229452100660662053782976870957940094447424669757957e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .551411083898413050562289764353687407424172485138729180863610e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D57.IM b/cubature/GAUSSLOBATTO1D57.IM
new file mode 100755
index 0000000..463d0fd
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D57.IM
@@ -0,0 +1,23 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(57)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=15
+1, 0., .114942528735632183908045977011494252873563218390804597701149e-2
+1, .4213028579749853330590887045674687301197699926991654903060e-2, .706589966395269382036608433410389513497039777497499727089194e-2
+1, .14076698416865379161703523895404135634716326427958768433372e-1, .126415833702757011021341269250212399522158522858944328383225e-1
+1, .29447609524471458846405225292239463859846046279881258757234e-1, .180710470997042676573663415616798499084917367357548065477142e-1
+1, .50150390900361570223328588425272934980389794061133810691620e-1, .232953472665714637009402457230108320576652326113950852164605e-1
+1, .75950256409900945224288083908467395086812661195093270248722e-1, .282555989615401916510968552361516617867180727695131041119079e-1
+1, .106554821381226459775020239703798119983160454148661883677788, .328956681988950274720506872965661912803866043805925136674291e-1
+1, .141617300681457434183100701935051346105225066318658892988696, .371630016623591269170338210004153353917738916903357848507864e-1
+1, .180740412096220796314453258645129636111624477435108964250188, .410092564167034573998607727635799427521795519348752383237299e-1
+1, .223480869952473573807724884979671114840024757733730891021696, .443908561598826050836282172279602797856663363799773815281491e-1
+1, .269354404915879657386721389446423932579575876195213961883090, .472694875969304458905663576820179446730571133570584258804423e-1
+1, .317841249788775501122007447224107172986332681943585563244013, .496125355021499153288379824771545307176305476980836370874308e-1
+1, .368392028140213104366450265499966194601836824292832847046162, .513934526536174947351404041676880805117233514802254028829063e-1
+1, .420433978687074766087525711450576140668427320320412134669431, .525920607982273249281064904295697030948861180232393493608628e-1
+1, .473377444757256665318496082774323117922018451116582981169381, .531947793618339624737911534049655704238995606941720382775521e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D59.IM b/cubature/GAUSSLOBATTO1D59.IM
new file mode 100755
index 0000000..71c8c00
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D59.IM
@@ -0,0 +1,24 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(59)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=16
+1, 0., .107526881720430107526881720430107526881720430107526881720430e-2
+1, .3941577826759455705337692175642821774041786345266341255715e-2, .661123551273233515131781493491739852809813092971118023749121e-2
+1, .13172532092131762586965225762385120356636002416317467245980e-1, .118332166151351583650228913547128293450859321049879971550576e-1
+1, .27565414895980385096797231175072194748420655259146220114212e-1, .169269702026120288149054234659366233337907773109497243990578e-1
+1, .46966524279365093427744238376268826981281664148167550960778e-1, .218409090800334564148736440416341460523266076903357701133095e-1
+1, .71170002351272194816497308801762980062733319086840696736928e-1, .265232327467243913871404300338199517069413538823886617413097e-1
+1, .99919228403768505363834333008409397196851622648463205568176e-1, .309243706452273116953742920011158028576281989972116445862646e-1
+1, .132909431845462378932929582581179425692701498368351572890328, .349976887970502852251076766865697836840420067722239858585482e-1
+1, .169790898694237238331479362701612946137098574900113220425048, .387000161707378093171419392087113833718945257680035838046676e-1
+1, .210172671395999043498351568901137282496869964482170302255560, .419921102587648653326290541131881663912333492006271003920411e-1
+1, .253626690450583797148099883464892707126418280477365480939213, .448390755226304111240714664181044381842072605436659224151060e-1
+1, .299692330859719096848667790301953798554142885012178699905694, .472107341889289787160952449082667556226074506949061086924020e-1
+1, .347881284363563689520272426186868212704483482345560886763170, .490819465068563785598709397007104863771375690668465426026522e-1
+1, .397682735376237749429453207136145794400506376080822161383004, .504328773993252566977812980514235680975135840394569136888326e-1
+1, .448568775619658861455442638345975844551246596062543428935102, .512492067977351988379528274952139859375022507267242661965872e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .515222814766036665708924807627472104823475959417722482675675e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D61.IM b/cubature/GAUSSLOBATTO1D61.IM
new file mode 100755
index 0000000..d707da2
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D61.IM
@@ -0,0 +1,24 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(61)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=16
+1, 0., .100806451612903225806451612903225806451612903225806451612903e-2
+1, .3695533013619320314229342361276064438549260014752591023524e-2, .619905325068692189431017461455852863677308015161122664564700e-2
+1, .12352654758645385968772024805922512885266690539114243995420e-1, .110997764446459823119160855805397847065866592950853795220113e-1
+1, .25857580791383810958335879205785640918321138662135586588218e-1, .158875677054577328907811394589531003479596907397578386268849e-1
+1, .44075030468134047962734273812964606989921120454714917771798e-1, .205171007930313616652019208595077891479645029850817715560092e-1
+1, .66823761993662240084592615287728254819884728720905618790911e-1, .249426356681106035059800768622215270143816050928955588640022e-1
+1, .93877634111278827726589105963710940119554449152385918853484e-1, .291202486240279347753994649596021099388281730705321402021982e-1
+1, .124967753031662601141362017660847971716568516923414378001788, .330084386285772719662181658417470516898190065749711602305526e-1
+1, .159785122192224592028802121150575495712070108887407335974531, .365685698013395163201854917846043774864430079361431938949998e-1
+1, .197983706425789436931413543694054965174031783204672520790836, .397652628460531261461783644415243441246609268153685444410193e-1
+1, .239183868559217354696703713303990565175717698977965325081444, .425667489748341152637638292533084566926749502847335622835946e-1
+1, .282976141399076530198340321496804409231000126662368532136878, .449451864786789165360623947923320246109173498437553195644532e-1
+1, .328925296730559256873093889650642303651838106406754938198256, .468769377734069067829541770728968353881797946677382623975272e-1
+1, .376574670574897347791879284420564021912310606153650872746580, .483428044740013002801890738531974120229420067778694200015487e-1
+1, .425450701593176252542809061914980170854683870415604527623806, .493282182703808885853255821217039098973569283919955179470797e-1
+1, .475067637476703373846851127635786909851425415954982763499512, .498233857506383888174695423742704902299961883402013170926582e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D63.IM b/cubature/GAUSSLOBATTO1D63.IM
new file mode 100755
index 0000000..71ed402
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D63.IM
@@ -0,0 +1,25 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(63)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=17
+1, 0., .946969696969696969696969696969696969696969696969696969696970e-3
+1, .3471820783170828166331956621882223166451388410789876437908e-2, .582422419613386732561108993514254374111530073791132231122504e-2
+1, .11606918341546849257186195809340660919822449034117999835380e-1, .104323045088016800479058320913063386508288859446326183240854e-1
+1, .24303274301502128312237791543219924195179604960513263843852e-1, .149405229583732387599855782274976114343192870338312668226624e-1
+1, .41441348274529379587160465121589401019191139979944330235987e-1, .193089073859069837819294378376084060925463502715997534752124e-1
+1, .62860949624718889676719685334827797326776034524980480179822e-1, .234969252305120852739865560206122974127100954535248775355173e-1
+1, .88362038497966265220464343366642565410306735074550603473359e-1, .274655297213134839758494206533284764335996426011146270826503e-1
+1, .117706499103235685996670759788456025584165262656253667022448, .311776839262326527205304795838662049372485413839456765206665e-1
+1, .150620341690918702150161376227791399071908448691413311791407, .345987347470080737799848984001631601497648509265887666640795e-1
+1, .186796254359365871368084328794642635951373037423558619700344, .376967434619869142535649592014542904571679509397230501025568e-1
+1, .225896470040444188444797644119684576263621625535116186513302, .404427860967275460898538483860978368489005345007736042463416e-1
+1, .267555919183946622013498139507369827145060241825802331148318, .428112242659065662750959818729323474463124509789127996704173e-1
+1, .311385637873303182479032669641000444584910058542365843718994, .447799448735387003305742313627804816333924283789518495908516e-1
+1, .356976399256162979197327748518477796536686148506339221162646, .463305667211207317649675601425526422922278767014430159910321e-1
+1, .403902534266261387129346502279421395209750563566905250363635, .474486121972959079121777073313019049746989888341200381484857e-1
+1, .451725905911946496841521105954187261966530067396395385116088, .481236424864927309982772471389677145513478064643933397891675e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .483493550513582794800164042348360919482440783031293825384799e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D65.IM b/cubature/GAUSSLOBATTO1D65.IM
new file mode 100755
index 0000000..ab04c94
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D65.IM
@@ -0,0 +1,25 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(65)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=17
+1, 0., .891265597147950089126559714795008912655971479500891265597148e-3
+1, .3267818706241898872719379697008658939123332221068393980512e-2, .548237040915327570073747180688260857898810816047143193269134e-2
+1, .10926655560031025527387669645240364666144860235860655029450e-1, .982313908035671564397354124013105319667317131621446390749319e-2
+1, .22884675543596235796378418642566496906853795800594885615553e-1, .140752684311217517003760885539283583042530382431647788553374e-1
+1, .39035852161275538628596639395710566685325639794482640242076e-1, .182033854753912761753960607415591143831167821568040475024335e-1
+1, .59238081743863367800761807746241902934295626559250965049096e-1, .221714510301221711501363965218239498502506930859476832470857e-1
+1, .83313778598428692543829012294041305580720623236938271615932e-1, .259446459154635603879199530393733985591253758474079173539945e-1
+1, .111051346784066294558981590516769002262563521653929507363840, .294898270133726133477194188385045126758474984839586078352300e-1
+1, .142207019639890497001374713709686957513242547417513952582574, .327758450541325602152191620220031543654903452737514882610582e-1
+1, .176506996031992687811406831062165682194303731932337142646188, .357738249385364110177945443051266351590356364134185041302582e-1
+1, .213649844362538577604533904183277431205625978039359064631420, .384574215317954910525379587538314076158942351412473889253948e-1
+1, .253309150663364521281755492049505656622199067964373639328508, .408030519252111915810444986639725295136323519546187000792315e-1
+1, .295136386720203627571311047943812398485693829871777668806268, .427901029859887932950635763572018487278249959353515203023550e-1
+1, .338763972744255503211266465393354937215360538392133619235151, .444011126417920160590792216087440157377275418151948545555205e-1
+1, .383808507565441578468326159219630319924593889721511091763216, .456219234034572435112197559565733591506381605045768667614281e-1
+1, .429874137911903070814345355376581198803807020198381253947380, .464418068148053230718428381547903132118412616700170908800243e-1
+1, .476556037143514659956580426168788227431771756060691196833555, .468535577521516560008129537207587320570048325183673953062711e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D67.IM b/cubature/GAUSSLOBATTO1D67.IM
new file mode 100755
index 0000000..da5d5a1
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D67.IM
@@ -0,0 +1,26 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(67)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=18
+1, 0., .840336134453781512605042016806722689075630252100840336134454e-3
+1, .3081278177806724856687350275451075505712326125984047369883e-2, .516973665727018810568244365869450181145528779579159877676231e-2
+1, .10304428285039688405544395755774045411888074994426819461416e-1, .926569673814102874078195254088283984194151253377487093624533e-2
+1, .21586470781506058781214042701816330811887442452500586725310e-1, .132826976653891079738007655238330862581264958409352559586884e-1
+1, .36833033991959030932667397833309035686738124772976314999260e-1, .171893339452053510849834287132337970205695834529451291195266e-1
+1, .55917623141024772453963575627506695748818149277024899029964e-1, .209534591022939403680975966749173653685423615377626946554339e-1
+1, .78682052308900108770290171627763765931604179993573427882518e-1, .245439317186091366222348381370690408714308287808970649517132e-1
+1, .104937671457602190227540942908308061134228414958666453855834, .279310149445183583616523546214524146116224901385810239509889e-1
+1, .134466910810617380523054118905582492958565023463021452941374, .310866479076898911225957190959103107122726309880251864633871e-1
+1, .167025078067112021330383700915334398155807417698089645880550, .339846844366491727015831529132814971519220350037597377054065e-1
+1, .202342383959958362972985153053506390167008836083996260885468, .366011116370094237665660163683302755703567675152933789583005e-1
+1, .240126176968899168224233356644343461834757430322230436354570, .389142495667555765517958081287375656258894801188233961569836e-1
+1, .280063367934141498619920448961437084383941547739564838389199, .409049311679239166350412703003186393596330568796880286524887e-1
+1, .321823024217272962138223573821321852537437398947445209686044, .425566612186630201335497244196117927574529375428422479678266e-1
+1, .365059111809139604052866719920311919387902362608746804048608, .438557530795359777556558431013673986705871515403973568374979e-1
+1, .409413362617199166774126215294713657944668222014445457357706, .447914421368584543559017623657837996409186703856777680930512e-1
+1, .454518243151649794425565722947147458582269585634229763498607, .453559750184112464696983213299413901162595484399857563928911e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .455446738492448554755479201796551238438870625054586737678493e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D69.IM b/cubature/GAUSSLOBATTO1D69.IM
new file mode 100755
index 0000000..4f18217
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D69.IM
@@ -0,0 +1,26 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(69)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=18
+1, 0., .793650793650793650793650793650793650793650793650793650793651e-3
+1, .2910262263438036033418083930016017978697200118873722266266e-2, .488308713551173186068197505568001358889904526372869520376468e-2
+1, .9733824358735135986892640164582302713303219788080891315464e-2, .875429566108385480037077642284003333050015473635308033164494e-2
+1, .20395442065632356939313386116936524790324072357995374042014e-1, .125549307453474245519737490250783875872235712197166623250851e-1
+1, .34810838008530419599875592761124610874360300839405945820132e-1, .162570232140524380592648535184820737764405304850221383313933e-1
+1, .52867044007191820314993176627321115392089361679794841924464e-1, .198318117525624802951900726667762083718433273400473697209981e-1
+1, .74422703298728953822420104511484276456910166162264267565490e-1, .232513653414937702601272990267223869395597034613376885362591e-1
+1, .99309097767714263389391704083877625718872826487498934943138e-1, .264889354353736331377522293809022724879669836489589776537206e-1
+1, .127331450614135488101355047487408147117068961646321803975988, .295191889104587415204374628198706377636677995231865483727515e-1
+1, .158270445424977000122764255726222916704219486323032481533208, .323184121860376358427482013606513916447380526763649098350317e-1
+1, .191883940698043839752754292146172045583056063593365128816039, .348646986284197123716085630445704664352838446313057666860635e-1
+1, .227908864129792343626431528987788870313750002643692608967694, .371381206577376983820166235668961465059230899568548703854584e-1
+1, .266063271145964972492480231988126047812637791897896516584092, .391208859770901871938560251781583361519925641612042444592820e-1
+1, .306048551316981878523298391397129546995201884414105118313356, .407974769419896962821227049754784192651310483704030218406824e-1
+1, .347551765291472805579005496065106911951921308541679211086520, .421547720652459280285283858365322723772809283247874741840979e-1
+1, .390248093915365719377571028403133535052556024564951394134733, .431821487402531978593684316966103586488499515380791027116605e-1
+1, .433803380348669484369373278891413728541394707882927734652768, .438715663932548929200277230895178469054127656824208582404844e-1
+1, .477876745274274830774021756624438303958961828133688588770673, .442176294204361829831312725415819545684929881865679138449443e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D7.IM b/cubature/GAUSSLOBATTO1D7.IM
new file mode 100755
index 0000000..409c153
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D7.IM
@@ -0,0 +1,11 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(7)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=3
+1, 0., .500000000000000000000000000000000000000000000000000000000000e-1
+1, .172673164646011428100853771876570822215395958802287721242340, .272222222222222222222222222222222222222222222222222222222225
+1, .500000000000000000000000000000000000000000000000000000000000, .355555555555555555555555555555555555555555555555555555555556
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D71.IM b/cubature/GAUSSLOBATTO1D71.IM
new file mode 100755
index 0000000..49b1f26
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D71.IM
@@ -0,0 +1,27 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(71)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=19
+1, 0., .750750750750750750750750750750750750750750750750750750750751e-3
+1, .2753095273369076010742070348359939567448410911312801353118e-2, .461962162142096482774166633320405376888802403593125107321741e-2
+1, .9209292506511457976729777087081985291983325629290107688716e-2, .828401173104043057169271897734258663476045961746306756436948e-2
+1, .19300132996575956947301154097457405819670689235117825159184e-1, .118851222907757293472040211516973986052094780752975656013303e-1
+1, .32950117265147502935369567669643190827705436232336628938924e-1, .153979717043490422056076317167922455465039488681966810851777e-1
+1, .50058045511696474685489482907425127451447953397224432851234e-1, .187967531019584140098309063752635545024834937048636476937495e-1
+1, .70497216476742737750762768230428896941080242440662451668978e-1, .220563471084378319907626822802762923559860667660349606216961e-1
+1, .94116290708172458169211497301771045287426582300754362233902e-1, .251526341575207784749339086468759584202910043426844423098187e-1
+1, .120740394213215812205430008669331514972976836798828705585242, .280626953869378149435557560171625979334238713050452231282928e-1
+1, .150172408133835283924832685405240126685185244066953380812414, .307649878582428043167937224515648197594485134033195182525530e-1
+1, .182194426326782976013396594854508462565244515096779315437449, .332395057673486681997113855197759367589182420064875343490071e-1
+1, .216569367910650161528799833416366292983136252138266813789868, .354679291822268218785377179041780157719796883665082742033669e-1
+1, .253042732183289583642855762248173702748307319210456832236852, .374337599313591186981700876202297681561990129953313440008841e-1
+1, .291344482683084614324358305388751588119814966697386706384052, .391224438644256910819319092274274768922805638566221271204253e-1
+1, .331191046352117640953484019401893955558401744927103383868628, .405214786612518585566203757953189981873771099833461737625402e-1
+1, .372287412959601623929832670394218532357811675549771077107922, .416205064228958719707311333886249199288574939242016733153076e-1
+1, .414329319223137300799687475331981199105575951244845549885448, .424113903731039686039882519228623735297451578748724688811220e-1
+1, .457005501447772370230567595674369092886199478197784716638774, .428882751085496931999795228396106032363111106613901909592304e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .430476299548074927429117021620832985211720189240783140477588e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D73.IM b/cubature/GAUSSLOBATTO1D73.IM
new file mode 100755
index 0000000..7fa2d8f
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D73.IM
@@ -0,0 +1,27 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(73)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=19
+1, 0., .711237553342816500711237553342816500711237553342816500711238e-3
+1, .2608321602273843335682434654308642805711202419883345051393e-2, .437690699718011292580664543220992641961983349871801590003985e-2
+1, .8726007400734720049957768692287090332934249739031102007354e-2, .785056067815019268453101514748901462089063154074286213765808e-2
+1, .18290574928219560458573804260516166505966955555603966537207e-1, .112673034372094373644086568864959581288239852275844270395265e-1
+1, .31234186930090166165121232872343448903711115800127072096404e-1, .146047604752108619107181334118267363523320008969872893735867e-1
+1, .47465920601384722820054806549674941760584059440318976198389e-1, .178397123430710996917821485323834374131961274977017813443325e-1
+1, .66871883987164071189210144011381067091431592345928968291050e-1, .209495098582465777635993793733058832727942239535884327065540e-1
+1, .89315944019256369138657623668503937163177948821325011648322e-1, .239123526440978065167627104612377349940458689807127537739014e-1
+1, .114640665470153583641692978533602374667893032282580839879376, .267074631860305855960212314896712047579788533974395626002549e-1
+1, .142668410484809640230488909869050993735231580747518210181001, .293152378141241349251990801137479828123147029674364892389174e-1
+1, .173202582860545391541502615529286763719552873451084549011282, .317173858319337830235362216058266898190938725415925925338490e-1
+1, .206029006314732900193884400875800446590353220388103554854687, .338970584012213865510663825239780093164935838892759172704958e-1
+1, .240917426449731721129636773862544636549708086226151683105326, .358389669649849827539368166526360655869871685824625862281790e-1
+1, .277623125658578283348343721017738168820417341855926569901285, .375294905936182194186344920682786594213547331495136353758906e-1
+1, .315888639555976428671096448459971068785799657056522694420342, .389567715781288160056716974399325093717182865143180156347069e-1
+1, .355445562856707514549454966095217202169370740546777937201686, .401107986302569930162663002391367862095252588878384692934291e-1
+1, .396016432016520100089038831098205508434369854769743658372764, .409834771189178238746970558147719230359834204672370861137515e-1
+1, .437316671421115688108552498160873648447587145766483966595122, .415686858562733071136472292986064994352905945183887508384734e-1
+1, .479056589467324023299999775496620818256871272473649654365525, .418623200380010623630035659551221625308456159346748477542835e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D75.IM b/cubature/GAUSSLOBATTO1D75.IM
new file mode 100755
index 0000000..fca7649
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D75.IM
@@ -0,0 +1,28 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(75)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=20
+1, 0., .674763832658569500674763832658569500674763832658569500674764e-3
+1, .2474671939260811542137295113705395134066287839253699393802e-2, .415282100389414842533133553674543297575667173333479473350405e-2
+1, .8279758748572888468848376604720459248569327951463213965681e-2, .745020102935311147595569533790023601935687748851348322354683e-2
+1, .17358061461761768171094844587058409763652272384554288099996e-1, .106962511356081793126797089540327294765655481009771727447285e-1
+1, .29648455302341282854810553401876401967984974786668087180352e-1, .138708788501034683662380554243887296961986287335431823088522e-1
+1, .45069023909857413589394245589152558699192531268635768124764e-1, .169531381606039673492162441926212127639853422961031923164673e-1
+1, .63517109910206074247529349969909576359220813487812262076366e-1, .199225566687833597047707026407630048627224063007593890467696e-1
+1, .84869930896453696428493468270672174746547108837579277852419e-1, .227593853493817302025289049747413538164726606156940802891888e-1
+1, .108985381425265534984926200175023863387742285447656840457308, .254447500300617393753097899963225312486866366336065690391906e-1
+1, .135702974188435128515732018898313732338544426723077710815164, .279607819686537185308900745661888277758121981222774589368437e-1
+1, .164844906396823281549240427978294315385348274172430176515262, .302907383058943499093700880337783553112868356709053115151542e-1
+1, .196217242352351797408545160784277320208117412125283658686064, .324191140445195960568110228537024886636107617800441517318941e-1
+1, .229611203747460901033086994238231443702475031433065662788578, .343317454605052301413905402996946258952240239752760282072585e-1
+1, .264804558895472165051505187349916869383473762682393052448354, .360159044626196058603185211303661740979143942696485887578321e-1
+1, .301563101563286226315779355702508764512398955389329586976268, .374603833452485796339564885106846083559717221511240616917709e-1
+1, .339642209528680822206472645596221824271625464666499565108960, .386555693992635459993251919707716264426262127047399614517638e-1
+1, .378788472473218907575862490258835889879031167426649015591834, .395935088967509506425626401129432579271462773600511057427328e-1
+1, .418741378368887968483734545868272874341887355749927687547049, .402679600294562920534157470218518110753803986707646858486821e-1
+1, .459235047131336271935517137416529639891425829075643517052436, .406744344513880729574169210070273927789585328764928572467844e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .408102271505035690036751272056340626312982133666937862905988e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D77.IM b/cubature/GAUSSLOBATTO1D77.IM
new file mode 100755
index 0000000..3287fcd
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D77.IM
@@ -0,0 +1,28 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(77)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=20
+1, 0., .641025641025641025641025641025641025641025641025641025641026e-3
+1, .2351035377825551547868980101655862569431121021490587875082e-2, .394550579430030688064753129730538967071597577151678986664851e-2
+1, .7866859641248322632982368489917567413608918146165105351113e-2, .707965377495988657565025801337258016667944812810978551644365e-2
+1, .16494961756005739676181357795382343700656087271315759411190e-1, .101673795316935809257051641262809808307899382273275286214425e-1
+1, .28180117528199178712896564389647326715468277464927353954348e-1, .131905953265707431312740376768836759249327315039797786194638e-1
+1, .42848330154895274463666595980207731546854786833590610054830e-1, .161303589635586977463123344950758998579924523453430828883091e-1
+1, .60406828260330081054968332055202532354691291407053742588474e-1, .189681218503542234963422781935358456174670946679024920853055e-1
+1, .80744588610946779632174610221610852688966904910687409476240e-1, .216859540973789905044370193542954416668111264246864104334783e-1
+1, .103733023699224056594460409438245380868042220723502733729898, .242666769229571625692708629514366902780879230022329137390326e-1
+1, .129226790426307791254199087282338054277477201363034268339852, .266939759857470914774749951652698352261230467959413673134030e-1
+1, .157064707457843143086567573057614297040209400600348038353923, .289525059908930417016206131374094123367832368232881274258743e-1
+1, .187070773622371243300077767573329245592555964531832725751762, .310279882378547624851133290290010165062938791710666836585661e-1
+1, .219055280352638675614802942523234645068087817168438464186374, .329073011114479513315871810868054604810008363637150161901813e-1
+1, .252816010937373196673324405450707371582160483296961781186646, .345785631380405672279939641982813028139398626108521901651821e-1
+1, .288139518922224507624830845354098223522267668366030927830731, .360312081510271476102923208703382114752802893420972207218481e-1
+1, .324802477542909561009806022173167826166599175502610163779238, .372560521176946692893122992991291496452356004983651116125272e-1
+1, .362573091642837816741192576550944601169348978124418288528204, .382453512166982531275880973755442590143451874227990878652014e-1
+1, .401212563140544614078186948095178532102996863100951644190122, .389928508043402903635499956985507337103926157571962987918124e-1
+1, .440476600777514453241327450849009005346070957463233614866164, .394938249626821720946121126148036473285527343334908855792049e-1
+1, .480116964598909049926317028960270740396467356619038601123016, .397451063807748204355745797756548264229349951716399335845339e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D79.IM b/cubature/GAUSSLOBATTO1D79.IM
new file mode 100755
index 0000000..d002752
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D79.IM
@@ -0,0 +1,29 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(79)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=21
+1, 0., .609756097560975609756097560975609756097560975609756097560976e-3
+1, .2236436277357819255995320113922661750681005260622960018399e-2, .375332938142579426457515630008223393629554752298367693219890e-2
+1, .7484070437637611873046971503870244441006388081147680077264e-2, .673603554723530330878458015686946579273772564206311776003950e-2
+1, .15694565216159084967031730429579535282488221351581985153941e-1, .967664928312583995295180796355001886153343715293863720648751e-2
+1, .26817900176253939399732987826159198387431708961290634060214e-1, .125588491968005432561293633017565885251867555092998440832597e-1
+1, .40787064651048093400070908115362253048510712552267279574016e-1, .153654645489612292839923989483105431296422566529253867415263e-1
+1, .57518013915192438609832217066614927391115550854073240102780e-1, .180796517223447562552530537238077041669192649027479936596727e-1
+1, .76910113948004078890614438028834303395034786139966002270368e-1, .206850980777863203789367903535388282408169024806531173030973e-1
+1, .98846733020954109291896186970382098467806113203742902288688e-1, .231661381743258072398053185315871682141024436203884639325314e-1
+1, .123195939056524317542550188405951390092253447850209345848742, .255078524739932567287635101471641207150273260581957319081162e-1
+1, .149811291609658521102303381165514169168370930624996196319688, .276961584594571552696229330277973698993301253260051864319867e-1
+1, .178532721967707288561505573451967502920668505541506264855076, .297178958317718278723954553146968952248527965648634527771220e-1
+1, .209187495542393655987201121567238746060388622971813945874570, .315609058637748977076148623708337298289786395299507632372531e-1
+1, .241591250576435341511237624892102967642903586906037821149154, .332141046164213530218620252758263084509885206249044563766775e-1
+1, .275549106842585750520185874219273932886731673368652712476916, .346675496435474475625063482580372929024542430434576146668709e-1
+1, .310856837634458397670191064976821026038444343626653415856440, .359124998098819852331497146160352863532301803183690468837452e-1
+1, .347302097985277128937594513154519289827657968801273662582600, .369414678736948031845461928001725814938508599187136851071216e-1
+1, .384665701720234870575461807683108028756410451543451388860425, .377482655229589863952898204502061639157676618865547536274055e-1
+1, .422722939658079999731179114483697361774071788000960700963668, .383280405966587352989169325407892726243114276809848207213996e-1
+1, .461244931031872862203044976533880894441059851041339288105890, .386773062686527742684602733321455023957771112196016582182922e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .387939620192404158133747300516346311441984267150560069804317e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D81.IM b/cubature/GAUSSLOBATTO1D81.IM
new file mode 100755
index 0000000..ae843cc
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D81.IM
@@ -0,0 +1,29 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(81)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=21
+1, 0., .580720092915214866434378629500580720092915214866434378629501e-3
+1, .2130014973241862403239154440835813787644494178213878053286e-2, .357485348623332367781372287977056989778815825498933580629272e-2
+1, .7128535246650194555784006861283334909392173178521725268806e-2, .641680277915691233602508120907591529518767736991316833296508e-2
+1, .14950951686121191441143395521812901330719792478110478376354e-1, .922049152233308741726234475016060068690524021342923635222162e-2
+1, .25551847277282754202423014877782890230032191433247511485110e-1, .119711592053952617902178034733779544224798761994888058113815e-1
+1, .38870392870691911584906209221833526216612228185663883537856e-1, .146532056080828509352077630837136223798150304924465777209278e-1
+1, .54830270081004241996044481482895212669203933482674646244014e-1, .172513021995584454253504455300300096158935790504141365584831e-1
+1, .73340050639674828418766379677625862508500921465488178466378e-1, .197505776008757505296596443388991266342808420396691356421340e-1
+1, .94293707103288929389996240196133534098436668931885676268099e-1, .221367200151445862405958631765407587854833553819429240042540e-1
+1, .117571216286762424687877775674816296658247895164946320590636, .243960634801903661581675555033133185054703146165089564227029e-1
+1, .143039245342599228759883512176782992749382700139216588529016, .265156674690784643109565252536619642591390066931226457576378e-1
+1, .170551914898702236871038389766852360653699237594383973693557, .284833914918951335223793176492375529113321734073247607678646e-1
+1, .199951634375680407019134993778783317835812498562421458993998, .302879648312720439303585406967718794279416711145883105145136e-1
+1, .231070004518703353820149648212890407998798182980035504483978, .319190511878982742660790191824769898212221916197320513345725e-1
+1, .263728781902576208602402687512353346042130310013826254467490, .333673079284013231910715227040492709323475291349523632786586e-1
+1, .297740899854232116046606736231242045882872992662246190563204, .346244396209694768203703137820464169359230276938331274431343e-1
+1, .332911539930270323590711140184264293773583929551131664381795, .356832455626750371811882456503049745891805137209323822660773e-1
+1, .369039247804924867330237544680827353338139453153223577505676, .365376610311358305181098396854171362329442288657952001328421e-1
+1, .405917087172924293723636992388996537878487397742960973716033, .371827920265964104007460433048151546485715759771508291106438e-1
+1, .443333825055672951681777059724035616647711785074387826137402, .376149433066355845973999979516174367243841247437328515965734e-1
+1, .481075141720198188743167716094101722738382944261647317152307, .378316395535566218846060315652187665736169681656481289776894e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D83.IM b/cubature/GAUSSLOBATTO1D83.IM
new file mode 100755
index 0000000..52accec
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D83.IM
@@ -0,0 +1,30 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(83)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=22
+1, 0., .553709856035437430786267995570321151716500553709856035437431e-3
+1, .2031011621110680190392559512741142391656960744073378061596e-2, .340880659903645093182071710398386069695757086678081275701077e-2
+1, .6797728682012419172860861462002553424688243897162482032428e-2, .611970483206979935161736808753590906439741429005782490540155e-2
+1, .14258882476158002581027032623438363707269088742218870040269e-1, .879574383413396429056736013998988404807721570838658989636717e-2
+1, .24373140336313281632608513266114346659159621646596595335226e-1, .114235462795142869735079011168031625191558076312263083793359e-1
+1, .37085158573451160872183336632899866315092365958436207533726e-1, .139889081288056788114695954694571204051388612751204518545775e-1
+1, .52325479043522137813684963889143416107135619776185915708824e-1, .164778506637712590421481699578470661279081842441323601343604e-1
+1, .70010853408122301541834334636505946959122648369207887158126e-1, .188767899442060750040635738959656478885411877854076636335674e-1
+1, .90044685430522411089807348432090188682159741452396070712702e-1, .211726274419210792651271587235558989479863748011318654694840e-1
+1, .112317554850322960930066048976142785364354801913595721304040, .233528256564494667799617757658386566275912798617341935930806e-1
+1, .136707813662189288650372633984387123416009224280756405458106, .254054778516898017394303128133876051260929354486413575964850e-1
+1, .163082249961771942101817377534845869083769831872825338411290, .273193735434767179020446199872927753653911758556328695029297e-1
+1, .191296815249017688466086224404338721195305110886988039895498, .290840599140433387120145642072012149683695633248674203901569e-1
+1, .221197411044723034711488888159126525528410946124673881118302, .306898989854110637510360869004425385522575459364285488106104e-1
+1, .252620730455767241399713577441113986903760494705917203065746, .321281202991736017438291825941555514048550420394475095924870e-1
+1, .285395150062953388744398357156598864664713238410587718351984, .333908688385343362579844156371097319692639460331972473015586e-1
+1, .319341667246347227621198552852784979905407759187622471406986, .344712479409720433085095401031806254183302056739295970905483e-1
+1, .354274877821827260539138397910631370449004197599020952639581, .353633569718021368352582136329218013749993186232232080667093e-1
+1, .390003988645686467867795968806079954179633942162686028109754, .360623235551306315500769505178629849308248296454074162957819e-1
+1, .426333859654779673291965960798544879991118202377498742372342, .365643301873181549007084566917425595912755026244036288622497e-1
+1, .463066069649794077389994303412493857514440710577161634104420, .368666350882108868285682432790438585451312062271539892581568e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .369675871765875771789390507582224505514766630069733929251986e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D85.IM b/cubature/GAUSSLOBATTO1D85.IM
new file mode 100755
index 0000000..ed7e88f
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D85.IM
@@ -0,0 +1,30 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(85)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=22
+1, 0., .528541226215644820295983086680761099365750528541226215644820e-3
+1, .1938752606604335046167493578932337702048977365458123199234e-2, .325406131073805581052964560002151091936796397760560542290230e-2
+1, .6489411035083400924898417091765610026574951624640195471259e-2, .584274448545860725911986776200257517397905868261829574973056e-2
+1, .13613708495944829588640207496012029306254151753444943838038e-1, .839959613496088728697088770095108635249415456410948809155864e-2
+1, .23273946308461230136293433098194745050295489068991639758520e-1, .109124679285766319964744794545246164230982147293061541268449e-1
+1, .35419662057923250309681161404230553337213978612363590702842e-1, .133684002700582083047141407508858976698018035098179005775827e-1
+1, .49987505451089976888429156111125749022151388346679644876448e-1, .157546199835975296589024822626144732693529553605439121196326e-1
+1, .66901516011532147629508551269220636477015549120096605061866e-1, .180586957763399529284792612825609597283356769373870920040996e-1
+1, .86073507290187419679502483895045626480636931666703407965942e-1, .202686187426964956456875050058338980169070149400352730364361e-1
+1, .107403523097560355770242630882954245728188255780104018956813, .223728688631270810618679099502651424273240663999173282440800e-1
+1, .130780357353570756657766972608598916401467243395506293390922, .243604762676462647921192255356368928364360572428638073493328e-1
+1, .156082133336727909811009468320680532954177299840481425744770, .262210788637971863337049910181526034693152624649500167685630e-1
+1, .183176938850735564238113240202313474280649635257397387397866, .279449765379130781136963292649945786567330160913466510661933e-1
+1, .211923513833067574621014274811208964586284433470499464760845, .295231818068887946354687913769264953510704524725620278221758e-1
+1, .242171986755442531710957558754110835888623482126684600970071, .309474667133806346157276735089591438328055557047757724285698e-1
+1, .273764655948580910305133994603280968972205676289697930558884, .322104057424413142524707743253055683814265969471296647918043e-1
+1, .306536811764494607352006062472777275406252337182228312825138, .333054145454872679023658294238724360222983757296364044292226e-1
+1, .340317595283317646953383547612769205815505430839315665444694, .342267842741378236904551900034422559043516221351680869309297e-1
+1, .374930889084302549773033992698954690686487826347629184460340, .349697113470796273402538957717757371033503502637196706520095e-1
+1, .410196235435001879831163897481272113126697025047343649504726, .355303224958656979096712265105608516141572741190089806874846e-1
+1, .445929777110521717543722097092571088022364607084626977972015, .359056949596564966222120314835550887825415289023120800972788e-1
+1, .481945215937189225092677887462567354114329138931406538911954, .360938717239367190188118789204774269654872482744545843139420e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D87.IM b/cubature/GAUSSLOBATTO1D87.IM
new file mode 100755
index 0000000..1bc2230
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D87.IM
@@ -0,0 +1,31 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(87)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=23
+1, 0., .505050505050505050505050505050505050505050505050505050505050e-3
+1, .1852639065455764190223453663763580301185435400182929169937e-2, .310961515787432974926375820127318877648810171429281677395492e-2
+1, .6201590379346714488154038902104145162567115445360380515052e-2, .558414449829248193413710066299480050503461330708794420073933e-2
+1, .13011292496514063775196935983592104609650554419785656267509e-1, .802954474791866068605392063406602081754682060314855922356481e-2
+1, .22247288695948450216849336671970590685593243732876885106227e-1, .104347623581986327316161011835775330877632260697982469263383e-1
+1, .33863471697232096926713470693209784926007991302622093478801e-1, .127879497090759854985328597668951137560190682506952897685396e-1
+1, .47801943367846714306057349925055704987107775447765500492788e-1, .150774128767679695976959993110117974724369167916837313700534e-1
+1, .63993252928775869825725395835390457175210749255919148797184e-1, .172917548039949113358684816293553622705039312581748128389252e-1
+1, .82356731670004411363065543782943264728088628377164042577679e-1, .194199470731552237632447597287493533590732641989278346460412e-1
+1, .102800891464849473929190557875770339463192974875552509630689, .214513885655687538529240880154259265107544557201334307731317e-1
+1, .125223879340968043831679393544553217169043565098228582459325, .233759594253490311906255844163923333457112384844821988153685e-1
+1, .149513984402646864874221564519874112121450854921711089267499, .251840718926238709268533577769428245051046814229671455528944e-1
+1, .175550194137607570404087040235198308104283161370778817473149, .268667182393854135437130865949649076423130267617822086038248e-1
+1, .203202797180182832379556883427623811773544514767132445531750, .284155157218153210197636065045344644251179751436108730133243e-1
+1, .232334029465653996780528686199510939845112947729663769074386, .298227483795771067916945672592901135801661267075820011176314e-1
+1, .262798760529552091224104320842602921456984428140690072720684, .310814054953220582226340970770093522368947186657767135047418e-1
+1, .294445216520128400157085338077508729959554064927808280838928, .321852165320173305045609651424045569886042604513420772792919e-1
+1, .327115736315665345759113052917725641358487343786950581389517, .331286823782698736420682032094344685704043079964933954018274e-1
+1, .360647556976372941605782910022285799849032506892368678946444, .339071027480413053385913127901461962909674926928323532950564e-1
+1, .394873624615965762131787389890078745661613761220956458243648, .345165995993011310138391519335070386770370978239941172380772e-1
+1, .429623426652153295605953252359258561971949741015104953032242, .349541364555074403315048872807305216513462691363339662266838e-1
+1, .464723841289188086736482114576454458645094916136012422177589, .352175335339640217687071570684412719998122987562225824461046e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .353054786058572830112038066156046969607901153679001706076314e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D89.IM b/cubature/GAUSSLOBATTO1D89.IM
new file mode 100755
index 0000000..994a10c
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D89.IM
@@ -0,0 +1,31 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(89)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=23
+1, 0., .483091787439613526570048309178743961352657004830917874396135e-3
+1, .1772137147592048723585683258751486256219796009078414059292e-2, .297457437272017910788031218577733513965939565925192898913483e-2
+1, .5932490408894802889920640390165570705567443672804413980450e-2, .534231920006649280428341342793611089416546889464720497296071e-2
+1, .12447943001596602498561306500387750910433119182741698223195e-1, .768335329026155829039388130308936607472284565385753407485793e-2
+1, .21286937844302621429841468862969128897309715593356083801892e-1, .998760070080439136484642016165300425755691021533898777649254e-2
+1, .32407263196693067623143405815308738758224316737423731348758e-1, .122442098083296887217891440021187295513584393116453498360141e-1
+1, .45755899930062439594689120156188783517640147596749431178682e-1, .144424550896520150667362001566922186671363092373722348380670e-1
+1, .61269226137982310458311710275787091294923892846644258173520e-1, .165718694467928916813457728779945714870656963935785161361960e-1
+1, .78873309531678610326550083843385364085069279296301590669407e-1, .186223084271987725154747573710696175531991995596359426271837e-1
+1, .98484256535526884945721196234562396150246847748431331828162e-1, .205840021206053335200389139739259640350134595535374144570746e-1
+1, .120008610913335660957144321375699769878137864336430405149836, .224476028164542332533854847267585043542742108925156628288603e-1
+1, .143343798647944004108521350915435200171121770545193835902494, .242042299483425676999670730676884861487223218749938366655599e-1
+1, .168378616532068938026929459819304728980935763039599873261850, .258455125766098410835265926678504150179145890802105615146886e-1
+1, .194993761992253283074712573881451220989363090759950168844740, .273636293525995089110693718355153146499664040978579311961439e-1
+1, .223062401561519866716749865606971408079223164179217380201352, .287513458262062702382921970999086881022390445904353956096245e-1
+1, .252450775265802380138480110825989297251448090364159274784968, .300020489394682165354164998743990765039178017887355476018993e-1
+1, .283018834031850446122376722380670642446294623817986074297069, .311097785506338185088408185323738216544398284960539937993630e-1
+1, .314620907073032286403970731443035815155051217465660378097052, .320692558425211851752476745264673022400211487598274066068827e-1
+1, .347106396069469512394744290200390543078886295041882626222762, .328759084817583729287434872817473756520078141179069966129754e-1
+1, .380320492832679197981032635321399011478355128849903032238425, .335258924100151746024136576714821003912300893690846151336898e-1
+1, .414104917033727989605054416562223372487705177730327520632875, .340161101639171675407431075991762382586363830590580272338941e-1
+1, .448298670478694064741356563842938051788403127350474487877666, .343442256366347234235488694442734811702735848565179247913248e-1
+1, .482738804336601950819712944730684398282065328179462360972591, .345086752109679834994463019029235342351263980761995861963242e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D9.IM b/cubature/GAUSSLOBATTO1D9.IM
new file mode 100755
index 0000000..9e7f649
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D9.IM
@@ -0,0 +1,11 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(9)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=3
+1, 0., .333333333333333333333333333333333333333333333333333333333333e-1
+1, .117472338035267653574498513020330924817132155731947880336209, .189237478148923490158306404106012326238162346948625830327198
+1, .357384241759677451842924502979560464040498263636787304090125, .277429188517743176508360262560654340428504319718040836339474
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D91.IM b/cubature/GAUSSLOBATTO1D91.IM
new file mode 100755
index 0000000..a738a40
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D91.IM
@@ -0,0 +1,32 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(91)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=24
+1, 0., .462534690101757631822386679000925069380203515263644773358002e-3
+1, .1696769728939655449898193064058979113147692941686231949592e-2, .284814004579613276904969787788933959722288779113844221512666e-2
+1, .5680523040958664339276124068956443398270611517275247834068e-2, .511585026628736256296323122679567152040184987392116500015580e-2
+1, .11920357965141415004920015886274028407356967311186933337004e-1, .735901924619743094040248778267157455436635719545670489519940e-2
+1, .20387317246501714903152477743559299031618034064997393291782e-1, .956844605254190108414427001338055507383620620665770445170308e-2
+1, .31042682030677588381984236606523485573155786913270218674872e-1, .117341732314406645340203242277662575805019410755781455926038e-1
+1, .43837809720681058791117594863264983503192358905592071760196e-1, .138463461058774436790338982838289879331934342345625571790049e-1
+1, .58714309922328037835366887425420773274979254396278832136762e-1, .158953354913401888098186244414653161342367497068342973313697e-1
+1, .75604300535408071087346394823240292931186801120282029204392e-1, .178717953593316583099411475939818348359765799964522893060309e-1
+1, .94430714396705480613101912543060593613934938302335376481836e-1, .197667088832067336257586076723582217440375205147855088821752e-1
+1, .115107649804958993134266364754029423854603211924582555467658, .215714306321770436514247155190267657065057329026814142941225e-1
+1, .137540762009425744934813344270391320004938750696659919781565, .232777263997014167475125693709443434154662959182885045208739e-1
+1, .161627693471821438412452406637291737170680054118718598939691, .248778109299393523214602881081278937736420435843877180137207e-1
+1, .187258540795076704124066966585725110260153017141681322452120, .263643835098714713670670080197867641797551486922248888113491e-1
+1, .214316356131434762642242093446086310969405123979614399906438, .277306613145176420475212409499902425398412185383995898076844e-1
+1, .242677680757295432130537908025927953958438563483072474263968, .289704103727715975699676023441150745970196876900695087671035e-1
+1, .272213108368622852835807177769872742856328209628737769287290, .300779740209915151361730092286051071671859910887328499249488e-1
+1, .302787875520952849390571135095282993987655003166877396397740, .310482987183895435468513436537075718446673443064696469155710e-1
+1, .334262476516927449161461084304161739690048959301202007492872, .318769571083136363357987384644647672036229304435256571924040e-1
+1, .366493299934102232426005454625987412623387753218658415485594, .325601682211610430002823178134310228509294105003021060728896e-1
+1, .399333283887744948154017674237221151370745498675328191319840, .330948147272555844853125102605252459699147682072027280152169e-1
+1, .432632587038246536725681008255847904682336281381798396724198, .334784571612513733206425986460781389785265679093853557693488e-1
+1, .466239272281142725079033433812637613533109893369804594978188, .337093450533211611767721608787997709570411889297429585857465e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .337864249164326906925184418865172135454558834537257424632842e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D93.IM b/cubature/GAUSSLOBATTO1D93.IM
new file mode 100755
index 0000000..114138f
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D93.IM
@@ -0,0 +1,32 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(93)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=24
+1, 0., .443262411347517730496453900709219858156028368794326241134752e-3
+1, .1626109330071267797692072373150016091366800561742908280450e-2, .272959630012405961009479858389372425873586410364006061356753e-2
+1, .5444264993182136054224912442190918077150018274740761981822e-2, .490346598945016402657017219271948547391488206177544494332458e-2
+1, .11425576554581613560070007104095043923383495161694568027564e-1, .705474530274435661850367771325717272284392764292385689623821e-2
+1, .19543423246809204947244124334471781785790146137279068055338e-1, .917501823760954073425201590173472527425514147949208103637512e-2
+1, .29762225332459352400338559594286690381964618830439084104138e-1, .112551318684680422493836155239295800950732403333716346081554e-1
+1, .42037275011876789961233097281756528387856659972859651313942e-1, .132860162954556585611528552193808956139629660259863010569099e-1
+1, .56314887840889951402168458167605467458447478538783387727340e-1, .152587988106518212647424126912057746209904343951026089276239e-1
+1, .72532627580612964865258133078257278641958388279673463454464e-1, .171648558503369184900919708965030603617275212931346605194058e-1
+1, .90619576257197065651154095149458433347381527009430248381667e-1, .189958539633640782628430487539298225760459551428038748231570e-1
+1, .110496643200078089014710348324297512252557573502229674823132, .207437872594236455622705693211860630268345858752098807296161e-1
+1, .132076910443575815618797992735766123078165725128757937730684, .224010127820358052401764957597527850306045091246694393282729e-1
+1, .155266012594454644813548785923602037587381614888049006750448, .239602840783677503303225882899489732715839746227535504882171e-1
+1, .179962549367021431085899757304374861658556892978888520748500, .254147829529723486272190054073984326908260875395145040256082e-1
+1, .206058528927257409486881345156247996361595481134201621748840, .267581493143374656127129209960036507222492460567042414744269e-1
+1, .233439840083611519447607871358310327558895347186810952589156, .279845090025744177913604329779925150998710474985794923503074e-1
+1, .261986751248571460989158039946768179130510664304968826927674, .290884994846373158289330197596056995846896164932903719828291e-1
+1, .291574433983648665043461141450612493361955039487285558319691, .300652933084220115254355592692242133584800401702743643364172e-1
+1, .322073508835546978089045865326849964674751818553522541760306, .309106192149896834036141040942375738842042880302092994269709e-1
+1, .353350611075120367320458598110245687961630200859749624162232, .316207808175189928311301691370251854104006948477846225003503e-1
+1, .385268973864377714836997239192243185696629610112453147371659, .321926727658005882664811970026114708507434548194771017260133e-1
+1, .417689026300954686261069853020323979637339482473438599424843, .326237943258629117880384094278807875687447482603815798217729e-1
+1, .450469003724624943826487252830972982282971600685253570373713, .329122603155040085475607753462479983419325383469304048838413e-1
+1, .483465567616923544454465044416054545545986087120742547936831, .330568093480008970966137318336211903031292036985036578727243e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D95.IM b/cubature/GAUSSLOBATTO1D95.IM
new file mode 100755
index 0000000..7e74abf
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D95.IM
@@ -0,0 +1,33 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(95)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=25
+1, 0., .425170068027210884353741496598639455782312925170068027210884e-3
+1, .1559772044988536141210199773977409150490164680117038911430e-2, .261830014988887259563935863018485139727201813954910838374717e-2
+1, .5222437690384632145835700007457761000616745954765953793651e-2, .470402348142779723919375145510615183114495461477211400827596e-2
+1, .10960937749313992060591848547946117619560209197606326818372e-1, .676891469079090859891470759180269218726816302388615632381805e-2
+1, .18750756003373635024204975860174371618279735385099275038308e-1, .880526340839155315858465234470358141605790272792996492172219e-2
+1, .28559140168400121020356404088932574869892079538856385979010e-1, .108046421204110038526866569722095561785211755077330167485954e-1
+1, .40344927863707754672192318387458150878713119818488522338788e-1, .127586895835683523671063538157555326838948317502226507537428e-1
+1, .54058676986778786457045135493621556127236949910063505098953e-1, .146592173549215013551753638826809264969175747054954011051597e-1
+1, .69642863597605257426513795804140126017182604470282336093928e-1, .164982567528625391083075752875274411495645969658756188201038e-1
+1, .87032120357464631215331146970598491187961615068836065019521e-1, .182680954066883174214759246093200773560561797483369257793217e-1
+1, .106153509678172995431868812078757248993758707847144824492718, .199613105717952217128759102019208283647371242334497862979402e-1
+1, .126926829224110158673616911259136220282679940462584318222687, .215708006135082351065060713625550215437102879770957692810786e-1
+1, .149264948114473522931935601427497057577452017108565047384866, .230898149367786367327616174083112349281637229109600451117080e-1
+1, .173074172283893765679279128772201125810439557547535218830872, .245119823646127035778100772975780875082381128962639955273047e-1
+1, .198254637416616749703024608095569570400397526707818191617897, .258313378919823267626743142974550409864465078204245546242808e-1
+1, .224700727783385993879640200601789693261321020813356290418250, .270423477210676408622586286609668663454708086573523449464831e-1
+1, .252301519213623799799322759771019620267742049910036628943100, .281399324805679234443375248190117769520407570473986746607751e-1
+1, .280941244339629079687101646274462647985909364682983475305240, .291194885352455119748011905728358332667542480719736835590711e-1
+1, .310499778158615563055157713879855576395961236358344908128363, .299769072980525943834928892783058690420517281073192193044490e-1
+1, .340853141874449220197144967634195539263961368183778278754894, .307085924647234634798085568692838455330341607447550569836385e-1
+1, .371874022904926905770183740610334187888700220811836235359886, .313114750990163424470553374507762154874306011523088229860040e-1
+1, .403432308872989645021561828462592204651725234501777358314910, .317830265055933206782757635432555518066692429018412813384681e-1
+1, .435395633341810033507140423637509871973147751685415387120958, .321212688366941661852634921836253118408120512190053953834151e-1
+1, .467629931004550435468020473483192600957162652997563240667649, .323247833882029222779612695198074406430971512077501264269653e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .323927165503618675853585408968432511977275686781704035427405e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D97.IM b/cubature/GAUSSLOBATTO1D97.IM
new file mode 100755
index 0000000..9f831fb
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D97.IM
@@ -0,0 +1,33 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(97)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=25
+1, 0., .408163265306122448979591836734693877551020408163265306122449e-3
+1, .1497412318678206881921358217558194701674587978913997349860e-2, .251367277487082886318422299890915057280669786922133174417333e-2
+1, .5013889970989598988773989337041792253079749347212573348455e-2, .451649334344980104967080915294628614341233753582643594265367e-2
+1, .10524044676640095366345039696956508628589486487249252571917e-1, .650006990610588032825099655424251926419655479744302018600803e-2
+1, .18005259945015693933062775775160758762893203501328082311869e-1, .845732774193188301159757103898438680805373274927166687082510e-2
+1, .27427335659559293115903742940004674265484849501618513860019e-1, .103804947485079967196479167792166315881683003622497783859986e-1
+1, .38752310748623626671513971937442545077317602058313291278024e-1, .122618508590847471574748553952270392106040025094605595382356e-1
+1, .51934575461583683619222842677711603962983025127776567745414e-1, .140938277255301245831251301479793549266149815887303811150183e-1
+1, .66921045911323344516141737824237158935973114976505250116796e-1, .158690513032853193754500903763001784921112453222749569689286e-1
+1, .83651375101771023606481683295151022396208737472067598861524e-1, .175803745446736248147692900469209726464018280448182015174971e-1
+1, .102058194941135765306482920895896074021495385435503873817302, .192209071054988672812292052225222158529342535475864066343762e-1
+1, .122067387102973480469793788671964231463976631150549033693528, .207840434261842463663558942116438500247618335282250363505805e-1
+1, .143598381288177070072785052052548168271866254325871398048060, .222634894672363711152290367718674245084598341754398509483202e-1
+1, .166564479560477592052185913823750859442769030784031712585308, .236532881146183614267571750553987382699615342454941334284665e-1
+1, .190873205399235414583091006568492602750311943799646031952236, .249478431966716880232269772599339848985246013614786729103630e-1
+1, .216426676042164787135531053982202752025924783095344474289128, .261419420332167317077977737047894719696584720102934782778645e-1
+1, .243121996608475627966224314729235699104669572988681730449703, .272307764334653076463357256031863292678284196453193983481533e-1
+1, .270851674410350120362588016904056941148292714904999812755077, .282099620616050705138089800424559163187805788572878068664591e-1
+1, .299504051781800759550391300211777655902213034956096508289519, .290755560937370500804734631635276753169808856958853145216894e-1
+1, .328963755680598078185463754556447943885251037241606456273320, .298240730959167270733516166702495328974062521193160116114718e-1
+1, .359112162252045243988518033879827535926947480619414245659005, .304524990598163955014613888961342696079578112286585397034995e-1
+1, .389827874483471761967173409196401593899713807507542608731809, .309583035397430895091388461375596690765152082711379378157848e-1
+1, .420987211025798548506742691744387048947646596419300489768388, .313394498422840053734287516708961911104140862429346167014762e-1
+1, .452464704213671676119178501855295653052361153467163545972086, .315944032276333166071090952855062433397999678907591436310530e-1
+1, .484133605278688143544033920971533277260372259705714356083484, .317221370896264434221455959768672740100955723332145714659200e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D99.IM b/cubature/GAUSSLOBATTO1D99.IM
new file mode 100755
index 0000000..3b51ff1
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D99.IM
@@ -0,0 +1,34 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(99)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=26
+1, 0., .392156862745098039215686274509803921568627450980392156862745e-3
+1, .1438718440505553000778287765546161339467588801705260798058e-2, .241519198925399992634537536123539989504955183055196160536530e-2
+1, .4817583156244205210783465248650660140408273051598576039058e-2, .433994642071096657562598742170917284213593278170768657069161e-2
+1, .10112733795203954834179361623596764004514441087183314227896e-1, .624689429243356295138283855610665008366026675180669349488784e-2
+1, .17303272262056345232914286622408523502130942017424694956540e-1, .812953461730908564676215112569504982620738298750638378846093e-2
+1, .26361306845552478838602914864690438977775264057745361411459e-1, .998068862226839188348858388036163204477506242318964490823927e-2
+1, .37251772927948219400608199554383702227463848873139480554308e-1, .117932174612492943418359297797194761204775855737874038395979e-1
+1, .49932529658387783709340512574335547200370302127787944783902e-1, .135601157368362000192527643905320668550867029814244088147125e-1
+1, .64354514234396966558659702363730474741074318539767952788773e-1, .152745502365992465022400795734437045110014963677896755022993e-1
+1, .80461929101112867180292180761244532519820592763970367721930e-1, .169298892520024019054491366793985687616972676486817951557901e-1
+1, .98192456877179849949575280519931176690113830577918789149014e-1, .185197291265852075597308729426518934400395687302238187291688e-1
+1, .117477501058215892062348388644163860561404497365725864512901, .200379193533530478706927229476522519852254528423221328019717e-1
+1, .138242451224404284115877756879100162134125677162901970034738, .214785865016768320595928688982810371562439429111377994789793e-1
+1, .160406971604743480130757230809093546030007609921015974706618, .228361569995172596022015255541037053750774267312325756961983e-1
+1, .183885311833304000964812294230758914239579581015037756385945, .241053787250391920478301730187441427385863016397854690678928e-1
+1, .208586638674256880707011897454547229996015224235294465421524, .252813413407355477327850991902774656947952831389594202426744e-1
+1, .234415387422475742967816923929559707793463594623338481285306, .263594952985287598105251130475744401514323151123984298742742e-1
+1, .261271631615326365584482062275156027193435269002417978231028, .273356694455988704330265624279951068279751258604703012739106e-1
+1, .289051469622739700432554628309368562728751697432827094380026, .282060871644186306051759839117850642532525580209101761040391e-1
+1, .317647426618522356642121403022075008484210704251771695938842, .289673809853680093381620882734751266132517504307773513353363e-1
+1, .346948870376954884920913838883342131970142723184144046959478, .296166056158298748594162978980489043886068727334117761634691e-1
+1, .376842439285568544503412205602937848650855659559686989094672, .301512493356009335274362744745266502196236654144761000401301e-1
+1, .407212480917913530917513550945242868886164339873049613007823, .305692437146692533026118545996596983955956967562142611244606e-1
+1, .437941499469383861600073292950993971132836467217719758014642, .308689716158432008820826382862959692917491854041606532010468e-1
+1, .468910610324937954931831239108671291576409502416561969558262, .310492734513196331363829924961362257148189573767670547862835e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .311094516690149988814967979801615857841321187785550094047928e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/Gauss1D1.IM b/cubature/Gauss1D1.IM
new file mode 100755
index 0000000..e2d4057
--- /dev/null
+++ b/cubature/Gauss1D1.IM
@@ -0,0 +1,9 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(1)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=1
+1, .500000000000000000000000000000000000000000000000000000000000, 1.
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D11.IM b/cubature/Gauss1D11.IM
new file mode 100755
index 0000000..cef9a46
--- /dev/null
+++ b/cubature/Gauss1D11.IM
@@ -0,0 +1,11 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(11)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=3
+1, .33765242898423986093849222753002695432617131143855087563725e-1, .856622461895851725201480710863664467634112507420219911993179e-1
+1, .169395306766867743169300202490047326496775717802414964592736, .180380786524069303784916756918858055830760946373372741144878
+1, .380690406958401545684749139159644032290694684929989324909302, .233956967286345523694935171994775497405827802884605267655812
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D13.IM b/cubature/Gauss1D13.IM
new file mode 100755
index 0000000..99de805
--- /dev/null
+++ b/cubature/Gauss1D13.IM
@@ -0,0 +1,12 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(13)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=4
+1, .25446043828620737736905157976074368799614531164691108225616e-1, .647424830844348466353057163395410091642937011299733319885768e-1
+1, .129234407200302780068067613359605796462926176429304869940022, .139852695744638333950733885711889791243462532613299382268506
+1, .297077424311301416546696793961519268326308992950314936806478, .190915025252559472475184887744487566939182541766931367375543
+1, .500000000000000000000000000000000000000000000000000000000000, .208979591836734693877551020408163265306122448979591836734694
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D15.IM b/cubature/Gauss1D15.IM
new file mode 100755
index 0000000..c30eb33
--- /dev/null
+++ b/cubature/Gauss1D15.IM
@@ -0,0 +1,12 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(15)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=4
+1, .19855071751231884158219565715263504785882382849273980864180e-1, .506142681451881295762656771549810950576970455258424785295031e-1
+1, .101666761293186630204223031762084781581414134192017583964915, .111190517226687235272177997213120442215065435025624782362954
+1, .237233795041835507091130475405376825479017878439803571124572, .156853322938943643668981100993300656630164499501367468845132
+1, .408282678752175097530261928819908009666621093543513108841406, .181341891689180991482575224638597806097073019947165270262411
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D17.IM b/cubature/Gauss1D17.IM
new file mode 100755
index 0000000..566022e
--- /dev/null
+++ b/cubature/Gauss1D17.IM
@@ -0,0 +1,13 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(17)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=5
+1, .15919880246186955082211898548163564975297599754037335224988e-1, .406371941807872059859460790552618253378308603912053753555203e-1
+1, .81984446336682102850285105965132561727946640937662001947814e-1, .903240803474287020292360156214564047571689108660202422491541e-1
+1, .193314283649704801345648980329262907607139697529717653563594, .130305348201467731159371434709316424885920102218649975969984
+1, .337873288298095535480730992678331695714021869631513455586476, .156173538520001420034315203292221832799377430630952322777001
+1, .500000000000000000000000000000000000000000000000000000000000, .165119677500629881582262534643487024439405391786344167296548
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D19.IM b/cubature/Gauss1D19.IM
new file mode 100755
index 0000000..df780b4
--- /dev/null
+++ b/cubature/Gauss1D19.IM
@@ -0,0 +1,13 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(19)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=5
+1, .13046735741414139961017993957773973285865026653808940384394e-1, .333356721543440687967844049466658964289324171600790725643390e-1
+1, .67468316655507744633951655788253475736228492517334773739020e-1, .747256745752902965728881698288486662012783198347136839179021e-1
+1, .160295215850487796882836317442563212115352644082595266167592, .109543181257991021997767467114081596229385935261338544940551
+1, .283302302935376404600367028417107918899964081171876751748649, .134633359654998177545613460784734676429879969230441897900290
+1, .425562830509184394557586999435140007691217570289654152146006, .147762112357376435086946497325669164710523358513426800677155
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D21.IM b/cubature/Gauss1D21.IM
new file mode 100755
index 0000000..0b656b4
--- /dev/null
+++ b/cubature/Gauss1D21.IM
@@ -0,0 +1,14 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(21)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=6
+1, .10885670926971503598030999438571304614288795540107792287100e-1, .278342835580868332413768602212742893642578128484490741742171e-1
+1, .56468700115952350462421115348036366684162124387342807516294e-1, .627901847324523123173471496119700500988078956977017503318812e-1
+1, .134923997212975337953291873984423270975178468986934844010811, .931451054638671257130488207158279458456423740201017058907873e-1
+1, .240451935396594092037137165270695222759886442440035755489538, .116596882295995239959261852421587569715899086158479254513645
+1, .365228422023827513834234007299569237660189068780473859188037, .131402272255123331090344434945254597686382338801572278190025
+1, .500000000000000000000000000000000000000000000000000000000000, .136462543388950315357241764168171094578020984947391873798800
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D23.IM b/cubature/Gauss1D23.IM
new file mode 100755
index 0000000..1c7b121
--- /dev/null
+++ b/cubature/Gauss1D23.IM
@@ -0,0 +1,14 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(23)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=6
+1, .9219682876640374654725454925359588519922400093134244768659e-2, .235876681932559135973079807425085301585145369974235447802636e-1
+1, .47941371814762571660767066940451903731201645393351226722962e-1, .534696629976592154801273590969981121072850867351624400025028e-1
+1, .115048662902847656481553083393590962007537124990534181167790, .800391642716731131673262647716795359360058652454320889552036e-1
+1, .206341022856691276351648790529732859815450742975973759244864, .101583713361532960874532227904899188253259073637295073199278
+1, .316084250500909903123654231678141219371819929332295189344100, .116746268269177404380424949462439028129704986099877437365261
+1, .437383295744265542263779315268073435008301541847277863393539, .124573522906701392500281218021475605415230451284809415697675
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D25.IM b/cubature/Gauss1D25.IM
new file mode 100755
index 0000000..68b7e20
--- /dev/null
+++ b/cubature/Gauss1D25.IM
@@ -0,0 +1,15 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(25)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=7
+1, .7908472640705925263585275596445194467504719037062545652996e-2, .202420023826579397600107961004930300209932728724944340674059e-1
+1, .41200800388511017396726081749640243804762604944158352052358e-1, .460607499188642239572108879768985604618419999311184195442782e-1
+1, .99210954633345043602896755208570054847192137604749985051308e-1, .694367551098936192318008884344357338109313591316491138226614e-1
+1, .178825330279829889678007696502242174964151300869211571305429, .890729903809728691400233459980489977564063253305082514933362e-1
+1, .275753624481776573561043573936180066099039166279121060520858, .103908023768444251156261609653026381693291304599751774609572
+1, .384770842022432602967235939451005582394228812058234418265370, .113141590131448619206045093019888309217378868807778509932485
+1, .500000000000000000000000000000000000000000000000000000000000, .116275776615436955097294757634417974078313738653398993059332
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D27.IM b/cubature/Gauss1D27.IM
new file mode 100755
index 0000000..bb83c7a
--- /dev/null
+++ b/cubature/Gauss1D27.IM
@@ -0,0 +1,15 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(27)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=7
+1, .6858095651593830579201366647973599161954296380387059177964e-2, .175597301658759315159164380690958903098528046385636382909002e-1
+1, .35782558168213241331804430311062867761480394795081190641019e-1, .400790435798801049028166385314271547918488926972973826023319e-1
+1, .86399342465117503405102628674802519480149449262459409219646e-1, .607592853439515923447074045362383129783346728450373361465086e-1
+1, .156353547594157264925990098490332931230799393626414662190367, .786015835790967672848009693119210783028340186686616874843807e-1
+1, .242375681820922954017354640724405668845557358715346981524248, .927691987389689068708582950625785181244613014686658295099871e-1
+1, .340443815536055119782164087915762266582869398233078021701675, .102599231860647801982962032830609027855169530654709725858446
+1, .445972525646328168966877674890082626194024197262881221479590, .107631926731578895097938221658130017637498779027064400109889
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D29.IM b/cubature/Gauss1D29.IM
new file mode 100755
index 0000000..0a71f3e
--- /dev/null
+++ b/cubature/Gauss1D29.IM
@@ -0,0 +1,16 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(29)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=8
+1, .6003740989757285755217140706693709426513591438119255000001e-2, .153766209980586341773141967886022088608740724167170371332114e-1
+1, .31363303799647047846120526144895264378001863242347771049318e-1, .351830237440540623546337082253336692333540163771653599145555e-1
+1, .75896708294786391899675839612891574316871912631503682952136e-1, .535796102335859675059347733429346517077718578790509903459543e-1
+1, .137791134319914976291906972693030995184550352707948718224288, .697853389630771572239023972555141612604251376577556216003480e-1
+1, .214513913695730576231386631373044679380806801858625197573368, .831346029084969667766004302406044055654500900492064536609347e-1
+1, .302924326461218315051396314509477265818623611920650872484418, .930805000077811055134002809332114122531130061389642014077767e-1
+1, .399402953001282738849685848302701896093581772768681160192025, .992157426635557882280591632219196624093462799787709967423680e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .101289120962780636440310099983759657419331079004738678398352
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D3.IM b/cubature/Gauss1D3.IM
new file mode 100755
index 0000000..228f20d
--- /dev/null
+++ b/cubature/Gauss1D3.IM
@@ -0,0 +1,9 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(3)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=1
+1, .211324865405187117745425609749021272176199124364936561990699, .5
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D31.IM b/cubature/Gauss1D31.IM
new file mode 100755
index 0000000..d79629e
--- /dev/null
+++ b/cubature/Gauss1D31.IM
@@ -0,0 +1,16 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(31)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=8
+1, .5299532504175033701922913274833686286862964171177434974388e-2, .135762297058770474258902862280090517561336877833803989881559e-1
+1, .27712488463383711961005792232695827454430363704463699537223e-1, .311267619693239464314219184971888471374932541764534289453924e-1
+1, .67184398806084128059766051143803433806332307576236645948244e-1, .475792558412463924049625538011231131776317515918563290816126e-1
+1, .122297795822498483052449402576278865823093171771248495109122, .623144856277669360262381410960082100724434296111013399734514e-1
+1, .191061877798678125776664117975604490504058891117171102948102, .747979944082883660407508652737392744852455341039182334031950e-1
+1, .270991611171386306828790278508211213229984193482238254549422, .845782596975012690946560395151799811058197367080141408725981e-1
+1, .359198224610370543384769749269751946756965254614700099725582, .913017075224617944333818339846099696917781118273246412092481e-1
+1, .452493745081181279907340332287520968434823472155467271651390, .947253052275342481426983616041415525734544941979514875187562e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D33.IM b/cubature/Gauss1D33.IM
new file mode 100755
index 0000000..bfc29cb
--- /dev/null
+++ b/cubature/Gauss1D33.IM
@@ -0,0 +1,17 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(33)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=9
+1, .4712262342791332162282990029667361746105074770217848608046e-2, .120741514342739659800550131437826623458486579725126391475006e-1
+1, .24662239115616119388641521052098489278307476720445646165016e-1, .277297646869936005647200826791223302564231259766144234813529e-1
+1, .59880423136507048938522152755922153688291591032786049824045e-1, .425180741585895904417676850955310369252456946092527378620328e-1
+1, .109242998051599296537384972239761974888013763629715743743342, .559419235967019855473941928131779633679217121315385250049005e-1
+1, .171164420391654617074848891678498832426097054262013378097384, .675681842342627366431599908511750986860629266172445101892847e-1
+1, .243654731456761516056876715685224062708538138794413547043634, .770228805384051440407157974009793059702415292355089671931906e-1
+1, .324384118273061842351407241452326997479730124212162488340420, .840020510782250222549853318941615775105990644825370071349659e-1
+1, .410757909252076072074661253172967221262290333654237178218524, .882813526834963231626354950565986195754622090003740590215712e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .897232351781032627291328221309428107243901599488342618338347e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D35.IM b/cubature/Gauss1D35.IM
new file mode 100755
index 0000000..952a6d7
--- /dev/null
+++ b/cubature/Gauss1D35.IM
@@ -0,0 +1,17 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(35)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=9
+1, .4217415789534526634991997646924614873710531577280153540162e-2, .108080067632416551566713551332262346938426157377949727896348e-1
+1, .22088025214301122409402053535111845013577932594346760577306e-1, .248572744474848982266674731013193208404331230644551011256253e-1
+1, .53698766751222130396969704436427242296052364323850892906267e-1, .382128651274445282645648388083182628026589531041791437164298e-1
+1, .98147520513738442158791272492704601448350539194038759124786e-1, .504710220531435827814069924624173035314005694438394508044142e-1
+1, .154156478469823396062554459355575805273864713591246120548918, .612776033557392300922595634001007776140819486667195485792206e-1
+1, .220114584463026232696064225737335431536186757114645291680006, .703214573353253256023656518759736140477512051654862799412761e-1
+1, .294124419268578676982034103083474181460505158939987244359426, .773423375631326224627090019181873860966091981336770863333095e-1
+1, .374056887154247245205513572561044384918569117170179770989864, .821382418729163614930268882329637952061694769986764766222611e-1
+1, .457612493479132349378869073532108094133341306546955039978318, .845711914815717959203282350674933051670529096851719401349378e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D37.IM b/cubature/Gauss1D37.IM
new file mode 100755
index 0000000..104662f
--- /dev/null
+++ b/cubature/Gauss1D37.IM
@@ -0,0 +1,18 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(37)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=10
+1, .3796578078207798405491164873369753205341799298394606660160e-2, .973089411486323851815602073221921787645330453464332054134874e-2
+1, .19895923932584984573610579656174236692454248362930947041092e-1, .224071133828498001664190787009971059758771137339288010608783e-1
+1, .48422048192591049178669535733843756095303032971322091152484e-1, .345222713688206132903541290030065224809240158438065655866051e-1
+1, .88642671731428587510538756643643049112730756896584979315068e-1, .457450108112249997322310470619198263304558256482993923397750e-1
+1, .139516911332385310691452069588109185171429083545666612530705, .557833227736669973580119508408829987406659269199468877610763e-1
+1, .199727347669159488265180917526880360065838958633853716206706, .643769812696681138377578924284385585279197885467315172753363e-1
+1, .267714629312019527141366425947948816011857142687931701507846, .713033510868033058878730547209514862378341724122369304633874e-1
+1, .341717950018185084004941335575077541053857390433556377422136, .763830210329298333894277004488314992305041336182143117615432e-1
+1, .419820677179887312065951942129628225247563249764562310562678, .794844216969771738249782197325236008393900790975630478755874e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .805272249243918479895818126604583675199512792892584510641616e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D39.IM b/cubature/Gauss1D39.IM
new file mode 100755
index 0000000..fa326ee
--- /dev/null
+++ b/cubature/Gauss1D39.IM
@@ -0,0 +1,18 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(39)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=10
+1, .3435700407452537606938805764339860888676434549172051925908e-2, .880700356957605915593098117592640818107155277166836617087430e-2
+1, .18014036361043104366166934401361389043969836096905571968231e-1, .203007149001934706655199761374660549395453199949757681496613e-1
+1, .43882785874337047066123779398350943475407601288154112602059e-1, .313360241670545317847532675935208031758005382892181820840377e-1
+1, .80441514088890588302735469149239657335185317467181313373754e-1, .416383707883523743623790716110231030500889142915816454573766e-1
+1, .126834046769924603692847464822179204844634660215411777930227, .509650599086202175183750677401749380833458280116962781486420e-1
+1, .181973159636742487273581651886857031628305441600315768030276, .590972659807592086561886888556911435025206097744843877255830e-1
+1, .244566499024586450997817974522374500787254335398786583263826, .658443192245883134492472498740815674580552555734917634980915e-1
+1, .313146955642290219663725911487536381302126839147158644086026, .710480546591910256646491625335824665172577066960101516687970e-1
+1, .386107074429177460959751902315712687628455531158536263842682, .745864932363018733939143685009847183463399520406841582481140e-1
+1, .461736739433251333122679795300580894497601866593251249597602, .763766935653629253490421659775487967459743225561892986373505e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D41.IM b/cubature/Gauss1D41.IM
new file mode 100755
index 0000000..2c7ee17
--- /dev/null
+++ b/cubature/Gauss1D41.IM
@@ -0,0 +1,19 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(41)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=11
+1, .3123914689805249869878982031029535403330772608835407209563e-2, .800861412888716666211230842923550763294521105895124102838633e-2
+1, .16386580716846852841688892546152419287653156335076575023514e-1, .184768948854262468999753341496648330944721540743649187233885e-1
+1, .39950332924799585604906433142515552920426195175889151411932e-1, .285672127134286041418179132362239787456437984131280205911233e-1
+1, .73318317708341358176374680706216164861947098410328014628504e-1, .380500568141896510085258266500915896130771762119830142722936e-1
+1, .115780018262161045692061074346885982589511647114315224565636, .467222117280169307766448705569660442417633236807964225415575e-1
+1, .166430597901293840347016665004830418701485328344298578762266, .543986495835741888317372890350528210168497978969281652914971e-1
+1, .224190582056390096470490601637843356688969887884660167497847, .609157080268642670976835885628667991781688127807687251170733e-1
+1, .287828939896280608213165555728105973951777384080182707887871, .661344693166687308905262872483878021645057700715784116087933e-1
+1, .355989341598799451699603741967699840045490868176983385622859, .699436973955365773610667119337915554463965804774598021868743e-1
+1, .427219072919552454531484508830656834941836987781031121289256, .722622019949850295319135832768762718049749810985499173762376e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .730405668248452135959925738416855941224047884709827220536614e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D43.IM b/cubature/Gauss1D43.IM
new file mode 100755
index 0000000..e3db9d2
--- /dev/null
+++ b/cubature/Gauss1D43.IM
@@ -0,0 +1,19 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(43)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=11
+1, .2852707258800353963484289419350509803472900801984232511488e-2, .731399764913610034249554902359272259510597456216186396383505e-2
+1, .14969751082285636438024506617365644597015538431098515220131e-1, .168874507924070773966511234329564506745846572372373303338209e-1
+1, .36521613906412999739653530370473401682335173313974008977714e-1, .261466675763416429701560256366056280560750467846181572502817e-1
+1, .67093711139849931731787181490310635457601622205776921936454e-1, .348982342122602440474807094651088286993875264775402636205681e-1
+1, .106091597010395918997861022295824239305910664334218420939154, .429708031085338637072218406863514330945722026745398918192088e-1
+1, .152756368406658609974655082118871614366328855011282419439133, .502070722214404824660394189152681411754055443838498128712705e-1
+1, .206179798246544203520561536180676325561192198213141080114983, .564661480402696091967003037108921595571316660604973521378168e-1
+1, .265322081006621486796834644516796826952328104434631726101950, .616261884052562121427804930774072359797224995024839862136541e-1
+1, .329032089553957887420926289786310190220413350414656328001569, .655867523935311853664824962651537229378709470940153265626250e-1
+1, .396069786655889357260576733040227132892162445451033175165674, .682707491730075856762869156157586982931838264943430840547327e-1
+1, .465130363340138889393079101940685959088851850259884262646659, .696259364278159966877051241709049789369601087287129290630986e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D45.IM b/cubature/Gauss1D45.IM
new file mode 100755
index 0000000..19ce331
--- /dev/null
+++ b/cubature/Gauss1D45.IM
@@ -0,0 +1,20 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(45)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=12
+1, .2615332501223938238037142277212819713186313770564789536603e-2, .670592974357088604065474672930753248830916705286861636132717e-2
+1, .13728764390942384021987961589611312409193102323013028754372e-1, .154940029284897221553471098209422526918862644999640320879279e-1
+1, .33514456586991948825401505480788510882149089924304614653550e-1, .240188358655423342858205358160169982806081541517558066355781e-1
+1, .61623820864779166310921557032927164180535485019674682545300e-1, .321162107042629260635848075794554990195791378774034159176963e-1
+1, .97555799190580053924440796501610721029284930134845988707284e-1, .396407058883594774614462623710216134568559959692032513625311e-1
+1, .140669318434024902769187758125690575835035127434353602122610, .464578830300175737385093086848823243017300358715649469172774e-1
+1, .190195062118176921807451344175202173306409670596453852149567, .524460457322707050370430925073719274292357915969875027409252e-1
+1, .245249261076996225155103476066576784727578615407571188386406, .574983201112056824708217564669806507457052614647928033058239e-1
+1, .304849480984854584289255563559697270710974574653748259390398, .615245421533647652337892003360048274079264062732352872181265e-1
+1, .367932159514827534733065230858345198510493374902930197565460, .644528610940410749892976696998968266298577485958917462221543e-1
+1, .433371587850766944534128658879116931494797361873308921744528, .662310197023483086858212323516584629025178347371117621612565e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .668272860930530876757285552729221692915764038184416587409683e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D47.IM b/cubature/Gauss1D47.IM
new file mode 100755
index 0000000..acd8204
--- /dev/null
+++ b/cubature/Gauss1D47.IM
@@ -0,0 +1,20 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(47)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=12
+1, .2406390001489319910001295149631594062701153701998561279200e-2, .617061489999359977340283353501864578795502044568326545155346e-2
+1, .12635722014345250900804003495915469129408473479910640094203e-1, .142656943144668315906539079759391432245988989659540756642033e-1
+1, .30862723998633620738175499145639275172590170961274326682486e-1, .221387194087099030843013741056691144296564209169289522942175e-1
+1, .56792236497799482893422829008901622456333478345539979814481e-1, .296492924577183903731838792500542922706000632826067445460607e-1
+1, .89999007013048539023025063665127395961936761166072206378010e-1, .366732407055401528670168076265582590596682549242497355925449e-1
+1, .129937904210722817878085948450010787238353756492907271566809, .430950807659766379585926014918713335925402941189665026242442e-1
+1, .175953174031512215373752106544626186665170850690521609850533, .488093260520569441349403322321235772139594844268429720354183e-1
+1, .227289264305580232170812191390813814994608003706190912283193, .537221350579828173912886712233031113973143450671100108966138e-1
+1, .283103246186977430756457884043325143773789244536015595959600, .577528340268628006766722419533917799311351556882482352912704e-1
+1, .342478660151918312806603354340094879606760869587591365622885, .608352364639016956022315767381312128035147796019028893888088e-1
+1, .404440566263191845420680089621465184079797448342623321925540, .629187281734141480606876912555918443632016627906727020890417e-1
+1, .467971553568697186957478458687627480704500402289626303287824, .639690976733760784870280826123476859258556197708339412106500e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D49.IM b/cubature/Gauss1D49.IM
new file mode 100755
index 0000000..37d73f5
--- /dev/null
+++ b/cubature/Gauss1D49.IM
@@ -0,0 +1,21 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(49)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=13
+1, .2221515104750951045607526553049191371218675297595914394598e-2, .569689925051314397395148205661738680166026314645485088931376e-2
+1, .11668039270241244250842306760202966127314722342796627664506e-1, .131774933075160686309509076476495724679816408516612312539404e-1
+1, .28512714385512830292994415170764734047399214695504929036274e-1, .204695783506531563278117438558229768304228916820521545276222e-1
+1, .52504001060862315574478996608597522912722575123208048469149e-1, .274523479879175959629684457702366620800549927765556779346890e-1
+1, .83278685619582999289489445653215215269517943088239606989568e-1, .340191669061784586035935928283539842773547471773182815800366e-1
+1, .120370368481321184711358567397819511806238990550832939540805, .400703501675005090066174798345556511451128664268379473266340e-1
+1, .163216815763265817757439683376188912058291635963625341470172, .455141309914818249057486103514458266904962794796671553576696e-1
+1, .211168534879388516138155079193672966302132480354240871677258, .502679745335253221011034451963429134942330472640709535712704e-1
+1, .263498634277142519738908942495403979334091130769186354546384, .542598122371318265580469785250583096700387939933610080749932e-1
+1, .319413847095306081132089134936179666288960826478312465102710, .574291295728558241696627729347779043204680958340900747957548e-1
+1, .378066558139505783977404818601274206797183421837007761789432, .597278817678923861140890632564505236950883507068632127598256e-1
+1, .438567653694644801806320090595981597233897326975108130788053, .611212214951550208444797594729257529175296237815295204537932e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .615880268633577256019514365395250712191168137590758326956760e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D5.IM b/cubature/Gauss1D5.IM
new file mode 100755
index 0000000..f04c7b0
--- /dev/null
+++ b/cubature/Gauss1D5.IM
@@ -0,0 +1,10 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(5)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=2
+1, .112701665379258311482073460021760038916707829470840917341242, .277777777777777777777777777777777777777777777777777777777777
+1, .500000000000000000000000000000000000000000000000000000000000, .444444444444444444444444444444444444444444444444444444444443
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D51.IM b/cubature/Gauss1D51.IM
new file mode 100755
index 0000000..666d6fd
--- /dev/null
+++ b/cubature/Gauss1D51.IM
@@ -0,0 +1,21 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(51)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=13
+1, .2057149427191535498391520338546987021571072440220166301736e-2, .527568630867150357782559384262598895217286858984729841099277e-2
+1, .10807277021764504449709822844036847276541718126340748757292e-1, .122089255463159543948079137598942001202479630986351638456128e-1
+1, .26420466669142874932042358240981622739644831157842364990866e-1, .189811916471813819751515706244252473453852108720244429656440e-1
+1, .48681069007846462891167200384394874329437997313547313722417e-1, .254879126485739059991599503620366897629396592714859626374048e-1
+1, .77277028605750990601246469266080919213962448954335215284912e-1, .316370231647874177697268449535225478611114210063472548378178e-1
+1, .111807025589660571903516376378858066511890871872402563918416, .373420748828298729435378980514241693193735809405203438227732e-1
+1, .151786369790021367568093043135287651069623341104590424147722, .425229471567426196052238825399908482919601583883391380766492e-1
+1, .196653853491190968384010626541556472782367713867045054810678, .471069001779570742318324415336515992745828729571036399104923e-1
+1, .245779642587747141152148467637215412311846622907124593139450, .510295805472127116192070351267153961636044056771210051689654e-1
+1, .298474122438256846759461311450558448170031295150341908705430, .542359202642882953282897133639987911447191017106533222654342e-1
+1, .353997580257021552428582308961084851557640306518504810893828, .566809082731598332747203592212990726229751814625076069943000e-1
+1, .411570589821554908015471125790827625011308118099367869259826, .583302217426482910223312537701811068159824406109621082300800e-1
+1, .470384953285343396453140712400798319604882632305482208922864, .591607076396311382581855428502343423249451354144526590471604e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D53.IM b/cubature/Gauss1D53.IM
new file mode 100755
index 0000000..3cb3c9a
--- /dev/null
+++ b/cubature/Gauss1D53.IM
@@ -0,0 +1,22 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(53)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=14
+1, .1910368555505716530556395809385004869655972217064406149182e-2, .489949802564718013057502754562954904911290946754577229389193e-2
+1, .10038262019249388572063322169476407716178889305024618380570e-1, .113431157980903115980171032233807444063838601440832013007928e-1
+1, .24549721092647496574045984678058553453705033257791174533092e-1, .176485268787098555112891446523558205680694447614708916400462e-1
+1, .45258839661254447849677490895155372525977832202519520443386e-1, .237247062603075313520483550570923591123628100830923631881896e-1
+1, .71896045990852754848631388646578601117856500698247086511405e-1, .294917684299167995551504168597658165826202953532060747291953e-1
+1, .104114180464745886427801327946364633540299467126068243796360, .348744118831227964921614441783336380664123466284760007566007e-1
+1, .141493263130288150352591894178830225124663973950718428674392, .398024338865288856315374795049212014880733364935014763696804e-1
+1, .183546014026752429536132681182755693948461991215331651352444, .442115792718784750971614014268745555282683750255495550451659e-1
+1, .229724217710271552549849529220008589520409775506409154812831, .480443636850142537828263232790529295801058147685146671995167e-1
+1, .279425874124986559707012922155359273776157702418450305927306, .512508189088728993356238557663319046622049474573586649349515e-1
+1, .332003048180745550134840482896357729104989990546202904637506, .537891428942665936060814922133287024094830495318823327568367e-1
+1, .386770317280231570571380446319884914410276633535898161676686, .556262441784225963360815480214243374164601900425416335482026e-1
+1, .443013707195235016533552508065011686413359733010929502617123, .567381730544825743101849740460496289602622594052360129482063e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .571104336894784945225228684509176243403607216750826651608737e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D55.IM b/cubature/Gauss1D55.IM
new file mode 100755
index 0000000..e749eaa
--- /dev/null
+++ b/cubature/Gauss1D55.IM
@@ -0,0 +1,22 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(55)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=14
+1, .1778751213022775024781804758344504124934783951787047707164e-2, .456214129654725886940807696147585312017224554914550660120882e-2
+1, .9348417314563623152720027096084861777922523373430845161987e-2, .105660562963856298757501904966327172256846753616427201142042e-1
+1, .22870359685530901372949080147392205498298062956024162292643e-1, .164507138911521899888154095852660229907654087100486310071419e-1
+1, .42183486803933963065155288335036426823751602395439245669250e-1, .221364673795021139197939388266036953074970563542834150100848e-1
+1, .67053738712802475528872716310156597829068584607886831511226e-1, .275536728378583727157414591134727956095289821128326670648088e-1
+1, .97179314541410414276057022287361170664149292595844165894656e-1, .326364619834997978966987833877523181768177155813035043632989e-1
+1, .132194560993184113985927744853732815991969490003479053385736, .373231071172843895119659435865110190108179306031667214997289e-1
+1, .171674452980567519390050911746628589215199154875035019084148, .415567086144506091951982491221662399305672067219256667584600e-1
+1, .215139764094299140345998358321784533437643657171676386089985, .452858721965164204710930156683920649114287427272424362007250e-1
+1, .262062887522440869482794076166282978686391927310672024295444, .484653289989649579252445030477203008825165616782308024663614e-1
+1, .311874241955460644889321395221956508564153011478388544827824, .510564837890303849071083192528560675232900011789602704673807e-1
+1, .363969186182410961161586821937115132587619351653238523750162, .530278829614232089552082184984054143949614813425797584154425e-1
+1, .417715358933309614359264111054417271427137292199415911752857, .543555961291470676267857596518366839376392273330219838285650e-1
+1, .472460355057982864786741736329060011074602004469583158127331, .550235065082375981411881328009088069783127647456158166393343e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D57.IM b/cubature/Gauss1D57.IM
new file mode 100755
index 0000000..75463b2
--- /dev/null
+++ b/cubature/Gauss1D57.IM
@@ -0,0 +1,23 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(57)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=15
+1, .1660278869701706918404233725323057174113273374559998900922e-2, .425845193937320482713190665112490150119944489925922329545331e-2
+1, .8727247369293412564536992106811521946609025546784220487440e-2, .986604252806135299192990082019781557480328409518075681357093e-2
+1, .21357202110956137100895981509588218131220223022951464718235e-1, .153702461010468113222042626873083748735581304843547746818040e-1
+1, .39409883523470607453123281958446787295580328343853200765504e-1, .207010312593414180524150050570384607667453901942871416181689e-1
+1, .62681097539948604791103289371710726544691568440479314636390e-1, .257974134512489619562971905897712989598110553230710888811999e-1
+1, .90907256192373777505213892710607512184989219058853114431483e-1, .306015453285395692710549240119535224620322698895650786702768e-1
+1, .123768574132761433043694961393930904893704015885506695794001, .350589666275256392847907434744395865511974443373867882904207e-1
+1, .160892731198656742421907497304007036805868534992677418638095, .391191635678818919140724443298401656834395384798348541769259e-1
+1, .201859101430886089810206894405505109960906594807211180763269, .427361286830862637726724246486040356908491283067966976423569e-1
+1, .246203522437886178948686040186239923324388079807707917907468, .458688785696293816739832055385554034491145104909772856545759e-1
+1, .293423555912995668054646706984191588338280740631843040110808, .484819170472043031509500374413443795881781389609017821339655e-1
+1, .342984181066180032525902038404476275870775590454586259351620, .505456368799574830609102734537486818237836394262625995610741e-1
+1, .394323856916999462746812135548531250471674591143952425980800, .520366550388646869566642356425600344553261103377338458218338e-1
+1, .446860884933660384914508803784811509541402280352196431857112, .529380775486604707032956639260939465374156568711390199140755e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .532396908591571221232555634548387841650925158064979898764866e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D59.IM b/cubature/Gauss1D59.IM
new file mode 100755
index 0000000..95e72fc
--- /dev/null
+++ b/cubature/Gauss1D59.IM
@@ -0,0 +1,23 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(59)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=15
+1, .1553257962675229864184974540652358329558980941124604945953e-2, .398409624808330280773294173733681122524034829357528462330010e-2
+1, .8165938360126395014983709197168599029841072645144318241410e-2, .923323415554547957115106595602363454810326698408944270205290e-2
+1, .19989067515846243891564487209101168534820391298038300257169e-1, .143923539416616846748595898056460218197944472731443139569613e-1
+1, .36899976285362837060337861459762997956762731587335469544482e-1, .193995962848135247984009682231738460166004883831978991637044e-1
+1, .58719732103973659228441768734887204971655426426757883965837e-1, .242013364152970264514690702114037589076359045986863096412310e-1
+1, .85217118808615801278550940133749041780465651914829160596524e-1, .287465781088095332408608447010280643985603353608814454323822e-1
+1, .116111283947586902541011329512748434152558191383545773396753, .329871149410902475640642575579811806187214768283302519255515e-1
+1, .151074752603342101533853805986679965808823099673022671810138, .368779873688526031341219250110953670768852630185247067286903e-1
+1, .189736908505378569429761221784405350396317653585235933702474, .403779476147101076773474692302648654379464018542196494999700e-1
+1, .231687925928990050367915103344463602917910996534851447273628, .434498936005414899011937653575628512883766643717726717904837e-1
+1, .276483115230955411609695049838572999918796203069287795122762, .460612611188930643588163535438093835984566172091170537761313e-1
+1, .323647637234560943264481396455313069673184495989287186702908, .481843685873221298197343131759049325482032307150801229544970e-1
+1, .372681536916055076780097435091097446058605348348740786917857, .497967102933976335313901410517847382649346318333521386106470e-1
+1, .423065043195708226518102663628372039790724014377830769140518, .508811948742027522982144760842770223163531447435634204321297e-1
+1, .474264078722341152083487393416638713125429273166715217872420, .514263264467794201706428183527075219341877785324641112931593e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D61.IM b/cubature/Gauss1D61.IM
new file mode 100755
index 0000000..f3a63e1
--- /dev/null
+++ b/cubature/Gauss1D61.IM
@@ -0,0 +1,24 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(61)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=16
+1, .1456259090261462972186722888448745874277332941465184603938e-2, .373541578962438792934843751610620351107542624202510562803061e-2
+1, .7657045167423757998767416632657644530740865242678164527136e-2, .865931039515529123157899804341057068313643138399752792839955e-2
+1, .18748037453525169105473797947070849051390257423720811613324e-1, .135045095924897109003043540459660780711783230010616525163947e-1
+1, .34621501051675917521527120135368243593301156370958981772332e-1, .182161369561927320121960052339017211635726660238338723735577e-1
+1, .55119985025864478312903995508920369228201294067404525118434e-1, .227468537636005514511579289473148386317763596550146330939371e-1
+1, .80039839926866329956547732029910821972631349462625238584320e-1, .270515412124584268558331295433100213601947312981057090368840e-1
+1, .109133425791687529796819989902657754452294813993300559967562, .310873932805142134551717718433483335793643996823257244053134e-1
+1, .142111607706573358047014567316757022054903261915205783685946, .348142916177051830838780631275628552575428536986717095539229e-1
+1, .178646638537869826907790898383749273004154658331896621745348, .381951932993883082131788374506653224628784568471043264046710e-1
+1, .218375419296425368639527538202419286025698863416556484507116, .411964958807946319519116837159808853078841332783231394338284e-1
+1, .260903108977548759779702980321757125780238314251288437580920, .437883703042389380630990348476665461146290798856021257689810e-1
+1, .305807049195883528469324269356239949007446866053227982121094, .459450569468207391076814358035750627486554126895789020804671e-1
+1, .352640965009149191691048051164147830623572407360820721531852, .476451214561597564036020987437983422706623691234795113558581e-1
+1, .400939400332214685613793501983583031112602593919222560006599, .488716676931643625467370054894983519178643943380475572547919e-1
+1, .450222343923829239837412604940529633080502320611236346969886, .496125056133361539374377572143075070087716099777815348906019e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .498602723967132257137669168671747198216267057501021757428074e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D63.IM b/cubature/Gauss1D63.IM
new file mode 100755
index 0000000..b42c9a5
--- /dev/null
+++ b/cubature/Gauss1D63.IM
@@ -0,0 +1,24 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(63)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=16
+1, .1368069075259218227509435667479636430731168135269420349440e-2, .350930500473504830020353186942659125668861036446620349033744e-2
+1, .7194244227365832299912477684549010683802142832096840894609e-2, .813719736545283530258528110319330908977148189760051551273466e-2
+1, .17618872206246784613094035940862519805552389778490640338994e-1, .126960326546310297278762948946120146437770237734749673160293e-1
+1, .32546962031130155414540432582295337235664283858581390770798e-1, .171369314565107165513438661261863534974201014558166792768214e-1
+1, .51839422116973938017346378140393865760501751602120211718192e-1, .214179490111133403284393233030627642464054287994694744361674e-1
+1, .75316193133715014933153497516128730522556603475120383449890e-1, .254990296311880880980816223447608476300923883698817413431132e-1
+1, .102758102016028796518451350514785548952260299180582273374621, .293420467392677735726418186500854433750602337287735719448686e-1
+1, .133908940629855159806286667454366426684864758246685449589430, .329111113881809234188250318534693864387682236866232700599344e-1
+1, .168477866534892399512442415668380815511488857019747349491458, .361728970544242531126996782392438958021684916509124253812050e-1
+1, .206142121379618835479627261799086570774529942272789713648410, .390969478935351532358704594141533355198933992410795952579353e-1
+1, .246550045533885304988126262811089384909858150200282268012817, .416559621134733776110995373021743057693734419714172298750297e-1
+1, .289324361934682327317940281913786760832061355683778334729170, .438260465022019055713857313759011437742248608508786111498016e-1
+1, .334065698858936175110041597134906001902112431597470081990885, .455869393478819423564342885558185312724307066376950026610275e-1
+1, .380356318873931462727698395417249239695572289019873492226452, .469221995404022828195901188340586300180500378731182250254294e-1
+1, .427764019208601753257406813200594673898077004342182223931024, .478193600396374297095410011020655502974452540810027754764978e-1
+1, .475846167156130841882593714779748918154576374134575551416103, .482700442573639002833824150317878973684303156177850343661588e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D65.IM b/cubature/Gauss1D65.IM
new file mode 100755
index 0000000..0ad6361
--- /dev/null
+++ b/cubature/Gauss1D65.IM
@@ -0,0 +1,25 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(65)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=17
+1, .1287652876772391366915991209797919460885494559319039641480e-2, .330311392379368902932461760423692751552958125160120929175121e-2
+1, .6772136884678755944812150867687039205414442892174450138472e-2, .766085075646733806397288426683093337876767739037924887362976e-2
+1, .16588545155003615535811146660703877390842831710006700176634e-1, .119577740508747401752666287645931210330041805722620220536622e-1
+1, .30652813694415824822082437818223143692782757951726587051695e-1, .161501793161644766407807236247156440341263615253421879103567e-1
+1, .48841616128283208479734334240619196262397220904540942521724e-1, .202007706658347957817048952636992480834313941913305787276297e-1
+1, .70995173661747967678469259926965763336324465551639967101432e-1, .240738714093558478350734400690598248708755743384861102984785e-1
+1, .96918821862916705101899564608611412151144690932276943826438e-1, .277354233158317806424722477196295552102542035751103613388139e-1
+1, .126384751775218921070472437551025865572855956768087760693460, .311532412651587400158138628854488057108842137896566356141133e-1
+1, .159134020015128606865892026540335932665532409642852985538630, .342972864093283564029775365074793262436805464701943196898800e-1
+1, .194878827081810486346356243230951284296828534555983025455234, .371399274219770746712360879592360233550491965981276655556312e-1
+1, .233305047606826178225552867502253937273667453887788765321734, .396561823974433691819541924709987940443440146961493210580118e-1
+1, .274074991363774652137003361379616473100614132804734411286811, .418239380335193538069640072588302987101638432729130081912155e-1
+1, .316830371125963329464889688373064444351532659449929914180897, .436241438094221688036408354727232282833480356469511441953321e-1
+1, .361195451423751485298375966350839497122620835360878390542326, .450409793303192886198718527501118105936853410397457424942648e-1
+1, .406780350586004213832100620390588006081327848588417329195327, .460619933216584231066204888586815303607355016019908602799609e-1
+1, .453184467072633307164628537938731139339247110923681559358987, .466782130327980580804995631371377324760019930443154024831091e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .468842230801049982836522707731743921922366819909133406433742e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D67.IM b/cubature/Gauss1D67.IM
new file mode 100755
index 0000000..a6a8c52
--- /dev/null
+++ b/cubature/Gauss1D67.IM
@@ -0,0 +1,25 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(67)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=17
+1, .1214123104579040378313781272685384299745058657535113530028e-2, .311457027795434235930323053571889306226366421489374131946721e-2
+1, .6386091796845257475124784450157513525614925669933890382796e-2, .722508137429751770760110516437349534377021679234891345657485e-2
+1, .15645868733327859117676713472003244516095627323263332003966e-1, .112818609927474850420470443574771306245172941941152959202890e-1
+1, .28918801297446454184161987269713548496897153831441220893249e-1, .152456903192230659047211938406587955153134226948135320474266e-1
+1, .46095161140837765599550055490356269918801213598423952979268e-1, .190832968981937581608829601449882794119735030633338369228717e-1
+1, .67032680832717765368213954664350077651682349131608465670203e-1, .227628057616766362269112816976353014991192094981563343768471e-1
+1, .91557886049533167704210546706513370803425044512873048940318e-1, .262537072863390530841229874212337998293598404734848382724788e-1
+1, .119467561685063492906295515510631583197750316636901539159992, .295270679137622465969804861752630954142430911732519921387503e-1
+1, .150530443391868546033499946712111408681117984272121844788278, .325557607770382056892722150324468867918186230364065686919429e-1
+1, .184489136459735727341112122240495861094551372963278234477402, .353146879071278624995193982838426775005813602454529948934944e-1
+1, .221062249665126678631770056891862709331279310977323052261491, .377809873300159656354169871142178620294096347406707333240265e-1
+1, .259946727404836482902948659746301445706322525548047107932946, .399342221698859223694094164032189967752779359860971498499103e-1
+1, .300820361120677029684252623533824235328768935172175892676360, .417565498499228275935101140230746952903577969287733457988421e-1
+1, .343344459330268376270841617174511002614385067207753529714247, .432328698735178748921234281403737901570353454509087862491226e-1
+1, .387166654191775258065679409532826377823905139476009723502324, .443509489178469346435382286824403563721415033519020654831156e-1
+1, .431923821370408512052785587834441084251359691117731858947096, .451015221853203647869711210087469644205147500253153178474879e-1
+1, .477245089023448728625462164574034918084457924906397298987787, .454783701651299368076688019742889799623028081301297200578062e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D69.IM b/cubature/Gauss1D69.IM
new file mode 100755
index 0000000..624305f
--- /dev/null
+++ b/cubature/Gauss1D69.IM
@@ -0,0 +1,26 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(69)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=18
+1, .1146715450199851369918430343952637403362681414493341703851e-2, .294171671022154248787694812005631201537715889910189082945734e-2
+1, .6032117778074250982441455407257007343495852142912822621943e-2, .682541417418074613320200146025819198699701892068745991098960e-2
+1, .14781191980385083392464758707614928737559380343811696289682e-1, .106614899557417904417189919831025391619048223599230074476353e-1
+1, .27327425896086335230637007235012677568594374376063422944032e-1, .144146300544471270243580198572424581307638633148039261104041e-1
+1, .43572869320341192767531468222117884755969493187220997535104e-1, .180550579317316902663584848237749691542678894849949252062984e-1
+1, .63390437487388834238358825429307366677830548860312526682586e-1, .215542111630851093911532296874541017114032935819964046845075e-1
+1, .86625050453887296582974693625721210476554691008846329323516e-1, .248846852006767649025998380424974792972474765972830672792066e-1
+1, .113094873856543722366288495395056259494094963514227036828300, .280204081061850642891638735825504822201742674522786547269542e-1
+1, .142592749221685608367795684387776626518978015739134744037304, .309368359830400944435070693943443261326856129020481090038397e-1
+1, .174887817667054805662103595507720368315118837035812999367506, .336111426345434519821527543740742792735465595748023230496197e-1
+1, .209727327625117745032748995905154964533964898217833783053871, .360223973862800323327309548926388780736336965137136324325737e-1
+1, .246838613379255692487851222081336311706956030681815376234464, .381517285777210267693292689421131127635400409478182676419400e-1
+1, .285931229241092872906189693499260070607640776755733078023014, .399824711211621314663310404925228781644177497150444236868249e-1
+1, .326699222784593027061510082534880884095795615311353945636560, .415002968644282941899632641080885017425872519067255599710411e-1
+1, .368823529395351971014552399772209743256847800677109358170897, .426933266960495626129719936955587838205954941418753755604314e-1
+1, .411974469417005215012848171777470035162285143835121476294556, .435522234985917671216610158027704683425283575469274657022483e-1
+1, .455814328362170368199535283251225598287941282617450929301375, .440702652151377314853694037965483207127271586372454185852863e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .442433974535521453191036938888078345912045750053027116601966e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D7.IM b/cubature/Gauss1D7.IM
new file mode 100755
index 0000000..8ffb728
--- /dev/null
+++ b/cubature/Gauss1D7.IM
@@ -0,0 +1,10 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(7)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=2
+1, .69431844202973712388026755553595247452137310185141181192139e-1, .173927422568726928686531974610999703617674347916946770246264
+1, .330009478207571867598667120448377656399712065114542823703523, .326072577431273071313468025389000296382325652083053229753735
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D71.IM b/cubature/Gauss1D71.IM
new file mode 100755
index 0000000..dce7797
--- /dev/null
+++ b/cubature/Gauss1D71.IM
@@ -0,0 +1,26 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(71)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=18
+1, .1084768757957081900585827209624880675091768801684343704730e-2, .278285983212252268062799219527391870861229594719690072203983e-2
+1, .5706760548893880963302446061446276696418739967356472105904e-2, .645797364203278720225170574889582459598060642572949567694017e-2
+1, .13986154475151025332197475784445836191976801867024129713594e-1, .100907576488677357660494644791105637097932551204307988759067e-1
+1, .25863507800246227398762942527386076855311737333163183724894e-1, .136493107492843895472085904339916789952284140711449211806863e-1
+1, .41251112742170466962066388486921800031545266093172572074004e-1, .171069053851536149606225307813572770350484556634716959828742e-1
+1, .60035099554801434008786331267082205613353578959621536116063e-1, .204378754618224477370572725716315957739685305595419370304281e-1
+1, .82076416503762346790589563750699673326610310303837427890568e-1, .236175417451329892083084148083374160365758937171794430101854e-1
+1, .107211884933896743586115517459853698348834747080199319675934, .266223569888799595460128141431098248444648055294688827571314e-1
+1, .135255414203221708954869760496945507217078476547401497947084, .294300721226624086548376999094600179713770478912799003428203e-1
+1, .165999381707239468951404327829541180417648754893681173299202, .320198986775077447781923993129281698730107352754203357775597e-1
+1, .199216170932009732460027512463202624128522922006624045012381, .343726619178682213068448196818066041708653823210692373365292e-1
+1, .234659857036877419179645459939215091169388563676588961762060, .364709425028265306769366884706371091434734763084952720812258e-1
+1, .272068027783289866396391165336279537021078805851571263671910, .382992053229353372643788668607508208639637784159959168430944e-1
+1, .311163726440155391838631805165046188916913597557356066896304, .398439144560358009543623327509319536637670787573630100995569e-1
+1, .351657502327985864748380476127414773649879088520087336649193, .410936333521698547586117367724711514324815364673110604915678e-1
+1, .393249553841567210528386885548643041620769134363615902724948, .420391094898309674667288121457979106019679569788030227520314e-1
+1, .435631948095307605674003305997423849411355137700313433197048, .426733428696693137459252715382448854993932927486456470642425e-1
+1, .478490900763145696386515510885818282722852602596995405115800, .429916378351973737450425873952632770800274578017479261453761e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D73.IM b/cubature/Gauss1D73.IM
new file mode 100755
index 0000000..8c52131
--- /dev/null
+++ b/cubature/Gauss1D73.IM
@@ -0,0 +1,27 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(73)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=19
+1, .1027708761043175529598462841318358165496075256635422965586e-2, .263652863974896967586102711676519459154415295298961202585859e-2
+1, .5407018392840406657950469707863845518773541209663009761989e-2, .611939005015377826315242621817328797114547655571203264598919e-2
+1, .13253484971757127835554762167120327592307691645695865820248e-1, .956452224454198302175097397005308706514761787286659934008057e-2
+1, .24513828368952589335711951591837033001225710097711307241220e-1, .129430184952794667613797406812436490147420912873822799000121e-1
+1, .39109281293768128665928156649643255609202366418835169429294e-1, .162308199237607405336171267507293643995472795614332760813041e-1
+1, .56937518922256960526925245491556779946593382586551846150725e-1, .194048012509672722444811851642380099836945946368030825206685e-1
+1, .77873506329722016006271861912569884154682752051188907940467e-1, .224426823312185833287051520550981800973616532571807681023993e-1
+1, .101770399745048853303476832249837738257184420529739196209058, .253231488274123008019379315433581720263528814726719277305676e-1
+1, .128460583009017368726476291263093560455049073368493698823926, .280259939991374589042696198321263332133769276438841783194162e-1
+1, .157756845434520321277238393784423145977828094514961156283580, .305322582616129930654940522502482928389970045311817485660054e-1
+1, .189453695795537758425923704202471344979136799697932420388049, .328243614363756247420118831489856090983386605748624176688508e-1
+1, .223328804069209109382450820885367763263856723879508838014000, .348862257778501724425406783965096455930118393488780535811451e-1
+1, .259144561098397222926403565558680414005238782826324802022446, .367033886242440863623133157598977324917349710988241066765465e-1
+1, .296649745340836944949534204193016695738764360324720550201848, .382631037852646189429439956033112577476816577657720257996962e-1
+1, .335581285058146500250764099330029758159988712353845980988532, .395544309187646903836060936983226192580034675320911830186203e-1
+1, .375666103604317120597216124256141890734161174158527421160742, .405683122542325152549388008998961317832300224873124692747284e-1
+1, .416623034880074011515664134794087781266675801984361825497946, .412976361182186254456151505764192353866532263010198840921543e-1
+1, .458164795522615049028475834131800411218239183982423853192353, .417372868129313936261265047422593495102176551015130250299224e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .418841804965694523985086831847296958584376400342383596140357e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D75.IM b/cubature/Gauss1D75.IM
new file mode 100755
index 0000000..4fb71a2
--- /dev/null
+++ b/cubature/Gauss1D75.IM
@@ -0,0 +1,27 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(75)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=19
+1, .975034732156190093576461724209501254767314862705954919628e-3, .250144037481967283794977104594968523191963593118808573538232e-2
+1, .5130272866807214027787054447160326337809376545988896808084e-2, .580672235823433708883415060021871367861837392921203643921582e-2
+1, .12576835704923246179557229526805678704012320616963242004223e-1, .907828885480661844943806287739110113145616952053154150529166e-2
+1, .23266834533235202164728923441279391307110514638535645127984e-1, .122898698691161879476006027233531437229795811133982697502382e-1
+1, .37129333975707801587445218893474544259541061759447239639432e-1, .154197502725875273293655431566543444602059477483138655810343e-1
+1, .54072130497683891602531484013041244210050473382742319518956e-1, .184470407970123690824700811684074751736780586203086691795029e-1
+1, .73982489033818905570175144376361859779807481336184515559222e-1, .213515792523372171179392171794038543392087422841402838741619e-1
+1, .96727916197341592224217312010150837134113509335340189397246e-1, .241140309303793416871760899557101120946805013926495707818256e-1
+1, .122157048123014659631130951610306293248081214626648036349157, .267160099551661599868784953156243780384576551693726541135234e-1
+1, .150100659810407822043587079686292062180896492349704781134640, .291401995734986030111529341290700279575638510792794754048082e-1
+1, .180372792085159146409827565249869864149414802295169285551882, .313704666960665270264848357625685321604519444984543129105379e-1
+1, .212771989476096459433536249537763744894900201073100617696461, .333919689895702059675230757645096299779760780176396334148326e-1
+1, .247082641036034448379733141766173998603076724681406177491890, .351912535334494773696414837968294204196308508812306022663211e-1
+1, .283076415283811757813371918741078897997038099796580438148790, .367563462923717285726032224241682392883185975462158775044113e-1
+1, .320513779760282493371641189271732854101968525394315963105895, .380768317742231980329967705522362639981726094162772593912655e-1
+1, .359145595104917369319942964290649961615164745608194334099912, .391439223291054740376877016678681312824518724289209127867453e-1
+1, .398714773053941648398011109242696471314172457123148241376166, .399505166217639107930138419625928482751506197948407894902808e-1
+1, .438957987331066290065193809335296441715940929250349995598112, .404912468852985503116347349745290709682575848920443770707847e-1
+1, .479607426047710880043341783835107539607613178658172594153201, .407625146401928933496093849429150278008213257352483992190513e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D77.IM b/cubature/Gauss1D77.IM
new file mode 100755
index 0000000..d41ca0f
--- /dev/null
+++ b/cubature/Gauss1D77.IM
@@ -0,0 +1,28 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(77)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=20
+1, .926308466783546997263848574089779083995129975167894119391e-3, .237647234581755068538810657745347099284754227009984755571625e-2
+1, .4874231572657008180112441376460897645153089479904101870586e-2, .551739446958229712133840272608864472675356968635934557048921e-2
+1, .11950645333264473077574840055240752854626293659949148611198e-1, .862811454686245952040273559167752360685795094657477350161890e-2
+1, .22112393837673861444554051404458898499114104680561932084720e-1, .116846924160890822973561722214623494455987777307397717264297e-1
+1, .35295425756630885151091517821132719077948595246148236555864e-1, .146674779919516892960779931781257128057057335512474386072933e-1
+1, .51416440353503556075854454569593174467153961012188498750874e-1, .175575557490656653805325926486164081833307438100206420704888e-1
+1, .70373531000046923043101280436978814732457777340088969736923e-1, .203366384239669219695282780411307018437862179980164754734540e-1
+1, .92046851284928447823383660795185086136092969739538071320478e-1, .229871505544583159420883196996163902994308465169762232414126e-1
+1, .116299378534468250083863797885828527263582943270494669126174, .254923326460647026070105168382906675088065419406448881383354e-1
+1, .142977782052732660433066481924084605167827359053150892401162, .278363451704581499536955698948407413534804740367918590769162e-1
+1, .171913393283994544632787032511871907559946194211514784729097, .300043680442980747874708867744097498683391135459234997338121e-1
+1, .202923272521361005653554962690446965917204227660936732314587, .319826940693411944933532022050318224278884584449898857256780e-1
+1, .235811365669781263051828182095888747329641173257287612007354, .337588154831156326815106640232242968875763540417385153969972e-1
+1, .270369743845431975668376683445213818530625423151991381061955, .353215029853043803850574657640655682337148420795140852292936e-1
+1, .306379918014219272073059017181518651993711913641586692059926, .366608767071343086905769664325241532239467121254875653456610e-1
+1, .343614220375907038732001544107185630199047195011230324867591, .377684686614180288523922234954046995470939892950109221684492e-1
+1, .381837243769082116331996836333674775967140387602971202034826, .386372762723410083642558183665586495602476257443955754684959e-1
+1, .420807330001081100038649469319300307766586881567428429766824, .392618066436855883625316504927617357612907382046244304732813e-1
+1, .460278097695622261209041458403679676557498417446629033372385, .396381112841842355050778858772539652619020743391332123501015e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .397638110697214262087090983029254969228033873829324071549423e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D79.IM b/cubature/Gauss1D79.IM
new file mode 100755
index 0000000..93007c1
--- /dev/null
+++ b/cubature/Gauss1D79.IM
@@ -0,0 +1,28 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(79)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=20
+1, .881145144720399825188648789706753832114809202477046698332e-3, .226063854926659562923586643909266636391555510633347784297206e-2
+1, .4636880650271496773472823889313922518888959324456731058462e-2, .524914226557640680737108553363982618839631066033277385367338e-2
+1, .11370025008112868668314858143548096510666033981006951785369e-1, .821052919095394435643174244118196364617114667182003516987635e-2
+1, .21041590393104172097729500273620357452558254698626484215473e-1, .111229245970834786307521620921042866035165983391456738230987e-1
+1, .33593595860661733319573916577397141782623212358653775385328e-1, .139685034900117005492445787538605386512754310271235428743440e-1
+1, .48950596515562851635873334565753448207755959471165266137370e-1, .167300976412739236963390915432054244886208933263924909835740e-1
+1, .67020248393870248089609095822690018214726723494449175270030e-1, .193910839872360088199860156452230811267296056161329726451155e-1
+1, .87693884583344168401839884666950613046379807878506100154104e-1, .219354540928366359958373430208577479055034185851856015151198e-1
+1, .110847174286740306152514227246752575989654341936554102877329, .243479038175361160307170802240731940339215136885825026413145e-1
+1, .136340872405036448359501774122534725721310663233335931226224, .266139234919684121774982398861302522776605859110053618150760e-1
+1, .164021657692910225810322742519252945014837009308074424964454, .287198845496957756833088654552129928000524179272264637254040e-1
+1, .193723055166009881023693774884652561309938109158425194432326, .306531212464644695832689982041992979512968817555871720562805e-1
+1, .225266437452435898962034347235241014883012449202174267548718, .324020067283005190372772647833763650163464821042444546239022e-1
+1, .258462099156910643545716712877588497700488802233442949605332, .339560229076169519128450541159619929920986191896429793615948e-1
+1, .293110397814197499237560127098143158512950187973540880852799, .353058236956433898477418154276434161797795519977930487186638e-1
+1, .329002954587120763496253759410402844966523189986337101768295, .364432911979020295302553417212589179287795404928993152224940e-1
+1, .365923907496373159429407827595701908287597813381876509271370, .373615845289841321000946681306623365956014672101799108646640e-1
+1, .403651209649314450142241573967425052592953989447395562557266, .380551809503131211857790379612474115062797769225355535269792e-1
+1, .441957964662372395758274357795987943115635734572892025484852, .385199090821239827941537671419051242622198770819702077445932e-1
+1, .480613791246974589033403277987688352660317682808429200415681, .387529739892124056318619814791631634818343263940532178664772e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D81.IM b/cubature/Gauss1D81.IM
new file mode 100755
index 0000000..5178a53
--- /dev/null
+++ b/cubature/Gauss1D81.IM
@@ -0,0 +1,29 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(81)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=21
+1, .839205712614279240405745955811216034247824243164916784740e-3, .215307017908244384200223895232724309318110198717710711714280e-2
+1, .4416445150491845874920552713415171153621993214998476343038e-2, .499996938695297266924814831484941977511246789878688774802644e-2
+1, .10830663219458307765414646663016400812181609040672858804568e-1, .782246920390929426541342223976683872040894468473854850141510e-2
+1, .20046554134826886950279151965656708966524454585266824671363e-1, .106005316843897765378485167466883132858585271528757131008376e-1
+1, .32011506251073087158840862357616866864381440956327612721403e-1, .133179496035552227337742876293566385223452460010090296264335e-1
+1, .46657027620949413520829793384638513322846407338857572791291e-1, .159591058658496408935334734285727718505938766506108383896128e-1
+1, .63899244153779295583164712882835269858978672230233499076239e-1, .185088583517539942176306257900803343031357731605717333199834e-1
+1, .83639399799319334377863610475728100011512003510708933347912e-1, .209525975979548447146701371555244189681331887159017318734908e-1
+1, .105764427476295313631889109266614855502643960450636394811157, .232763241845071710303782934323057115654950992903072709570197e-1
+1, .130147598465036909469915627765720499802372780473715517261777, .254667271473087473905851785578443157104017233934442050426546e-1
+1, .156649248982524355207698071735432593966780769925163435606528, .275112596212893709400734050857111349868876683026793165320900e-1
+1, .185117580463901839755675454152448249460742609630264563061716, .293982104749359724955929266903671370004406193013633829690588e-1
+1, .215389529194892065172626392358509874194771538010227378082242, .311167712904831582357867085416732427150799349724716729989483e-1
+1, .247291700400296983645831964898652617524462226992409877165838, .326570982267637052180818563268981702099296183605340733287644e-1
+1, .280641361474296455741440071635980375789107120620265678319214, .340103683804383833677666198631244641283495600692970826649334e-1
+1, .315247488679759279285816543350032397187956514334061960624398, .351688303104087487408294949849407280006166900839051399062390e-1
+1, .350911861329087567038508559760537847930022065776925736962727, .361258484305115366981731991743936774426473852624362744527649e-1
+1, .387430197183288612197106871672263834850043789677878388824906, .368759410136117349696404091624243397389581402141698213691317e-1
+1, .424593322568003918212811016057708812112184527335251084517416, .374148115881107759456525363167526614728415336890153587890105e-1
+1, .462188370505418501538116903174399866259474682196671525624948, .377393735463579120136235313373083745368031804515313881148680e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .378477678236491861593899805381801279455594406976156165662746e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D83.IM b/cubature/Gauss1D83.IM
new file mode 100755
index 0000000..f9594d1
--- /dev/null
+++ b/cubature/Gauss1D83.IM
@@ -0,0 +1,29 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(83)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=21
+1, .800190504968792488565936576474861911061958238609374117572e-3, .205299930232454230530138974841798132850838669446143175581720e-2
+1, .4211355829569540103819373359565583273653367631447991211560e-2, .476811015087425120591005014634899909434239936851590788901052e-2
+1, .10328745968125903145508716728571952206762509935468535692246e-1, .746122184867874707233883905293288381004637374388282776502881e-2
+1, .19120317330897755626536421073338659414139355542984000510685e-1, .101139347845263223785278595396770925413357132727481929005140e-1
+1, .30538221322505910733413283187204014874306090774914064579098e-1, .127114797630565239433712214547154321930677051912022216330546e-1
+1, .44520137547936273708076060395746728840549824330272198060776e-1, .152396203498017341814523667616961988958848271220825461724038e-1
+1, .60989715093913628644007448260688232968590141878040700622070e-1, .176845355487960554163310905632537709528742608931248169862027e-1
+1, .79857008369091549537280002456950091088300712403215821597446e-1, .200328675903461308802980624150184672768668509321508197160266e-1
+1, .101018973372256293383647023726811669933812244354672932970950, .222717888859829389371581829926171206592977330184208625245184e-1
+1, .124360032155259755215763912042670672248717740085229537573034, .243890703964016225137246815642013619605588484671198339868705e-1
+1, .149752704721914393129215035472267232849912029099953409436216, .263731478495870351719712695220487385157829939136033657212607e-1
+1, .177058305565376083021251848140794149415456728079928067657637, .282131846790091908232134275698478446994365792881447737126319e-1
+1, .206127701257445338579644327263002140047284347585999177050872, .298991311137933271564157728767674257549267093479718465066233e-1
+1, .236802125034403856203566220604049269282130117535045035535784, .314217790225012882046591256618899445763985219609448752550324e-1
+1, .268914043964789035120462485034682007445167545763195684453585, .327728121824544894635025539258972128048911470428965383168324e-1
+1, .302288073978512471161453022702814009600410711756823255869012, .339448516882609724276817011068831536330673673292965990087136e-1
+1, .336741937767294243901421705312267165470794264750707738030902, .349314962462970798830773931907411022219636565237160468428395e-1
+1, .372087460328560458016792604490645775615616771767299522669651, .357273571325854914609052220587310775112949319387518593150717e-1
+1, .408131596717572724573622180309628529533338019188742449822794, .363280876219020524439528807462665156383918419842136149978393e-1
+1, .444677486395740065825438727498679497566327987758184596298262, .367304067267337641320141285271519693668278917252026196813829e-1
+1, .481525528417324112093452009981220286679145773875388734325178, .369321171160864399981927805748957065642352602510354540369862e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D85.IM b/cubature/Gauss1D85.IM
new file mode 100755
index 0000000..3aad7f7
--- /dev/null
+++ b/cubature/Gauss1D85.IM
@@ -0,0 +1,30 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(85)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=22
+1, .763833878746143241181906340803794018974641076195428353458e-3, .195974512692206364148358259628821771683018233353069314969903e-2
+1, .4020221203377926789640829335190991806473387020523635892659e-2, .455199831870070165943430414794836190650898774021400775645739e-2
+1, .9860889509872334247235308909431804909566201740213257913756e-2, .712437821578824305427080086100209678603699654242807026080037e-2
+1, .18256693492960003294902518212878030066190543860643726832331e-1, .965995071184195019806230544603567615851177954880590177311774e-2
+1, .29164021576181069090761304801030864266761955093086121090602e-1, .121452283069194079510091621271246242276185197149359140439178e-1
+1, .42526046396930635271948564600357191627109948445788471500100e-1, .145672066307492474579702124128905968937752849418793758487486e-1
+1, .58273117390691568331160994178916291068916652878774200734851e-1, .169132460434301461724842378769010455266508053219266963234590e-1
+1, .76323141895342475500456957089103741243701726261380058132914e-1, .191711110970663287860642123314245574400362814371630661834978e-1
+1, .96582017931530682360462629561243936969556878259123701683464e-1, .213290285989910418819036026692569470524735456184399149892606e-1
+1, .118944126402522439269835768485476906096202370657021121874373, .233757473771732900053233831685514669664315479676814009250826e-1
+1, .143292882365521472574039561004547948678735416443181941801975, .253005963921950782619251994765073728749490045490276215031142e-1
+1, .169501343124250933417432618129327302943421593732893353252620, .270935401594408934316865891631327067941952763353645132182098e-1
+1, .197432870180199532137458464438022389280815096052736355351604, .287452309784552597138044584222082559639344340972824145089223e-1
+1, .226941841669957640429797476410169581672572887937622098687698, .302470576249956472598393709956813966792544399352142058684760e-1
+1, .257874411607132637965183282625743111003211459064138351838997, .315911902246980561628149088867041321283481173197344095794607e-1
+1, .290069311985365373756360302719715986962505546142714525956324, .327706210631613987456168821246039151124812668892274136974614e-1
+1, .323358693567848096677261817928266064109777484928717228880363, .337792011146825845962039523781327960714731462928648041796900e-1
+1, .357569000983543186447138552580831034107060091122869415223624, .346116720968283421411497395613175739046524947854639119113509e-1
+1, .392521877569740895492560809263162523131387856807273477778774, .352636938825425140631431777389703715918680833924820750341907e-1
+1, .428035095244643344614850031194627655658605558264328675883496, .357318671262570706487905588514551242904500096838978366196612e-1
+1, .463923504562706882288836374522219452571172361669692847237765, .360137509857109871726537758354285438767521229737073508224219e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .361078758468994939887311658568684400735353452626251744850777e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D87.IM b/cubature/Gauss1D87.IM
new file mode 100755
index 0000000..47d434e
--- /dev/null
+++ b/cubature/Gauss1D87.IM
@@ -0,0 +1,30 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(87)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=22
+1, .729899681612887531971639696674825471984983412292701000576e-3, .187270240155638875758688941588076923884895817706264929753919e-2
+1, .3841803930742095758330998193230715594051107823894961270872e-2, .435024068376242206128281171215657010423421058596076358761750e-2
+1, .9424083461043016668625497324756085597162222230171130235422e-2, .680979337778999276010253319503068943663335989371660197037714e-2
+1, .17450174788753430302800974709882512641561430705057453612324e-1, .923574086840737458602111187169992205776036919709525598976286e-2
+1, .27880245440902950398372673486505374463772532620038512328054e-1, .116157409510096053144791314693657087441109509996832594046355e-1
+1, .40662370007912112838499456652873975531007368477473497013294e-1, .139378914106405050405571458896935321610294199003095644019566e-1
+1, .55732880856978398830816044904838837620833770895287049966105e-1, .161906114060349104404234697700558005734740258943516494837042e-1
+1, .73016702497644810635848879353658054819415468985465775125997e-1, .183626739069044368214546461743508998553543939916523731433897e-1
+1, .92427730177432494756281182124029724850299712745702878215603e-1, .204432561551731094542235846415342434270396445147929293843578e-1
+1, .113869260375622050491120725384005993135951780217276445118463, .224219920409850157231215932015255535904815108278293666012225e-1
+1, .137234473169641498696517531640023194493767099895952370033488, .242890232241760187638197183456463688075256995534109255371305e-1
+1, .162406964666938817333150480718050038335872299438114562348862, .260350480458522309406159014965993755281320873705794522396011e-1
+1, .189261327048212076098787650439116626427797059991418220421764, .276513677818640262743733163215764957357674232088107945598164e-1
+1, .217663773407264615787681590308962390254627260197866942382216, .291299299387977476671053449221385840023780845516767311157420e-1
+1, .247472804305898841008600823854411380693963352247325693363116, .304633683507809840192789184371870503362862447408250626349966e-1
+1, .278539912737294258082586703176343225230760769845941025379873, .316450398666019274750694355098574653190121441220470914589802e-1
+1, .310710323992646433744117663613901071628589575752164813355081, .326690574395907174921204474228110947480054005648384639877943e-1
+1, .343823766748607093881727418213510732240368189123355681786820, .335303194531468261978524596758596753903565065363807839541643e-1
+1, .377715271535899374246348782629740689734756370359975198164955, .342245351346833304927293303521749362225777718179500204488198e-1
+1, .412215992612241607126746125309511704676312746637743342296488, .347482459307862890185420454625056283910467376905871136799950e-1
+1, .447154049145673376441347075542439123808307000570201193108800, .350988427367791062935710209721996938344133431078142289666693e-1
+1, .482355381517932320470901647684291822057498901205236461611431, .352745788946770344056691437401499424955317127544618223953707e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D89.IM b/cubature/Gauss1D89.IM
new file mode 100755
index 0000000..58e35f8
--- /dev/null
+++ b/cubature/Gauss1D89.IM
@@ -0,0 +1,31 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(89)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=23
+1, .698177409031680921726161549589725953855736392762291555522e-3, .179133157764177946557151432967569628529281784188832555923854e-2
+1, .3675000776398129125691439701132327512499178348180324691506e-2, .416159464810912082286792656111692687807896553239154182629264e-2
+1, .9015642482729715880340763182829259230817375389769096006554e-2, .651555249579139216031554123484346301357058600498530233511091e-2
+1, .16695844801552697631787419553760951441660484695292293066012e-1, .883876762896879530854627333478854426032563927824087370505631e-2
+1, .26679154502185469107639701523081460774765827916432474601072e-1, .111199237752893661969753792760844966724378544741233027587434e-1
+1, .38918031640499805951266319519736340367318561374669415824586e-1, .133481069837888324028373893965537638939124553352291424653546e-1
+1, .53354164123379130767675474253471326817299379793103656918644e-1, .155126874672577335812539694468840319429605760517964222520913e-1
+1, .69918762019667887330460564716432806108292788211488949460704e-1, .176033461008045081238498991307875454050440373533595523635140e-1
+1, .88532889748956831482112369986748985003292370971864783227979e-1, .196101183646512237820935926719646691090650622958400221124955e-1
+1, .109107843703046854343818405950698591169863241580469238480356, .215234403545824855758455565405834708941596180826652203188650e-1
+1, .131545575527254823688130575702553990060197159581191459536328, .233341938591866826338842378708270506024930707443206453090160e-1
+1, .155739159614399737383990087059780882022383497190736109639526, .250337496189760148995660512374371586957493464675847125146316e-1
+1, .181573302773388320364388077048308424653984378267161779728576, .266140083656344759729520220096552018992411084700782500473667e-1
+1, .208924893715323406659516332777911434499955587008386426988207, .280674393798932383219619701874348816207400924730812002315893e-1
+1, .237663589768541966454432949769918798696445864599858706554572, .293871163594208692871807588159157112656328627304900506515044e-1
+1, .267652438040182450710199248845125744580093666381404558576377, .305667504155332612509431852681627866300621171326210752541600e-1
+1, .298748528070729042961012745725826772014850321215301780582071, .316007200369099688749818651453334409331501186379114081681124e-1
+1, .330803672874698919178297949984063505233829278431288651026204, .324840978753617154269132851795378475419248627437916364991407e-1
+1, .363665115123811219695617304192177409050894122861678969939246, .332126742249212640414573578195518688065872733753374079845391e-1
+1, .397176255108368127140106387264228034648381807150285084479383, .337829770818037681354551119368243154897362904619732309964647e-1
+1, .431177397008373485621704979288467223446617221729237470191055, .341922886893348372658460496671580485367424565273224731904402e-1
+1, .465506509918427913754792692948094135153039666534515158667295, .344386584888306614410014241490278944422620650553242725793704e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .345209124146160100553992775797023703616614461375023890385731e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D9.IM b/cubature/Gauss1D9.IM
new file mode 100755
index 0000000..c2000d0
--- /dev/null
+++ b/cubature/Gauss1D9.IM
@@ -0,0 +1,11 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(9)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=3
+1, .46910077030668003601186560850303517437174044618734568563119e-1, .118463442528094543757132020359958681321630001106207007791416
+1, .230765344947158454481842789649895597516356696547220021898884, .239314335249683234020645757417819096456147776671570769986360
+1, .500000000000000000000000000000000000000000000000000000000000, .284444444444444444444444444444444444444444444444444444444444
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D91.IM b/cubature/Gauss1D91.IM
new file mode 100755
index 0000000..cd477cd
--- /dev/null
+++ b/cubature/Gauss1D91.IM
@@ -0,0 +1,31 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(91)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=23
+1, .668478933091009435865791304555612707922196282684136954447e-3, .171515043405352414300939157402170222058647416114296574056247e-2
+1, .3518825546912817963452277666903295439448584545807987400576e-2, .398494911486231122580651946316248271314438560435382500793511e-2
+1, .8633165097916568261010210170405639890218314850785599677090e-2, .623994188549434210336728587549168758876127369520787558079991e-2
+1, .15989304073004028631125966814092245738844086823184949642340e-1, .846675700391811902311535683588021566686322201877486146889852e-2
+1, .25553818276955102188893230281542930237114308353377333609453e-1, .106549993770682505272396805354392009144218888197680351574531e-1
+1, .37283100596623024511254321150437870558828121780522076199398e-1, .127946431985650053173497561001720140514397806491340818513946e-1
+1, .51123644233029017149340024340109355272685177349324455009290e-1, .148759147761013778995258646178614685465143769131024900807733e-1
+1, .67012302566570968542055611591700780656347627831047757984850e-1, .168893139995534482603019469405726643638997402425978005096917e-1
+1, .84876581466966973483807347604596941002096873014809695984878e-1, .188256526786930356638303996142295585134775597253619967071747e-1
+1, .104634971462362872405427926289848794426015243457644445065496, .206760950548393648521100879351157392121031120546370405635691e-1
+1, .126197320192166972999831747365998565547138909998726752515344, .224321976386590633835473067813874282211433502588920301613461e-1
+1, .149465243989797151243938955286749774875212008425030676765782, .240859475508561002652344316116104683409877461838289928188537e-1
+1, .174332576899001142446761422091570316386197971340762030275394, .256297990035715106676826496857240167320907508132641309781954e-1
+1, .200685855143642423411413733199916344925766832717685026088916, .270567076929283772458188216296115376299487345205679953217357e-1
+1, .228404834869098682364518654485561581983010764807541957304580, .283601629219956179084372018016433572932135113045565907253659e-1
+1, .257363040805917668613839903145772595840166220358480648227749, .295342172977731574037753613184538685491084742461151384484017e-1
+1, .287428343358585801338926568285716290415331115446032654158972, .305735138623252405076783039520955188863908164289268042811904e-1
+1, .318463561489502144938146510742674155076305578571178764251008, .314733105321972540894759761235554656166230825158931104034124e-1
+1, .350327088649064992258280371711048035321953841222880825388166, .322295017335695347941397195541275319618978225225092462334785e-1
+1, .382873538896865115686971942213103753712955589004750987188736, .328386371338906036893787828427778838108580698869058577394796e-1
+1, .415954410266448235696601631286148936276255359081765301634008, .332979373842274436878809832113668509721818544004960546349026e-1
+1, .449418762347207880242070171495675304559064319749253130190242, .336053068003390879311870774135487980882698405828226010798833e-1
+1, .483113904991973979240221084054280118092041942001899039658947, .337593429245182294101070945821505401060741347699091275725852e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D93.IM b/cubature/Gauss1D93.IM
new file mode 100755
index 0000000..9cbd6a0
--- /dev/null
+++ b/cubature/Gauss1D93.IM
@@ -0,0 +1,32 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(93)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=24
+1, .640635707893945408026142606445754186454674384254595392016e-3, .164372692126400744162498210416808992568031199676706634164481e-2
+1, .3372394506115682653905157683768195927143957944684632730345e-2, .381930814792441680705217838556582775221029541017058389054166e-2
+1, .8274498464188145617549482981915074034172890445953112809872e-2, .598142423215616048197172742497425626169645225334391685181347e-2
+1, .15326606336717751427127861219864597330848526510247931756560e-1, .811766657321652983536284370394931050794646220769492207593451e-2
+1, .24498015371145778705098538074278788673199242306310485515644e-1, .102184690738342138210173803431276932136155236041522508565449e-1
+1, .35748653493819675901407537694339509312290606528483005137104e-1, .122746058298294092689170785762528835688315761833090681996831e-1
+1, .49029335280737321566414349011282180180682756783857609870203e-1, .142770753503216932523699623129055408034376089321594336743261e-1
+1, .64281992101551841529507267722196914474036736942110195366202e-1, .162171177575923783838087315870850793465443404140123629981217e-1
+1, .81439930050048939361200525716823817909065525268278703181942e-1, .180862482920874758067299648831556243367226411132299019302162e-1
+1, .100428122916129028542218965398203493979739571900632528400024, .198762930612655018904506900709805082958247344145017102234583e-1
+1, .121163540777280683213001738215158899393290044783173283547844, .215794243242397691341508967232515697738596888929325150349047e-1
+1, .143555513295467849169060336114490594147874877122041428456672, .231881945432529556022009241213725462743480226314714394699713e-1
+1, .167506126304833635431648675713955469284742592733364537119913, .246955688736805848022852429310024615599970118952460549635153e-1
+1, .192910650021813195702268728697873156875910027454897625148956, .260949558900285724361059708548380388608674899810190476467498e-1
+1, .219657997032667902758470841290865604428238272704431280250888, .273802363907651129785625884442524029518976831742536126164179e-1
+1, .247631208068211040112855487324349454863398440387698735338658, .285457901466157701110083026541913864551647129826236231721209e-1
+1, .276707963447572148637408928825296020303291497400639450285037, .295865204711694379880772781928706462319161757465370119328879e-1
+1, .306761117957666430208348806196988364899081195992584992531038, .304978765043698226653552890667187605905466021510079373643543e-1
+1, .337659256831132048894619350410001581800185541996468837058945, .312758731104608313202821907249767683767079217292302127908845e-1
+1, .369267270392512714846508516897414512883338633101560137339300, .319171083028585153156468899279067667411681718453429862825998e-1
+1, .401446944860444096019254320814747691222568564788830167322856, .324187781194728633513019695554030094424973763009141594017730e-1
+1, .434057566722742551473088234637936379318332423280755543524872, .327786888832748701255715011630379561409999454043667989478860e-1
+1, .466956538041822162419763111262933145703861863031889795563862, .329952667944052372667853276652491297886791388132514989445770e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .330675648118277398267201771655274855976802263589656202832145e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D95.IM b/cubature/Gauss1D95.IM
new file mode 100755
index 0000000..21a4809
--- /dev/null
+++ b/cubature/Gauss1D95.IM
@@ -0,0 +1,32 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(95)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=24
+1, .614496373786940699729254218443179955531174861639480693530e-3, .157667302615291931633865577194574378914197045973018482261972e-2
+1, .3234913866824621226035624575462940821692625202664035191424e-2, .366377695063813105119198981089327502935395342176108986357423e-2
+1, .7937708138586571127708199986700584705380388291307635021175e-2, .573861728961726974479633380454581404321025204056685020873092e-2
+1, .14704203726876374769294008099669971348783044184558146985814e-1, .778965786147192436408847791723015698818813346329383384857873e-2
+1, .23506148419784569638519666987140828395729334088040631568026e-1, .980808022867776390723035982610635484790651739798400643146660e-2
+1, .34306654646722833442912809949199366140001457190524785064698e-1, .117853804196621895702596506892246151108648707544960283682447e-1
+1, .47060431642215163588962582164494105843868900086294577323758e-1, .137132548541784741000369181312529102255920776237976142064144e-1
+1, .61713989862876057047153222597451622719175733135019003626062e-1, .155836139163990444510328784231772097271426704116122176991856e-1
+1, .78205869187803234644455077740171975064556494131223799242544e-1, .173886112823852194462742929819012052986406984136416438302206e-1
+1, .96466897985278686458723478487730777013493485269792306712068e-1, .191206755329153531586086282618578089319119841826294376732097e-1
+1, .116420483742129830373072281238515473188678834575896313882436, .207725414717323746070294111805323988767364130190148889679119e-1
+1, .137982934538092672662758883253167376707453593859638818635317, .223372804283471402097242935629251974942313934311992823222517e-1
+1, .161063810183668047394074359662045470575022660486975693464480, .238083292462452374129533117394649150789990333714481967927431e-1
+1, .185566301611743188002417533465002673987545500104919114509134, .251795177769272374789038095439328030164970465129293256942858e-1
+1, .211387636958013648091095380729760613573001356929902235973802, .264450947425968335477525281323494573308632428165585888740496e-1
+1, .238419512638883483160887065431245736855406189094057946209885, .275997518499920814341017475958177195022254628037800939584806e-1
+1, .266548547624520797727535569174600745381593947870741527909066, .286386460502016078525751173423502881207635615020559845055360e-1
+1, .295656759004641635041887252092683356770038578502555967614424, .295574198491978178732374087167599553298278012785275043311600e-1
+1, .325622056853919630920091031364796041932845175015803711983938, .303522195829469400264846160139102389426304321282388772450156e-1
+1, .356318756322272211632056769341601156074220847099480110545750, .310197115799463319520988920687992591531916998325457307676940e-1
+1, .387618104802655469387567279912653861280719097979172596917628, .315570961431270128285630113751166590637068216855503956041037e-1
+1, .419388821965554140971781304608251152612812810129052441148378, .319621192923240933119531009127577044594870424913214999454137e-1
+1, .451497650395268650534973022073187739923631885349531506784710, .322330822179750411032520968288525328628459622277651543802817e-1
+1, .483809914518565318983338878423932778977018598819240953787498, .323688484063419612515124693682957767760409594733182550072812e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D97.IM b/cubature/Gauss1D97.IM
new file mode 100755
index 0000000..60cf532
--- /dev/null
+++ b/cubature/Gauss1D97.IM
@@ -0,0 +1,33 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(97)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=25
+1, .589924696682310319084363647944672438159501067749017943526e-3, .151363949446145253874034908791357048641501438204287264351789e-2
+1, .3105669027916104619943070371023190579346302530674916197698e-2, .351754979504322573672533915567420543143192561678441079639851e-2
+1, .7621052042893497820350502315712644823346268927373523391392e-2, .551027551579679024875414408341666637609678317917354221947010e-2
+1, .14118899549222309930013789247612933251068726409547153340386e-1, .748107246781232551479215956010075201814052233033269490334284e-2
+1, .22573170662931383222378160165907790472652774049863104038507e-1, .942179792654472922222532669555367463387495551147460032755963e-2
+1, .32949852622094925470508769681727548769788523594904002796149e-1, .113246007937233382493854821080214436633987457426366281830658e-1
+1, .45207172085963357393490179822099964478614384441640980446578e-1, .131818094635330084804728726198710238472304835917654899575772e-1
+1, .59295777213495544981484232091497536920379981368804330191236e-1, .149859423102919126753452790370736050310360183761167877879514e-1
+1, .75158940077917149482559063878510333336697833767641875628206e-1, .167297333958110871712435754458446009247399343455751733739350e-1
+1, .92732786320072284230249606117611477752663932088623324131616e-1, .184061604815003449097336183494411475006807762241889232525638e-1
+1, .111946552827276682490928593875771964367774769085409067364483, .200084728831865106843025183715516607139323037370797554766597e-1
+1, .132722872881298651893162893570737557673582273338149082780264, .215302184906297989941727420005192479033567906221702809279029e-1
+1, .154978087787433943247624096362529036183247436905482124504226, .229652696777979267712498099860638355044121611768177900050535e-1
+1, .178622583790381167971571525708049945229832263873361233729259, .243078479439141201388255986439342654406844643094118207627463e-1
+1, .203561152945549643772067831603685732683499492340576204773244, .255525471650722953373114030246592806948062246648920107248553e-1
+1, .229693376504136966720887266385282041537949326880817076701026, .266943553541294842639714668650881030827930347241122943412755e-1
+1, .256914029273753978911511951970712468962442402832531697359701, .277286748374017943452157907413490336021257620368970709080284e-1
+1, .285113503329211737670707929096288483468291051060963995078146, .286513407650937377425822961754082681752902194015598306429925e-1
+1, .314178249368857555568132729526519736192627606633036511625066, .294586378800136330122638253712462581312480569297397286564890e-1
+1, .343991233940125618896069661746791867451583296002806375208302, .301473154765760086515530584377707952488882544598627438911345e-1
+1, .374432410693711363246422028587694362708507912713167874352986, .307146004895964681484133230701505374715950045960489668669514e-1
+1, .405379203769093206757344913070006744410160561160590455327782, .311582086600286337005384126079748521120667681106604169220473e-1
+1, .436707001365163974466007355712231904837756439466566643244516, .314763537325978497371997778914455031818627138847850206861729e-1
+1, .468289657508656606985582589560757513423606563610559806254895, .316677546482458742954184637000452600739857082824129102236561e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .317316407023952988591267339397648174998147611541261095928888e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D99.IM b/cubature/Gauss1D99.IM
new file mode 100755
index 0000000..38a61b6
--- /dev/null
+++ b/cubature/Gauss1D99.IM
@@ -0,0 +1,33 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(99)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=25
+1, .566797789964474907270277512890747001878243547960737411480e-3, .145431127657757047920036217142774040333649972050717075354292e-2
+1, .2984015283954643707445899789652635921261014465838204831738e-2, .337989959787270075138943908899251590093689399315035876157278e-2
+1, .7322957975997058845495187183755297992203684527297095641096e-2, .529527419182548463178484074962051116970093598211323221129446e-2
+1, .13567807446653963143327947696873973165413296475022899127452e-1, .719041138074278720968945446366217496851591671081726724866078e-2
+1, .21694522378596028501127177921688952974282937686976728572010e-1, .905778035674469517562997171117730992233366525516848669794578e-2
+1, .31671690527561033109562526363751698923134200952398538812473e-1, .108901215850623964907960345313451706136567380839148405063860e-1
+1, .43460721672104053455132178614171452607905904151108805188636e-1, .126803367850061952200974391927213617300806319632623071782279e-1
+1, .57016010238193475681229508766623182902854844622095818776722e-1, .144214967902675990149531865566162162589234328540511922525225e-1
+1, .72285115285026957694318678032621266172583480256547018280835e-1, .161068641117890083240829136615019767242945291879986355537740e-1
+1, .89208964570332025821872944563030231119629308328257125738313e-1, .177299178075730770803673055004878985484800001221029977316033e-1
+1, .107722083549800368047347401829504399576341863721777823630570, .192843783062938376223850751181929674323858524577060773267045e-1
+1, .127752848886965730869731873658902878564906034335207710737610, .207642315450738487112059894820335089044889877245474171847496e-1
+1, .149223765646588874455226871058172135925140385757652178629538, .221637521694016377460111434151970987303806491780120189816742e-1
+1, .172051767157280319609187567998160090479294735808834086734532, .234775256519742164828165068174938412570321530926315886636662e-1
+1, .196148536407524880409809101804083553197897489662002822143934, .247004692247331574606217903757163643461435254833147524781824e-1
+1, .221420847742674972842238545187099196092050808881124869341770, .258278515347905692449526479200476398249127246977173934675106e-1
+1, .247770927546267899174270434075429403682310660864660380908630, .268553109444981232617293986278322763840116067649619999825878e-1
+1, .275096832512980605426434266110812091342467743267413167029260, .277788724031062588117837128061347487975676499919512784266778e-1
+1, .303292844051217436302885373088091364876930265663671998460482, .285949628238641918615146575329965815057876861285458794259834e-1
+1, .332249877290281321581505871354464151079390703481602119049784, .293004249066112229175612183154242331048837567220127365322458e-1
+1, .361855903110234004836177360739434907142599206434001924693247, .298925293521327287547882026562926153983330210363345023014504e-1
+1, .391996381561979121576357733691449333147122013744933363648190, .303689854208851080158750076924055008048996366177017678617728e-1
+1, .422554705000927048964185689529445249399074889972531183801635, .307279497951583318782033930419576875486337878820037571545838e-1
+1, .453412649219956929572774811180199826057164308038930692658555, .309680337103416216920437548904153442864385283456224524713816e-1
+1, .484450830836405561943835505167025402876351888520000978512602, .310883083276736311605165536803067154338412346005133165505828e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/HEXAHEDRON_11.IM b/cubature/HEXAHEDRON_11.IM
new file mode 100755
index 0000000..e725bcd
--- /dev/null
+++ b/cubature/HEXAHEDRON_11.IM
@@ -0,0 +1,28 @@
+% Integration formulae of order 11 on a 3D Hexahedron with 90 points
+% taken from the  Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_HEXAHEDRON(11)
+N = 3
+GEOTRANS = GT_QK(3,1)
+NBPT = 7
+2, .9063071670498132481961877986898720, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .0253096342016000238231671413708773
+2, .8673341434985040086731923849337745, .8673341434985040086731923849337745, .5000000000000000000000000000000000, .0181499182325144622865632250992823
+2, .6566967022580273605228866152789755, .6566967022580273605228866152789755, .6566967022580273605228866152789755, .0269990056568711411641833332980551
+2, .8008376320991313508172065028926585, .8008376320991313508172065028926585, .8008376320991313508172065028926585, .0146922934945570350487414755013352
+2, .9277278805088799923375457353451730, .9277278805088799923375457353451730, .9277278805088799923375457353451730, .0055804890098536552051251442852662
+2, .9706224286053016319555750788155670, .9706224286053016319555750788155670, .6769514072983150674551564354064455, .0028267870173527355278995288336230
+2, .7253999675572547151889421728651345, .7253999675572547151889421728651345, .9825498327563551314651409115626720, .0076802492622294169003437555791307
+%2,0.812614334099626496392375597379744, 0., 0., 0.202477073612800190585337130967019
+%2,0.734668286997008017346384769867549, 0.734668286997008017346384769867549, 0., 0.145199345860115698292505800794259
+%2,0.313393404516054721045773230557951, 0.313393404516054721045773230557951, 0.313393404516054721045773230557951, 0.215992045254969129313466666384441
+%2,0.601675264198262701634413005785317, 0.601675264198262701634413005785317,0.601675264198262701634413005785317,0.117538347956456280389931804010682
+%2,0.855455761017759984675091470690346,0.855455761017759984675091470690346,0.855455761017759984675091470690346,0.0446439120788292416410011542821300
+%2,0.941244857210603263911150157631134,0.941244857210603263911150157631134,0.353902814596630134910312870812891,0.0226142961388218842231962306689844
+%2,0.450799935114509430377884345730269,0.450799935114509430377884345730269,0.965099665512710262930281823125344,0.0614419940978353352027500446330462,
+NBF = 6
+IM_QUAD(17)
+IM_QUAD(17)
+IM_QUAD(17)
+IM_QUAD(17)
+IM_QUAD(17)
+IM_QUAD(17)
diff --git a/cubature/HEXAHEDRON_5.IM b/cubature/HEXAHEDRON_5.IM
new file mode 100755
index 0000000..3976a62
--- /dev/null
+++ b/cubature/HEXAHEDRON_5.IM
@@ -0,0 +1,16 @@
+% Integration formulae of order 5 on a 3D Hexahedron with 14 points
+% taken from the  Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_HEXAHEDRON(5)
+N = 3
+GEOTRANS = GT_QK(3,1)
+NBPT = 2
+2, .8979112128771107316322744102380675, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .1108033240997229916897506925207755
+2, .8793934553196640731345171390561335, .8793934553196640731345171390561335, .8793934553196640731345171390561335, .0418975069252077562326869806094182
+NBF = 6
+IM_QUAD(5)
+IM_QUAD(5)
+IM_QUAD(5)
+IM_QUAD(5)
+IM_QUAD(5)
+IM_QUAD(5)
diff --git a/cubature/HEXAHEDRON_9.IM b/cubature/HEXAHEDRON_9.IM
new file mode 100755
index 0000000..c7df63f
--- /dev/null
+++ b/cubature/HEXAHEDRON_9.IM
@@ -0,0 +1,24 @@
+% Integration formulae of order 9 on a 3D Hexahedron with 58 points
+% taken from the  Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_HEXAHEDRON(9)
+N = 3
+GEOTRANS = GT_QK(3,1)
+NBPT = 5
+2, .8068407347958544969174424448702780, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .0541593744687068178762288491492902 %*6
+2, .9388435616288391432433878794971660, .9388435616288391432433878794971660, .5000000000000000000000000000000000, .0114737257670222052714055736149557 %*12
+1, .7820554035100150271333094993315360, .7820554035100150271333094993315360, .7820554035100150271333094993315360, .0248574797680029375401085898232011 %*8
+1, .9350498923309879588075319044319620, .9350498923309879588075319044319620, .9350498923309879588075319044319620, .0062685994124186287334314359655827 %*8
+2, .7161339513154310822080124307584715, .7161339513154310822080124307584715, .9692652109323358726644884348015390, .0120146004391716708040599923089382 %*24
+%2, 0.613681469591708993834884889740556, 0., 0., 0.433274995749654543009830793194322
+%2, 0.877687123257678286486775758994332, 0.877687123257678286486775758994332, 0., 0.0917898061361776421712445889196463
+%2, 0.564110807020030054266618998663072, 0.564110807020030054266618998663072, 0.564110807020030054266618998663072, 0.198859838144023500320868718585609
+%2, 0.870099784661975917615063808863924, 0.870099784661975917615063808863924, 0.870099784661975917615063808863924, 0.0501487952993490298674514877246616
+%2, 0.432267902630862164416024861516943, 0.432267902630862164416024861516943, 0.938530421864671745328976869603078, 0.0961168035133733664324799384715060
+NBF = 6
+IM_QUAD(9)
+IM_QUAD(9)
+IM_QUAD(9)
+IM_QUAD(9)
+IM_QUAD(9)
+IM_QUAD(9)
diff --git a/cubature/Makefile.am b/cubature/Makefile.am
index fb16ef9..a554f8d 100644
--- a/cubature/Makefile.am
+++ b/cubature/Makefile.am
@@ -3,6 +3,7 @@ all : getfem_im_list.h
 check : getfem_im_list.h
 
 EXTRA_DIST = $(IM_METHODS_LOC) make_getfem_im_list getfem_im_list.h
+
 getfem_im_list.h :  $(IM_METHODS)
 	$(top_srcdir)/cubature/make_getfem_im_list $(top_srcdir)/cubature
 	cp ./getfem_im_list.h ../src/getfem/getfem_im_list.h
diff --git a/cubature/Makefile.in b/cubature/Makefile.in
index b4c78cd..0dd028c 100644
--- a/cubature/Makefile.in
+++ b/cubature/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -76,6 +76,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -94,6 +95,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -110,6 +112,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -174,6 +177,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -209,7 +213,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -321,10 +324,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -419,6 +427,7 @@ uninstall-am:
 
 all : getfem_im_list.h
 check : getfem_im_list.h
+
 getfem_im_list.h :  $(IM_METHODS)
 	$(top_srcdir)/cubature/make_getfem_im_list $(top_srcdir)/cubature
 	cp ./getfem_im_list.h ../src/getfem/getfem_im_list.h
diff --git a/cubature/NC_0_0.IM b/cubature/NC_0_0.IM
new file mode 100755
index 0000000..337234d
--- /dev/null
+++ b/cubature/NC_0_0.IM
@@ -0,0 +1,7 @@
+% Integration formulae on a point, for compatibility only
+NAME=	IM_NC(0,0) % Name of the method
+N=0
+GEOTRANS=GT_PK(0,0)
+NBPT=1
+0, 1.0
+NBF=0
diff --git a/cubature/QUAD_17.IM b/cubature/QUAD_17.IM
new file mode 100755
index 0000000..0f77977
--- /dev/null
+++ b/cubature/QUAD_17.IM
@@ -0,0 +1,23 @@
+% Integration formulae of order 17 on a quadrangle with 70 points
+% taken from the  Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_QUAD(17)
+N = 2
+GEOTRANS = GT_QK(2,1)
+NBPT = 10
+2, .9946765372563002456132179188084275, .5000000000000000000000000000000000, .0051537289799977399712336527838148
+2, .6881426035789866472037743058601245, .5000000000000000000000000000000000, .0320064290449774586796976445666927
+2, .9894241396311165580350357179969500, .9894241396311165580350357179969500, .0013779348835079726300386692984834
+2, .9428973645820580644532271790325020, .9428973645820580644532271790325020, .0098019281142854701238999612650102
+2, .5858780619191740873471919457467925, .5858780619191740873471919457467925, .0190992362699658256001262135754266
+2, .7952496369030012066757582605040080, .6597525183172869728383947371516360, .0353784324874931148111524373531432
+2, .8995395659584316279050666672835730, .7989862259647286901314008779983725, .0209758198409494005205819165480076
+2, .9018719814793723558927249127471835, .5291722408882752648421765781646003, .0150985409124211365077258972729358
+2, .9682531380637473908710441740858150, .6736931580831013373929988958506685, .0143469382423031737803539574584371
+2, .9906605899027261474879552202153555, .8530001438993230595909631103115815, .0054806398704659408776877206227619
+NBF = 4
+IM_GAUSS1D(17)
+IM_GAUSS1D(17)
+IM_GAUSS1D(17)
+IM_GAUSS1D(17)
+
diff --git a/cubature/QUAD_2.IM b/cubature/QUAD_2.IM
new file mode 100755
index 0000000..c65335d
--- /dev/null
+++ b/cubature/QUAD_2.IM
@@ -0,0 +1,13 @@
+% Integration formulae of order 2 on a quadrangle with 3 points
+NAME = IM_QUAD(2)
+N = 2
+GEOTRANS = GT_QK(2,1)
+NBPT = 3
+0, 0.9082482904638630163662140124509818986609912467761116880721154277, 0.5, 0.3333333333333333333333333333333333333333333333333333333333333333
+0, 0.2958758547680684918168929937745090506695043766119441559639422863, .8535533905932737622004221810524245196424179688442370182941699344, 0.3333333333333333333333333333333333333333333333333333333333333333
+0, 0.2958758547680684918168929937745090506695043766119441559639422863, .1464466094067262377995778189475754803575820311557629817058300656, 0.3333333333333333333333333333333333333333333333333333333333333333
+NBF = 4
+IM_GAUSS1D(2)
+IM_GAUSS1D(2)
+IM_GAUSS1D(2)
+IM_GAUSS1D(2)
diff --git a/cubature/QUAD_3.IM b/cubature/QUAD_3.IM
new file mode 100755
index 0000000..7692bc4
--- /dev/null
+++ b/cubature/QUAD_3.IM
@@ -0,0 +1,11 @@
+% Integration formulae of order 3 on a quadrangle with 4 points
+NAME = IM_QUAD(3)
+N = 2
+GEOTRANS = GT_QK(2,1)
+NBPT = 1
+2, 0.5, .9082482904638630163662140124509818986609912467761116880721154277, 0.25  % full symmetric 4 points
+NBF = 4
+IM_GAUSS1D(3)
+IM_GAUSS1D(3)
+IM_GAUSS1D(3)
+IM_GAUSS1D(3)
diff --git a/cubature/QUAD_5.IM b/cubature/QUAD_5.IM
new file mode 100755
index 0000000..519953d
--- /dev/null
+++ b/cubature/QUAD_5.IM
@@ -0,0 +1,13 @@
+% Integration formulae of order 5 on a quadrangle with 7 points
+NAME = IM_QUAD(5)
+N = 2
+GEOTRANS = GT_QK(2,1)
+NBPT = 3
+0, 0.5, 0.5, .2857142857142857142857142857142857142857142857142857142857142857
+1, 0.9830458915396479524572888052389923907713377624919657696231974935, 0.5, 0.0793650793650793650793650793650793650793650793650793650793650793  % full symmetric 2 points
+1, .7886751345948128822545743902509787278238008756350634380093011631, 0.8872983346207416885179265399782399610832921705291590826587573766, 0.1388888888888888888888888888888888888888888888888888888888888888  % full symmetric 4 points
+NBF = 4
+IM_GAUSS1D(5)
+IM_GAUSS1D(5)
+IM_GAUSS1D(5)
+IM_GAUSS1D(5)
diff --git a/cubature/QUAD_7.IM b/cubature/QUAD_7.IM
new file mode 100755
index 0000000..6ca0a83
--- /dev/null
+++ b/cubature/QUAD_7.IM
@@ -0,0 +1,15 @@
+% Integration formulae of order 7 on a quadrangle with 12 points
+% taken from the  Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_QUAD(7)
+N = 2
+GEOTRANS = GT_QK(2,1)
+NBPT = 3
+2, .9629100498862757307832833882919995, .5000000000000000000000000000000000, .0604938271604938271604938271604937
+1, .6902772166041578281895531795431970, .6902772166041578281895531795431970, .1301482291668486142849798580116827
+1, .9029898914592993718539280906753720, .9029898914592993718539280906753720, .0593579436726575585545263148278232
+NBF = 4
+IM_GAUSS1D(7)
+IM_GAUSS1D(7)
+IM_GAUSS1D(7)
+IM_GAUSS1D(7)
diff --git a/cubature/QUAD_9.IM b/cubature/QUAD_9.IM
new file mode 100755
index 0000000..12ebad8
--- /dev/null
+++ b/cubature/QUAD_9.IM
@@ -0,0 +1,20 @@
+% Integration formulae of order 9 on a quadrangle with 20 points
+% taken from the  Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_QUAD(9)
+N = 2
+GEOTRANS = GT_QK(2,1)
+NBPT = 6
+2, .9922699059711261962165003001504935, .5000000000000000000000000000000000, .0179033561774527416961834769929511
+2, .7444431714211862081138843106633405, .5000000000000000000000000000000000, .1135225881378863060330381008714315
+2, .5, .9922699059711261962165003001504935, .0179033561774527416961834769929511
+2, .5, .7444431714211862081138843106633405, .1135225881378863060330381008714315
+2, .9697836437107607670671515381158335, .9697836437107607670671515381158335, .0106961538666945127922920850036681
+2, .9183551625119944870476731455760975, .7536883868373065026387420172469580, .0539389509089832197392431685659745
+NBF = 4
+IM_GAUSS1D(9)
+IM_GAUSS1D(9)
+IM_GAUSS1D(9)
+IM_GAUSS1D(9)
+
+
diff --git a/cubature/SIMPLEX4D_3.IM b/cubature/SIMPLEX4D_3.IM
new file mode 100755
index 0000000..82dcd28
--- /dev/null
+++ b/cubature/SIMPLEX4D_3.IM
@@ -0,0 +1,18 @@
+% Integration formulae of order 3 on a 4D simplex with 6 points
+% taken from the  Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_SIMPLEX4D(3)
+N = 4
+GEOTRANS = GT_PK(4,1)
+NBPT = 2
+1, 0.2, 0.2, 0.2, 0.2,-0.0434027777777777777777777777777777
+1, 0.142857142857142857142857142857142,0.142857142857142857142857142857142,0.142857142857142857142857142857142,0.142857142857142857142857142857142,0.0170138888888888888888888888888888
+NBF = 5
+IM_TETRAHEDRON(3)
+IM_TETRAHEDRON(3)
+IM_TETRAHEDRON(3)
+IM_TETRAHEDRON(3)
+IM_TETRAHEDRON(3)
+
+
+
diff --git a/cubature/TETRA_1.IM b/cubature/TETRA_1.IM
new file mode 100755
index 0000000..d5e60ce
--- /dev/null
+++ b/cubature/TETRA_1.IM
@@ -0,0 +1,12 @@
+% Integration formulae of order 1 on a tetrahedron with 1 point
+NAME = IM_TETRAHEDRON(1)
+N = 3
+GEOTRANS = GT_PK(3,1)
+NBPT = 1
+0, 0.25, 0.25, 0.25, 0.1666666666666666666666666666666666666666666666666666666666666666
+NBF = 4
+IM_TRIANGLE(1)
+IM_TRIANGLE(1)
+IM_TRIANGLE(1)
+IM_TRIANGLE(1)
+
diff --git a/cubature/TETRA_2.IM b/cubature/TETRA_2.IM
new file mode 100755
index 0000000..d66abf3
--- /dev/null
+++ b/cubature/TETRA_2.IM
@@ -0,0 +1,13 @@
+% Integration formulae of order 2 on a tetrahedron with 4 points
+% double precision only
+NAME = IM_TETRAHEDRON(2)
+N = 3
+GEOTRANS = GT_PK(3,1)
+NBPT = 1
+1, 0.13819660112501052, 0.13819660112501052, 0.13819660112501052, 0.0416666666666666666666666666666666666666666666666666666666666666  % full symmetric 4 points
+NBF = 4
+IM_TRIANGLE(2)
+IM_TRIANGLE(2)
+IM_TRIANGLE(2)
+IM_TRIANGLE(2)
+
diff --git a/cubature/TETRA_3.IM b/cubature/TETRA_3.IM
new file mode 100755
index 0000000..d20a2c6
--- /dev/null
+++ b/cubature/TETRA_3.IM
@@ -0,0 +1,13 @@
+% Integration formulae of order 3 on a tetrahedron with 5 points
+NAME = IM_TETRAHEDRON(3)
+N = 3
+GEOTRANS = GT_PK(3,1)
+NBPT = 2
+0, 0.25, 0.25, 0.25, -0.1333333333333333333333333333333333333333333333333333333333333333
+1, 0.1666666666666666666666666666666666666666666666666666666666666666, 0.1666666666666666666666666666666666666666666666666666666666666666, 0.1666666666666666666666666666666666666666666666666666666666666666, 0.075 % full symmetric 4 points
+NBF = 4
+IM_TRIANGLE(3)
+IM_TRIANGLE(3)
+IM_TRIANGLE(3)
+IM_TRIANGLE(3)
+
diff --git a/cubature/TETRA_5.IM b/cubature/TETRA_5.IM
new file mode 100755
index 0000000..43d9955
--- /dev/null
+++ b/cubature/TETRA_5.IM
@@ -0,0 +1,16 @@
+% Integration formulae of order 5 on a tetrahedron with 15 points
+% double precision only
+NAME = IM_TETRAHEDRON(5)
+N = 3
+GEOTRANS = GT_PK(3,1)
+NBPT = 4
+0, 0.25, 0.25, 0.25, 0.019753086419753086
+1, 0.31979362782962991, 0.31979362782962991, 0.31979362782962991, 0.011511367871045398   % full symmetric 4 points
+1, 0.091971078052723033, 0.091971078052723033, 0.091971078052723033, 0.01198951396316977 % full symmetric 4 points
+1, 0.056350832689629156, 0.056350832689629156, 0.44364916731037084, 0.008818342151675485 % full symmetric 6 points
+NBF = 4
+IM_TRIANGLE(5)
+IM_TRIANGLE(5)
+IM_TRIANGLE(5)
+IM_TRIANGLE(5)
+
diff --git a/cubature/TETRA_6.IM b/cubature/TETRA_6.IM
new file mode 100755
index 0000000..4747aa1
--- /dev/null
+++ b/cubature/TETRA_6.IM
@@ -0,0 +1,17 @@
+% Integration formulae of order 6 on a tetrahedron with 24 points
+% taken from the  Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_TETRAHEDRON(6)
+N = 3
+GEOTRANS = GT_PK(3,1)
+NBPT = 4
+1, 0.214602871259152029288839219386284, 0.214602871259152029288839219386284, 0.214602871259152029288839219386284, 0.00665379170969458201661510459291332
+1, 0.0406739585346113531155794489564100, 0.0406739585346113531155794489564100, 0.0406739585346113531155794489564100, 0.00167953517588677382466887290765614
+1, 0.322337890142275510343994470762492, 0.322337890142275510343994470762492, 0.322337890142275510343994470762492, 0.00922619692394245368252554630895433
+1, 0.0636610018750175252992355276057269, 0.0636610018750175252992355276057269, 0.269672331458315808034097805727606, 0.00803571428571428571428571428571428
+NBF = 4
+IM_TRIANGLE(6)
+IM_TRIANGLE(6)
+IM_TRIANGLE(6)
+IM_TRIANGLE(6)
+
diff --git a/cubature/TETRA_8.IM b/cubature/TETRA_8.IM
new file mode 100755
index 0000000..6642e97
--- /dev/null
+++ b/cubature/TETRA_8.IM
@@ -0,0 +1,20 @@
+% Integration formulae of order 8 on a tetrahedron with 43 points
+% taken from the  Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_TETRAHEDRON(8)
+N = 3
+GEOTRANS = GT_PK(3,1)
+NBPT = 7
+1, 0.25, 0.25, 0.25, -0.0205001886586399158405865177642941
+1, 0.206829931610673204083980900024961, 0.206829931610673204083980900024961, 0.206829931610673204083980900024961, 0.0142503058228669012484397415358704
+1, 0.0821035883105467230906058078714215,0.0821035883105467230906058078714215,0.0821035883105467230906058078714215, 0.00196703331313390098756280342445466
+1, 0.00578195050519799725317663886414270, 0.00578195050519799725317663886414270, 0.00578195050519799725317663886414270, 0.000169834109092887379837744566704016
+1, 0.0505327400188942244256245285579071, 0.0505327400188942244256245285579071, 0.449467259981105775574375471442092, 0.00457968382446728180074351446297276
+1, 0.229066536116811139600408854554753, 0.229066536116811139600408854554753, 0.0356395827885340437169173969506114, 0.00570448580868191850680255862783040
+1, 0.0366077495531974236787738546327104,  0.0366077495531974236787738546327104, 0.190486041934633455699433285315099, 0.00214051914116209259648335300092023
+NBF = 4
+IM_TRIANGLE(8)
+IM_TRIANGLE(8)
+IM_TRIANGLE(8)
+IM_TRIANGLE(8)
+
diff --git a/cubature/TRIANGLE_1.IM b/cubature/TRIANGLE_1.IM
new file mode 100755
index 0000000..4cf5f57
--- /dev/null
+++ b/cubature/TRIANGLE_1.IM
@@ -0,0 +1,10 @@
+% Integration formulae of order 1 on a triangle with 1 point
+NAME = IM_TRIANGLE(1)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 1
+0, 0.3333333333333333333333333333333333333333333333333333333333333333, 0.3333333333333333333333333333333333333333333333333333333333333333, 0.5
+NBF = 3
+IM_GAUSS1D(1)
+IM_GAUSS1D(1)
+IM_GAUSS1D(1)
diff --git a/cubature/TRIANGLE_10.IM b/cubature/TRIANGLE_10.IM
new file mode 100755
index 0000000..994c149
--- /dev/null
+++ b/cubature/TRIANGLE_10.IM
@@ -0,0 +1,17 @@
+% Integration formulae of order 10 on a triangle with 25 points
+% taken from the  Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_TRIANGLE(10)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 6
+0, 0.333333333333333333333333333333333, 0.333333333333333333333333333333333, 0.0399472523706198539156235226066932
+1, 0.425086210602090572969529511638044, 0.425086210602090572969529511638044, 0.0355619011161886673196456436993290
+1, 0.0233088675100001907144663868959796, 0.0233088675100001907144663868959796, 0.00411190934523209775932331018123594
+1, 0.628307400213492556420837666078834, 0.223766973576973006225686490268204, 0.0227152961480850090035368146219665
+1, 0.611313826181397648918755002253901, 0.358740141864431464578155300723852, 0.0186799281171526384131182495009876
+1, 0.821072069985629373373544413472177, 0.143295370426867145305856630617323, 0.0154433284422819943912565385023143
+NBF = 3
+IM_GAUSS1D(10)
+IM_GAUSS1D(10)
+IM_GAUSS1D(10)
diff --git a/cubature/TRIANGLE_13.IM b/cubature/TRIANGLE_13.IM
new file mode 100755
index 0000000..dc4be66
--- /dev/null
+++ b/cubature/TRIANGLE_13.IM
@@ -0,0 +1,49 @@
+% Integration formulae of order 13 on a triangle with 37 points
+% taken from "P. Solin, K. Segeth and I. Dolezel: Higher-Order 
+% Finite Element Methods", Chapman & Hall/CRC Press, 2003.
+% only double precision
+NAME = IM_TRIANGLE(13)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 37
+0,.3333333333333335000000000000000000, .3333333333333335000000000000000000, .0262604617004010000000000000000000
+0,.4950481849397050000000000000000000, .4950481849397050000000000000000000, .0056400726046650000000000000000000
+0,.4950481849397050000000000000000000, .0099036301205910000000000000000000, .0056400726046650000000000000000000
+0,.0099036301205910000000000000000000, .4950481849397050000000000000000000, .0056400726046650000000000000000000
+0,.4687166351095740000000000000000000, .4687166351095740000000000000000000, .0157117591812270000000000000000000
+0,.4687166351095740000000000000000000, .0625667297808520000000000000000000, .0157117591812270000000000000000000
+0,.0625667297808520000000000000000000, .4687166351095740000000000000000000, .0157117591812270000000000000000000
+0,.4145213368012770000000000000000000, .4145213368012770000000000000000000, .0235362512520970000000000000000000
+0,.4145213368012770000000000000000000, .1709573263974470000000000000000000, .0235362512520970000000000000000000
+0,.1709573263974470000000000000000000, .4145213368012770000000000000000000, .0235362512520970000000000000000000
+0,.2293995720428310000000000000000000, .2293995720428310000000000000000000, .0236817932681775000000000000000000
+0,.2293995720428310000000000000000000, .5412008559143370000000000000000000, .0236817932681775000000000000000000
+0,.5412008559143370000000000000000000, .2293995720428310000000000000000000, .0236817932681775000000000000000000
+0,.1144244951963300000000000000000000, .1144244951963300000000000000000000, .0155837645228970000000000000000000
+0,.1144244951963300000000000000000000, .7711510096073400000000000000000000, .0155837645228970000000000000000000
+0,.7711510096073400000000000000000000, .1144244951963300000000000000000000, .0155837645228970000000000000000000
+0,.0248113913634590000000000000000000, .0248113913634590000000000000000000, .0039878857325370000000000000000000
+0,.0248113913634590000000000000000000, .9503772172730820000000000000000000, .0039878857325370000000000000000000
+0,.9503772172730820000000000000000000, .0248113913634590000000000000000000, .0039878857325370000000000000000000
+0,.2687949970587610000000000000000000, .6363511745616600000000000000000000, .0184242013643660000000000000000000
+0,.6363511745616600000000000000000000, .0948538283795790000000000000000000, .0184242013643660000000000000000000
+0,.0948538283795790000000000000000000, .2687949970587610000000000000000000, .0184242013643660000000000000000000
+0,.2687949970587610000000000000000000, .0948538283795790000000000000000000, .0184242013643660000000000000000000
+0,.6363511745616600000000000000000000, .2687949970587610000000000000000000, .0184242013643660000000000000000000
+0,.0948538283795790000000000000000000, .6363511745616600000000000000000000, .0184242013643660000000000000000000
+0,.2917300667342880000000000000000000, .6901691599869050000000000000000000, .0087007316519110000000000000000000
+0,.6901691599869050000000000000000000, .0181007732788070000000000000000000, .0087007316519110000000000000000000
+0,.0181007732788070000000000000000000, .2917300667342880000000000000000000, .0087007316519110000000000000000000
+0,.2917300667342880000000000000000000, .0181007732788070000000000000000000, .0087007316519110000000000000000000
+0,.6901691599869050000000000000000000, .2917300667342880000000000000000000, .0087007316519110000000000000000000
+0,.0181007732788070000000000000000000, .6901691599869050000000000000000000, .0087007316519110000000000000000000
+0,.1263573854916690000000000000000000, .8514095378342410000000000000000000, .0077608934195225000000000000000000
+0,.8514095378342410000000000000000000, .0222330766740900000000000000000000, .0077608934195225000000000000000000
+0,.0222330766740900000000000000000000, .1263573854916690000000000000000000, .0077608934195225000000000000000000
+0,.1263573854916690000000000000000000, .0222330766740900000000000000000000, .0077608934195225000000000000000000
+0,.8514095378342410000000000000000000, .1263573854916690000000000000000000, .0077608934195225000000000000000000
+0,.0222330766740900000000000000000000, .8514095378342410000000000000000000, .0077608934195225000000000000000000
+NBF = 3
+IM_GAUSS1D(13)
+IM_GAUSS1D(13)
+IM_GAUSS1D(13)
diff --git a/cubature/TRIANGLE_17.IM b/cubature/TRIANGLE_17.IM
new file mode 100755
index 0000000..9291236
--- /dev/null
+++ b/cubature/TRIANGLE_17.IM
@@ -0,0 +1,73 @@
+% Integration formulae of order 17 on a triangle with 61 points
+% taken from "P. Solin, K. Segeth and I. Dolezel: Higher-Order 
+% Finite Element Methods", Chapman & Hall/CRC Press, 2003.
+% only double precision
+NAME = IM_TRIANGLE(17)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 61
+0,.3333333333333335000000000000000000, .3333333333333335000000000000000000, .0167185996454015000000000000000000
+0,.4971705405567740000000000000000000, .4971705405567740000000000000000000, .0025467077202535000000000000000000
+0,.4971705405567740000000000000000000, .0056589188864520000000000000000000, .0025467077202535000000000000000000
+0,.0056589188864520000000000000000000, .4971705405567740000000000000000000, .0025467077202535000000000000000000
+0,.4821763226246250000000000000000000, .4821763226246250000000000000000000, .0073354322638190000000000000000000
+0,.4821763226246250000000000000000000, .0356473547507510000000000000000000, .0073354322638190000000000000000000
+0,.0356473547507510000000000000000000, .4821763226246250000000000000000000, .0073354322638190000000000000000000
+0,.4502399690207820000000000000000000, .4502399690207820000000000000000000, .0121754391768360000000000000000000
+0,.4502399690207820000000000000000000, .0995200619584370000000000000000000, .0121754391768360000000000000000000
+0,.0995200619584370000000000000000000, .4502399690207820000000000000000000, .0121754391768360000000000000000000
+0,.4002662393773970000000000000000000, .4002662393773970000000000000000000, .0155537754344845000000000000000000
+0,.4002662393773970000000000000000000, .1994675212452060000000000000000000, .0155537754344845000000000000000000
+0,.1994675212452060000000000000000000, .4002662393773970000000000000000000, .0155537754344845000000000000000000
+0,.2521412679709530000000000000000000, .2521412679709530000000000000000000, .0156285556093100000000000000000000
+0,.2521412679709530000000000000000000, .4957174640580950000000000000000000, .0156285556093100000000000000000000
+0,.4957174640580950000000000000000000, .2521412679709530000000000000000000, .0156285556093100000000000000000000
+0,.1620470046584610000000000000000000, .1620470046584610000000000000000000, .0124078271698325000000000000000000
+0,.1620470046584610000000000000000000, .6759059906830770000000000000000000, .0124078271698325000000000000000000
+0,.6759059906830770000000000000000000, .1620470046584610000000000000000000, .0124078271698325000000000000000000
+0,.0758758822607460000000000000000000, .0758758822607460000000000000000000, .0070280365352785000000000000000000
+0,.0758758822607460000000000000000000, .8482482354785080000000000000000000, .0070280365352785000000000000000000
+0,.8482482354785080000000000000000000, .0758758822607460000000000000000000, .0070280365352785000000000000000000
+0,.0156547269678220000000000000000000, .0156547269678220000000000000000000, .0015973380868895000000000000000000
+0,.0156547269678220000000000000000000, .9686905460643560000000000000000000, .0015973380868895000000000000000000
+0,.9686905460643560000000000000000000, .0156547269678220000000000000000000, .0015973380868895000000000000000000
+0,.3343198673636580000000000000000000, .6554932038094230000000000000000000, .0040598276594965000000000000000000
+0,.6554932038094230000000000000000000, .0101869288269190000000000000000000, .0040598276594965000000000000000000
+0,.0101869288269190000000000000000000, .3343198673636580000000000000000000, .0040598276594965000000000000000000
+0,.3343198673636580000000000000000000, .0101869288269190000000000000000000, .0040598276594965000000000000000000
+0,.6554932038094230000000000000000000, .3343198673636580000000000000000000, .0040598276594965000000000000000000
+0,.0101869288269190000000000000000000, .6554932038094230000000000000000000, .0040598276594965000000000000000000
+0,.2922215377969440000000000000000000, .5723375905320200000000000000000000, .0134028711415815000000000000000000
+0,.5723375905320200000000000000000000, .1354408716710360000000000000000000, .0134028711415815000000000000000000
+0,.1354408716710360000000000000000000, .2922215377969440000000000000000000, .0134028711415815000000000000000000
+0,.2922215377969440000000000000000000, .1354408716710360000000000000000000, .0134028711415815000000000000000000
+0,.5723375905320200000000000000000000, .2922215377969440000000000000000000, .0134028711415815000000000000000000
+0,.1354408716710360000000000000000000, .5723375905320200000000000000000000, .0134028711415815000000000000000000
+0,.3195748854231900000000000000000000, .6260011902862280000000000000000000, .0092299966054110000000000000000000
+0,.6260011902862280000000000000000000, .0544239242905830000000000000000000, .0092299966054110000000000000000000
+0,.0544239242905830000000000000000000, .3195748854231900000000000000000000, .0092299966054110000000000000000000
+0,.3195748854231900000000000000000000, .0544239242905830000000000000000000, .0092299966054110000000000000000000
+0,.6260011902862280000000000000000000, .3195748854231900000000000000000000, .0092299966054110000000000000000000
+0,.0544239242905830000000000000000000, .6260011902862280000000000000000000, .0092299966054110000000000000000000
+0,.1907042241922920000000000000000000, .7964272149740710000000000000000000, .0042384342671640000000000000000000
+0,.7964272149740710000000000000000000, .0128685608336370000000000000000000, .0042384342671640000000000000000000
+0,.0128685608336370000000000000000000, .1907042241922920000000000000000000, .0042384342671640000000000000000000
+0,.1907042241922920000000000000000000, .0128685608336370000000000000000000, .0042384342671640000000000000000000
+0,.7964272149740710000000000000000000, .1907042241922920000000000000000000, .0042384342671640000000000000000000
+0,.0128685608336370000000000000000000, .7964272149740710000000000000000000, .0042384342671640000000000000000000
+0,.1804832116487460000000000000000000, .7523510059377290000000000000000000, .0091463983850125000000000000000000
+0,.7523510059377290000000000000000000, .0671657824135240000000000000000000, .0091463983850125000000000000000000
+0,.0671657824135240000000000000000000, .1804832116487460000000000000000000, .0091463983850125000000000000000000
+0,.1804832116487460000000000000000000, .0671657824135240000000000000000000, .0091463983850125000000000000000000
+0,.7523510059377290000000000000000000, .1804832116487460000000000000000000, .0091463983850125000000000000000000
+0,.0671657824135240000000000000000000, .7523510059377290000000000000000000, .0091463983850125000000000000000000
+0,.0807113136795640000000000000000000, .9046255040956080000000000000000000, .0033328160020825000000000000000000
+0,.9046255040956080000000000000000000, .0146631822248280000000000000000000, .0033328160020825000000000000000000
+0,.0146631822248280000000000000000000, .0807113136795640000000000000000000, .0033328160020825000000000000000000
+0,.0807113136795640000000000000000000, .0146631822248280000000000000000000, .0033328160020825000000000000000000
+0,.9046255040956080000000000000000000, .0807113136795640000000000000000000, .0033328160020825000000000000000000
+0,.0146631822248280000000000000000000, .9046255040956080000000000000000000, .0033328160020825000000000000000000
+NBF = 3
+IM_GAUSS1D(17)
+IM_GAUSS1D(17)
+IM_GAUSS1D(17)
diff --git a/cubature/TRIANGLE_19.IM b/cubature/TRIANGLE_19.IM
new file mode 100755
index 0000000..a61ffb3
--- /dev/null
+++ b/cubature/TRIANGLE_19.IM
@@ -0,0 +1,85 @@
+% Integration formulae of order 19 on a triangle with 73 points
+% taken from "P. Solin, K. Segeth and I. Dolezel: Higher-Order 
+% Finite Element Methods", Chapman & Hall/CRC Press, 2003.
+% only double precision
+NAME = IM_TRIANGLE(19)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 73
+0,.3333333333333335000000000000000000, .3333333333333335000000000000000000, .0164531656944595000000000000000000
+0,.4896099870730060000000000000000000, .4896099870730060000000000000000000, .0051653659456360000000000000000000
+0,.4896099870730060000000000000000000, .0207800258539870000000000000000000, .0051653659456360000000000000000000
+0,.0207800258539870000000000000000000, .4896099870730060000000000000000000, .0051653659456360000000000000000000
+0,.4545368926978930000000000000000000, .4545368926978930000000000000000000, .0111936236315080000000000000000000
+0,.4545368926978930000000000000000000, .0909262146042150000000000000000000, .0111936236315080000000000000000000
+0,.0909262146042150000000000000000000, .4545368926978930000000000000000000, .0111936236315080000000000000000000
+0,.4014166806494310000000000000000000, .4014166806494310000000000000000000, .0151330629347340000000000000000000
+0,.4014166806494310000000000000000000, .1971666387011380000000000000000000, .0151330629347340000000000000000000
+0,.1971666387011380000000000000000000, .4014166806494310000000000000000000, .0151330629347340000000000000000000
+0,.2555516544030980000000000000000000, .2555516544030980000000000000000000, .0152454839010990000000000000000000
+0,.2555516544030980000000000000000000, .4888966911938050000000000000000000, .0152454839010990000000000000000000
+0,.4888966911938050000000000000000000, .2555516544030980000000000000000000, .0152454839010990000000000000000000
+0,.1770779421521300000000000000000000, .1770779421521300000000000000000000, .0120796063708205000000000000000000
+0,.1770779421521300000000000000000000, .6458441156957410000000000000000000, .0120796063708205000000000000000000
+0,.6458441156957410000000000000000000, .1770779421521300000000000000000000, .0120796063708205000000000000000000
+0,.1100610532279520000000000000000000, .1100610532279520000000000000000000, .0080254017934005000000000000000000
+0,.1100610532279520000000000000000000, .7798778935440960000000000000000000, .0080254017934005000000000000000000
+0,.7798778935440960000000000000000000, .1100610532279520000000000000000000, .0080254017934005000000000000000000
+0,.0555286242518400000000000000000000, .0555286242518400000000000000000000, .0040422901308920000000000000000000
+0,.0555286242518400000000000000000000, .8889427514963210000000000000000000, .0040422901308920000000000000000000
+0,.8889427514963210000000000000000000, .0555286242518400000000000000000000, .0040422901308920000000000000000000
+0,.0126218637772290000000000000000000, .0126218637772290000000000000000000, .0010396810137425000000000000000000
+0,.0126218637772290000000000000000000, .9747562724455430000000000000000000, .0010396810137425000000000000000000
+0,.9747562724455430000000000000000000, .0126218637772290000000000000000000, .0010396810137425000000000000000000
+0,.3957547873569430000000000000000000, .6006337947946450000000000000000000, .0019424384524905000000000000000000
+0,.6006337947946450000000000000000000, .0036114178484120000000000000000000, .0019424384524905000000000000000000
+0,.0036114178484120000000000000000000, .3957547873569430000000000000000000, .0019424384524905000000000000000000
+0,.3957547873569430000000000000000000, .0036114178484120000000000000000000, .0019424384524905000000000000000000
+0,.6006337947946450000000000000000000, .3957547873569430000000000000000000, .0019424384524905000000000000000000
+0,.0036114178484120000000000000000000, .6006337947946430000000000000000000, .0019424384524905000000000000000000
+0,.3079299838804360000000000000000000, .5576032615887840000000000000000000, .0127870803060110000000000000000000
+0,.5576032615887840000000000000000000, .1344667545307800000000000000000000, .0127870803060110000000000000000000
+0,.1344667545307800000000000000000000, .3079299838804360000000000000000000, .0127870803060110000000000000000000
+0,.3079299838804360000000000000000000, .1344667545307800000000000000000000, .0127870803060110000000000000000000
+0,.5576032615887840000000000000000000, .3079299838804360000000000000000000, .0127870803060110000000000000000000
+0,.1344667545307800000000000000000000, .5576032615887840000000000000000000, .0127870803060110000000000000000000
+0,.2645669484065200000000000000000000, .7209870258173650000000000000000000, .0044404517866690000000000000000000
+0,.7209870258173650000000000000000000, .0144460257761150000000000000000000, .0044404517866690000000000000000000
+0,.0144460257761150000000000000000000, .2645669484065200000000000000000000, .0044404517866690000000000000000000
+0,.2645669484065200000000000000000000, .0144460257761150000000000000000000, .0044404517866690000000000000000000
+0,.7209870258173650000000000000000000, .2645669484065200000000000000000000, .0044404517866690000000000000000000
+0,.0144460257761150000000000000000000, .7209870258173650000000000000000000, .0044404517866690000000000000000000
+0,.3585393522059510000000000000000000, .5945270689558710000000000000000000, .0080622733808655000000000000000000
+0,.5945270689558710000000000000000000, .0469335788381780000000000000000000, .0080622733808655000000000000000000
+0,.0469335788381780000000000000000000, .3585393522059510000000000000000000, .0080622733808655000000000000000000
+0,.3585393522059510000000000000000000, .0469335788381780000000000000000000, .0080622733808655000000000000000000
+0,.5945270689558710000000000000000000, .3585393522059510000000000000000000, .0080622733808655000000000000000000
+0,.0469335788381780000000000000000000, .5945270689558710000000000000000000, .0080622733808655000000000000000000
+0,.1578074059685950000000000000000000, .8393314736808390000000000000000000, .0012459709087455000000000000000000
+0,.8393314736808390000000000000000000, .0028611203505670000000000000000000, .0012459709087455000000000000000000
+0,.0028611203505670000000000000000000, .1578074059685950000000000000000000, .0012459709087455000000000000000000
+0,.1578074059685950000000000000000000, .0028611203505670000000000000000000, .0012459709087455000000000000000000
+0,.8393314736808390000000000000000000, .1578074059685950000000000000000000, .0012459709087455000000000000000000
+0,.0028611203505670000000000000000000, .8393314736808390000000000000000000, .0012459709087455000000000000000000
+0,.0750505969759110000000000000000000, .7010879789261730000000000000000000, .0091214200594755000000000000000000
+0,.7010879789261730000000000000000000, .2238614240979160000000000000000000, .0091214200594755000000000000000000
+0,.2238614240979160000000000000000000, .0750505969759110000000000000000000, .0091214200594755000000000000000000
+0,.0750505969759110000000000000000000, .2238614240979160000000000000000000, .0091214200594755000000000000000000
+0,.7010879789261730000000000000000000, .0750505969759110000000000000000000, .0091214200594755000000000000000000
+0,.2238614240979160000000000000000000, .7010879789261730000000000000000000, .0091214200594755000000000000000000
+0,.1424216011133830000000000000000000, .8229313240698570000000000000000000, .0051292818680995000000000000000000
+0,.8229313240698570000000000000000000, .0346470748167600000000000000000000, .0051292818680995000000000000000000
+0,.0346470748167600000000000000000000, .1424216011133830000000000000000000, .0051292818680995000000000000000000
+0,.1424216011133830000000000000000000, .0346470748167600000000000000000000, .0051292818680995000000000000000000
+0,.8229313240698570000000000000000000, .1424216011133830000000000000000000, .0051292818680995000000000000000000
+0,.0346470748167600000000000000000000, .8229313240698570000000000000000000, .0051292818680995000000000000000000
+0,.0654946280829380000000000000000000, .9243442526207840000000000000000000, .0018999644276510000000000000000000
+0,.9243442526207840000000000000000000, .0101611192962780000000000000000000, .0018999644276510000000000000000000
+0,.0101611192962780000000000000000000, .0654946280829380000000000000000000, .0018999644276510000000000000000000
+0,.0654946280829380000000000000000000, .0101611192962780000000000000000000, .0018999644276510000000000000000000
+0,.9243442526207840000000000000000000, .0654946280829380000000000000000000, .0018999644276510000000000000000000
+0,.0101611192962780000000000000000000, .9243442526207840000000000000000000, .0018999644276510000000000000000000
+NBF = 3
+IM_GAUSS1D(19)
+IM_GAUSS1D(19)
+IM_GAUSS1D(19)
diff --git a/cubature/TRIANGLE_2.IM b/cubature/TRIANGLE_2.IM
new file mode 100755
index 0000000..6484c6c
--- /dev/null
+++ b/cubature/TRIANGLE_2.IM
@@ -0,0 +1,10 @@
+% Integration formulae of order 2 on a triangle with 3 points
+NAME = IM_TRIANGLE(2)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 1
+1, 0.1666666666666666666666666666666666666666666666666666666666666666, 0.1666666666666666666666666666666666666666666666666666666666666666, 0.1666666666666666666666666666666666666666666666666666666666666666
+NBF = 3
+IM_GAUSS1D(2)
+IM_GAUSS1D(2)
+IM_GAUSS1D(2)
diff --git a/cubature/TRIANGLE_3.IM b/cubature/TRIANGLE_3.IM
new file mode 100755
index 0000000..5fa11f4
--- /dev/null
+++ b/cubature/TRIANGLE_3.IM
@@ -0,0 +1,11 @@
+% Integration formulae of order 3 on a triangle with 4 points
+NAME = IM_TRIANGLE(3)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 2
+0, 0.3333333333333333333333333333333333333333333333333333333333333333, 0.3333333333333333333333333333333333333333333333333333333333333333, -0.28125
+1, 0.2, 0.2, 0.2604166666666666666666666666666666666666666666666666666666666666
+NBF = 3
+IM_GAUSS1D(3)
+IM_GAUSS1D(3)
+IM_GAUSS1D(3)
diff --git a/cubature/TRIANGLE_4.IM b/cubature/TRIANGLE_4.IM
new file mode 100755
index 0000000..7897e17
--- /dev/null
+++ b/cubature/TRIANGLE_4.IM
@@ -0,0 +1,12 @@
+% Integration formulae of order 4 on a triangle with 6 points
+% only double precision
+NAME = IM_TRIANGLE(4)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 2
+1, 0.445948490915965, 0.445948490915965, 0.111690794839005  % full symmetric 3 points
+1, 0.091576213509771, 0.091576213509771, 0.054975871827661  % full symmetric 3 points
+NBF = 3
+IM_GAUSS1D(4)
+IM_GAUSS1D(4)
+IM_GAUSS1D(4)
diff --git a/cubature/TRIANGLE_5.IM b/cubature/TRIANGLE_5.IM
new file mode 100755
index 0000000..e6f1b2f
--- /dev/null
+++ b/cubature/TRIANGLE_5.IM
@@ -0,0 +1,13 @@
+% Integration formulae of order 5 on a triangle with 7 points
+% only double precision
+NAME = IM_TRIANGLE(5)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 3
+0, 0.333333333333333, 0.333333333333333, 0.1125
+1, 0.470142064105115, 0.470142064105115, 0.0661970763942530  % full symmetric 3 points
+1, 0.101286507323456, 0.101286507323456, 0.0629695902724135  % full symmetric 3 points
+NBF = 3
+IM_GAUSS1D(5)
+IM_GAUSS1D(5)
+IM_GAUSS1D(5)
diff --git a/cubature/TRIANGLE_6.IM b/cubature/TRIANGLE_6.IM
new file mode 100755
index 0000000..be3f3aa
--- /dev/null
+++ b/cubature/TRIANGLE_6.IM
@@ -0,0 +1,13 @@
+% Integration formulae of order 6 on a triangle with 12 points
+% only double precision
+NAME = IM_TRIANGLE(6)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 3
+1, 0.0630890144915022283403316028708191, 0.0630890144915022283403316028708191,  0.0254224531851034084604684045534344 % full symmetric 3 points
+1, 0.249286745170910421291638553107019, 0.249286745170910421291638553107019,  0.0583931378631896830126448056927897 % full symmetric 3 points
+1, 0.310352451033784405416607733956552, 0.0531450498448169473532496716313981,  0.0414255378091867875967767282102212 % full symmetric 6 points
+NBF = 3
+IM_GAUSS1D(6)
+IM_GAUSS1D(6)
+IM_GAUSS1D(6)
diff --git a/cubature/TRIANGLE_7.IM b/cubature/TRIANGLE_7.IM
new file mode 100755
index 0000000..9e44364
--- /dev/null
+++ b/cubature/TRIANGLE_7.IM
@@ -0,0 +1,14 @@
+% Integration formulae of order 7 on a triangle with 13 points
+% only double precision
+NAME = IM_TRIANGLE(7)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 4
+1, 0.0651301029022, 0.0651301029022, 0.02667361780440 % full symmetric 3 points
+1, 0.3128654960049, 0.0486903154253, 0.03855688044515 % full symmetric 6 points
+1, 0.2603459660790, 0.2603459660790, 0.08780762871660 % full symmetric 3 points
+0, 0.3333333333333, 0.3333333333333, -0.07478502223385
+NBF = 3
+IM_GAUSS1D(7)
+IM_GAUSS1D(7)
+IM_GAUSS1D(7)
diff --git a/cubature/TRIANGLE_8.IM b/cubature/TRIANGLE_8.IM
new file mode 100755
index 0000000..9f4754b
--- /dev/null
+++ b/cubature/TRIANGLE_8.IM
@@ -0,0 +1,16 @@
+% Integration formulae of order 8 on a triangle with 16 points
+% taken from the  Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_TRIANGLE(8)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 5
+0, 0.333333333333333333333333333333333, 0.333333333333333333333333333333333, 0.0721578038388935841255455552445323
+1, 0.170569307751760206622293501491464, 0.170569307751760206622293501491464, 0.0516086852673591251408957751460645
+1, 0.0505472283170309754584235505965989, 0.0505472283170309754584235505965989, 0.0162292488115990401554629641708902
+1, 0.459292588292723156028815514494169, 0.459292588292723156028815514494169, 0.0475458171336423123969480521942921
+1, 0.728492392955404281241000379176061, 0.263112829634638113421785786284643, 0.0136151570872174971324223450369544
+NBF = 3
+IM_GAUSS1D(8)
+IM_GAUSS1D(8)
+IM_GAUSS1D(8)
diff --git a/cubature/TRIANGLE_9.IM b/cubature/TRIANGLE_9.IM
new file mode 100755
index 0000000..13490a7
--- /dev/null
+++ b/cubature/TRIANGLE_9.IM
@@ -0,0 +1,17 @@
+% Integration formulae of order 9 on a triangle with 19 points
+% taken from the  Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_TRIANGLE(9)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 6
+1, 0.333333333333333333333333333333333, 0.333333333333333333333333333333333, 0.0485678981413994169096209912536443
+1, 0.489682519198737627783706924836192, 0.489682519198737627783706924836192, 0.0156673501135695352684274156436046
+1, 0.437089591492936637269930364435354, 0.437089591492936637269930364435354, 0.0389137705023871396583696781497019
+1, 0.188203535619032730240961280467335, 0.188203535619032730240961280467335, 0.0398238694636051265164458871320226
+1, 0.0447295133944527098651065899662763, 0.0447295133944527098651065899662763, 0.0127888378293490156308393992794999
+1, 0.741198598784498020690079873523423, 0.0368384120547362836348175987833851, 0.0216417696886446886446886446886446 
+NBF = 3
+IM_GAUSS1D(9)
+IM_GAUSS1D(9)
+IM_GAUSS1D(9)
diff --git a/cubature/getfem_im_list.h b/cubature/getfem_im_list.h
index 6de018a..3c96002 100644
--- a/cubature/getfem_im_list.h
+++ b/cubature/getfem_im_list.h
@@ -1,27 +1,34 @@
 // This file is generated by make_getfem_list
 
-/* *********************************************************************** */
-/*                                                                         */
-/* Copyright (C) 2000-2003  Yves Renard.                                   */
-/*                                                                         */
-/* This file is a part of GETFEM++                                         */
-/*                                                                         */
-/* This program is free software; you can redistribute it and/or modify    */
-/* it under the terms of the GNU Lesser General Public License as          */
-/* published by the Free Software Foundation; version 2.1 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 Lesser General Public License for more details.                     */
-/*                                                                         */
-/* You should have received a copy of the GNU Lesser General Public        */
-/* License along with this program; if not, write to the Free Software     */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,  */
-/* USA.                                                                    */
-/*                                                                         */
-/* *********************************************************************** */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
+ License for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
 /**\file getfem_im_list.h
    \brief  This file is generated by make_getfem_list*/
 
diff --git a/cubature/make_getfem_im_list b/cubature/make_getfem_im_list
index 2438b99..2819578 100755
--- a/cubature/make_getfem_im_list
+++ b/cubature/make_getfem_im_list
@@ -104,32 +104,43 @@ while ($lss) {
   $nb_int += $nbpt;
 }
 
+$year = `date +%Y`;
+chomp $year;
+
 print TMPF2 "// This file is generated by make_getfem_list\n";
 print TMPF2 "
-/* *********************************************************************** */
-/*                                                                         */
-/* Copyright (C) 2000-2003  Yves Renard.                                   */
-/*                                                                         */
-/* This file is a part of GETFEM++                                         */
-/*                                                                         */
-/* This program is free software; you can redistribute it and/or modify    */
-/* it under the terms of the GNU Lesser General Public License as          */
-/* published by the Free Software Foundation; version 2.1 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 Lesser General Public License for more details.                     */
-/*                                                                         */
-/* You should have received a copy of the GNU Lesser General Public        */
-/* License along with this program; if not, write to the Free Software     */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,  */
-/* USA.                                                                    */
-/*                                                                         */
-/* *********************************************************************** */
+/*===========================================================================
+
+ Copyright (C) 2002-$year Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
 /**\\file getfem_im_list.h
-   \\brief  This file is generated by make_getfem_list*/
+   \\brief  This file is generated by cubature/make_getfem_list */
 \n\n
 namespace getfem {\n\n
   struct im_desc {
diff --git a/depcomp b/depcomp
index df8eea7..bd0ac08 100755
--- a/depcomp
+++ b/depcomp
@@ -1,10 +1,10 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2011-12-04.11; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
-# Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
+# 2011 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
@@ -44,7 +44,7 @@ Environment variables:
   object      Object file output by `PROGRAMS ARGS'.
   DEPDIR      directory where to store dependencies.
   depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputing dependencies.
+  tmpdepfile  Temporary file to use when outputting dependencies.
   libtool     Whether libtool is used (yes/no).
 
 Report bugs to <bug-automake at gnu.org>.
@@ -90,10 +90,18 @@ 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"
+   cygpath_u='sed s,\\\\,/,g'
    depmode=msvisualcpp
 fi
 
+if test "$depmode" = msvc7msys; then
+   # This is just like msvc7 but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u='sed s,\\\\,/,g'
+   depmode=msvc7
+fi
+
 case "$depmode" in
 gcc3)
 ## gcc 3 implements dependency tracking that does exactly what
@@ -158,10 +166,12 @@ gcc)
 ' < "$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.
+## 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 '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+      | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -405,6 +415,52 @@ tru64)
    rm -f "$tmpdepfile"
    ;;
 
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test "$stat" = 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/	\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/	/
+  G
+  p
+}' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 #nosideeffect)
   # This comment above is used by automake to tell side-effect
   # dependency tracking mechanisms from slower ones.
@@ -503,7 +559,9 @@ makedepend)
   touch "$tmpdepfile"
   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
   rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
   sed '1,2d' "$tmpdepfile" | tr ' ' '
 ' | \
 ## Some versions of the HPUX 10.20 sed can't process this invocation
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 4082ab4..a4f89b2 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -116,6 +116,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -134,6 +135,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -150,6 +152,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -214,6 +217,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -249,7 +253,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -518,10 +521,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/doc/sphinx/Makefile.am b/doc/sphinx/Makefile.am
index c27bd06..455cfd8 100644
--- a/doc/sphinx/Makefile.am
+++ b/doc/sphinx/Makefile.am
@@ -113,15 +113,15 @@ clean:
 	-cd $(srcdir)/source/matlab/images/; make clean
 	-cd $(srcdir)/source/python/images/; make clean
 	-cd $(srcdir)/source/scilab/images/; make clean
-	-rm $(srcdir)/source/matlab/cmdref.rst
-	-rm $(srcdir)/source/scilab/cmdref.rst
-	-rm $(srcdir)/source/python/cmdref.rst
+	-rm -f $(srcdir)/source/matlab/cmdref.rst
+	-rm -f $(srcdir)/source/scilab/cmdref.rst
+	-rm -f $(srcdir)/source/python/cmdref.rst
 
 $(srcdir)/source/matlab/cmdref.rst : $(top_srcdir)/interface/src/*.cc $(top_srcdir)/bin/extract_doc
 	$(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src matlab-doc > $(srcdir)/source/matlab/cmdref.rst || (rm -f $(srcdir)/source/matlab/cmdref.rst; /bin/false )
 
 $(srcdir)/source/scilab/cmdref.rst : $(top_srcdir)/interface/src/*.cc $(top_srcdir)/bin/extract_doc
-	$(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src scilab-doc > $(srcdir)/source/scilab/cmdref.rst || (rm -f $(srcdir)/source/scilab/cmdref.rst; /bin/false )
+	$(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src scilab-doc-rst > $(srcdir)/source/scilab/cmdref.rst || (rm -f $(srcdir)/source/scilab/cmdref.rst; /bin/false )
 
 $(srcdir)/source/python/cmdref.rst : $(top_srcdir)/interface/src/*.cc $(top_srcdir)/bin/extract_doc
 	$(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src python-doc > $(srcdir)/source/python/cmdref.rst || (rm -f $(srcdir)/source/python/cmdref.rst; /bin/false )
@@ -130,20 +130,28 @@ upload:
 	make html
 	-rm -fr homepage *.tar.gz
 	-mv build/html homepage
-	$(top_srcdir)/bin/upload_html --delete homepage
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_html --delete homepage)
 	-rm -fr getfem-$(DISTVERSION)-docs-html
 	-mv homepage getfem-$(DISTVERSION)-docs-html
 	tar -cf getfem-$(DISTVERSION)-docs-html.tar getfem-$(DISTVERSION)-docs-html
 	gzip -9 getfem-$(DISTVERSION)-docs-html.tar
-	$(top_srcdir)/bin/upload_documentation --delete getfem-$(DISTVERSION)-docs-html.tar.gz
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete getfem-$(DISTVERSION)-docs-html.tar.gz)
 	rm -fr getfem-$(DISTVERSION)-docs-html *.tar.gz
 	make pdf
 	-mv build/latex/*.pdf .
-	$(top_srcdir)/bin/upload_documentation --delete scilab_interface.pdf
-	$(top_srcdir)/bin/upload_documentation --delete python_interface.pdf
-	$(top_srcdir)/bin/upload_documentation --delete matlab_interface.pdf
-	$(top_srcdir)/bin/upload_documentation --delete getfem_userdoc.pdf
-	$(top_srcdir)/bin/upload_documentation --delete getfem_project.pdf
-	$(top_srcdir)/bin/upload_documentation --delete gmm_userdoc.pdf
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete scilab_interface.pdf)
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete python_interface.pdf)
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete matlab_interface.pdf)
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete getfem_userdoc.pdf)
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete getfem_project.pdf)
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete gmm_userdoc.pdf)
 	rm -fr *.pdf
 	rm -fr build
+
+
+EXTRA_DIST = \
+	source/userdoc/images/Makefile                  \
+	source/project/images/Makefile                  \
+	source/matlab/images/Makefile                  \
+	source/python/images/Makefile                  \
+	source/scilab/images/Makefile
\ No newline at end of file
diff --git a/doc/sphinx/Makefile.in b/doc/sphinx/Makefile.in
index c6165dc..a31c903 100644
--- a/doc/sphinx/Makefile.in
+++ b/doc/sphinx/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -78,6 +78,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -96,6 +97,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -112,6 +114,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -178,6 +181,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -213,7 +217,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -246,6 +249,13 @@ PAPEROPT_letter = -D latex_paper_size=letter
 ALLSPHINXOPTS = -b $(BUILDER) -d build/doctrees $(PAPEROPT_$(PAPER)) \
                   $(SPHINXOPTS) $(SOURCES) build/$(BUILDER)
 
+EXTRA_DIST = \
+	source/userdoc/images/Makefile                  \
+	source/project/images/Makefile                  \
+	source/matlab/images/Makefile                  \
+	source/python/images/Makefile                  \
+	source/scilab/images/Makefile
+
 all: all-am
 
 .SUFFIXES:
@@ -336,10 +346,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -520,15 +535,15 @@ clean:
 	-cd $(srcdir)/source/matlab/images/; make clean
 	-cd $(srcdir)/source/python/images/; make clean
 	-cd $(srcdir)/source/scilab/images/; make clean
-	-rm $(srcdir)/source/matlab/cmdref.rst
-	-rm $(srcdir)/source/scilab/cmdref.rst
-	-rm $(srcdir)/source/python/cmdref.rst
+	-rm -f $(srcdir)/source/matlab/cmdref.rst
+	-rm -f $(srcdir)/source/scilab/cmdref.rst
+	-rm -f $(srcdir)/source/python/cmdref.rst
 
 $(srcdir)/source/matlab/cmdref.rst : $(top_srcdir)/interface/src/*.cc $(top_srcdir)/bin/extract_doc
 	$(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src matlab-doc > $(srcdir)/source/matlab/cmdref.rst || (rm -f $(srcdir)/source/matlab/cmdref.rst; /bin/false )
 
 $(srcdir)/source/scilab/cmdref.rst : $(top_srcdir)/interface/src/*.cc $(top_srcdir)/bin/extract_doc
-	$(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src scilab-doc > $(srcdir)/source/scilab/cmdref.rst || (rm -f $(srcdir)/source/scilab/cmdref.rst; /bin/false )
+	$(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src scilab-doc-rst > $(srcdir)/source/scilab/cmdref.rst || (rm -f $(srcdir)/source/scilab/cmdref.rst; /bin/false )
 
 $(srcdir)/source/python/cmdref.rst : $(top_srcdir)/interface/src/*.cc $(top_srcdir)/bin/extract_doc
 	$(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src python-doc > $(srcdir)/source/python/cmdref.rst || (rm -f $(srcdir)/source/python/cmdref.rst; /bin/false )
@@ -537,21 +552,21 @@ upload:
 	make html
 	-rm -fr homepage *.tar.gz
 	-mv build/html homepage
-	$(top_srcdir)/bin/upload_html --delete homepage
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_html --delete homepage)
 	-rm -fr getfem-$(DISTVERSION)-docs-html
 	-mv homepage getfem-$(DISTVERSION)-docs-html
 	tar -cf getfem-$(DISTVERSION)-docs-html.tar getfem-$(DISTVERSION)-docs-html
 	gzip -9 getfem-$(DISTVERSION)-docs-html.tar
-	$(top_srcdir)/bin/upload_documentation --delete getfem-$(DISTVERSION)-docs-html.tar.gz
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete getfem-$(DISTVERSION)-docs-html.tar.gz)
 	rm -fr getfem-$(DISTVERSION)-docs-html *.tar.gz
 	make pdf
 	-mv build/latex/*.pdf .
-	$(top_srcdir)/bin/upload_documentation --delete scilab_interface.pdf
-	$(top_srcdir)/bin/upload_documentation --delete python_interface.pdf
-	$(top_srcdir)/bin/upload_documentation --delete matlab_interface.pdf
-	$(top_srcdir)/bin/upload_documentation --delete getfem_userdoc.pdf
-	$(top_srcdir)/bin/upload_documentation --delete getfem_project.pdf
-	$(top_srcdir)/bin/upload_documentation --delete gmm_userdoc.pdf
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete scilab_interface.pdf)
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete python_interface.pdf)
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete matlab_interface.pdf)
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete getfem_userdoc.pdf)
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete getfem_project.pdf)
+	(export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete gmm_userdoc.pdf)
 	rm -fr *.pdf
 	rm -fr build
 
diff --git a/doc/sphinx/source/matlab/images/Makefile b/doc/sphinx/source/matlab/images/Makefile
new file mode 100644
index 0000000..f2de9aa
--- /dev/null
+++ b/doc/sphinx/source/matlab/images/Makefile
@@ -0,0 +1,22 @@
+FIGS=hierarchy.fig
+
+EPSFIGS=$(FIGS:.fig=.eps)
+PNGFIGS=$(FIGS:.fig=.png)
+
+.SUFFIXES: .fig .eps .png
+
+.fig.eps:
+	../../../../../bin/fig2eps $(@:.eps=.fig)
+
+.eps.png:
+	convert $(@:.png=.eps) $@
+
+png: $(PNGFIGS)
+
+clean:
+	-rm -rf *.aux
+	-rm -rf *.dvi
+	-rm -rf *.log
+	-rm -rf *.bak
+	-rm -rf $(EPSFIGS)
+	-rm -rf $(PNGFIGS)
diff --git a/doc/sphinx/source/project/images/Makefile b/doc/sphinx/source/project/images/Makefile
new file mode 100644
index 0000000..3dc6d91
--- /dev/null
+++ b/doc/sphinx/source/project/images/Makefile
@@ -0,0 +1,24 @@
+FIGS=diagram.fig \
+     getfemelemelem.fig \
+     getfemtransgeo.fig
+
+EPSFIGS=$(FIGS:.fig=.eps)
+PNGFIGS=$(FIGS:.fig=.png)
+
+.SUFFIXES: .fig .eps .png
+
+.fig.eps:
+	../../../../../bin/fig2eps $(@:.eps=.fig)
+
+.eps.png:
+	convert $(@:.png=.eps) $@
+
+png: $(PNGFIGS)
+
+clean:
+	-rm -rf *.aux
+	-rm -rf *.dvi
+	-rm -rf *.log
+	-rm -rf *.bak
+	-rm -rf $(EPSFIGS)
+	-rm -rf $(PNGFIGS)
diff --git a/doc/sphinx/source/python/images/Makefile b/doc/sphinx/source/python/images/Makefile
new file mode 100644
index 0000000..f2de9aa
--- /dev/null
+++ b/doc/sphinx/source/python/images/Makefile
@@ -0,0 +1,22 @@
+FIGS=hierarchy.fig
+
+EPSFIGS=$(FIGS:.fig=.eps)
+PNGFIGS=$(FIGS:.fig=.png)
+
+.SUFFIXES: .fig .eps .png
+
+.fig.eps:
+	../../../../../bin/fig2eps $(@:.eps=.fig)
+
+.eps.png:
+	convert $(@:.png=.eps) $@
+
+png: $(PNGFIGS)
+
+clean:
+	-rm -rf *.aux
+	-rm -rf *.dvi
+	-rm -rf *.log
+	-rm -rf *.bak
+	-rm -rf $(EPSFIGS)
+	-rm -rf $(PNGFIGS)
diff --git a/doc/sphinx/source/scilab/images/Makefile b/doc/sphinx/source/scilab/images/Makefile
new file mode 100644
index 0000000..f2de9aa
--- /dev/null
+++ b/doc/sphinx/source/scilab/images/Makefile
@@ -0,0 +1,22 @@
+FIGS=hierarchy.fig
+
+EPSFIGS=$(FIGS:.fig=.eps)
+PNGFIGS=$(FIGS:.fig=.png)
+
+.SUFFIXES: .fig .eps .png
+
+.fig.eps:
+	../../../../../bin/fig2eps $(@:.eps=.fig)
+
+.eps.png:
+	convert $(@:.png=.eps) $@
+
+png: $(PNGFIGS)
+
+clean:
+	-rm -rf *.aux
+	-rm -rf *.dvi
+	-rm -rf *.log
+	-rm -rf *.bak
+	-rm -rf $(EPSFIGS)
+	-rm -rf $(PNGFIGS)
diff --git a/doc/sphinx/source/userdoc/images/Makefile b/doc/sphinx/source/userdoc/images/Makefile
new file mode 100644
index 0000000..ed32b36
--- /dev/null
+++ b/doc/sphinx/source/userdoc/images/Makefile
@@ -0,0 +1,96 @@
+FIGS=getfemlistargyris.fig                   \
+     getfemlistcubeQ1.fig                    \
+     getfemlistcubeQ3.fig                    \
+     getfemlistHCT.fig                       \
+     getfemlistincomplete.fig                \
+     getfemlistintmethodquad2.fig            \
+     getfemlistintmethodquad3.fig            \
+     getfemlistintmethodquad5.fig            \
+     getfemlistintmethodtetrahedron1.fig     \
+     getfemlistintmethodtetrahedron2.fig     \
+     getfemlistintmethodtetrahedron3.fig     \
+     getfemlistintmethodtetrahedron5.fig     \
+     getfemlistintmethodtriangle1.fig        \
+     getfemlistintmethodtriangle2comp.fig    \
+     getfemlistintmethodtriangle2.fig        \
+     getfemlistintmethodtriangle3.fig        \
+     getfemlistintmethodtriangle4.fig        \
+     getfemlistintmethodtriangle5.fig        \
+     getfemlistintmethodtriangle6.fig        \
+     getfemlistintmethodtriangle7.fig        \
+     getfemlistmorley.fig                    \
+     getfemlistnedelec.fig                   \
+     getfemlistprismP1.fig                   \
+     getfemlistprismP2P1.fig                 \
+     getfemlistprismP3.fig                   \
+     getfemlistquadc1composite.fig           \
+     getfemlistquadQ1.fig                    \
+     getfemlistquadQ3.fig                    \
+     getfemlistreducedHCT.fig                \
+     getfemlistreducedquadc1composite.fig    \
+     getfemlistRT0.fig                       \
+     getfemlistsegmentbubble.fig             \
+     getfemlistsegmenthermite.fig            \
+     getfemlistsegmenthier.fig               \
+     getfemlistsegmentPk.fig                 \
+     getfemlistsymbols00.fig                 \
+     getfemlistsymbols01.fig                 \
+     getfemlistsymbols02.fig                 \
+     getfemlistsymbols03.fig                 \
+     getfemlistsymbols04.fig                 \
+     getfemlistsymbols05.fig                 \
+     getfemlistsymbols06.fig                 \
+     getfemlistsymbols07.fig                 \
+     getfemlistsymbols08.fig                 \
+     getfemlistsymbols09.fig                 \
+     getfemlistsymbols10.fig                 \
+     getfemlistsymbols11.fig                 \
+     getfemlistsymbols12.fig                 \
+     getfemlistsymbols13.fig                 \
+     getfemlisttetrahedronhermite.fig        \
+     getfemlisttetrahedronP1bubbleface.fig   \
+     getfemlisttetrahedronP1bubble.fig       \
+     getfemlisttetrahedronP1.fig             \
+     getfemlisttetrahedronP2bubble.fig       \
+     getfemlisttetrahedronP2.fig             \
+     getfemlisttetrahedronP3bubble.fig       \
+     getfemlisttetrahedronP4.fig             \
+     getfemlisttrianglehermite.fig           \
+     getfemlisttriangleP1bubbleface.fig      \
+     getfemlisttriangleP1bubble.fig          \
+     getfemlisttriangleP1comp.fig            \
+     getfemlisttriangleP1comphier.fig        \
+     getfemlisttriangleP1.fig                \
+     getfemlisttriangleP1linbubble.fig       \
+     getfemlisttriangleP1nonconforming.fig   \
+     getfemlisttriangleP1withP2face.fig      \
+     getfemlisttriangleP2bubble.fig          \
+     getfemlisttriangleP2.fig                \
+     getfemlisttriangleP3.fig                \
+     getfemlisttriangleP6.fig                \
+     getfemuserelemf.fig                     \
+     getfemuserelem.fig                      \
+     getfemuserlinearsys.fig                 \
+     getfemuserlinsysDir.fig                 \
+     getfemuserrefine.fig
+
+EPSFIGS=$(FIGS:.fig=.eps)
+PNGFIGS=$(FIGS:.fig=.png)
+
+.SUFFIXES: .fig .eps .png
+
+.fig.eps:
+	../../../../../bin/fig2eps $(@:.eps=.fig)
+
+.eps.png:
+	convert $(@:.png=.eps) $@
+
+png: $(PNGFIGS)
+
+clean:
+	-rm -rf *.aux
+	-rm -rf *.dvi
+	-rm -rf *.log
+	-rm -rf *.bak
+	-rm -rf $(EPSFIGS)
+	-rm -rf $(PNGFIGS)
diff --git a/install-sh b/install-sh
index 6781b98..a9244eb 100755
--- a/install-sh
+++ b/install-sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2011-01-19.21; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -156,6 +156,10 @@ while test $# -ne 0; do
     -s) stripcmd=$stripprog;;
 
     -t) dst_arg=$2
+	# Protect names problematic for `test' and other utilities.
+	case $dst_arg in
+	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
+	esac
 	shift;;
 
     -T) no_target_directory=true;;
@@ -186,6 +190,10 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
     fi
     shift # arg
     dst_arg=$arg
+    # Protect names problematic for `test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
   done
 fi
 
@@ -200,7 +208,11 @@ if test $# -eq 0; then
 fi
 
 if test -z "$dir_arg"; then
-  trap '(exit $?); exit' 1 2 13 15
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
 
   # Set umask so as not to create temps with too-generous modes.
   # However, 'strip' requires both read and write access to temps.
@@ -228,9 +240,9 @@ fi
 
 for src
 do
-  # Protect names starting with `-'.
+  # Protect names problematic for `test' and other utilities.
   case $src in
-    -*) src=./$src;;
+    -* | [=\(\)!]) src=./$src;;
   esac
 
   if test -n "$dir_arg"; then
@@ -252,12 +264,7 @@ do
       echo "$0: no destination specified." >&2
       exit 1
     fi
-
     dst=$dst_arg
-    # Protect names starting with `-'.
-    case $dst in
-      -*) dst=./$dst;;
-    esac
 
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
@@ -385,7 +392,7 @@ do
 
       case $dstdir in
 	/*) prefix='/';;
-	-*) prefix='./';;
+	[-=\(\)!]*) prefix='./';;
 	*)  prefix='';;
       esac
 
@@ -403,7 +410,7 @@ do
 
       for d
       do
-	test -z "$d" && continue
+	test X"$d" = X && continue
 
 	prefix=$prefix$d
 	if test -d "$prefix"; then
diff --git a/interface/Makefile.in b/interface/Makefile.in
index f06dba1..1073078 100644
--- a/interface/Makefile.in
+++ b/interface/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -119,6 +119,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -137,6 +138,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -153,6 +155,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -217,6 +220,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -252,7 +256,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -526,10 +529,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/interface/src/Makefile.am b/interface/src/Makefile.am
index fad666d..6ea22fb 100644
--- a/interface/src/Makefile.am
+++ b/interface/src/Makefile.am
@@ -21,6 +21,8 @@ PSEUDO_MFUNCTIONS = \
 	gf_spmat_get.cc \
 	gf_linsolve.cc \
 	gf_util.cc \
+	gf_cont_struct.cc \
+	gf_cont_struct_get.cc \
 	gf_cvstruct_get.cc \
 	gf_geotrans.cc \
 	gf_geotrans_get.cc \
@@ -41,6 +43,8 @@ PSEUDO_MFUNCTIONS = \
 	gf_model_get.cc \
 	gf_model_set.cc \
 	gf_eltm.cc \
+	gf_mesher_object.cc \
+	gf_mesher_object_get.cc \
 	gf_mesh.cc \
 	gf_mesh_set.cc \
 	gf_mesh_get.cc \
@@ -91,8 +95,10 @@ libgetfemint_la_SOURCES = \
 	getfemint_pgt.cc \
 	getfemint_convex_structure.cc \
 	gfi_array.h \
+	getfemint_cont_struct.h \
 	getfemint_convex_structure.h \
 	getfemint_mesh.h \
+	getfemint_mesher_object.h \
 	getfemint_misc.h \
 	getfemint_std.h \
 	gfi_rpc.h \
diff --git a/interface/src/Makefile.in b/interface/src/Makefile.in
index 276749a..66f5ea4 100644
--- a/interface/src/Makefile.in
+++ b/interface/src/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -55,16 +55,18 @@ CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 libgetfemint_la_LIBADD =
 am__objects_1 = gf_spmat.lo gf_spmat_set.lo gf_spmat_get.lo \
-	gf_linsolve.lo gf_util.lo gf_cvstruct_get.lo gf_geotrans.lo \
+	gf_linsolve.lo gf_util.lo gf_cont_struct.lo \
+	gf_cont_struct_get.lo gf_cvstruct_get.lo gf_geotrans.lo \
 	gf_geotrans_get.lo gf_compute.lo gf_mesh_fem.lo \
 	gf_mesh_fem_set.lo gf_mesh_fem_get.lo gf_mesh_im.lo \
 	gf_mesh_im_set.lo gf_mesh_im_get.lo gf_mdbrick.lo \
 	gf_mdbrick_get.lo gf_mdbrick_set.lo gf_mdstate.lo \
 	gf_mdstate_get.lo gf_mdstate_set.lo gf_model.lo \
-	gf_model_get.lo gf_model_set.lo gf_eltm.lo gf_mesh.lo \
-	gf_mesh_set.lo gf_mesh_get.lo gf_slice.lo gf_slice_get.lo \
-	gf_slice_set.lo gf_levelset.lo gf_levelset_get.lo \
-	gf_levelset_set.lo gf_mesh_levelset.lo gf_mesh_levelset_get.lo \
+	gf_model_get.lo gf_model_set.lo gf_eltm.lo gf_mesher_object.lo \
+	gf_mesher_object_get.lo gf_mesh.lo gf_mesh_set.lo \
+	gf_mesh_get.lo gf_slice.lo gf_slice_get.lo gf_slice_set.lo \
+	gf_levelset.lo gf_levelset_get.lo gf_levelset_set.lo \
+	gf_mesh_levelset.lo gf_mesh_levelset_get.lo \
 	gf_mesh_levelset_set.lo gf_precond.lo gf_precond_get.lo \
 	gf_asm.lo gf_fem.lo gf_fem_get.lo gf_integ.lo gf_integ_get.lo \
 	gf_global_function.lo gf_global_function_get.lo \
@@ -174,6 +176,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -192,6 +195,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -208,6 +212,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -272,6 +277,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -307,7 +313,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -337,6 +342,8 @@ PSEUDO_MFUNCTIONS = \
 	gf_spmat_get.cc \
 	gf_linsolve.cc \
 	gf_util.cc \
+	gf_cont_struct.cc \
+	gf_cont_struct_get.cc \
 	gf_cvstruct_get.cc \
 	gf_geotrans.cc \
 	gf_geotrans_get.cc \
@@ -357,6 +364,8 @@ PSEUDO_MFUNCTIONS = \
 	gf_model_get.cc \
 	gf_model_set.cc \
 	gf_eltm.cc \
+	gf_mesher_object.cc \
+	gf_mesher_object_get.cc \
 	gf_mesh.cc \
 	gf_mesh_set.cc \
 	gf_mesh_get.cc \
@@ -406,8 +415,10 @@ libgetfemint_la_SOURCES = \
 	getfemint_pgt.cc \
 	getfemint_convex_structure.cc \
 	gfi_array.h \
+	getfemint_cont_struct.h \
 	getfemint_convex_structure.h \
 	getfemint_mesh.h \
+	getfemint_mesher_object.h \
 	getfemint_misc.h \
 	getfemint_std.h \
 	gfi_rpc.h \
@@ -496,7 +507,7 @@ clean-noinstLTLIBRARIES:
 	  echo "rm -f \"$${dir}/so_locations\""; \
 	  rm -f "$${dir}/so_locations"; \
 	done
-libgetfemint.la: $(libgetfemint_la_OBJECTS) $(libgetfemint_la_DEPENDENCIES) 
+libgetfemint.la: $(libgetfemint_la_OBJECTS) $(libgetfemint_la_DEPENDENCIES) $(EXTRA_libgetfemint_la_DEPENDENCIES) 
 	$(CXXLINK)  $(libgetfemint_la_OBJECTS) $(libgetfemint_la_LIBADD) $(LIBS)
 install-binPROGRAMS: $(bin_PROGRAMS)
 	@$(NORMAL_INSTALL)
@@ -541,7 +552,7 @@ clean-binPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-getfem_server$(EXEEXT): $(getfem_server_OBJECTS) $(getfem_server_DEPENDENCIES) 
+getfem_server$(EXEEXT): $(getfem_server_OBJECTS) $(getfem_server_DEPENDENCIES) $(EXTRA_getfem_server_DEPENDENCIES) 
 	@rm -f getfem_server$(EXEEXT)
 	$(getfem_server_LINK) $(getfem_server_OBJECTS) $(getfem_server_LDADD) $(LIBS)
 
@@ -572,6 +583,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfemint_workspace.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_asm.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_compute.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_cont_struct.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_cont_struct_get.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_cvstruct_get.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_delete.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_eltm.Plo at am__quote@
@@ -605,6 +618,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_mesh_levelset_get.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_mesh_levelset_set.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_mesh_set.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_mesher_object.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_mesher_object_get.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_model.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_model_get.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_model_set.Plo at am__quote@
@@ -883,10 +898,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/interface/src/getfem_interface.cc b/interface/src/getfem_interface.cc
index 517b95f..46049a9 100644
--- a/interface/src/getfem_interface.cc
+++ b/interface/src/getfem_interface.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: getfem_interface.cc 3468 2010-02-24 20:12:15Z renard $
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: getfem_interface.cc 4114 2012-07-06 11:20:10Z renard $
 #include <getfem_interface.h>
 #include <getfemint.h>
 
@@ -36,8 +36,12 @@ void gf_global_function(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
 void gf_global_function_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
 void gf_fem(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
 void gf_fem_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
+void gf_cont_struct(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
+void gf_cont_struct_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
 void gf_cvstruct_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
 void gf_mesh(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
+void gf_mesher_object(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
+void gf_mesher_object_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
 void gf_mesh_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
 void gf_mesh_set(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
 void gf_mesh_fem(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
@@ -134,9 +138,13 @@ char* getfem_interface_main(int config_id, const char *function,
     subc_tab["integ_get"] = gf_integ_get;
     subc_tab["global_function"] = gf_global_function;
     subc_tab["global_function_get"] = gf_global_function_get;
+    subc_tab["cont_struct"] = gf_cont_struct;
+    subc_tab["cont_struct_get"] = gf_cont_struct_get;
     subc_tab["fem"] = gf_fem;
     subc_tab["fem_get"] = gf_fem_get;
     subc_tab["cvstruct_get"] = gf_cvstruct_get;
+    subc_tab["mesher_object"] = gf_mesher_object;
+    subc_tab["mesher_object_get"] = gf_mesher_object_get;
     subc_tab["mesh"] = gf_mesh;
     subc_tab["mesh_get"] = gf_mesh_get;
     subc_tab["mesh_set"] = gf_mesh_set;
diff --git a/interface/src/getfem_interface.h b/interface/src/getfem_interface.h
index 896be83..3eb36c5 100644
--- a/interface/src/getfem_interface.h
+++ b/interface/src/getfem_interface.h
@@ -1,22 +1,23 @@
 /* -*- c++ -*- (enables emacs c++ mode) */
 /*===========================================================================
-
- Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
  This file is a part of GETFEM++
-
+ 
  Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
  under  the  terms  of the  GNU  Lesser General Public License as published
- by  the  Free Software Foundation;  either version 2.1 of the License,  or
- (at your option) any later version.
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
- License for more details.
+ License and GCC Runtime Library Exception for more details.
  You  should  have received a copy of the GNU Lesser General Public License
  along  with  this program;  if not, write to the Free Software Foundation,
  Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-
+ 
  As a special exception, you  may use  this file  as it is a part of a free
  software  library  without  restriction.  Specifically,  if   other  files
  instantiate  templates  or  use macros or inline functions from this file,
@@ -25,8 +26,8 @@
  to be covered  by the GNU Lesser General Public License.  This   exception
  does not  however  invalidate  any  other  reasons why the executable file
  might be covered by the GNU Lesser General Public License.
-
- ===========================================================================*/
+ 
+===========================================================================*/
 
 #ifndef GETFEM_INTERFACE_H
 #define GETFEM_INTERFACE_H
diff --git a/interface/src/getfemint.cc b/interface/src/getfemint.cc
index f083378..1904a7a 100644
--- a/interface/src/getfemint.cc
+++ b/interface/src/getfemint.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Y. Renard, J. Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Y. Renard, J. Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <map>
 #include <getfemint.h>
@@ -42,6 +42,11 @@
 #include <getfemint_levelset.h>
 #include <getfemint_mesh_levelset.h>
 #include <getfemint_global_function.h>
+#include <getfemint_mesher_object.h>
+#include <getfemint_cont_struct.h>
+#include <getfem/getfem_mat_elem_type.h>
+#include <getfem/getfem_mesh_fem_global_function.h>
+#include <getfem/getfem_mesher.h>
 
 #include <getfemint_misc.h>
 //#ifdef MAINTAINER_MODE
@@ -63,6 +68,7 @@ namespace getfemint {
   */
   const char *name_of_getfemint_class_id(unsigned cid) {
     static const char *cname[GETFEMINT_NB_CLASS] = {
+      "gfContStruct",
       "gfCvStruct",
       "gfEltm",
       "gfFem",
@@ -76,6 +82,7 @@ namespace getfemint {
       "gfMeshFem",
       "gfMeshIm",
       "gfMeshLevelSet",
+      "gfMesherObject",
       "gfModel",
       "gfPrecond",
       "gfSlice",
@@ -396,6 +403,24 @@ namespace getfemint {
   }
 
   bool
+  mexarg_in::is_mesher_object() {
+    id_type id, cid;
+    if (is_object_id(&id, &cid) && cid == MESHER_OBJECT_CLASS_ID) {
+      getfem_object *o=workspace().object(id, name_of_getfemint_class_id(cid));
+      return (object_is_mesher_object(o));
+    } else return false;
+  }
+
+  bool
+  mexarg_in::is_cont_struct() {
+    id_type id, cid;
+    if (is_object_id(&id, &cid) && cid == CONT_STRUCT_CLASS_ID) {
+      getfem_object *o=workspace().object(id, name_of_getfemint_class_id(cid));
+      return (object_is_cont_struct(o));
+    } else return false;
+  }
+
+  bool
   mexarg_in::is_gsparse() {
     id_type id, cid;
     if (is_object_id(&id, &cid) && cid == GSPARSE_CLASS_ID) {
@@ -650,12 +675,21 @@ namespace getfemint {
     error_if_nonwritable(o,writeable);
     return object_to_mesh_levelset(o);
   }
-
-  /*  getfem::mesh_level_set *
+  
+  getfem::mesh_level_set *
   mexarg_in::to_mesh_levelset() {
     return &to_getfemint_mesh_levelset(true)->mesh_levelset();
   }
-  */
+  getfem::level_set *
+  mexarg_in::to_levelset() {
+    return &to_getfemint_levelset(true)->levelset();
+  }
+
+  // getfem::level_set *
+//   mexarg_in::to_const_levelset() {
+//     return &to_getfemint_levelset(false)->levelset();
+//   }
+
 
   /*
     check if the argument is a valid handle to a global_function,
@@ -673,6 +707,7 @@ namespace getfemint {
     error_if_nonwritable(o, writeable);
     return object_to_global_function(o);
   }
+
   getfem::abstract_xy_function *
   mexarg_in::to_global_function() {
     return &to_getfemint_global_function(true)->global_function();
@@ -683,6 +718,61 @@ namespace getfemint {
     return &to_getfemint_global_function(false)->global_function();
   }
 
+  /*
+    check if the argument is a valid handle to a mesher_object,
+    and returns it
+  */
+  getfemint_mesher_object *
+  mexarg_in::to_getfemint_mesher_object(bool writeable) {
+    id_type id, cid;
+    to_object_id(&id,&cid);
+    if (cid != MESHER_OBJECT_CLASS_ID) {
+      THROW_BADARG("argument " << argnum << " should be a mesher_object " <<
+                   "descriptor, its class is " << name_of_getfemint_class_id(cid));
+    }
+    getfem_object *o = workspace().object(id,name_of_getfemint_class_id(cid));
+    error_if_nonwritable(o, writeable);
+    return object_to_mesher_object(o);
+  }
+
+  getfem::mesher_signed_distance *
+  mexarg_in::to_mesher_object() {
+    return &to_getfemint_mesher_object(true)->mesher_object();
+  }
+
+  const getfem::mesher_signed_distance *
+  mexarg_in::to_const_mesher_object() {
+    return &to_getfemint_mesher_object(false)->mesher_object();
+  }
+
+  /*
+    check if the argument is a valid handle to a cont_struct,
+    and return it
+  */
+  getfemint_cont_struct *
+  mexarg_in::to_getfemint_cont_struct(bool writeable) {
+    id_type id, cid;
+    to_object_id(&id,&cid);
+    if (cid != CONT_STRUCT_CLASS_ID) {
+      THROW_BADARG("argument " << argnum << " should be a cont_struct " <<
+                   "descriptor, its class is " << name_of_getfemint_class_id(cid));
+    }
+    getfem_object *o = workspace().object(id,name_of_getfemint_class_id(cid));
+    error_if_nonwritable(o, writeable);
+    return object_to_cont_struct(o);
+  }
+
+  const getfem::cont_struct_getfem_model *
+  mexarg_in::to_const_cont_struct() {
+    return &to_getfemint_cont_struct(false)->cont_struct();
+  }
+
+  getfem::cont_struct_getfem_model *
+  mexarg_in::to_cont_struct() {
+    return &to_getfemint_cont_struct(true)->cont_struct();
+  }
+
+
   getfemint_precond *
   mexarg_in::to_precond() {
     id_type id, cid;
diff --git a/interface/src/getfemint.h b/interface/src/getfemint.h
index 6f5b75e..1c1b350 100644
--- a/interface/src/getfemint.h
+++ b/interface/src/getfemint.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Y. Renard, J. Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Y. Renard, J. Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**\file getfemint.h
    \brief main getfem-interface header.
@@ -35,29 +36,23 @@
 #ifndef GETFEMINT_H__
 #define GETFEMINT_H__
 
-/***************************************
- * Interface a new class:
- *    - add it to enum getfemint_class_id in gfi_array.h
- *    - add it to name_of_getfemint_class_id etc in getfemint.cc
- *    - add it in the list at the bottom of getfem.base.py
- */
-
-
 #include <getfemint_std.h>
 #include <set>
 #include <getfem/getfem_mesh_fem.h>
 #include <gfi_array.h>
 #include <getfem/dal_shared_ptr.h>
-#include <getfem/getfem_mat_elem_type.h>
-#include <getfem/getfem_mesh_fem_global_function.h>
 
 namespace getfem {
   class stored_mesh_slice;
   class mesh;
   class mesh_fem;
   class mat_elem_type;
+  typedef boost::intrusive_ptr<const mat_elem_type> pmat_elem_type;
   class level_set;
   class mesh_level_set;
+  class abstract_xy_function;
+  class mesher_signed_distance;
+  class cont_struct_getfem_model;
 }
 
 namespace getfemint
@@ -104,6 +99,8 @@ namespace getfemint
   class getfemint_levelset;
   class getfemint_mesh_levelset;
   class getfemint_global_function;
+  class getfemint_mesher_object;
+  class getfemint_cont_struct;
   class gsparse;
 
   class sub_index : public gmm::unsorted_sub_index{
@@ -404,6 +401,8 @@ namespace getfemint {
     bool                                 is_levelset();
     bool                                 is_mesh_levelset();
     bool                                 is_global_function();
+    bool                                 is_mesher_object();
+    bool                                 is_cont_struct();
     bool                                 is_sparse() { return (gfi_array_get_class(arg) == GFI_SPARSE || is_gsparse()); };
     bool                                 is_gsparse();
     bool                                 is_complex(); /* true for complex garrays AND complex sparse matrices (native or gsparse) */
@@ -433,12 +432,19 @@ namespace getfemint {
     getfem::mesh *                       to_mesh();
     getfemint_mesh_slice *               to_getfemint_mesh_slice(bool writeable=false);
     getfemint_levelset *                 to_getfemint_levelset(bool writeable=false);
-    //getfem::level_set *                  to_levelset();
+    // const getfem::level_set *            to_const_levelset();
+    getfem::level_set *                  to_levelset();
     getfemint_mesh_levelset *            to_getfemint_mesh_levelset(bool writeable=false);
-    //getfem::mesh_level_set *             to_mesh_levelset();
+    getfem::mesh_level_set *             to_mesh_levelset();
     const getfem::abstract_xy_function * to_const_global_function();
+    const getfem::mesher_signed_distance * to_const_mesher_object();
     getfem::abstract_xy_function *       to_global_function();
+    getfem::mesher_signed_distance *     to_mesher_object();
+    const getfem::cont_struct_getfem_model * to_const_cont_struct();
+    getfem::cont_struct_getfem_model *   to_cont_struct();
     getfemint_global_function *          to_getfemint_global_function(bool writeable=false);
+    getfemint_mesher_object *            to_getfemint_mesher_object(bool writeable=false);
+    getfemint_cont_struct *              to_getfemint_cont_struct(bool writable=false);
     getfem::pintegration_method          to_integration_method();
     getfemint_pfem*                      to_getfemint_pfem();
     getfem::pfem                         to_fem();
diff --git a/interface/src/getfemint_cont_struct.h b/interface/src/getfemint_cont_struct.h
new file mode 100644
index 0000000..07a12a1
--- /dev/null
+++ b/interface/src/getfemint_cont_struct.h
@@ -0,0 +1,86 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2012-2012 Tomas Ligursky, Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+
+/**\file getfemint_cont_struct.h
+   \brief interface for the continuation in Getfem models
+*/
+
+#include <getfemint_std.h>
+#include <getfemint_object.h>
+#include <getfem/getfem_continuation.h>
+
+namespace getfemint {
+
+  class getfemint_cont_struct : public getfem_object {
+  private:
+    getfem::cont_struct_getfem_model *s;
+    getfemint_cont_struct(getfem::cont_struct_getfem_model *s_) {
+      assert(workspace == 0);
+      s = s_;
+      ikey = getfem_object::internal_key_type(s);
+    }
+
+  public:
+    ~getfemint_cont_struct() {}
+    id_type class_id() const { return CONT_STRUCT_CLASS_ID; }
+    size_type memsize() const {
+      size_type szd = sizeof(double);
+      return 2* gmm::vect_size(s->b_x()) * szd
+	+ gmm::vect_size(s->get_tau_hist()) * szd
+	+ sizeof(getfem::cont_struct_getfem_model);
+    }
+
+    static getfemint_cont_struct*
+    get_from(getfem::cont_struct_getfem_model *ps, int flags = 0) {
+      getfem_object *o =
+	getfemint::workspace().object(getfem_object::internal_key_type(ps));
+      getfemint_cont_struct *gs = NULL;
+      if (!o) {
+	gs = new getfemint_cont_struct(ps);
+	gs->set_flags(flags);
+	getfemint::workspace().push_object(gs);
+      } else gs = dynamic_cast<getfemint_cont_struct*>(o);
+      assert(gs);
+      return gs;
+    }
+
+    getfem::cont_struct_getfem_model &cont_struct() { return *s; }
+  };
+  
+  inline bool object_is_cont_struct(getfem_object *o) {
+    return o->class_id() == CONT_STRUCT_CLASS_ID;
+  }
+
+  inline getfemint_cont_struct* object_to_cont_struct(getfem_object *o) {
+    if (object_is_cont_struct(o)) return (getfemint_cont_struct*)o;
+    else THROW_INTERNAL_ERROR;
+  }
+}
diff --git a/interface/src/getfemint_convex_structure.cc b/interface/src/getfemint_convex_structure.cc
index 2f2f3a7..9daa196 100644
--- a/interface/src/getfemint_convex_structure.cc
+++ b/interface/src/getfemint_convex_structure.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include <getfemint_convex_structure.h>
diff --git a/interface/src/getfemint_convex_structure.h b/interface/src/getfemint_convex_structure.h
index 31b24a7..270dda9 100644
--- a/interface/src/getfemint_convex_structure.h
+++ b/interface/src/getfemint_convex_structure.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier. Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier. Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #ifndef GETFEMINT_CONVEX_STRUCTURE_H__
diff --git a/interface/src/getfemint_global_function.cc b/interface/src/getfemint_global_function.cc
index 6b9aba7..9e9b215 100644
--- a/interface/src/getfemint_global_function.cc
+++ b/interface/src/getfemint_global_function.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009 Luis Saavedra.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: getfemint_global_function.cc 3224 2009-10-13 21:57:11Z lsaavedr $
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Luis Saavedra.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: getfemint_global_function.cc 4114 2012-07-06 11:20:10Z renard $
 #include <getfemint_global_function.h>
 #include <getfemint_workspace.h>
 
diff --git a/interface/src/getfemint_global_function.h b/interface/src/getfemint_global_function.h
index 673fade..65f719f 100644
--- a/interface/src/getfemint_global_function.h
+++ b/interface/src/getfemint_global_function.h
@@ -1,33 +1,34 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009 Luis Saavedra.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
-// $Id: getfemint_global_function.h 3224 2009-10-13 21:57:11Z lsaavedr $
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Luis Saavedra.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+// $Id: getfemint_global_function.h 4114 2012-07-06 11:20:10Z renard $
 /**\file getfemint_global_function.h
    \brief getfem::abstract_xy_function wrapper class.
 */
diff --git a/interface/src/getfemint_gsparse.cc b/interface/src/getfemint_gsparse.cc
old mode 100755
new mode 100644
index 2fcfedb..326c118
--- a/interface/src/getfemint_gsparse.cc
+++ b/interface/src/getfemint_gsparse.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_gsparse.h>
 
diff --git a/interface/src/getfemint_gsparse.h b/interface/src/getfemint_gsparse.h
index 71b68de..28adfd3 100644
--- a/interface/src/getfemint_gsparse.h
+++ b/interface/src/getfemint_gsparse.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #ifndef GETFEMINT_GSPARSE_H__
diff --git a/interface/src/getfemint_gsparse_misc.cc b/interface/src/getfemint_gsparse_misc.cc
old mode 100755
new mode 100644
index 9568e4a..d848ecd
--- a/interface/src/getfemint_gsparse_misc.cc
+++ b/interface/src/getfemint_gsparse_misc.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_gsparse_misc.h>
 #include <gmm/gmm_inoutput.h>
diff --git a/interface/src/getfemint_gsparse_misc.h b/interface/src/getfemint_gsparse_misc.h
index 2ac3ff6..dc4a699 100644
--- a/interface/src/getfemint_gsparse_misc.h
+++ b/interface/src/getfemint_gsparse_misc.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #ifndef GETFEMINT_GSPARSE_MISC_H
 #define GETFEMINT_GSPARSE_MISC_H
diff --git a/interface/src/getfemint_integ.cc b/interface/src/getfemint_integ.cc
index 487cd7c..5f2c3f2 100644
--- a/interface/src/getfemint_integ.cc
+++ b/interface/src/getfemint_integ.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include <getfemint_integ.h>
diff --git a/interface/src/getfemint_integ.h b/interface/src/getfemint_integ.h
index 0a81501..49d2bb1 100644
--- a/interface/src/getfemint_integ.h
+++ b/interface/src/getfemint_integ.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #ifndef GETFEMINT_INTEG_H__
diff --git a/interface/src/getfemint_levelset.cc b/interface/src/getfemint_levelset.cc
index 13258e4..134d6fd 100644
--- a/interface/src/getfemint_levelset.cc
+++ b/interface/src/getfemint_levelset.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2009 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfemint_levelset.h>
 #include <getfemint_levelset.h>
 #include <getfemint_workspace.h>
@@ -63,7 +63,7 @@ namespace getfemint {
       ls->values(idx)[i] = p.eval(x.begin());
     }
   }
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
   void getfemint_levelset::values_from_func(unsigned idx,
                                             const std::string &s) {
     const getfem::mesh_fem &mf = levelset().get_mesh_fem();
diff --git a/interface/src/getfemint_levelset.h b/interface/src/getfemint_levelset.h
index dac521f..b4f21ce 100644
--- a/interface/src/getfemint_levelset.h
+++ b/interface/src/getfemint_levelset.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier. Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**\file getfemint_mesh_fem.h
    \brief getfem::mesh_fem wrapper class
@@ -67,7 +68,7 @@ namespace getfemint
 
     static getfemint_levelset* get_from(getfem::level_set *ls, int flags=0);
     void values_from_poly(unsigned idx, const std::string &s);
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
     void values_from_func(unsigned idx, const std::string &s);
 #endif
   };
diff --git a/interface/src/getfemint_matelem.cc b/interface/src/getfemint_matelem.cc
index 0d266d3..4d91fca 100644
--- a/interface/src/getfemint_matelem.cc
+++ b/interface/src/getfemint_matelem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include <getfemint_matelem.h>
diff --git a/interface/src/getfemint_matelem.h b/interface/src/getfemint_matelem.h
index a7f88d6..e5ac2b8 100644
--- a/interface/src/getfemint_matelem.h
+++ b/interface/src/getfemint_matelem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #ifndef GETFEMINT_MATELEM_H__
diff --git a/interface/src/getfemint_matelemtype.cc b/interface/src/getfemint_matelemtype.cc
index e4607c8..0c2102d 100644
--- a/interface/src/getfemint_matelemtype.cc
+++ b/interface/src/getfemint_matelemtype.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include <getfemint_matelemtype.h>
diff --git a/interface/src/getfemint_matelemtype.h b/interface/src/getfemint_matelemtype.h
index 6ce50e9..1cf0b87 100644
--- a/interface/src/getfemint_matelemtype.h
+++ b/interface/src/getfemint_matelemtype.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #ifndef GETFEMINT_MATELEMTYPE_H__
diff --git a/interface/src/getfemint_mdbrick.cc b/interface/src/getfemint_mdbrick.cc
old mode 100755
new mode 100644
index 74987b6..2f8dd9e
--- a/interface/src/getfemint_mdbrick.cc
+++ b/interface/src/getfemint_mdbrick.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_mdbrick.h>
 
diff --git a/interface/src/getfemint_mdbrick.h b/interface/src/getfemint_mdbrick.h
index e72cebf..644b198 100644
--- a/interface/src/getfemint_mdbrick.h
+++ b/interface/src/getfemint_mdbrick.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**\file getfemint_mdbrick.h
    \brief getfem::mdbrick_abstract (and derivatives) interface
diff --git a/interface/src/getfemint_mdstate.h b/interface/src/getfemint_mdstate.h
index ef853ee..d4a0f49 100644
--- a/interface/src/getfemint_mdstate.h
+++ b/interface/src/getfemint_mdstate.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2009 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**\file getfemint_mdstate.h
    \brief getfem::model_state interface
diff --git a/interface/src/getfemint_mesh.cc b/interface/src/getfemint_mesh.cc
index d15a775..627be6e 100644
--- a/interface/src/getfemint_mesh.cc
+++ b/interface/src/getfemint_mesh.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfemint_mesh.h>
 #include <getfemint_workspace.h>
 
diff --git a/interface/src/getfemint_mesh.h b/interface/src/getfemint_mesh.h
index da92b8b..eeeed69 100644
--- a/interface/src/getfemint_mesh.h
+++ b/interface/src/getfemint_mesh.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Julien Pommier, Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Julien Pommier, Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**\file getfemint_mesh.h
    \brief getfem::mesh interface.
diff --git a/interface/src/getfemint_mesh_fem.cc b/interface/src/getfemint_mesh_fem.cc
index b42faef..b3e2792 100644
--- a/interface/src/getfemint_mesh_fem.cc
+++ b/interface/src/getfemint_mesh_fem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfemint_mesh_fem.h>
 #include <getfemint_workspace.h>
 
diff --git a/interface/src/getfemint_mesh_fem.h b/interface/src/getfemint_mesh_fem.h
index 133a928..1cf5f8d 100644
--- a/interface/src/getfemint_mesh_fem.h
+++ b/interface/src/getfemint_mesh_fem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier. Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**\file getfemint_mesh_fem.h
    \brief getfem::mesh_fem wrapper class
diff --git a/interface/src/getfemint_mesh_im.cc b/interface/src/getfemint_mesh_im.cc
index badc46c..e975bfe 100644
--- a/interface/src/getfemint_mesh_im.cc
+++ b/interface/src/getfemint_mesh_im.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfemint_mesh_im.h>
 #include <getfemint_mesh_im.h>
 #include <getfemint_workspace.h>
diff --git a/interface/src/getfemint_mesh_im.h b/interface/src/getfemint_mesh_im.h
index dc7ccf4..eb13001 100644
--- a/interface/src/getfemint_mesh_im.h
+++ b/interface/src/getfemint_mesh_im.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Julien pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Julien pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #ifndef GETFEMINT_MESH_IM_H__
diff --git a/interface/src/getfemint_mesh_levelset.cc b/interface/src/getfemint_mesh_levelset.cc
index 751f382..7de16e9 100644
--- a/interface/src/getfemint_mesh_levelset.cc
+++ b/interface/src/getfemint_mesh_levelset.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfemint_mesh_levelset.h>
 #include <getfemint_mesh_levelset.h>
 #include <getfemint_workspace.h>
diff --git a/interface/src/getfemint_mesh_levelset.h b/interface/src/getfemint_mesh_levelset.h
index 22b98a9..76fb5a3 100644
--- a/interface/src/getfemint_mesh_levelset.h
+++ b/interface/src/getfemint_mesh_levelset.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier. Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**\file getfemint_mesh_fem.h
    \brief getfem::mesh_fem wrapper class
diff --git a/interface/src/getfemint_mesh_slice.h b/interface/src/getfemint_mesh_slice.h
index 05bc93a..90a40a1 100644
--- a/interface/src/getfemint_mesh_slice.h
+++ b/interface/src/getfemint_mesh_slice.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #ifndef GETFEMINT_MESH_SLICE_H__
diff --git a/interface/src/getfemint_mesher_object.h b/interface/src/getfemint_mesher_object.h
new file mode 100644
index 0000000..7ebd947
--- /dev/null
+++ b/interface/src/getfemint_mesher_object.h
@@ -0,0 +1,83 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+
+/**\file getfemint_models.h
+   \brief getfem::models interface
+*/
+
+#include <getfemint_std.h>
+#include <getfemint_object.h>
+#include <getfem/getfem_mesher.h>
+
+namespace getfemint {
+
+  class getfemint_mesher_object : public getfemint::getfem_object {
+  private:
+    getfem::mesher_signed_distance *msd;
+    getfemint_mesher_object(getfem::mesher_signed_distance *msd_) {
+      assert(workspace == 0);
+      msd  = msd_;
+      ikey = getfem_object::internal_key_type(msd);
+    }
+
+  public:
+    ~getfemint_mesher_object() {}
+    id_type class_id() const { return MESHER_OBJECT_CLASS_ID; }
+    size_type memsize() const {
+      return sizeof(getfem::mesher_signed_distance);
+    }
+    static getfemint_mesher_object*
+    get_from(getfem::mesher_signed_distance *pmsd, int flags = 0) {
+      getfem_object *o =
+	getfemint::workspace().object(getfem_object::internal_key_type(pmsd));
+      getfemint_mesher_object *gpgf = NULL;
+      if (!o) {
+	gpgf = new getfemint_mesher_object(pmsd);
+	gpgf->set_flags(flags);
+	getfemint::workspace().push_object(gpgf);
+      } else gpgf = dynamic_cast<getfemint_mesher_object*>(o);
+      assert(gpgf);
+      return gpgf;
+    }
+
+    getfem::mesher_signed_distance &mesher_object() { return *msd; }
+
+  };
+
+  inline bool object_is_mesher_object(getfem_object *o) {
+    return o->class_id() == MESHER_OBJECT_CLASS_ID;
+  }
+
+  inline getfemint_mesher_object* object_to_mesher_object(getfem_object *o) {
+    if (object_is_mesher_object(o)) return (getfemint_mesher_object*)o;
+    else THROW_INTERNAL_ERROR;
+  }
+}
diff --git a/interface/src/getfemint_misc.cc b/interface/src/getfemint_misc.cc
index 13a52cb..2ee2a4f 100644
--- a/interface/src/getfemint_misc.cc
+++ b/interface/src/getfemint_misc.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #ifdef MAINTAINER_MODE
 # include <sys/types.h>
@@ -695,15 +695,15 @@ namespace getfemint {
   const getfem::abstract_hyperelastic_law &
   abstract_hyperelastic_law_from_name(const std::string &lawname,
 				      size_type N) {
-
     static getfem::SaintVenant_Kirchhoff_hyperelastic_law SVK_AHL;
     static getfem::Mooney_Rivlin_hyperelastic_law MR_AHL;
     static getfem::Ciarlet_Geymonat_hyperelastic_law CG_AHL;
+    static getfem::generalized_Blatz_Ko_hyperelastic_law GBK_AHL;
     static getfem::plane_strain_hyperelastic_law PS_SVK_AHL(&SVK_AHL);
     static getfem::plane_strain_hyperelastic_law PS_MR_AHL(&MR_AHL);
     static getfem::plane_strain_hyperelastic_law PS_CG_AHL(&CG_AHL);
+    static getfem::plane_strain_hyperelastic_law PS_GBK_AHL(&GBK_AHL);
     
-
     if (cmd_strmatch(lawname, "SaintVenant Kirchhoff") ||
 	cmd_strmatch(lawname, "svk"))
       { if (N == 2) return PS_SVK_AHL; else return SVK_AHL; }
@@ -716,6 +716,11 @@ namespace getfemint {
 	cmd_strmatch(lawname, "cg"))
       { if (N == 2) return PS_CG_AHL; else return CG_AHL; }
 
+    if (cmd_strmatch(lawname, "generalized Blatz Ko") ||
+	cmd_strmatch(lawname, "gbk"))
+      {	if (N == 2) return PS_GBK_AHL; else return GBK_AHL; }
+    
+
     THROW_BADARG(lawname <<
 		 " is not the name of a known hyperelastic law. \\"
 		 "Valid names are: SaintVenant Kirchhoff, Mooney Rivlin "
diff --git a/interface/src/getfemint_misc.h b/interface/src/getfemint_misc.h
index 164c923..f9117b2 100644
--- a/interface/src/getfemint_misc.h
+++ b/interface/src/getfemint_misc.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #ifndef GETFEM_MISC_H__
 #define GETFEM_MISC_H__
diff --git a/interface/src/getfemint_models.h b/interface/src/getfemint_models.h
index 2c2389d..19bc4b9 100644
--- a/interface/src/getfemint_models.h
+++ b/interface/src/getfemint_models.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2009 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**\file getfemint_models.h
    \brief getfem::models interface
diff --git a/interface/src/getfemint_object.h b/interface/src/getfemint_object.h
index 76ba4ab..4e2d8f6 100644
--- a/interface/src/getfemint_object.h
+++ b/interface/src/getfemint_object.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #ifndef GETFEMINT_OBJECT_H__
 #define GETFEMINT_OBJECT_H__
diff --git a/interface/src/getfemint_pfem.cc b/interface/src/getfemint_pfem.cc
old mode 100755
new mode 100644
index c8a761d..8d80045
--- a/interface/src/getfemint_pfem.cc
+++ b/interface/src/getfemint_pfem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include <getfemint_pfem.h>
diff --git a/interface/src/getfemint_pfem.h b/interface/src/getfemint_pfem.h
index 8b25051..e74b560 100644
--- a/interface/src/getfemint_pfem.h
+++ b/interface/src/getfemint_pfem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #ifndef GETFEMINT_PFEM_H__
diff --git a/interface/src/getfemint_pgt.cc b/interface/src/getfemint_pgt.cc
index eb6651e..1ba316b 100644
--- a/interface/src/getfemint_pgt.cc
+++ b/interface/src/getfemint_pgt.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include <getfemint_pgt.h>
diff --git a/interface/src/getfemint_pgt.h b/interface/src/getfemint_pgt.h
index df52c49..aaaad85 100644
--- a/interface/src/getfemint_pgt.h
+++ b/interface/src/getfemint_pgt.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #ifndef GETFEMINT_PGT_H__
diff --git a/interface/src/getfemint_poly.h b/interface/src/getfemint_poly.h
index 2ad143d..3786178 100644
--- a/interface/src/getfemint_poly.h
+++ b/interface/src/getfemint_poly.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #ifndef GETFEMINT_POLY_H__
diff --git a/interface/src/getfemint_precond.h b/interface/src/getfemint_precond.h
index 5b2b510..f93b05a 100644
--- a/interface/src/getfemint_precond.h
+++ b/interface/src/getfemint_precond.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #ifndef GETFEMINT_PRECOND_H__
diff --git a/interface/src/getfemint_std.h b/interface/src/getfemint_std.h
index 3006346..9cd740c 100644
--- a/interface/src/getfemint_std.h
+++ b/interface/src/getfemint_std.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #ifndef GETFEMINT_STD_H__
 #define GETFEMINT_STD_H__
@@ -37,6 +38,9 @@
 
 namespace getfemint
 {  
+  using std::endl; using std::cout; using std::cerr;
+  using std::ends; using std::cin;
+
   const char *name_of_getfemint_class_id(unsigned cid);
 
   void attach_gdb();
diff --git a/interface/src/getfemint_workspace.cc b/interface/src/getfemint_workspace.cc
index d48de2e..fdd7664 100644
--- a/interface/src/getfemint_workspace.cc
+++ b/interface/src/getfemint_workspace.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: getfemint_workspace.cc 3224 2009-10-13 21:57:11Z lsaavedr $
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: getfemint_workspace.cc 4114 2012-07-06 11:20:10Z renard $
 #define GETFEMINT_WORKSPACE_C
 
 #include <getfem/dal_singleton.h>
diff --git a/interface/src/getfemint_workspace.h b/interface/src/getfemint_workspace.h
index 2f9e5db..7566df9 100644
--- a/interface/src/getfemint_workspace.h
+++ b/interface/src/getfemint_workspace.h
@@ -1,33 +1,34 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
-// $Id: getfemint_workspace.h 3224 2009-10-13 21:57:11Z lsaavedr $
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+// $Id: getfemint_workspace.h 4114 2012-07-06 11:20:10Z renard $
 #ifndef GETFEMINT_WORKSPACE_H__
 #define GETFEMINT_WORKSPACE_H__
 
diff --git a/interface/src/gf_asm.cc b/interface/src/gf_asm.cc
index fde0828..bd4f034 100644
--- a/interface/src/gf_asm.cc
+++ b/interface/src/gf_asm.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include <getfem/getfem_assembling.h>
@@ -26,6 +26,247 @@
 #include <getfem/getfem_interpolation.h>
 #include <getfem/getfem_nonlinear_elasticity.h>
 #include <getfem/getfem_fourth_order.h>
+#include <getfem/getfem_Coulomb_friction.h>
+
+#ifdef GETFEM_HAVE_METIS 
+ extern "C" void METIS_PartGraphKway(int *, int *, int *, int *, int *, int *,
+ 			    int *, int *, int *, int *, int *);
+ extern "C" void METIS_PartGraphRecursive(int *, int *, int *, int *, int *, int *,
+			    int *, int *, int *, int *, int *);
+
+ extern "C" void METIS_mCPartGraphKway(int *, int *, int *, int *, int *, int *, int *,
+				      int *, int *, float *, int *, int *, int *);
+ extern "C" void METIS_mCPartGraphRecursive(int *, int *, int *, int *, int *, int *, int *,
+				      int *, int *, int *, int *, int *);
+#endif
+
+/********************************/
+/*compute level set unit normal*/
+
+template<typename VECT1> class level_set_unit_normal 
+  : public getfem::nonlinear_elem_term {
+  const getfem::mesh_fem &mf;
+  std::vector<bgeot::scalar_type> U;
+  bgeot::size_type N;
+  bgeot::base_matrix gradU;
+  bgeot::base_vector coeff;
+  bgeot::multi_index sizes_;
+public:
+  level_set_unit_normal(const getfem::mesh_fem &mf_, const VECT1 &U_) 
+    : mf(mf_), U(mf_.nb_basic_dof()), N(mf_.linked_mesh().dim()),
+      gradU(1, N) {
+    sizes_.resize(1); sizes_[0] = bgeot::short_type(N);
+    mf.extend_vector(U_, U);
+  }
+  const bgeot::multi_index &sizes() const {  return sizes_; }
+  virtual void compute(getfem::fem_interpolation_context& ctx,
+		       bgeot::base_tensor &t) {
+    bgeot::size_type cv = ctx.convex_num();
+    coeff.resize(mf.nb_basic_dof_of_element(cv));
+    gmm::copy
+      (gmm::sub_vector(U,gmm::sub_index(mf.ind_basic_dof_of_element(cv))),
+       coeff);
+    ctx.pf()->interpolation_grad(ctx, coeff, gradU, 1);
+    bgeot::scalar_type norm = gmm::vect_norm2(gmm::mat_row(gradU, 0));
+    for (bgeot::size_type i = 0; i < N; ++i) t[i] = gradU(0, i) / norm;
+  }
+};
+
+
+
+ template<class MAT>
+void asm_lsneuman_matrix
+(const MAT &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf, 
+ const getfem::mesh_fem &mf_mult, getfem::level_set &ls,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+  MAT &RM = const_cast<MAT &>(RM_);
+
+  level_set_unit_normal<std::vector<bgeot::scalar_type> >
+    nterm(ls.get_mesh_fem(), ls.values());
+
+  getfem::generic_assembly assem("t=comp(Base(#2).Grad(#1).NonLin(#3));"
+				 "M(#2, #1)+= t(:,:,i,i)");
+  assem.push_mi(mim);
+  assem.push_mf(mf);
+  assem.push_mf(mf_mult);
+  assem.push_mf(ls.get_mesh_fem());
+  assem.push_mat(RM);
+  assem.push_nonlinear_term(&nterm);
+  assem.assembly(rg);
+}
+
+ 
+    /** 
+	generic normal grad level set matrix (on the whole mesh level set or on the specified
+	convex set level set or boundary level set) 
+	
+    */
+  
+
+template<typename MAT>  void asm_nlsgrad_matrix
+(const MAT &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf1,
+ const getfem::mesh_fem &mf2,  getfem::level_set &ls,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+  MAT &RM = const_cast<MAT &>(RM_);
+  
+  level_set_unit_normal<std::vector<bgeot::scalar_type> >
+    nterm(ls.get_mesh_fem(), ls.values());
+  
+  getfem::generic_assembly
+    assem("t=comp(Grad(#1).NonLin(#3).Grad(#2).NonLin(#3));"
+	  "M(#1, #2)+= sym(t(:,i,i,:,j,j))");
+  assem.push_mi(mim);
+  assem.push_mf(mf1);
+    assem.push_mf(mf2);
+    assem.push_mf(ls.get_mesh_fem());
+    assem.push_mat(RM);
+    assem.push_nonlinear_term(&nterm);
+    assem.assembly(rg);
+  }
+
+
+/**************************************************************/
+/* assembling patch vector                                     */
+/**************************************************************/
+
+template<class VEC>
+void asm_patch_vector     
+(const VEC &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf_mult,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+  VEC &RM = const_cast<VEC &>(RM_);
+    
+  getfem::generic_assembly assem("t=comp(Base(#1)); V(#1)+= t(:);");
+  assem.push_mi(mim);
+  assem.push_mf(mf_mult);
+  assem.push_vec(RM);
+  // assem.set("RM(#1)+=comp(Base(#1))()");
+  assem.assembly(rg);
+
+}
+/**************************************************************/
+/* assembling patch matrix                                     */
+/**************************************************************/
+
+template<class MAT>
+void asm_stabilization_patch_matrix
+(const MAT &RM_, const getfem::mesh &mesh, const getfem::mesh_fem &mf_mult, const getfem::mesh_im &mimbounddown,
+ bgeot::scalar_type ratio_size, bgeot::scalar_type h ){
+  MAT &M1 = const_cast<MAT &>(RM_);
+  
+  /****************************************************/
+  /*        " select patch "                          */
+  /****************************************************/
+  
+  
+  
+  // assemby patch vector
+  const getfem::mesh_fem &mf_P0 = getfem::classical_mesh_fem(mesh, 0);
+  bgeot::size_type nbe = mf_P0.nb_dof();
+  int ne = 0;
+  double size_of_crack = 0;
+  getfem::modeling_standard_plain_vector Patch_Vector(nbe);
+  asm_patch_vector(Patch_Vector, mimbounddown, mf_P0);
+  // cout<<"patch_vectot="<< Patch_Vector<<endl;
+  dal::bit_vector  Patch_element_list, Patch_dof_ind;
+  for (bgeot::size_type i = 0; i < nbe; ++i) {
+    if (Patch_Vector[i] != bgeot::scalar_type(0)){
+      bgeot::size_type cv = mf_P0.first_convex_of_basic_dof(i);
+      Patch_element_list.add(cv);
+      Patch_dof_ind.add(i);
+      ne++;
+      size_of_crack=size_of_crack + Patch_Vector[i];
+    }
+  }
+  // std::cout<<"Path_element_list="<< Patch_element_list << std::endl;
+  // std::cout<<"Path_dof_ind="<< Patch_dof_ind << std::endl;
+  std::cout << "number of element in patch=" << ne << std::endl;
+  std::vector<int> xadj(ne+1), adjncy, numelt(ne), part(ne);
+  std::vector<int> vwgt(ne), indelt(mesh.convex_index().last_true()+1);
+  std::vector<double> vwgtt(ne);
+  int j = 0, k = 0;
+  for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+    numelt[j] = int(ic);
+    indelt[ic] = j;
+  }
+  j = 0;
+  for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+    bgeot::size_type ind_dof_patch = mf_P0.ind_basic_dof_of_element(ic)[0];
+    vwgt[indelt[ic]] = int(1000000*Patch_Vector[ind_dof_patch]);
+    vwgtt[indelt[ic]] = Patch_Vector[ind_dof_patch];
+    xadj[j] = k;
+    bgeot::mesh_structure::ind_set s;
+    mesh.neighbours_of_convex(ic, s);
+    for (bgeot::mesh_structure::ind_set::iterator it = s.begin(); it != s.end(); ++it) {
+      if (Patch_element_list.is_in(*it)) { adjncy.push_back(indelt[*it]); ++k; }
+    }
+  }
+  
+  xadj[j] = k;
+  std::vector<int> adjwgt(k);
+  // std::cout<<"xadj="<<xadj<<std::endl;
+  //std::cout<<"adjncy="<<adjncy<<std::endl;
+  //std::cout<<"vwgt="<<vwgt<<std::endl;
+  
+  std::cout << "ratio size beween mesh and coarse mesh= " << ratio_size
+	    << std::endl;
+  
+  int wgtflag = 2, edgecut, nparts=int(size_of_crack/(ratio_size*h)), numflag = 0;
+      // float ubvec[1] = {1.03f};
+  int  options[5] = {0,0,0,0,0};
+  #ifdef GETFEM_HAVE_METIS 
+  //METIS_mCPartGraphKway(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+  //		    &numflag, &nparts, &(ubvec[0]),  options, &edgecut, &(part[0]));
+  // METIS_mCPartGraphRecursive(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+  //			 &numflag, &nparts,  options, &edgecut, &(part[0]));
+  //METIS_PartGraphKway(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+  //	  &numflag, &nparts, options, &edgecut, &(part[0]));
+  METIS_PartGraphRecursive(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+			   &numflag, &nparts, options, &edgecut, &(part[0]));
+  #else
+    GMM_ASSERT1(false, "Metis not present ...");
+  #endif
+  //std::cout<<"size_of_mesh="<<h<<std::endl;
+  //std::cout<<"size_of_crack="<< size_of_crack <<std::endl;
+  std::cout<<"nb_partition="<<nparts<<std::endl;
+  // std::cout<<"partition="<<part<<std::endl;
+  //std::cout<<"edgecut="<<edgecut<<std::endl;
+  
+
+  /**************************************************************/
+  /*        Assembly matrices                                   */
+  /**************************************************************/
+  
+  
+  std::vector<double> size_patch(nparts);
+  bgeot::size_type nb_dof_mult=mf_mult.nb_dof();
+  getfem::modeling_standard_sparse_matrix M0(nb_dof_mult, nbe);
+  getfem::asm_mass_matrix(M0, mimbounddown, mf_mult, mf_P0);
+  
+  for (bgeot::size_type i=0; i < bgeot::size_type(ne); i++) {
+    size_patch[part[i]]= size_patch[part[i]] + vwgtt[i];	  
+  }
+  
+  //std::cout<<"size_patch="<<size_patch<<std::endl;
+  
+  gmm::row_matrix<getfem::modeling_standard_sparse_vector> MAT_aux(nparts, nb_dof_mult);
+  for (bgeot::size_type r=0; r < nbe; r++) {
+    bgeot::size_type cv = mf_P0.first_convex_of_basic_dof(r);
+    gmm::add(gmm::mat_col(M0, r), gmm::mat_row(MAT_aux, part[indelt[cv]]));
+  }
+  
+  gmm::row_matrix<getfem::modeling_standard_sparse_vector> MAT_proj(nbe, nb_dof_mult);
+  
+  for (bgeot::size_type r=0; r < nbe; r++) {
+    bgeot::size_type cv = mf_P0.first_convex_of_basic_dof(r);
+    int p=part[indelt[cv]];
+    gmm::copy(gmm::scaled(gmm::mat_row(MAT_aux, p), 1./size_patch[p]),
+	      gmm::mat_row(MAT_proj, r));
+  }
+  
+  gmm::mult(M0, MAT_proj, M1);
+  
+}
+
 
 using namespace getfemint;
 namespace getfemint {
@@ -64,14 +305,16 @@ namespace gmm {
     { std::fill(it, ite, value_type(0)); }
     static void do_clear(this_type &v) { std::fill(v.begin(), v.end(), 0.); }
     static value_type access(const origin_type *, const const_iterator &it,
-			     const const_iterator &, size_type i)
+                             const const_iterator &, size_type i)
     { return it[i]; }
     static reference access(origin_type *, const iterator &it,
-			    const iterator &, size_type i)
+                            const iterator &, size_type i)
     { return it[i]; }
   };
 }
 
+
+
 namespace getfem {
   template<> class vec_factory<darray_with_gfi_array> :
     public base_vec_factory, private std::deque<asm_vec<getfemint::darray_with_gfi_array> > {
@@ -82,7 +325,7 @@ namespace getfem {
     }
     ~vec_factory() {
       for (size_type i=0; i < this->size(); ++i) {
-	delete (*this)[i].vec(); // but it does not deallocate the gfi_array !! that's fine
+        delete (*this)[i].vec(); // but it does not deallocate the gfi_array !! that's fine
       }
     }
   };
@@ -131,7 +374,7 @@ do_generic_assembly(mexargs_in& in, mexargs_out& out, bool on_boundary)
     if (assem.mat()[i] != 0) {
       getfem::base_asm_mat *BM = assem.mat()[i];
       getfem::asm_mat<gf_real_sparse_by_col> * M =
-	static_cast<getfem::asm_mat<gf_real_sparse_by_col>*>(BM);
+        static_cast<getfem::asm_mat<gf_real_sparse_by_col>*>(BM);
       out.pop().from_sparse(*M->mat());
     }
   }
@@ -139,10 +382,10 @@ do_generic_assembly(mexargs_in& in, mexargs_out& out, bool on_boundary)
   if (out.remaining()) {
     for (size_type i=0; out.remaining() && i < assem.vec().size(); ++i) {
       if (assem.vec()[i] != 0) {
-	getfem::base_asm_vec *BV = assem.vec()[i];
-	getfem::asm_vec<darray_with_gfi_array> *V =
-	  static_cast<getfem::asm_vec<darray_with_gfi_array> *>(BV);
-	mexarg_out mo = out.pop(); mo.arg = V->vec()->mx;
+        getfem::base_asm_vec *BV = assem.vec()[i];
+        getfem::asm_vec<darray_with_gfi_array> *V =
+          static_cast<getfem::asm_vec<darray_with_gfi_array> *>(BV);
+        mexarg_out mo = out.pop(); mo.arg = V->vec()->mx;
       }
     }
   }
@@ -151,10 +394,10 @@ do_generic_assembly(mexargs_in& in, mexargs_out& out, bool on_boundary)
 
 template<typename T> static void
 gf_dirichlet(getfemint::mexargs_out& out,
-	     const getfem::mesh_im &mim,
-	     const getfem::mesh_fem &mf_u,
-	     const getfem::mesh_fem &mf_d,
-	     mexarg_in in_h, mexarg_in in_r, int boundary_num, T)
+             const getfem::mesh_im &mim,
+             const getfem::mesh_fem &mf_u,
+             const getfem::mesh_fem &mf_d,
+             mexarg_in in_h, mexarg_in in_r, int boundary_num, T)
 {
   unsigned q_dim = mf_u.get_qdim();
 
@@ -180,18 +423,19 @@ void interpolate_or_extrapolate(mexargs_in &in, mexargs_out &out, int extrapolat
 static const getfem::mesh_im *get_mim(mexargs_in &in) {
   if (!in.front().is_mesh_im()) {
     THROW_BADARG("Since release 2.0 of getfem, all assembly functions"
-		 " expect a mesh_im as their second argument");
+                 " expect a mesh_im as their second argument");
   }
   return in.pop().to_const_mesh_im();
 }
 
 void assemble_source(size_type boundary_num,
-		     mexargs_in &in, mexargs_out &out) {
+                     mexargs_in &in, mexargs_out &out) {
   const getfem::mesh_im *mim = get_mim(in);
   const getfem::mesh_fem *mf_u = in.pop().to_const_mesh_fem();
   const getfem::mesh_fem *mf_d = in.pop().to_const_mesh_fem();
-  unsigned q_dim = mf_u->get_qdim();
+  unsigned q_dim = mf_u->get_qdim() / mf_d->get_qdim();
   if (!in.front().is_complex()) {
+    
     darray g               = in.pop().to_darray(q_dim, int(mf_d->nb_dof()));
     darray F               = out.pop().create_darray_v(unsigned(mf_u->nb_dof()));
     getfem::asm_source_term(F, *mim, *mf_u, *mf_d, g, boundary_num);
@@ -201,13 +445,15 @@ void assemble_source(size_type boundary_num,
     getfem::asm_source_term(F, *mim, *mf_u, *mf_d, g, boundary_num);
   }
 }
-
+ 
+ 
+  
 /*@GFDOC
 
   General assembly function.
 
   Many of the functions below use more than one mesh_fem: the main
-  mesh_fem (mf_u) used for the main unknow, and data mesh_fem (mf_d)
+  mesh_fem (mf_u) used for the main unknown, and data mesh_fem (mf_d)
   used for the data. It is always assumed that the Qdim of mf_d is
   equal to 1: if mf_d is used to describe vector or tensor data, you
   just have to "stack" (in fortran ordering) as many scalar fields as
@@ -223,7 +469,7 @@ void assemble_source(size_type boundary_num,
 struct sub_gf_asm : virtual public dal::static_stored_object {
   int arg_in_min, arg_in_max, arg_out_min, arg_out_max;
   virtual void run(getfemint::mexargs_in& in,
-		   getfemint::mexargs_out& out) = 0;
+                   getfemint::mexargs_out& out) = 0;
 };
 
 typedef boost::intrusive_ptr<sub_gf_asm> psub_command;
@@ -232,16 +478,16 @@ typedef boost::intrusive_ptr<sub_gf_asm> psub_command;
 template <typename T> static inline void dummy_func(T &) {}
 
 #define sub_command(name, arginmin, arginmax, argoutmin, argoutmax, code) { \
-    struct subc : public sub_gf_asm {					\
-      virtual void run(getfemint::mexargs_in& in,			\
-		       getfemint::mexargs_out& out)			\
-      { dummy_func(in); dummy_func(out); code }				\
-    };									\
-    psub_command psubc = new subc;					\
-    psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax;		\
-    psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax;	\
-    subc_tab[cmd_normalize(name)] = psubc;				\
-  }                           
+    struct subc : public sub_gf_asm {                                   \
+      virtual void run(getfemint::mexargs_in& in,                       \
+                       getfemint::mexargs_out& out)                     \
+      { dummy_func(in); dummy_func(out); code }                         \
+    };                                                                  \
+    psub_command psubc = new subc;                                      \
+    psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax;         \
+    psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax;     \
+    subc_tab[cmd_normalize(name)] = psubc;                              \
+  }
 
 
 
@@ -253,34 +499,83 @@ template <typename T> static inline void dummy_func(T &) {}
 void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
   typedef std::map<std::string, psub_command > SUBC_TAB;
   static SUBC_TAB subc_tab;
- 
-  if (subc_tab.size() == 0) {
 
-   
-    /*@FUNC M = ('mass matrix', @tmim mim, @tmf mf1[, @tmf mf2])
+  if (subc_tab.size() == 0) {
+    
+    
+    /*@FUNC M = ('mass matrix', @tmim mim, @tmf mf1[, @tmf mf2[, boundary_num]])
     Assembly of a mass matrix.
-
+    
     Return a @tsp object.
     @*/
     sub_command
-      ("mass matrix", 2, 3, 0, 1, 
+      ("mass matrix", 2, 4, 0, 1,
        const getfem::mesh_im *mim = get_mim(in);
        const getfem::mesh_fem *mf_u1 = in.pop().to_const_mesh_fem();
        const getfem::mesh_fem *mf_u2 = in.remaining() ? in.pop().to_const_mesh_fem() : mf_u1;
-
+       size_type nbound = in.remaining() ? in.pop().to_integer():size_type(-1);
        gf_real_sparse_by_col M(mf_u1->nb_dof(), mf_u2->nb_dof());
-       getfem::asm_mass_matrix(M, *mim, *mf_u1, *mf_u2);
+       getfem::asm_mass_matrix(M, *mim, *mf_u1, *mf_u2, nbound);
        out.pop().from_sparse(M);
        );
-
-
+    
+    /*@FUNC M = ('lsneuman matrix', @tmim mim, @tmf mf1, @tmf mf2, @tls ls)
+      Assembly of a level set Neuman  matrix.
+      
+      Return a @tsp object.
+      @*/
+    sub_command
+      ("lsneuman matrix", 3, 4, 0, 1, 
+       const getfem::mesh_im *mim = get_mim(in);
+       const getfem::mesh_fem *mf_u1 = in.pop().to_const_mesh_fem();
+       const getfem::mesh_fem *mf_u2 = in.pop().to_const_mesh_fem();
+       getfem::level_set *ls1= in.pop().to_levelset();
+       gf_real_sparse_by_col M(mf_u2->nb_dof(), mf_u1->nb_dof());
+       asm_lsneuman_matrix(M, *mim, *mf_u1, *mf_u2, *ls1);
+       out.pop().from_sparse(M);
+       );
+    
+    /*@FUNC M = ('nlsgrad matrix', @tmim mim, @tmf mf1, @tmf mf2, @tls ls)
+      Assembly of a nlsgrad matrix.
+      
+      Return a @tsp object.
+      @*/
+    sub_command
+      ("nlsgrad matrix", 3, 4, 0, 1, 
+       const getfem::mesh_im *mim = get_mim(in);
+       const getfem::mesh_fem *mf_u1 = in.pop().to_const_mesh_fem();
+       const getfem::mesh_fem *mf_u2 = in.pop().to_const_mesh_fem();
+       getfem::level_set *ls1= in.pop().to_levelset();
+       gf_real_sparse_by_col M(mf_u1->nb_dof(), mf_u2->nb_dof());
+       asm_nlsgrad_matrix(M, *mim, *mf_u1, *mf_u2, *ls1);
+       out.pop().from_sparse(M);
+       );
+    
+    /*@FUNC M = ('stabilization patch matrix', @tm mesh, @tmf mf,  @tmim mim, @real ratio, @real h)
+      Assembly of stabilization patch matrix .
+      
+      Return a @tsp object.
+      @*/
+    sub_command
+      ("stabilization patch matrix", 5, 5, 0, 1, 
+       const getfem::mesh_im *mim = get_mim(in);
+       const getfem::mesh *mesh = in.pop().to_const_mesh();
+       const getfem::mesh_fem *mf_mult = in.pop().to_const_mesh_fem();
+       double ratio_size= in.pop().to_scalar();
+       double h= in.pop().to_scalar();
+       gf_real_sparse_by_col M(mf_mult->nb_dof(), mf_mult->nb_dof());
+       asm_stabilization_patch_matrix(M, *mesh,* mf_mult, *mim, ratio_size, h);
+       out.pop().from_sparse(M);
+       );
+    
+    
     /*@FUNC L = ('laplacian', @tmim mim, @tmf mf_u, @tmf mf_d, @dvec a)
-    Assembly of the matrix for the Laplacian problem.
-
-    :math:`\nabla\cdot(a(x)\nabla u)`  with `a` a scalar.
-
-    Return a @tsp object.
-    @*/
+      Assembly of the matrix for the Laplacian problem.
+      
+      :math:`\nabla\cdot(a(x)\nabla u)`  with `a` a scalar.
+      
+      Return a @tsp object.
+      @*/
     sub_command
       ("laplacian", 4, 4,0, 1,
        const getfem::mesh_im *mim = get_mim(in);
@@ -297,7 +592,7 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
 
     :math:`\nabla\cdot(C(x):\nabla u)`
     with :math:`C` defined via `lambda_d` and `mu_d`.
-
+    
     Return a @tsp object.
     @*/
     sub_command
@@ -311,24 +606,24 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
        getfem::asm_stiffness_matrix_for_linear_elasticity(M, *mim, *mf_u, *mf_d, lambda, mu);
        out.pop().from_sparse(M);
        );
-
-
+    
+    
     /*@FUNC TRHS = ('nonlinear elasticity', @tmim mim, @tmf mf_u, @dvec U, @str law, @tmf mf_d, @dmat params, {'tangent matrix'|'rhs'|'incompressible tangent matrix', @tmf mf_p, @dvec P|'incompressible rhs', @tmf mf_p, @dvec P})
-    Assembles terms (tangent matrix and right hand side) for nonlinear elasticity.
-
-    The solution `U` is required at the current time-step. The `law`
-    may be choosen among:
-     
-     - 'SaintVenant Kirchhoff':
-       Linearized law, should be avoided). This law has the two usual
-       Lame coefficients as parameters, called lambda and mu.
-     - 'Mooney Rivlin':
-       Only for incompressibility. This law has two parameters,
-       called C1 and C2.
-     - 'Ciarlet Geymonat':
-       This law has 3 parameters, called lambda, mu and gamma, with
-       gamma chosen such that gamma is in ]-lambda/2-mu, -mu[.
-
+      Assembles terms (tangent matrix and right hand side) for nonlinear elasticity.
+      
+      The solution `U` is required at the current time-step. The `law`
+      may be choosen among:
+      
+      - 'SaintVenant Kirchhoff':
+      Linearized law, should be avoided). This law has the two usual
+      Lame coefficients as parameters, called lambda and mu.
+      - 'Mooney Rivlin':
+      Only for incompressibility. This law has two parameters,
+      called C1 and C2.
+      - 'Ciarlet Geymonat':
+      This law has 3 parameters, called lambda, mu and gamma, with
+      gamma chosen such that gamma is in ]-lambda/2-mu, -mu[.
+      
     The parameters of the material law are described on the @tmf `mf_d`.
     The matrix `params` should have `nbdof(mf_d)` columns, each row
     correspounds to a parameter.
@@ -351,44 +646,44 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
        /* a refaire , pas bon, le terme incompressible se passe de loi */
        const getfem::abstract_hyperelastic_law &law
        = abstract_hyperelastic_law_from_name(lawname,
-					     mf_u->linked_mesh().dim());
+                                             mf_u->linked_mesh().dim());
        const getfem::mesh_fem *mf_d = in.pop().to_const_mesh_fem();
        darray param = in.pop().to_darray(int(law.nb_params()),
-					 int(mf_d->nb_dof()));
+                                         int(mf_d->nb_dof()));
        while (in.remaining()) {
- 	 std::string what = in.pop().to_string();
- 	 if (cmd_strmatch(what, "tangent matrix")) {
- 	   gf_real_sparse_by_col  K(mf_u->nb_dof(), mf_u->nb_dof());
- 	   getfem::asm_nonlinear_elasticity_tangent_matrix(K, *mim, *mf_u, U,
- 							   mf_d, param, law);
- 	   out.pop().from_sparse(K);
- 	 } else if (cmd_strmatch(what, "rhs")) {
- 	   darray B = out.pop().create_darray_v(unsigned(mf_u->nb_dof()));
- 	   getfem::asm_nonlinear_elasticity_rhs(B, *mim, *mf_u, U, mf_d,
- 						param, law); 
- 	 } else if (cmd_strmatch(what, "incompressible tangent matrix")) {
- 	   const getfem::mesh_fem *mf_p = in.pop().to_const_mesh_fem();
- 	   darray P = in.pop().to_darray(int(mf_p->nb_dof()));
- 	   gf_real_sparse_by_col  K(mf_u->nb_dof(), mf_u->nb_dof());
- 	   gf_real_sparse_by_col  B(mf_u->nb_dof(), mf_p->nb_dof());
- 	   getfem::asm_nonlinear_incomp_tangent_matrix(K, B, *mim, *mf_u,
- 						       *mf_p, U, P);
- 	   out.pop().from_sparse(K);
- 	   out.pop().from_sparse(B);
- 	 } else if (cmd_strmatch(what, "incompressible rhs")) {
- 	   const getfem::mesh_fem *mf_p = in.pop().to_const_mesh_fem();
- 	   darray P = in.pop().to_darray(int(mf_p->nb_dof()));
- 	   darray RU = out.pop().create_darray_v(unsigned(mf_u->nb_dof()));
- 	   darray RB = out.pop().create_darray_v(unsigned(mf_p->nb_dof()));
- 	   getfem::asm_nonlinear_incomp_rhs(RU, RB, *mim, *mf_u, *mf_p, U, P);
- 	 } else {
-  	   THROW_BADARG("expecting 'tangent matrix' or 'rhs', or "
-  			"'incomp tangent matrix' or 'incomp rhs', got '"
-  			<< what << "'");
- 	 }
+         std::string what = in.pop().to_string();
+         if (cmd_strmatch(what, "tangent matrix")) {
+           gf_real_sparse_by_col  K(mf_u->nb_dof(), mf_u->nb_dof());
+           getfem::asm_nonlinear_elasticity_tangent_matrix(K, *mim, *mf_u, U,
+                                                           mf_d, param, law);
+           out.pop().from_sparse(K);
+         } else if (cmd_strmatch(what, "rhs")) {
+           darray B = out.pop().create_darray_v(unsigned(mf_u->nb_dof()));
+           getfem::asm_nonlinear_elasticity_rhs(B, *mim, *mf_u, U, mf_d,
+                                                param, law);
+         } else if (cmd_strmatch(what, "incompressible tangent matrix")) {
+           const getfem::mesh_fem *mf_p = in.pop().to_const_mesh_fem();
+           darray P = in.pop().to_darray(int(mf_p->nb_dof()));
+           gf_real_sparse_by_col  K(mf_u->nb_dof(), mf_u->nb_dof());
+           gf_real_sparse_by_col  B(mf_u->nb_dof(), mf_p->nb_dof());
+           getfem::asm_nonlinear_incomp_tangent_matrix(K, B, *mim, *mf_u,
+                                                       *mf_p, U, P);
+           out.pop().from_sparse(K);
+           out.pop().from_sparse(B);
+         } else if (cmd_strmatch(what, "incompressible rhs")) {
+           const getfem::mesh_fem *mf_p = in.pop().to_const_mesh_fem();
+           darray P = in.pop().to_darray(int(mf_p->nb_dof()));
+           darray RU = out.pop().create_darray_v(unsigned(mf_u->nb_dof()));
+           darray RB = out.pop().create_darray_v(unsigned(mf_p->nb_dof()));
+           getfem::asm_nonlinear_incomp_rhs(RU, RB, *mim, *mf_u, *mf_p, U, P);
+         } else {
+           THROW_BADARG("expecting 'tangent matrix' or 'rhs', or "
+                        "'incomp tangent matrix' or 'incomp rhs', got '"
+                        << what << "'");
+         }
        }
        if (in.remaining())
- 	 THROW_BADARG("too much arguments for asm(nonlinear_elasticity)");
+         THROW_BADARG("too much arguments for asm(nonlinear_elasticity)");
        );
 
 
@@ -444,9 +739,9 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
 
     /*@FUNC A = ('bilaplacian', @tmim mim, @tmf mf_u, @tmf mf_d, @dvec a)
       Assembly of the matrix for the Bilaplacian problem.
-      
+
       :math:`\Delta(a(x)\Delta u) = 0`   with `a` scalar.
-      
+
       Return a @tsp object.
       @*/
     sub_command
@@ -460,6 +755,25 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
        out.pop().from_sparse(A);
        );
 
+    /*@FUNC A = ('bilaplacian KL', @tmim mim, @tmf mf_u, @tmf mf_d, @dvec a, @dvec nu)
+      Assembly of the matrix for the Bilaplacian problem with Kirchoff-Love formulation.
+
+      :math:`\Delta(a(x)\Delta u) = 0`   with `a` scalar.
+
+      Return a @tsp object.
+      @*/
+    sub_command
+      ("bilaplacian KL", 5, 5, 0, 1,
+       const getfem::mesh_im *mim = get_mim(in);
+       const getfem::mesh_fem *mf_u = in.pop().to_const_mesh_fem();
+       const getfem::mesh_fem *mf_d = in.pop().to_const_mesh_fem();
+       darray           a = in.pop().to_darray(int(mf_d->nb_dof()));
+       darray           nu = in.pop().to_darray(int(mf_d->nb_dof()));
+       gf_real_sparse_by_col  A(mf_u->nb_dof(), mf_u->nb_dof());
+       getfem::asm_stiffness_matrix_for_bilaplacian_KL(A, *mim, *mf_u, *mf_d, a, nu);
+       out.pop().from_sparse(A);
+       );
+
 
     /*@FUNC V = ('volumic source', @tmim mim, @tmf mf_u, @tmf mf_d, @dcvec fd)
     Assembly of a volumic source term.
@@ -525,16 +839,16 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
        mexarg_in in_r = in.pop();
        double threshold = 1e-8;
        if (in.remaining()) {
-	 threshold = in.pop().to_scalar();
-	 if (threshold < 0 || threshold > 1e10) THROW_BADARG("wrong threshold\n");
+         threshold = in.pop().to_scalar();
+         if (threshold < 0 || threshold > 1e10) THROW_BADARG("wrong threshold\n");
        }
-       
+
        if (in_h.is_complex() || in_r.is_complex())
-	 gf_dirichlet(out, *mim, *mf_u, *mf_d, in_h, in_r, boundary_num, complex_type());
+         gf_dirichlet(out, *mim, *mf_u, *mf_d, in_h, in_r, boundary_num, complex_type());
        else gf_dirichlet(out, *mim, *mf_u, *mf_d, in_h, in_r, boundary_num, scalar_type());
        );
 
-    
+
     /*@FUNC Q = ('boundary qu term', at int boundary_num, @tmim mim, @tmf mf_u, @tmf mf_d, @dmat q)
     Assembly of a boundary qu term.
 
@@ -550,55 +864,55 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
        const getfem::mesh_im *mim = get_mim(in);
        const getfem::mesh_fem *mf_u = in.pop().to_const_mesh_fem();
        const getfem::mesh_fem *mf_d = in.pop().to_const_mesh_fem();
-       
+
        unsigned q_dim = mf_u->get_qdim();
        if (!in.front().is_complex()) {
-	 darray q            = in.pop().to_darray();
-	 if (q.ndim() == 2) in.last_popped().check_dimensions(q, q_dim* q_dim, int(mf_d->nb_dof()));
-	 else               in.last_popped().check_dimensions(q, q_dim, q_dim, int(mf_d->nb_dof()));
-	 gf_real_sparse_by_col Q(mf_u->nb_dof(), mf_u->nb_dof());
-	 getfem::asm_qu_term(Q, *mim, *mf_u, *mf_d, q, boundary_num);
-	 out.pop().from_sparse(Q);
+         darray q            = in.pop().to_darray();
+         if (q.ndim() == 2) in.last_popped().check_dimensions(q, q_dim* q_dim, int(mf_d->nb_dof()));
+         else               in.last_popped().check_dimensions(q, q_dim, q_dim, int(mf_d->nb_dof()));
+         gf_real_sparse_by_col Q(mf_u->nb_dof(), mf_u->nb_dof());
+         getfem::asm_qu_term(Q, *mim, *mf_u, *mf_d, q, boundary_num);
+         out.pop().from_sparse(Q);
        } else {
-	 carray q            = in.pop().to_carray();
-	 if (q.ndim() == 2) in.last_popped().check_dimensions(q, q_dim* q_dim, int(mf_d->nb_dof()));
-	 else               in.last_popped().check_dimensions(q, q_dim, q_dim, int(mf_d->nb_dof()));
-	 gf_cplx_sparse_by_col Q(mf_u->nb_dof(), mf_u->nb_dof());
-	 getfem::asm_qu_term(Q, *mim, *mf_u, *mf_d, q, boundary_num);
-	 out.pop().from_sparse(Q);
+         carray q            = in.pop().to_carray();
+         if (q.ndim() == 2) in.last_popped().check_dimensions(q, q_dim* q_dim, int(mf_d->nb_dof()));
+         else               in.last_popped().check_dimensions(q, q_dim, q_dim, int(mf_d->nb_dof()));
+         gf_cplx_sparse_by_col Q(mf_u->nb_dof(), mf_u->nb_dof());
+         getfem::asm_qu_term(Q, *mim, *mf_u, *mf_d, q, boundary_num);
+         out.pop().from_sparse(Q);
        }
        );
 
-    
+
     /*@FUNC @CELL{...} = ('volumic' [,CVLST], expr [, mesh_ims, mesh_fems, data...])
       Generic assembly procedure for volumic assembly.
-      
+
       The expression `expr` is evaluated over the @tmf's listed in the
       arguments (with optional data) and assigned to the output arguments.
       For details about the syntax of assembly expressions, please refer
       to the getfem user manual (or look at the file getfem_assembling.h
       in the getfem++ sources).
-      
+
       For example, the L2 norm of a field can be computed with::
-      
+
         ::COMPUTE('L2 norm') or with:
-      
+
         ::ASM('volumic','u=data(#1); V()+=u(i).u(j).comp(Base(#1).Base(#1))(i,j)',mim,mf,U)
-      
+
       The Laplacian stiffness matrix can be evaluated with::
-      
+
         ::ASM('laplacian',mim, mf, A) or equivalently with:
-      
+
         ::ASM('volumic','a=data(#2);M(#1,#1)+=sym(comp(Grad(#1).Grad(#1).Base(#2))(:,i,:,i,j).a(j))', mim,mf, A);@*/
     sub_command
       ("volumic", 2, -1, 0, -1,
        do_generic_assembly(in, out, false);
        );
 
-    
+
     /*@FUNC @CELL{...} = ('boundary', @int bnum, @str expr [, @tmim mim, @tmf mf, data...])
       Generic boundary assembly.
-      
+
       See the help for ::ASM('volumic').@*/
     sub_command
       ("boundary", 3, -1, 0, -1,
@@ -637,6 +951,85 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
       ("extrapolation matrix", 2, 2, 0, 1,
        interpolate_or_extrapolate(in, out, 2);
        );
+
+
+    /*@FUNC B = ('integral contact Uzawa projection', @int bnum, @tmim mim, @tmf mf_u, @dvec U, @tmf mf_lambda, @dvec vec_lambda, @tmf mf_obstacle, @dvec obstacle, @scalar r [, {@scalar coeff | @tmf mf_coeff, @dvec coeff} [, @int option[, @scalar alpha, @dvec W]]])
+    Specific assembly procedure for the use of an Uzawa algorithm to solve
+      contact problems. Projects the term $-(\lambda - r (u_N-g))_-$ on the
+      finite element space of $\lambda$.
+
+    Return a @dcvec object.
+    @*/
+    sub_command
+      ("integral contact Uzawa projection", 9, 13, 0, 1,
+       int boundary_num = in.pop().to_integer();
+       const getfem::mesh_im *mim = get_mim(in);
+       const getfem::mesh_fem *mf_u = in.pop().to_const_mesh_fem();
+       // unsigned q_dim = mf_u->get_qdim();
+       darray u = in.pop().to_darray();
+       in.last_popped().check_trailing_dimension(int(mf_u->nb_dof()));
+       const getfem::mesh_fem *mf_lambda = in.pop().to_const_mesh_fem();
+       darray vec_lambda = in.pop().to_darray();
+       in.last_popped().check_trailing_dimension(int(mf_lambda->nb_dof()));
+       const getfem::mesh_fem *mf_obs = in.pop().to_const_mesh_fem();
+       darray obs = in.pop().to_darray();
+       in.last_popped().check_trailing_dimension(int(mf_obs->nb_dof()));
+       double r = in.pop().to_scalar();
+
+       darray F = out.pop().create_darray_v(unsigned(mf_lambda->nb_dof()));
+       if (in.remaining()) { // with friction
+           const getfem::mesh_fem *mf_coeff = 0;
+           darray vec_coeff;
+           mexarg_in argin = in.pop();
+           if (argin.is_mesh_fem()) {
+             mf_coeff = argin.to_const_mesh_fem();
+             vec_coeff = in.pop().to_darray();
+             in.last_popped().check_trailing_dimension(int(mf_coeff->nb_dof()));
+           } else
+             vec_coeff = darray(new double(argin.to_scalar()), 1);
+           int option = in.remaining() ? in.pop().to_integer() : 1;
+           double alpha =  in.remaining() ? in.pop().to_scalar() : 1;
+           darray vec_W;
+           if (in.remaining()) {
+             vec_W = in.pop().to_darray();
+             in.last_popped().check_trailing_dimension(int(mf_u->nb_dof()));
+           }
+           getfem::asm_integral_contact_Uzawa_proj
+             (F, *mim, *mf_u, u, *mf_obs, obs, *mf_lambda, vec_lambda,
+              mf_coeff, vec_coeff, &vec_W, r, alpha, boundary_num, option);
+       } else // without friction
+           getfem::asm_integral_contact_Uzawa_proj
+             (F, *mim, *mf_u, u, *mf_obs, obs, *mf_lambda, vec_lambda,
+              r, boundary_num);
+       );
+
+
+    /*@FUNC B = ('level set normal source term', @int bnum, @tmim mim, @tmf mf_u, @tmf mf_lambda, @dvec vec_lambda, @tmf mf_levelset, @dvec levelset)
+    Performs an assembly of the source term represented by `vec_lambda`
+    on `mf_lambda` considered to be a component in the direction of the
+    gradient of a levelset function (normal to the levelset) of a vector
+    field defined on `mf_u` on the boundary `bnum`.
+
+    Return a @dcvec object.
+    @*/
+    sub_command
+      ("level set normal source term", 7, 7, 0, 1,
+       int boundary_num = in.pop().to_integer();
+       const getfem::mesh_im *mim = get_mim(in);
+       const getfem::mesh_fem *mf_u = in.pop().to_const_mesh_fem();
+       const getfem::mesh_fem *mf_lambda = in.pop().to_const_mesh_fem();
+       darray vec_lambda = in.pop().to_darray();
+       in.last_popped().check_trailing_dimension(int(mf_lambda->nb_dof()));
+       const getfem::mesh_fem *mf_obs = in.pop().to_const_mesh_fem();
+       darray obs = in.pop().to_darray();
+       in.last_popped().check_trailing_dimension(int(mf_obs->nb_dof()));
+       darray F = out.pop().create_darray_v(unsigned(mf_u->nb_dof()));
+       getfem::asm_level_set_normal_source_term
+         (F, *mim, *mf_u, *mf_obs, obs, *mf_lambda, vec_lambda, boundary_num);
+       
+       );
+
+
   }
 
   if (m_in.narg() < 1)  THROW_BADARG( "Wrong number of input arguments");
@@ -647,8 +1040,8 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
   SUBC_TAB::iterator it = subc_tab.find(cmd);
   if (it != subc_tab.end()) {
     check_cmd(cmd, it->first.c_str(), m_in, m_out, it->second->arg_in_min,
-	      it->second->arg_in_max, it->second->arg_out_min,
-	      it->second->arg_out_max);
+              it->second->arg_in_max, it->second->arg_out_min,
+              it->second->arg_out_max);
     it->second->run(m_in, m_out);
   }
   else bad_cmd(init_cmd);
@@ -662,7 +1055,7 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
   @*/
 /*@MATLABFUNC @CELL{Q, G, H, R, F} = ('pdetool boundary conditions', mf_u, mf_d, b, e[, f_expr])
   Assembly of pdetool boundary conditions.
-  
+
   `B` is the boundary matrix exported by pdetool, and `E` is the
   edges array. `f_expr` is an optionnal expression (or vector) for
   the volumic term. On return `Q, G, H, R, F` contain the assembled
diff --git a/interface/src/gf_compute.cc b/interface/src/gf_compute.cc
index 341ca50..69d33db 100644
--- a/interface/src/gf_compute.cc
+++ b/interface/src/gf_compute.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_misc.h>
 #include <getfem/getfem_derivatives.h>
@@ -144,7 +144,29 @@ gf_interpolate(getfemint::mexargs_in& in, getfemint::mexargs_out& out,
     garray<T> V = out.pop().create_array(dims, T());
     sl->interpolate(mf, U, V);
   }
-  else THROW_BADARG("expecting a mesh_fem or a mesh_slice for interpolation");
+  else {
+    size_type N = mf.get_qdim();
+    darray st = in.pop().to_darray();
+    std::vector<double> PTS(st.begin(), st.end());
+    size_type nbpoints = gmm::vect_size(PTS) / N;
+    getfem::base_node p(N);
+    getfem::mesh_trans_inv mti(mf.linked_mesh());
+    for (size_type i = 0; i < nbpoints; ++i) {
+      gmm::copy(gmm::sub_vector(PTS, gmm::sub_interval(i*N, N)), p);
+      mti.add_point(p);
+    }
+    
+    size_type qmult = mf.get_qdim();
+    if (qmult != 1) dims.push_back(unsigned(qmult));
+    dims.push_back(unsigned(nbpoints));
+    dims.opt_transform_col_vect_into_row_vect();
+    garray<T> V = out.pop().create_array(dims,T());
+
+    getfem::base_matrix Maux;
+    getfem::interpolation(mf, mti, U, V, Maux, 0);
+
+  }
+  // else THROW_BADARG("expecting a mesh_fem or a mesh_slice for interpolation");
 }
 
 bool U_is_a_vector(const rcarray &U, const std::string& cmd) {
@@ -220,6 +242,36 @@ void gf_compute(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
        else out.pop().from_scalar(getfem::asm_L2_norm(*mim, *mf, U.cplx(),bv));
        );
 
+    /*@FUNC n = ('L2 dist', @tmim mim, @tmf mf2, @vec U2[, @mat CVids])
+    Compute the L2 distance between `U` and `U2`.
+
+    If `CVids` is given, the norm will be computed only on the listed
+    convexes.@*/
+    sub_command
+      ("L2 dist", 3, 4, 0, 1,
+       U_is_a_vector(U, "L2 dist");
+       const getfem::mesh_im *mim = in.pop().to_const_mesh_im();
+       const getfem::mesh_fem *mf_2 = in.pop().to_const_mesh_fem();
+       if (!U.is_complex()) {
+         darray st = in.pop().to_darray();
+         std::vector<double> V(st.begin(), st.end());
+	 dal::bit_vector bv = in.remaining() ?
+	   in.pop().to_bit_vector(&mf->convex_index()) : mf->convex_index();
+
+	 out.pop().from_scalar(getfem::asm_L2_dist(*mim, *mf, U.real(),
+						   *mf_2, V, bv));
+       } else {
+	 GMM_ASSERT1(false, "Sorry, complex version to be done");
+//          carray st = in.pop().to_carray();
+//          std::vector<std::complex<double> > V(st.begin(), st.end());
+// 	 dal::bit_vector bv = in.remaining() ?
+// 	   in.pop().to_bit_vector(&mf->convex_index()) : mf->convex_index();
+
+//          out.pop().from_scalar(getfem::asm_L2_dist(*mim, *mf, U.cplx(),
+// 						   *mf_2, V, bv));
+       }
+       );
+
 
    /*@FUNC n = ('H1 semi norm', @tmim mim[, @mat CVids])
     Compute the L2 norm of grad(`U`).
@@ -240,6 +292,37 @@ void gf_compute(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
        );
 
 
+    /*@FUNC n = ('H1 semi dist', @tmim mim, @tmf mf2, @vec U2[, @mat CVids])
+    Compute the semi H1 distance between `U` and `U2`.
+
+    If `CVids` is given, the norm will be computed only on the listed
+    convexes.@*/
+    sub_command
+      ("H1 semi dist", 3, 4, 0, 1,
+       U_is_a_vector(U, "H1 semi dist");
+       const getfem::mesh_im *mim = in.pop().to_const_mesh_im();
+       const getfem::mesh_fem *mf_2 = in.pop().to_const_mesh_fem();
+       if (!U.is_complex()) {
+         darray st = in.pop().to_darray();
+         std::vector<double> V(st.begin(), st.end());
+	 dal::bit_vector bv = in.remaining() ?
+	   in.pop().to_bit_vector(&mf->convex_index()) : mf->convex_index();
+
+	 out.pop().from_scalar(getfem::asm_H1_semi_dist(*mim, *mf, U.real(),
+						   *mf_2, V, bv));
+       } else {
+	 GMM_ASSERT1(false, "Sorry, complex version to be done");
+//          carray st = in.pop().to_carray();
+//          std::vector<std::complex<double> > V(st.begin(), st.end());
+// 	 dal::bit_vector bv = in.remaining() ?
+// 	   in.pop().to_bit_vector(&mf->convex_index()) : mf->convex_index();
+
+//          out.pop().from_scalar(getfem::asm_L2_dist(*mim, *mf, U.cplx(),
+// 						   *mf_2, V, bv));
+       }
+       );
+
+
     /*@FUNC n = ('H1 norm', @tmim mim[, @mat CVids])
     Compute the H1 norm of `U`.
 
@@ -367,8 +450,8 @@ void gf_compute(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
        );
 
 
-    /*@FUNC Ui = ('interpolate on', {@tmf mfi | @tsl sli})
-    Interpolate a field on another @tmf or a @tsl.
+    /*@FUNC Ui = ('interpolate on', {@tmf mfi | @tsl sli | @vec pts})
+    Interpolate a field on another @tmf or a @tsl or a list of points.
 
     - Interpolation on another @tmf `mfi`:
        `mfi` has to be Lagrangian. If `mf` and `mfi` share the same
@@ -378,6 +461,7 @@ void gf_compute(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
        mesh, but it is much faster. This can also be used with
        SLICE:INIT('points') to obtain field values at a given set of
        points.
+    - Interpolation on a set of points `pts`
 
     See also ::ASM('interpolation matrix')
     @*/
@@ -465,6 +549,8 @@ void gf_compute(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
        getfem::convect(*mf, U.real(), *mf_v, V.real(), dt, nt, opt);
 
        );
+
+
   }
   
   
diff --git a/interface/src/gf_cont_struct.cc b/interface/src/gf_cont_struct.cc
new file mode 100644
index 0000000..0a1d45e
--- /dev/null
+++ b/interface/src/gf_cont_struct.cc
@@ -0,0 +1,195 @@
+/*===========================================================================
+ 
+ Copyright (C) 2012-2012 Tomas Ligursky, Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+#include <getfemint.h>
+#include <getfemint_workspace.h>
+#include <getfemint_models.h>
+#include <getfemint_cont_struct.h>
+
+
+using namespace getfemint;
+
+/*@GFDOC
+  This object serves for storing parameters and data used in numerical
+  continuation (for more details about the continuation see the Getfem++ user
+  documentation).
+@*/
+
+void gf_cont_struct(getfemint::mexargs_in& in, getfemint::mexargs_out& out) {
+  getfemint_cont_struct *pgs = NULL;  
+  if (check_cmd("ContStruct", "ContStruct", in, out, 3, 35, 0, 1)) {
+    
+    /*@INIT S = ('.init', @tmodel md, @str dataname_parameter[, at str dataname_init, @str dataname_final, @str dataname_current], @scalar sc_fac[, ...])
+    The variable `dataname_parameter` should parametrise the model given by
+    `md`. If the parametrisation is done via some vector datum,
+    `dataname_init` and `dataname_final` should store two given values of
+    this datum determining the parametrisation, and `dataname_current`
+    serves for actual values of this datum. `sc_fac` is a scale factor
+    involved in the norm used in the continuation.
+    
+    Additional options:
+    
+    - 'lsolver', @str SOLVER_NAME
+       name of the solver to be used for the incorporated linear systems
+       (the default value is 'auto', which lets getfem choose itself);
+       possible values are 'superlu', 'mumps' (if supported), 'cg/ildlt',
+       'gmres/ilu' and 'gmres/ilut';
+    - 'max_iter', @int NIT
+       maximum number of iterations allowed in the correction (the default
+       value is 10);
+    - 'thr_iter', @int TIT
+       threshold number of iterations of the correction for enlarging the
+       step size (the default value is 8);
+    - 'max_res', @scalar RES
+       target residual value of the new point (the default value is 1e-6);
+    - 'max_diff', @scalar DIFF
+       determines a convergence criterion to the new tangent vector (the
+       default value is 1e-9);
+    - 'min_ang', @scalar ANG
+       minimal value of the cosine of the angle between tangents to the
+       solution curve at the old point and the new one (the default value
+       is 0.9);
+    - 'h_init', @scalar HIN
+       initial step size (the default value is 1e-2);
+    - 'h_max', @scalar HMAX
+       maximal step size (the default value is 1e-1);
+    - 'h_min', @scalar HMIN
+       minimal step size (the default value is 1e-5);
+    - 'h_inc', @scalar HINC
+       factor for enlarging the step size (the default value is 1.3);
+    - 'h_dec', @scalar HDEC
+       factor for diminishing the step size (the default value is 0.5);
+    - 'epsilon', @scalar EPS
+       increment to be used to compute the incorporated finite
+       differences (the default value is 1e-8);
+    - 'max_res_solve', @scalar RES_SOLVE
+       target residual value for the linear systems to be solved (the
+       default value is 1e-7);
+    - 'nb_test', @int NTEST
+       number of evaluations of the test function when passing through
+       a boundary between different smooth pieces;
+    - 'noisy' or 'very_noisy'
+       determines how detailed information has to be displayed during the
+       process (residual values etc.).@*/
+    
+       getfemint_model *md = in.pop().to_getfemint_model();
+
+       bool with_parametrized_data = false;
+       std::string dataname_parameter = in.pop().to_string();
+       std::string dataname_init; std::string dataname_final;
+       std::string dataname_current;
+       if (in.front().is_string()) {
+         with_parametrized_data = true;
+         dataname_init = in.pop().to_string();
+         dataname_final = in.pop().to_string();
+         dataname_current = in.pop().to_string();
+       } 
+       scalar_type scfac = in.pop().to_scalar();
+
+       std::string lsolver = "auto";
+       size_type maxit = 10; size_type thrit = 8;
+       scalar_type maxres = 1.e-6; scalar_type maxdiff = 1.e-9;
+       scalar_type minang = 0.9; scalar_type h_init = 1.e-2;
+       scalar_type h_max = 1.e-1; scalar_type h_min = 1.e-5;
+       scalar_type h_inc = 1.3; scalar_type h_dec = 0.5;
+       scalar_type epsilon = 1.e-8; scalar_type maxres_solve = 1.e-7;
+       size_type nb_test = 50;
+       int noisy = 0;
+
+       while (in.remaining() && in.front().is_string()) {
+         std::string opt = in.pop().to_string();
+         if (cmd_strmatch(opt, "lsolver"))  {
+           if (in.remaining()) lsolver = in.pop().to_string();
+           else THROW_BADARG("missing name for " << opt);
+         } else if (cmd_strmatch(opt, "max_iter")) {
+           if (in.remaining()) maxit = in.pop().to_integer();
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "thr_iter")) {
+           if (in.remaining()) thrit = in.pop().to_integer();
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "max_res")) {
+           if (in.remaining()) maxres = in.pop().to_scalar();
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "max_diff")) {
+           if (in.remaining()) maxdiff = in.pop().to_scalar();
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "min_ang")) {
+           if (in.remaining()) minang = in.pop().to_scalar();
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "h_init")) {
+           if (in.remaining()) h_init = in.pop().to_scalar();
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "h_max")) {
+           if (in.remaining()) h_max = in.pop().to_scalar();
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "h_min")) {
+           if (in.remaining()) h_min = in.pop().to_scalar();
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "h_inc")) {
+           if (in.remaining()) h_inc = in.pop().to_scalar();
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "h_dec")) {
+           if (in.remaining()) h_dec = in.pop().to_scalar();
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "epsilon")) {
+           if (in.remaining()) epsilon = in.pop().to_scalar();
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "max_res_solve")) {
+           if (in.remaining()) maxres_solve = in.pop().to_scalar();
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "nb_test")) {
+           if (in.remaining()) nb_test = in.pop().to_integer();
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "noisy")) noisy = 1;
+         else if (cmd_strmatch(opt, "very noisy") ||
+                  cmd_strmatch(opt, "very_noisy")) noisy = 2;
+         else THROW_BADARG("bad option: " << opt);
+       }
+
+       if (md->model().is_complex())
+	 THROW_BADARG("Sorry, the continuation has only a real version.");
+
+       getfem::cont_struct_getfem_model *ps;
+       if (with_parametrized_data) {
+	 getfem::cont_struct_getfem_model *ps1 =
+	   new getfem::cont_struct_getfem_model
+	   (md->model(), dataname_parameter, dataname_init, dataname_final,
+	    dataname_current,
+	    getfem::rselect_linear_solver(md->model(), lsolver), scfac,
+	    maxit, thrit, maxres, maxdiff, minang, h_init, h_max, h_min,
+	    h_inc, h_dec, epsilon, maxres_solve, noisy, nb_test);
+	 ps = ps1;
+       }
+       else {
+	 getfem::cont_struct_getfem_model *ps1 =
+	   new getfem::cont_struct_getfem_model
+           (md->model(), dataname_parameter,
+	    getfem::rselect_linear_solver(md->model(), lsolver), scfac,
+	    maxit, thrit, maxres, maxdiff, minang, h_init, h_max, h_min,
+	    h_inc, h_dec, epsilon, maxres_solve, noisy, nb_test);
+	 ps = ps1;
+       }
+
+       pgs = getfemint_cont_struct::get_from(ps);
+       workspace().set_dependance(pgs, md);
+  }
+  out.pop().from_object_id(pgs->get_id(), CONT_STRUCT_CLASS_ID);
+}
diff --git a/interface/src/gf_cont_struct_get.cc b/interface/src/gf_cont_struct_get.cc
new file mode 100644
index 0000000..76a4e09
--- /dev/null
+++ b/interface/src/gf_cont_struct_get.cc
@@ -0,0 +1,202 @@
+/*===========================================================================
+ 
+ Copyright (C) 2012-2012 Tomas Ligursky, Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+#include <getfemint_misc.h>
+#include <getfemint_workspace.h>
+#include <getfemint_cont_struct.h>
+
+using namespace getfemint;
+
+// Object for the declaration of a new sub-command.
+
+struct sub_gf_cont_struct_get : virtual public dal::static_stored_object {
+  int arg_in_min, arg_in_max, arg_out_min, arg_out_max;
+  virtual void run(getfemint::mexargs_in& in,
+		   getfemint::mexargs_out& out,
+		   getfem::cont_struct_getfem_model *ps) = 0;
+};
+
+typedef boost::intrusive_ptr<sub_gf_cont_struct_get> psub_command;
+
+// Function to avoid warning in macro with unused arguments.
+template <typename T> static inline void dummy_func(T &) {}
+
+#define sub_command(name, arginmin, arginmax, argoutmin, argoutmax, code) { \
+    struct subc : public sub_gf_cont_struct_get {			\
+      virtual void run(getfemint::mexargs_in& in,			\
+		       getfemint::mexargs_out& out,			\
+		       getfem::cont_struct_getfem_model *ps)		\
+      { dummy_func(in); dummy_func(out); dummy_func(ps); code }		\
+    };									\
+    psub_command psubc = new subc;					\
+    psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax;		\
+    psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax;	\
+    subc_tab[cmd_normalize(name)] = psubc;				\
+  }       
+
+
+/*@GFDOC
+  General function for querying information about cont_struct objects and for
+  applying them to numerical continuation.
+@*/
+
+void gf_cont_struct_get(getfemint::mexargs_in& m_in,
+			getfemint::mexargs_out& m_out) {
+  typedef std::map<std::string, psub_command > SUBC_TAB;
+  static SUBC_TAB subc_tab;
+
+  if (subc_tab.size() == 0) {
+  
+
+    /*@FUNC t = ('init test function', @vec tangent, @scalar tangent_parameter)
+      Initialise the border of the bordered system that serves for calculating
+      the test function. Return the value of test function for the solution
+      and the value of the parameter saved in the corresponding model object
+      and the tangent given by `tangent` and `tangent_parameter`.@*/
+    sub_command
+      ("init test function", 2, 2, 0, 1,
+
+       size_type nbdof = ps->linked_model().nb_dof();
+       std::vector<double> yy(nbdof); ps->linked_model().from_variables(yy);
+       const getfem::model_real_plain_vector &GAMMA =
+       ps->linked_model().real_variable(ps->parameter_name());
+       GMM_ASSERT1(gmm::vect_size(GAMMA) == 1,
+                   "The continuation parameter should be a real scalar!");
+       scalar_type gamma = GAMMA[0];
+       darray t_y = in.pop().to_darray();
+       std::vector<double> tt_y(nbdof); gmm::copy(t_y, tt_y);
+       scalar_type t_gamma = in.pop().to_scalar();
+
+       getfem::init_test_function(*ps, yy, gamma, tt_y, t_gamma);
+       out.pop().from_scalar(ps->tau2());
+       );
+  
+
+    /*@FUNC E = ('init Moore-Penrose continuation', @scalar init_dir)
+      Initialise the Moore-Penrose continuation: Return a unit tangent
+      corresponding to the solution branch at the solution and the
+      value of the parameter saved in the corresponding model object,
+      and an initial step size for the continuation. Direction of the
+      computed tangent with respect to the parameter is determined by the
+      sign of `init_dir`.@*/
+    sub_command
+      ("init Moore-Penrose continuation", 1, 1, 0, 3,
+
+       size_type nbdof = ps->linked_model().nb_dof();
+       std::vector<double> yy(nbdof); ps->linked_model().from_variables(yy);
+       const getfem::model_real_plain_vector &GAMMA
+       = ps->linked_model().real_variable(ps->parameter_name());
+       GMM_ASSERT1(gmm::vect_size(GAMMA) == 1,
+                   "The continuation parameter should be a real scalar!");
+       scalar_type gamma = GAMMA[0];
+       std::vector<double> tt_y(nbdof);
+       scalar_type t_gamma = in.pop().to_scalar();
+       scalar_type h;
+
+       getfem::init_Moore_Penrose_continuation(*ps, yy, gamma,
+					       tt_y, t_gamma, h);
+       out.pop().from_dcvector(tt_y);
+       out.pop().from_scalar(t_gamma);
+       out.pop().from_scalar(h);
+       );
+
+
+    /*@FUNC E = ('Moore-Penrose continuation', @vec tangent, @scalar tangent_parameter, @scalar h)
+      Compute one step of the Moore-Penrose continuation: Take the solution
+      and the value of the parameter saved in the corresponding model object,
+      the tangent given by `tangent` and `tangent_parameter`, and the step
+      size `h`, save a new point on the solution curve into the model object,
+      and return a new tangent and a step size for the next step. If the
+      returned step size equals zero, the continuation has failed.@*/
+    sub_command
+      ("Moore-Penrose continuation", 3, 3, 0, 3,
+
+       size_type nbdof = ps->linked_model().nb_dof();
+       std::vector<double> yy(nbdof); ps->linked_model().from_variables(yy);
+       const getfem::model_real_plain_vector &GAMMA
+       = ps->linked_model().real_variable(ps->parameter_name());
+       GMM_ASSERT1(gmm::vect_size(GAMMA) == 1,
+                   "The continuation parameter should be a real scalar!");
+       scalar_type gamma = GAMMA[0];
+       darray t_y = in.pop().to_darray();
+       std::vector<double> tt_y(nbdof); gmm::copy(t_y, tt_y);
+       scalar_type t_gamma = in.pop().to_scalar();
+       scalar_type h = in.pop().to_scalar();
+
+       getfem::Moore_Penrose_continuation(*ps, yy, gamma, tt_y, t_gamma, h);
+       out.pop().from_dcvector(tt_y);
+       out.pop().from_scalar(t_gamma);
+       out.pop().from_scalar(h);
+       );
+
+
+    /*@GET t = ('test function')
+      Return the last value of the test function and eventaully all the
+      values calculated when passing through a boundary between different
+      smooth pieces.@*/
+    sub_command
+      ("test function", 0, 0, 0, 2,
+       out.pop().from_scalar(ps->tau2());
+       if (out.remaining()) out.pop().from_dcvector(ps->get_tau_hist());
+       );
+
+
+    /*@GET s = ('char')
+      Output a (unique) string representation of the @tcs.
+
+      This can be used to perform comparisons between two
+      different @tcs objects.
+      This function is to be completed.
+      @*/
+    sub_command
+      ("char", 0, 0, 0, 1,
+       GMM_ASSERT1(false, "Sorry, function to be done");
+       // std::string s = ...;
+       // out.pop().from_string(s.c_str());
+       );
+
+
+    /*@GET ('display')
+      Display a short summary for a @tcs object.@*/
+    sub_command
+      ("display", 0, 0, 0, 0,
+       infomsg() << "gfContStruct object\n";
+       );
+
+  }
+
+
+  if (m_in.narg() < 2)  THROW_BADARG( "Wrong number of input arguments");
+
+  getfem::cont_struct_getfem_model *ps = m_in.pop().to_cont_struct();
+  std::string init_cmd   = m_in.pop().to_string();
+  std::string cmd        = cmd_normalize(init_cmd);
+
+  SUBC_TAB::iterator it = subc_tab.find(cmd);
+  if (it != subc_tab.end()) {
+    check_cmd(cmd, it->first.c_str(), m_in, m_out, it->second->arg_in_min,
+	      it->second->arg_in_max, it->second->arg_out_min,
+	      it->second->arg_out_max);
+    it->second->run(m_in, m_out, ps);
+  }
+  else bad_cmd(init_cmd);
+
+}
diff --git a/interface/src/gf_cvstruct_get.cc b/interface/src/gf_cvstruct_get.cc
index c43ff2a..f3c21e5 100644
--- a/interface/src/gf_cvstruct_get.cc
+++ b/interface/src/gf_cvstruct_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint.h>
 #include <getfemint_convex_structure.h>
diff --git a/interface/src/gf_delete.cc b/interface/src/gf_delete.cc
index fa61b98..41418ea 100644
--- a/interface/src/gf_delete.cc
+++ b/interface/src/gf_delete.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2010 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint.h>
 #include <getfemint_workspace.h>
diff --git a/interface/src/gf_eltm.cc b/interface/src/gf_eltm.cc
index da49115..02bb41a 100644
--- a/interface/src/gf_eltm.cc
+++ b/interface/src/gf_eltm.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_misc.h>
 #include <getfemint_matelemtype.h>
@@ -28,7 +28,7 @@ using namespace getfemint;
 /*@GFDOC
 
   This object represents a type of elementary matrix. In order to obtain a
-  numerical value of theses matrices, see MESH_IM:GET('eltm').
+  numerical value of these matrices, see MESH_IM:GET('eltm').
 
   If you have very particular assembling needs, or if you just want to check
   the content of an elementary matrix, this function might be useful. But
diff --git a/interface/src/gf_fem.cc b/interface/src/gf_fem.cc
index 3ffd40a..c5da1dc 100644
--- a/interface/src/gf_fem.cc
+++ b/interface/src/gf_fem.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_fem.cc 3513 2010-03-24 06:05:09Z lsaavedr $
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: gf_fem.cc 4114 2012-07-06 11:20:10Z renard $
 #include <getfemint_misc.h>
 #include <getfemint_pfem.h>
 #include <getfemint_mesh_fem.h>
diff --git a/interface/src/gf_fem_get.cc b/interface/src/gf_fem_get.cc
index 2274963..3562495 100644
--- a/interface/src/gf_fem_get.cc
+++ b/interface/src/gf_fem_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint.h>
 #include <getfemint_pfem.h>
diff --git a/interface/src/gf_geotrans.cc b/interface/src/gf_geotrans.cc
index 7d296df..4fe0329 100644
--- a/interface/src/gf_geotrans.cc
+++ b/interface/src/gf_geotrans.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint.h>
 #include <getfemint_pgt.h>
diff --git a/interface/src/gf_geotrans_get.cc b/interface/src/gf_geotrans_get.cc
index a3741f3..57fda4b 100644
--- a/interface/src/gf_geotrans_get.cc
+++ b/interface/src/gf_geotrans_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint.h>
 #include <getfemint_pgt.h>
diff --git a/interface/src/gf_global_function.cc b/interface/src/gf_global_function.cc
index 7c76af2..8728998 100644
--- a/interface/src/gf_global_function.cc
+++ b/interface/src/gf_global_function.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Luis Saavedra.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_global_function.cc 3513 2010-03-24 06:05:09Z lsaavedr $
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Luis Saavedra.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: gf_global_function.cc 4114 2012-07-06 11:20:10Z renard $
 #include <getfemint.h>
 #include <getfemint_workspace.h>
 #include <getfemint_global_function.h>
@@ -106,7 +106,7 @@ void gf_global_function(getfemint::mexargs_in& m_in,
        );
 
 
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
     /*@INIT GF = ('parser', @str val[, @str grad[, @str hess]])
       Create a global function from strings `val`, `grad` and `hess`.@*/
     sub_command
diff --git a/interface/src/gf_global_function_get.cc b/interface/src/gf_global_function_get.cc
index bc3646c..43d9a28 100644
--- a/interface/src/gf_global_function_get.cc
+++ b/interface/src/gf_global_function_get.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Luis Saavedra.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_global_function_get.cc 3468 2010-02-24 20:12:15Z renard $
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Luis Saavedra.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: gf_global_function_get.cc 4114 2012-07-06 11:20:10Z renard $
 #include <getfemint.h>
 #include <getfemint_global_function.h>
 
diff --git a/interface/src/gf_integ.cc b/interface/src/gf_integ.cc
index 3f6630f..3b42966 100644
--- a/interface/src/gf_integ.cc
+++ b/interface/src/gf_integ.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint.h>
 #include <getfemint_integ.h>
diff --git a/interface/src/gf_integ_get.cc b/interface/src/gf_integ_get.cc
index 47c40e9..677e37a 100644
--- a/interface/src/gf_integ_get.cc
+++ b/interface/src/gf_integ_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint.h>
 #include <getfemint_integ.h>
@@ -94,7 +94,7 @@ void gf_integ_get(getfemint::mexargs_in& m_in,
     Return the total number of integration points.
 
     Count the points for the volume integration, and points for
-    surface integration on each face of the reference convex.<Par>
+    surface integration on each face of the reference convex.
 
     Only for approximate methods, this has no meaning for exact
     integration methods!@*/
diff --git a/interface/src/gf_levelset.cc b/interface/src/gf_levelset.cc
index 32819f7..1cdd286 100644
--- a/interface/src/gf_levelset.cc
+++ b/interface/src/gf_levelset.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint.h>
 #include <getfemint_levelset.h>
@@ -31,10 +31,10 @@ using namespace getfemint;
    The level-set object is represented by a primary level-set and optionally
    a secondary level-set used to represent fractures (if p(x) is the primary
    level-set function and s(x) is the secondary level-set, the crack is
-   defined by p(x)=0 and s(x)<=0: the role of the secondary is to determine
+   defined by :math:`p(x)=0` and :math:`s(x)\leq0` : the role of the secondary is to determine
    the crack front/tip).
 
-   .. note::
+   note:
 
       All tools listed below need the package qhull installed on your
       system. This package is widely available. It computes convex hull and
@@ -74,7 +74,7 @@ getfemint::mexargs_in& in, getfemint::mexargs_out& out) {
       new getfem::level_set(mm->mesh(),dim_type(degree),with_secondary);
     gls = getfemint_levelset::get_from(ls);
 
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H  
     if (s1.size()) gls->values_from_func(0, s1);
     if (s2.size()) gls->values_from_func(1, s2);
 #else
diff --git a/interface/src/gf_levelset_get.cc b/interface/src/gf_levelset_get.cc
index e0adf3d..304a5b3 100644
--- a/interface/src/gf_levelset_get.cc
+++ b/interface/src/gf_levelset_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint.h>
 #include <getfemint_levelset.h>
diff --git a/interface/src/gf_levelset_set.cc b/interface/src/gf_levelset_set.cc
index d42bd1f..d9d341e 100644
--- a/interface/src/gf_levelset_set.cc
+++ b/interface/src/gf_levelset_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint.h>
 #include <getfemint_levelset.h>
@@ -62,7 +62,7 @@ void gf_levelset_set(getfemint::mexargs_in& in, getfemint::mexargs_out& out)
     }
     ls.values(0).resize(ls.get_mesh_fem().nb_dof());
     if (s1.size()) {
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
       gls->values_from_func(0, s1);
 #else
       gls->values_from_poly(0, s1);
@@ -73,7 +73,7 @@ void gf_levelset_set(getfemint::mexargs_in& in, getfemint::mexargs_out& out)
     if (ls.has_secondary()) {
       ls.values(1).resize(ls.get_mesh_fem().nb_dof());
       if (s2.size()) {
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
         gls->values_from_func(1, s2);
 #else
         gls->values_from_poly(1, s2);
diff --git a/interface/src/gf_linsolve.cc b/interface/src/gf_linsolve.cc
index a648c2e..d7ffe33 100644
--- a/interface/src/gf_linsolve.cc
+++ b/interface/src/gf_linsolve.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_gsparse.h>
 #include <getfemint_precond.h>
diff --git a/interface/src/gf_mdbrick.cc b/interface/src/gf_mdbrick.cc
index a9996b8..dcb35bf 100644
--- a/interface/src/gf_mdbrick.cc
+++ b/interface/src/gf_mdbrick.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**\file gf_mdbrick.cc
    \brief mdbrick construction wrapper.
diff --git a/interface/src/gf_mdbrick_get.cc b/interface/src/gf_mdbrick_get.cc
index a280f6b..8631b3e 100644
--- a/interface/src/gf_mdbrick_get.cc
+++ b/interface/src/gf_mdbrick_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2010 Y. Renard, J. Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Y. Renard, J. Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**\file gf_mdbrick_set.cc
    \brief getfemint_mdbrick getter.
@@ -165,7 +165,6 @@ void gf_mdbrick_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out)
     if (b->is_complex() != md->is_complex())
       THROW_BADARG("cannot mix complex mdbricks with real mdstate");
 
-    //gmm::iteration iter;
     getfemint::interruptible_iteration iter;
     std::string lsolver = "auto";
     while (in.remaining() && in.front().is_string()) {
@@ -183,7 +182,7 @@ void gf_mdbrick_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out)
 	else THROW_BADARG("missing solver name for " << opt);
       } else THROW_BADARG("bad option: " << opt);
     }
-    gmm::default_newton_line_search ls;
+    getfem::default_newton_line_search ls;
     if (!md->is_complex()) {
       getfem::standard_solve(md->real_mdstate(), b->real_mdbrick(), iter,
 	       getfem::select_linear_solver(b->real_mdbrick(), lsolver), ls);
diff --git a/interface/src/gf_mdbrick_set.cc b/interface/src/gf_mdbrick_set.cc
index ad5606d..c8e8267 100644
--- a/interface/src/gf_mdbrick_set.cc
+++ b/interface/src/gf_mdbrick_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2010 Y. Renard, J. Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Y. Renard, J. Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**\file gf_mdbrick_set.cc
    \brief getfemint_mdbrick setter.
diff --git a/interface/src/gf_mdstate.cc b/interface/src/gf_mdstate.cc
index 90cda67..538dccf 100644
--- a/interface/src/gf_mdstate.cc
+++ b/interface/src/gf_mdstate.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**\file gf_mdbrick.cc
    \brief mdbrick construction wrapper.
diff --git a/interface/src/gf_mdstate_get.cc b/interface/src/gf_mdstate_get.cc
index f8f17ae..a3365d4 100644
--- a/interface/src/gf_mdstate_get.cc
+++ b/interface/src/gf_mdstate_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2010 Y. Renard, J. Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Y. Renard, J. Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**\file gf_mdstate_get.cc
    \brief getfemint_mdstate getter.
diff --git a/interface/src/gf_mdstate_set.cc b/interface/src/gf_mdstate_set.cc
index 0fade2c..f16b209 100644
--- a/interface/src/gf_mdstate_set.cc
+++ b/interface/src/gf_mdstate_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2010 Y. Renard, J. Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Y. Renard, J. Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**\file gf_mdstate_set.cc
    \brief getfemint_mdstate setter.
diff --git a/interface/src/gf_mesh.cc b/interface/src/gf_mesh.cc
index 7768c53..46a8a4c 100644
--- a/interface/src/gf_mesh.cc
+++ b/interface/src/gf_mesh.cc
@@ -1,34 +1,35 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_mesh.cc 3513 2010-03-24 06:05:09Z lsaavedr $
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: gf_mesh.cc 4118 2012-07-10 13:39:24Z renard $
 #include <getfemint.h>
 #include <getfemint_workspace.h>
 #include <getfemint_mesh.h>
 #include <getfem/getfem_import.h>
 #include <getfem/getfem_regular_meshes.h>
+#include <getfem/getfem_mesher.h>
 
 using namespace getfemint;
 
 static void
-cartesian_mesh(getfem::mesh *pmesh, getfemint::mexargs_in &in)
+cartesian_mesh(getfem::mesh *pmesh, getfemint::mexargs_in &in, bool linear=true)
 {
   getfemint::size_type dim = in.remaining();
 
@@ -66,7 +67,8 @@ cartesian_mesh(getfem::mesh *pmesh, getfemint::mexargs_in &in)
   std::vector<int> ipt(dim);
   std::vector<getfem::base_node> pts(1 << (dim+1));
 
-  bgeot::pgeometric_trans pgt = bgeot::parallelepiped_linear_geotrans(dim);
+  bgeot::pgeometric_trans pgt = linear ? bgeot::parallelepiped_linear_geotrans(dim)
+                                       : bgeot::parallelepiped_geotrans(dim, 1);
 
   /* add the convexes */
   for (size_type i=0; i < grid_nconvex; i++) {
@@ -212,6 +214,7 @@ regular_simplices_mesh(getfem::mesh *pmesh, getfemint::mexargs_in &in) {
 	p[k] += diff[k] * gmm::random(double()) * 0.2 / K;
     }
   }
+  pmesh->points().resort();
 }
 
 static void
@@ -352,6 +355,15 @@ void gf_mesh(getfemint::mexargs_in& m_in,
        );
 
 
+    /*@INIT M = ('cartesian Q1', @dvec X, @dvec Y[, @dvec Z,..])
+      Build quickly a regular mesh of quadrangles, cubes, etc. with
+      Q1 elements.@*/
+    sub_command
+      ("cartesian Q1", 2, 32, 0, 1,
+       cartesian_mesh(pmesh, in, false);
+       );
+
+
     /*@INIT M = ('triangles grid', @dvec X, @dvec Y)
       Build quickly a regular mesh of triangles.
 
@@ -475,6 +487,45 @@ void gf_mesh(getfemint::mexargs_in& m_in,
        pmesh->copy_from(*m2);
        );
 
+    /*@INIT M = ('generate', @tmo mo, @scalar h[, @int K = 1[, @mat vertices]])
+      Call the (very) experimental mesher of Getfem on the geometry
+      represented by `mo`. please control the conformity of the produced mesh.
+      You can add the mesher by adding a priori vertices in the array
+      `vertices` which should be of size ``n x m`` where ``n`` n is the
+      dimension of the mesh and ``m`` the number of points. `h` is
+      approximate diameter of the elements. `K` is the degree of the
+      mesh ( > 1 for curved boundaries).  The mesher try to optimize the
+      quality of the elements. This operation may be time consuming.
+      Note that if the mesh generation fails, because of some random
+      procedure used, it will not give necessarily the same result due
+      to random procedures used.
+      The messages send to the console by the mesh generation can be
+      desactivated using `gf_util('trace level', 2)`. More information
+      can be obtained by `gf_util('trace level', 4)`.
+      @*/
+    sub_command
+      ("generate", 2, 4, 0, 1,
+
+       const getfem::mesher_signed_distance *pmo
+            = in.pop().to_const_mesher_object();
+       double h = in.pop().to_scalar();
+       int K = 1;
+       if (in.remaining()) K = in.pop().to_integer(1,6);
+       std::vector<getfem::base_node> fixed;
+       if (in.remaining()) {
+	 darray v = in.pop().to_darray(-1, -1);
+	 for (int j=0; j < int(v.getn()); j++) {
+	   getfem::base_node pt(v.getm());
+	   gmm::copy(v.col_to_bn(j), pt);
+	   fixed.push_back(pt);
+	 }
+       }
+       int prefind = 1;
+       int max_iter = 400;
+
+       getfem::build_mesh(*pmesh, *pmo, h, fixed, K, -1, max_iter, prefind);
+       );
+
   }
 
 
diff --git a/interface/src/gf_mesh_fem.cc b/interface/src/gf_mesh_fem.cc
index 0e44a0e..5b18a20 100644
--- a/interface/src/gf_mesh_fem.cc
+++ b/interface/src/gf_mesh_fem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_misc.h>
 #include <getfemint_workspace.h>
@@ -33,7 +33,7 @@
 using namespace getfemint;
 
 /*@GFDOC
-  This object represent a finite element method defined on a whole mesh.
+  This object represents a finite element method defined on a whole mesh.
 @*/
 
 
@@ -176,7 +176,8 @@ void gf_mesh_fem(getfemint::mexargs_in& m_in,
 
     /*@INIT MF = ('global function', @tmesh m, @tls ls, @CELL{@tgf GF1,...}[, @int Qdim_m])
       Create a @tmf whose base functions are global function given by the
-      user.@*/
+      user in the system of coordinate defined by the iso-values of the two
+      level-set function of `ls`. @*/
     sub_command
       ("global function", 3, 4, 0, 1,
        mm = in.pop().to_getfemint_mesh();
diff --git a/interface/src/gf_mesh_fem_get.cc b/interface/src/gf_mesh_fem_get.cc
index 29f2407..0815065 100644
--- a/interface/src/gf_mesh_fem_get.cc
+++ b/interface/src/gf_mesh_fem_get.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_mesh_fem_get.cc 3468 2010-02-24 20:12:15Z renard $
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: gf_mesh_fem_get.cc 4114 2012-07-06 11:20:10Z renard $
 #include <getfemint_misc.h>
 #include <getfemint_mesh_fem.h>
 #include <getfemint_integ.h>
@@ -449,7 +449,7 @@ void gf_mesh_fem_get(getfemint::mexargs_in& m_in,
 
     Lagrangian means that each base function Phi[i] is such that
     Phi[i](P[j]) = delta(i,j), where P[j] is the dof location of
-    the jth base function, and delta(i,j) = 1 if i==j, else 0.<Par>
+    the jth base function, and delta(i,j) = 1 if i==j, else 0.
 
     If `CVids` is omitted, it returns 1 if all convexes in the mesh
     are Lagrangian. If `CVids` is used, it returns the convex indices
@@ -908,11 +908,11 @@ void gf_mesh_fem_get(getfemint::mexargs_in& m_in,
 
     Examples::
 
-      mf.eval('x[0]*x[1]') # interpolates the function 'x*y'
-      mf.eval('[x[0],x[1]]') # interpolates the vector field '[x,y]'
+      mf.eval('x*y') # interpolates the function 'x*y'
+      mf.eval('[x,y]') # interpolates the vector field '[x,y]'
 
       import numpy as np
-      mf.eval('np.sin(x[0])',globals(),locals()) # interpolates the function sin(x)
+      mf.eval('np.sin(x)',globals(),locals()) # interpolates the function sin(x)
     """
     P = self.basic_dof_nodes()
     nbd = P.shape[1]
@@ -923,15 +923,18 @@ void gf_mesh_fem_get(getfemint::mexargs_in& m_in,
       Ind = numpy.arange(0,nbd,self.qdim()) # = sdof
       P   = P[:,Ind]
       nbd = P.shape[1] # = nb_sdof
-    x = P[:,0]
-    gl['x'] = P[:,0]
-    lo['x'] = P[:,0]
+    vars = ('x','y','z','u','v','w')
+    nbvars = min(P.shape[0],len(vars))
+    for i in xrange(0,nbvars):
+      gl[vars[i]] = P[i,0]
+      lo[vars[i]] = P[i,0]
     r = numpy.array(eval(expression,gl,lo))
     Z = numpy.zeros(r.shape + (nbd,), r.dtype)
-    for i in xrange(0,nbd):
-      gl['x'] = P[:,i]
-      lo['x'] = P[:,i]
-      Z[...,i] = eval(expression,gl,lo)
+    for j in xrange(0,nbd):
+      for i in xrange(0,nbvars):
+        gl[vars[i]] = P[i,j]
+        lo[vars[i]] = P[i,j]
+      Z[...,j] = eval(expression,gl,lo)
     return Z
   @*/
 
diff --git a/interface/src/gf_mesh_fem_set.cc b/interface/src/gf_mesh_fem_set.cc
index 8847bc7..b8adcc3 100644
--- a/interface/src/gf_mesh_fem_set.cc
+++ b/interface/src/gf_mesh_fem_set.cc
@@ -1,28 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_misc.h>
 #include <getfemint_mesh_fem.h>
 #include <getfemint_gsparse.h>
 #include <getfem/getfem_partial_mesh_fem.h>
+#include <gmm/gmm_range_basis.h>
 
 using namespace getfemint;
 
@@ -71,15 +72,15 @@ static void set_classical_fem(getfem::mesh_fem *mf, getfemint::mexargs_in& in,
     bv = in.pop().to_bit_vector(&mf->linked_mesh().convex_index(),
 				-config::base_index());
     if (!discontinuous) {
-      mf->set_classical_finite_element(bv,K);
+      mf->set_classical_finite_element(bv, K);
     } else {
-      mf->set_classical_discontinuous_finite_element(bv,K,alpha);
+      mf->set_classical_discontinuous_finite_element(bv, K, alpha);
     }
   } else {
     if (!discontinuous) {
       mf->set_classical_finite_element(K);
     } else {
-      mf->set_classical_discontinuous_finite_element(K,alpha);
+      mf->set_classical_discontinuous_finite_element(K, alpha);
     }
   }
 }
@@ -157,7 +158,7 @@ void gf_mesh_fem_set(getfemint::mexargs_in& m_in,
 
     Similar to MESH_FEM:SET('classical fem') except that
     FEM_PK_DISCONTINUOUS is used. Param `alpha` the node inset,
-    0 <= alpha < 1, where 0 implies usual dof nodes, greater values
+    :math:`0 \leq alpha < 1`, where 0 implies usual dof nodes, greater values
     move the nodes toward the center of gravity, and 1 means that all
     degrees of freedom collapse on the center of gravity.@*/
     sub_command
@@ -208,12 +209,26 @@ void gf_mesh_fem_set(getfemint::mexargs_in& m_in,
        mf->set_reduction(s != size_type(0));
        );
 
+    /*@SET ('reduce meshfem', @mat RM)
+      Set reduction mesh fem
+      This function selects the degrees of freedom of the finite element
+      method by selecting a set of independent vectors of the matrix RM.
+      The numer of columns of RM should corresponds to the number of degrees
+      of fredoom of the finite element method.  @*/
+    sub_command
+      ("reduce meshfem", 1, 1, 0, 0,
+       dal::shared_ptr<gsparse>  RM = in.pop().to_sparse();
+       std::set<size_type> cols;
+       cols.clear();
+       gmm::range_basis(RM->real_csc(), cols, 1e-12);
+       mf->reduce_to_basic_dof(cols);
+       );
 
     /*@SET ('dof partition', @ivec DOFP)
-    Change the 'dof_partition' array.
-
-    `DOFP` is a vector holding a integer value for each convex of the @tmf.
-    See MESH_FEM:GET('dof partition') for a description of "dof partition".@*/
+      Change the 'dof_partition' array.
+      
+      `DOFP` is a vector holding a integer value for each convex of the @tmf.
+      See MESH_FEM:GET('dof partition') for a description of "dof partition".@*/
     sub_command
       ("dof partition", 1, 1, 0, 0,
        iarray v =
diff --git a/interface/src/gf_mesh_get.cc b/interface/src/gf_mesh_get.cc
index 4ce16fe..8de3acc 100644
--- a/interface/src/gf_mesh_get.cc
+++ b/interface/src/gf_mesh_get.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_mesh_get.cc 3559 2010-05-17 19:33:50Z renard $
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: gf_mesh_get.cc 4114 2012-07-06 11:20:10Z renard $
 #include <map>
 #include <getfemint_misc.h>
 #include <getfemint_mesh.h>
@@ -350,14 +350,14 @@ void gf_mesh_get(getfemint::mexargs_in& m_in,
        
        dal::bit_vector pids;
        for (size_type j=0; j < v.getn(); j++) {
-	 size_type cv = v(0,j);
-	 short_type f = short_type(v(1,j));
+	 size_type cv = v(0,j) - config::base_index();
+	 short_type f = short_type(v(1,j) - config::base_index());
 	 
 	 if (pmesh->convex_index().is_in(cv)) {
-	   if (short_type(-1)==f){// this works in python only, please porting it to matlab.
+	   if (short_type(-1)==f){
 	     for (unsigned i=0; i < pmesh->nb_points_of_convex(cv); ++i)
 	       pids.add(pmesh->ind_points_of_convex(cv)[i]);
-	   } else if ( 0. <= f && f <= pmesh->structure_of_convex(cv)->nb_faces()){
+	   } else if (f < pmesh->structure_of_convex(cv)->nb_faces()) {
 	     for (unsigned i=0; i < pmesh->structure_of_convex(cv)->nb_points_of_face(f); ++i)
 	       pids.add(pmesh->ind_points_of_face_of_convex(cv,f)[i]);
 	   }
@@ -396,16 +396,16 @@ void gf_mesh_get(getfemint::mexargs_in& m_in,
       ("pid in regions", 1, 1, 0, 1,
        check_empty_mesh(pmesh);
        
-       dal::bit_vector rlst = in.pop().to_bit_vector();
+       dal::bit_vector rlst = in.pop().to_bit_vector(&pmesh->regions_index(), 0);
        dal::bit_vector pids;
        
        for (dal::bv_visitor r(rlst); !r.finished(); ++r) {
 	 if (pmesh->regions_index().is_in(r)) {
 	   for (getfem::mr_visitor i(pmesh->region(r)); !i.finished(); ++i) {
-	     if (short_type(-1)==i.f()){// this works in python only, please porting it to matlab.
+	     if (short_type(-1)==i.f()) {
 	       for (unsigned j=0; j < pmesh->nb_points_of_convex(i.cv()); ++j)
 		 pids.add(pmesh->ind_points_of_convex(i.cv())[j]);
-	     } else{
+	     } else {
 	       for (unsigned j=0; j < pmesh->structure_of_convex(i.cv())->nb_points_of_face(i.f()); ++j)
 		 pids.add(pmesh->ind_points_of_face_of_convex(i.cv(),i.f())[j]);
 	     }
@@ -808,7 +808,7 @@ void gf_mesh_get(getfemint::mexargs_in& m_in,
 
 
     /*@GET Q = ('quality'[, @ivec CVIDs])
-    Return an estimation of the quality of each convex (0 <= Q <= 1).@*/
+    Return an estimation of the quality of each convex (:math:`0 \leq Q \leq 1`).@*/
     sub_command
       ("quality", 0, 1, 0, 1,
        dal::bit_vector bv;
diff --git a/interface/src/gf_mesh_im.cc b/interface/src/gf_mesh_im.cc
index decdd35..83a64e7 100644
--- a/interface/src/gf_mesh_im.cc
+++ b/interface/src/gf_mesh_im.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_misc.h>
 #include <getfemint_workspace.h>
@@ -31,7 +31,7 @@ using namespace getfemint;
 void gf_mesh_im_set_integ(getfem::mesh_im *mim, getfemint::mexargs_in& in);
 
 /*@GFDOC
-  This object represent an integration method defined on a whole mesh (an 
+  This object represents an integration method defined on a whole mesh (an 
   potentialy on its boundaries).
 @*/
 
@@ -132,7 +132,13 @@ void gf_mesh_im(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
 
       The `where` argument define the domain of integration with respect to
       the levelset, it has to be chosen among 'ALL', 'INSIDE', 'OUTSIDE' and
-      'BOUNDARY'.@*/
+      'BOUNDARY'.
+
+      CAUTION: this integration method will be defined only on the element
+      cut by the level-set. For the 'ALL', 'INSIDE' and 'OUTSIDE' options
+      it is mandatory to use the method ``MESH_IM:SET('integ')`` to define
+      the integration method on the remaining elements.
+      @*/
     sub_command
       ("levelset", 3, 5, 0, 1,
        getfemint_mesh_levelset *gmls = in.pop().to_getfemint_mesh_levelset();
diff --git a/interface/src/gf_mesh_im_get.cc b/interface/src/gf_mesh_im_get.cc
index 92474f2..56ce86f 100644
--- a/interface/src/gf_mesh_im_get.cc
+++ b/interface/src/gf_mesh_im_get.cc
@@ -1,29 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_misc.h>
 #include <getfemint_mesh_im.h>
 #include <getfemint_integ.h>
 /*
-  $Id: gf_mesh_im_get.cc 3513 2010-03-24 06:05:09Z lsaavedr $
+  $Id: gf_mesh_im_get.cc 4114 2012-07-06 11:20:10Z renard $
  */
 
 
diff --git a/interface/src/gf_mesh_im_set.cc b/interface/src/gf_mesh_im_set.cc
index 660c68a..c98bb98 100644
--- a/interface/src/gf_mesh_im_set.cc
+++ b/interface/src/gf_mesh_im_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_misc.h>
 #include <getfemint_mesh_im.h>
@@ -104,8 +104,9 @@ void gf_mesh_im_set(getfemint::mexargs_in& in, getfemint::mexargs_out& out)
     integration method with an integration method handle `im` obtained
     via INTEG:INIT('IM_SOMETHING'), or to let getfem choose a suitable
     integration method with `im_degree` (choosen such that polynomials
-    of `degree <= im_degree` are exactly integrated. If `im_degree=-1`,
-    then the dummy integration method IM_NONE will be used.)@*/
+    of :math:`\text{degree} \leq \text{im\_degree}` are exactly integrated.
+    If `im_degree=-1`, then the dummy integration method IM_NONE will 
+    be used.)@*/
     gf_mesh_im_set_integ(mim, in);
   } else if (check_cmd(cmd, "adapt", in, out, 0, 0, 0, 0)) {
     /*@SET ('adapt')
diff --git a/interface/src/gf_mesh_levelset.cc b/interface/src/gf_mesh_levelset.cc
index 07647be..727b194 100644
--- a/interface/src/gf_mesh_levelset.cc
+++ b/interface/src/gf_mesh_levelset.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_mesh_levelset.cc 3513 2010-03-24 06:05:09Z lsaavedr $
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: gf_mesh_levelset.cc 4114 2012-07-06 11:20:10Z renard $
 #include <getfemint.h>
 #include <getfemint_mesh_levelset.h>
 #include <getfemint_workspace.h>
diff --git a/interface/src/gf_mesh_levelset_get.cc b/interface/src/gf_mesh_levelset_get.cc
index ad8dc2d..7534087 100644
--- a/interface/src/gf_mesh_levelset_get.cc
+++ b/interface/src/gf_mesh_levelset_get.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_mesh_levelset_get.cc 3468 2010-02-24 20:12:15Z renard $
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: gf_mesh_levelset_get.cc 4114 2012-07-06 11:20:10Z renard $
 #include <getfemint.h>
 #include <getfemint_mesh_levelset.h>
 #include <getfemint_levelset.h>
diff --git a/interface/src/gf_mesh_levelset_set.cc b/interface/src/gf_mesh_levelset_set.cc
index 242b65c..f43856d 100644
--- a/interface/src/gf_mesh_levelset_set.cc
+++ b/interface/src/gf_mesh_levelset_set.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_mesh_levelset_set.cc 3468 2010-02-24 20:12:15Z renard $
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: gf_mesh_levelset_set.cc 4114 2012-07-06 11:20:10Z renard $
 #include <getfemint.h>
 #include <getfemint_mesh_levelset.h>
 #include <getfemint_levelset.h>
diff --git a/interface/src/gf_mesh_set.cc b/interface/src/gf_mesh_set.cc
index 33d87af..9975e00 100644
--- a/interface/src/gf_mesh_set.cc
+++ b/interface/src/gf_mesh_set.cc
@@ -1,47 +1,51 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_misc.h>
 #include <getfemint_mesh.h>
 
 using namespace getfemint;
 
-static void check_empty_mesh(const getfem::mesh *pmesh)
-{
+static void check_empty_mesh(const getfem::mesh *pmesh) {
   if (pmesh->dim() == bgeot::dim_type(-1) || pmesh->dim() == 0) {
     THROW_ERROR( "mesh object has an invalid dimension");
   }
 }
 
-static void set_region(getfem::mesh &mesh, getfemint::mexargs_in& in)
-{
+static void set_region(getfem::mesh &mesh, getfemint::mexargs_in& in) {
   unsigned boundary_num  = in.pop().to_integer(1);
-  iarray v               = in.pop().to_iarray(2,-1);
+  // iarray v               = in.pop().to_iarray(2,-1);
+
+  iarray v               = in.pop().to_iarray();
+  
+  if (v.getm() < 1 || v.getm() > 2 || v.getp() != 1 || v.getq() != 1)
+    THROW_BADARG( "Invalid format for the convex or face list");
 
   getfem::mesh_region &rg = mesh.region(boundary_num);
   /* loop over the edges of mxEdge */
   for (size_type j=0; j < v.getn(); j++) {
     size_type cv = size_type(v(0,j))-config::base_index();
 
-    size_type f  = size_type(v(1,j))-config::base_index();
+    size_type f  = v.getm() == 2 ? (size_type(v(1,j))-config::base_index())
+                                 : size_type(-1);
     if (!mesh.convex_index().is_in(cv)) {
       THROW_BADARG( "Invalid convex number '" << cv+config::base_index() << "' at column " << j+config::base_index());
     }
@@ -280,13 +284,16 @@ void gf_mesh_set(getfemint::mexargs_in& m_in,
 
 
     /*@SET ('region', @int rnum, @dmat CVFIDs)
-    Assigns the region number `rnum` to the convex faces stored in each
-    column of the matrix `CVFIDs`.
+    Assigns the region number `rnum` to the convex faces (or convexes)
+    stored in each column of the matrix `CVFIDs`.
 
     The first row of `CVFIDs` contains a convex #ids, and the second row
     contains a face number in the convex (or @MATLAB{0}@SCILAB{0}@PYTHON{``-1``}
     for the whole convex (regions are usually used to store a list of
-    convex faces, but you may also use them to store a list of convexes).@*/
+    convex faces, but you may also use them to store a list of convexes).
+
+    If a vector is provided (or a one row matrix) the region will represent
+    the corresponding set of convex.@*/
     sub_command
       ("region", 2, 2, 0, 0,
        set_region(*pmesh, in);
diff --git a/interface/src/gf_mesher_object.cc b/interface/src/gf_mesher_object.cc
new file mode 100644
index 0000000..d2506a7
--- /dev/null
+++ b/interface/src/gf_mesher_object.cc
@@ -0,0 +1,280 @@
+/*===========================================================================
+ 
+ Copyright (C) 2011-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+#include <getfemint_misc.h>
+#include <getfemint_workspace.h>
+#include <getfemint_mesher_object.h>
+#include <getfem/getfem_mesher.h>
+
+
+
+
+
+using namespace getfemint;
+
+/*@GFDOC
+  This object represents a geometric object to be meshed by the (very)
+  experimental meshing procedure of Getfem.
+@*/
+
+
+// Object for the declaration of a new sub-command.
+
+typedef getfemint_mesher_object *pgetfemint_mesher_object;
+
+struct sub_mesher_object : virtual public dal::static_stored_object {
+  int arg_in_min, arg_in_max, arg_out_min, arg_out_max;
+  virtual void run(getfemint::mexargs_in& in,
+		   getfemint::mexargs_out& out,
+		   pgetfemint_mesher_object &pmo) = 0;
+};
+
+typedef boost::intrusive_ptr<sub_mesher_object> psub_command;
+
+// Function to avoid warning in macro with unused arguments.
+template <typename T> static inline void dummy_func(T &) {}
+
+#define sub_command(name, arginmin, arginmax, argoutmin, argoutmax, code) { \
+    struct subc : public sub_mesher_object {		       		\
+      virtual void run(getfemint::mexargs_in& in,			\
+		       getfemint::mexargs_out& out,			\
+		       pgetfemint_mesher_object &pmo)			\
+      { dummy_func(in); dummy_func(out); code }				\
+    };									\
+    psub_command psubc = new subc;					\
+    psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax;		\
+    psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax;	\
+    subc_tab[cmd_normalize(name)] = psubc;				\
+  }
+
+
+
+void gf_mesher_object(getfemint::mexargs_in& m_in,
+		 getfemint::mexargs_out& m_out) {
+  typedef std::map<std::string, psub_command > SUBC_TAB;
+  static SUBC_TAB subc_tab;
+
+  if (subc_tab.size() == 0) {
+    
+    /*@INIT MF = ('ball', @vec center, @scalar radius)
+      Represents a ball of corresponding center and radius.
+      @*/
+    sub_command
+      ("ball", 2, 2, 0, 1,
+       darray center = in.pop().to_darray();
+       double radius = in.pop().to_scalar();
+
+       getfem::base_node bncenter(gmm::vect_size(center));
+       gmm::copy(center, bncenter);
+
+       getfem::mesher_signed_distance *ball
+         = new getfem::mesher_ball(bncenter, radius);
+
+       pmo = getfemint_mesher_object::get_from(ball);
+       );
+
+    /*@INIT MF = ('half space', @vec origin, @vec normal_vector)
+      Represents an half space delimited by the plane which contains the
+      origin and normal to `normal_vector`. The selected part is the part
+      in the direction of the normal vector. This allows to cut a geometry
+      with a plane for instance to build a polygon or a polyhedron.
+      @*/
+    sub_command
+      ("half space", 2, 2, 0, 1,
+       darray origin = in.pop().to_darray();
+       darray n = in.pop().to_darray();
+
+       getfem::base_node bnorigin(gmm::vect_size(origin));
+       gmm::copy(origin, bnorigin);
+       getfem::base_node bnn(gmm::vect_size(n));
+       gmm::copy(n, bnn);
+
+       getfem::mesher_signed_distance *half
+         = new getfem::mesher_half_space(bnorigin, bnn);
+
+       pmo = getfemint_mesher_object::get_from(half);
+       );
+
+    /*@INIT MF = ('cylinder', @vec origin, @vec n, @scalar length, @scalar radius)
+      Represents a cylinder (in any dimension) of a certain radius whose axis is determined by the origin, a vector `n` and a certain length.
+      @*/
+    sub_command
+      ("cylinder", 4, 4, 0, 1,
+       darray origin = in.pop().to_darray();
+       darray n = in.pop().to_darray();
+       double length = in.pop().to_scalar();
+       double radius = in.pop().to_scalar();
+       
+       getfem::base_node bnorigin(gmm::vect_size(origin));
+       gmm::copy(origin, bnorigin);
+       getfem::base_node bnn(gmm::vect_size(n));
+       gmm::copy(n, bnn);
+
+       getfem::mesher_signed_distance *cyl
+       = new getfem::mesher_cylinder(bnorigin, bnn, length, radius);
+
+       pmo = getfemint_mesher_object::get_from(cyl);
+       );
+
+        /*@INIT MF = ('cone', @vec origin, @vec n, @scalar length, @scalar half_angle)
+      Represents a cone (in any dimension) of a certain half-angle (in radians) whose axis is determined by the origin, a vector `n` and a certain length.
+      @*/
+    sub_command
+      ("cone", 4, 4, 0, 1,
+       darray origin = in.pop().to_darray();
+       darray n = in.pop().to_darray();
+       double length = in.pop().to_scalar();
+       double half_angle = in.pop().to_scalar();
+       
+       getfem::base_node bnorigin(gmm::vect_size(origin));
+       gmm::copy(origin, bnorigin);
+       getfem::base_node bnn(gmm::vect_size(n));
+       gmm::copy(n, bnn);
+
+       getfem::mesher_signed_distance *cone
+       = new getfem::mesher_cone(bnorigin, bnn, length, half_angle);
+
+       pmo = getfemint_mesher_object::get_from(cone);
+       );
+
+    /*@INIT MF = ('torus', @scalar R, @scalar r)
+      Represents a torus in 3d of axis along the z axis with a great radius
+      equal to `R` and small radius equal to `r`. For the moment, the
+      possibility to change the axis is not given.
+      @*/
+    sub_command
+      ("torus", 2, 2, 0, 1,
+       double R = in.pop().to_scalar();
+       double r = in.pop().to_scalar();
+
+       getfem::mesher_signed_distance *torus
+         = new getfem::mesher_torus(R, r);
+
+       pmo = getfemint_mesher_object::get_from(torus);
+       );
+
+    
+    /*@INIT MF = ('rectangle', @vec rmin, @vec rmax)
+      Represents a rectangle (or parallelepiped in 3D) parallel to the axes.
+      @*/
+    sub_command
+      ("rectangle", 2, 2, 0, 1,
+       darray rmin = in.pop().to_darray();
+       darray rmax = in.pop().to_darray();
+       
+       size_type N = gmm::vect_size(rmin);
+       GMM_ASSERT1(N == gmm::vect_size(rmax),
+		   "Extreme points should be the same lenght");
+
+       getfem::base_node rrmin(N); getfem::base_node rrmax(N);
+       gmm::copy(rmin, rrmin); gmm::copy(rmax, rrmax);
+
+       getfem::mesher_signed_distance *rectangle
+         = new getfem::mesher_rectangle(rrmin, rrmax);
+
+       pmo = getfemint_mesher_object::get_from(rectangle);
+       );
+
+
+    /*@INIT MF = ('intersect', @tmo object1 , @tmo object2, ...)
+      Intersection of several objects.
+      @*/
+    sub_command
+      ("intersect", 2, 100, 0, 1,
+
+       std::vector<const getfem::mesher_signed_distance *> vd;
+
+       const getfem::mesher_signed_distance *psd
+          = in.pop().to_const_mesher_object();
+
+       vd.push_back(psd);
+
+       while (in.remaining()) {
+	 psd = in.pop().to_const_mesher_object();
+	 vd.push_back(psd);
+       }
+       
+       getfem::mesher_signed_distance *psd2 
+         = new getfem::mesher_intersection(vd);
+       pmo = getfemint_mesher_object::get_from(psd2);
+       );
+
+    /*@INIT MF = ('union', @tmo object1 , @tmo object2, ...)
+      Union of several objects.
+      @*/
+    sub_command
+      ("union", 2, 100, 0, 1,
+
+       std::vector<const getfem::mesher_signed_distance *> vd;
+
+       const getfem::mesher_signed_distance *psd
+          = in.pop().to_const_mesher_object();
+
+       vd.push_back(psd);
+
+       while (in.remaining()) {
+	 psd = in.pop().to_const_mesher_object();
+	 vd.push_back(psd);
+       }
+       
+       getfem::mesher_signed_distance *psd2 = new getfem::mesher_union(vd);
+       pmo = getfemint_mesher_object::get_from(psd2);
+       );
+
+    /*@INIT MF = ('set minus', @tmo object1 , @tmo object2)
+      Geometric object being object1 minus object2.
+      @*/
+    sub_command
+      ("set minus", 2, 100, 0, 1,
+
+       std::vector<const getfem::mesher_signed_distance *> vd;
+
+       const getfem::mesher_signed_distance *psd1
+          = in.pop().to_const_mesher_object();
+       const getfem::mesher_signed_distance *psd2
+          = in.pop().to_const_mesher_object();
+       
+       getfem::mesher_signed_distance *psd
+         = new getfem::mesher_setminus(*psd1, *psd2);
+       pmo = getfemint_mesher_object::get_from(psd);
+       );
+  }
+
+
+  if (m_in.narg() < 1) THROW_BADARG("Wrong number of input arguments");
+  getfemint_mesher_object *pmo = NULL;
+  
+  std::string init_cmd   = m_in.pop().to_string();
+  std::string cmd        = cmd_normalize(init_cmd);
+  
+
+  SUBC_TAB::iterator it = subc_tab.find(cmd);
+  if (it != subc_tab.end()) {
+    check_cmd(cmd, it->first.c_str(), m_in, m_out, it->second->arg_in_min,
+	      it->second->arg_in_max, it->second->arg_out_min,
+	      it->second->arg_out_max);
+    it->second->run(m_in, m_out, pmo);
+  }
+  else bad_cmd(init_cmd);
+
+ 
+  m_out.pop().from_object_id(pmo->get_id(), MESHER_OBJECT_CLASS_ID);
+}
diff --git a/interface/src/gf_mesher_object_get.cc b/interface/src/gf_mesher_object_get.cc
new file mode 100644
index 0000000..b2a53df
--- /dev/null
+++ b/interface/src/gf_mesher_object_get.cc
@@ -0,0 +1,115 @@
+/*===========================================================================
+ 
+ Copyright (C) 2011-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: gf_mesher_object_get.cc 3468 2010-02-24 20:12:15Z renard $
+
+#include <getfemint_misc.h>
+#include <getfemint_workspace.h>
+#include <getfemint_mesher_object.h>
+#include <getfem/getfem_mesher.h>
+
+using namespace getfemint;
+
+/*@GFDOC
+    General function for querying information about mesher_object objects.
+@*/
+
+
+// Object for the declaration of a new sub-command.
+
+struct sub_gf_mesher_object_get : virtual public dal::static_stored_object {
+  int arg_in_min, arg_in_max, arg_out_min, arg_out_max;
+  virtual void run(getfemint::mexargs_in& in,
+		   getfemint::mexargs_out& out,
+		   getfem::mesher_signed_distance *paf) = 0;
+};
+
+typedef boost::intrusive_ptr<sub_gf_mesher_object_get> psub_command;
+
+// Function to avoid warning in macro with unused arguments.
+template <typename T> static inline void dummy_func(T &) {}
+
+#define sub_command(name, arginmin, arginmax, argoutmin, argoutmax, code) { \
+    struct subc : public sub_gf_mesher_object_get {				\
+      virtual void run(getfemint::mexargs_in& in,			\
+		       getfemint::mexargs_out& out,			\
+		       getfem::mesher_signed_distance *paf)		\
+      { dummy_func(in); dummy_func(out); dummy_func(paf); code }	\
+    };									\
+    psub_command psubc = new subc;					\
+    psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax;		\
+    psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax;	\
+    subc_tab[cmd_normalize(name)] = psubc;				\
+  }                           
+
+
+
+void gf_mesher_object_get(getfemint::mexargs_in& m_in,
+			    getfemint::mexargs_out& m_out) {
+  typedef std::map<std::string, psub_command > SUBC_TAB;
+  static SUBC_TAB subc_tab;
+
+  if (subc_tab.size() == 0) {
+  
+
+    /*@GET s = ('char')
+      Output a (unique) string representation of the @tmo.
+
+      This can be used to perform comparisons between two
+      different @tmo objects.
+      This function is to be completed.
+      @*/
+    sub_command
+      ("char", 0, 0, 0, 1,
+       GMM_ASSERT1(false, "Sorry, function to be done");
+       // std::string s = ...;
+       // out.pop().from_string(s.c_str());
+       );
+
+
+    /*@GET ('display')
+      displays a short summary for a @tmo object.@*/
+    sub_command
+      ("display", 0, 0, 0, 0,
+       infomsg() << "gfMesherObject object\n";
+       );
+
+
+  }
+
+
+
+  if (m_in.narg() < 2)  THROW_BADARG( "Wrong number of input arguments");
+
+  getfem::mesher_signed_distance *paf = m_in.pop().to_mesher_object();
+  std::string init_cmd   = m_in.pop().to_string();
+  std::string cmd        = cmd_normalize(init_cmd);
+
+  
+  SUBC_TAB::iterator it = subc_tab.find(cmd);
+  if (it != subc_tab.end()) {
+    check_cmd(cmd, it->first.c_str(), m_in, m_out, it->second->arg_in_min,
+	      it->second->arg_in_max, it->second->arg_out_min,
+	      it->second->arg_out_max);
+    it->second->run(m_in, m_out, paf);
+  }
+  else bad_cmd(init_cmd);
+
+}
diff --git a/interface/src/gf_model.cc b/interface/src/gf_model.cc
index 40bfa75..a2a1193 100644
--- a/interface/src/gf_model.cc
+++ b/interface/src/gf_model.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**\file gf_model.cc
    \brief model construction wrapper.
diff --git a/interface/src/gf_model_get.cc b/interface/src/gf_model_get.cc
index 80ab1e6..b3eaf35 100644
--- a/interface/src/gf_model_get.cc
+++ b/interface/src/gf_model_get.cc
@@ -1,29 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**\file gf_model_get.cc
    \brief getfemint_model getter.
 */
 
 #include <getfemint.h>
+#include <getfemint_workspace.h>
 #include <getfemint_misc.h>
 #include <getfemint_models.h>
 #include <getfem/getfem_model_solvers.h>
@@ -64,8 +65,8 @@ using namespace getfemint;
 struct sub_gf_md_get : virtual public dal::static_stored_object {
   int arg_in_min, arg_in_max, arg_out_min, arg_out_max;
   virtual void run(getfemint::mexargs_in& in,
-		   getfemint::mexargs_out& out,
-		   getfemint_model *md) = 0;
+                   getfemint::mexargs_out& out,
+                   getfemint_model *md) = 0;
 };
 
 typedef boost::intrusive_ptr<sub_gf_md_get> psub_command;
@@ -74,21 +75,21 @@ typedef boost::intrusive_ptr<sub_gf_md_get> psub_command;
 template <typename T> static inline void dummy_func(T &) {}
 
 #define sub_command(name, arginmin, arginmax, argoutmin, argoutmax, code) { \
-    struct subc : public sub_gf_md_get {				\
-      virtual void run(getfemint::mexargs_in& in,			\
-		       getfemint::mexargs_out& out,			\
-		       getfemint_model *md)				\
-      { dummy_func(in); dummy_func(out);  dummy_func(md); code }	\
-    };									\
-    psub_command psubc = new subc;					\
-    psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax;		\
-    psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax;	\
-    subc_tab[cmd_normalize(name)] = psubc;				\
-  }                           
+    struct subc : public sub_gf_md_get {                                \
+      virtual void run(getfemint::mexargs_in& in,                       \
+                       getfemint::mexargs_out& out,                     \
+                       getfemint_model *md)                             \
+      { dummy_func(in); dummy_func(out);  dummy_func(md); code }        \
+    };                                                                  \
+    psub_command psubc = new subc;                                      \
+    psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax;         \
+    psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax;     \
+    subc_tab[cmd_normalize(name)] = psubc;                              \
+  }
 
 
 void gf_model_get(getfemint::mexargs_in& m_in,
-		  getfemint::mexargs_out& m_out) {
+                  getfemint::mexargs_out& m_out) {
   typedef std::map<std::string, psub_command > SUBC_TAB;
   static SUBC_TAB subc_tab;
 
@@ -102,6 +103,13 @@ void gf_model_get(getfemint::mexargs_in& m_in,
        );
 
 
+    /*@GET T = ('nbdof')
+      Return the total number of degrees of freedom of the model.@*/
+    sub_command
+      ("nbdof", 0, 0, 0, 1,
+       out.pop().from_integer(int(md->model().nb_dof()));
+       );
+
     /*@GET T = ('tangent_matrix')
       Return the tangent matrix stored in the model .@*/
     sub_command
@@ -118,6 +126,38 @@ void gf_model_get(getfemint::mexargs_in& m_in,
        );
 
 
+    /*@GET ('brick term rhs', @int ind_brick[, @int ind_term, @int sym, @int ind_iter])
+      Gives the access to the part of the right hand side of a term
+      of a particular nonlinear brick. Does not account of the eventual
+      time dispatcher. An assembly of the rhs has to be done first.
+      `ind_brick` is the brick index. `ind_term` is the index of the
+      term inside the brick (default value : @MATLAB{1}@PYTHON{0}@SCILAB{1}).
+      `sym` is to access to the second right hand side of for symmetric
+      terms acting on two different variables (default is 0).
+      `ind_iter` is the iteration number when time dispatchers are
+      used (default is @MATLAB{1}@PYTHON{0}@SCILAB{1}).
+      @*/
+    sub_command
+      ("brick term rhs", 1, 4, 0, 1,
+
+       size_type ind_brick = in.pop().to_integer() - config::base_index();
+       size_type ind_term = 0;
+       if (in.remaining())
+         ind_term = in.pop().to_integer() - config::base_index();
+       bool sym = false;
+       if (in.remaining())
+         sym = (in.pop().to_integer() != 0);
+       size_type ind_iter = 0;
+       if (in.remaining())
+         ind_iter = in.pop().to_integer() - config::base_index();
+
+       if (md->model().is_complex())
+         out.pop().from_dcvector(md->model().complex_brick_term_rhs(ind_brick, ind_term, sym, ind_iter));
+       else
+         out.pop().from_dcvector(md->model().real_brick_term_rhs(ind_brick, ind_term, sym, ind_iter));
+       );
+
+
     /*@GET z = ('memsize')
       Return a rough approximation of the amount of memory (in bytes) used by
       the model.@*/
@@ -150,9 +190,24 @@ void gf_model_get(getfemint::mexargs_in& m_in,
        std::string name = in.pop().to_string();
        size_type niter = 0;
        if (in.remaining())
-	 niter = in.pop().to_integer(0,10) - config::base_index();
+         niter = in.pop().to_integer(0,10) - config::base_index();
        RETURN_VECTOR(real_variable(name, niter),
-		     complex_variable(name, niter));
+                     complex_variable(name, niter));
+       );
+
+    
+    /*@GET mf = ('mesh fem of variable', @str name)
+      Gives access to the `mesh_fem` of a variable or data.@*/
+    sub_command
+      ("mesh fem of variable", 1, 1, 0, 1,
+       std::string name = in.pop().to_string();
+       const getfem::mesh_fem &mf = md->model().mesh_fem_of_variable(name);
+       getfem::mesh_fem *mmf = const_cast<getfem::mesh_fem *>(&mf);
+       getfem_object *o =
+       getfemint::workspace().object(getfem_object::internal_key_type(mmf));
+       getfemint_mesh_fem *gmf = getfemint_mesh_fem::get_from(mmf);
+       if (!o) workspace().set_dependance(gmf, md);
+       out.pop().from_object_id(gmf->get_id(), MESHFEM_CLASS_ID);
        );
 
 
@@ -162,7 +217,7 @@ void gf_model_get(getfemint::mexargs_in& m_in,
       this function has an undefined behavior@*/
     sub_command
       ("mult varname Dirichlet", 1, 1, 0, 1,
-       size_type ind_brick = in.pop().to_integer();
+       size_type ind_brick = in.pop().to_integer() - config::base_index();
        out.pop().from_string
        (getfem::mult_varname_Dirichlet(md->model(), ind_brick).c_str());
        );
@@ -183,18 +238,18 @@ void gf_model_get(getfemint::mexargs_in& m_in,
 
     /*@GET V = ('from variables')
       Return the vector of all the degrees of freedom of the model consisting
-      of the concatenation of the variables of the model (usefull
+      of the concatenation of the variables of the model (useful
       to solve your problem with you own solver). @*/
     sub_command
       ("from variables", 0, 0, 0, 1,
        if (!md->is_complex()) {
-	 std::vector<double> V(md->model().nb_dof());
-	 md->model().from_variables(V);
-	 out.pop().from_dcvector(V);
+         std::vector<double> V(md->model().nb_dof());
+         md->model().from_variables(V);
+         out.pop().from_dcvector(V);
        } else {
-	 std::vector<std::complex<double> > V(md->model().nb_dof());
-	 md->model().from_variables(V);
-	 out.pop().from_dcvector(V);
+         std::vector<std::complex<double> > V(md->model().nb_dof());
+         md->model().from_variables(V);
+         out.pop().from_dcvector(V);
        }
        );
 
@@ -205,7 +260,7 @@ void gf_model_get(getfemint::mexargs_in& m_in,
       'build_rhs', 'build_matrix' or 'pseudo_potential' (in that case,
       the pseudo_potential is returned).
       The default is to build the whole
-      tangent linear system (matrix and rhs). This function is usefull
+      tangent linear system (matrix and rhs). This function is useful
       to solve your problem with you own solver. @*/
     sub_command
       ("assembly", 0, 1, 0, 1,
@@ -213,25 +268,25 @@ void gf_model_get(getfemint::mexargs_in& m_in,
        if (in.remaining()) option = in.pop().to_string();
        getfem::model::build_version version = getfem::model::BUILD_ALL;
        if (cmd_strmatch(option, "build all") ||
-	   cmd_strmatch(option, "build_all"))
-	 version = getfem::model::BUILD_ALL;
+           cmd_strmatch(option, "build_all"))
+         version = getfem::model::BUILD_ALL;
        else if (cmd_strmatch(option, "build rhs") ||
-		cmd_strmatch(option, "build_rhs"))
-	 version = getfem::model::BUILD_RHS;
+                cmd_strmatch(option, "build_rhs"))
+         version = getfem::model::BUILD_RHS;
        else if (cmd_strmatch(option, "build matrix") ||
-		cmd_strmatch(option, "build_matrix"))
-	 version = getfem::model::BUILD_MATRIX;
+                cmd_strmatch(option, "build_matrix"))
+         version = getfem::model::BUILD_MATRIX;
        else if (cmd_strmatch(option, "pseudo potential") ||
-		cmd_strmatch(option, "pseudo_potential"))
-	 version = getfem::model::BUILD_PSEUDO_POTENTIAL;
+                cmd_strmatch(option, "pseudo_potential"))
+         version = getfem::model::BUILD_PSEUDO_POTENTIAL;
        else THROW_BADARG("bad option: " << option);
        md->model().assembly(version);
        if (version == getfem::model::BUILD_PSEUDO_POTENTIAL)
-	 out.pop().from_scalar(md->model().pseudo_potential());
+         out.pop().from_scalar(md->model().pseudo_potential());
        );
 
 
-    /*@GET ('solve'[, ...])
+    /*@GET @CELL{nbit, converged} = ('solve'[, ...])
     Run the standard getfem solver.
 
     Note that you should be able to use your own solver if you want
@@ -247,6 +302,9 @@ void gf_model_get(getfemint::mexargs_in& m_in,
        set the maximum iterations numbers.
     - 'max_res', @float RES
        set the target residual value.
+    - 'diverged_res', @float RES
+       set the threshold value of the residual beyond which the iterative
+       method is considered to diverge (default is 1e200).
     - 'lsolver', @str SOLVER_NAME
        select explicitely the solver used for the linear systems (the
        default value is 'auto', which lets getfem choose itself).
@@ -255,13 +313,23 @@ void gf_model_get(getfemint::mexargs_in& m_in,
     - 'lsearch', @str LINE_SEARCH_NAME
        select explicitely the line search method used for the linear systems (the
        default value is 'default').
-       Possible values are 'simplest', 'systematic'.
+       Possible values are 'simplest', 'systematic', 'quadratic' or 'basic'.
     - 'with pseudo potential'
       for nonlinear problems, the criterion of the line search will
       be a pseudo potential instead of the residual. Still experimental since
-      not all bricks define a pseudo potential. @*/
+      not all bricks define a pseudo potential.
+
+      Return the number of iterations, if a iterative method is used.
+      
+      Note that it is possible to disable some variables
+      (see MODEL:SET('disable variable') ) in order to
+      solve the problem only with respect to a subset of variables (the
+      disabled variables are the considered as data) for instance to
+      replace the global Newton strategy with a fixed point one.
+
+      @*/
     sub_command
-      ("solve", 0, 15, 0, 0,
+      ("solve", 0, 15, 0, 2,
        getfemint::interruptible_iteration iter;
        std::string lsolver = "auto";
        std::string lsearch = "default";
@@ -270,61 +338,145 @@ void gf_model_get(getfemint::mexargs_in& m_in,
        scalar_type alpha_min = 1.0/1000.0;
        scalar_type alpha_max_ratio = 6.0/5.0;
        while (in.remaining() && in.front().is_string()) {
-	 std::string opt = in.pop().to_string();
-	 if (cmd_strmatch(opt, "noisy")) iter.set_noisy(1);
-	 else if (cmd_strmatch(opt, "with pseudo potential"))
-	   with_pseudo_pot = true;
-	 else if (cmd_strmatch(opt, "very noisy") ||
-		  cmd_strmatch(opt, "very_noisy")) iter.set_noisy(2);
-	 else if (cmd_strmatch(opt, "max_iter")) {
-	   if (in.remaining()) iter.set_maxiter(in.pop().to_integer());
-	   else THROW_BADARG("missing value for " << opt);
-	 } else if (cmd_strmatch(opt, "max_res")) {
-	   if (in.remaining()) iter.set_resmax(in.pop().to_scalar());
-	   else THROW_BADARG("missing value for " << opt);
-	 } else if (cmd_strmatch(opt, "lsolver")) {
-	   if (in.remaining()) lsolver = in.pop().to_string();
-	   else THROW_BADARG("missing solver name for " << opt);
-	 } else if (cmd_strmatch(opt, "lsearch")) {
-	   if (in.remaining()) lsearch = in.pop().to_string();
-	   else THROW_BADARG("missing line search name for " << opt);
-	 } else if (cmd_strmatch(opt, "alpha mult")) {
-	   if (in.remaining()) alpha_mult = in.pop().to_scalar();
-	   else THROW_BADARG("missing line search name for " << opt);
-	 } else if (cmd_strmatch(opt, "alpha min")) {
-	   if (in.remaining()) alpha_min = in.pop().to_scalar();
-	   else THROW_BADARG("missing line search name for " << opt);
-	 } else if (cmd_strmatch(opt, "alpha max ratio")) {
-	   if (in.remaining()) alpha_max_ratio = in.pop().to_scalar();
-	   else THROW_BADARG("missing line search name for " << opt);
-	 } else THROW_BADARG("bad option: " << opt);
+         std::string opt = in.pop().to_string();
+         if (cmd_strmatch(opt, "noisy")) iter.set_noisy(1);
+         else if (cmd_strmatch(opt, "with pseudo potential"))
+           with_pseudo_pot = true;
+         else if (cmd_strmatch(opt, "very noisy") ||
+                  cmd_strmatch(opt, "very_noisy")) iter.set_noisy(2);
+         else if (cmd_strmatch(opt, "max_iter")) {
+           if (in.remaining()) iter.set_maxiter(in.pop().to_integer());
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "max_res")) {
+           if (in.remaining()) iter.set_resmax(in.pop().to_scalar());
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "diverged_res")) {
+           if (in.remaining()) iter.set_diverged_residual(in.pop().to_scalar());
+           else THROW_BADARG("missing value for " << opt);
+         } else if (cmd_strmatch(opt, "lsolver")) {
+           if (in.remaining()) lsolver = in.pop().to_string();
+           else THROW_BADARG("missing solver name for " << opt);
+         } else if (cmd_strmatch(opt, "lsearch")) {
+           if (in.remaining()) lsearch = in.pop().to_string();
+           else THROW_BADARG("missing line search name for " << opt);
+         } else if (cmd_strmatch(opt, "alpha mult")) {
+           if (in.remaining()) alpha_mult = in.pop().to_scalar();
+           else THROW_BADARG("missing line search name for " << opt);
+         } else if (cmd_strmatch(opt, "alpha min")) {
+           if (in.remaining()) alpha_min = in.pop().to_scalar();
+           else THROW_BADARG("missing line search name for " << opt);
+         } else if (cmd_strmatch(opt, "alpha max ratio")) {
+           if (in.remaining()) alpha_max_ratio = in.pop().to_scalar();
+           else THROW_BADARG("missing line search name for " << opt);
+         } else THROW_BADARG("bad option: " << opt);
        }
-       
-       gmm::default_newton_line_search default_ls(size_type(-1), alpha_mult);
-       gmm::simplest_newton_line_search simplest_ls(size_type(-1), alpha_max_ratio, alpha_min, alpha_mult);
-       gmm::systematic_newton_line_search systematic_ls(size_type(-1), alpha_min, alpha_mult);
 
-       gmm::abstract_newton_line_search *ls = 0;
+       getfem::default_newton_line_search default_ls;
+       getfem::simplest_newton_line_search simplest_ls(size_type(-1), alpha_max_ratio, alpha_min, alpha_mult);
+       getfem::systematic_newton_line_search systematic_ls(size_type(-1), alpha_min, alpha_mult);
+       getfem::basic_newton_line_search basic_ls(size_type(-1), alpha_min, alpha_mult);
+       getfem::quadratic_newton_line_search quadratic_ls(size_type(-1));
+
+       getfem::abstract_newton_line_search *ls = 0;
 
        if (lsearch == "default")
-	 ls = &default_ls;
+         ls = &default_ls;
        else if (lsearch == "simplest")
-	 ls = &simplest_ls;
-       else //lsearch == "systematic"
-	 ls = &systematic_ls;
+         ls = &simplest_ls;
+       else if (lsearch == "basic")
+         ls = &basic_ls;
+       else if (lsearch == "systematic")
+         ls = &systematic_ls;
+       else if (lsearch == "quadratic")
+         ls = &quadratic_ls;
+       else GMM_ASSERT1(false, "unknown line search");
 
 
        if (!md->model().is_complex()) {
-	 getfem::standard_solve(md->model(), iter,
-				getfem::rselect_linear_solver(md->model(),
-							      lsolver),
-				*ls, with_pseudo_pot);
+         getfem::standard_solve(md->model(), iter,
+                                getfem::rselect_linear_solver(md->model(),
+                                                              lsolver),
+                                *ls, with_pseudo_pot);
        } else {
-	 getfem::standard_solve(md->model(), iter,
-				getfem::cselect_linear_solver(md->model(),
-							      lsolver),
-				*ls, with_pseudo_pot);
+         getfem::standard_solve(md->model(), iter,
+                                getfem::cselect_linear_solver(md->model(),
+                                                              lsolver),
+                                *ls, with_pseudo_pot);
+       }
+       if (out.remaining()) out.pop().from_integer(int(iter.get_iteration()));
+       if (out.remaining()) out.pop().from_integer(int(iter.converged()));
+       );
+
+
+    /*@GET ('test tangent matrix'[, @scalar EPS[, @int NB[, @scalar scale]]])
+      Test the consistency of the tangent matrix in some random positions
+      and random directions (useful to test newly created bricks).
+      `EPS` is the value of the small parameter for the finite difference
+      computation of the derivative is the random direction (default is 1E-6).
+      `NN` is the number of tests (default is 100). `scale` is a parameter
+      for the random position (default is 1). Each dof od the random
+      position is chosen in the range [-scale, scale].
+      @*/
+    sub_command
+      ("test tangent matrix", 0, 3, 0, 1,
+       size_type nbdof = md->model().nb_dof();
+       scalar_type EPS = 1E-6;
+       if (in.remaining()) EPS = in.pop().to_scalar();
+       scalar_type errmax = scalar_type(0);
+       size_type NN = 100;
+       if (in.remaining()) NN = in.pop().to_integer();
+       scalar_type scale = scalar_type(1);
+       if (in.remaining()) scale = in.pop().to_scalar();
+
+       if (md->model().is_linear())
+	 cout << "Problem is linear, the test is not relevant";
+       else {
+	 if (md->is_complex()) {
+	   std::vector<complex_type> U(nbdof);
+	   std::vector<complex_type> DIR(nbdof);
+	   std::vector<complex_type> D1(nbdof);
+	   std::vector<complex_type> D2(nbdof);
+	   for (size_type i = 0; i < NN; ++i) {
+	     gmm::fill_random(U); gmm::scale(U, scale);
+	     gmm::fill_random(DIR); gmm::scale(DIR, scale);
+	     md->model().to_variables(U);
+	     md->model().assembly(getfem::model::BUILD_ALL);
+	     gmm::copy(md->model().complex_rhs(), D2);
+	     gmm::mult(md->model().complex_tangent_matrix(), DIR, D1);
+	     gmm::add(gmm::scaled(DIR, complex_type(EPS)), U);
+	     md->model().to_variables(U);
+	     md->model().assembly(getfem::model::BUILD_RHS);
+	     gmm::add(gmm::scaled(md->model().complex_rhs(),
+				  -complex_type(1)), D2);
+	     gmm::scale(D2, complex_type(1)/complex_type(EPS));
+	     scalar_type err = gmm::vect_dist2(D1, D2);
+	     cout << "Error at step " << i << " : " << err << endl;
+	     errmax = std::max(err, errmax);
+	   }
+	 } else {
+	   std::vector<scalar_type> U(nbdof);
+	   std::vector<scalar_type> DIR(nbdof);
+	   std::vector<scalar_type> D1(nbdof);
+	   std::vector<scalar_type> D2(nbdof);
+	   for (size_type i = 0; i < NN; ++i) {
+	     gmm::fill_random(U); gmm::scale(U, scale);
+	     gmm::fill_random(DIR); gmm::scale(DIR, scale);
+	     md->model().to_variables(U);
+	     md->model().assembly(getfem::model::BUILD_ALL);
+	     gmm::copy(md->model().real_rhs(), D2);
+	     gmm::mult(md->model().real_tangent_matrix(), DIR, D1);
+	     gmm::add(gmm::scaled(DIR, EPS), U);
+	     md->model().to_variables(U);
+	     md->model().assembly(getfem::model::BUILD_RHS);
+	     gmm::add(gmm::scaled(md->model().real_rhs(),-scalar_type(1)), D2);
+	     gmm::scale(D2, scalar_type(1)/EPS);
+	     scalar_type err = gmm::vect_dist2(D1, D2);
+	     cout << "Error at step " << i << " : " << err << endl;
+	     errmax = std::max(err, errmax);
+	   }
+	 }
        }
+       out.pop().from_scalar(errmax);
        );
 
 
@@ -342,18 +494,19 @@ void gf_model_get(getfemint::mexargs_in& m_in,
        if (in.remaining()) stresca = in.pop().to_string();
        bool tresca = false;
        if (cmd_strmatch(stresca, "Von Mises") ||
-	   cmd_strmatch(stresca, "Von_Mises"))
-	 tresca = false;
+           cmd_strmatch(stresca, "Von_Mises"))
+         tresca = false;
        else if (cmd_strmatch(stresca, "Tresca"))
-	 tresca = true;
+         tresca = true;
        else THROW_BADARG("bad option \'version\': " << stresca);
-       
+
        getfem::model_real_plain_vector VMM((gfi_mf->mesh_fem()).nb_dof());
        getfem::compute_isotropic_linearized_Von_Mises_or_Tresca
        (md->model(), varname, dataname_lambda, dataname_mu, gfi_mf->mesh_fem(), VMM, tresca);
        out.pop().from_dcvector(VMM);
        );
 
+
     /*@GET V = ('compute Von Mises or Tresca', @str varname, @str lawname, @str dataname, @tmf mf_vm[, @str version])
       Compute on `mf_vm` the Von-Mises stress or the Tresca stress of a field
       for nonlinear elasticity in 3D. `lawname` is the constitutive law which
@@ -372,26 +525,57 @@ void gf_model_get(getfemint::mexargs_in& m_in,
        if (in.remaining()) stresca = in.pop().to_string();
        bool tresca = false;
        if (cmd_strmatch(stresca, "Von Mises") ||
-	   cmd_strmatch(stresca, "Von_Mises"))
-	 tresca = false;
+           cmd_strmatch(stresca, "Von_Mises"))
+         tresca = false;
        else if (cmd_strmatch(stresca, "Tresca"))
-	 tresca = true;
+         tresca = true;
        else THROW_BADARG("bad option \'version\': " << stresca);
-       
+
        getfem::model_real_plain_vector VMM((gfi_mf->mesh_fem()).nb_dof());
        getfem::compute_Von_Mises_or_Tresca
-       (md->model(), varname, 
-	abstract_hyperelastic_law_from_name
-	(lawname, gfi_mf->mesh_fem().linked_mesh().dim()),
-	dataname, gfi_mf->mesh_fem(), VMM, tresca);
+       (md->model(), varname,
+        abstract_hyperelastic_law_from_name
+        (lawname, gfi_mf->mesh_fem().linked_mesh().dim()),
+        dataname, gfi_mf->mesh_fem(), VMM, tresca);
        out.pop().from_dcvector(VMM);
        );
 
+    /*@GET V = ('compute second Piola Kirchhoff tensor', @str varname, @str lawname, @str dataname, @tmf mf_sigma)
+      Compute on `mf_sigma` the second Piola Kirchhoff stress tensor of a field
+      for nonlinear elasticity in 3D. `lawname` is the constitutive law which
+      could be 'SaintVenant Kirchhoff', 'Mooney Rivlin' or 'Ciarlet Geymonat'.
+      `dataname` is a vector of parameters for the constitutive law. Its length
+      depends on the law. It could be a short vector of constant values or a
+      vector field described on a finite element method for variable
+      coefficients.
+     @*/
+    sub_command
+      ("compute second Piola Kirchhoff tensor", 4, 4, 0, 1,
+       std::string varname = in.pop().to_string();
+       std::string lawname = in.pop().to_string();
+       std::string dataname = in.pop().to_string();
+       getfemint_mesh_fem *gfi_mf = in.pop().to_getfemint_mesh_fem();
+
+
+       size_type N = size_type(gfi_mf->mesh_fem().linked_mesh().dim());
+       size_type ratio = 1;
+       if ((gfi_mf->mesh_fem()).get_qdim() == 1) ratio = N*N;
+       
+       getfem::model_real_plain_vector
+         VMM(ratio*(gfi_mf->mesh_fem()).nb_dof());
+
+       getfem::compute_sigmahathat
+       (md->model(), varname,
+        abstract_hyperelastic_law_from_name
+        (lawname, gfi_mf->mesh_fem().linked_mesh().dim()),
+        dataname, gfi_mf->mesh_fem(), VMM);
+       out.pop().from_dcvector(VMM);
+       );
 
 
     /*@GET V = ('compute plasticity Von Mises or Tresca', @str datasigma, @tmf mf_vm[, @str version])
       Compute on `mf_vm` the Von-Mises or the Tresca stress of a field for plasticity and return it into the vector V.
-      `datasigma` is a vector which contains the stress constraints values supported by the mesh.  
+      `datasigma` is a vector which contains the stress constraints values supported by the mesh.
       `version` should be  'Von_Mises' or 'Tresca' ('Von_Mises' is the default).@*/
     sub_command
       ("compute elastoplasticity Von Mises or Tresca", 2, 3, 0, 1,
@@ -401,12 +585,12 @@ void gf_model_get(getfemint::mexargs_in& m_in,
        if (in.remaining()) stresca = in.pop().to_string();
        bool tresca = false;
        if (cmd_strmatch(stresca, "Von Mises") ||
-	   cmd_strmatch(stresca, "Von_Mises"))
-	 tresca = false;
+           cmd_strmatch(stresca, "Von_Mises"))
+         tresca = false;
        else if (cmd_strmatch(stresca, "Tresca"))
-	 tresca = true;
+         tresca = true;
        else THROW_BADARG("bad option \'version\': " << stresca);
-       
+
        getfem::model_real_plain_vector VMM((gfi_mf->mesh_fem()).nb_dof());
        getfem::compute_elastoplasticity_Von_Mises_or_Tresca
        (md->model(), datasigma, gfi_mf->mesh_fem(), VMM, tresca);
@@ -417,7 +601,7 @@ void gf_model_get(getfemint::mexargs_in& m_in,
 
 
         /*@GET ('compute plasticity constraints', @tmim mim, @str varname, @str projname, @str datalambda, @str datamu, @str datathreshold, @str datasigma)
-      Compute and save the stress constraints sigma for other hypothetical iterations. 
+      Compute and save the stress constraints sigma for other hypothetical iterations.
       'mim' is the integration method to use for the computation.
       'varname' is the main variable of the problem.
       'projname' is the type of projection to use. For the moment it could only be 'Von Mises' or 'VM'.
@@ -433,16 +617,16 @@ void gf_model_get(getfemint::mexargs_in& m_in,
        std::string datathreshold = in.pop().to_string();
        std::string datasigma = in.pop().to_string();
 
-      
+
        getfem::elastoplasticity_next_iter
        (md->model(), gfi_mim->mesh_im(), varname,
-	  abstract_constraints_projection_from_name(projname), 
-	  datalambda, datamu, datathreshold, datasigma);
+          abstract_constraints_projection_from_name(projname),
+          datalambda, datamu, datathreshold, datasigma);
        );
 
 
 
-    
+
     /*@GET V = ('compute plastic part', @tmim mim, @tmf mf_pl, @str varname, @str projname, @str datalambda, @str datamu, @str datathreshold, @str datasigma)
       Compute on `mf_pl` the plastic part and return it into the vector V.
       `datasigma` is a vector which contains the stress constraints values supported by the mesh.@*/
@@ -460,10 +644,10 @@ void gf_model_get(getfemint::mexargs_in& m_in,
        getfem::model_real_plain_vector plast((gfi_mf->mesh_fem()).nb_dof());
        getfem::compute_plastic_part
        (md->model(), gfi_mim->mesh_im(),  gfi_mf->mesh_fem(), varname,
-	  abstract_constraints_projection_from_name(projname), 
-	datalambda, datamu, datathreshold, datasigma, plast);
+          abstract_constraints_projection_from_name(projname),
+        datalambda, datamu, datathreshold, datasigma, plast);
        out.pop().from_dcvector(plast);
-       ); 
+       );
 
 
 
@@ -475,7 +659,7 @@ void gf_model_get(getfemint::mexargs_in& m_in,
        size_type ind_brick = in.pop().to_integer() - config::base_index();
        size_type ind_term = in.pop().to_integer() - config::base_index();
        RETURN_SPARSE(linear_real_matrix_term(ind_brick, ind_term),
-		     linear_complex_matrix_term(ind_brick, ind_term));
+                     linear_complex_matrix_term(ind_brick, ind_term));
        );
 
 
@@ -502,22 +686,22 @@ void gf_model_get(getfemint::mexargs_in& m_in,
        infomsg() << "gfModel object with " << md->model().nb_dof()
        << " degrees of freedom\n";
        );
-    
+
   }
 
- 
+
   if (m_in.narg() < 2)  THROW_BADARG( "Wrong number of input arguments");
 
   getfemint_model *md  = m_in.pop().to_getfemint_model();
   std::string init_cmd   = m_in.pop().to_string();
   std::string cmd        = cmd_normalize(init_cmd);
 
-  
+
   SUBC_TAB::iterator it = subc_tab.find(cmd);
   if (it != subc_tab.end()) {
     check_cmd(cmd, it->first.c_str(), m_in, m_out, it->second->arg_in_min,
-	      it->second->arg_in_max, it->second->arg_out_min,
-	      it->second->arg_out_max);
+              it->second->arg_in_max, it->second->arg_out_min,
+              it->second->arg_out_max);
     it->second->run(m_in, m_out, md);
   }
   else bad_cmd(init_cmd);
diff --git a/interface/src/gf_model_set.cc b/interface/src/gf_model_set.cc
index fdf7e88..57bb8fd 100644
--- a/interface/src/gf_model_set.cc
+++ b/interface/src/gf_model_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**\file gf_model_set.cc
    \brief getfemint_model setter.
@@ -68,7 +68,7 @@ template <typename T> static inline void dummy_func(T &) {}
     psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax;         \
     psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax;     \
     subc_tab[cmd_normalize(name)] = psubc;                              \
-  }                           
+  }
 
 
 void gf_model_set(getfemint::mexargs_in& m_in,
@@ -100,6 +100,22 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        workspace().set_dependance(md, gfi_mf);
        );
 
+    /*@SET ('add filtered fem variable', @str name, @tmf mf, @int region[, @int niter])
+      Add a variable to the model linked to a @tmf. The variable is filtered
+      in the sense that only the dof on the region are considered.
+      `name` is the variable name and `niter` is the optional number of
+      version of the data stored, for time integration schemes.@*/
+    sub_command
+      ("add filtered fem variable", 3, 4, 0, 0,
+       std::string name = in.pop().to_string();
+       getfemint_mesh_fem *gfi_mf = in.pop().to_getfemint_mesh_fem();
+       size_type region = in.pop().to_integer();
+       size_type niter = 1;
+       if (in.remaining()) niter = in.pop().to_integer(1,10);
+       md->model().add_filtered_fem_variable(name, gfi_mf->mesh_fem(), region, niter);
+       workspace().set_dependance(md, gfi_mf);
+       );
+
 
     /*@SET ('add variable', @str name, @int size[, @int niter])
       Add a variable to the model of constant size. `name` is the variable
@@ -126,7 +142,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        );
 
 
-    /*@SET ('add multiplier', @str name, @tmf mf, @str primalname[, @int niter])
+    /*@SET ('add multiplier', @str name, @tmf mf, @str primalname[, @tmim mim, @int region][, @int niter])
     Add a particular variable linked to a fem being a multiplier with
     respect to a primal variable. The dof will be filtered with the
     ``gmm::range_basis`` function applied on the terms of the model
@@ -135,13 +151,28 @@ void gf_model_set(getfemint::mexargs_in& m_in,
     Optimized for boundary multipliers. `niter` is the optional number
     of version of the data stored, for time integration schemes. @*/
     sub_command
-      ("add multiplier", 3, 4, 0, 0,
+      ("add multiplier", 3, 6, 0, 0,
        std::string name = in.pop().to_string();
        getfemint_mesh_fem *gfi_mf = in.pop().to_getfemint_mesh_fem();
        std::string primalname = in.pop().to_string();
+
+       getfemint_mesh_im *gfi_mim = 0;
+       size_type region = size_type(-1);
        size_type niter = 1;
+       if (in.remaining()) {
+	 mexarg_in argin = in.pop();
+	 if (argin.is_mesh_im()) {
+	   gfi_mim = argin.to_getfemint_mesh_im();
+	   region = in.pop().to_integer();
+	 } 
+	 else niter =  argin.to_integer(1,10);
+       }
        if (in.remaining()) niter = in.pop().to_integer(1,10);
-       md->model().add_multiplier(name, gfi_mf->mesh_fem(), primalname, niter);
+       if (gfi_mim)
+	 md->model().add_multiplier(name, gfi_mf->mesh_fem(), primalname,
+				    gfi_mim->mesh_im(), region, niter);
+       else
+	 md->model().add_multiplier(name, gfi_mf->mesh_fem(),primalname,niter);
        workspace().set_dependance(md, gfi_mf);
        );
 
@@ -249,7 +280,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
     /*@SET ('to variables', @vec V)
       Set the value of the variables of the model with the vector `V`.
       Typically, the vector `V` results of the solve of the tangent
-      linear system (usefull to solve your problem with you own solver).@*/
+      linear system (useful to solve your problem with you own solver).@*/
     sub_command
       ("to variables", 1, 1, 0, 0,
        if (!md->is_complex()) {
@@ -267,7 +298,8 @@ void gf_model_set(getfemint::mexargs_in& m_in,
 
 
     /*@SET ind = ('add Laplacian brick', @tmim mim, @str varname[, @int region])
-    Add a Laplacian term to the model relatively to the variable `varname`.
+    Add a Laplacian term to the model relatively to the variable `varname`
+    (in fact with a minus : :math:`-\text{div}(\nabla u)`).
     If this is a vector valued variable, the Laplacian term is added
     componentwise. `region` is an optional mesh region on which the term
     is added. If it is not specified, it is added on the whole mesh. Return
@@ -301,7 +333,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
     The components of the matrix/tensor have to be stored with the fortran
     order (columnwise) in the data vector (compatibility with blas). The
     symmetry of the given matrix/tensor is not verified (but assumed). If
-    this is a vector valued variable, the Laplacian term is added
+    this is a vector valued variable, the elliptic term is added
     componentwise. `region` is an optional mesh region on which the term is
     added. If it is not specified, it is added on the whole mesh. Return the
     brick index in the model.@*/
@@ -320,7 +352,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        out.pop().from_integer(int(ind));
        );
 
-    
+
     /*@SET ind = ('add source term brick', @tmim mim, @str varname, @str dataname[, @int region[, @str directdataname]])
     Add a source term to the model relatively to the variable `varname`.
     The source term is represented by the data `dataname` which could be
@@ -452,7 +484,100 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        size_type ind = config::base_index();
        ind += getfem::add_Dirichlet_condition_with_penalization
        (md->model(), gfi_mim->mesh_im(), varname, coeff, region,
-	dataname, mf_mult);
+        dataname, mf_mult);
+       workspace().set_dependance(md, gfi_mim);
+       out.pop().from_integer(int(ind));
+       );
+
+    /*@SET ind = ('add normal Dirichlet condition with multipliers', @tmim mim, @str varname, mult_description, @int region[, @str dataname])
+      Add a Dirichlet condition to the normal component of the vector
+     (or tensor) valued variable `varname` and the mesh
+      region `region`. This region should be a boundary. The Dirichlet
+      condition is prescribed with a multiplier variable described by
+      `mult_description`. If `mult_description` is a string this is assumed
+      to be the variable name corresponding to the multiplier (which should be
+      first declared as a multiplier variable on the mesh region in the model).
+      If it is a finite element method (mesh_fem object) then a multiplier
+      variable will be added to the model and build on this finite element
+      method (it will be restricted to the mesh region `region` and eventually
+      some conflicting dofs with some other multiplier variables will be
+      suppressed). If it is an integer, then a  multiplier variable will be
+      added to the model and build on a classical finite element of degree
+      that integer. `dataname` is the optional right hand side of  the
+      Dirichlet condition. It could be constant or described on a fem; scalar
+      or vector valued, depending on the variable on which the Dirichlet
+      condition is prescribed (scalar if the variable
+      is vector valued, vector if the variable is tensor valued).
+      Returns the brick index in the model.@*/
+    sub_command
+      ("add normal Dirichlet condition with multipliers", 4, 5, 0, 1,
+       getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+       std::string varname = in.pop().to_string();
+       int version = 0;
+       size_type degree = 0;
+       std::string multname;
+       getfemint_mesh_fem *gfi_mf = 0;
+       mexarg_in argin = in.pop();
+       if (argin.is_integer()) {
+         degree = argin.to_integer();
+         version = 1;
+       } else if (argin.is_string()) {
+         multname = argin.to_string();
+         version = 2;
+       } else {
+         gfi_mf = argin.to_getfemint_mesh_fem();
+         version = 3;
+       }
+       size_type region = in.pop().to_integer();
+       std::string dataname;
+       if (in.remaining()) dataname = in.pop().to_string();
+
+       size_type ind = config::base_index();
+       switch(version) {
+       case 1:  ind += getfem::add_normal_Dirichlet_condition_with_multipliers
+           (md->model(), gfi_mim->mesh_im(), varname, dim_type(degree), region, dataname);
+         break;
+       case 2:  ind += getfem::add_normal_Dirichlet_condition_with_multipliers
+           (md->model(), gfi_mim->mesh_im(), varname, multname, region, dataname);
+         break;
+       case 3:  ind += getfem::add_normal_Dirichlet_condition_with_multipliers
+           (md->model(), gfi_mim->mesh_im(), varname, gfi_mf->mesh_fem(), region, dataname);
+         workspace().set_dependance(md, gfi_mf);
+         break;
+       }
+       workspace().set_dependance(md, gfi_mim);
+       out.pop().from_integer(int(ind));
+       );
+
+
+    /*@SET ind = ('add normal Dirichlet condition with penalization', @tmim mim, @str varname, @scalar coeff, @int region[, @str dataname, @tmf mf_mult])
+    Add a Dirichlet condition to the normal component of the vector
+    (or tensor) valued variable `varname` and the mesh
+    region `region`. This region should be a boundary. The Dirichlet
+    condition is prescribed with penalization. The penalization coefficient
+    is initially `coeff` and will be added to the data of the model.
+    `dataname` is the optional right hand side of the Dirichlet condition.
+    It could be constant or described on a fem; scalar or vector valued,
+    depending on the variable on which the Dirichlet condition is prescribed
+    (scalar if the variable
+    is vector valued, vector if the variable is tensor valued).
+    `mf_mult` is an optional parameter which allows to weaken the
+    Dirichlet condition specifying a multiplier space.
+    Returns the brick index in the model.@*/
+    sub_command
+      ("add normal Dirichlet condition with penalization", 4, 6, 0, 1,
+       getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+       std::string varname = in.pop().to_string();
+       double coeff = in.pop().to_scalar();
+       size_type region = in.pop().to_integer();
+       std::string dataname;
+       if (in.remaining()) dataname = in.pop().to_string();
+       const getfem::mesh_fem *mf_mult = 0;
+       if (in.remaining()) mf_mult = in.pop().to_const_mesh_fem();
+       size_type ind = config::base_index();
+       ind += getfem::add_normal_Dirichlet_condition_with_penalization
+       (md->model(), gfi_mim->mesh_im(), varname, coeff, region,
+        dataname, mf_mult);
        workspace().set_dependance(md, gfi_mim);
        out.pop().from_integer(int(ind));
        );
@@ -478,7 +603,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
     or vector valued, depending on the variable on which the Dirichlet
     condition is prescribed. `Hname` is the data
     corresponding to the matrix field `H`.
-    Return the brick index in the model.@*/
+    Returns the brick index in the model.@*/
     sub_command
       ("add generalized Dirichlet condition with multipliers", 6, 6, 0, 1,
        getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
@@ -555,13 +680,130 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        );
 
 
+    /*@SET ind = ('add pointwise constraints with multipliers', @str varname, @str dataname_pt[, @str dataname_unitv] [, @str dataname_val])
+    Add some pointwise constraints on the variable `varname` using
+    multiplier. The multiplier variable is automatically added to the model.
+    The conditions are prescribed on a set of points given in the data
+    `dataname_pt` whose dimension is the number of points times the dimension
+    of the mesh.
+    If the variable represents a vector field, one has to give the data
+    `dataname_unitv` which represents a vector of dimension the number of
+    points times the dimension of the vector field which should store some
+    unit vectors. In that case the prescribed constraint is the scalar
+    product of the variable at the corresponding point with the corresponding
+    unit vector.
+    The optional data `dataname_val` is the vector of values to be prescribed
+    at the different points.
+    This brick is specifically designed to kill rigid displacement
+    in a Neumann problem.
+    Returns the brick index in the model.@*/
+    sub_command
+      ("add pointwise constraints with multipliers", 2, 4, 0, 1,
+       std::string varname = in.pop().to_string();
+       std::string dataname_pt = in.pop().to_string();
+       const getfem::mesh_fem *mf_u
+         = &(md->model().mesh_fem_of_variable(varname));
+       GMM_ASSERT1(mf_u, "The variable should depend on a mesh_fem");
+       std::string dataname_unitv;
+       if (mf_u->get_qdim() > 1)
+         dataname_unitv = in.pop().to_string();
+       std::string dataname_val;
+       if (in.remaining()) dataname_val = in.pop().to_string();
+
+       size_type ind = config::base_index();
+       ind += getfem::add_pointwise_constraints_with_multipliers
+       (md->model(), varname, dataname_pt, dataname_unitv, dataname_val);
+       out.pop().from_integer(int(ind));
+       );
+
+    /*@SET ind = ('add pointwise constraints with given multipliers', @str varname, @str multname, @str dataname_pt[, @str dataname_unitv] [, @str dataname_val])
+    Add some pointwise constraints on the variable `varname` using a given
+    multiplier `multname`.
+    The conditions are prescribed on a set of points given in the data
+    `dataname_pt` whose dimension is the number of points times the dimension
+    of the mesh.
+    The multiplier variable should be a fixed size variable of size the
+    number of points.
+    If the variable represents a vector field, one has to give the data
+    `dataname_unitv` which represents a vector of dimension the number of
+    points times the dimension of the vector field which should store some
+    unit vectors. In that case the prescribed constraint is the scalar
+    product of the variable at the corresponding point with the corresponding
+    unit vector.
+    The optional data `dataname_val` is the vector of values to be prescribed
+    at the different points.
+    This brick is specifically designed to kill rigid displacement
+    in a Neumann problem.
+    Returns the brick index in the model.@*/
+    sub_command
+      ("add pointwise constraints with given multipliers", 3, 5, 0, 1,
+       std::string varname = in.pop().to_string();
+       std::string multname = in.pop().to_string();
+       std::string dataname_pt = in.pop().to_string();
+       const getfem::mesh_fem *mf_u
+         = &(md->model().mesh_fem_of_variable(varname));
+       GMM_ASSERT1(mf_u, "The variable should depend on a mesh_fem");
+       std::string dataname_unitv;
+       if (mf_u->get_qdim() > 1)
+         dataname_unitv = in.pop().to_string();
+       std::string dataname_val;
+       if (in.remaining()) dataname_val = in.pop().to_string();
+
+       size_type ind = config::base_index();
+       ind += getfem::add_pointwise_constraints_with_given_multipliers
+       (md->model(), varname, multname, dataname_pt, dataname_unitv,
+        dataname_val);
+       out.pop().from_integer(int(ind));
+       );
+
+
+    /*@SET ind = ('add pointwise constraints with penalization', @str varname, @scalar coeff, @str dataname_pt[, @str dataname_unitv] [, @str dataname_val])
+    Add some pointwise constraints on the variable `varname` thanks to
+    a penalization. The penalization coefficient is initially
+    `penalization_coeff` and will be added to the data of the model.
+    The conditions are prescribed on a set of points given in the data
+    `dataname_pt` whose dimension is the number of points times the dimension
+    of the mesh.
+    If the variable represents a vector field, one has to give the data
+    `dataname_unitv` which represents a vector of dimension the number of
+    points times the dimension of the vector field which should store some
+    unit vectors. In that case the prescribed constraint is the scalar
+    product of the variable at the corresponding point with the corresponding
+    unit vector.
+    The optional data `dataname_val` is the vector of values to be prescribed
+    at the different points.
+    This brick is specifically designed to kill rigid displacement
+    in a Neumann problem.
+    Returns the brick index in the model.@*/
+    sub_command
+      ("add pointwise constraints with penalization", 3, 5, 0, 1,
+       std::string varname = in.pop().to_string();
+       double coeff = in.pop().to_scalar();
+       std::string dataname_pt = in.pop().to_string();
+       const getfem::mesh_fem *mf_u
+         = &(md->model().mesh_fem_of_variable(varname));
+       GMM_ASSERT1(mf_u, "The variable should depend on a mesh_fem");
+       std::string dataname_unitv;
+       if (mf_u->get_qdim() > 1)
+         dataname_unitv = in.pop().to_string();
+       std::string dataname_val;
+       if (in.remaining()) dataname_val = in.pop().to_string();
+
+       size_type ind = config::base_index();
+       ind += getfem::add_pointwise_constraints_with_penalization
+       (md->model(), varname, coeff, dataname_pt, dataname_unitv,
+        dataname_val);
+       out.pop().from_integer(int(ind));
+       );
+
+
     /*@SET ('change penalization coeff', @int ind_brick, @scalar coeff)
     Change the penalization coefficient of a Dirichlet condition with
     penalization brick. If the brick is not of this kind, this
     function has an undefined behavior.@*/
     sub_command
       ("change penalization coeff", 2, 2, 0, 0,
-       size_type ind_brick = in.pop().to_integer();
+       size_type ind_brick = in.pop().to_integer() - config::base_index();
        double coeff = in.pop().to_scalar();
        getfem::change_penalization_coeff(md->model(), ind_brick, coeff);
        );
@@ -611,6 +853,37 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        );
 
 
+    /*@SET ind = ('add basic nonlinear brick', @tmim mim, @str varname, @str f, @str dfdu[, @str dataname, @int region])
+    Add a brick representing a scalar term :math:`f(u)` to the left-hand
+    side of the model. In the weak form, one adds :math:`+\int f(u)v`.
+    The function :math:`f` may optionally depend on :math:`\lambda`, i.e.,
+    :math:`f(u)=f(u,\lambda)`.
+    `f` and `dfdu` should contain the expressions for
+    :math:`f(u)` and :math:`\frac{df}{du}(u)`, respectively.
+    `dataname` represents the optional real scalar parameter :math:`\lambda`
+    in the model. `region` is an optional mesh region on which the term is
+    added. If it is not specified, the term is added on the whole mesh.
+    Return the brick index in the model.@*/
+    sub_command
+      ("add basic nonlinear brick", 4, 6, 0, 1,
+       getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+       std::string varname = in.pop().to_string();
+       std::string f = in.pop().to_string();
+       std::string dfdu = in.pop().to_string();
+       std::string dataname;
+       if (in.remaining()) dataname = in.pop().to_string();
+       size_type region = size_type(-1);
+       if (in.remaining()) region = in.pop().to_integer();
+       size_type ind
+       = getfem::add_basic_nonlinear_brick(md->model(), gfi_mim->mesh_im(),
+                                           varname, f, dfdu,
+                                           region, dataname)
+       + config::base_index();
+       workspace().set_dependance(md, gfi_mim);
+       out.pop().from_integer(int(ind));
+       );
+
+
     /*@SET ind = ('add constraint with multipliers', @str varname, @str multname, @tspmat B, @vec L)
     Add an additional explicit constraint on the variable `varname` thank to
     a multiplier `multname` peviously added to the model (should be a fixed
@@ -627,10 +900,10 @@ void gf_model_set(getfemint::mexargs_in& m_in,
          THROW_BADARG("Complex constraint for a real model");
        if (!B->is_complex() && md->is_complex())
          THROW_BADARG("Real constraint for a complex model");
-       
+
        size_type ind
        = getfem::add_constraint_with_multipliers(md->model(),varname,multname);
-       
+
        if (md->is_complex()) {
          if (B->storage()==gsparse::CSCMAT)
            getfem::set_private_data_matrix(md->model(), ind, B->cplx_csc());
@@ -646,7 +919,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
          else
            THROW_BADARG("Constraint matrix should be a sparse matrix");
        }
-       
+
        if (!md->is_complex()) {
          darray st = in.pop().to_darray();
          std::vector<double> V(st.begin(), st.end());
@@ -679,10 +952,10 @@ void gf_model_set(getfemint::mexargs_in& m_in,
          THROW_BADARG("Complex constraint for a real model");
        if (!B->is_complex() && md->is_complex())
          THROW_BADARG("Real constraint for a complex model");
-       
+
        size_type ind
        = getfem::add_constraint_with_penalization(md->model(), varname, coeff);
-       
+
        if (md->is_complex()) {
          if (B->storage()==gsparse::CSCMAT)
            getfem::set_private_data_matrix(md->model(), ind, B->cplx_csc());
@@ -698,7 +971,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
          else
            THROW_BADARG("Constraint matrix should be a sparse matrix");
        }
-       
+
        if (!md->is_complex()) {
          darray st = in.pop().to_darray();
          std::vector<double> V(st.begin(), st.end());
@@ -708,7 +981,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
          std::vector<std::complex<double> > V(st.begin(), st.end());
          getfem::set_private_data_rhs(md->model(), ind, V);
        }
-       
+
        out.pop().from_integer(int(ind + config::base_index()));
        );
 
@@ -731,19 +1004,19 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        dal::shared_ptr<gsparse> B = in.pop().to_sparse();
        bool issymmetric = false;
        bool iscoercive = false;
-       if (in.remaining()) issymmetric = (in.pop().to_integer(0,1) != 1);
+       if (in.remaining()) issymmetric = (in.pop().to_integer(0,1) != 0);
        if (!issymmetric && in.remaining())
-         iscoercive = (in.pop().to_integer(0,1) != 1);
-       
+         iscoercive = (in.pop().to_integer(0,1) != 0);
+
        size_type ind
        = getfem::add_explicit_matrix(md->model(), varname1, varname2,
                                      issymmetric, iscoercive);
-       
+
        if (B->is_complex() && !md->is_complex())
          THROW_BADARG("Complex constraint for a real model");
        if (!B->is_complex() && md->is_complex())
          THROW_BADARG("Real constraint for a complex model");
-       
+
        if (md->is_complex()) {
          if (B->storage()==gsparse::CSCMAT)
            getfem::set_private_data_matrix(md->model(), ind, B->cplx_csc());
@@ -759,7 +1032,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
          else
            THROW_BADARG("Constraint matrix should be a sparse matrix");
        }
-       
+
        out.pop().from_integer(int(ind + config::base_index()));
        );
 
@@ -775,7 +1048,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        std::string varname = in.pop().to_string();
        size_type ind
        = getfem::add_explicit_rhs(md->model(), varname);
-       
+
        if (!md->is_complex()) {
          darray st = in.pop().to_darray();
          std::vector<double> V(st.begin(), st.end());
@@ -785,7 +1058,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
          std::vector<std::complex<double> > V(st.begin(), st.end());
          getfem::set_private_data_rhs(md->model(), ind, V);
        }
-       
+
        out.pop().from_integer(int(ind + config::base_index()));
        );
 
@@ -796,14 +1069,14 @@ void gf_model_set(getfemint::mexargs_in& m_in,
       set this matrix. @*/
     sub_command
       ("set private matrix", 2, 2, 0, 0,
-       size_type ind = in.pop().to_integer();
+       size_type ind = in.pop().to_integer() - config::base_index();
        dal::shared_ptr<gsparse> B = in.pop().to_sparse();
-       
+
        if (B->is_complex() && !md->is_complex())
          THROW_BADARG("Complex constraint for a real model");
        if (!B->is_complex() && md->is_complex())
          THROW_BADARG("Real constraint for a complex model");
-       
+
        if (md->is_complex()) {
          if (B->storage()==gsparse::CSCMAT)
            getfem::set_private_data_matrix(md->model(), ind, B->cplx_csc());
@@ -828,8 +1101,8 @@ void gf_model_set(getfemint::mexargs_in& m_in,
       set this rhs. @*/
     sub_command
       ("set private rhs", 2, 2, 0, 0,
-       size_type ind = in.pop().to_integer();
-       
+       size_type ind = in.pop().to_integer() - config::base_index();
+
        if (!md->is_complex()) {
          darray st = in.pop().to_darray();
          std::vector<double> V(st.begin(), st.end());
@@ -895,7 +1168,8 @@ void gf_model_set(getfemint::mexargs_in& m_in,
     /*@SET ind = ('add nonlinear elasticity brick', @tmim mim, @str varname, @str constitutive_law, @str dataname[, @int region])
     Add a nonlinear elasticity term to the model relatively to the
     variable `varname`. `lawname` is the constitutive law which
-    could be 'SaintVenant Kirchhoff', 'Mooney Rivlin' or 'Ciarlet Geymonat'.
+    could be 'SaintVenant Kirchhoff', 'Mooney Rivlin', 'Ciarlet Geymonat'
+    or 'generalized Blatz Ko'.
     IMPORTANT : if the variable is defined on a 2D mesh, the plane strain
     approximation is automatically used.
     `dataname` is a vector of parameters for the constitutive law. Its length
@@ -917,7 +1191,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        add_nonlinear_elasticity_brick
        (md->model(), gfi_mim->mesh_im(), varname,
         abstract_hyperelastic_law_from_name(lawname, N), dataname, region);
-       
+
        workspace().set_dependance(md, gfi_mim);
        out.pop().from_integer(int(ind));
        );
@@ -933,7 +1207,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
       for the time scheme needed for the Newton algorithm used.
       Moreover, the finite element method on which `varname` is described
       is an K ordered mesh_fem, the `datasigma` one have to be at least
-      an K-1 ordered mesh_fem. 
+      an K-1 ordered mesh_fem.
       `datalambda` and `datamu` are the Lame coefficients of the studied
       material.
       `datathreshold` is the plasticity threshold of the material.
@@ -958,11 +1232,11 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        size_type ind = config::base_index() +
        add_elastoplasticity_brick
        (md->model(), gfi_mim->mesh_im(),
-        abstract_constraints_projection_from_name(projname), 
-	varname, datalambda, datamu,
-	datathreshold, datasigma,
-	region);
-       
+        abstract_constraints_projection_from_name(projname),
+        varname, datalambda, datamu,
+        datathreshold, datasigma,
+        region);
+
        workspace().set_dependance(md, gfi_mim);
        out.pop().from_integer(int(ind));
        );
@@ -995,8 +1269,8 @@ void gf_model_set(getfemint::mexargs_in& m_in,
 
     /*@SET ind = ('add bilaplacian brick', @tmim mim, @str varname, @str dataname [, @int region])
       Add a bilaplacian brick on the variable
-      `varname` and on the mesh region `region`. 
-      This represent a term :math:`\Delta(D \Delta u)`. 
+      `varname` and on the mesh region `region`.
+      This represent a term :math:`\Delta(D \Delta u)`.
       where :math:`D(x)` is a coefficient determined by `dataname` which
       could be constant or described on a f.e.m. The corresponding weak form
       is :math:`\int D(x)\Delta u(x) \Delta v(x) dx`.
@@ -1010,10 +1284,12 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        if (in.remaining()) region = in.pop().to_integer();
        size_type ind = config::base_index() +
        add_bilaplacian_brick(md->model(), gfi_mim->mesh_im(),
-			     varname, dataname, region);
+                             varname, dataname, region);
        workspace().set_dependance(md, gfi_mim);
        out.pop().from_integer(int(ind));
        );
+    
+       
 
 
     /*@SET ind = ('add Kirchhoff-Love plate brick', @tmim mim, @str varname, @str dataname_D, @str dataname_nu [, @int region])
@@ -1034,7 +1310,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        if (in.remaining()) region = in.pop().to_integer();
        size_type ind = config::base_index() +
        add_bilaplacian_brick_KL(md->model(), gfi_mim->mesh_im(),
-				varname, dataname_D, dataname_nu, region);
+                                varname, dataname_D, dataname_nu, region);
        workspace().set_dependance(md, gfi_mim);
        out.pop().from_integer(int(ind));
        );
@@ -1043,7 +1319,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
       Add a normal derivative source term brick
       :math:`F = \int b.\partial_n v` on the variable `varname` and the
       mesh region `region`.
-      
+
       Update the right hand side of the linear system.
       `dataname` represents `b` and `varname` represents `v`.
       Return the brick index in the model.@*/
@@ -1055,7 +1331,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        size_type region = in.pop().to_integer();
        size_type ind = config::base_index() +
        add_normal_derivative_source_term_brick(md->model(), gfi_mim->mesh_im(),
-				varname, dataname, region);
+                                varname, dataname, region);
        workspace().set_dependance(md, gfi_mim);
        out.pop().from_integer(int(ind));
        );
@@ -1075,7 +1351,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        size_type region = in.pop().to_integer();
        size_type ind = config::base_index() +
        add_Kirchoff_Love_Neumann_term_brick(md->model(), gfi_mim->mesh_im(),
-				varname, dataname_M, dataname_divM, region);
+                                varname, dataname_M, dataname_divM, region);
        workspace().set_dependance(md, gfi_mim);
        out.pop().from_integer(int(ind));
        );
@@ -1083,7 +1359,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
 
     /*@SET ind = ('add normal derivative Dirichlet condition with multipliers', @tmim mim, @str varname, mult_description, @int region [, @str dataname, @int R_must_be_derivated])
        Add a Dirichlet condition on the normal derivative of the variable
-      `varname` and on the mesh region `region` (which should be a boundary. 
+      `varname` and on the mesh region `region` (which should be a boundary.
       The general form is
       :math:`\int \partial_n u(x)v(x) = \int r(x)v(x) \forall v`
       where :math:`r(x)` is
@@ -1128,21 +1404,21 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        if (in.remaining()) dataname = in.pop().to_string();
        bool R_must_be_derivated = false;
        if (in.remaining())
-	 R_must_be_derivated = (in.pop().to_integer(0,1)) != 0;
+         R_must_be_derivated = (in.pop().to_integer(0,1)) != 0;
        size_type ind = config::base_index();
        switch(version) {
-       case 1:  ind += 
-	   add_normal_derivative_Dirichlet_condition_with_multipliers
-	   (md->model(), gfi_mim->mesh_im(), varname, dim_type(degree), region,
-	    dataname, R_must_be_derivated ); break;
-       case 2:  ind += 
-	   add_normal_derivative_Dirichlet_condition_with_multipliers
-	   (md->model(), gfi_mim->mesh_im(), varname, multname, region,
-	    dataname, R_must_be_derivated ); break;
-       case 3:  ind += 
-	   add_normal_derivative_Dirichlet_condition_with_multipliers
-	   (md->model(), gfi_mim->mesh_im(), varname,  gfi_mf->mesh_fem(),
-	    region, dataname, R_must_be_derivated ); break;
+       case 1:  ind +=
+           add_normal_derivative_Dirichlet_condition_with_multipliers
+           (md->model(), gfi_mim->mesh_im(), varname, dim_type(degree), region,
+            dataname, R_must_be_derivated ); break;
+       case 2:  ind +=
+           add_normal_derivative_Dirichlet_condition_with_multipliers
+           (md->model(), gfi_mim->mesh_im(), varname, multname, region,
+            dataname, R_must_be_derivated ); break;
+       case 3:  ind +=
+           add_normal_derivative_Dirichlet_condition_with_multipliers
+           (md->model(), gfi_mim->mesh_im(), varname,  gfi_mf->mesh_fem(),
+            region, dataname, R_must_be_derivated ); break;
        }
        workspace().set_dependance(md, gfi_mim);
        out.pop().from_integer(int(ind));
@@ -1151,7 +1427,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
 
     /*@SET ind = ('add normal derivative Dirichlet condition with penalization', @tmim mim, @str varname, @scalar coeff, @int region [, @str dataname, @int R_must_be_derivated])
        Add a Dirichlet condition on the normal derivative of the variable
-      `varname` and on the mesh region `region` (which should be a boundary. 
+      `varname` and on the mesh region `region` (which should be a boundary.
       The general form is
       :math:`\int \partial_n u(x)v(x) = \int r(x)v(x) \forall v`
       where :math:`r(x)` is
@@ -1175,11 +1451,11 @@ void gf_model_set(getfemint::mexargs_in& m_in,
        if (in.remaining()) dataname = in.pop().to_string();
        bool R_must_be_derivated = false;
        if (in.remaining())
-	 R_must_be_derivated = (in.pop().to_integer(0,1)) != 0;
+         R_must_be_derivated = (in.pop().to_integer(0,1)) != 0;
        size_type ind = config::base_index() +
        add_normal_derivative_Dirichlet_condition_with_penalization
-	   (md->model(), gfi_mim->mesh_im(), varname, coeff, region,
-	    dataname, R_must_be_derivated );
+           (md->model(), gfi_mim->mesh_im(), varname, coeff, region,
+            dataname, R_must_be_derivated );
        workspace().set_dependance(md, gfi_mim);
        out.pop().from_integer(int(ind));
        );
@@ -1336,70 +1612,94 @@ void gf_model_set(getfemint::mexargs_in& m_in,
         );
 
 
-    /*@SET ('unable bricks', @ivec bricks_indices)
-    Unable a disabled brick.@*/
+     /*@SET ('enable bricks', @ivec bricks_indices)
+       Enable a disabled brick. @*/
      sub_command
-       ("unable bricks", 1, 1, 0, 0,
+       ("enable bricks", 1, 1, 0, 0,
         dal::bit_vector bv = in.pop().to_bit_vector();
         for (dal::bv_visitor ii(bv); !ii.finished(); ++ii)
-          md->model().unable_brick(ii);
+          md->model().enable_brick(ii);
         );
 
+     /*@SET ('disable variable', @str varname)
+       Disable a variable for a solve. The next solve will operate only on
+       the remaining variables. This allows to solve separately different
+       parts of a model. If there is a strong coupling of the variables,
+       a fixed point strategy can the be used. @*/
+     sub_command
+       ("disable variable", 1, 1, 0, 0,
+	std::string varname = in.pop().to_string();
+	md->model().disable_variable(varname);
+        );
 
-    /*@SET ('first iter')
-    To be executed before the first iteration of a time integration scheme.@*/
+
+     /*@SET ('enable variable', @str varname)
+       Enable a disabled variable. @*/
+     sub_command
+       ("enable variable", 1, 1, 0, 0,
+        std::string varname = in.pop().to_string();
+	md->model().enable_variable(varname);
+        );
+
+
+     /*@SET ('first iter')
+       To be executed before the first iteration of a time integration
+       scheme. @*/
      sub_command
        ("first iter", 0, 0, 0, 0,
         md->model().first_iter();
         );
 
 
-    /*@SET ('next iter')
-      To be executed at the end of each iteration of a time
-      integration scheme.@*/
+     /*@SET ('next iter')
+       To be executed at the end of each iteration of a time
+       integration scheme. @*/
      sub_command
        ("next iter", 0, 0, 0, 0,
         md->model().next_iter();
         );
 
 
-    /*@SET ind = ('add basic contact brick', @str varname_u, @str multname_n[, @str multname_t], @str dataname_r, @tspmat BN[, @tspmat BT, @str dataname_friction_coeff][, @str dataname_gap[, @str dataname_alpha[, @int symmetrized]])
-    
-    Add a contact with  or without friction brick to the model.
-    If U is the vector
-    of degrees of freedom on which the unilateral constraint is applied,
-    the matrix `BN` have to be such that this constraint is defined by
-    :math:`B_N U \le 0`. A friction condition can be considered by adding the three
-    parameters `multname_t`, `BT` and `dataname_friction_coeff`. In this case,
-    the tangential displacement is :math:`B_T U` and the matrix `BT` should have as
-    many rows as `BN` multiplied by :math:`d-1` where :math:`d` is the domain dimension.
-    In this case also, `dataname_friction_coeff` is a data which represents the
-    coefficient of friction. It can be a scalar or a vector representing a
-    value on each contact condition.  The unilateral constraint is prescribed
-    thank to a multiplier
-    `multname_n` whose dimension should be equal to the number of rows of
-    `BN`. If a friction condition is added, it is prescribed with a
-    multiplier `multname_t` whose dimension should be equal to the number
-    of rows of `BT`. The augmentation parameter `r` should be chosen in
-    a range of
-    acceptabe values (see Getfem user documentation). `dataname_gap` is an
-    optional parameter representing the initial gap. It can be a single value
-    or a vector of value. `dataname_alpha` is an optional homogenization
-    parameter for the augmentation parameter
-    (see Getfem user documentation). The parameter `symmetrized` indicates
-    that the symmetry of the tangent matrix will be kept or not (except for
-    the part representing the coupling between contact and friction which
-    cannot be symmetrized). @*/
+     /*@SET ind = ('add basic contact brick', @str varname_u, @str multname_n[, @str multname_t], @str dataname_r, @tspmat BN[, @tspmat BT, @str dataname_friction_coeff][, @str dataname_gap[, @str dataname_alpha[, @int augmented_version]])
+       
+     Add a contact with  or without friction brick to the model.
+     If U is the vector
+     of degrees of freedom on which the unilateral constraint is applied,
+     the matrix `BN` have to be such that this constraint is defined by
+     :math:`B_N U \le 0`. A friction condition can be considered by adding
+     the three parameters `multname_t`, `BT` and `dataname_friction_coeff`.
+     In this case, the tangential displacement is :math:`B_T U` and
+     the matrix `BT` should have as many rows as `BN` multiplied by
+     :math:`d-1` where :math:`d` is the domain dimension.
+     In this case also, `dataname_friction_coeff` is a data which represents
+     the coefficient of friction. It can be a scalar or a vector representing a
+     value on each contact condition.  The unilateral constraint is prescribed
+     thank to a multiplier
+     `multname_n` whose dimension should be equal to the number of rows of
+     `BN`. If a friction condition is added, it is prescribed with a
+     multiplier `multname_t` whose dimension should be equal to the number
+     of rows of `BT`. The augmentation parameter `r` should be chosen in
+     a range of
+     acceptabe values (see Getfem user documentation). `dataname_gap` is an
+     optional parameter representing the initial gap. It can be a single value
+     or a vector of value. `dataname_alpha` is an optional homogenization
+     parameter for the augmentation parameter
+     (see Getfem user documentation).  The parameter `augmented_version`
+     indicates the augmentation strategy : 1 for the non-symmetric
+     Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+     the coupling between contact and Coulomb friction), 3 for the
+     unsymmetric method with augmented multipliers, 4 for the unsymmetric
+     method with augmented multipliers and De Saxce projection. @*/
      sub_command
        ("add basic contact brick", 4, 10, 0, 1,
-        
+
         bool friction = false;
-        
+
         std::string varname_u = in.pop().to_string();
         std::string multname_n = in.pop().to_string();
         std::string dataname_r = in.pop().to_string();
         std::string multname_t; std::string friction_coeff;
-        
+
         mexarg_in argin = in.pop();
         if (argin.is_string()) {
           friction = true;
@@ -1407,7 +1707,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
           dataname_r = argin.to_string();
           argin = in.pop();
         }
-        
+
         dal::shared_ptr<gsparse> BN = argin.to_sparse();
         if (BN->is_complex()) THROW_BADARG("Complex matrix not allowed");
         dal::shared_ptr<gsparse> BT;
@@ -1416,14 +1716,14 @@ void gf_model_set(getfemint::mexargs_in& m_in,
           if (BT->is_complex()) THROW_BADARG("Complex matrix not allowed");
           friction_coeff = in.pop().to_string();
         }
-        
+
         std::string dataname_gap;
         dataname_gap = in.pop().to_string();
         std::string dataname_alpha;
         if (in.remaining()) dataname_alpha = in.pop().to_string();
-        bool symmetrized = false;
-        if (in.remaining()) symmetrized = (in.pop().to_integer(0,1)) != 0;
-        
+        int augmented_version = 1;
+        if (in.remaining()) augmented_version = in.pop().to_integer(1,4);
+
         getfem::CONTACT_B_MATRIX BBN;
         getfem::CONTACT_B_MATRIX BBT;
         if (BN->storage()==gsparse::CSCMAT) {
@@ -1437,7 +1737,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
           gmm::copy(BN->real_wsc(), BBN);
         }
         else THROW_BADARG("Matrix BN should be a sparse matrix");
-        
+
         if (friction) {
           if (BT->storage()==gsparse::CSCMAT) {
             gmm::resize(BBT, gmm::mat_nrows(BT->real_csc()),
@@ -1451,18 +1751,18 @@ void gf_model_set(getfemint::mexargs_in& m_in,
           }
           else THROW_BADARG("Matrix BT should be a sparse matrix");
         }
-        
+
         size_type ind;
         if (friction) {
-          ind = getfem::add_basic_contact_with_friction_brick
+          ind = getfem::add_basic_contact_brick
             (md->model(), varname_u, multname_n, multname_t, dataname_r, BBN, BBT,
-             friction_coeff, dataname_gap, dataname_alpha, symmetrized);
+             friction_coeff, dataname_gap, dataname_alpha, augmented_version);
         } else {
           ind = getfem::add_basic_contact_brick
             (md->model(), varname_u, multname_n, dataname_r, BBN, dataname_gap,
-             dataname_alpha, symmetrized);
+             dataname_alpha, augmented_version);
         }
-        
+
         out.pop().from_integer(int(ind + config::base_index()));
         );
 
@@ -1471,12 +1771,12 @@ void gf_model_set(getfemint::mexargs_in& m_in,
     Can be used to set the BN matrix of a basic contact/friction brick. @*/
      sub_command
        ("contact brick set BN", 2, 2, 0, 0,
-        size_type ind = in.pop().to_integer();
+        size_type ind = in.pop().to_integer() - config::base_index();
         dal::shared_ptr<gsparse> B = in.pop().to_sparse();
-        
+
         if (B->is_complex())
           THROW_BADARG("BN should be a real matrix");
-        
+
         if (B->storage()==gsparse::CSCMAT)
           gmm::copy(B->real_csc(),
                     getfem::contact_brick_set_BN(md->model(), ind));
@@ -1493,12 +1793,12 @@ void gf_model_set(getfemint::mexargs_in& m_in,
       friction brick. @*/
      sub_command
        ("contact brick set BT", 2, 2, 0, 0,
-        size_type ind = in.pop().to_integer();
+        size_type ind = in.pop().to_integer() - config::base_index();
         dal::shared_ptr<gsparse> B = in.pop().to_sparse();
-        
+
         if (B->is_complex())
           THROW_BADARG("BT should be a real matrix");
-        
+
         if (B->storage()==gsparse::CSCMAT)
           gmm::copy(B->real_csc(), getfem::contact_brick_set_BT(md->model(), ind));
         else if (B->storage()==gsparse::WSCMAT)
@@ -1508,42 +1808,49 @@ void gf_model_set(getfemint::mexargs_in& m_in,
         );
 
 
-    /*@SET ind = ('add contact with rigid obstacle brick',  @tmim mim, @str varname_u, @str multname_n[, @str multname_t], @str dataname_r[, @str dataname_friction_coeff], @int region, @str obstacle[,  @int symmetrized])
-    
+    // CONTACT WITH RIGID OBSTACLE
+
+
+    /*@SET ind = ('add nodal contact with rigid obstacle brick',  @tmim mim, @str varname_u, @str multname_n[, @str multname_t], @str dataname_r[, @str dataname_friction_coeff], @int region, @str obstacle[,  @int augmented_version])
+
     Add a contact with or without friction condition with a rigid obstacle
     to the model. The condition is applied on the variable `varname_u`
     on the boundary corresponding to `region`. The rigid obstacle should
     be described with the string `obstacle` being a signed distance to
     the obstacle. This string should be an expression where the coordinates
     are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
-    obstacle correspond to :math:`z \le 0`, the corresponding signed distance will
-    be simply "z". `multname_n` should be a fixed size variable whose size is
-    the number of degrees of freedom on boundary `region`. It represent the
+    obstacle correspond to :math:`z \le 0`, the corresponding signed distance
+    will be simply "z". `multname_n` should be a fixed size variable whose size
+    is the number of degrees of freedom on boundary `region`. It represents the
     contact equivalent nodal forces. In order to add a friction condition
     one has to add the `multname_t` and `dataname_friction_coeff` parameters.
     `multname_t` should be a fixed size variable whose size is
-    the number of degrees of freedom on boundary `region` multiplied by :math:`d-1`
-    where :math:`d` is the domain dimension. It represent the friction equivalent
-    nodal forces.
+    the number of degrees of freedom on boundary `region` multiplied by
+    :math:`d-1` where :math:`d` is the domain dimension. It represents
+    the friction equivalent nodal forces.
     The augmentation parameter `r` should be chosen in a
     range of acceptabe values (close to the Young modulus of the elastic
     body, see Getfem user documentation).  `dataname_friction_coeff` is
     the friction coefficient. It could be a scalar or a vector of values
-    representing the friction coefficient on each contact node. The
-    parameter `symmetrized` indicates that the symmetry of the tangent
-    matrix will be kept or not. Basically, this brick compute the matrix BN
+    representing the friction coefficient on each contact node. 
+    The parameter `augmented_version`
+    indicates the augmentation strategy : 1 for the non-symmetric
+    Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+    the coupling between contact and Coulomb friction),
+    3 for the new unsymmetric method.
+    Basically, this brick compute the matrix BN
     and the vectors gap and alpha and calls the basic contact brick. @*/
      sub_command
-       ("add contact with rigid obstacle brick", 6, 9, 0, 1,
-        
+       ("add nodal contact with rigid obstacle brick", 6, 9, 0, 1,
+
         bool friction = false;
-        
+
         getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
         std::string varname_u = in.pop().to_string();
         std::string multname_n = in.pop().to_string();
         std::string dataname_r = in.pop().to_string();
         std::string multname_t;  std::string dataname_fr;
-        
+
         mexarg_in argin = in.pop();
         if (argin.is_string()) {
           friction = true;
@@ -1552,30 +1859,209 @@ void gf_model_set(getfemint::mexargs_in& m_in,
           dataname_fr = in.pop().to_string();
           argin = in.pop();
         }
-        
+
         size_type region = argin.to_integer();
         std::string obstacle = in.pop().to_string();
-        bool symmetrized = false;
-        if (in.remaining()) symmetrized = (in.pop().to_integer(0,1)) != 0;
-        
+        int augmented_version = 1;
+        if (in.remaining()) augmented_version = in.pop().to_integer(1,4);
+
         size_type ind;
-        
+
         if (friction)
-          ind = getfem::add_contact_with_friction_with_rigid_obstacle_brick
+          ind = getfem::add_nodal_contact_with_rigid_obstacle_brick
             (md->model(), gfi_mim->mesh_im(), varname_u, multname_n,
              multname_t, dataname_r, dataname_fr, region, obstacle,
-             symmetrized);
+             augmented_version);
         else
-          ind = getfem::add_contact_with_rigid_obstacle_brick
+          ind = getfem::add_nodal_contact_with_rigid_obstacle_brick
             (md->model(), gfi_mim->mesh_im(), varname_u, multname_n,
-             dataname_r, region, obstacle, symmetrized);
+             dataname_r, region, obstacle, augmented_version);
         workspace().set_dependance(md, gfi_mim);
         out.pop().from_integer(int(ind + config::base_index()));
         );
 
+    /*@SET ind = ('add contact with rigid obstacle brick',  @tmim mim, @str varname_u, @str multname_n[, @str multname_t], @str dataname_r[, @str dataname_friction_coeff], @int region, @str obstacle[,  @int augmented_version])
+    DEPRECATED FUNCTION. Use 'add nodal contact with rigid obstacle brick' instead.@*/
+     sub_command
+       ("add contact with rigid obstacle brick", 6, 9, 0, 1,
+        infomsg() << "WARNING : gf_mesh_fem_get('add contact with rigid obstacle "
+        << "brick', ...) is a deprecated command.\n          Use gf_mesh_fem_get("
+        << "'add nodal contact with rigid obstacle brick', ...) instead." << endl;
+        SUBC_TAB::iterator it = subc_tab.find("add nodal contact with rigid obstacle brick");
+        if (it != subc_tab.end())
+            it->second->run(in, out, md);
+        );
+
+    /*@SET ind = ('add integral contact with rigid obstacle brick',  @tmim mim, @str varname_u, @str multname, @str dataname_obstacle, @str dataname_r [, @str dataname_friction_coeff], @int region [, @int option [, @str dataname_alpha [, @str dataname_wt [, @str dataname_gamma [, @str dataname_vt]]]]])
+
+    Add a contact with or without friction condition with a rigid obstacle
+    to the model. This brick adds a contact which is defined
+    in an integral way. It is the direct approximation of an augmented
+    Lagrangian formulation (see Getfem user documentation) defined at the
+    continuous level. The advantage is a better scalability: the number of
+    Newton iterations should be more or less independent of the mesh size.
+    The contact condition is applied on the variable `varname_u`
+    on the boundary corresponding to `region`. The rigid obstacle should
+    be described with the data `dataname_obstacle` being a signed distance to
+    the obstacle (interpolated on a finite element method).
+    `multname` should be a fem variable representing the contact stress.
+    An inf-sup condition beetween `multname` and `varname_u` is required.
+    The augmentation parameter `dataname_r` should be chosen in a
+    range of acceptabe values.
+    The optional parameter `dataname_friction_coeff` is the friction
+    coefficient which could be constant or defined on a finite element method.
+    Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+    augmented Lagrangian method, 2 for the symmetric one, 3 for the
+    non-symmetric Alart-Curnier method with an additional augmentation
+    and 4 for a new unsymmetric method. The default value is 1.
+    In case of contact with friction, `dataname_alpha` and `dataname_wt`
+    are optional parameters to solve evolutionary friction problems.
+    `dataname_gamma` and `dataname_vt` represent optional data for adding
+    a parameter-dependent sliding velocity to the friction condition.
+    @*/
+     sub_command
+       ("add integral contact with rigid obstacle brick", 6, 12, 0, 1,
+
+        getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+        std::string varname_u = in.pop().to_string();
+        std::string multname = in.pop().to_string();
+        std::string dataname_obs = in.pop().to_string();
+        std::string dataname_r = in.pop().to_string();
+
+        size_type ind;
+        int option = 1;
+        mexarg_in argin = in.pop();
+        if (argin.is_integer()) { // without friction
+            size_type region = argin.to_integer();
+            if (in.remaining()) option = in.pop().to_integer();
+
+            ind = getfem::add_integral_contact_with_rigid_obstacle_brick
+                    (md->model(), gfi_mim->mesh_im(), varname_u, multname,
+                     dataname_obs, dataname_r, region, option);
+        } else { // with friction
+            std::string dataname_coeff = argin.to_string();
+            size_type region = in.pop().to_integer();
+            if (in.remaining()) option = in.pop().to_integer();
+            std::string dataname_alpha = "";
+            if (in.remaining()) dataname_alpha = in.pop().to_string();
+            std::string dataname_wt = "";
+            if (in.remaining()) dataname_wt = in.pop().to_string();
+            std::string dataname_gamma = "";
+            if (in.remaining()) dataname_gamma = in.pop().to_string();
+            std::string dataname_vt = "";
+            if (in.remaining()) dataname_vt = in.pop().to_string();
+
+            ind = getfem::add_integral_contact_with_rigid_obstacle_brick
+                    (md->model(), gfi_mim->mesh_im(), varname_u, multname,
+                     dataname_obs, dataname_r, dataname_coeff, region, option,
+                     dataname_alpha, dataname_wt, dataname_gamma, dataname_vt);
+        }
+        workspace().set_dependance(md, gfi_mim);
+        out.pop().from_integer(int(ind + config::base_index()));
+        );
+
+    /*@SET ind = ('add penalized contact with rigid obstacle brick',  @tmim mim, @str varname_u, @str dataname_obstacle, @str dataname_r [, @str dataname_coeff], @int region [, @int option, @str dataname_lambda, [, @str dataname_alpha [, @str dataname_wt]]])
+
+    Add a penalized contact with or without friction condition with a
+    rigid obstacle to the model.
+    The condition is applied on the variable `varname_u`
+    on the boundary corresponding to `region`. The rigid obstacle should
+    be described with the data `dataname_obstacle` being a signed distance to
+    the obstacle (interpolated on a finite element method).
+    The penalization parameter `dataname_r` should be chosen
+    large enough to prescribe approximate non-penetration and friction
+    conditions but not too large not to deteriorate too much the
+    conditionning of the tangent system.
+    `dataname_lambda` is an optional parameter used if option
+    is 2. In that case, the penalization term is shifted by lambda (this
+    allows the use of an Uzawa algorithm on the corresponding augmented
+    Lagrangian formulation)
+    @*/
+     sub_command
+       ("add penalized contact with rigid obstacle brick", 5, 10, 0, 1,
+
+        getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+        std::string varname_u = in.pop().to_string();
+        std::string dataname_obs = in.pop().to_string();
+        std::string dataname_r = in.pop().to_string();
+
+        size_type ind;
+        int option = 1;
+        mexarg_in argin = in.pop();
+        if (argin.is_integer()) { // without friction
+            size_type region = argin.to_integer();
+            if  (in.remaining()) option = in.pop().to_integer();
+            std::string dataname_n = "";
+            if (in.remaining()) dataname_n = in.pop().to_string();
+
+            ind = getfem::add_penalized_contact_with_rigid_obstacle_brick
+                    (md->model(), gfi_mim->mesh_im(), varname_u,
+                     dataname_obs, dataname_r, region, option, dataname_n);
+        } else { // with friction
+            std::string dataname_coeff = argin.to_string();
+            size_type region = in.pop().to_integer();
+            if (in.remaining()) option = in.pop().to_integer();
+            std::string dataname_lambda = "";
+            if (in.remaining()) dataname_lambda = in.pop().to_string();
+            std::string dataname_alpha = "";
+            if (in.remaining()) dataname_alpha = in.pop().to_string();
+            std::string dataname_wt = "";
+            if (in.remaining()) dataname_wt = in.pop().to_string();
+
+            ind = getfem::add_penalized_contact_with_rigid_obstacle_brick
+                    (md->model(), gfi_mim->mesh_im(), varname_u,
+                     dataname_obs, dataname_r, dataname_coeff, region, option,
+                     dataname_lambda, dataname_alpha, dataname_wt);
+        }
+
+        workspace().set_dependance(md, gfi_mim);
+        out.pop().from_integer(int(ind + config::base_index()));
+        );
+
+
+#ifdef EXPERIMENTAL_PURPOSE_ONLY
+     /*@SET ind = ('add Nitsche contact with rigid obstacle brick',  @tmim mim, @str varname_u, @str dataname_obstacle, @str dataname_r, @str dataname_friction_coeff, @str dataname_lambda, @str dataname_mu, @int region)
+
+      Add a contact with friction condition with a rigid obstacle
+      to the model with  Nitsche strategy (no multiplier) in an integral way.
+      This is an experimental brick, which works only for linear homogeneous
+      isotropic elasticity.
+      The condition is applied on the variable `varname_u`
+      on the boundary corresponding to `region`. The rigid obstacle should
+      be described with the data `dataname_obstacle` being a signed distance
+      to the obstacle (interpolated on a finite element method).
+      The Nitsche parameter `dataname_r` should be chosen in a
+      range of acceptable values. `dataname_friction_coeff` is the friction
+      coefficient which could be constant or defined on a finite element
+      method. `dataname_lambda` and `dataname_mu` are the Lame coefficients.
+    @*/
+     sub_command
+       ("add Nitsche contact with rigid obstacle brick", 8, 8, 0, 1,
+
+        getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+        std::string varname_u = in.pop().to_string();
+        std::string dataname_obs = in.pop().to_string();
+        std::string dataname_r = in.pop().to_string();
+        std::string dataname_coeff = in.pop().to_string();
+        std::string dataname_lambda = in.pop().to_string();
+        std::string dataname_mu = in.pop().to_string();
+        size_type region = in.pop().to_integer();
+
+        size_type ind=
+        getfem::add_Nitsche_contact_with_rigid_obstacle_brick
+        (md->model(), gfi_mim->mesh_im(), varname_u, dataname_obs, dataname_r,
+	 dataname_coeff, dataname_lambda, dataname_mu, region);
+        workspace().set_dependance(md, gfi_mim);
+        out.pop().from_integer(int(ind + config::base_index()));
+        );
+#endif
+
+
+    // CONTACT BETWEEN NON-MATCHING MESHES
+
+
+    /*@SET ind = ('add nodal contact between nonmatching meshes brick',  @tmim mim1[, @tmim mim2], @str varname_u1[, @str varname_u2], @str multname_n[, @str multname_t], @str dataname_r[, @str dataname_fr], @int rg1, @int rg2[, @int slave1, @int slave2,  @int augmented_version])
 
-    /*@SET ind = ('add nonmatching meshes contact brick',  @tmim mim1[, @tmim mim2], @str varname_u1[, @str varname_u2], @str multname_n[, @str multname_t], @str dataname_r[, @str dataname_fr], @int rg1, @int rg2[, @int slave1, @int slave2,  @int symmetrized])
-    
     Add a contact with or without friction condition between two faces of
     one or two elastic bodies. The condition is applied on the variable
     `varname_u1` or the variables `varname_u1` and `varname_u2` depending
@@ -1599,12 +2085,15 @@ void gf_model_set(getfemint::mexargs_in& m_in,
     and `rg2` are correspondingly considered as "slaves". By default
     `slave1` is true and `slave2` is false, i.e. `rg1` contains the slave
     surfaces, while 'rg2' the master surfaces. Preferrably only one of
-    `slave1` and `slave2` is set to true. The parameter `symmetrized`
-    indicates that the symmetry of the tangent matrix will be kept or not.
+    `slave1` and `slave2` is set to true.  The parameter `augmented_version`
+    indicates the augmentation strategy : 1 for the non-symmetric
+    Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+    the coupling between contact and Coulomb friction),
+    3 for the new unsymmetric method.
     Basically, this brick computes the matrices BN and BT and the vectors
     gap and alpha and calls the basic contact brick. @*/
      sub_command
-       ("add nonmatching meshes contact brick", 6, 13, 0, 1,
+       ("add nodal contact between nonmatching meshes brick", 6, 13, 0, 1,
 
         bool two_variables = true;
         bool friction = false;
@@ -1613,7 +2102,8 @@ void gf_model_set(getfemint::mexargs_in& m_in,
         getfemint_mesh_im *gfi_mim2;
         std::string varname_u1;
         std::string varname_u2;
-        bool slave1=true; bool slave2=false; bool symmetrized=false;
+        bool slave1=true; bool slave2=false;
+        int augmented_version = 1;
 
         gfi_mim1 = in.pop().to_getfemint_mesh_im();
         mexarg_in argin = in.pop();
@@ -1643,35 +2133,249 @@ void gf_model_set(getfemint::mexargs_in& m_in,
         std::vector<size_type> vrg2(1,in.pop().to_integer());
         if (in.remaining()) slave1 = (in.pop().to_integer(0,1)) != 0;
         if (in.remaining()) slave2 = (in.pop().to_integer(0,1)) != 0;
-        if (in.remaining()) symmetrized = (in.pop().to_integer(0,1)) != 0;
+        if (in.remaining()) augmented_version = in.pop().to_integer(1,4);
 
         size_type ind;
         if (!friction)
-          ind = getfem::add_nonmatching_meshes_contact_brick
+          ind = getfem::add_nodal_contact_between_nonmatching_meshes_brick
             (md->model(), gfi_mim1->mesh_im(), gfi_mim2->mesh_im(),
              varname_u1, varname_u2, multname_n, dataname_r,
-             vrg1, vrg2, slave1, slave2, symmetrized);
+             vrg1, vrg2, slave1, slave2, augmented_version);
         else
-          ind = getfem::add_nonmatching_meshes_contact_with_friction_brick
+          ind = getfem::add_nodal_contact_between_nonmatching_meshes_brick
             (md->model(), gfi_mim1->mesh_im(), gfi_mim2->mesh_im(),
              varname_u1, varname_u2, multname_n, multname_t,
              dataname_r, dataname_fr,
-             vrg1, vrg2, slave1, slave2, symmetrized);
+             vrg1, vrg2, slave1, slave2, augmented_version);
         workspace().set_dependance(md, gfi_mim1);
         if (two_variables)
           workspace().set_dependance(md, gfi_mim2);
         out.pop().from_integer(int(ind + config::base_index()));
         );
 
+    /*@SET ind = ('add nonmatching meshes contact brick',  @tmim mim1[, @tmim mim2], @str varname_u1[, @str varname_u2], @str multname_n[, @str multname_t], @str dataname_r[, @str dataname_fr], @int rg1, @int rg2[, @int slave1, @int slave2,  @int augmented_version])
+    DEPRECATED FUNCTION. Use 'add nodal contact between nonmatching meshes brick' instead.@*/
+     sub_command
+       ("add nonmatching meshes contact brick", 6, 13, 0, 1,
+        infomsg() << "WARNING : gf_mesh_fem_get('add nonmatching meshes "
+        << "contact brick', ...) is a deprecated command.\n          Use "
+        << "gf_mesh_fem_get('add nodal contact between nonmatching meshes "
+        << "brick', ...) instead." << endl;
+        SUBC_TAB::iterator it = subc_tab.find("add nodal contact between nonmatching meshes brick");
+        if (it != subc_tab.end())
+            it->second->run(in, out, md);
+        );
+
+    /*@SET ind = ('add integral contact between nonmatching meshes brick',  @tmim mim, @str varname_u1, @str varname_u2, @str multname, @str dataname_r [, @str dataname_friction_coeff], @int region1, @int region2 [, @int option [, @str dataname_alpha [, @str dataname_wt1 , @str dataname_wt2]]])
+
+    Add a contact with or without friction condition between nonmatching
+    meshes to the model. This brick adds a contact which is defined
+    in an integral way. It is the direct approximation of an augmented
+    agrangian formulation (see Getfem user documentation) defined at the
+    continuous level. The advantage should be a better scalability:
+    the number of Newton iterations should be more or less independent
+    of the mesh size.
+    The condition is applied on the variables `varname_u1` and `varname_u2`
+    on the boundaries corresponding to `region1` and `region2`.
+    `multname` should be a fem variable representing the contact stress
+    for the frictionless case and the contact and friction stress for the
+    case with friction. An inf-sup condition between `multname` and
+    `varname_u1` and `varname_u2` is required.
+    The augmentation parameter `dataname_r` should be chosen in a
+    range of acceptable values.
+    The optional parameter `dataname_friction_coeff` is the friction
+    coefficient which could be constant or defined on a finite element
+    method on the same mesh as `varname_u1`.
+    Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+    augmented Lagrangian method, 2 for the symmetric one, 3 for the
+    non-symmetric Alart-Curnier method with an additional augmentation
+    and 4 for a new unsymmetric method. The default value is 1.
+    In case of contact with friction, `dataname_alpha`, `dataname_wt1` and
+    `dataname_wt2` are optional parameters to solve evolutionary friction
+    problems.
+    @*/
+     sub_command
+       ("add integral contact between nonmatching meshes brick", 7, 12, 0, 1,
+
+        getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+        std::string varname_u1 = in.pop().to_string();
+        std::string varname_u2 = in.pop().to_string();
+        std::string multname = in.pop().to_string();
+        std::string dataname_r = in.pop().to_string();
+
+        size_type ind;
+        int option = 1;
+        mexarg_in argin = in.pop();
+        if (argin.is_integer()) { // without friction
+            size_type region1 = argin.to_integer();
+            size_type region2 = in.pop().to_integer();
+            if (in.remaining()) option = in.pop().to_integer();
+
+            ind = getfem::add_integral_contact_between_nonmatching_meshes_brick
+                    (md->model(), gfi_mim->mesh_im(), varname_u1, varname_u2,
+                     multname, dataname_r, region1, region2, option);
+        } else { // with friction
+            std::string dataname_coeff = argin.to_string();
+            size_type region1 = in.pop().to_integer();
+            size_type region2 = in.pop().to_integer();
+            if (in.remaining()) option = in.pop().to_integer();
+            std::string dataname_alpha = "";
+            if (in.remaining()) dataname_alpha = in.pop().to_string();
+            std::string dataname_wt1 = "";
+            if (in.remaining()) dataname_wt1 = in.pop().to_string();
+            std::string dataname_wt2 = "";
+            if (in.remaining()) dataname_wt2 = in.pop().to_string();
+
+            ind = getfem::add_integral_contact_between_nonmatching_meshes_brick
+                    (md->model(), gfi_mim->mesh_im(), varname_u1, varname_u2,
+                     multname, dataname_r, dataname_coeff, region1, region2,
+                     option, dataname_alpha, dataname_wt1, dataname_wt2);
+        }
+        workspace().set_dependance(md, gfi_mim);
+        out.pop().from_integer(int(ind + config::base_index()));
+        );
+
+    /*@SET ind = ('add penalized contact between nonmatching meshes brick',  @tmim mim, @str varname_u1, @str varname_u2, @str dataname_r [, @str dataname_coeff], @int region1, @int region2 [, @int option [, @str dataname_lambda, [, @str dataname_alpha [, @str dataname_wt1, @str dataname_wt2]]]])
+
+    Add a penalized contact condition with or without friction between
+    nonmatching meshes to the model.
+    The condition is applied on the variables `varname_u1` and  `varname_u2`
+    on the boundaries corresponding to `region1` and `region2`.
+    The penalization parameter `dataname_r` should be chosen
+    large enough to prescribe approximate non-penetration and friction
+    conditions but not too large not to deteriorate too much the
+    conditionning of the tangent system.
+    The optional parameter `dataname_friction_coeff` is the friction
+    coefficient which could be constant or defined on a finite element
+    method on the same mesh as `varname_u1`.
+    `dataname_lambda` is an optional parameter used if option
+    is 2. In that case, the penalization term is shifted by lambda (this
+    allows the use of an Uzawa algorithm on the corresponding augmented
+    Lagrangian formulation)
+    In case of contact with friction, `dataname_alpha`, `dataname_wt1` and
+    `dataname_wt2` are optional parameters to solve evolutionary friction
+    problems.
+    @*/
+     sub_command
+       ("add penalized contact between nonmatching meshes brick", 6, 12, 0, 1,
+
+        getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+        std::string varname_u1 = in.pop().to_string();
+        std::string varname_u2 = in.pop().to_string();
+        std::string dataname_r = in.pop().to_string();
+
+        size_type ind;
+        int option = 1;
+        mexarg_in argin = in.pop();
+        if (argin.is_integer()) { // without friction
+            size_type region1 = argin.to_integer();
+            size_type region2 = in.pop().to_integer();
+            if  (in.remaining()) option = in.pop().to_integer();
+            std::string dataname_n = "";
+            if (in.remaining()) dataname_n = in.pop().to_string();
+
+            ind = getfem::add_penalized_contact_between_nonmatching_meshes_brick
+                    (md->model(), gfi_mim->mesh_im(), varname_u1, varname_u2,
+                     dataname_r, region1, region2, option, dataname_n);
+        } else { // with friction
+            std::string dataname_coeff = argin.to_string();
+            size_type region1 = in.pop().to_integer();
+            size_type region2 = in.pop().to_integer();
+            if (in.remaining()) option = in.pop().to_integer();
+            std::string dataname_lambda = "";
+            if (in.remaining()) dataname_lambda = in.pop().to_string();
+            std::string dataname_alpha = "";
+            if (in.remaining()) dataname_alpha = in.pop().to_string();
+            std::string dataname_wt1 = "";
+            if (in.remaining()) dataname_wt1 = in.pop().to_string();
+            std::string dataname_wt2 = "";
+            if (in.remaining()) dataname_wt2 = in.pop().to_string();
+
+            ind = getfem::add_penalized_contact_between_nonmatching_meshes_brick
+                    (md->model(), gfi_mim->mesh_im(), varname_u1, varname_u2,
+                     dataname_r, dataname_coeff, region1, region2, option,
+                     dataname_lambda, dataname_alpha, dataname_wt1, dataname_wt2);
+        }
+
+        workspace().set_dependance(md, gfi_mim);
+        out.pop().from_integer(int(ind + config::base_index()));
+        );
+
+
+     /*@SET ind = ('add integral large sliding contact brick',  @tmim mim, @str varname_u, @str multname, @str dataname_r, @str dataname_fr, @int rg)
+       (still experimental brick)
+       Add a large sliding contact with friction brick to the model.
+       This brick is able to deal with auto-contact, contact between
+       several deformable bodies and contact with rigid obstacles.
+       The condition is applied on the variable `varname_u` on the
+       boundary corresponding to `region`. `dataname_r` is the augmentation
+       parameter of the augmented Lagrangian. `dataname_friction_coeff`
+       is the friction coefficient. `mim` is an integration method on the
+       boundary. `varname_u` is the variable on which the contact condition 
+       will be prescribed (should be of displacement type). `multname` is 
+       a multiplier defined on the boundary which will represent the contact
+       force. If no additional boundary or rigid
+       obstacle is added, only auto-contact will be detected. Use
+       `add_boundary_to_large_sliding_contact_brick` and
+       `add_rigid_obstacle_to_large_sliding_contact_brick` to add contact
+       boundaries and rigid obstacles. @*/
+     sub_command
+       ("add integral large sliding contact brick", 6, 6, 0, 1,
+
+        getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+        std::string varname_u = in.pop().to_string();
+        std::string multname = in.pop().to_string();
+        std::string dataname_r = in.pop().to_string();
+        std::string dataname_fr = in.pop().to_string();
+        size_type region = in.pop().to_integer();
+        
+        size_type  ind = getfem::add_integral_large_sliding_contact_brick
+            (md->model(), gfi_mim->mesh_im(), varname_u, multname, dataname_r,
+             dataname_fr, region);
+        out.pop().from_integer(int(ind + config::base_index()));
+        );
+
+     /*@SET ind = ('add boundary to large sliding contact brick',  @int indbrick, @tmim mim, @str varname_u, @str multname, @int rg)
+       Add a contact boundary to an existing large sliding contact brick.
+      `indbrick` is the brick index. @*/
+     sub_command
+       ("add boundary to large sliding contact brick", 5, 5, 0, 0,
+
+        size_type indbrick = in.pop().to_integer() - config::base_index();
+        getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+	std::string varname_u = in.pop().to_string();
+        std::string multname = in.pop().to_string();
+        size_type region = in.pop().to_integer();
+        
+	getfem::add_boundary_to_large_sliding_contact_brick
+	(md->model(), indbrick, gfi_mim->mesh_im(), varname_u,multname,region);
+        );
+
+
+     /*@SET ind = ('add rigid obstacle to large sliding contact brick',  @int indbrick, @str obs)
+       Add a rigid obstacle to an existing large sliding contact brick.
+      `indbrick` is the brick index, `obs` is the expression of a
+      function which should be closed to a signed distance to the obstacle. @*/
+     sub_command
+       ("add rigid obstacle to large sliding contact brick", 2, 2, 0, 0,
+	
+        size_type indbrick = in.pop().to_integer() - config::base_index();
+	std::string obs = in.pop().to_string();
+        
+	getfem::add_rigid_obstacle_to_large_sliding_contact_brick
+	(md->model(), indbrick, obs);
+        );
+
+
   }
- 
+
   if (m_in.narg() < 2)  THROW_BADARG( "Wrong number of input arguments");
 
   getfemint_model *md  = m_in.pop().to_getfemint_model(true);
   std::string init_cmd   = m_in.pop().to_string();
   std::string cmd        = cmd_normalize(init_cmd);
 
-  
+
   SUBC_TAB::iterator it = subc_tab.find(cmd);
   if (it != subc_tab.end()) {
     check_cmd(cmd, it->first.c_str(), m_in, m_out, it->second->arg_in_min,
diff --git a/interface/src/gf_precond.cc b/interface/src/gf_precond.cc
index 6004f20..e57769e 100644
--- a/interface/src/gf_precond.cc
+++ b/interface/src/gf_precond.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_workspace.h>
 #include <getfemint_precond.h>
diff --git a/interface/src/gf_precond_get.cc b/interface/src/gf_precond_get.cc
index 10c0c89..4ef7bbe 100644
--- a/interface/src/gf_precond_get.cc
+++ b/interface/src/gf_precond_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_precond.h>
 
diff --git a/interface/src/gf_slice.cc b/interface/src/gf_slice.cc
index d16fe28..20a8858 100644
--- a/interface/src/gf_slice.cc
+++ b/interface/src/gf_slice.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_slice.cc 3513 2010-03-24 06:05:09Z lsaavedr $
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: gf_slice.cc 4114 2012-07-06 11:20:10Z renard $
 #include <getfemint_misc.h>
 #include <getfemint_workspace.h>
 #include <getfemint_mesh.h>
@@ -99,7 +99,7 @@ namespace getfem {
       scalar_type best_f = 1e10;
       size_type cnt = 0;
       for (short_type i=0; i < ml.structure_of_convex(cv)->nb_faces(); ++i) {
-        scalar_type v = ml.trans_of_convex(cv)->convex_ref()->is_in_face(i,refP);
+        scalar_type v = gmm::abs(ml.trans_of_convex(cv)->convex_ref()->is_in_face(i,refP));
         cnt++;
         if (v < best_f || cnt == 0) { best_f = v; f = dim_type(i); }
       }
@@ -345,7 +345,7 @@ build_slicers(const getfem::mesh& m, dal::ptr_collection<getfem::slicer_action>
 
   * @CELL{'isovalues', @int orient, @tmf mf, @vec U, @scalar s} :
     Cut using the isosurface of the field `U` (defined on the @tmf `mf`).
-    The result is the set `{x such that `U`(x) <= `s`}` or `{x such that
+    The result is the set `{x such that :math:`U(x) \leq s`}` or `{x such that
     `U`(x)=`s`}` or `{x such that `U`(x) >= `s`}` depending on the value of
     `orient`.
 
@@ -355,8 +355,8 @@ build_slicers(const getfem::mesh& m, dal::ptr_collection<getfem::slicer_action>
     considered (i.e. it is equivalent to @CELL{'boundary',{'none'}}).
 
   * @CELL{'explode', @mat Coef} :
-    Build an 'exploded' view of the mesh: each convex is shrinked (0 <
-    `Coef` <= 1). In the case of 3D convexes, only their faces are kept.
+    Build an 'exploded' view of the mesh: each convex is shrinked (:math:`0 <
+    \text{Coef} \leq 1`). In the case of 3D convexes, only their faces are kept.
 
   * @CELL{'union', SLICEOP1, SLICEOP2} :
     Returns the union of slicing operations.
diff --git a/interface/src/gf_slice_get.cc b/interface/src/gf_slice_get.cc
index 8ef1b04..cf44e22 100644
--- a/interface/src/gf_slice_get.cc
+++ b/interface/src/gf_slice_get.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_slice_get.cc 3468 2010-02-24 20:12:15Z renard $
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: gf_slice_get.cc 4114 2012-07-06 11:20:10Z renard $
 #include <map>
 #include <getfemint_misc.h>
 #include <getfemint_mesh.h>
diff --git a/interface/src/gf_slice_set.cc b/interface/src/gf_slice_set.cc
index 79a03c4..bf2c600 100644
--- a/interface/src/gf_slice_set.cc
+++ b/interface/src/gf_slice_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <map>
 #include <getfemint_misc.h>
diff --git a/interface/src/gf_spmat.cc b/interface/src/gf_spmat.cc
index 5a16939..2cd2c98 100644
--- a/interface/src/gf_spmat.cc
+++ b/interface/src/gf_spmat.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_gsparse.h>
 #include <getfemint_gsparse_misc.h>
diff --git a/interface/src/gf_spmat_get.cc b/interface/src/gf_spmat_get.cc
index 76e9be7..4054735 100644
--- a/interface/src/gf_spmat_get.cc
+++ b/interface/src/gf_spmat_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_gsparse.h>
 #include <getfemint_workspace.h>
diff --git a/interface/src/gf_spmat_set.cc b/interface/src/gf_spmat_set.cc
index d9aca88..c5bd496 100644
--- a/interface/src/gf_spmat_set.cc
+++ b/interface/src/gf_spmat_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint_gsparse.h>
 #include <getfemint_gsparse_misc.h>
diff --git a/interface/src/gf_undelete.cc b/interface/src/gf_undelete.cc
index fe46586..05b1447 100644
--- a/interface/src/gf_undelete.cc
+++ b/interface/src/gf_undelete.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Luis Saavedra.
-//
-// This file is a part of GetFEM++
-//
-// GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_undelete.cc 3468 2010-02-24 20:12:15Z renard $
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Luis Saavedra.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+// $Id: gf_undelete.cc 4114 2012-07-06 11:20:10Z renard $
 #include <getfemint.h>
 #include <getfemint_workspace.h>
 
diff --git a/interface/src/gf_util.cc b/interface/src/gf_util.cc
index 0b8e979..5ac11e1 100644
--- a/interface/src/gf_util.cc
+++ b/interface/src/gf_util.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint.h>
 #include <getfemint_misc.h>
@@ -105,33 +105,41 @@ void gf_util(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
        );
 
 
-    /*@FUNC ('trace level', @int level)
+    /*@FUNC tl = ('trace level' [, @int level])
       Set the verbosity of some getfem++ routines.
 
       Typically the messages printed by the model bricks, 0 means no
-      trace message (default is 3).@*/
+      trace message (default is 3). if no level is given,
+      the current trace level is returned. @*/
     sub_command
-      ("trace level", 1, 1, 0, 0,
-       gmm::set_traces_level(in.pop().to_integer(0, 100));
+      ("trace level", 0, 1, 0, 1,
+       if (in.remaining())
+	 gmm::set_traces_level(in.pop().to_integer(0, 100));
+       else
+	 out.pop().from_integer(int(gmm::traces_level::level()));
        );
 
 
-    /*@FUNC ('warning level', @int level)
+    /*@FUNC tl = ('warning level', @int level)
       Filter the less important warnings displayed by getfem.
 
-      0 means no warnings, default level is 3.@*/
+      0 means no warnings, default level is 3. if no level is given,
+      the current warning level is returned. @*/
     sub_command
-      ("warning level", 1, 1, 0, 0,
-       gmm::set_warning_level(in.pop().to_integer(0, 100));
+      ("warning level", 0, 1, 0, 1,
+       if (in.remaining())
+	 gmm::set_warning_level(in.pop().to_integer(0, 100));
+       else
+	 out.pop().from_integer(int(gmm::warning_level::level()));
        );
 
   }
 
 
-  if (m_in.narg() < 1)  THROW_BADARG( "Wrong number of input arguments");
+  if (m_in.narg() < 1)  THROW_BADARG("Wrong number of input arguments");
 
-  std::string init_cmd   = m_in.pop().to_string();
-  std::string cmd        = cmd_normalize(init_cmd);
+  std::string init_cmd  = m_in.pop().to_string();
+  std::string cmd       = cmd_normalize(init_cmd);
 
   
   SUBC_TAB::iterator it = subc_tab.find(cmd);
diff --git a/interface/src/gf_workspace.cc b/interface/src/gf_workspace.cc
index b9009f2..22f2af1 100644
--- a/interface/src/gf_workspace.cc
+++ b/interface/src/gf_workspace.cc
@@ -1,28 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfemint.h>
 #include <getfemint_workspace.h>
 #include <algorithm>
+#ifndef _MSC_VER
 #include <unistd.h>
+#endif
 #include <iomanip>
 #include <getfem/getfem_mat_elem.h>
 #include <getfemint_mdbrick.h>
@@ -223,10 +225,12 @@ void gf_workspace(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
 
 
     /* Unofficial function */
+#ifndef _MSC_VER
     sub_command
       ("chdir", 1, 1, 0, 0,
        if (::chdir(in.pop().to_string().c_str())) {}
        );
+#endif
 
     /*@FUNC ('class name', i)
       Return the class name of object i (if I is a mesh handle, it 
diff --git a/interface/src/gfi_array.c b/interface/src/gfi_array.c
old mode 100755
new mode 100644
index 76b0358..5d68908
--- a/interface/src/gfi_array.c
+++ b/interface/src/gfi_array.c
@@ -1,25 +1,23 @@
-/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2009 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
  This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301,
- USA.
-
- ========================================================================*/
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <assert.h>
 #include <stdlib.h>
diff --git a/interface/src/gfi_array.h b/interface/src/gfi_array.h
index 4b7626c..b22578d 100644
--- a/interface/src/gfi_array.h
+++ b/interface/src/gfi_array.h
@@ -1,22 +1,23 @@
 /* -*- c++ -*- (enables emacs c++ mode) */
 /*===========================================================================
-
- Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
  This file is a part of GETFEM++
-
+ 
  Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
  under  the  terms  of the  GNU  Lesser General Public License as published
- by  the  Free Software Foundation;  either version 2.1 of the License,  or
- (at your option) any later version.
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
- License for more details.
+ License and GCC Runtime Library Exception for more details.
  You  should  have received a copy of the GNU Lesser General Public License
  along  with  this program;  if not, write to the Free Software Foundation,
  Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-
+ 
  As a special exception, you  may use  this file  as it is a part of a free
  software  library  without  restriction.  Specifically,  if   other  files
  instantiate  templates  or  use macros or inline functions from this file,
@@ -25,8 +26,8 @@
  to be covered  by the GNU Lesser General Public License.  This   exception
  does not  however  invalidate  any  other  reasons why the executable file
  might be covered by the GNU Lesser General Public License.
-
- ===========================================================================*/
+ 
+===========================================================================*/
 
 #ifndef GFI_ARRAY
 #define GFI_ARRAY
@@ -41,10 +42,11 @@
 #endif
 
 /* This is very important that the following classes respects the
-   alphabetic order. The order have to be the same than in getfem.py !!!
+   alphabetic order. The order has to be the same as in getfem.py !!!
    Do not forget to modify also 'name_of_getfemint_class_id' in getfemint.cc
 */
-typedef enum { CVSTRUCT_CLASS_ID,
+typedef enum { CONT_STRUCT_CLASS_ID,
+	       CVSTRUCT_CLASS_ID,
 	       ELTM_CLASS_ID,
 	       FEM_CLASS_ID,
 	       GEOTRANS_CLASS_ID,
@@ -57,6 +59,7 @@ typedef enum { CVSTRUCT_CLASS_ID,
 	       MESHFEM_CLASS_ID,
                MESHIM_CLASS_ID,
                MESH_LEVELSET_CLASS_ID,
+               MESHER_OBJECT_CLASS_ID,
                MODEL_CLASS_ID,
                PRECOND_CLASS_ID,
 	       SLICE_CLASS_ID,
diff --git a/interface/src/gfi_rpc.h b/interface/src/gfi_rpc.h
index b51e10e..86bc761 100644
--- a/interface/src/gfi_rpc.h
+++ b/interface/src/gfi_rpc.h
@@ -1,32 +1,33 @@
-/* -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 */
 
 #ifndef GFI_RPC_H
diff --git a/interface/src/gfi_rpc_clnt.c b/interface/src/gfi_rpc_clnt.c
old mode 100755
new mode 100644
index bd63b61..b14dfe9
--- a/interface/src/gfi_rpc_clnt.c
+++ b/interface/src/gfi_rpc_clnt.c
@@ -1,25 +1,23 @@
-/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2009 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
  This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301,
- USA.
-
- ========================================================================*/
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /*
  * Please do not edit this file.
diff --git a/interface/src/gfi_rpc_server.c b/interface/src/gfi_rpc_server.c
old mode 100755
new mode 100644
index cbb7b0e..36af03b
--- a/interface/src/gfi_rpc_server.c
+++ b/interface/src/gfi_rpc_server.c
@@ -1,25 +1,23 @@
-/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2009 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
  This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301,
- USA.
-
- ========================================================================*/
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /*
  * This is sample code generated by rpcgen.
diff --git a/interface/src/gfi_rpc_svc.c b/interface/src/gfi_rpc_svc.c
old mode 100755
new mode 100644
index 7c16d9c..a744c5f
--- a/interface/src/gfi_rpc_svc.c
+++ b/interface/src/gfi_rpc_svc.c
@@ -1,25 +1,23 @@
-/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2009 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
  This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301,
- USA.
-
- ========================================================================*/
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /*
  * Please do not edit this file.
diff --git a/interface/src/gfi_rpc_xdr.c b/interface/src/gfi_rpc_xdr.c
old mode 100755
new mode 100644
index e95b198..5f017bf
--- a/interface/src/gfi_rpc_xdr.c
+++ b/interface/src/gfi_rpc_xdr.c
@@ -1,25 +1,23 @@
-/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2009 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
  This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301,
- USA.
-
- ========================================================================*/
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /*
  * Please do not edit this file.
diff --git a/interface/src/matlab/Makefile.am b/interface/src/matlab/Makefile.am
index 67032a8..54e3eb9 100644
--- a/interface/src/matlab/Makefile.am
+++ b/interface/src/matlab/Makefile.am
@@ -87,9 +87,10 @@ clean-local: clean-m-files
 toolboxdir=@TOOLBOXDIR@
 
 install:
-	$(mkinstalldirs) $(toolboxdir)/
+	$(mkinstalldirs) $(toolboxdir)/private
 	@INSTALL@ -m 644 -t $(toolboxdir)/ *.m
 	@INSTALL@ -m 644 -t $(toolboxdir)/ $(srcdir)/*.m
+	@INSTALL@ -m 644 -t $(toolboxdir)/private/ $(srcdir)/private/*.m
 	@list='$(MATLAB_OBJ_DIRS)'; for p in $$list; do \
 	  $(mkinstalldirs) $(toolboxdir)/$$p; \
 	  @INSTALL@ -m 644 -t $(toolboxdir)/$$p $$p/*.m; \
@@ -97,4 +98,4 @@ install:
 	@INSTALL@ -m 744 -t $(toolboxdir)/ gf_matlab at MATLAB_COM_EXT@
 
 uninstall:
-	rm -fr $(toolboxdir)
\ No newline at end of file
+	rm -fr $(toolboxdir)
diff --git a/interface/src/matlab/Makefile.in b/interface/src/matlab/Makefile.in
index 6179599..0ea8794 100644
--- a/interface/src/matlab/Makefile.in
+++ b/interface/src/matlab/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -116,6 +116,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -134,6 +135,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -150,6 +152,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -214,6 +217,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -249,7 +253,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -537,10 +540,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -679,9 +687,10 @@ clean-local: clean-m-files
 	rm -f gf_matlab at MATLAB_COM_EXT@
 
 install:
-	$(mkinstalldirs) $(toolboxdir)/
+	$(mkinstalldirs) $(toolboxdir)/private
 	@INSTALL@ -m 644 -t $(toolboxdir)/ *.m
 	@INSTALL@ -m 644 -t $(toolboxdir)/ $(srcdir)/*.m
+	@INSTALL@ -m 644 -t $(toolboxdir)/private/ $(srcdir)/private/*.m
 	@list='$(MATLAB_OBJ_DIRS)'; for p in $$list; do \
 	  $(mkinstalldirs) $(toolboxdir)/$$p; \
 	  @INSTALL@ -m 644 -t $(toolboxdir)/$$p $$p/*.m; \
diff --git a/interface/src/matlab/gf_plot.m b/interface/src/matlab/gf_plot.m
index 62562ef..7759c50 100644
--- a/interface/src/matlab/gf_plot.m
+++ b/interface/src/matlab/gf_plot.m
@@ -27,7 +27,10 @@ function [hsurf, hcontour, hquiver, hmesh, hdefmesh]=gf_plot(mf,U,varargin)
 %  'cvlst',[]		      : list of convexes to plot (empty=>all convexes)
 %  'title',[]                 : set the title
 %  'contour',[]               : list of contour values
-%%%%%%%%%%%%
+%  'disp_options', {'off'|'on'} : shows the option or not.
+%
+%
+
   try 
     gf_workspace('push');
     [hsurf, hcontour, hquiver, hmesh, hdefmesh]=gf_plot_aux(mf,U,varargin{:});
diff --git a/interface/src/matlab/gf_plot_1D.m b/interface/src/matlab/gf_plot_1D.m
index 8b45e0c..5dac517 100644
--- a/interface/src/matlab/gf_plot_1D.m
+++ b/interface/src/matlab/gf_plot_1D.m
@@ -55,7 +55,7 @@ function [hline, hdof] = gf_plot_1D_aux(mf, U, varargin)
   m=gf_mesh_fem_get(mf, 'linked_mesh');
   sl=gf_slice({'none'},m, REFINE); 
   Usl = gf_compute(mf,U,'interpolate on', sl);
-  D = unique(gf_mesh_fem_get(mf, 'dof nodes'));
+  D = unique(gf_mesh_fem_get(mf, 'basic dof nodes'));
   slD = gf_slice('points', m, D);
   UD  = gf_compute(mf,U,'interpolate on',slD);
   
@@ -82,4 +82,4 @@ function [hline, hdof] = gf_plot_1D_aux(mf, U, varargin)
   % restore graphical context
   set(cax,'NextPlot',ax_nextplot);
   set(cfig,'NextPlot',fig_nextplot);
-  
\ No newline at end of file
+  
diff --git a/interface/src/matlab/gf_solve.m b/interface/src/matlab/gf_solve.m
index f6d5102..aca6ca1 100644
--- a/interface/src/matlab/gf_solve.m
+++ b/interface/src/matlab/gf_solve.m
@@ -301,13 +301,13 @@ function [U,P]=do_solve_stokes_cg(K,B,Fu,Fp)
 function [U,P]=do_solve_stokes_cg3(K,B,Fu,Fp)
   nu = size(K,2); np = size(B,2);
 
-  disp('solve stokes usawa cholinc');
+  disp('solve stokes uzawa cholinc');
   [pcB]=cholinc(K,'0');
   pcBt = pcB';
-  disp('solve stokes usawa first pcg');
+  disp('solve stokes uzawa first pcg');
   P = zeros(np,1);
   U = pcg(K,Fu - B*P,1e-6,100,pcBt,pcB);
-  disp('solve stokes usawa : got U');
+  disp('solve stokes uzawa : got U');
   for k=1:10000,
     r = Fp - B'*U;
     res = norm(r);
diff --git a/interface/src/matlab/gfm_common.c b/interface/src/matlab/gfm_common.c
index 22dcfca..47b0458 100644
--- a/interface/src/matlab/gfm_common.c
+++ b/interface/src/matlab/gfm_common.c
@@ -1,25 +1,23 @@
 /* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2010 Julien Pommier.
-
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Julien Pommier.
+ 
  This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301,
- USA.
-
- ========================================================================*/
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
+ License for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <assert.h>
 #include <signal.h>
@@ -236,7 +234,6 @@ gfi_array_to_mxarray(gfi_array *t) {
   static const int one = 1;
   const int *dim = (t->dim.dim_len == 0 ? &one : (const int *)t->dim.dim_val);
   mwSize ndim2, *dim2;
-  char msg[80];
   int number = 450;
   int ij;
   /****************** dimensions array in mwSize */  
@@ -265,7 +262,7 @@ gfi_array_to_mxarray(gfi_array *t) {
     } break;
     case GFI_DOUBLE: {
       int i;
-      double *pr, *pi;
+      double *pr = 0, *pi = 0;
       if (!gfi_array_is_complex(t)) {
         m = mxCreateNumericArray(ndim2, dim2, mxDOUBLE_CLASS, mxREAL);
         pr=mxGetData(m);  
@@ -274,7 +271,6 @@ gfi_array_to_mxarray(gfi_array *t) {
             *pr++=t->storage.gfi_storage_u.data_double.data_double_val[i++];
          }      
       } else {
-        double *pr, *pi; int i;
         m = mxCreateNumericArray(ndim2, dim2, mxDOUBLE_CLASS, mxCOMPLEX);
         pr = mxGetData(m); pi = mxGetImagData(m);
         for (i=0; i < t->storage.gfi_storage_u.data_double.data_double_len; ) {
@@ -370,7 +366,6 @@ gfi_array_list *
 build_gfi_array_list(int nrhs, const mxArray *prhs[]) {
   gfi_array_list *l;
   int i;
-  char msg[80];
   gfi_array **pin;
   
   
diff --git a/interface/src/matlab/gfm_common.h b/interface/src/matlab/gfm_common.h
index 1296a1a..1651de3 100644
--- a/interface/src/matlab/gfm_common.h
+++ b/interface/src/matlab/gfm_common.h
@@ -1,34 +1,32 @@
 /* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
  This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301,
- USA.
-
- As a special exception, you may use this file as part of a free software
- library without restriction.  Specifically, if other files instantiate
- templates or use macros or inline functions from this file, or you compile
- this file and link it with other files to produce an executable, this
- file does not by itself cause the resulting executable to be covered by
- the GNU General Public License.  This exception does not however
- invalidate any other reasons why the executable file might be covered by
- the GNU General Public License.
-
- ========================================================================*/
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
+ License for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #ifndef GFM_COMMON_H
 #define GFM_COMMON_H
diff --git a/interface/src/matlab/gfm_mex.c b/interface/src/matlab/gfm_mex.c
index c60f82a..ab47bae 100644
--- a/interface/src/matlab/gfm_mex.c
+++ b/interface/src/matlab/gfm_mex.c
@@ -1,25 +1,23 @@
 /* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
  This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301,
- USA.
-
- ========================================================================*/
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
+ License for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <assert.h>
 #include <string.h>
@@ -29,6 +27,9 @@
 #include "gfm_common.h"
 #include "getfem_interface.h"
 
+void set_superlu_callback(int (*cb)());
+int handle_getfem_callback();
+
 /* main file for the giant gf_matlab mex-file */
 /*
 char* getfem_interface_main(int config_id, const char *function, 
diff --git a/interface/src/matlab/gfm_rpc_mexint.c b/interface/src/matlab/gfm_rpc_mexint.c
index dc2f265..bb89041 100644
--- a/interface/src/matlab/gfm_rpc_mexint.c
+++ b/interface/src/matlab/gfm_rpc_mexint.c
@@ -1,25 +1,23 @@
 /* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2006 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
  This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301,
- USA.
-
- ========================================================================*/
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
+ License for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /*
  * This is sample code generated by rpcgen.
diff --git a/interface/src/matlab/private/Makefile.in b/interface/src/matlab/private/Makefile.in
index 2bfb81a..f681ed3 100644
--- a/interface/src/matlab/private/Makefile.in
+++ b/interface/src/matlab/private/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -71,6 +71,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(toolboxdir)"
 SCRIPTS = $(toolbox_SCRIPTS)
 SOURCES =
@@ -100,6 +106,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -118,6 +125,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -134,6 +142,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -198,6 +207,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -233,7 +243,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -320,9 +329,7 @@ uninstall-toolboxSCRIPTS:
 	@list='$(toolbox_SCRIPTS)'; test -n "$(toolboxdir)" || exit 0; \
 	files=`for p in $$list; do echo "$$p"; done | \
 	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(toolboxdir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(toolboxdir)" && rm -f $$files
+	dir='$(DESTDIR)$(toolboxdir)'; $(am__uninstall_files_from_dir)
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -383,10 +390,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/interface/src/python/Makefile.in b/interface/src/python/Makefile.in
index 61a3580..98523d9 100644
--- a/interface/src/python/Makefile.in
+++ b/interface/src/python/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -73,6 +73,13 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile)
 am__installdirs = "$(DESTDIR)$(gfpythondir)" \
 	"$(DESTDIR)$(gfpyexecdir)"
 py_compile = $(top_srcdir)/py-compile
@@ -101,6 +108,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -119,6 +127,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -135,6 +144,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -199,6 +209,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -234,7 +245,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -322,11 +332,8 @@ install-gfpythonPYTHON: $(gfpython_PYTHON)
 	  $(INSTALL_DATA) $$files "$(DESTDIR)$(gfpythondir)" || exit $$?; \
 	done || exit $$?; \
 	if test -n "$$dlist"; then \
-	  if test -z "$(DESTDIR)"; then \
-	    PYTHON=$(PYTHON) $(py_compile) --basedir "$(gfpythondir)" $$dlist; \
-	  else \
-	    PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(gfpythondir)" $$dlist; \
-	  fi; \
+	  $(am__py_compile) --destdir "$(DESTDIR)" \
+	                    --basedir "$(gfpythondir)" $$dlist; \
 	else :; fi
 
 uninstall-gfpythonPYTHON:
@@ -334,14 +341,14 @@ uninstall-gfpythonPYTHON:
 	@list='$(gfpython_PYTHON)'; test -n "$(gfpythondir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
 	test -n "$$files" || exit 0; \
+	dir='$(DESTDIR)$(gfpythondir)'; \
 	filesc=`echo "$$files" | sed 's|$$|c|'`; \
 	fileso=`echo "$$files" | sed 's|$$|o|'`; \
-	echo " ( cd '$(DESTDIR)$(gfpythondir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(gfpythondir)" && rm -f $$files || exit $$?; \
-	echo " ( cd '$(DESTDIR)$(gfpythondir)' && rm -f" $$filesc ")"; \
-	cd "$(DESTDIR)$(gfpythondir)" && rm -f $$filesc || exit $$?; \
-	echo " ( cd '$(DESTDIR)$(gfpythondir)' && rm -f" $$fileso ")"; \
-	cd "$(DESTDIR)$(gfpythondir)" && rm -f $$fileso
+	st=0; \
+	for files in "$$files" "$$filesc" "$$fileso"; do \
+	  $(am__uninstall_files_from_dir) || st=$$?; \
+	done; \
+	exit $$st
 install-nodist_gfpyexecPYTHON: $(nodist_gfpyexec_PYTHON)
 	@$(NORMAL_INSTALL)
 	test -z "$(gfpyexecdir)" || $(MKDIR_P) "$(DESTDIR)$(gfpyexecdir)"
@@ -360,11 +367,8 @@ install-nodist_gfpyexecPYTHON: $(nodist_gfpyexec_PYTHON)
 	  $(INSTALL_DATA) $$files "$(DESTDIR)$(gfpyexecdir)" || exit $$?; \
 	done || exit $$?; \
 	if test -n "$$dlist"; then \
-	  if test -z "$(DESTDIR)"; then \
-	    PYTHON=$(PYTHON) $(py_compile) --basedir "$(gfpyexecdir)" $$dlist; \
-	  else \
-	    PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(gfpyexecdir)" $$dlist; \
-	  fi; \
+	  $(am__py_compile) --destdir "$(DESTDIR)" \
+	                    --basedir "$(gfpyexecdir)" $$dlist; \
 	else :; fi
 
 uninstall-nodist_gfpyexecPYTHON:
@@ -372,14 +376,14 @@ uninstall-nodist_gfpyexecPYTHON:
 	@list='$(nodist_gfpyexec_PYTHON)'; test -n "$(gfpyexecdir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
 	test -n "$$files" || exit 0; \
+	dir='$(DESTDIR)$(gfpyexecdir)'; \
 	filesc=`echo "$$files" | sed 's|$$|c|'`; \
 	fileso=`echo "$$files" | sed 's|$$|o|'`; \
-	echo " ( cd '$(DESTDIR)$(gfpyexecdir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(gfpyexecdir)" && rm -f $$files || exit $$?; \
-	echo " ( cd '$(DESTDIR)$(gfpyexecdir)' && rm -f" $$filesc ")"; \
-	cd "$(DESTDIR)$(gfpyexecdir)" && rm -f $$filesc || exit $$?; \
-	echo " ( cd '$(DESTDIR)$(gfpyexecdir)' && rm -f" $$fileso ")"; \
-	cd "$(DESTDIR)$(gfpyexecdir)" && rm -f $$fileso
+	st=0; \
+	for files in "$$files" "$$filesc" "$$fileso"; do \
+	  $(am__uninstall_files_from_dir) || st=$$?; \
+	done; \
+	exit $$st
 tags: TAGS
 TAGS:
 
@@ -434,10 +438,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/interface/src/python/__init__.py b/interface/src/python/__init__.py
index 7b699e8..dbfee50 100644
--- a/interface/src/python/__init__.py
+++ b/interface/src/python/__init__.py
@@ -3,24 +3,14 @@
 The main package for getfem++ support for Python.  Normally used by importing
 the package, and perhaps a particular module inside it.
 
-This package is licensed under the GNU LGPL 2.1.
+This package is licensed under the GNU LGPL 3.
 
 See the COPYING file in the getfem installation directory or
 print getfem.__LICENSE__
 """
-__revision__ = "$Revision: 3664 $"
+__revision__ = "$Revision: 4154 $"
 __LICENSE__ = """\
-GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
-under  the  terms  of the  GNU  Lesser General Public License as published
-by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-License for more details.
-You  should  have received a copy of the GNU Lesser General Public License
-along  with  this program;  if not, write to the Free Software Foundation,
-Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.   
+GETFem++ is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version along with the GCC Runtime Library Exception either version 3.1 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 Lesser General Public License and GCC Runtime Library Exception for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 """
 
 from getfem import *
diff --git a/interface/src/python/getfem.py b/interface/src/python/getfem.py
index aba969e..ccfdee6 100644
--- a/interface/src/python/getfem.py
+++ b/interface/src/python/getfem.py
@@ -9,17 +9,18 @@
 #
 # GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
 #
-# File autogenerated by interface/bin/extract_doc. Do not edit it.
+# File autogenerated by bin/extract_doc. Do not edit it.
 
 """GetFEM-interface classes.
   Provides access to the pseudo-objects exported by the python-getfem
@@ -80,6 +81,136 @@ def generic_destructor(self, destructible=True):
 
 
 #
+# GetFEM class ContStruct definition.
+#
+
+class ContStruct:
+  """GetFEM ContStruct object
+
+  This object serves for storing parameters and data used in numerical
+  continuation (for more details about the continuation see the Getfem++ user
+  documentation).
+
+  """
+  def __init__(self, *args):
+    """General constructor for ContStruct objects
+
+  * ``S = ContStruct(Model md, string dataname_parameter[,string dataname_init, string dataname_final, string dataname_current], scalar sc_fac[, ...])``
+    The variable `dataname_parameter` should parametrise the model given by
+    `md`. If the parametrisation is done via some vector datum,
+    `dataname_init` and `dataname_final` should store two given values of
+    this datum determining the parametrisation, and `dataname_current`
+    serves for actual values of this datum. `sc_fac` is a scale factor
+    involved in the norm used in the continuation.
+    
+    Additional options:
+    
+    - 'lsolver', string SOLVER_NAME
+       name of the solver to be used for the incorporated linear systems
+       (the default value is 'auto', which lets getfem choose itself);
+       possible values are 'superlu', 'mumps' (if supported), 'cg/ildlt',
+       'gmres/ilu' and 'gmres/ilut';
+    - 'max_iter', int NIT
+       maximum number of iterations allowed in the correction (the default
+       value is 10);
+    - 'thr_iter', int TIT
+       threshold number of iterations of the correction for enlarging the
+       step size (the default value is 8);
+    - 'max_res', scalar RES
+       target residual value of the new point (the default value is 1e-6);
+    - 'max_diff', scalar DIFF
+       determines a convergence criterion to the new tangent vector (the
+       default value is 1e-9);
+    - 'min_ang', scalar ANG
+       minimal value of the cosine of the angle between tangents to the
+       solution curve at the old point and the new one (the default value
+       is 0.9);
+    - 'h_init', scalar HIN
+       initial step size (the default value is 1e-2);
+    - 'h_max', scalar HMAX
+       maximal step size (the default value is 1e-1);
+    - 'h_min', scalar HMIN
+       minimal step size (the default value is 1e-5);
+    - 'h_inc', scalar HINC
+       factor for enlarging the step size (the default value is 1.3);
+    - 'h_dec', scalar HDEC
+       factor for diminishing the step size (the default value is 0.5);
+    - 'epsilon', scalar EPS
+       increment to be used to compute the incorporated finite
+       differences (the default value is 1e-8);
+    - 'max_res_solve', scalar RES_SOLVE
+       target residual value for the linear systems to be solved (the
+       default value is 1e-7);
+    - 'nb_test', int NTEST
+       number of evaluations of the test function when passing through
+       a boundary between different smooth pieces;
+    - 'noisy' or 'very_noisy'
+       determines how detailed information has to be displayed during the
+       process (residual values etc.).
+
+    """
+    generic_constructor(self,'cont_struct',*args)
+  def __del__(self):
+    generic_destructor(self, destructible=True)
+  def get(self, *args):
+    return getfem('cont_struct_get',self.id, *args)
+  def __repr__(self):
+    getfem('cont_struct_get',self.id, 'display')
+    return ''
+  def __str__(self):
+    return self.char()
+
+  def init_test_function(self, tangent, tangent_parameter):
+    """Initialise the border of the bordered system that serves for calculating
+    the test function. Return the value of test function for the solution
+    and the value of the parameter saved in the corresponding model object
+    and the tangent given by `tangent` and `tangent_parameter`."""
+    return self.get("init_test_function", tangent, tangent_parameter)
+
+
+  def init_Moore_Penrose_continuation(self, init_dir):
+    """Initialise the Moore-Penrose continuation: Return a unit tangent
+    corresponding to the solution branch at the solution and the
+    value of the parameter saved in the corresponding model object,
+    and an initial step size for the continuation. Direction of the
+    computed tangent with respect to the parameter is determined by the
+    sign of `init_dir`."""
+    return self.get("init_Moore_Penrose_continuation", init_dir)
+
+
+  def Moore_Penrose_continuation(self, tangent, tangent_parameter, h):
+    """Compute one step of the Moore-Penrose continuation: Take the solution
+    and the value of the parameter saved in the corresponding model object,
+    the tangent given by `tangent` and `tangent_parameter`, and the step
+    size `h`, save a new point on the solution curve into the model object,
+    and return a new tangent and a step size for the next step. If the
+    returned step size equals zero, the continuation has failed."""
+    return self.get("Moore_Penrose_continuation", tangent, tangent_parameter, h)
+
+
+  def test_function(self):
+    """Return the last value of the test function and eventaully all the
+    values calculated when passing through a boundary between different
+    smooth pieces."""
+    return self.get("test_function")
+
+
+  def char(self):
+    """Output a (unique) string representation of the ContStruct.
+    
+    This can be used to perform comparisons between two
+    different ContStruct objects.
+    This function is to be completed.
+    """
+    return self.get("char")
+
+
+  def display(self):
+    """Display a short summary for a ContStruct object."""
+    return self.get("display")
+
+
+#
 # GetFEM class CvStruct definition.
 #
 
@@ -150,7 +281,7 @@ class Eltm:
 
 
   This object represents a type of elementary matrix. In order to obtain a
-  numerical value of theses matrices, see MeshIm.eltm().
+  numerical value of these matrices, see MeshIm.eltm().
 
   If you have very particular assembling needs, or if you just want to check
   the content of an elementary matrix, this function might be useful. But
@@ -675,7 +806,7 @@ class Integ:
     """Return the total number of integration points.
     
     Count the points for the volume integration, and points for
-    surface integration on each face of the reference convex.<Par>
+    surface integration on each face of the reference convex.
     
     Only for approximate methods, this has no meaning for exact
     integration methods!"""
@@ -738,10 +869,10 @@ class LevelSet:
    The level-set object is represented by a primary level-set and optionally
    a secondary level-set used to represent fractures (if p(x) is the primary
    level-set function and s(x) is the secondary level-set, the crack is
-   defined by p(x)=0 and s(x)<=0: the role of the secondary is to determine
+   defined by :math:`p(x)=0` and :math:`s(x)\\leq0` : the role of the secondary is to determine
    the crack front/tip).
 
-   .. note::
+   note:
 
       All tools listed below need the package qhull installed on your
       system. This package is widely available. It computes convex hull and
@@ -1385,6 +1516,10 @@ class Mesh:
   * ``M = Mesh('cartesian', vec X[, vec Y[, vec Z,..]])``
     Build quickly a regular mesh of quadrangles, cubes, etc.
 
+  * ``M = Mesh('cartesian Q1', vec X, vec Y[, vec Z,..])``
+    Build quickly a regular mesh of quadrangles, cubes, etc. with
+    Q1 elements.
+
   * ``M = Mesh('triangles grid', vec X, vec Y)``
     Build quickly a regular mesh of triangles.
     
@@ -1453,6 +1588,23 @@ class Mesh:
   * ``M = Mesh('clone', Mesh m2)``
     Create a copy of a mesh.
 
+  * ``M = Mesh('generate', MesherObject mo, scalar h[, int K = 1[, mat vertices]])``
+    Call the (very) experimental mesher of Getfem on the geometry
+    represented by `mo`. please control the conformity of the produced mesh.
+    You can add the mesher by adding a priori vertices in the array
+    `vertices` which should be of size ``n x m`` where ``n`` n is the
+    dimension of the mesh and ``m`` the number of points. `h` is
+    approximate diameter of the elements. `K` is the degree of the
+    mesh ( > 1 for curved boundaries).  The mesher try to optimize the
+    quality of the elements. This operation may be time consuming.
+    Note that if the mesh generation fails, because of some random
+    procedure used, it will not give necessarily the same result due
+    to random procedures used.
+    The messages send to the console by the mesh generation can be
+    desactivated using `gf_util('trace level', 2)`. More information
+    can be obtained by `gf_util('trace level', 4)`.
+    
+
     """
     generic_constructor(self,'mesh',*args)
   def __del__(self):
@@ -1703,7 +1855,7 @@ class Mesh:
 
 
   def quality(self, CVIDs=None):
-    """Return an estimation of the quality of each convex (0 <= Q <= 1)."""
+    """Return an estimation of the quality of each convex (:math:`0 \\leq Q \\leq 1`)."""
     return self.get("quality", CVIDs)
 
 
@@ -1884,13 +2036,16 @@ class Mesh:
 
 
   def set_region(self, rnum, CVFIDs):
-    """Assigns the region number `rnum` to the convex faces stored in each
-    column of the matrix `CVFIDs`.
+    """Assigns the region number `rnum` to the convex faces (or convexes)
+    stored in each column of the matrix `CVFIDs`.
     
     The first row of `CVFIDs` contains a convex #ids, and the second row
     contains a face number in the convex (or ``-1``
     for the whole convex (regions are usually used to store a list of
-    convex faces, but you may also use them to store a list of convexes)."""
+    convex faces, but you may also use them to store a list of convexes).
+    
+    If a vector is provided (or a one row matrix) the region will represent
+    the corresponding set of convex."""
     return self.set("region", rnum, CVFIDs)
 
 
@@ -1954,7 +2109,7 @@ class Mesh:
 class MeshFem:
   """GetFEM MeshFem object
 
-  This object represent a finite element method defined on a whole mesh.
+  This object represents a finite element method defined on a whole mesh.
 
   """
   def __init__(self, *args):
@@ -1989,7 +2144,8 @@ class MeshFem:
 
   * ``MF = MeshFem('global function', Mesh m, LevelSet ls, (GlobalFunction GF1,...)[, int Qdim_m])``
     Create a MeshFem whose base functions are global function given by the
-    user.
+    user in the system of coordinate defined by the iso-values of the two
+    level-set function of `ls`. 
 
   * ``MF = MeshFem('partial', MeshFem mf, ivec DOFs[, ivec RCVs])``
     Build a restricted MeshFem by keeping only a subset of the degrees of
@@ -2119,7 +2275,7 @@ class MeshFem:
     
     Lagrangian means that each base function Phi[i] is such that
     Phi[i](P[j]) = delta(i,j), where P[j] is the dof location of
-    the jth base function, and delta(i,j) = 1 if i==j, else 0.<Par>
+    the jth base function, and delta(i,j) = 1 if i==j, else 0.
     
     If `CVids` is omitted, it returns 1 if all convexes in the mesh
     are Lagrangian. If `CVids` is used, it returns the convex indices
@@ -2329,11 +2485,11 @@ class MeshFem:
 
     Examples::
 
-      mf.eval('x[0]*x[1]') # interpolates the function 'x*y'
-      mf.eval('[x[0],x[1]]') # interpolates the vector field '[x,y]'
+      mf.eval('x*y') # interpolates the function 'x*y'
+      mf.eval('[x,y]') # interpolates the vector field '[x,y]'
 
       import numpy as np
-      mf.eval('np.sin(x[0])',globals(),locals()) # interpolates the function sin(x)
+      mf.eval('np.sin(x)',globals(),locals()) # interpolates the function sin(x)
     """
     P = self.basic_dof_nodes()
     nbd = P.shape[1]
@@ -2344,15 +2500,18 @@ class MeshFem:
       Ind = numpy.arange(0,nbd,self.qdim()) # = sdof
       P   = P[:,Ind]
       nbd = P.shape[1] # = nb_sdof
-    x = P[:,0]
-    gl['x'] = P[:,0]
-    lo['x'] = P[:,0]
+    vars = ('x','y','z','u','v','w')
+    nbvars = min(P.shape[0],len(vars))
+    for i in xrange(0,nbvars):
+      gl[vars[i]] = P[i,0]
+      lo[vars[i]] = P[i,0]
     r = numpy.array(eval(expression,gl,lo))
     Z = numpy.zeros(r.shape + (nbd,), r.dtype)
-    for i in xrange(0,nbd):
-      gl['x'] = P[:,i]
-      lo['x'] = P[:,i]
-      Z[...,i] = eval(expression,gl,lo)
+    for j in xrange(0,nbd):
+      for i in xrange(0,nbvars):
+        gl[vars[i]] = P[i,j]
+        lo[vars[i]] = P[i,j]
+      Z[...,j] = eval(expression,gl,lo)
     return Z
   
 
@@ -2380,7 +2539,7 @@ class MeshFem:
     
     Similar to MeshFem.classical_fem() except that
     FEM_PK_DISCONTINUOUS is used. Param `alpha` the node inset,
-    0 <= alpha < 1, where 0 implies usual dof nodes, greater values
+    :math:`0 \\leq alpha < 1`, where 0 implies usual dof nodes, greater values
     move the nodes toward the center of gravity, and 1 means that all
     degrees of freedom collapse on the center of gravity."""
     return self.set("classical_discontinuous_fem", K, alpha, *args)
@@ -2404,6 +2563,15 @@ class MeshFem:
     return self.set("reduction", s)
 
 
+  def reduce_meshfem(self, RM):
+    """Set reduction mesh fem
+    This function selects the degrees of freedom of the finite element
+    method by selecting a set of independent vectors of the matrix RM.
+    The numer of columns of RM should corresponds to the number of degrees
+    of fredoom of the finite element method.  """
+    return self.set("reduce_meshfem", RM)
+
+
   def set_dof_partition(self, DOFP):
     """Change the 'dof_partition' array.
     
@@ -2428,7 +2596,7 @@ class MeshFem:
 class MeshIm:
   """GetFEM MeshIm object
 
-  This object represent an integration method defined on a whole mesh (an 
+  This object represents an integration method defined on a whole mesh (an 
   potentialy on its boundaries).
 
   """
@@ -2457,6 +2625,11 @@ class MeshIm:
     The `where` argument define the domain of integration with respect to
     the levelset, it has to be chosen among 'ALL', 'INSIDE', 'OUTSIDE' and
     'BOUNDARY'.
+    
+    CAUTION: this integration method will be defined only on the element
+    cut by the level-set. For the 'ALL', 'INSIDE' and 'OUTSIDE' options
+    it is mandatory to use the method ``MeshIm.set_integ()`` to define
+    the integration method on the remaining elements.
 
   * ``MIM = MeshIm(Mesh m, [{Integ im|int im_degree}])``
     Build a new MeshIm object.
@@ -2570,8 +2743,9 @@ class MeshIm:
     integration method with an integration method handle `im` obtained
     via Integ('IM_SOMETHING'), or to let getfem choose a suitable
     integration method with `im_degree` (choosen such that polynomials
-    of `degree <= im_degree` are exactly integrated. If `im_degree=-1`,
-    then the dummy integration method IM_NONE will be used.)"""
+    of :math:`\\text{degree} \\leq \\text{im\\_degree}` are exactly integrated.
+    If `im_degree=-1`, then the dummy integration method IM_NONE will 
+    be used.)"""
     return self.set("integ", *args)
 
 
@@ -2689,6 +2863,88 @@ class MeshLevelSet:
 
 
 #
+# GetFEM class MesherObject definition.
+#
+
+class MesherObject:
+  """GetFEM MesherObject object
+
+  This object represents a geometric object to be meshed by the (very)
+  experimental meshing procedure of Getfem.
+
+  """
+  def __init__(self, *args):
+    """General constructor for MesherObject objects
+
+  * ``MF = MesherObject('ball', vec center, scalar radius)``
+    Represents a ball of corresponding center and radius.
+    
+
+  * ``MF = MesherObject('half space', vec origin, vec normal_vector)``
+    Represents an half space delimited by the plane which contains the
+    origin and normal to `normal_vector`. The selected part is the part
+    in the direction of the normal vector. This allows to cut a geometry
+    with a plane for instance to build a polygon or a polyhedron.
+    
+
+  * ``MF = MesherObject('cylinder', vec origin, vec n, scalar length, scalar radius)``
+    Represents a cylinder (in any dimension) of a certain radius whose axis is determined by the origin, a vector `n` and a certain length.
+    
+
+  * ``MF = MesherObject('cone', vec origin, vec n, scalar length, scalar half_angle)``
+    Represents a cone (in any dimension) of a certain half-angle (in radians) whose axis is determined by the origin, a vector `n` and a certain length.
+    
+
+  * ``MF = MesherObject('torus', scalar R, scalar r)``
+    Represents a torus in 3d of axis along the z axis with a great radius
+    equal to `R` and small radius equal to `r`. For the moment, the
+    possibility to change the axis is not given.
+    
+
+  * ``MF = MesherObject('rectangle', vec rmin, vec rmax)``
+    Represents a rectangle (or parallelepiped in 3D) parallel to the axes.
+    
+
+  * ``MF = MesherObject('intersect', MesherObject object1 , MesherObject object2, ...)``
+    Intersection of several objects.
+    
+
+  * ``MF = MesherObject('union', MesherObject object1 , MesherObject object2, ...)``
+    Union of several objects.
+    
+
+  * ``MF = MesherObject('set minus', MesherObject object1 , MesherObject object2)``
+    Geometric object being object1 minus object2.
+    
+
+    """
+    generic_constructor(self,'mesher_object',*args)
+  def __del__(self):
+    generic_destructor(self, destructible=False)
+  def get(self, *args):
+    return getfem('mesher_object_get',self.id, *args)
+  def __repr__(self):
+    getfem('mesher_object_get',self.id, 'display')
+    return ''
+  def __str__(self):
+    return self.char()
+
+  def char(self):
+    """Output a (unique) string representation of the MesherObject.
+    
+    This can be used to perform comparisons between two
+    different MesherObject objects.
+    This function is to be completed.
+    """
+    return self.get("char")
+
+
+  def display(self):
+    """displays a short summary for a MesherObject object."""
+    return self.get("display")
+
+
+#
 # GetFEM class Model definition.
 #
 
@@ -2731,6 +2987,11 @@ class Model:
     return self.get("is_complex")
 
 
+  def nbdof(self):
+    """Return the total number of degrees of freedom of the model."""
+    return self.get("nbdof")
+
+
   def tangent_matrix(self):
     """Return the tangent matrix stored in the model ."""
     return self.get("tangent_matrix")
@@ -2741,6 +3002,20 @@ class Model:
     return self.get("rhs")
 
 
+  def brick_term_rhs(self, ind_brick, ind_term=None, sym=None, ind_iter=None):
+    """Gives the access to the part of the right hand side of a term
+    of a particular nonlinear brick. Does not account of the eventual
+    time dispatcher. An assembly of the rhs has to be done first.
+    `ind_brick` is the brick index. `ind_term` is the index of the
+    term inside the brick (default value : 0).
+    `sym` is to access to the second right hand side of for symmetric
+    terms acting on two different variables (default is 0).
+    `ind_iter` is the iteration number when time dispatchers are
+    used (default is 0).
+    """
+    return self.get("brick_term_rhs", ind_brick, ind_term, sym, ind_iter)
+
+
   def memsize(self):
     """Return a rough approximation of the amount of memory (in bytes) used by
     the model."""
@@ -2762,6 +3037,11 @@ class Model:
     return self.get("variable", name, niter)
 
 
+  def mesh_fem_of_variable(self, name):
+    """Gives access to the `mesh_fem` of a variable or data."""
+    return self.get("mesh_fem_of_variable", name)
+
+
   def mult_varname_Dirichlet(self, ind_brick):
     """Gives the name of the multiplier variable for a Dirichlet brick.
     If the brick is not a Dirichlet condition with multiplier brick,
@@ -2777,7 +3057,7 @@ class Model:
 
   def from_variables(self):
     """Return the vector of all the degrees of freedom of the model consisting
-    of the concatenation of the variables of the model (usefull
+    of the concatenation of the variables of the model (useful
     to solve your problem with you own solver). """
     return self.get("from_variables")
 
@@ -2788,13 +3068,13 @@ class Model:
     'build_rhs', 'build_matrix' or 'pseudo_potential' (in that case,
     the pseudo_potential is returned).
     The default is to build the whole
-    tangent linear system (matrix and rhs). This function is usefull
+    tangent linear system (matrix and rhs). This function is useful
     to solve your problem with you own solver. """
     return self.get("assembly", option)
 
 
   def solve(self, *args):
-    """Synopsis: Model.solve(self[, ...])
+    """Synopsis: (nbit, converged) = Model.solve(self[, ...])
 
     Run the standard getfem solver.
     
@@ -2811,6 +3091,9 @@ class Model:
        set the maximum iterations numbers.
     - 'max_res', @float RES
        set the target residual value.
+    - 'diverged_res', @float RES
+       set the threshold value of the residual beyond which the iterative
+       method is considered to diverge (default is 1e200).
     - 'lsolver', string SOLVER_NAME
        select explicitely the solver used for the linear systems (the
        default value is 'auto', which lets getfem choose itself).
@@ -2819,14 +3102,36 @@ class Model:
     - 'lsearch', string LINE_SEARCH_NAME
        select explicitely the line search method used for the linear systems (the
        default value is 'default').
-       Possible values are 'simplest', 'systematic'.
+       Possible values are 'simplest', 'systematic', 'quadratic' or 'basic'.
     - 'with pseudo potential'
       for nonlinear problems, the criterion of the line search will
       be a pseudo potential instead of the residual. Still experimental since
-      not all bricks define a pseudo potential."""
+      not all bricks define a pseudo potential.
+    
+      Return the number of iterations, if a iterative method is used.
+      
+      Note that it is possible to disable some variables
+      (see Model.disable_variable() ) in order to
+      solve the problem only with respect to a subset of variables (the
+      disabled variables are the considered as data) for instance to
+      replace the global Newton strategy with a fixed point one."""
     return self.get("solve", *args)
 
 
+  def test_tangent_matrix(self, EPS=None, *args):
+    """Synopsis: Model.test_tangent_matrix(self[, scalar EPS[, int NB[, scalar scale]]])
+
+    Test the consistency of the tangent matrix in some random positions
+    and random directions (useful to test newly created bricks).
+    `EPS` is the value of the small parameter for the finite difference
+    computation of the derivative is the random direction (default is 1E-6).
+    `NN` is the number of tests (default is 100). `scale` is a parameter
+    for the random position (default is 1). Each dof od the random
+    position is chosen in the range [-scale, scale].
+    """
+    return self.get("test_tangent_matrix", EPS, *args)
+
+
   def compute_isotropic_linearized_Von_Mises_or_Tresca(self, varname, dataname_lambda, dataname_mu, mf_vm, version=None):
     """Compute the Von-Mises stress or the Tresca stress of a field (only
     valid for isotropic linearized elasticity in 3D). `version` should
@@ -2845,9 +3150,21 @@ class Model:
     return self.get("compute_Von_Mises_or_Tresca", varname, lawname, dataname, mf_vm, version)
 
 
+  def compute_second_Piola_Kirchhoff_tensor(self, varname, lawname, dataname, mf_sigma):
+    """Compute on `mf_sigma` the second Piola Kirchhoff stress tensor of a field
+    for nonlinear elasticity in 3D. `lawname` is the constitutive law which
+    could be 'SaintVenant Kirchhoff', 'Mooney Rivlin' or 'Ciarlet Geymonat'.
+    `dataname` is a vector of parameters for the constitutive law. Its length
+    depends on the law. It could be a short vector of constant values or a
+    vector field described on a finite element method for variable
+    coefficients.
+    """
+    return self.get("compute_second_Piola_Kirchhoff_tensor", varname, lawname, dataname, mf_sigma)
+
+
   def compute_plasticity_Von_Mises_or_Tresca(self, datasigma, mf_vm, version=None):
     """Compute on `mf_vm` the Von-Mises or the Tresca stress of a field for plasticity and return it into the vector V.
-    `datasigma` is a vector which contains the stress constraints values supported by the mesh.  
+    `datasigma` is a vector which contains the stress constraints values supported by the mesh.
     `version` should be  'Von_Mises' or 'Tresca' ('Von_Mises' is the default)."""
     return self.get("compute_plasticity_Von_Mises_or_Tresca", datasigma, mf_vm, version)
 
@@ -2901,6 +3218,14 @@ class Model:
     return self.set("add_fem_variable", name, mf, niter)
 
 
+  def add_filtered_fem_variable(self, name, mf, region, niter=None):
+    """Add a variable to the model linked to a MeshFem. The variable is filtered
+    in the sense that only the dof on the region are considered.
+    `name` is the variable name and `niter` is the optional number of
+    version of the data stored, for time integration schemes."""
+    return self.set("add_filtered_fem_variable", name, mf, region, niter)
+
+
   def add_variable(self, name, size, niter=None):
     """Add a variable to the model of constant size. `name` is the variable
     name and `niter` is the optional number of version of the data stored,
@@ -2914,15 +3239,17 @@ class Model:
     return self.set("resize_variable", name, size)
 
 
-  def add_multiplier(self, name, mf, primalname, niter=None):
-    """Add a particular variable linked to a fem being a multiplier with
+  def add_multiplier(self, name, mf, primalname, mim=None, region=None, *args):
+    """Synopsis: Model.add_multiplier(self, string name, MeshFem mf, string primalname[, MeshIm mim, int region][, int niter])
+
+    Add a particular variable linked to a fem being a multiplier with
     respect to a primal variable. The dof will be filtered with the
     ``gmm::range_basis`` function applied on the terms of the model
     which link the multiplier and the primal variable. This in order to
     retain only linearly independant constraints on the primal variable.
     Optimized for boundary multipliers. `niter` is the optional number
     of version of the data stored, for time integration schemes. """
-    return self.set("add_multiplier", name, mf, primalname, niter)
+    return self.set("add_multiplier", name, mf, primalname, mim, region, *args)
 
 
   def add_fem_data(self, name, mf, qdim=None, *args):
@@ -2965,12 +3292,13 @@ class Model:
   def to_variables(self, V):
     """Set the value of the variables of the model with the vector `V`.
     Typically, the vector `V` results of the solve of the tangent
-    linear system (usefull to solve your problem with you own solver)."""
+    linear system (useful to solve your problem with you own solver)."""
     return self.set("to_variables", V)
 
 
   def add_Laplacian_brick(self, mim, varname, region=None):
-    """Add a Laplacian term to the model relatively to the variable `varname`.
+    """Add a Laplacian term to the model relatively to the variable `varname`
+    (in fact with a minus : :math:`-\\text{div}(\\nabla u)`).
     If this is a vector valued variable, the Laplacian term is added
     componentwise. `region` is an optional mesh region on which the term
     is added. If it is not specified, it is added on the whole mesh. Return
@@ -2993,7 +3321,7 @@ class Model:
     The components of the matrix/tensor have to be stored with the fortran
     order (columnwise) in the data vector (compatibility with blas). The
     symmetry of the given matrix/tensor is not verified (but assumed). If
-    this is a vector valued variable, the Laplacian term is added
+    this is a vector valued variable, the elliptic term is added
     componentwise. `region` is an optional mesh region on which the term is
     added. If it is not specified, it is added on the whole mesh. Return the
     brick index in the model."""
@@ -3058,6 +3386,46 @@ class Model:
     return self.set("add_Dirichlet_condition_with_penalization", mim, varname, coeff, region, dataname, mf_mult)
 
 
+  def add_normal_Dirichlet_condition_with_multipliers(self, mim, varname, mult_description, region, dataname=None):
+    """Add a Dirichlet condition to the normal component of the vector
+    or tensor) valued variable `varname` and the mesh
+    region `region`. This region should be a boundary. The Dirichlet
+    condition is prescribed with a multiplier variable described by
+    `mult_description`. If `mult_description` is a string this is assumed
+    to be the variable name corresponding to the multiplier (which should be
+    first declared as a multiplier variable on the mesh region in the model).
+    If it is a finite element method (mesh_fem object) then a multiplier
+    variable will be added to the model and build on this finite element
+    method (it will be restricted to the mesh region `region` and eventually
+    some conflicting dofs with some other multiplier variables will be
+    suppressed). If it is an integer, then a  multiplier variable will be
+    added to the model and build on a classical finite element of degree
+    that integer. `dataname` is the optional right hand side of  the
+    Dirichlet condition. It could be constant or described on a fem; scalar
+    or vector valued, depending on the variable on which the Dirichlet
+    condition is prescribed (scalar if the variable
+    is vector valued, vector if the variable is tensor valued).
+    Returns the brick index in the model."""
+    return self.set("add_normal_Dirichlet_condition_with_multipliers", mim, varname, mult_description, region, dataname)
+
+
+  def add_normal_Dirichlet_condition_with_penalization(self, mim, varname, coeff, region, dataname=None, mf_mult=None):
+    """Add a Dirichlet condition to the normal component of the vector
+    (or tensor) valued variable `varname` and the mesh
+    region `region`. This region should be a boundary. The Dirichlet
+    condition is prescribed with penalization. The penalization coefficient
+    is initially `coeff` and will be added to the data of the model.
+    `dataname` is the optional right hand side of the Dirichlet condition.
+    It could be constant or described on a fem; scalar or vector valued,
+    depending on the variable on which the Dirichlet condition is prescribed
+    (scalar if the variable
+    is vector valued, vector if the variable is tensor valued).
+    `mf_mult` is an optional parameter which allows to weaken the
+    Dirichlet condition specifying a multiplier space.
+    Returns the brick index in the model."""
+    return self.set("add_normal_Dirichlet_condition_with_penalization", mim, varname, coeff, region, dataname, mf_mult)
+
+
   def add_generalized_Dirichlet_condition_with_multipliers(self, mim, varname, mult_description, region, dataname, Hname):
     """Add a Dirichlet condition on the variable `varname` and the mesh
     region `region`.  This version is for vector field.
@@ -3078,7 +3446,7 @@ class Model:
     or vector valued, depending on the variable on which the Dirichlet
     condition is prescribed. `Hname` is the data
     corresponding to the matrix field `H`.
-    Return the brick index in the model."""
+    Returns the brick index in the model."""
     return self.set("add_generalized_Dirichlet_condition_with_multipliers", mim, varname, mult_description, region, dataname, Hname)
 
 
@@ -3102,6 +3470,75 @@ class Model:
     return self.set("add_generalized_Dirichlet_condition_with_penalization", mim, varname, coeff, region, dataname, Hname, mf_mult)
 
 
+  def add_pointwise_constraints_with_multipliers(self, varname, dataname_pt, dataname_unitv=None, *args):
+    """Synopsis: ind = Model.add_pointwise_constraints_with_multipliers(self, string varname, string dataname_pt[, string dataname_unitv] [, string dataname_val])
+
+    Add some pointwise constraints on the variable `varname` using
+    multiplier. The multiplier variable is automatically added to the model.
+    The conditions are prescribed on a set of points given in the data
+    `dataname_pt` whose dimension is the number of points times the dimension
+    of the mesh.
+    If the variable represents a vector field, one has to give the data
+    `dataname_unitv` which represents a vector of dimension the number of
+    points times the dimension of the vector field which should store some
+    unit vectors. In that case the prescribed constraint is the scalar
+    product of the variable at the corresponding point with the corresponding
+    unit vector.
+    The optional data `dataname_val` is the vector of values to be prescribed
+    at the different points.
+    This brick is specifically designed to kill rigid displacement
+    in a Neumann problem.
+    Returns the brick index in the model."""
+    return self.set("add_pointwise_constraints_with_multipliers", varname, dataname_pt, dataname_unitv, *args)
+
+
+  def add_pointwise_constraints_with_given_multipliers(self, varname, multname, dataname_pt, dataname_unitv=None, *args):
+    """Synopsis: ind = Model.add_pointwise_constraints_with_given_multipliers(self, string varname, string multname, string dataname_pt[, string dataname_unitv] [, string dataname_val])
+
+    Add some pointwise constraints on the variable `varname` using a given
+    multiplier `multname`.
+    The conditions are prescribed on a set of points given in the data
+    `dataname_pt` whose dimension is the number of points times the dimension
+    of the mesh.
+    The multiplier variable should be a fixed size variable of size the
+    number of points.
+    If the variable represents a vector field, one has to give the data
+    `dataname_unitv` which represents a vector of dimension the number of
+    points times the dimension of the vector field which should store some
+    unit vectors. In that case the prescribed constraint is the scalar
+    product of the variable at the corresponding point with the corresponding
+    unit vector.
+    The optional data `dataname_val` is the vector of values to be prescribed
+    at the different points.
+    This brick is specifically designed to kill rigid displacement
+    in a Neumann problem.
+    Returns the brick index in the model."""
+    return self.set("add_pointwise_constraints_with_given_multipliers", varname, multname, dataname_pt, dataname_unitv, *args)
+
+
+  def add_pointwise_constraints_with_penalization(self, varname, coeff, dataname_pt, dataname_unitv=None, *args):
+    """Synopsis: ind = Model.add_pointwise_constraints_with_penalization(self, string varname, scalar coeff, string dataname_pt[, string dataname_unitv] [, string dataname_val])
+
+    Add some pointwise constraints on the variable `varname` thanks to
+    a penalization. The penalization coefficient is initially
+    `penalization_coeff` and will be added to the data of the model.
+    The conditions are prescribed on a set of points given in the data
+    `dataname_pt` whose dimension is the number of points times the dimension
+    of the mesh.
+    If the variable represents a vector field, one has to give the data
+    `dataname_unitv` which represents a vector of dimension the number of
+    points times the dimension of the vector field which should store some
+    unit vectors. In that case the prescribed constraint is the scalar
+    product of the variable at the corresponding point with the corresponding
+    unit vector.
+    The optional data `dataname_val` is the vector of values to be prescribed
+    at the different points.
+    This brick is specifically designed to kill rigid displacement
+    in a Neumann problem.
+    Returns the brick index in the model."""
+    return self.set("add_pointwise_constraints_with_penalization", varname, coeff, dataname_pt, dataname_unitv, *args)
+
+
   def change_penalization_coeff(self, ind_brick, coeff):
     """Change the penalization coefficient of a Dirichlet condition with
     penalization brick. If the brick is not of this kind, this
@@ -3127,6 +3564,20 @@ class Model:
     return self.set("add_Fourier_Robin_brick", mim, varname, dataname, region)
 
 
+  def add_basic_nonlinear_brick(self, mim, varname, f, dfdu, dataname=None, region=None):
+    """Add a brick representing a scalar term :math:`f(u)` to the left-hand
+    side of the model. In the weak form, one adds :math:`+\\int f(u)v`.
+    The function :math:`f` may optionally depend on :math:`\\lambda`, i.e.,
+    :math:`f(u)=f(u,\\lambda)`.
+    `f` and `dfdu` should contain the expressions for
+    :math:`f(u)` and :math:`\\frac{df}{du}(u)`, respectively.
+    `dataname` represents the optional real scalar parameter :math:`\\lambda`
+    in the model. `region` is an optional mesh region on which the term is
+    added. If it is not specified, the term is added on the whole mesh.
+    Return the brick index in the model."""
+    return self.set("add_basic_nonlinear_brick", mim, varname, f, dfdu, dataname, region)
+
+
   def add_constraint_with_multipliers(self, varname, multname, B, L):
     """Add an additional explicit constraint on the variable `varname` thank to
     a multiplier `multname` peviously added to the model (should be a fixed
@@ -3214,7 +3665,8 @@ class Model:
   def add_nonlinear_elasticity_brick(self, mim, varname, constitutive_law, dataname, region=None):
     """Add a nonlinear elasticity term to the model relatively to the
     variable `varname`. `lawname` is the constitutive law which
-    could be 'SaintVenant Kirchhoff', 'Mooney Rivlin' or 'Ciarlet Geymonat'.
+    could be 'SaintVenant Kirchhoff', 'Mooney Rivlin', 'Ciarlet Geymonat'
+    or 'generalized Blatz Ko'.
     IMPORTANT : if the variable is defined on a 2D mesh, the plane strain
     approximation is automatically used.
     `dataname` is a vector of parameters for the constitutive law. Its length
@@ -3237,7 +3689,7 @@ class Model:
     for the time scheme needed for the Newton algorithm used.
     Moreover, the finite element method on which `varname` is described
     is an K ordered mesh_fem, the `datasigma` one have to be at least
-    an K-1 ordered mesh_fem. 
+    an K-1 ordered mesh_fem.
     `datalambda` and `datamu` are the Lame coefficients of the studied
     material.
     `datathreshold` is the plasticity threshold of the material.
@@ -3262,8 +3714,8 @@ class Model:
 
   def add_bilaplacian_brick(self, mim, varname, dataname, region=None):
     """Add a bilaplacian brick on the variable
-    `varname` and on the mesh region `region`. 
-    This represent a term :math:`\\Delta(D \\Delta u)`. 
+    `varname` and on the mesh region `region`.
+    This represent a term :math:`\\Delta(D \\Delta u)`.
     where :math:`D(x)` is a coefficient determined by `dataname` which
     could be constant or described on a f.e.m. The corresponding weak form
     is :math:`\\int D(x)\\Delta u(x) \\Delta v(x) dx`.
@@ -3304,7 +3756,7 @@ class Model:
 
   def add_normal_derivative_Dirichlet_condition_with_multipliers(self, mim, varname, mult_description, region, dataname=None, R_must_be_derivated=None):
     """Add a Dirichlet condition on the normal derivative of the variable
-    varname` and on the mesh region `region` (which should be a boundary. 
+    varname` and on the mesh region `region` (which should be a boundary.
     he general form is
     math:`\\int \\partial_n u(x)v(x) = \\int r(x)v(x) \\forall v`
     here :math:`r(x)` is
@@ -3330,7 +3782,7 @@ class Model:
 
   def add_normal_derivative_Dirichlet_condition_with_penalization(self, mim, varname, coeff, region, dataname=None, R_must_be_derivated=None):
     """Add a Dirichlet condition on the normal derivative of the variable
-    varname` and on the mesh region `region` (which should be a boundary. 
+    varname` and on the mesh region `region` (which should be a boundary.
     he general form is
     math:`\\int \\partial_n u(x)v(x) = \\int r(x)v(x) \\forall v`
     here :math:`r(x)` is
@@ -3426,35 +3878,50 @@ class Model:
     return self.set("disable_bricks", bricks_indices)
 
 
-  def unable_bricks(self, bricks_indices):
-    """Unable a disabled brick."""
-    return self.set("unable_bricks", bricks_indices)
+  def enable_bricks(self, bricks_indices):
+    """Enable a disabled brick."""
+    return self.set("enable_bricks", bricks_indices)
+
+
+  def disable_variable(self, varname):
+    """Disable a variable for a solve. The next solve will operate only on
+    the remaining variables. This allows to solve separately different
+    parts of a model. If there is a strong coupling of the variables,
+    a fixed point strategy can the be used. """
+    return self.set("disable_variable", varname)
+
+
+  def enable_variable(self, varname):
+    """Enable a disabled variable."""
+    return self.set("enable_variable", varname)
 
 
   def first_iter(self):
-    """To be executed before the first iteration of a time integration scheme."""
+    """To be executed before the first iteration of a time integration
+    scheme. """
     return self.set("first_iter")
 
 
   def next_iter(self):
     """To be executed at the end of each iteration of a time
-    integration scheme."""
+    integration scheme. """
     return self.set("next_iter")
 
 
   def add_basic_contact_brick(self, varname_u, multname_n, multname_t=None, *args):
-    """Synopsis: ind = Model.add_basic_contact_brick(self, string varname_u, string multname_n[, string multname_t], string dataname_r, Spmat BN[, Spmat BT, string dataname_friction_coeff][, string dataname_gap[, string dataname_alpha[, int symmetrized]])
+    """Synopsis: ind = Model.add_basic_contact_brick(self, string varname_u, string multname_n[, string multname_t], string dataname_r, Spmat BN[, Spmat BT, string dataname_friction_coeff][, string dataname_gap[, string dataname_alpha[, int augmented_version]])
 
     Add a contact with  or without friction brick to the model.
     If U is the vector
     of degrees of freedom on which the unilateral constraint is applied,
     the matrix `BN` have to be such that this constraint is defined by
-    :math:`B_N U \\le 0`. A friction condition can be considered by adding the three
-    parameters `multname_t`, `BT` and `dataname_friction_coeff`. In this case,
-    the tangential displacement is :math:`B_T U` and the matrix `BT` should have as
-    many rows as `BN` multiplied by :math:`d-1` where :math:`d` is the domain dimension.
-    In this case also, `dataname_friction_coeff` is a data which represents the
-    coefficient of friction. It can be a scalar or a vector representing a
+    :math:`B_N U \\le 0`. A friction condition can be considered by adding
+    the three parameters `multname_t`, `BT` and `dataname_friction_coeff`.
+    In this case, the tangential displacement is :math:`B_T U` and
+    the matrix `BT` should have as many rows as `BN` multiplied by
+    :math:`d-1` where :math:`d` is the domain dimension.
+    In this case also, `dataname_friction_coeff` is a data which represents
+    the coefficient of friction. It can be a scalar or a vector representing a
     value on each contact condition.  The unilateral constraint is prescribed
     thank to a multiplier
     `multname_n` whose dimension should be equal to the number of rows of
@@ -3466,10 +3933,12 @@ class Model:
     optional parameter representing the initial gap. It can be a single value
     or a vector of value. `dataname_alpha` is an optional homogenization
     parameter for the augmentation parameter
-    (see Getfem user documentation). The parameter `symmetrized` indicates
-    that the symmetry of the tangent matrix will be kept or not (except for
-    the part representing the coupling between contact and friction which
-    cannot be symmetrized). """
+    (see Getfem user documentation).  The parameter `augmented_version`
+    indicates the augmentation strategy : 1 for the non-symmetric
+    Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+    the coupling between contact and Coulomb friction), 3 for the
+    unsymmetric method with augmented multipliers, 4 for the unsymmetric
+    method with augmented multipliers and De Saxce projection. """
     return self.set("add_basic_contact_brick", varname_u, multname_n, multname_t, *args)
 
 
@@ -3484,8 +3953,8 @@ class Model:
     return self.set("contact_brick_set_BT", indbrick, BT)
 
 
-  def add_contact_with_rigid_obstacle_brick(self, mim, varname_u, multname_n, multname_t=None, *args):
-    """Synopsis: ind = Model.add_contact_with_rigid_obstacle_brick(self,  MeshIm mim, string varname_u, string multname_n[, string multname_t], string dataname_r[, string dataname_friction_coeff], int region, string obstacle[,  int symmetrized])
+  def add_nodal_contact_with_rigid_obstacle_brick(self, mim, varname_u, multname_n, multname_t=None, *args):
+    """Synopsis: ind = Model.add_nodal_contact_with_rigid_obstacle_brick(self,  MeshIm mim, string varname_u, string multname_n[, string multname_t], string dataname_r[, string dataname_friction_coeff], int region, string obstacle[,  int augmented_version])
 
     Add a contact with or without friction condition with a rigid obstacle
     to the model. The condition is applied on the variable `varname_u`
@@ -3493,28 +3962,108 @@ class Model:
     be described with the string `obstacle` being a signed distance to
     the obstacle. This string should be an expression where the coordinates
     are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
-    obstacle correspond to :math:`z \\le 0`, the corresponding signed distance will
-    be simply "z". `multname_n` should be a fixed size variable whose size is
-    the number of degrees of freedom on boundary `region`. It represent the
+    obstacle correspond to :math:`z \\le 0`, the corresponding signed distance
+    will be simply "z". `multname_n` should be a fixed size variable whose size
+    is the number of degrees of freedom on boundary `region`. It represents the
     contact equivalent nodal forces. In order to add a friction condition
     one has to add the `multname_t` and `dataname_friction_coeff` parameters.
     `multname_t` should be a fixed size variable whose size is
-    the number of degrees of freedom on boundary `region` multiplied by :math:`d-1`
-    where :math:`d` is the domain dimension. It represent the friction equivalent
-    nodal forces.
+    the number of degrees of freedom on boundary `region` multiplied by
+    :math:`d-1` where :math:`d` is the domain dimension. It represents
+    the friction equivalent nodal forces.
     The augmentation parameter `r` should be chosen in a
     range of acceptabe values (close to the Young modulus of the elastic
     body, see Getfem user documentation).  `dataname_friction_coeff` is
     the friction coefficient. It could be a scalar or a vector of values
-    representing the friction coefficient on each contact node. The
-    parameter `symmetrized` indicates that the symmetry of the tangent
-    matrix will be kept or not. Basically, this brick compute the matrix BN
+    representing the friction coefficient on each contact node. 
+    The parameter `augmented_version`
+    indicates the augmentation strategy : 1 for the non-symmetric
+    Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+    the coupling between contact and Coulomb friction),
+    3 for the new unsymmetric method.
+    Basically, this brick compute the matrix BN
     and the vectors gap and alpha and calls the basic contact brick. """
+    return self.set("add_nodal_contact_with_rigid_obstacle_brick", mim, varname_u, multname_n, multname_t, *args)
+
+
+  def add_contact_with_rigid_obstacle_brick(self, mim, varname_u, multname_n, multname_t=None, *args):
+    """Synopsis: ind = Model.add_contact_with_rigid_obstacle_brick(self,  MeshIm mim, string varname_u, string multname_n[, string multname_t], string dataname_r[, string dataname_friction_coeff], int region, string obstacle[,  int augmented_version])
+
+    DEPRECATED FUNCTION. Use 'add nodal contact with rigid obstacle brick' instead."""
     return self.set("add_contact_with_rigid_obstacle_brick", mim, varname_u, multname_n, multname_t, *args)
 
 
-  def add_nonmatching_meshes_contact_brick(self, mim1, mim2=None, *args):
-    """Synopsis: ind = Model.add_nonmatching_meshes_contact_brick(self,  MeshIm mim1[, MeshIm mim2], string varname_u1[, string varname_u2], string multname_n[, string multname_t], string dataname_r[, string dataname_fr], int rg1, int rg2[, int slave1, int slave2,  int symmetrized])
+  def add_integral_contact_with_rigid_obstacle_brick(self, mim, varname_u, multname, dataname_obstacle, dataname_r, dataname_friction_coeff=None, *args):
+    """Synopsis: ind = Model.add_integral_contact_with_rigid_obstacle_brick(self,  MeshIm mim, string varname_u, string multname, string dataname_obstacle, string dataname_r [, string dataname_friction_coeff], int region [, int option [, string dataname_alpha [, string dataname_wt [, string dataname_gamma [, string dataname_vt]]]]])
+
+    Add a contact with or without friction condition with a rigid obstacle
+    to the model. This brick adds a contact which is defined
+    in an integral way. It is the direct approximation of an augmented
+    Lagrangian formulation (see Getfem user documentation) defined at the
+    continuous level. The advantage is a better scalability: the number of
+    Newton iterations should be more or less independent of the mesh size.
+    The contact condition is applied on the variable `varname_u`
+    on the boundary corresponding to `region`. The rigid obstacle should
+    be described with the data `dataname_obstacle` being a signed distance to
+    the obstacle (interpolated on a finite element method).
+    `multname` should be a fem variable representing the contact stress.
+    An inf-sup condition beetween `multname` and `varname_u` is required.
+    The augmentation parameter `dataname_r` should be chosen in a
+    range of acceptabe values.
+    The optional parameter `dataname_friction_coeff` is the friction
+    coefficient which could be constant or defined on a finite element method.
+    Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+    augmented Lagrangian method, 2 for the symmetric one, 3 for the
+    non-symmetric Alart-Curnier method with an additional augmentation
+    and 4 for a new unsymmetric method. The default value is 1.
+    In case of contact with friction, `dataname_alpha` and `dataname_wt`
+    are optional parameters to solve evolutionary friction problems.
+    `dataname_gamma` and `dataname_vt` represent optional data for adding
+    a parameter-dependent sliding velocity to the friction condition.
+    """
+    return self.set("add_integral_contact_with_rigid_obstacle_brick", mim, varname_u, multname, dataname_obstacle, dataname_r, dataname_friction_coeff, *args)
+
+
+  def add_penalized_contact_with_rigid_obstacle_brick(self, mim, varname_u, dataname_obstacle, dataname_r, dataname_coeff=None, *args):
+    """Synopsis: ind = Model.add_penalized_contact_with_rigid_obstacle_brick(self,  MeshIm mim, string varname_u, string dataname_obstacle, string dataname_r [, string dataname_coeff], int region [, int option, string dataname_lambda, [, string dataname_alpha [, string dataname_wt]]])
+
+    Add a penalized contact with or without friction condition with a
+    rigid obstacle to the model.
+    The condition is applied on the variable `varname_u`
+    on the boundary corresponding to `region`. The rigid obstacle should
+    be described with the data `dataname_obstacle` being a signed distance to
+    the obstacle (interpolated on a finite element method).
+    The penalization parameter `dataname_r` should be chosen
+    large enough to prescribe approximate non-penetration and friction
+    conditions but not too large not to deteriorate too much the
+    conditionning of the tangent system.
+    `dataname_lambda` is an optional parameter used if option
+    is 2. In that case, the penalization term is shifted by lambda (this
+    allows the use of an Uzawa algorithm on the corresponding augmented
+    Lagrangian formulation)
+    """
+    return self.set("add_penalized_contact_with_rigid_obstacle_brick", mim, varname_u, dataname_obstacle, dataname_r, dataname_coeff, *args)
+
+
+  def add_Nitsche_contact_with_rigid_obstacle_brick(self, mim, varname_u, dataname_obstacle, dataname_r, dataname_friction_coeff, dataname_lambda, dataname_mu, region):
+    """Add a contact with friction condition with a rigid obstacle
+    to the model with  Nitsche strategy (no multiplier) in an integral way.
+    This is an experimental brick, which works only for linear homogeneous
+    isotropic elasticity.
+    The condition is applied on the variable `varname_u`
+    on the boundary corresponding to `region`. The rigid obstacle should
+    be described with the data `dataname_obstacle` being a signed distance
+    to the obstacle (interpolated on a finite element method).
+    The Nitsche parameter `dataname_r` should be chosen in a
+    range of acceptable values. `dataname_friction_coeff` is the friction
+    coefficient which could be constant or defined on a finite element
+    method. `dataname_lambda` and `dataname_mu` are the Lame coefficients.
+    """
+    return self.set("add_Nitsche_contact_with_rigid_obstacle_brick", mim, varname_u, dataname_obstacle, dataname_r, dataname_friction_coeff, dataname_lambda, dataname_mu, region)
+
+
+  def add_nodal_contact_between_nonmatching_meshes_brick(self, mim1, mim2=None, *args):
+    """Synopsis: ind = Model.add_nodal_contact_between_nonmatching_meshes_brick(self,  MeshIm mim1[, MeshIm mim2], string varname_u1[, string varname_u2], string multname_n[, string multname_t], string dataname_r[, string dataname_fr], int rg1, int rg2[, int slave1, int slave2,  int augmented_version])
 
     Add a contact with or without friction condition between two faces of
     one or two elastic bodies. The condition is applied on the variable
@@ -3539,13 +4088,113 @@ class Model:
     and `rg2` are correspondingly considered as "slaves". By default
     `slave1` is true and `slave2` is false, i.e. `rg1` contains the slave
     surfaces, while 'rg2' the master surfaces. Preferrably only one of
-    `slave1` and `slave2` is set to true. The parameter `symmetrized`
-    indicates that the symmetry of the tangent matrix will be kept or not.
+    `slave1` and `slave2` is set to true.  The parameter `augmented_version`
+    indicates the augmentation strategy : 1 for the non-symmetric
+    Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+    the coupling between contact and Coulomb friction),
+    3 for the new unsymmetric method.
     Basically, this brick computes the matrices BN and BT and the vectors
     gap and alpha and calls the basic contact brick. """
+    return self.set("add_nodal_contact_between_nonmatching_meshes_brick", mim1, mim2, *args)
+
+
+  def add_nonmatching_meshes_contact_brick(self, mim1, mim2=None, *args):
+    """Synopsis: ind = Model.add_nonmatching_meshes_contact_brick(self,  MeshIm mim1[, MeshIm mim2], string varname_u1[, string varname_u2], string multname_n[, string multname_t], string dataname_r[, string dataname_fr], int rg1, int rg2[, int slave1, int slave2,  int augmented_version])
+
+    DEPRECATED FUNCTION. Use 'add nodal contact between nonmatching meshes brick' instead."""
     return self.set("add_nonmatching_meshes_contact_brick", mim1, mim2, *args)
 
 
+  def add_integral_contact_between_nonmatching_meshes_brick(self, mim, varname_u1, varname_u2, multname, dataname_r, dataname_friction_coeff=None, *args):
+    """Synopsis: ind = Model.add_integral_contact_between_nonmatching_meshes_brick(self,  MeshIm mim, string varname_u1, string varname_u2, string multname, string dataname_r [, string dataname_friction_coeff], int region1, int region2 [, int option [, string dataname_alpha [, string dataname_wt1 , string dataname_wt2]]])
+
+    Add a contact with or without friction condition between nonmatching
+    meshes to the model. This brick adds a contact which is defined
+    in an integral way. It is the direct approximation of an augmented
+    agrangian formulation (see Getfem user documentation) defined at the
+    continuous level. The advantage should be a better scalability:
+    the number of Newton iterations should be more or less independent
+    of the mesh size.
+    The condition is applied on the variables `varname_u1` and `varname_u2`
+    on the boundaries corresponding to `region1` and `region2`.
+    `multname` should be a fem variable representing the contact stress
+    for the frictionless case and the contact and friction stress for the
+    case with friction. An inf-sup condition between `multname` and
+    `varname_u1` and `varname_u2` is required.
+    The augmentation parameter `dataname_r` should be chosen in a
+    range of acceptable values.
+    The optional parameter `dataname_friction_coeff` is the friction
+    coefficient which could be constant or defined on a finite element
+    method on the same mesh as `varname_u1`.
+    Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+    augmented Lagrangian method, 2 for the symmetric one, 3 for the
+    non-symmetric Alart-Curnier method with an additional augmentation
+    and 4 for a new unsymmetric method. The default value is 1.
+    In case of contact with friction, `dataname_alpha`, `dataname_wt1` and
+    `dataname_wt2` are optional parameters to solve evolutionary friction
+    problems.
+    """
+    return self.set("add_integral_contact_between_nonmatching_meshes_brick", mim, varname_u1, varname_u2, multname, dataname_r, dataname_friction_coeff, *args)
+
+
+  def add_penalized_contact_between_nonmatching_meshes_brick(self, mim, varname_u1, varname_u2, dataname_r, dataname_coeff=None, *args):
+    """Synopsis: ind = Model.add_penalized_contact_between_nonmatching_meshes_brick(self,  MeshIm mim, string varname_u1, string varname_u2, string dataname_r [, string dataname_coeff], int region1, int region2 [, int option [, string dataname_lambda, [, string dataname_alpha [, string dataname_wt1, string dataname_wt2]]]])
+
+    Add a penalized contact condition with or without friction between
+    nonmatching meshes to the model.
+    The condition is applied on the variables `varname_u1` and  `varname_u2`
+    on the boundaries corresponding to `region1` and `region2`.
+    The penalization parameter `dataname_r` should be chosen
+    large enough to prescribe approximate non-penetration and friction
+    conditions but not too large not to deteriorate too much the
+    conditionning of the tangent system.
+    The optional parameter `dataname_friction_coeff` is the friction
+    coefficient which could be constant or defined on a finite element
+    method on the same mesh as `varname_u1`.
+    `dataname_lambda` is an optional parameter used if option
+    is 2. In that case, the penalization term is shifted by lambda (this
+    allows the use of an Uzawa algorithm on the corresponding augmented
+    Lagrangian formulation)
+    In case of contact with friction, `dataname_alpha`, `dataname_wt1` and
+    `dataname_wt2` are optional parameters to solve evolutionary friction
+    problems.
+    """
+    return self.set("add_penalized_contact_between_nonmatching_meshes_brick", mim, varname_u1, varname_u2, dataname_r, dataname_coeff, *args)
+
+
+  def add_integral_large_sliding_contact_brick(self, mim, varname_u, multname, dataname_r, dataname_fr, rg):
+    """(still experimental brick)
+    Add a large sliding contact with friction brick to the model.
+    This brick is able to deal with auto-contact, contact between
+    several deformable bodies and contact with rigid obstacles.
+    The condition is applied on the variable `varname_u` on the
+    boundary corresponding to `region`. `dataname_r` is the augmentation
+    parameter of the augmented Lagrangian. `dataname_friction_coeff`
+    is the friction coefficient. `mim` is an integration method on the
+    boundary. `varname_u` is the variable on which the contact condition 
+    will be prescribed (should be of displacement type). `multname` is 
+    a multiplier defined on the boundary which will represent the contact
+    force. If no additional boundary or rigid
+    obstacle is added, only auto-contact will be detected. Use
+    `add_boundary_to_large_sliding_contact_brick` and
+    `add_rigid_obstacle_to_large_sliding_contact_brick` to add contact
+    boundaries and rigid obstacles. """
+    return self.set("add_integral_large_sliding_contact_brick", mim, varname_u, multname, dataname_r, dataname_fr, rg)
+
+
+  def add_boundary_to_large_sliding_contact_brick(self, indbrick, mim, varname_u, multname, rg):
+    """Add a contact boundary to an existing large sliding contact brick.
+    indbrick` is the brick index. """
+    return self.set("add_boundary_to_large_sliding_contact_brick", indbrick, mim, varname_u, multname, rg)
+
+
+  def add_rigid_obstacle_to_large_sliding_contact_brick(self, indbrick, obs):
+    """Add a rigid obstacle to an existing large sliding contact brick.
+    indbrick` is the brick index, `obs` is the expression of a
+    unction which should be closed to a signed distance to the obstacle. """
+    return self.set("add_rigid_obstacle_to_large_sliding_contact_brick", indbrick, obs)
+
+
 #
 # GetFEM class Precond definition.
 #
@@ -3714,7 +4363,7 @@ class Slice:
     
     * ('isovalues', int orient, MeshFem mf, vec U, scalar s) :
       Cut using the isosurface of the field `U` (defined on the MeshFem `mf`).
-      The result is the set `{x such that `U`(x) <= `s`}` or `{x such that
+      The result is the set `{x such that :math:`U(x) \\leq s`}` or `{x such that
       `U`(x)=`s`}` or `{x such that `U`(x) >= `s`}` depending on the value of
       `orient`.
     
@@ -3724,8 +4373,8 @@ class Slice:
       considered (i.e. it is equivalent to ('boundary',{'none'})).
     
     * ('explode', mat Coef) :
-      Build an 'exploded' view of the mesh: each convex is shrinked (0 <
-      `Coef` <= 1). In the case of 3D convexes, only their faces are kept.
+      Build an 'exploded' view of the mesh: each convex is shrinked (:math:`0 <
+      \\text{Coef} \\leq 1`). In the case of 3D convexes, only their faces are kept.
     
     * ('union', SLICEOP1, SLICEOP2) :
       Returns the union of slicing operations.
@@ -4244,12 +4893,38 @@ class Spmat:
 #
 
 
-def asm_mass_matrix(mim, mf1, mf2=None):
-  """Assembly of a mass matrix.
+def asm_mass_matrix(mim, mf1, mf2=None, *args):
+  """Synopsis: M = asm_mass_matrix(MeshIm mim, MeshFem mf1[, MeshFem mf2[, boundary_num]])
+
+  Assembly of a mass matrix.
+  
+  Return a SpMat object.
+  """
+  return getfem('asm', 'mass_matrix', mim, mf1, mf2, *args)
+
+
+def asm_lsneuman_matrix(mim, mf1, mf2, ls):
+  """Assembly of a level set Neuman  matrix.
+  
+  Return a SpMat object.
+  """
+  return getfem('asm', 'lsneuman_matrix', mim, mf1, mf2, ls)
+
+
+def asm_nlsgrad_matrix(mim, mf1, mf2, ls):
+  """Assembly of a nlsgrad matrix.
+  
+  Return a SpMat object.
+  """
+  return getfem('asm', 'nlsgrad_matrix', mim, mf1, mf2, ls)
+
+
+def asm_stabilization_patch_matrix(mesh, mf, mim, ratio, h):
+  """Assembly of stabilization patch matrix .
   
   Return a SpMat object.
   """
-  return getfem('asm', 'mass_matrix', mim, mf1, mf2)
+  return getfem('asm', 'stabilization_patch_matrix', mesh, mf, mim, ratio, h)
 
 
 def asm_laplacian(mim, mf_u, mf_d, a):
@@ -4280,29 +4955,29 @@ def asm_nonlinear_elasticity(mim, mf_u, U, law, mf_d, params, *args):
   
   The solution `U` is required at the current time-step. The `law`
   may be choosen among:
-   
-   - 'SaintVenant Kirchhoff':
-     Linearized law, should be avoided). This law has the two usual
-     Lame coefficients as parameters, called lambda and mu.
-   - 'Mooney Rivlin':
-     Only for incompressibility. This law has two parameters,
-     called C1 and C2.
-   - 'Ciarlet Geymonat':
-     This law has 3 parameters, called lambda, mu and gamma, with
-     gamma chosen such that gamma is in ]-lambda/2-mu, -mu[.
   
-  The parameters of the material law are described on the MeshFem `mf_d`.
-  The matrix `params` should have `nbdof(mf_d)` columns, each row
-  correspounds to a parameter.
+  - 'SaintVenant Kirchhoff':
+  Linearized law, should be avoided). This law has the two usual
+  Lame coefficients as parameters, called lambda and mu.
+  - 'Mooney Rivlin':
+  Only for incompressibility. This law has two parameters,
+  called C1 and C2.
+  - 'Ciarlet Geymonat':
+  This law has 3 parameters, called lambda, mu and gamma, with
+  gamma chosen such that gamma is in ]-lambda/2-mu, -mu[.
   
-  The last argument selects what is to be built: either the tangent
-  matrix, or the right hand side. If the incompressibility is
-  considered, it should be followed by a MeshFem `mf_p`, for the
-  pression.
+  Te parameters of the material law are described on the MeshFem `mf_d`.
+  Te matrix `params` should have `nbdof(mf_d)` columns, each row
+  crrespounds to a parameter.
   
-  Return a SpMat object (tangent matrix), vec object (right hand
-  side), tuple of SpMat objects (incompressible tangent matrix), or
-  tuple of vec objects (incompressible right hand side).
+  Te last argument selects what is to be built: either the tangent
+  mtrix, or the right hand side. If the incompressibility is
+  cnsidered, it should be followed by a MeshFem `mf_p`, for the
+  pession.
+  
+  Rturn a SpMat object (tangent matrix), vec object (right hand
+  sde), tuple of SpMat objects (incompressible tangent matrix), or
+  tple of vec objects (incompressible right hand side).
   """
   return getfem('asm', 'nonlinear_elasticity', mim, mf_u, U, law, mf_d, params, *args)
 
@@ -4344,6 +5019,16 @@ def asm_bilaplacian(mim, mf_u, mf_d, a):
   return getfem('asm', 'bilaplacian', mim, mf_u, mf_d, a)
 
 
+def asm_bilaplacian_KL(mim, mf_u, mf_d, a, nu):
+  """Assembly of the matrix for the Bilaplacian problem with Kirchoff-Love formulation.
+  
+  :math:`\\Delta(a(x)\\Delta u) = 0`   with `a` scalar.
+  
+  Return a SpMat object.
+  """
+  return getfem('asm', 'bilaplacian_KL', mim, mf_u, mf_d, a, nu)
+
+
 def asm_volumic_source(mim, mf_u, mf_d, fd):
   """Assembly of a volumic source term.
   
@@ -4466,6 +5151,29 @@ def asm_extrapolation_matrix(mf, mfe):
   """
   return getfem('asm', 'extrapolation_matrix', mf, mfe)
 
+
+def asm_integral_contact_Uzawa_projection(bnum, mim, mf_u, U, mf_lambda, vec_lambda, mf_obstacle, obstacle, r, *args):
+  """Synopsis: B = asm_integral_contact_Uzawa_projection(int bnum, MeshIm mim, MeshFem mf_u, vec U, MeshFem mf_lambda, vec vec_lambda, MeshFem mf_obstacle, vec obstacle, scalar r [, {scalar coeff | MeshFem mf_coeff, vec coeff} [, int option[, scalar alpha, vec W]]])
+
+  Specific assembly procedure for the use of an Uzawa algorithm to solve
+    contact problems. Projects the term $-(\\lambda - r (u_N-g))_-$ on the
+    finite element space of $\\lambda$.
+  
+  Return a vec object.
+  """
+  return getfem('asm', 'integral_contact_Uzawa_projection', bnum, mim, mf_u, U, mf_lambda, vec_lambda, mf_obstacle, obstacle, r, *args)
+
+
+def asm_level_set_normal_source_term(bnum, mim, mf_u, mf_lambda, vec_lambda, mf_levelset, levelset):
+  """Performs an assembly of the source term represented by `vec_lambda`
+  on `mf_lambda` considered to be a component in the direction of the
+  gradient of a levelset function (normal to the levelset) of a vector
+  field defined on `mf_u` on the boundary `bnum`.
+  
+  Return a vec object.
+  """
+  return getfem('asm', 'level_set_normal_source_term', bnum, mim, mf_u, mf_lambda, vec_lambda, mf_levelset, levelset)
+
 #
 # compute module
 #
@@ -4479,6 +5187,14 @@ def compute_L2_norm(MF, U, mim, CVids=None):
   return getfem('compute', MF, U, 'L2_norm', mim, CVids)
 
 
+def compute_L2_dist(MF, U, mim, mf2, U2, CVids=None):
+  """Compute the L2 distance between `U` and `U2`.
+  
+  If `CVids` is given, the norm will be computed only on the listed
+  convexes."""
+  return getfem('compute', MF, U, 'L2_dist', mim, mf2, U2, CVids)
+
+
 def compute_H1_semi_norm(MF, U, mim, CVids=None):
   """Compute the L2 norm of grad(`U`).
   
@@ -4487,6 +5203,14 @@ def compute_H1_semi_norm(MF, U, mim, CVids=None):
   return getfem('compute', MF, U, 'H1_semi_norm', mim, CVids)
 
 
+def compute_H1_semi_dist(MF, U, mim, mf2, U2, CVids=None):
+  """Compute the semi H1 distance between `U` and `U2`.
+  
+  If `CVids` is given, the norm will be computed only on the listed
+  convexes."""
+  return getfem('compute', MF, U, 'H1_semi_dist', mim, mf2, U2, CVids)
+
+
 def compute_H1_norm(MF, U, mim, CVids=None):
   """Compute the H1 norm of `U`.
   
@@ -4554,9 +5278,9 @@ def compute_eval_on_triangulated_surface(MF, U, Nrefine, CVLIST=None):
 
 
 def compute_interpolate_on(MF, U, *args):
-  """Synopsis: Ui = compute_interpolate_on(MeshFem MF, vec U, {MeshFem mfi | Slice sli})
+  """Synopsis: Ui = compute_interpolate_on(MeshFem MF, vec U, {MeshFem mfi | Slice sli | vec pts})
 
-  Interpolate a field on another MeshFem or a Slice.
+  Interpolate a field on another MeshFem or a Slice or a list of points.
   
   - Interpolation on another MeshFem `mfi`:
      `mfi` has to be Lagrangian. If `mf` and `mfi` share the same
@@ -4566,6 +5290,7 @@ def compute_interpolate_on(MF, U, *args):
      mesh, but it is much faster. This can also be used with
      Slice('points') to obtain field values at a given set of
      points.
+  - Interpolation on a set of points `pts`
   
   See also gf_asm('interpolation matrix')
   """
@@ -4718,18 +5443,20 @@ def util_load_matrix(FMT, FILENAME):
   return getfem('util', 'load_matrix', FMT, FILENAME)
 
 
-def util_trace_level(level):
+def util_trace_level(level=None):
   """Set the verbosity of some getfem++ routines.
   
   Typically the messages printed by the model bricks, 0 means no
-  trace message (default is 3)."""
+  trace message (default is 3). if no level is given,
+  the current trace level is returned. """
   return getfem('util', 'trace_level', level)
 
 
 def util_warning_level(level):
   """Filter the less important warnings displayed by getfem.
   
-  0 means no warnings, default level is 3."""
+  0 means no warnings, default level is 3. if no level is given,
+  the current warning level is returned. """
   return getfem('util', 'warning_level', level)
 
 
@@ -4753,7 +5480,8 @@ def util(what, *args):
 
 
 def factory(id):
-  t = ( CvStruct,
+  t = ( ContStruct,
+        CvStruct,
         Eltm,
         Fem,
         GeoTrans,
@@ -4766,6 +5494,7 @@ def factory(id):
         MeshFem,
         MeshIm,
         MeshLevelSet,
+        MesherObject,
         Model,
         Precond,
         Slice,
diff --git a/interface/src/python/getfem_python.c b/interface/src/python/getfem_python.c
index 809eb27..6459191 100644
--- a/interface/src/python/getfem_python.c
+++ b/interface/src/python/getfem_python.c
@@ -1,25 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//========================================================================
-//
-// Copyright (C) 2004-2010 Julien Pommier.
-//
-// This file is a part of GetFEM++
-//
-// GetFEM++ is free software; you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as
-// published by the Free Software Foundation; version 2.1 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 Lesser General Public License for more details.
-// You should have received a copy of the GNU Lesser General Public
-// License along with this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301,
-// USA.
-//
-//========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <Python.h>
 #include "numpy/arrayobject.h"
 #include "structmember.h"
@@ -675,7 +673,7 @@ getfem_env(PyObject *self, PyObject *args) {
     word_out = PyString_FromString("GetFEM++");
   }else if (strcmp(word_in,"copyright") == 0){
     word_out = PyString_FromString
-    ("2004-2010 Yves Renard, Julien Pommier");
+    ("2004-2012 Yves Renard, Julien Pommier");
   }else if (strcmp(word_in,"authors") == 0){
     word_out = PyString_FromString
     ("Yves Renard, Julien Pommier");
@@ -695,7 +693,7 @@ getfem_env(PyObject *self, PyObject *args) {
     word_out = PyString_FromString(GETFEM_PACKAGE_VERSION);
   }else if(strcmp(word_in,"version") == 0){
     word_out = PyString_FromString(GETFEM_VERSION);
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
   }else if(strcmp(word_in,"muParser") == 0){
     word_out = PyString_FromString("1");
 #endif
diff --git a/interface/src/python/setup.py.in b/interface/src/python/setup.py.in
index ebc2cf6..ec92237 100644
--- a/interface/src/python/setup.py.in
+++ b/interface/src/python/setup.py.in
@@ -15,12 +15,14 @@ npy_include_dir = numpy.get_include()
 # cclibopts = "../../../src/.libs/libgetfem.a".split()
 cclibopts = "".split() # getfem is explicitly added below
 cclibopts += '@LIBS@'.split()
+cclibopts += '@LDFLAGS@'.split()
 
-libnames = [l[2:] for l in cclibopts if l.startswith("-l")]
+libnames = ['getfemint','getfem']
+libnames += [l[2:] for l in cclibopts if l.startswith("-l")]
 libdirs  = [l[2:] for l in cclibopts if l.startswith("-L")]
 libdirs += [l for l in cclibopts if not l.startswith("-")]
 
-libnames += ['getfemint','getfem','stdc++','m']
+libnames += ['stdc++','m']
 libdirs = ['../.libs', '../../../src/.libs'] + libdirs
 for i in range(0,len(libdirs)):
     if (os.path.isfile(libdirs[i])):
diff --git a/interface/src/scilab/Makefile.am b/interface/src/scilab/Makefile.am
index a9bcf58..77edc67 100644
--- a/interface/src/scilab/Makefile.am
+++ b/interface/src/scilab/Makefile.am
@@ -55,28 +55,30 @@ EXTRA_DIST=builddoc.sce \
 	sci_getfem.iss \
 	makefile_builder.sce \
         demos/axrot_matrix.sci \
-        demos/check_all.sce \
-        demos/check_asm.sce \
-        demos/check_bricks.sce \
-        demos/check_fem.sce \
-        demos/check_geotrans.sce \
-        demos/check_integ.sce \
-        demos/check_interpolated_fem.sce \
-        demos/check_levelset.sce \
-        demos/check_mesh_fem.sce \
-        demos/check_oo.sce \
-        demos/check_plot.sce \
-        demos/check_slices.sce \
-        demos/check_solve.sce \
-        demos/check_spmat.sce \
-        demos/check_workspace.sce \
+        tests/unit_tests/check_all.sce \
+        tests/unit_tests/check_asm.sce \
+        tests/unit_tests/check_bricks.sce \
+        tests/unit_tests/check_fem.sce \
+        tests/unit_tests/check_geotrans.sce \
+        tests/unit_tests/check_integ.sce \
+        tests/unit_tests/check_interpolated_fem.sce \
+        tests/unit_tests/check_levelset.sce \
+        tests/unit_tests/check_mesh_fem.sce \
+        tests/unit_tests/check_oo.sce \
+        tests/unit_tests/check_plot.sce \
+        tests/unit_tests/check_slices.sce \
+        tests/unit_tests/check_solve.sce \
+        tests/unit_tests/check_spmat.sce \
+        tests/unit_tests/check_workspace.sce \
         demos/demo_bilaplacian.sce \
+        demos/demo_continuation.sce \
         demos/demo_convection_rotating_cavity.sce \
         demos/demo_crack.sce \
         demos/demo_fictitious_domains.sce \
         demos/demo_finallaplacian.sce \
         demos/demo_laplacian1D.sce \
         demos/demo_laplacian.sce \
+        demos/demo_mesh_generation.sce \
         demos/demo_mortar.sce \
         demos/demo_nonlinear_elasticity_anim.sce \
         demos/demo_nonlinear_elasticity.sce \
@@ -102,8 +104,8 @@ EXTRA_DIST=builddoc.sce \
         demos/demo_wave2D.sce \
         demos/demo_wave_equation.sce \
         demos/sci_getfem.dem.gateway.sce \
-        demos/test_argyris.sce \
-        demos/test_plasticity_new_brick.sce \
+        tests/unit_tests/test_argyris.sce \
+        tests/unit_tests/test_plasticity_new_brick.sce \
         demos/tutorial1.sce \
         demos/data/disc_P2_h0.5.mesh \
         demos/data/disc_P2_h1.mesh \
@@ -222,7 +224,6 @@ EXTRA_DIST=builddoc.sce \
         help/mml/step_by_step_eq4.mml \
         help/mml/step_by_step_eq5.mml \
         jar/scilab_en_US_help.jar \
-        jar/scilab_fr_FR_help.jar \
         macros/add_empty_bound.sci \
         macros/asserterr.sci \
         macros/assert_field.sci \
@@ -273,7 +274,7 @@ EXTRA_DIST=builddoc.sce \
         sci_gateway/c/cleaner.sce \
         sci_gateway/c/gfm_common.c \
         sci_gateway/c/gfm_common.h \
-        sci_gateway/c/gfm_scilab.c \
+        sci_gateway/c/gfm_scilab.cpp \
         sci_gateway/c/libscigetfem_c.c \
         sci_gateway/c/libscigetfem_c.so \
         sci_gateway/c/loader.sce \
diff --git a/interface/src/scilab/Makefile.in b/interface/src/scilab/Makefile.in
index 13d4123..7235a1b 100644
--- a/interface/src/scilab/Makefile.in
+++ b/interface/src/scilab/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -76,6 +76,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -94,6 +95,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -110,6 +112,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -174,6 +177,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -209,7 +213,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -266,28 +269,30 @@ EXTRA_DIST = builddoc.sce \
 	sci_getfem.iss \
 	makefile_builder.sce \
         demos/axrot_matrix.sci \
-        demos/check_all.sce \
-        demos/check_asm.sce \
-        demos/check_bricks.sce \
-        demos/check_fem.sce \
-        demos/check_geotrans.sce \
-        demos/check_integ.sce \
-        demos/check_interpolated_fem.sce \
-        demos/check_levelset.sce \
-        demos/check_mesh_fem.sce \
-        demos/check_oo.sce \
-        demos/check_plot.sce \
-        demos/check_slices.sce \
-        demos/check_solve.sce \
-        demos/check_spmat.sce \
-        demos/check_workspace.sce \
+        tests/unit_tests/check_all.sce \
+        tests/unit_tests/check_asm.sce \
+        tests/unit_tests/check_bricks.sce \
+        tests/unit_tests/check_fem.sce \
+        tests/unit_tests/check_geotrans.sce \
+        tests/unit_tests/check_integ.sce \
+        tests/unit_tests/check_interpolated_fem.sce \
+        tests/unit_tests/check_levelset.sce \
+        tests/unit_tests/check_mesh_fem.sce \
+        tests/unit_tests/check_oo.sce \
+        tests/unit_tests/check_plot.sce \
+        tests/unit_tests/check_slices.sce \
+        tests/unit_tests/check_solve.sce \
+        tests/unit_tests/check_spmat.sce \
+        tests/unit_tests/check_workspace.sce \
         demos/demo_bilaplacian.sce \
+        demos/demo_continuation.sce \
         demos/demo_convection_rotating_cavity.sce \
         demos/demo_crack.sce \
         demos/demo_fictitious_domains.sce \
         demos/demo_finallaplacian.sce \
         demos/demo_laplacian1D.sce \
         demos/demo_laplacian.sce \
+        demos/demo_mesh_generation.sce \
         demos/demo_mortar.sce \
         demos/demo_nonlinear_elasticity_anim.sce \
         demos/demo_nonlinear_elasticity.sce \
@@ -313,8 +318,8 @@ EXTRA_DIST = builddoc.sce \
         demos/demo_wave2D.sce \
         demos/demo_wave_equation.sce \
         demos/sci_getfem.dem.gateway.sce \
-        demos/test_argyris.sce \
-        demos/test_plasticity_new_brick.sce \
+        tests/unit_tests/test_argyris.sce \
+        tests/unit_tests/test_plasticity_new_brick.sce \
         demos/tutorial1.sce \
         demos/data/disc_P2_h0.5.mesh \
         demos/data/disc_P2_h1.mesh \
@@ -433,7 +438,6 @@ EXTRA_DIST = builddoc.sce \
         help/mml/step_by_step_eq4.mml \
         help/mml/step_by_step_eq5.mml \
         jar/scilab_en_US_help.jar \
-        jar/scilab_fr_FR_help.jar \
         macros/add_empty_bound.sci \
         macros/asserterr.sci \
         macros/assert_field.sci \
@@ -484,7 +488,7 @@ EXTRA_DIST = builddoc.sce \
         sci_gateway/c/cleaner.sce \
         sci_gateway/c/gfm_common.c \
         sci_gateway/c/gfm_common.h \
-        sci_gateway/c/gfm_scilab.c \
+        sci_gateway/c/gfm_scilab.cpp \
         sci_gateway/c/libscigetfem_c.c \
         sci_gateway/c/libscigetfem_c.so \
         sci_gateway/c/loader.sce \
@@ -692,10 +696,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/interface/src/scilab/builder.sce b/interface/src/scilab/builder.sce
index aa14a9a..d6a4be5 100644
--- a/interface/src/scilab/builder.sce
+++ b/interface/src/scilab/builder.sce
@@ -8,11 +8,10 @@ lines(0);
 try
  v = getversion('scilab');
 catch
- error(gettext('Scilab 5.2 or more is required.'));  
+ error(gettext('Scilab 5.3.x or more is required.'));  
 end;
-if v(2) < 2 then
- // new API in scilab 5.2
- error(gettext('Scilab 5.2 or more is required.'));  
+if v(2) < 3 then
+ error(gettext('Scilab 5.3.x or more is required.'));  
 end
 // ====================================================================
 if ~with_module('development_tools') then
@@ -24,6 +23,11 @@ TOOLBOX_TITLE = 'SciGetFem';
 // ====================================================================
 toolbox_dir = get_absolute_file_path('builder.sce');
 
+// Under Windows, configure is not launched.
+if getos()=='Windows' then
+  copyfile(pwd() + '/sci_gateway/c/builder_gateway_c.sce.in',pwd() + '/sci_gateway/c/builder_gateway_c.sce');
+end
+
 tbx_builder_macros(toolbox_dir);
 tbx_builder_src(toolbox_dir);
 tbx_builder_gateway(toolbox_dir);
diff --git a/interface/src/scilab/cleaner.sce b/interface/src/scilab/cleaner.sce
index 9fad440..685f06e 100644
--- a/interface/src/scilab/cleaner.sce
+++ b/interface/src/scilab/cleaner.sce
@@ -1,32 +1,34 @@
-// ====================================================================
-// generated by builder.sce
-// Copyright DIGITEO 2009
-// ====================================================================
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
+// Generated by builder.sce: Please, do not edit this file
+
 try
- getversion('scilab');
+    getversion("scilab");
 catch
- warning('Scilab 5.0 or more is required.');
- return;
-end;
-// ====================================================================
-root_tlbx = get_absolute_file_path('cleaner.sce');
-
-if fileinfo(root_tlbx+'/macros/cleanmacros.sce') <> [] then
-  exec(root_tlbx+'/macros/cleanmacros.sce');
+    error("Scilab 5.0 or more is required.");
 end
+function perform_clean()
+    root_tlbx = get_absolute_file_path('cleaner.sce');
 
-if fileinfo(root_tlbx+'/src/cleaner_src.sce') <> [] then
-  exec(root_tlbx+'/src/cleaner_src.sce');
-end
+    if isfile(root_tlbx + '/macros/cleanmacros.sce') then
+        exec(root_tlbx+'/macros/cleanmacros.sce');
+    end
 
-if fileinfo(root_tlbx+'/sci_gateway/cleaner_gateway.sce') <> [] then
-  exec(root_tlbx+'/sci_gateway/cleaner_gateway.sce');
-  mdelete(root_tlbx+'/sci_gateway/cleaner_gateway.sce');
-end
+    if isfile(root_tlbx + '/src/cleaner_src.sce') then
+        exec(root_tlbx+'/src/cleaner_src.sce');
+    end
 
-if fileinfo(root_tlbx+'/loader.sce') <> [] then
-  mdelete(root_tlbx+'/loader.sce');
-end
-// ====================================================================
-clear root_tlbx;
-// ====================================================================
+    if isfile(root_tlbx + "/sci_gateway/cleaner_gateway.sce") then
+        exec(root_tlbx + "/sci_gateway/cleaner_gateway.sce");
+        mdelete(root_tlbx + "/sci_gateway/cleaner_gateway.sce");
+     end
+
+    if isfile(root_tlbx + "/help/cleaner_help.sce") then
+        exec(root_tlbx + "/help/cleaner_help.sce");
+    end
+
+    if isfile(root_tlbx + "/loader.sce") then
+        mdelete(root_tlbx + "/loader.sce");
+    end
+endfunction
+perform_clean();
+clear perform_clean;
diff --git a/interface/src/scilab/demos/data/disc_P2_h1.mesh b/interface/src/scilab/demos/data/disc_P2_h1.mesh
index 35b2731..90ef1cb 100644
--- a/interface/src/scilab/demos/data/disc_P2_h1.mesh
+++ b/interface/src/scilab/demos/data/disc_P2_h1.mesh
@@ -10,1392 +10,5654 @@ BEGIN POINTS LIST
   POINT  2  -20  20
   POINT  3  20  20
   POINT  4  0  40
-  POINT  5  -7.08999439411224  1.298877587388341
-  POINT  6  -5.282004223598042  0.7100950914239894
-  POINT  7  -3.47031521720064  0.3033781502190239
-  POINT  8  -1.689974063564663  0.07152821552843025
-  POINT  9  1.689960162663852  0.07152703670926773
-  POINT  10  3.470291113247503  0.3033739033986539
-  POINT  11  5.281972434142698  0.7100863867937268
-  POINT  12  7.089956578995546  1.298863250915369
-  POINT  13  -10.33788236531681  2.879013223504487
-  POINT  14  -8.728323343402396  2.005101511455367
-  POINT  15  -6.155723063676203  2.801434963065342
-  POINT  16  -4.091201195594828  2.459658715166061
-  POINT  17  -2.066659832781266  2.187655143712953
-  POINT  18  -4.444059962388502e-06  2.064287137447093
-  POINT  19  2.066650046418929  2.187657831466219
-  POINT  20  4.091191239691891  2.459658150301677
-  POINT  21  6.155715570419536  2.801429443148412
-  POINT  22  8.728292838334855  2.005086715177716
-  POINT  23  10.3378510065  2.878994288669519
-  POINT  24  -13.31700959313135  5.078295824654251
-  POINT  25  -11.8842697780299  3.913852796799773
-  POINT  26  -9.460448082417175  4.366488604800259
-  POINT  27  -7.512025315084293  4.126002865730436
-  POINT  28  -5.172892121816004  4.455275571417475
-  POINT  29  -3.057534701397881  4.267955770521298
-  POINT  30  -1.012355277947994  4.110780430542055
-  POINT  31  1.012349419089582  4.110782567666035
-  POINT  32  3.057529483199409  4.267957853121388
-  POINT  33  5.172886691584971  4.455272913530382
-  POINT  34  7.512016782430195  4.125998677146069
-  POINT  35  9.460436885249777  4.366480067235193
-  POINT  36  11.88424594459136  3.913835188943747
-  POINT  37  13.31698679929866  5.078275482126558
-  POINT  38  -14.7498830675396  6.492929647996144
-  POINT  39  -12.45509720824102  6.556537137387828
-  POINT  40  -10.6482491458674  5.948211070168938
-  POINT  41  -8.422109451390526  6.167912606077227
-  POINT  42  -6.353060403793894  6.112985632708121
-  POINT  43  -4.1407681774423  6.228053553808773
-  POINT  44  -2.044474263097546  6.130734213928414
-  POINT  45  -1.590000917432027e-06  6.079527809516725
-  POINT  46  2.044472146376001  6.130736081211611
-  POINT  47  4.140767470322072  6.22805374467435
-  POINT  48  6.353058937427791  6.112982734736828
-  POINT  49  8.422108492096564  6.167907314850485
-  POINT  50  10.64824854146091  5.948202934940974
-  POINT  51  12.45509688415863  6.556538659055924
-  POINT  52  14.74986960384593  6.492914945498344
-  POINT  53  -16.04355519086491  8.058294224118221
-  POINT  54  -13.74135223644284  8.192183278283656
-  POINT  55  -11.47752803375488  8.160729976898475
-  POINT  56  -9.493527168153337  7.92578225082361
-  POINT  57  -7.348476128284648  8.030483731407866
-  POINT  58  -5.251990097092846  8.021830105465815
-  POINT  59  -3.111403417400961  8.061569553457121
-  POINT  60  -1.03035566619991  8.025902010406856
-  POINT  61  1.030354767138576  8.025902400729668
-  POINT  62  3.111403710309801  8.061569941428463
-  POINT  63  5.251991017315566  8.021829123575905
-  POINT  64  7.348476568276788  8.030480163525478
-  POINT  65  9.49352663676625  7.92577656119784
-  POINT  66  11.47752506667806  8.160726192772536
-  POINT  67  13.74135116972482  8.192181839463158
-  POINT  68  16.04354708966182  8.058283340247721
-  POINT  69  -17.19580986241097  9.787060992258192
-  POINT  70  -14.93702314944201  9.823933424582281
-  POINT  71  -12.67351421081692  9.907845730886832
-  POINT  72  -10.48194789872941  9.921029402134767
-  POINT  73  -8.415247672061369  9.840575684874789
-  POINT  74  -6.293821461179366  9.890161035967978
-  POINT  75  -4.18979493172746  9.895564239362063
-  POINT  76  -2.081243704999238  9.916613908721169
-  POINT  77  5.730172508017217e-08  9.910960593168005
-  POINT  78  2.081244132593595  9.916613808527552
-  POINT  79  4.189795976700378  9.895563750716825
-  POINT  80  6.293822706796825  9.890159478467984
-  POINT  81  8.415248200245212  9.840572417227369
-  POINT  82  10.48194698614503  9.921026346494969
-  POINT  83  12.67351249301398  9.90784290415405
-  POINT  84  14.93702196401547  9.823930709655935
-  POINT  85  17.19580506925672  9.787052921897237
-  POINT  86  -18.1760415240729  11.65545001122227
-  POINT  87  -15.97553246064111  11.5448525408589
-  POINT  88  -13.78571642443011  11.61751913076442
-  POINT  89  -11.59628723826348  11.69602393958708
-  POINT  90  -9.442169657304916  11.7276271718398
-  POINT  91  -7.349624558628578  11.71151253389753
-  POINT  92  -5.24282073613147  11.73166174921223
-  POINT  93  -3.137905182843987  11.749161104766
-  POINT  94  -1.042556134226208  11.76547185321201
-  POINT  95  1.042556695466196  11.76547172930404
-  POINT  96  3.13790593838561  11.74916068398455
-  POINT  97  5.242821722657395  11.73166093775092
-  POINT  98  7.349625501825332  11.7115109952139
-  POINT  99  9.442169874348188  11.72762525690472
-  POINT  100  11.59628683371615  11.69602200942614
-  POINT  101  13.78571564810794  11.61751684765504
-  POINT  102  15.97553159279355  11.54484971825705
-  POINT  103  18.17603883633879  11.65544415682245
-  POINT  104  -18.9605397782243  13.63620150237337
-  POINT  105  -16.8378114819632  13.34701391345798
-  POINT  106  -14.74755920142683  13.39190264700377
-  POINT  107  -12.63015409928628  13.45515225576576
-  POINT  108  -10.4974158537763  13.51638952902862
-  POINT  109  -8.377087236386718  13.55137598391785
-  POINT  110  -6.285880485474346  13.5571522438029
-  POINT  111  -4.197964629953373  13.554499339371
-  POINT  112  -2.088214950681028  13.58585648886253
-  POINT  113  2.731150748891409e-07  13.59731244193799
-  POINT  114  2.088215540160786  13.58585624443037
-  POINT  115  4.197965288358211  13.55449885456938
-  POINT  116  6.285881219549023  13.55715142631005
-  POINT  117  8.377087797482492  13.5513749885778
-  POINT  118  10.49741609890272  13.51638838986579
-  POINT  119  12.63015411255437  13.45515089704564
-  POINT  120  14.74755900190871  13.3919008647022
-  POINT  121  16.83781104922592  13.34701152878708
-  POINT  122  18.96053842326367  13.63619746535554
-  POINT  123  -19.5357573624754  15.71582163367355
-  POINT  124  -17.53374306722162  15.20882267305824
-  POINT  125  -15.57069741754931  15.24451363995668
-  POINT  126  -13.55098734811856  15.27194090964616
-  POINT  127  -11.4874826074671  15.31182390849893
-  POINT  128  -9.398270307101383  15.3521915525082
-  POINT  129  -7.307964300837752  15.3807112166889
-  POINT  130  -5.231490199222396  15.39200882295255
-  POINT  131  -3.169152633696715  15.35291249391119
-  POINT  132  -1.041499472772248  15.40847695692984
-  POINT  133  1.041499922227459  15.40847686112553
-  POINT  134  3.169153095957357  15.35291225824823
-  POINT  135  5.231490717147384  15.39200836588829
-  POINT  136  7.307964797170775  15.38071066913708
-  POINT  137  9.398270745362067  15.35219096658757
-  POINT  138  11.48748296447435  15.31182320391143
-  POINT  139  13.55098760797554  15.27193995853761
-  POINT  140  15.57069756108526  15.24451232768288
-  POINT  141  17.5337430129703  15.20882089303506
-  POINT  142  19.53575681130713  15.71581912036011
-  POINT  143  -18.2269232082509  17.13021291903821
-  POINT  144  -16.40696619670878  17.17145148168169
-  POINT  145  -14.46503683750223  17.15281425943443
-  POINT  146  -12.45424174106675  17.15199836204197
-  POINT  147  -10.39981013664358  17.16515504075176
-  POINT  148  -8.328026293006795  17.18988295252257
-  POINT  149  -6.256758829896484  17.21190086556036
-  POINT  150  -4.196112455235621  17.22388615617422
-  POINT  151  -2.171217513306863  17.11254059462183
-  POINT  152  1.665915350806957e-07  17.22074676082319
-  POINT  153  2.171217828945217  17.1125405142267
-  POINT  154  4.19611284158213  17.22388591748381
-  POINT  155  6.256759233014987  17.21190057227975
-  POINT  156  8.32802671761999  17.18988265372117
-  POINT  157  10.39981059340922  17.16515474428726
-  POINT  158  12.45424219159261  17.15199799003971
-  POINT  159  14.46503723679426  17.15281363556374
-  POINT  160  16.40696659288819  17.17145057879611
-  POINT  161  18.22692352993353  17.13021164782587
-  POINT  162  -19.89780896458842  17.98079262859248
-  POINT  163  -17.84230000449807  19.0216744028301
-  POINT  164  -15.67627065513821  19.02313060013363
-  POINT  165  -13.55906626932976  19.0036025225671
-  POINT  166  -11.45548002657009  18.98870888881037
-  POINT  167  -9.365348057261556  18.99918972787285
-  POINT  168  -7.287998267664897  19.0218085635537
-  POINT  169  -5.225476971032742  19.04419029905378
-  POINT  170  -3.181207515747626  19.06061320124515
-  POINT  171  -1.234450813224698  18.81027364364246
-  POINT  172  1.234451001429794  18.8102736784703
-  POINT  173  3.181207777678578  19.06061305006857
-  POINT  174  5.225477302694968  19.04419014960234
-  POINT  175  7.287998656796332  19.02180842950959
-  POINT  176  9.365348511226138  18.99918964629332
-  POINT  177  11.45548052731511  18.98870888549819
-  POINT  178  13.55906673221513  19.00360248933783
-  POINT  179  15.6762709640833  19.02313030096059
-  POINT  180  17.84230024444024  19.02167396477342
-  POINT  181  19.89780885181004  17.98079151724459
-  POINT  182  -18.34809671121251  20.89054860233434
-  POINT  183  -16.5148528869666  20.87800710044906
-  POINT  184  -14.52694695679922  20.85426661015416
-  POINT  185  -12.45599638977427  20.8108810324845
-  POINT  186  -10.37011211347385  20.80605366101868
-  POINT  187  -8.288100923056527  20.82387931457176
-  POINT  188  -6.210897946834899  20.84807602452601
-  POINT  189  -4.130583790032196  20.86687448767059
-  POINT  190  -2.030932593701857  20.87063865748742
-  POINT  191  9.744431586633517e-08  21.64935021861394
-  POINT  192  2.030932751362846  20.87063857502341
-  POINT  193  4.130584013659444  20.86687431844705
-  POINT  194  6.210898346296974  20.84807594605767
-  POINT  195  8.288101445193462  20.82387932992417
-  POINT  196  10.37011274159265  20.80605382218947
-  POINT  197  12.45599711658471  20.8108813744629
-  POINT  198  14.52694762208812  20.85426702370534
-  POINT  199  16.51485331119099  20.87800725634424
-  POINT  200  18.348097009919  20.89054895986076
-  POINT  201  -19.88382274553589  22.15257822717576
-  POINT  202  -17.85872906553023  22.79187608979278
-  POINT  203  -15.75836820209814  22.71857538973881
-  POINT  204  -13.57945048306569  22.62787433244293
-  POINT  205  -11.43502337227142  22.60571660119635
-  POINT  206  -9.32896785495339  22.62172230713452
-  POINT  207  -7.252191943285577  22.65010775210676
-  POINT  208  -5.19352107545026  22.67271964550248
-  POINT  209  -3.145718127729072  22.67904520073677
-  POINT  210  -1.19802941618547  22.93488185752093
-  POINT  211  1.198029575535804  22.93488182516196
-  POINT  212  3.145718298303114  22.67904507452085
-  POINT  213  5.193521324838902  22.67271937177574
-  POINT  214  7.252192530636423  22.65010772431655
-  POINT  215  9.328968618053137  22.62172251326393
-  POINT  216  11.43502432491394  22.60571702295378
-  POINT  217  13.57945157268804  22.62787513308746
-  POINT  218  15.75836910518877  22.71857642015902
-  POINT  219  17.85872913941462  22.7918771500154
-  POINT  220  19.88382260621709  22.15257951409296
-  POINT  221  -19.56496589012501  24.14874796995999
-  POINT  222  -17.12378015908613  24.49263729810405
-  POINT  223  -14.75261366404331  24.36653106466741
-  POINT  224  -12.51545015644557  24.36405857012063
-  POINT  225  -10.36487612468117  24.40059700241373
-  POINT  226  -8.270782662155399  24.44922254990688
-  POINT  227  -6.207288303035652  24.48752518657241
-  POINT  228  -4.152672439085122  24.50430982838724
-  POINT  229  -2.144764510838116  24.6392641397031
-  POINT  230  6.736184551131563e-08  24.56637229685156
-  POINT  231  2.144764639428793  24.6392640566236
-  POINT  232  4.152672593221236  24.5043096033403
-  POINT  233  6.207288592802848  24.48752465778632
-  POINT  234  8.270783499471428  24.44922265688236
-  POINT  235  10.36487726829784  24.4005974184117
-  POINT  236  12.51545141239867  24.36405943508291
-  POINT  237  14.75261493047371  24.36653271363972
-  POINT  238  17.12378075459493  24.4926401834798
-  POINT  239  19.56496529523762  24.14875077537231
-  POINT  240  -19.08648829040304  25.9754468234863
-  POINT  241  -17.2845615037453  26.31014844212238
-  POINT  242  -15.41261905344529  26.10941999036963
-  POINT  243  -13.37179093546351  26.11632995430249
-  POINT  244  -11.29591265365937  26.16877399507631
-  POINT  245  -9.236109783161917  26.24563353410026
-  POINT  246  -7.197506282144635  26.30683884552605
-  POINT  247  -5.148124747507762  26.32635712487787
-  POINT  248  -3.122954853611116  26.40463970225008
-  POINT  249  -1.028840474391874  26.37582534616704
-  POINT  250  1.028840597301122  26.37582532979795
-  POINT  251  3.122954923639289  26.40463955141999
-  POINT  252  5.148124848876652  26.32635667877105
-  POINT  253  7.197506356103443  26.30683804371632
-  POINT  254  9.236111124219747  26.24563372506302
-  POINT  255  11.29591412227338  26.16877501716782
-  POINT  256  13.3717921011747  26.11633170886203
-  POINT  257  15.41261961645513  26.1094231779272
-  POINT  258  17.28456075910474  26.31015378144565
-  POINT  259  19.08648669351269  25.97545192419629
-  POINT  260  -18.31673994912508  28.03100477126815
-  POINT  261  -16.29279631468638  28.07734896422777
-  POINT  262  -14.29108105178232  27.93826211324394
-  POINT  263  -12.23205698562959  27.95454691920996
-  POINT  264  -10.1921242779246  28.04641052160824
-  POINT  265  -8.184908522052318  28.14581978804722
-  POINT  266  -6.142892720399755  28.15468429908139
-  POINT  267  -4.115765842832939  28.20978375998045
-  POINT  268  -2.044953225702631  28.19763670818671
-  POINT  269  1.215817429928157e-07  28.20528019734085
-  POINT  270  2.044953387448034  28.19763672758267
-  POINT  271  4.115765884875199  28.20978350344839
-  POINT  272  6.142892053295159  28.15468405294527
-  POINT  273  8.184908802060571  28.1458177672969
-  POINT  274  10.1921266003412  28.04641156253142
-  POINT  275  12.23205881411247  27.95454935528251
-  POINT  276  14.2910815778731  27.93826589300298
-  POINT  277  16.29279479603289  28.07735539177588
-  POINT  278  18.31673641698378  28.0310128272082
-  POINT  279  -17.36678064292307  29.91942186322351
-  POINT  280  -15.30701199611502  29.80163024565981
-  POINT  281  -13.1975126296105  29.73273604910611
-  POINT  282  -11.14232609374812  29.83834011557202
-  POINT  283  -9.18383040196667  30.00598319236085
-  POINT  284  -7.135586668146636  29.99761305864382
-  POINT  285  -5.123286168201119  30.04271988926355
-  POINT  286  -3.053121112865554  30.02630175178171
-  POINT  287  -1.015876570824747  30.05156154994286
-  POINT  288  1.015877381461083  30.05156170293002
-  POINT  289  3.053121697974701  30.02630185030043
-  POINT  290  5.123284228587577  30.0427213293883
-  POINT  291  7.135586245905698  29.99761060242232
-  POINT  292  9.183831168146963  30.00598031130402
-  POINT  293  11.14232972160493  29.83834373724195
-  POINT  294  13.19751369866922  29.73274161644041
-  POINT  295  15.30700948964564  29.80163858123015
-  POINT  296  17.36677404971316  29.91943340651388
-  POINT  297  -16.21450019303935  31.70854318392894
-  POINT  298  -14.18134842576247  31.46072633556853
-  POINT  299  -12.05433474215738  31.57807989769072
-  POINT  300  -10.18803390533311  31.90895778516169
-  POINT  301  -8.127827538982091  31.83562093362241
-  POINT  302  -6.132870312528693  31.91947084481104
-  POINT  303  -4.060514707104238  31.84886116654844
-  POINT  304  -2.023054298900899  31.90620457141977
-  POINT  305  1.779731685490338e-06  31.92616315841029
-  POINT  306  2.023057639192921  31.90620515692421
-  POINT  307  4.060510421402324  31.84886697474238
-  POINT  308  6.132869669181516  31.91946778705557
-  POINT  309  8.127827628663475  31.83561745950141
-  POINT  310  10.18803390203203  31.90895591912609
-  POINT  311  12.05433729770214  31.5780897141657
-  POINT  312  14.18134461110469  31.46073802168817
-  POINT  313  16.21448882325949  31.70855892928177
-  POINT  314  -14.85855987098478  33.38742688347396
-  POINT  315  -12.97622115412793  33.15231979037343
-  POINT  316  -11.24542238667929  33.84152597332419
-  POINT  317  -9.096796145803623  33.67355592311518
-  POINT  318  -7.169110863793735  33.81460869617811
-  POINT  319  -5.025802643706024  33.69074033624606
-  POINT  320  -3.036012504986613  33.74897677262599
-  POINT  321  -1.006001725651425  33.81394161048243
-  POINT  322  1.006017505359627  33.81394238106373
-  POINT  323  3.03600454008222  33.7489957057666
-  POINT  324  5.025801824829388  33.69073476359576
-  POINT  325  7.169110502599582  33.81460511144136
-  POINT  326  9.09679356939724  33.67355436459209
-  POINT  327  11.24541326548703  33.84153193558982
-  POINT  328  12.97621626240949  33.15233833055714
-  POINT  329  14.85854134665239  33.38744744340443
-  POINT  330  -13.24234864752243  34.98800194480442
-  POINT  331  -10.03539086910046  35.3828070140792
-  POINT  332  -8.191323309688949  35.8082238544771
-  POINT  333  -5.969442595277822  35.42728838548917
-  POINT  334  -3.964572821971675  35.68073227615353
-  POINT  335  -2.062446042804255  35.66361537576937
-  POINT  336  3.401394552337428e-05  35.7433135846511
-  POINT  337  2.062435708551036  35.66367717807774
-  POINT  338  3.96457676799794  35.68072163899399
-  POINT  339  5.969444351238414  35.42728363799607
-  POINT  340  8.19131937738778  35.80822453891639
-  POINT  341  10.03538306356879  35.38281277249126
-  POINT  342  13.2423188856883  34.98802824022632
-  POINT  343  -11.71964489363993  36.20647782730662
-  POINT  344  -9.885418518050601  37.38615830834937
-  POINT  345  -6.769213566269587  37.09871131951007
-  POINT  346  -4.834310082657146  37.45809613171494
-  POINT  347  -2.966207997229898  37.80957975457357
-  POINT  348  -1.228951401026502  37.50853541118494
-  POINT  349  1.228967413584314  37.50873516084056
-  POINT  350  2.966244431714553  37.80956888117363
-  POINT  351  4.834322604660215  37.45809313826081
-  POINT  352  6.769215951806145  37.09871058669637
-  POINT  353  9.885380262406448  37.38618005968161
-  POINT  354  11.71961051109886  36.20650269083999
-  POINT  355  -8.160801736293346  38.25928024378061
-  POINT  356  -6.108721403629119  39.04425169999729
-  POINT  357  -4.094025391529261  39.57648988183318
-  POINT  358  -2.032918826278168  39.89641276827972
-  POINT  359  -0.000114943787747096  38.55954134616952
-  POINT  360  2.032857647557499  39.89641901912924
-  POINT  361  4.093978133093873  39.57649976491602
-  POINT  362  6.108678764431183  39.04426537708952
-  POINT  363  8.16076002653128  38.25929888548312
-  POINT  364  19.74927974328947  16.84311090331085
-  POINT  365  19.06236619087178  17.55550158253523
-  POINT  366  18.88134017062033  16.42301538409299
-  POINT  367  18.87005454812514  18.50123274100901
-  POINT  368  18.92115012222012  19.51083698238671
-  POINT  369  19.97443587516672  18.98910375220634
-  POINT  370  18.03461188718688  18.07594280629964
-  POINT  371  -1.016516885032958  39.22797705722462
-  POINT  372  -1.017777998289471  39.97408640454459
-  POINT  373  -5.747189387354801e-05  39.27977067308476
-  POINT  374  1.016371351884876  39.22798018264938
-  POINT  375  1.017747548306818  39.9740879692846
-  POINT  376  2.499551039636026  38.85299395015144
-  POINT  377  3.530111282404213  38.69303432304483
-  POINT  378  3.067591411714378  39.76334698055007
-  POINT  379  -10.9924492306217  14.41410671876377
-  POINT  380  -10.44287645728424  15.33200773050357
-  POINT  381  -9.947843080438842  14.43429054076841
-  POINT  382  -12.05881835337669  14.38348808213234
-  POINT  383  -11.56378497653129  13.48577089239719
-  POINT  384  -19.1159597283742  21.52156341475505
-  POINT  385  -19.17404835560626  20.44527430116717
-  POINT  386  -19.97093456597552  21.07785567562136
-  POINT  387  18.53474991213871  15.46232000669758
-  POINT  388  18.24714071811698  14.4225091791953
-  POINT  389  19.27621315646036  14.66824556999596
-  POINT  390  17.88033327145191  16.16951627043046
-  POINT  391  -1.878316948172965  1.129591679620692
-  POINT  392  -2.768487524990953  1.245516646965989
-  POINT  393  -2.582747461702293  0.167465745146943
-  POINT  394  7.648469065631529  32.82511128547139
-  POINT  395  8.132952035998411  33.74407973801672
-  POINT  396  8.612310599030359  32.75458591204675
-  POINT  397  10.87749678733383  35.79465773166562
-  POINT  398  10.81858671612841  36.82136097977488
-  POINT  399  9.960381662987619  36.38449641608644
-  POINT  400  -11.96631262099795  7.358633557143151
-  POINT  401  -11.55167317705421  6.252374103778383
-  POINT  402  -11.06288858981114  7.054470523533706
-  POINT  403  -12.16968349313546  5.2351949670938
-  POINT  404  -11.26625946194865  4.931031933484356
-  POINT  405  -12.0755211222859  9.034287853892653
-  POINT  406  -11.57773105477317  9.914437566510799
-  POINT  407  -10.97973796624214  9.040879689516622
-  POINT  408  -10.17110926624146  33.75754094821968
-  POINT  409  -10.64040662788987  34.61216649370169
-  POINT  410  -9.566093507452038  34.52818146859719
-  POINT  411  -5.471515743143133  38.25117391585611
-  POINT  412  -5.108309760920813  39.33662769024022
-  POINT  413  -4.464167737093204  38.51729300677406
-  POINT  414  -17.075786992357  11.60015127604059
-  POINT  415  -16.58567116152604  10.66595676655855
-  POINT  416  -17.71058118590639  10.70832033698396
-  POINT  417  -11.04685154601989  12.60620673430785
-  POINT  418  -12.11322066877488  12.57558809767642
-  POINT  419  -12.1349007245402  10.80193483523696
-  POINT  420  -11.03911756849645  10.80852667086092
-  POINT  421  -9.437251545081509  13.53388275647323
-  POINT  422  -8.887678771744049  14.45178376821303
-  POINT  423  -12.51923497779283  15.29188240907255
-  POINT  424  -13.09057072370242  14.36354658270596
-  POINT  425  -18.87005448454325  18.50123351571129
-  POINT  426  -18.03461160637449  18.07594366093415
-  POINT  427  -19.06236608641966  17.55550277381534
-  POINT  428  -18.92115000224904  19.51083720141505
-  POINT  429  -19.97443590274372  18.98910431002001
-  POINT  430  -18.09519835785529  19.95611150258222
-  POINT  431  0.5990148364900598  22.29211602188795
-  POINT  432  -0.599014659370577  22.29211603806743
-  POINT  433  7.967516690854382e-08  22.93488184134145
-  POINT  434  -1.01546624812877  21.25999443805068
-  POINT  435  4.872215793316759e-08  20.82467510930697
-  POINT  436  -1.015466296850928  20.43531932874371
-  POINT  437  -1.614481004943663  21.90276025750417
-  POINT  438  6.782362015092881  16.29630562070841
-  POINT  439  6.26972775715908  15.38635951751268
-  POINT  440  5.744124975081186  16.30195446908402
-  POINT  441  -5.74412451455944  16.30195484425646
-  POINT  442  -5.226435642566052  17.21789351086729
-  POINT  443  -4.713801327229008  16.30794748956339
-  POINT  444  -4.200321416459555  15.37246065843187
-  POINT  445  -3.682632544466168  16.2883993250427
-  POINT  446  -5.718863643637123  1.755765027244666
-  POINT  447  -6.622858728894221  2.050156275226842
-  POINT  448  -6.1930002735872  0.9829879862466689
-  POINT  449  -1.033332138420614  2.125971140580023
-  POINT  450  -0.5061798610039783  3.087533783994574
-  POINT  451  -1.53950755536463  3.149217787127504
-  POINT  452  0.8449778593019447  1.06790708707818
-  POINT  453  -2.222029981194251e-06  1.032143568723546
-  POINT  454  0.8457366719362006  0.01788976042541284
-  POINT  455  -0.8449892538123129  1.067907676487761
-  POINT  456  -0.8457434623547605  0.01789005539397318
-  POINT  457  7.14550668849857  38.67998224759658
-  POINT  458  7.464987989168712  37.67900473608974
-  POINT  459  6.438947358118664  38.07148798189294
-  POINT  460  5.471500684545699  38.25117925767516
-  POINT  461  5.801769278233181  37.27840186247859
-  POINT  462  4.399449686329078  36.5694073886274
-  POINT  463  3.900283518187385  37.63383100971722
-  POINT  464  3.465410599856247  36.74514526008381
-  POINT  465  4.464150368877045  38.51729645158841
-  POINT  466  5.108265028519643  39.33663957465164
-  POINT  467  6.569277426918998  34.62094437471872
-  POINT  468  5.497623088033901  34.55900920079591
-  POINT  469  6.097456163714485  33.75266993751856
-  POINT  470  4.967010559618177  35.55400263849503
-  POINT  471  4.495189296413664  34.68572820129488
-  POINT  472  5.401883477949315  36.44268838812844
-  POINT  473  6.369330151522279  36.26299711234622
-  POINT  474  9.113351220478284  35.59551865570383
-  POINT  475  9.038349819897114  36.597202299299
-  POINT  476  7.080381864313097  35.61775408845623
-  POINT  477  7.480267664596962  36.45346756280638
-  POINT  478  7.680214939993681  34.81141482517887
-  POINT  479  8.64405647339251  34.74088945175424
-  POINT  480  9.566088316483015  34.52818356854168
-  POINT  481  8.17603970195953  37.03376171219976
-  POINT  482  9.033624999701651  37.84358769694784
-  POINT  483  18.72983203648753  27.01380028490616
-  POINT  484  17.80064858804426  27.17058330432692
-  POINT  485  18.18552372630872  26.14280285282097
-  POINT  486  14.85185059716412  27.02384453546509
-  POINT  487  13.8314368395239  27.02729880093251
-  POINT  488  14.39220585881491  26.11287744339462
-  POINT  489  -2.499563411754033  38.85299626142665
-  POINT  490  -3.530116694379579  38.69303481820337
-  POINT  491  -3.067645385176077  39.76333856162318
-  POINT  492  -3.900259039943522  37.63383794314426
-  POINT  493  3.013506238274488  35.67219940853586
-  POINT  494  2.514340070132794  36.73662302962569
-  POINT  495  6.650990085890549  32.86703644924846
-  POINT  496  5.579335747005452  32.80510127532567
-  POINT  497  7.130348648922496  31.87754262327849
-  POINT  498  7.631706937284587  30.91661403096186
-  POINT  499  8.159708707026331  30.00179545686317
-  POINT  500  8.655829398405219  30.92079888540271
-  POINT  501  6.634227957543607  30.95853919473894
-  POINT  502  6.129435237246637  30.02016596590531
-  POINT  503  5.628076948884546  30.98109455822193
-  POINT  504  11.94551072074933  21.70829919870834
-  POINT  505  11.41305492908868  20.80846759832619
-  POINT  506  10.9025685332533  21.70588542257163
-  POINT  507  13.00753192439992  19.90724193190037
-  POINT  508  13.49147236933642  20.83257419908412
-  POINT  509  14.04300717715163  19.92893475652158
-  POINT  510  -1.632691703463277  19.84045615056494
-  POINT  511  -0.617225406612349  19.40513682182123
-  POINT  512  7.881862384261  8.935526290376423
-  POINT  513  6.821149637536807  8.96031982099673
-  POINT  514  7.354535453521018  9.865365947847677
-  POINT  515  1.878305104541391  1.129592434087743
-  POINT  516  2.768470579833216  1.245515867432436
-  POINT  517  2.582728607973412  0.1674632640394325
-  POINT  518  1.033322801179483  2.125972484456656
-  POINT  519  -12.88605340068618  5.81741648102104
-  POINT  520  -14.05126013257847  5.767569248488341
-  POINT  521  -13.60249013789031  6.524733392691986
-  POINT  522  -12.61408342909388  4.479532986874619
-  POINT  523  -13.09822472234193  7.374360207835742
-  POINT  524  -12.60944013509886  8.176456627591065
-  POINT  525  -13.20743322362988  9.050014504585244
-  POINT  526  -14.24561765199122  7.3425564631399
-  POINT  527  -14.89245371365388  8.125238751200939
-  POINT  528  -15.41659981616689  7.259181873308678
-  POINT  529  -12.11082177040361  33.4969228818488
-  POINT  530  -12.51527794814265  32.36519984403208
-  POINT  531  -11.64987856441833  32.70980293550745
-  POINT  532  -10.81862285529724  36.82133760142749
-  POINT  533  -10.87751788137019  35.79464242069291
-  POINT  534  -9.960404693575528  36.38448266121428
-  POINT  535  -11.48253364015961  35.0240019003154
-  POINT  536  -10.7167281460062  32.87524187924294
-  POINT  537  -11.12118432374524  31.74351884142621
-  POINT  538  -9.642415025568365  32.79125685413843
-  POINT  539  -18.53475021484851  15.4623221533659
-  POINT  540  -19.27621404631537  14.6682488620726
-  POINT  541  -18.24714142272296  14.42251208771581
-  POINT  542  -18.88134028536315  16.42301727635588
-  POINT  543  -17.88033313773626  16.16951779604823
-  POINT  544  -19.74928002630716  16.84311272522837
-  POINT  545  -15.49028917015346  8.94111382435025
-  POINT  546  -16.06641650592649  9.805497208420237
-  POINT  547  -16.64214543071471  8.907705737630335
-  POINT  548  -15.45627780504156  10.68439298272059
-  POINT  549  -14.33918769294243  9.008058351432968
-  POINT  550  -13.80526868012947  9.865889577734556
-  POINT  551  -14.1492732747727  14.33192177832496
-  POINT  552  -15.15912830948807  14.31820814348022
-  POINT  553  -14.56084238283394  15.25822727480142
-  POINT  554  -13.68885665035655  13.42352745138476
-  POINT  555  -17.50692650301805  12.50123196234012
-  POINT  556  -17.89917563009375  13.49160770791567
-  POINT  557  -18.59468367857226  12.63537262535845
-  POINT  558  -16.40667197130215  12.44593322715844
-  POINT  559  -17.18577727459241  14.27791829325811
-  POINT  560  -15.79268534169501  13.36945828023087
-  POINT  561  -15.36154583103397  12.46837759393134
-  POINT  562  -16.20425444975626  14.29576377670733
-  POINT  563  -16.55222024238547  15.22666815650746
-  POINT  564  14.61766884814922  19.01336639514921
-  POINT  565  15.10160929308571  19.93869866233297
-  POINT  566  -8.954387420107352  8.883178967849199
-  POINT  567  -8.421001648218994  7.978132991115737
-  POINT  568  -7.881861900173009  8.935529708141328
-  POINT  569  -10.48552760095411  8.043256113861043
-  POINT  570  -10.07088815701037  6.936996660496273
-  POINT  571  -9.987737533441372  8.923405826479188
-  POINT  572  -9.448597785395389  9.880802543504778
-  POINT  573  -8.909628446845817  12.63950157787882
-  POINT  574  -9.96979275554061  12.62200835043421
-  POINT  575  -10.5192284477842  11.71182555571344
-  POINT  576  -9.962058778017163  10.82432828698728
-  POINT  577  -8.928708664683143  10.78410142835729
-  POINT  578  -8.826724490159041  19.9115345212223
-  POINT  579  -7.788049595360713  19.92284393906273
-  POINT  580  -8.326673162463226  19.01049914571327
-  POINT  581  6.796923008359899  14.46893104772356
-  POINT  582  5.758685968348203  14.47457989609917
-  POINT  583  7.331484508515757  13.55426320744392
-  POINT  584  7.842526297326634  14.46604282885744
-  POINT  585  3.183665335263674  17.16821321585526
-  POINT  586  3.688660309630354  18.14224948377619
-  POINT  587  2.676212803311897  18.08657678214764
-  POINT  588  5.226436037298559  17.21789324488178
-  POINT  589  4.713801779364758  16.30794714168605
-  POINT  590  1.702834415187505  17.9614070963485
-  POINT  591  2.207829389554186  18.93544336426943
-  POINT  592  9.410254775410465e-08  18.81027366105638
-  POINT  593  0.6172255007148968  19.40513683923515
-  POINT  594  -9.714117030543257  27.14602202785425
-  POINT  595  -10.74401846579198  27.10759225834228
-  POINT  596  -10.26601121841064  26.20720376458829
-  POINT  597  -15.19792430940091  31.58463475974873
-  POINT  598  -14.51995414837362  32.42407660952124
-  POINT  599  -15.55919105425835  32.56628720680114
-  POINT  600  -13.5787847899452  32.30652306297098
-  POINT  601  -13.91739051255635  33.26987333692369
-  POINT  602  -13.68943052768649  30.59673119233732
-  POINT  603  -13.11784158395992  31.51940311662963
-  POINT  604  -12.62592368588394  30.65540797339841
-  POINT  605  -18.10341288837137  21.84121234606356
-  POINT  606  -18.87127590553306  22.47222715848427
-  POINT  607  -17.12463310060343  18.09656294225589
-  POINT  608  -17.31694470247984  17.15083220035995
-  POINT  609  -16.9703546319652  16.19013707736997
-  POINT  610  -15.98883180712904  16.20798256081918
-  POINT  611  10.38199647148354  22.61371976810885
-  POINT  612  9.849540679822894  21.7138881677267
-  POINT  613  8.8085350316233  21.72280092159405
-  POINT  614  9.329107093393057  20.81496657605682
-  POINT  615  8.9287090372967  10.78409883706605
-  POINT  616  9.962058430246611  10.82432580169985
-  POINT  617  9.448597593195121  9.88079938186117
-  POINT  618  9.969792986625455  12.62200682338526
-  POINT  619  8.90962883591534  12.63950012274126
-  POINT  620  9.437251948192607  13.5338816892218
-  POINT  621  10.67234141492057  4.14015762808947
-  POINT  622  9.899143945874886  3.622737177952356
-  POINT  623  11.12308967028839  3.378421352424517
-  POINT  624  10.05434271335534  5.157341501088084
-  POINT  625  11.26624724302613  4.931019061942361
-  POINT  626  11.04685146630943  12.60620519964597
-  POINT  627  12.11322047313526  12.57558645323589
-  POINT  628  11.56378510572855  13.48576964345572
-  POINT  629  10.51922835403217  11.71182363316543
-  POINT  630  11.03911690993059  10.80852417796056
-  POINT  631  8.353117771266421  15.36645081786232
-  POINT  632  8.887679271422279  14.45178297758268
-  POINT  633  9.947843422132394  14.43428967822668
-  POINT  634  -7.354534566620368  9.865368360421384
-  POINT  635  -6.821148794732007  8.960322383687922
-  POINT  636  -5.241808196453412  9.89286263766502
-  POINT  637  -5.768321098655418  10.8109113925901
-  POINT  638  -4.716307833929465  10.81361299428714
-  POINT  639  -8.846687175134175  18.09453634019771
-  POINT  640  -7.808012280335847  18.10584575803814
-  POINT  641  -7.292392561451639  17.20089190904147
-  POINT  642  -6.77237854878069  18.11685471455703
-  POINT  643  -3.663850057285723  10.82236267206403
-  POINT  644  -2.609574443921612  10.83288750674358
-  POINT  645  -3.135519318363349  9.906089074041617
-  POINT  646  -4.190362959487728  11.74041142698911
-  POINT  647  1.022235278187542  6.105131945364167
-  POINT  648  1.537413456757289  7.078319240970639
-  POINT  649  0.5151765885688294  7.052715105123196
-  POINT  650  2.577937928342901  7.096153011320037
-  POINT  651  2.070879238724189  8.043736171079065
-  POINT  652  3.092619808349037  6.17939491294298
-  POINT  653  3.626085590315936  7.144811843051406
-  POINT  654  11.48251188829295  35.02401731321491
-  POINT  655  10.64039816452791  34.61217235404054
-  POINT  656  10.17110341744214  33.75754315009095
-  POINT  657  14.6689103389384  22.67322577662324
-  POINT  658  14.05319959738808  21.7410710783964
-  POINT  659  15.14265836363845  21.78642172193218
-  POINT  660  13.01772434463638  21.71937825377518
-  POINT  661  12.50723794880099  22.61679607802062
-  POINT  662  18.09519862717962  19.95611146231709
-  POINT  663  19.1740485049595  20.44527447993038
-  POINT  664  19.11595980806804  21.52156423697686
-  POINT  665  19.97093453194041  21.0778563218991
-  POINT  666  16.26820018552503  25.3010316807035
-  POINT  667  17.20417075684983  25.40139698246272
-  POINT  668  16.34859018777993  26.20978847968642
-  POINT  669  18.10513372405381  25.23404605383805
-  POINT  670  18.34437302491627  24.32069547942606
-  POINT  671  19.34729683337535  25.06775162939346
-  POINT  672  15.85270720624401  27.09338928485154
-  POINT  673  16.78867777756881  27.19375458661076
-  POINT  674  15.291938186953  28.00781064238943
-  POINT  675  17.30476560650833  28.05418410949204
-  POINT  676  16.82978442287303  28.99839439914488
-  POINT  677  17.8667222480114  28.98778277049785
-  POINT  678  11.90568276733603  25.26641722612537
-  POINT  679  12.94362175678668  25.24019557197247
-  POINT  680  12.33385311172404  26.14255336301493
-  POINT  681  13.04745149254336  23.49596728408519
-  POINT  682  11.97523786865631  23.48488822901835
-  POINT  683  13.26157019599279  27.94640762414275
-  POINT  684  12.80192545764358  27.03544053207227
-  POINT  685  11.76398646819293  27.06166218622517
-  POINT  686  12.71478625639084  28.84364548586147
-  POINT  687  13.74429763827116  28.8355037547217
-  POINT  688  11.6871942678587  28.89644654626223
-  POINT  689  12.16992171013707  29.78554267684118
-  POINT  690  -2.645241319283594  23.65915467021994
-  POINT  691  -2.171873771957271  22.80696352912885
-  POINT  692  -1.671396963511793  23.78707299861202
-  POINT  693  -3.638150958880634  21.77295984420368
-  POINT  694  -4.169619601589666  22.67588242311962
-  POINT  695  -4.662052432741228  21.76979706658653
-  POINT  696  -2.588325360715464  21.77484192911209
-  POINT  697  -3.080758191867026  20.868756572579
-  POINT  698  -3.465390409600786  36.74515601536355
-  POINT  699  -4.39944145231441  36.56941420393424
-  POINT  700  -6.438967484949353  38.07148150975368
-  POINT  701  -5.801761824463367  37.27840372561251
-  POINT  702  -7.465007651281466  37.67899578164534
-  POINT  703  -7.145548671869747  38.67996608706892
-  POINT  704  1.645701561067675  36.58620616945915
-  POINT  705  2.097605922649433  37.6591520210071
-  POINT  706  1.630912530570906  38.7025770899849
-  POINT  707  0.6144262348982835  38.03413825350503
-  POINT  708  0.6145007137649187  36.62602437274583
-  POINT  709  1.03123486124828  35.70349538136442
-  POINT  710  3.50029065404008  34.71485867238029
-  POINT  711  4.030903182455804  33.71986523468118
-  POINT  712  2.549220124316628  34.70633644192217
-  POINT  713  5.09669004529192  31.88416738089897
-  POINT  714  4.59189732499495  30.94579415206534
-  POINT  715  4.543156123115856  32.76980086916907
-  POINT  716  3.548257480742272  32.79893134025448
-  POINT  717  3.041784030297622  31.8775360658333
-  POINT  718  2.529531089637571  32.8276004313454
-  POINT  719  6.639239149600429  29.07614732768379
-  POINT  720  5.633088140941368  29.09870269116678
-  POINT  721  -5.741117900464612  18.12804558230707
-  POINT  722  -4.710794713134181  18.134038227614
-  POINT  723  -6.25673761934882  19.03299943130374
-  POINT  724  9.094364861792316  3.185783391206454
-  POINT  725  8.120154810382525  3.065542696161892
-  POINT  726  8.486226833839986  4.246239372190631
-  POINT  727  9.543080762382589  2.423606448705923
-  POINT  728  4.181697363812684  8.041699532502184
-  POINT  729  4.69637924381882  7.124941434125128
-  POINT  730  4.720893497007972  8.958696437146365
-  POINT  731  3.650599843505089  8.978566846072644
-  POINT  732  5.772906862056196  8.955994301021946
-  POINT  733  5.241809341748601  9.892861614592405
-  POINT  734  6.300233792796178  8.026154643550692
-  POINT  735  6.622836074707541  2.05014634703189
-  POINT  736  5.718844002281117  1.755757914971069
-  POINT  737  6.192965581434661  0.9829766219365916
-  POINT  738  5.664301131002254  3.628351178339397
-  POINT  739  6.833866176424866  3.46371406014724
-  POINT  740  6.342451737007583  4.290635795338225
-  POINT  741  7.442004204377196  2.403258079163064
-  POINT  742  7.917003402974732  1.633697762640239
-  POINT  743  8.94127268867317  5.267193691042839
-  POINT  744  7.96706263726338  5.146952995998276
-  POINT  745  9.535178516778736  6.058055124895729
-  POINT  746  -13.10928490082518  34.07016086758892
-  POINT  747  -12.24388551710086  34.4147639590643
-  POINT  748  -12.49585729120814  35.61581090418589
-  POINT  749  -14.07322716081642  34.21070994911054
-  POINT  750  -14.36136978693606  10.72072627767335
-  POINT  751  -14.88062444253561  11.58118583581166
-  POINT  752  -14.26663781292847  12.50471088888409
-  POINT  753  -13.22961531762352  10.76268243082563
-  POINT  754  -13.2079352618582  12.53633569326509
-  POINT  755  -12.6910018313468  11.65677153517575
-  POINT  756  15.07065410043878  18.08797196826217
-  POINT  757  14.01205198450469  18.07820806245078
-  POINT  758  -6.796922393156049  14.4689317302459
-  POINT  759  -6.269727250030074  15.38636001982073
-  POINT  760  -5.758685342348371  14.47458053337772
-  POINT  761  -7.817995296922273  16.28529708460574
-  POINT  762  -8.353117303969567  15.36645138459855
-  POINT  763  -8.863148300054089  16.27103725251539
-  POINT  764  -7.842525768612235  14.46604360030338
-  POINT  765  -7.331483860930532  13.55426411386037
-  POINT  766  -6.782361565367118  16.29630604112463
-  POINT  767  -3.683558631825044  14.45370591664109
-  POINT  768  -4.714727414587884  14.47325408116177
-  POINT  769  -5.24192255771386  13.55582579158695
-  POINT  770  -4.720392683042421  12.64308054429161
-  POINT  771  -5.764350610802907  12.64440699650756
-  POINT  772  -3.667934906398679  12.6518302220685
-  POINT  773  -8.395897107966746  11.71956985286866
-  POINT  774  -7.863355897507648  12.63144425890769
-  POINT  775  -6.817752522051462  12.63433238885021
-  POINT  776  -6.296222647380024  11.72158714155488
-  POINT  777  -6.821723009903972  10.80083678493275
-  POINT  778  -7.882436115344974  10.77604410938616
-  POINT  779  4.716308849678887  10.81361234423387
-  POINT  780  5.76832221472711  10.81091020810945
-  POINT  781  4.190363830521503  11.74041081086773
-  POINT  782  3.663850957542993  10.82236221735069
-  POINT  783  1.564857731194123  14.49716655277795
-  POINT  784  1.04410790663793  13.59158434318418
-  POINT  785  0.5207500976712671  14.50289465153176
-  POINT  786  1.565386117813491  12.67566398686721
-  POINT  787  0.5212784842906355  12.68139208562102
-  POINT  788  2.613060739273198  12.66750846420746
-  POINT  789  2.090231316925903  11.7573162066443
-  POINT  790  2.247276054134772e-07  15.40847690902769
-  POINT  791  -0.5207495998285867  14.50289469943392
-  POINT  792  -11.21209063177709  28.0004787204091
-  POINT  793  -11.76398481964448  27.06166045714313
-  POINT  794  -13.26156901870596  27.94640451622695
-  POINT  795  -12.71478480762005  28.84364148415803
-  POINT  796  -13.74429684069641  28.83549908117502
-  POINT  797  -12.16991936167931  29.78553808233906
-  POINT  798  -11.59833041795275  30.70821000663137
-  POINT  799  -10.66722518583636  28.94237531859013
-  POINT  800  -10.16307824785739  29.92216165396643
-  POINT  801  -9.687977339945633  29.02619685698455
-  POINT  802  -11.68719153968886  28.89644351739098
-  POINT  803  -10.66517999954061  30.87364895036685
-  POINT  804  -9.685932153649887  30.95747048876127
-  POINT  805  -16.82978847880473  28.99838541372564
-  POINT  806  -17.30476813190573  28.05417686774796
-  POINT  807  -17.86672715494531  28.98777290369169
-  POINT  808  -12.80192396054655  27.03543843675622
-  POINT  809  -12.33385179456144  26.1425519746894
-  POINT  810  -13.83143599362291  27.02729603377322
-  POINT  811  -18.71184747782762  23.47031202987638
-  POINT  812  -19.74963048996175  23.15469430712368
-  POINT  813  -19.34729785953139  25.06774765708812
-  POINT  814  -18.34437302460557  24.32069263403202
-  POINT  815  -18.10513422474459  25.23404206079518
-  POINT  816  -17.49125461230818  23.64225669394841
-  POINT  817  7.817995757395382  16.28529666142913
-  POINT  818  7.292392975317489  17.20089161300046
-  POINT  819  7.80801268720816  18.10584554161538
-  POINT  820  6.772378944905659  18.11685450089467
-  POINT  821  8.863148731491028  16.27103681015437
-  POINT  822  1.015466424403581  21.25999439681868
-  POINT  823  1.614481163449325  21.90276020009269
-  POINT  824  1.015466375681423  20.43531928751171
-  POINT  825  1.63269187639632  19.84045612674685
-  POINT  826  2.606070264520712  19.96562581254599
-  POINT  827  4.710795072138549  18.13403803354307
-  POINT  828  4.203342540186773  19.05240159983545
-  POINT  829  5.741118267854977  18.12804536094104
-  POINT  830  6.25673797974565  19.03299928955596
-  POINT  831  8.29058057434478  22.63591511879024
-  POINT  832  7.770146987914942  21.73699352712036
-  POINT  833  7.761488015053925  23.54966519059946
-  POINT  834  8.799876058762283  23.53547258507314
-  POINT  835  7.882436851035273  10.77604170622064
-  POINT  836  6.821724104311079  10.80083523684094
-  POINT  837  8.395897688086761  11.71956812605931
-  POINT  838  6.296223612241364  11.72158596648241
-  POINT  839  7.863356649653912  12.63144299189585
-  POINT  840  6.817753360687178  12.63433121076197
-  POINT  841  5.764351471103209  12.64440618203048
-  POINT  842  15.41658924936081  7.259168960497591
-  POINT  843  14.24561038678537  7.342548392480751
-  POINT  844  14.89244912969332  8.12523258985544
-  POINT  845  12.07551877984602  9.034284548463294
-  POINT  846  13.2074318313694  9.050012371808604
-  POINT  847  12.60943811820144  8.176454016117848
-  POINT  848  12.13489966336506  10.8019324567901
-  POINT  849  11.57772973957951  9.91443462532451
-  POINT  850  10.97973602641154  9.040876269633753
-  POINT  851  11.96631097541835  7.35863242591423
-  POINT  852  11.55167271280977  6.252370796998449
-  POINT  853  11.06288680406948  7.054464563856754
-  POINT  854  12.169671414375  5.235186923999835
-  POINT  855  12.88604184172865  5.817407070591241
-  POINT  856  12.61406020569684  4.479514007912766
-  POINT  857  13.09822402694172  7.374360249259541
-  POINT  858  13.60248324400228  6.524726802277135
-  POINT  859  14.05124229732068  5.767551513356759
-  POINT  860  17.07578521456617  11.60014693753975
-  POINT  861  17.71057756929273  10.70831332876806
-  POINT  862  16.58566833102513  10.66595132007714
-  POINT  863  16.40667132100974  12.44593062352206
-  POINT  864  15.79268502556732  13.36945619674464
-  POINT  865  15.36154529735113  12.46837529147962
-  POINT  866  17.18577703109811  14.27791621091107
-  POINT  867  17.8991747362448  13.49160449707131
-  POINT  868  17.50692494278236  12.50122784280477
-  POINT  869  18.59468174703889  12.63536765117651
-  POINT  870  -5.772905779136106  8.955995570716897
-  POINT  871  -6.300233112688748  8.02615691843684
-  POINT  872  -4.720892514410153  8.958697172413938
-  POINT  873  -2.562097267089574  3.227805457117126
-  POINT  874  -2.034944989672938  4.189368100531676
-  POINT  875  -0.5151786281004135  7.052714909961791
-  POINT  876  -4.495306666907339e-07  8.025902205568261
-  POINT  877  -0.5151778044490922  8.96843130178743
-  POINT  878  -1.555799685599574  8.971257959564014
-  POINT  879  -1.040621823848756  9.913787250944587
-  POINT  880  0.5151774122201507  8.968431496948837
-  POINT  881  2.806199940197374e-07  11.76547179125803
-  POINT  882  -0.5212779305555666  12.681392147575
-  POINT  883  -2.090230658535098  11.75731647898901
-  POINT  884  -1.561899919612723  10.84104288096659
-  POINT  885  -0.5212780384622415  10.83821622319001
-  POINT  886  0.5212783763839607  10.83821616123602
-  POINT  887  -8.95781830977193  7.046847428450418
-  POINT  888  -9.535179298628961  6.058061838123082
-  POINT  889  -7.885292789837587  7.099198168742546
-  POINT  890  -6.342458718450149  4.290639218573956
-  POINT  891  -5.664307592746104  3.628355267241409
-  POINT  892  -6.833874189380248  3.463718914397889
-  POINT  893  -4.115213411606943  4.361615670969387
-  POINT  894  -4.656830149629152  5.341664562613124
-  POINT  895  -3.599151439420091  5.248004662165036
-  POINT  896  -7.4420232035393  2.403268237260354
-  POINT  897  -7.917037371317474  1.633712477540171
-  POINT  898  -8.120174329243344  3.065552188592901
-  POINT  899  0.5061739145443324  5.095155188591381
-  POINT  900  -2.929429205988932e-06  4.110781499104045
-  POINT  901  -0.5061784339744557  5.09515412002939
-  POINT  902  1.528410782732792  5.120759324438823
-  POINT  903  0.5061724875148098  3.087534852556564
-  POINT  904  1.539499732754256  3.149220199566127
-  POINT  905  11.64987528159459  32.70981082487776
-  POINT  906  12.51527678005581  32.36521402236142
-  POINT  907  12.11081476394826  33.49693513307348
-  POINT  908  12.62592549818568  30.65541566530306
-  POINT  909  11.59833350965353  30.70821672570382
-  POINT  910  14.07320338353421  34.21073365839178
-  POINT  911  13.10926757404889  34.07018328539174
-  POINT  912  13.91737880453094  33.26989288698078
-  POINT  913  12.24386607558766  34.41478008790807
-  POINT  914  12.49582536742833  35.61583656588377
-  POINT  915  14.16603325158087  23.49720392336359
-  POINT  916  15.25549201783124  23.54255456689937
-  POINT  917  15.93819784253432  24.42958644855976
-  POINT  918  15.08261727346442  25.23797794578346
-  POINT  919  16.44107492989185  23.60560830181941
-  POINT  920  13.63403317143619  24.36529607436132
-  POINT  921  14.0622035158242  25.24143221125088
-  POINT  922  16.13661120818988  21.79829183825163
-  POINT  923  15.52090046663956  20.86613714002479
-  POINT  924  16.09556213763715  19.95056877865242
-  POINT  925  17.17857677781561  19.94984061055883
-  POINT  926  16.75928560426177  19.02240213286701
-  POINT  927  17.431475160555  20.8842781081025
-  POINT  928  18.71184721732612  23.47031396269385
-  POINT  929  18.87127587281586  22.47222833205418
-  POINT  930  19.74963016806416  23.15469636218577
-  POINT  931  17.49125494700478  23.6422586667476
-  POINT  932  18.10341307466681  21.84121305493807
-  POINT  933  16.8085491223017  22.75522678508721
-  POINT  934  17.18679122530281  21.83494220317982
-  POINT  935  14.51994297887854  32.4240927325463
-  POINT  936  13.57878043675709  32.30653817612266
-  POINT  937  13.11784095440342  31.51941386792693
-  POINT  938  13.68942915488696  30.59673981906429
-  POINT  939  11.44016434034826  24.38232842674731
-  POINT  940  10.89995079660589  23.50315722068274
-  POINT  941  10.83039569528561  25.28468621778976
-  POINT  942  9.846922943175489  23.51115996583782
-  POINT  943  9.317830383884633  24.42491003764703
-  POINT  944  9.800494196258793  25.32311557173736
-  POINT  945  8.753447311845587  25.34742819097269
-  POINT  946  10.26601262324656  26.20720437111542
-  POINT  947  -9.188516399988456  28.09611515482773
-  POINT  948  -8.684369462009494  29.07590149020404
-  POINT  949  -8.710509152607116  27.19572666107374
-  POINT  950  -4.967007708624748  35.55401033082136
-  POINT  951  -5.401876338967484  36.44269225860205
-  POINT  952  -6.369328080773704  36.26299985249962
-  POINT  953  -8.644059727746285  34.74088988879614
-  POINT  954  -9.113357089394702  35.59551543427815
-  POINT  955  -7.680217086741342  34.8114162753276
-  POINT  956  -8.132953504798678  33.74408230964664
-  POINT  957  -9.038370913869775  36.59719108141323
-  POINT  958  -7.080382952483385  35.61775611998313
-  POINT  959  -6.569276729535778  34.62094854083364
-  POINT  960  -7.480268437979268  36.45346758699358
-  POINT  961  -8.176062522991147  37.03375204912885
-  POINT  962  -9.033664824607252  37.8435674405669
-  POINT  963  -3.013509432387965  35.67217382596145
-  POINT  964  -2.514327020017076  36.73659756517147
-  POINT  965  -1.031206014429366  35.70346448021024
-  POINT  966  -1.53422388422784  34.73877849312591
-  POINT  967  -0.5029838558529507  34.77862759756677
-  POINT  968  2.021011022720923  33.78146904341516
-  POINT  969  1.514537572276274  32.86007376899397
-  POINT  970  1.534226606955332  34.73880977957074
-  POINT  971  0.5030257596525753  34.77862798285742
-  POINT  972  7.889854101383875e-06  33.81394199577308
-  POINT  973  1.536896992374578  27.28673102869031
-  POINT  974  2.075897760470205  26.39023244060897
-  POINT  975  2.583954155543661  27.30113813950133
-  POINT  976  3.556816059688512  30.9375844125214
-  POINT  977  4.088202963281139  30.03451158984436
-  POINT  978  2.538089668583811  30.96625350361232
-  POINT  979  0.5030096425456565  32.87005276973701
-  POINT  980  -0.5029999729598695  32.87005238444636
-  POINT  981  1.011529709462303  31.91618415766725
-  POINT  982  11.21209270722683  28.00048045890696
-  POINT  983  10.74402036130729  27.10759328984962
-  POINT  984  9.714118862280475  27.14602264379722
-  POINT  985  10.66722816097306  28.94237764988668
-  POINT  986  9.687978884244082  29.02619593691772
-  POINT  987  10.16308044487594  29.92216202427299
-  POINT  988  7.660247523983134  29.07171418485961
-  POINT  989  8.684369985103768  29.07589903930046
-  POINT  990  7.163900427677865  28.15025091012108
-  POINT  991  9.188517701200887  28.09611466491416
-  POINT  992  8.710509963140158  27.19572574617996
-  POINT  993  -4.203342243390184  19.05240175014947
-  POINT  994  -3.688659985491623  18.14224967870969
-  POINT  995  -3.655895652889911  19.96374384445787
-  POINT  996  -4.678030380532469  19.95553239336218
-  POINT  997  -2.207829164486162  18.93544342244381
-  POINT  998  -2.606070054724741  19.96562592936628
-  POINT  999  -5.170740868433548  20.8574752560983
-  POINT  1000  -5.702209511142579  21.76039783501424
-  POINT  1001  -5.71818745893382  19.94613316178989
-  POINT  1002  -6.731544945060238  21.74909188831638
-  POINT  1003  -6.222856509367919  22.66141369880462
-  POINT  1004  -7.249499434945713  20.83597766954888
-  POINT  1005  -7.770146433171051  21.73699353333926
-  POINT  1006  -6.749448107249898  19.93494229403985
-  POINT  1007  5.802524977371679  7.067405929156367
-  POINT  1008  6.85076775285229  7.071731449131153
-  POINT  1009  7.387583714762178  6.140445024793657
-  POINT  1010  7.885292530186677  7.099193739187982
-  POINT  1011  5.762972814506381  5.284127824133605
-  POINT  1012  5.246913203874932  6.170518239705588
-  POINT  1013  4.656827080953521  5.341663329102365
-  POINT  1014  6.932537859928994  5.119490705941448
-  POINT  1015  5.123453405055713  2.630543796725044
-  POINT  1016  4.686581836917295  1.584872268547702
-  POINT  1017  3.780741176469697  1.381516026850165
-  POINT  1018  4.380854250247183  0.4856945617800922
-  POINT  1019  3.07892064305541  2.323657990883948
-  POINT  1020  4.632038965638431  3.457465531916029
-  POINT  1021  8.957817564431407  7.046841938024162
-  POINT  1022  8.421001602521519  7.978128362361659
-  POINT  1023  8.954387418505732  8.883174489212605
-  POINT  1024  10.48552585172216  8.043251376985188
-  POINT  1025  10.07088758911358  6.936989748069407
-  POINT  1026  9.98773681145564  8.923401453846404
-  POINT  1027  14.14927330494213  14.3319204116199
-  POINT  1028  13.09057086026495  14.36354542779163
-  POINT  1029  13.68885655723154  13.42352588087392
-  POINT  1030  14.5608425845304  15.25822614311025
-  POINT  1031  15.01786739893976  16.19866298162331
-  POINT  1032  14.0080124223849  16.21237679705068
-  POINT  1033  15.15912828149698  14.31820659619254
-  POINT  1034  16.20425430515559  14.29576192823498
-  POINT  1035  16.55222028702778  15.22666661035897
-  POINT  1036  15.43600191484122  17.16213210717993
-  POINT  1037  16.04161877848574  18.09729043987835
-  POINT  1038  17.12463341866421  18.09656227178477
-  POINT  1039  17.31694506141086  17.15083111331099
-  POINT  1040  15.98883207698672  16.2079814532395
-  POINT  1041  16.97035480292924  16.19013573591558
-  POINT  1042  -9.329106518265187  20.81496648779522
-  POINT  1043  -9.8677300853677  19.90262169444576
-  POINT  1044  -16.0416184259235  18.09729104090766
-  POINT  1045  -16.75928532981814  19.02240250148187
-  POINT  1046  -10.94364637205534  16.23848947462534
-  POINT  1047  -9.899040221872481  16.25867329662998
-  POINT  1048  -9.363918214825187  17.17751899663717
-  POINT  1049  -9.882579096952568  18.0821723843123
-  POINT  1050  1.561900414029895  10.8410427689158
-  POINT  1051  2.609575035489602  10.83288724625605
-  POINT  1052  1.04062209494766  9.913787200847779
-  POINT  1053  3.135520054646986  9.906088779622188
-  POINT  1054  2.596323921451698  8.989091874978008
-  POINT  1055  1.555799449866085  8.97125810462861
-  POINT  1056  5.241923253953617  13.55582514043971
-  POINT  1057  4.714728002752798  14.47325361022883
-  POINT  1058  3.143090414259499  13.57017754949987
-  POINT  1059  3.667935613371911  12.65182976927697
-  POINT  1060  4.720393505507803  12.64307989616015
-  POINT  1061  2.105326509092408  15.38069455968688
-  POINT  1062  2.670185462451287  16.23272638623747
-  POINT  1063  1.606358875586338  16.26050868767612
-  POINT  1064  2.628684318059071  14.4693842513393
-  POINT  1065  3.683559192157784  14.45370555640881
-  POINT  1066  4.200321906552371  15.37246031206826
-  POINT  1067  3.682632968769743  16.28839908786602
-  POINT  1068  -1.606358493039556  16.26050877577584
-  POINT  1069  -2.670185073501789  16.23272654426651
-  POINT  1070  -2.105326053234482  15.38069472542052
-  POINT  1071  -3.183664984271242  17.16821337539803
-  POINT  1072  -2.676212514527244  18.08657689793349
-  POINT  1073  -1.70283416326578  17.96140711913215
-  POINT  1074  0.6172255840106643  18.01551021964674
-  POINT  1075  -0.6172253233165815  18.01551020223283
-  POINT  1076  -1.085608673357664  17.16664367772251
-  POINT  1077  -0.5207496530903567  16.31461185887652
-  POINT  1078  0.5207500444094971  16.31461181097436
-  POINT  1079  1.085608997768376  17.16664363752495
-  POINT  1080  -16.26819960626571  25.30102864423684
-  POINT  1081  -15.0826163587443  25.23797552751852
-  POINT  1082  -15.93819691156472  24.42958418138574
-  POINT  1083  -15.85270768406584  27.0933844772987
-  POINT  1084  -14.85185005261381  27.02384105180678
-  POINT  1085  -15.29193868323435  28.00780553873586
-  POINT  1086  -14.3922049944544  26.11287497233606
-  POINT  1087  -14.06220229975341  25.24143050948495
-  POINT  1088  -15.7999041554007  28.93948960494379
-  POINT  1089  -16.33689631951905  29.86052605444166
-  POINT  1090  -14.74418021093874  30.63117829061417
-  POINT  1091  -15.76075609457718  30.75508671479437
-  POINT  1092  -16.81445339648837  30.82931935765637
-  POINT  1093  -14.25226231286276  29.76718314738296
-  POINT  1094  -14.79904652394867  28.86994617945188
-  POINT  1095  8.846687614423065  18.09453615000725
-  POINT  1096  8.326673584011235  19.01049903790145
-  POINT  1097  8.8267249782098  19.91153448810875
-  POINT  1098  9.867730626409395  19.90262173424139
-  POINT  1099  7.788050050994897  19.92284387971688
-  POINT  1100  4.650398721048944  25.41533314105567
-  POINT  1101  4.13553988625797  26.36549811509552
-  POINT  1102  3.637813758430262  25.45447457738014
-  POINT  1103  3.148718616325014  24.57178682998195
-  POINT  1104  2.633859781534041  25.52195180402179
-  POINT  1105  1.586802618364957  25.50754469321078
-  POINT  1106  3.649195445762174  23.59167733893057
-  POINT  1107  4.169619811571008  22.67588222314829
-  POINT  1108  4.673096959030069  23.58851448755802
-  POINT  1109  2.58832552483298  21.77484182477213
-  POINT  1110  2.171873936919459  22.8069634498414
-  POINT  1111  2.645241468865954  23.65915456557222
-  POINT  1112  1.671397107482298  23.78707294089278
-  POINT  1113  4.678030658177207  19.95553223402469
-  POINT  1114  3.655895895669011  19.96374368425781
-  POINT  1115  3.638151155981279  21.77295969648394
-  POINT  1116  4.662052669249173  21.76979684511139
-  POINT  1117  3.080758382511145  20.86875644673523
-  POINT  1118  6.731545438466698  21.74909183518711
-  POINT  1119  7.249499895745219  20.83597763799092
-  POINT  1120  6.749448501546653  19.93494218778363
-  POINT  1121  5.718187824495971  19.94613304783
-  POINT  1122  5.702209835567938  21.7603976589167
-  POINT  1123  6.222856927737663  22.66141354804614
-  POINT  1124  5.17074117997821  20.85747513225235
-  POINT  1125  14.88062362045075  11.58118328295605
-  POINT  1126  14.26663732500833  12.50470885617862
-  POINT  1127  13.20793488033116  12.53633387235034
-  POINT  1128  12.69100124091205  11.65676942854059
-  POINT  1129  13.22961407056096  10.76267987590455
-  POINT  1130  -4.181696757246904  8.041699829461468
-  POINT  1131  -3.650599174564211  8.978566896409593
-  POINT  1132  -3.626085797421631  7.144811553632946
-  POINT  1133  -4.696379137267573  7.124941829637294
-  POINT  1134  -2.5963235612001  8.989091731089145
-  POINT  1135  -2.070879541800435  8.043735781931989
-  POINT  1136  -3.574367948496355  3.363807242843679
-  POINT  1137  -3.078930514188047  2.323656929439507
-  POINT  1138  -5.123462129635516  2.630546839115701
-  POINT  1139  -4.686602709596436  1.584876903295025
-  POINT  1140  -4.632046658705416  3.457467143291768
-  POINT  1141  -3.780758206397734  1.381518432692542
-  POINT  1142  -4.380882064820396  0.4857008521467929
-  POINT  1143  -1.537414964648728  7.078318112167635
-  POINT  1144  -1.022237926549232  6.10513101172257
-  POINT  1145  -2.551004482247714  5.199344992224856
-  POINT  1146  -3.092621220269923  6.179393883868594
-  POINT  1147  -2.577938840249254  7.096151883692768
-  POINT  1148  -1.52841477052277  5.120757322235234
-  POINT  1149  -1.565385542453618  12.67566417103727
-  POINT  1150  -1.044107338782977  13.59158446540026
-  POINT  1151  -1.564857211726638  14.49716672289619
-  POINT  1152  -2.628683792188871  14.46938449138686
-  POINT  1153  -2.613060066762507  12.66750879681426
-  POINT  1154  -3.143089790317201  13.57017791411676
-  POINT  1155  -8.941278766903849  5.267200605438743
-  POINT  1156  -8.486236698750734  4.246245735265347
-  POINT  1157  -7.96706738323741  5.146957735903831
-  POINT  1158  -9.094385712909785  3.185795058127813
-  POINT  1159  -9.899165223866994  3.622750914152373
-  POINT  1160  -9.543111594457244  2.423623277029117
-  POINT  1161  -10.05434861414229  5.157349837484599
-  POINT  1162  -10.67235893022354  4.140170700800017
-  POINT  1163  -11.12311705597741  3.378439779022869
-  POINT  1164  -7.38758492759221  6.140449119392674
-  POINT  1165  -6.932542859439094  5.119494249219278
-  POINT  1166  -5.762976262804949  5.284130602062798
-  POINT  1167  -6.850768266039271  7.071734682057993
-  POINT  1168  -5.80252525044337  7.067407869086968
-  POINT  1169  -5.246914290618097  6.170519593258447
-  POINT  1170  10.71672358375953  32.87524392735796
-  POINT  1171  9.642413735714634  32.79125514185909
-  POINT  1172  11.12118559986708  31.74352281664589
-  POINT  1173  9.15793076534775  31.87228668931375
-  POINT  1174  9.685932535089496  30.95746811521505
-  POINT  1175  10.66518181181848  30.87364982818402
-  POINT  1176  15.19791671718209  31.58464847548497
-  POINT  1177  15.55917637400988  32.56630552600364
-  POINT  1178  15.79990214283926  28.93949698650302
-  POINT  1179  16.3368917696794  29.86053599387202
-  POINT  1180  15.76074915645257  30.75509875525596
-  POINT  1181  16.81444462265249  30.82933310971594
-  POINT  1182  14.74417705037517  30.63118830145916
-  POINT  1183  14.25226159415743  29.76719009883528
-  POINT  1184  14.79904553375937  28.86995223711657
-  POINT  1185  -7.660247595099477  29.07171642334552
-  POINT  1186  -8.159708535056653  30.00179812550234
-  POINT  1187  -6.639239694273195  29.0761486788626
-  POINT  1188  -7.163900621226036  28.1502520435643
-  POINT  1189  -5.497622619491922  34.55901436086761
-  POINT  1190  -4.49518773283885  34.6857363061998
-  POINT  1191  -5.579336478117359  32.80510559052856
-  POINT  1192  -6.09745675374988  33.75267451621208
-  POINT  1193  -6.650990588161214  32.86703977049458
-  POINT  1194  -5.700404689242956  23.58012241603744
-  POINT  1195  -6.729740123160614  23.56881646933958
-  POINT  1196  -7.239035482595526  24.46837386823964
-  POINT  1197  -7.761487302720488  23.54966515100682
-  POINT  1198  -7.691207402098477  27.22632931678663
-  POINT  1199  -6.670199501272196  27.23076157230372
-  POINT  1200  -6.172815514826199  26.31659798520196
-  POINT  1201  -5.645508733953759  27.24052071197963
-  POINT  1202  -8.216808032653276  26.27623618981316
-  POINT  1203  -6.702397292590144  25.39718201604923
-  POINT  1204  -5.677706525271708  25.40694115572514
-  POINT  1205  -7.734144472150017  25.37803069771646
-  POINT  1206  -8.753446222658658  25.34742804200357
-  POINT  1207  -1.645698721915378  36.58607539347716
-  POINT  1208  -2.0975796991282  37.65905758287926
-  POINT  1209  -1.630935113652335  38.70247408973233
-  POINT  1210  -0.6145331724071246  38.03403837867723
-  POINT  1211  -0.6144586935404894  36.62592449791802
-  POINT  1212  8.00627890595873e-06  37.50863528601275
-  POINT  1213  0.5990148214488246  23.75062706100676
-  POINT  1214  -0.5990146744118122  23.75062707718625
-  POINT  1215  -1.072382221738135  24.60281821827733
-  POINT  1216  1.072382353395319  24.60281817673758
-  POINT  1217  0.5144203323314835  25.47109881332476
-  POINT  1218  3.58444379142495  29.11804267687441
-  POINT  1219  3.080359636161616  28.20371011551553
-  POINT  1220  2.549037542711368  29.11196928894155
-  POINT  1221  3.619360404257244  27.30721152743419
-  POINT  1222  5.129328969085179  28.18223377819683
-  POINT  1223  4.619525056731388  29.12625241641835
-  POINT  1224  4.631945366875925  27.26807009110972
-  POINT  1225  5.645508451085906  27.24052036585816
-  POINT  1226  2.034499539717892  30.03893177661523
-  POINT  1227  1.530415384454558  29.12459921525634
-  POINT  1228  1.519467510327002  30.97888342992712
-  POINT  1229  0.5079395805963843  30.98886243067015
-  POINT  1230  3.57436036144565  3.363808001711532
-  POINT  1231  4.115208087392189  4.361615383325885
-  POINT  1232  2.034939451144496  4.189370210393712
-  POINT  1233  2.551000814787705  5.199346967166499
-  POINT  1234  2.562089764809169  3.227807842293803
-  POINT  1235  3.599148476760741  5.248005798897869
-  POINT  1236  -8.808534389004958  21.72280081085314
-  POINT  1237  -8.290579899119484  22.63591502962064
-  POINT  1238  -9.849539984213617  21.7138879840766
-  POINT  1239  -8.799875258554394  23.5354724285207
-  POINT  1240  -14.05319871993245  21.74107047129854
-  POINT  1241  -13.49147167328674  20.83257382131933
-  POINT  1242  -13.01772343641998  21.71937768246372
-  POINT  1243  -15.07065374632022  18.08797242978403
-  POINT  1244  -15.4360015171055  17.16213287055806
-  POINT  1245  -14.0080120928104  16.21237758454029
-  POINT  1246  -15.01786712752577  16.19866394969555
-  POINT  1247  -17.17857644573234  19.94984075163958
-  POINT  1248  -17.43147479908956  20.8842778513917
-  POINT  1249  -16.09556177105241  19.95056885029135
-  POINT  1250  -15.52089992188291  20.86613685530161
-  POINT  1251  -15.10160880596872  19.93869860514389
-  POINT  1252  -17.18679097624842  21.83494159512092
-  POINT  1253  -18.18552489707417  26.14279763280435
-  POINT  1254  -17.20417083141572  25.40139287011322
-  POINT  1255  -16.3485902785953  26.20978421624601
-  POINT  1256  -16.78867890921584  27.19374870317508
-  POINT  1257  -17.80065072643519  27.17057660669527
-  POINT  1258  -18.72983447894121  27.01379366339507
-  POINT  1259  11.95573882194991  19.89979512998055
-  POINT  1260  10.91279663445388  19.89738135384383
-  POINT  1261  10.41041451927062  18.99394926589576
-  POINT  1262  12.50727362976512  18.99615568741801
-  POINT  1263  5.677706720839749  25.40694066827868
-  POINT  1264  5.179980593012042  24.49591713056331
-  POINT  1265  5.700404958820875  23.58012201478103
-  POINT  1266  6.729740561719636  23.56881619105143
-  POINT  1267  7.239036046137137  24.46837365733434
-  POINT  1268  7.691207579082008  27.22632790550661
-  POINT  1269  6.670199204699301  27.23076104833079
-  POINT  1270  6.172815602490047  26.31659736124369
-  POINT  1271  8.216808740161595  26.27623588438967
-  POINT  1272  6.702397474453146  25.39718135075132
-  POINT  1273  7.734144927787435  25.37803035029934
-  POINT  1274  14.36136880606171  10.72072377865549
-  POINT  1275  15.45627677840451  10.68439021395649
-  POINT  1276  15.49028452683864  8.941107024951828
-  POINT  1277  14.33918656687014  9.008056274559546
-  POINT  1278  13.80526722851472  9.865886806904992
-  POINT  1279  16.06641351663609  9.805491815776586
-  POINT  1280  16.64213914845493  8.907696187396814
-  POINT  1281  -7.631707103564363  30.91661699613311
-  POINT  1282  -8.655828970474381  30.92080206299163
-  POINT  1283  -7.130348925755392  31.87754588921673
-  POINT  1284  -6.634228490337664  30.95854195172743
-  POINT  1285  -9.157930722157598  31.87228935939205
-  POINT  1286  -8.612311842392856  32.75458842836879
-  POINT  1287  -7.648469201387913  32.82511481490026
-  POINT  1288  -2.549229273895434  34.70629607419768
-  POINT  1289  -2.021007115319019  33.78145919155421
-  POINT  1290  -3.500292663479144  34.71485452438976
-  POINT  1291  -4.030907574346319  33.71985855443602
-  POINT  1292  -5.179980371060386  24.49591750747982
-  POINT  1293  -4.650398593296442  25.41533347663255
-  POINT  1294  -3.649195283407097  23.591677514562
-  POINT  1295  -3.148718474961619  24.57178698404517
-  POINT  1296  -4.673096757267691  23.58851473694486
-  POINT  1297  0.5144203594414323  27.2905527635694
-  POINT  1298  1.022476754514889  28.20145846246176
-  POINT  1299  0.507938751521413  29.12842095013544
-  POINT  1300  -9.846921989817281  23.51115965477413
-  POINT  1301  -9.317829393418286  24.42490977616031
-  POINT  1302  -9.800492953921545  25.323115268257
-  POINT  1303  -10.83039438917027  25.28468549874502
-  POINT  1304  -10.92764508160684  18.07693196478106
-  POINT  1305  -10.41041404191582  18.99394930834161
-  POINT  1306  -10.91279607002197  19.89738127491452
-  POINT  1307  -11.95573820817218  19.89979496064743
-  POINT  1308  -11.41305425162406  20.80846734675159
-  POINT  1309  -15.14265757944868  21.78642099994649
-  POINT  1310  -14.66890934258192  22.67322486109087
-  POINT  1311  -16.13661054453237  21.79829124509394
-  POINT  1312  -15.25549093307073  23.54255322720311
-  POINT  1313  -14.1660320735545  23.49720269855517
-  POINT  1314  -16.80854863381419  22.75522573976579
-  POINT  1315  -16.44107418059214  23.60560634392143
-  POINT  1316  10.44287685491821  15.3320070852495
-  POINT  1317  10.99244953168854  14.41410579688861
-  POINT  1318  12.05881853851436  14.38348705047854
-  POINT  1319  12.51923528622494  15.29188158122452
-  POINT  1320  9.882579552317679  18.08217219529029
-  POINT  1321  9.363918655514606  17.17751869900422
-  POINT  1322  10.92764556036217  18.07693181489272
-  POINT  1323  9.899040669385645  16.25867285543741
-  POINT  1324  10.94364677894179  16.23848897409934
-  POINT  1325  -0.5144201764050657  27.29055277175395
-  POINT  1326  6.145462372320054e-08  26.3758253379825
-  POINT  1327  -0.5144202035150144  25.4710988215093
-  POINT  1328  -1.586802492614995  25.50754474293507
-  POINT  1329  4.053181679175566e-07  30.05156162643644
-  POINT  1330  -0.5079373955465308  30.98886235417658
-  POINT  1331  -0.5079382246215022  29.12842087364186
-  POINT  1332  -12.94362054595454  25.24019426221156
-  POINT  1333  -13.63403191024444  24.36529481739402
-  POINT  1334  -13.04745031975563  23.49596645128178
-  POINT  1335  -11.90568140505247  25.26641628259847
-  POINT  1336  -11.44016314056337  24.38232778626718
-  POINT  1337  -10.38199561361241  22.61371945416543
-  POINT  1338  -10.90256774287263  21.70588513110751
-  POINT  1339  -10.8999497484763  23.50315680180504
-  POINT  1340  -11.94550988102284  21.70829881684042
-  POINT  1341  -11.9752367643585  23.48488758565849
-  POINT  1342  -12.50723692766855  22.61679546681964
-  POINT  1343  -11.95486088381842  18.07035362542616
-  POINT  1344  -11.42702593885517  17.15857670139686
-  POINT  1345  -11.97086217426693  16.23191113527045
-  POINT  1346  -13.00261454459266  16.21196963584406
-  POINT  1347  -13.45963928928449  17.15240631073819
-  POINT  1348  -14.04300661306449  19.92893456636063
-  POINT  1349  -14.61766846223399  19.01336656135037
-  POINT  1350  -14.012051553416  18.07820839100076
-  POINT  1351  -13.00753132955202  19.9072417775258
-  POINT  1352  -12.50727314794993  18.99615570568874
-  POINT  1353  -13.00665400519826  18.07780044230454
-  POINT  1354  11.42702639250091  17.15857636716348
-  POINT  1355  11.95486135945386  18.07035343776895
-  POINT  1356  13.45963971419343  17.15240581280172
-  POINT  1357  13.00665446190387  18.07780023968877
-  POINT  1358  11.97086257803348  16.23191059697557
-  POINT  1359  13.00261489978407  16.21196897428866
-  POINT  1360  -4.63194529517035  27.26807044242916
-  POINT  1361  -5.129329281616346  28.18223402953092
-  POINT  1362  -2.075897664001495  26.39023252420856
-  POINT  1363  -2.633859682224616  25.52195192097659
-  POINT  1364  -3.619360348222028  27.30721173111527
-  POINT  1365  -4.135539800559439  26.36549841356398
-  POINT  1366  -3.637813646348119  25.45447476531866
-  POINT  1367  -1.530414898263689  29.12459912906478
-  POINT  1368  -1.022476552060444  28.20145845276378
-  POINT  1369  -2.583954039656873  27.30113820521839
-  POINT  1370  -3.080359534267785  28.20371023408358
-  POINT  1371  -1.536896850047253  27.28673102717688
-  POINT  1372  -4.543158675405131  32.76980075139725
-  POINT  1373  -5.096692509816465  31.88416600567974
-  POINT  1374  -3.548263606045425  32.79891896958721
-  POINT  1375  -2.549037169284093  29.11196922998421
-  POINT  1376  -2.034498841845151  30.03893165086228
-  POINT  1377  -3.584443477849247  29.11804275588108
-  POINT  1378  -1.519465434862823  30.97888306068132
-  POINT  1379  -1.011526259584607  31.91618386491503
-  POINT  1380  -3.041784503002568  31.8775328689841
-  POINT  1381  -2.529533401943756  32.82759067202288
-  POINT  1382  -2.538087705883227  30.96625316160074
-  POINT  1383  -3.556817909984896  30.93758145916507
-  POINT  1384  -1.514528012276162  32.8600730909511
-  POINT  1385  -4.088203640533337  30.03451082052263
-  POINT  1386  -4.591900437652678  30.94579052790599
-  POINT  1387  -6.129436418173878  30.02016647395368
-  POINT  1388  -5.628078240364906  30.9810953670373
-  POINT  1389  -4.619526005517029  29.126251824622
-  POINT  1390  -5.633089444300436  29.09870209417247
+  POINT  5  -5.494590158705203  0.769568933904214
+  POINT  6  -4.555054354703293  0.5256199116454576
+  POINT  7  -3.62510614201392  0.3312784996295808
+  POINT  8  -2.686413338358856  0.1812416288131739
+  POINT  9  -1.753728402849995  0.077037451999329
+  POINT  10  -0.851420720971519  0.01813114404021269
+  POINT  11  0.8514160122311216  0.01813095400480157
+  POINT  12  1.753719324465416  0.07703666291032139
+  POINT  13  2.686401050802698  0.181239963250821
+  POINT  14  3.625091324513498  0.3312757686489166
+  POINT  15  4.555037637659274  0.5256160015391538
+  POINT  16  5.494572548479121  0.7695639022537971
+  POINT  17  -8.14748720023632  1.73477478041978
+  POINT  18  -7.204326158760607  1.342623855477397
+  POINT  19  -6.323306730319925  1.025917887963812
+  POINT  20  -5.012043637681486  1.487026562234344
+  POINT  21  -4.001504680231534  1.348769869720156
+  POINT  22  -3.020446348008669  1.193123454693629
+  POINT  23  -2.033096162687354  1.074468404199018
+  POINT  24  -1.029250259109854  0.9952937048620419
+  POINT  25  -4.743693576426955e-06  0.9550846747893821
+  POINT  26  1.029241591782402  0.9952938914888843
+  POINT  27  2.033087778001799  1.074468514560464
+  POINT  28  3.020437785114206  1.193122951441658
+  POINT  29  4.001495610537607  1.348768371554737
+  POINT  30  5.012033480242295  1.487023534523747
+  POINT  31  6.323291483458299  1.025912806798219
+  POINT  32  7.20431240676467  1.342618545311957
+  POINT  33  8.147472348609107  1.734768155628285
+  POINT  34  -9.874839229995656  2.607830779866931
+  POINT  35  -8.967401898964656  2.123039878590955
+  POINT  36  -7.43893966884391  2.316523461127632
+  POINT  37  -6.505937339794322  2.123067897852342
+  POINT  38  -5.617471023440036  2.128732087831175
+  POINT  39  -4.504938941140685  2.292372023343256
+  POINT  40  -3.474895393652287  2.188889537474249
+  POINT  41  -2.477789827740728  2.069417744488129
+  POINT  42  -1.486533939627704  1.978390111577929
+  POINT  43  -0.4945351927920381  1.920788208193323
+  POINT  44  0.494530028654747  1.920788180673721
+  POINT  45  1.48652903784696  1.978390363793194
+  POINT  46  2.477785286357576  2.069417875067633
+  POINT  47  3.474891314117997  2.188889007881329
+  POINT  48  4.504935616060729  2.292369967247126
+  POINT  49  5.617468616717059  2.128722558769742
+  POINT  50  6.505934206344425  2.123064219351945
+  POINT  51  7.438934955645484  2.316522386860346
+  POINT  52  8.967386714216421  2.123032261658711
+  POINT  53  9.874824441340188  2.607822383246229
+  POINT  54  -11.51772618471706  3.649404184131703
+  POINT  55  -10.65697220336667  3.075788247109521
+  POINT  56  -9.073837487095867  3.098945367911463
+  POINT  57  -8.146481814508759  2.93463496665957
+  POINT  58  -7.049600453276345  3.146247627644996
+  POINT  59  -6.068284496299216  3.100104651100007
+  POINT  60  -5.072988891537222  3.091827459666651
+  POINT  61  -3.993877927928949  3.131132225510109
+  POINT  62  -2.967955349130637  3.051608081751008
+  POINT  63  -1.969358890547338  2.964205195218535
+  POINT  64  -0.9811566490131486  2.90071553814206
+  POINT  65  -1.32163243384692e-06  2.877135624667564
+  POINT  66  0.9811540073798326  2.900715668778548
+  POINT  67  1.969356448130425  2.964205359405151
+  POINT  68  2.967953292680015  3.051607771536507
+  POINT  69  3.993876536191101  3.131130560601491
+  POINT  70  5.07298836313739  3.09182201424316
+  POINT  71  6.06828189330052  3.10009883043144
+  POINT  72  7.049596028910742  3.146246238867447
+  POINT  73  8.146475803362755  2.934633378296194
+  POINT  74  9.073829870567886  3.098941319319342
+  POINT  75  10.65695825761416  3.075779465645408
+  POINT  76  11.51771371828971  3.649395402508161
+  POINT  77  -12.25874124373426  4.197365310835768
+  POINT  78  -10.64940593588828  4.039054822049597
+  POINT  79  -9.738991551137142  3.788828249782045
+  POINT  80  -8.645496432574655  3.944646023442154
+  POINT  81  -7.660083249538626  3.927642758322452
+  POINT  82  -6.59386271210862  4.037468940686985
+  POINT  83  -5.568600019856155  4.018665115993096
+  POINT  84  -4.542276038525629  3.999836078704063
+  POINT  85  -3.491369657240189  3.994992924822852
+  POINT  86  -2.474009349355216  3.935011777572696
+  POINT  87  -1.477288819485819  3.874958764735967
+  POINT  88  -0.4912058119350093  3.84024391890156
+  POINT  89  0.4912045861343114  3.840244004832297
+  POINT  90  1.477287661196852  3.874958892229309
+  POINT  91  2.474008420090503  3.935011605232642
+  POINT  92  3.491369140152303  3.994991746916046
+  POINT  93  4.542275958327673  3.999832734657181
+  POINT  94  5.568598961382722  4.018661009084565
+  POINT  95  6.593859756639968  4.037466906689763
+  POINT  96  7.660079741658018  3.927642484330992
+  POINT  97  8.64549214777098  3.944645135772696
+  POINT  98  9.738984400934594  3.788824210856252
+  POINT  99  10.64939834126311  4.039049114973768
+  POINT  100  12.25873013918693  4.197356696596919
+  POINT  101  -13.06808399305144  4.859815696281542
+  POINT  102  -12.14172415206427  5.120456490850303
+  POINT  103  -11.26850058845588  4.78253504757261
+  POINT  104  -10.17404214944296  4.845047406793981
+  POINT  105  -9.208059651222554  4.766866668801151
+  POINT  106  -8.164339019401956  4.857476344060355
+  POINT  107  -7.149967162775942  4.875867152053067
+  POINT  108  -6.093958019589567  4.926093683238227
+  POINT  109  -5.058077545048842  4.913790131101954
+  POINT  110  -4.028039828119854  4.894648028971938
+  POINT  111  -2.995365612046738  4.876648223313875
+  POINT  112  -1.984673486096534  4.833837916766388
+  POINT  113  -0.9889438049108867  4.797769562520688
+  POINT  114  -2.362747113168751e-07  4.784386125986646
+  POINT  115  0.9889433725237518  4.797769655939185
+  POINT  116  1.984673180431574  4.833837841092998
+  POINT  117  2.995365534870316  4.876647488912344
+  POINT  118  4.028039920473764  4.894645987409467
+  POINT  119  5.05807704187145  4.913787423329794
+  POINT  120  6.09395626231969  4.926092028666856
+  POINT  121  7.149964792987238  4.875866809291987
+  POINT  122  8.164336682555421  4.857476643496101
+  POINT  123  9.208056699547432  4.766865857979807
+  POINT  124  10.17403815454237  4.845044126893953
+  POINT  125  11.26849448251217  4.782529900161253
+  POINT  126  12.14171794981946  5.120450644819872
+  POINT  127  13.06807455950774  4.859807553827244
+  POINT  128  -13.79621135610305  5.520201927590952
+  POINT  129  -12.80117439670994  5.856589459482491
+  POINT  130  -11.67938537881067  5.871675730352508
+  POINT  131  -10.7214199084595  5.705740655756915
+  POINT  132  -9.682832193302595  5.735754340027762
+  POINT  133  -8.688206795148123  5.723107658281122
+  POINT  134  -7.655630079002389  5.775975918064022
+  POINT  135  -6.627659763072258  5.792669306732381
+  POINT  136  -5.582314228446745  5.814411012773447
+  POINT  137  -4.548885425945512  5.805126115268295
+  POINT  138  -3.522722077771634  5.788884500830754
+  POINT  139  -2.501187311366817  5.770380462326169
+  POINT  140  -1.494394371192296  5.742942846788264
+  POINT  141  -0.4971264884626344  5.724801584483487
+  POINT  142  0.4971264114179549  5.724801616093884
+  POINT  143  1.494394375253193  5.742942820679326
+  POINT  144  2.501187449167741  5.770380046330405
+  POINT  145  3.522722282985142  5.788883304381674
+  POINT  146  4.548885254065114  5.80512440450948
+  POINT  147  5.582313237121974  5.814409778421799
+  POINT  148  6.627658274246912  5.792668907910858
+  POINT  149  7.655628672903336  5.775976131426517
+  POINT  150  8.688205683983837  5.723107897941759
+  POINT  151  9.682831053695072  5.735753339275631
+  POINT  152  10.72141774219851  5.705737949417665
+  POINT  153  11.67938249802985  5.871671763668828
+  POINT  154  12.80116985277255  5.856584114327579
+  POINT  155  13.79620361018442  5.52019455095268
+  POINT  156  -15.07551414433484  6.857364294633759
+  POINT  157  -14.47383155813855  6.197529205731446
+  POINT  158  -13.45485475009742  6.553837837714978
+  POINT  159  -12.31042185688016  6.683440243020864
+  POINT  160  -11.21350161895065  6.69819718995942
+  POINT  161  -10.20833342071787  6.628047644175917
+  POINT  162  -9.180105769142591  6.64834742192738
+  POINT  163  -8.167115514052471  6.65576641169878
+  POINT  164  -7.135706515094646  6.685162961807312
+  POINT  165  -6.105345078296335  6.696209760357505
+  POINT  166  -5.069576645378604  6.705314119570696
+  POINT  167  -4.041800732917723  6.698207423904568
+  POINT  168  -3.020761532842517  6.685782557740071
+  POINT  169  -2.005808074374162  6.671737301319939
+  POINT  170  -1.000288933333046  6.656398725132026
+  POINT  171  4.397573777348285e-08  6.650034053590167
+  POINT  172  1.000289057350326  6.656398701633271
+  POINT  173  2.005808282761941  6.671737074424545
+  POINT  174  3.020761779503171  6.685781881995771
+  POINT  175  4.041800760087482  6.698206389869481
+  POINT  176  5.069576162857779  6.705313264812579
+  POINT  177  6.10534421344702  6.69620937563182
+  POINT  178  7.135705654446768  6.685162970448084
+  POINT  179  8.167114943754402  6.655766632853415
+  POINT  180  9.180105544149159  6.648347310133159
+  POINT  181  10.20833306114628  6.628046599517105
+  POINT  182  11.21350079915651  6.698194920239427
+  POINT  183  12.31041989729133  6.683437342390677
+  POINT  184  13.45485102688512  6.553833543240082
+  POINT  185  14.47382501191121  6.197522339217816
+  POINT  186  15.07550853647004  6.85735785101832
+  POINT  187  -15.74070185460795  7.661835423193954
+  POINT  188  -14.74687538651157  7.702960989661571
+  POINT  189  -13.93188920478376  7.345232089754496
+  POINT  190  -12.86506131544698  7.471088086950771
+  POINT  191  -11.77211701495691  7.547677194388092
+  POINT  192  -10.70587046671523  7.565284924165475
+  POINT  193  -9.687660424643854  7.54461386330666
+  POINT  194  -8.662563218479574  7.560951116274378
+  POINT  195  -7.642034647994548  7.571360794157137
+  POINT  196  -6.613518858753616  7.588082984279957
+  POINT  197  -5.586073186048593  7.595112879441636
+  POINT  198  -4.558140690092682  7.598809924577656
+  POINT  199  -3.535939593111036  7.59366155618144
+  POINT  200  -2.519295513626756  7.585207729094968
+  POINT  201  -1.507828110570193  7.576464832977407
+  POINT  202  -0.5019148548267611  7.569504441473947
+  POINT  203  0.5019150140751154  7.569504419051911
+  POINT  204  1.507828313373964  7.576464701318211
+  POINT  205  2.51929574421762  7.58520735259712
+  POINT  206  3.535939709005314  7.593660949468794
+  POINT  207  4.558140510818687  7.598809363042038
+  POINT  208  5.58607274341326  7.595112562629756
+  POINT  209  6.613518369190103  7.588082887213245
+  POINT  210  7.642034309561478  7.571360854887308
+  POINT  211  8.662563167404116  7.560951138691602
+  POINT  212  9.687660573872202  7.54461354186692
+  POINT  213  10.70587058429081  7.565283863779716
+  POINT  214  11.77211666522259  7.547675581264719
+  POINT  215  12.8650605916635  7.471085619230291
+  POINT  216  13.93188849368163  7.345227696048455
+  POINT  217  14.74687398655421  7.702958601368711
+  POINT  218  15.74069772046266  7.661830148963676
+  POINT  219  -16.34008243157374  8.467363435476578
+  POINT  220  -15.28567534644808  8.552905620836993
+  POINT  221  -14.22089501094071  8.468579625245626
+  POINT  222  -13.29774920244363  8.333212052076258
+  POINT  223  -12.27300453476784  8.396001904827241
+  POINT  224  -11.224449672806  8.44025834990769
+  POINT  225  -10.1842020715159  8.457472361197105
+  POINT  226  -9.163914101356678  8.456332255719779
+  POINT  227  -8.14059852678059  8.468750713098206
+  POINT  228  -7.118690004259524  8.477698841262107
+  POINT  229  -6.093911741800466  8.487745637900247
+  POINT  230  -5.070537359203934  8.492297494254309
+  POINT  231  -4.048497389531928  8.493845716618845
+  POINT  232  -3.030710235690668  8.490541970764172
+  POINT  233  -2.017113078017005  8.485534154569866
+  POINT  234  -1.007152862458606  8.481122761690685
+  POINT  235  8.070285670638833e-08  8.479054147646179
+  POINT  236  1.007153037203349  8.481122683637645
+  POINT  237  2.017113267583667  8.485533940823723
+  POINT  238  3.030710370157321  8.490541618084078
+  POINT  239  4.048497363984429  8.493845358028667
+  POINT  240  5.070537168629906  8.49229725406053
+  POINT  241  6.093911495339211  8.487745514844656
+  POINT  242  7.11868981343622  8.477698810261961
+  POINT  243  8.140598491031323  8.468750699179775
+  POINT  244  9.163914246108916  8.456332131143173
+  POINT  245  10.18420232498191  8.457471896486332
+  POINT  246  11.22444978036375  8.440257512134613
+  POINT  247  12.27300442131762  8.396000443618357
+  POINT  248  13.29774885774807  8.333209357606099
+  POINT  249  14.22089386884885  8.468576880391957
+  POINT  250  15.28567398016187  8.552903295969026
+  POINT  251  16.34007933974851  8.46735905480778
+  POINT  252  -16.89879506132182  9.30277019619324
+  POINT  253  -15.84083890009481  9.368103783320413
+  POINT  254  -14.75936630448394  9.376434710940254
+  POINT  255  -13.72667446491556  9.338668036765469
+  POINT  256  -12.7458829592818  9.286293637722791
+  POINT  257  -11.72514144039831  9.317880286978371
+  POINT  258  -10.69307226518711  9.344364735918155
+  POINT  259  -9.663652464211705  9.358107425253532
+  POINT  260  -8.642457994516798  9.362656816289235
+  POINT  261  -7.620361904257799  9.371754129812164
+  POINT  262  -6.599324604837983  9.378698501517102
+  POINT  263  -5.577936443480438  9.385133261260403
+  POINT  264  -4.558210845970175  9.388247898190615
+  POINT  265  -3.540361900824579  9.389121481751587
+  POINT  266  -2.52566238019628  9.387374370414491
+  POINT  267  -1.513887157671833  9.384925984750414
+  POINT  268  -0.504297186178584  9.383298051709803
+  POINT  269  0.5042973320602566  9.383298015668299
+  POINT  270  1.51388730668141  9.384925862954564
+  POINT  271  2.525662501619651  9.387374163645836
+  POINT  272  3.540361939509808  9.389121254735599
+  POINT  273  4.558210789027288  9.388247723190803
+  POINT  274  5.577936342341931  9.385133146588913
+  POINT  275  6.599324518449944  9.378698438465905
+  POINT  276  7.62036189183867  9.371754085979447
+  POINT  277  8.642458092973191  9.362656736309578
+  POINT  278  9.663652671231812  9.358107201585797
+  POINT  279  10.6930724783395  9.344364317591429
+  POINT  280  11.72514158518201  9.31787949717938
+  POINT  281  12.74588295478644  9.286292109076781
+  POINT  282  13.72667400654556  9.338666111495892
+  POINT  283  14.75936532452434  9.376432764986804
+  POINT  284  15.84083766707554  9.368101537096484
+  POINT  285  16.8987927411374  9.302766530916411
+  POINT  286  -17.41541814741128  10.16622093237684
+  POINT  287  -16.36597467943507  10.20674001010058
+  POINT  288  -15.30570510771474  10.23673169382489
+  POINT  289  -14.25334124093768  10.24705991000825
+  POINT  290  -13.22518371810642  10.23169262743967
+  POINT  291  -12.21928286812764  10.21375315134102
+  POINT  292  -11.19741423399891  10.23174369517853
+  POINT  293  -10.17050417537597  10.2482576748095
+  POINT  294  -9.145044199699443  10.25842856407609
+  POINT  295  -8.123750354518931  10.26388718261748
+  POINT  296  -7.10298550942124  10.2706284602633
+  POINT  297  -6.083575083515306  10.2759394046698
+  POINT  298  -5.065015567249327  10.28034882788564
+  POINT  299  -4.048200146803218  10.28265723277545
+  POINT  300  -3.033238075903394  10.28342728339184
+  POINT  301  -2.02054894726801  10.28280355683485
+  POINT  302  -1.009738819288446  10.28194446006377
+  POINT  303  5.919699467074602e-08  10.28162989140187
+  POINT  304  1.009738935910972  10.2819443965436
+  POINT  305  2.020549047902884  10.28280343604998
+  POINT  306  3.033238133655776  10.28342713958931
+  POINT  307  4.048200151873941  10.2826571076832
+  POINT  308  5.065015543299326  10.28034873191634
+  POINT  309  6.083575061485952  10.27593933706552
+  POINT  310  7.102985523625926  10.27062840654225
+  POINT  311  8.123750433256964  10.26388711645833
+  POINT  312  9.14504435731642  10.25842843597803
+  POINT  313  10.17050438210141  10.24825745265531
+  POINT  314  11.19741445812459  10.23174327923734
+  POINT  315  12.21928304966143  10.21375232985006
+  POINT  316  13.22518366386299  10.23169143671009
+  POINT  317  14.25334082737309  10.24705856617686
+  POINT  318  15.30570438725816  10.2367300912412
+  POINT  319  16.36597364727631  10.20673788845324
+  POINT  320  17.41541641117195  10.16621785753401
+  POINT  321  -17.88625803484845  11.05115797933476
+  POINT  322  -16.85120422054986  11.06936232054822
+  POINT  323  -15.81832377296524  11.10623835603135
+  POINT  324  -14.77936586062894  11.12671433185663
+  POINT  325  -13.74209116444094  11.13500853711859
+  POINT  326  -12.71605470869173  11.13080637203836
+  POINT  327  -11.69940028612606  11.12659743667363
+  POINT  328  -10.67625961071982  11.13773567839252
+  POINT  329  -9.651329983156939  11.14840741093704
+  POINT  330  -8.627923790323184  11.15586543586765
+  POINT  331  -7.607383209356573  11.16085887302131
+  POINT  332  -6.588183874293925  11.16597912139563
+  POINT  333  -5.570592864708988  11.17006260278196
+  POINT  334  -4.55434815440509  11.17325037576849
+  POINT  335  -3.539757168979546  11.17505634294026
+  POINT  336  -2.526758778403693  11.17584237662288
+  POINT  337  -1.515331628371982  11.17586700307951
+  POINT  338  -0.5049906539082446  11.17574820189833
+  POINT  339  0.5049907444555864  11.17574817768458
+  POINT  340  1.5153317094028  11.17586693621212
+  POINT  341  2.526758836407911  11.17584228689916
+  POINT  342  3.539757198178682  11.17505625511356
+  POINT  343  4.554348166128215  11.17325029975345
+  POINT  344  5.570592875755479  11.17006254133163
+  POINT  345  6.588183905050538  11.16597906858908
+  POINT  346  7.6073832793965  11.16085881572795
+  POINT  347  8.62792391457109  11.15586535027681
+  POINT  348  9.651330158548348  11.14840727911036
+  POINT  349  10.67625983071012  11.13773544977034
+  POINT  350  11.69940052274761  11.12659700092283
+  POINT  351  12.71605485286965  11.13080569362486
+  POINT  352  13.74209110304109  11.13500768317192
+  POINT  353  14.7793655795263  11.12671327386668
+  POINT  354  15.81832324916032  11.10623695423282
+  POINT  355  16.85120337097398  11.06936033777372
+  POINT  356  17.88625674904034  11.05115540936097
+  POINT  357  -18.30877322305379  11.9508495437846
+  POINT  358  -17.29354589755249  11.94920666314173
+  POINT  359  -16.29455300391288  11.99583596159888
+  POINT  360  -15.27946629704285  12.01498717612042
+  POINT  361  -14.25474205301729  12.02594878618006
+  POINT  362  -13.22681809875847  12.03063506970706
+  POINT  363  -12.20220308495755  12.03009391767082
+  POINT  364  -11.18106431040382  12.03032682581759
+  POINT  365  -10.15753313450907  12.03745704775757
+  POINT  366  -9.134027318052762  12.04457505277963
+  POINT  367  -8.11232875700758  12.05009863957686
+  POINT  368  -7.093073740706956  12.05428798841279
+  POINT  369  -6.075537130934441  12.0582085939917
+  POINT  370  -5.05970021646697  12.06132294542906
+  POINT  371  -4.045326070247903  12.06366127251691
+  POINT  372  -3.032406410591747  12.06506238376489
+  POINT  373  -2.020741740391878  12.06579002116175
+  POINT  374  -1.010099115438543  12.06604601638048
+  POINT  375  3.404314703400746e-08  12.06609631184198
+  POINT  376  1.010099179329847  12.06604598427999
+  POINT  377  2.02074179197248  12.06578996792154
+  POINT  378  3.032406446294575  12.06506232425981
+  POINT  379  4.045326095644757  12.06366121500955
+  POINT  380  5.059700241198946  12.06132289396818
+  POINT  381  6.075537167668678  12.05820854699794
+  POINT  382  7.093073802862654  12.05428793944949
+  POINT  383  8.112328856771683  12.05009857666489
+  POINT  384  9.134027460561303  12.04457496575233
+  POINT  385  10.15753332314846  12.03745691162176
+  POINT  386  11.18106453668301  12.03032658694119
+  POINT  387  12.20220329614919  12.03009354250335
+  POINT  388  13.22681822001311  12.03063456472911
+  POINT  389  14.25474204169832  12.02594812574046
+  POINT  390  15.27946612080948  12.01498628420012
+  POINT  391  16.29455261172639  11.99583469575495
+  POINT  392  17.29354519100736  11.94920477604054
+  POINT  393  18.30877230037898  11.95084744504889
+  POINT  394  -18.68349051939805  12.86367167154098
+  POINT  395  -17.69955044194535  12.83783554399056
+  POINT  396  -16.74680072099509  12.90757935532751
+  POINT  397  -15.76140667037218  12.9221400730053
+  POINT  398  -14.75567094155959  12.92630257350449
+  POINT  399  -13.73682065989795  12.92743559025777
+  POINT  400  -12.71214391446095  12.92742694362712
+  POINT  401  -11.68737838806575  12.92678450620815
+  POINT  402  -10.66414648577376  12.92775785019992
+  POINT  403  -9.640754341022918  12.93234383939904
+  POINT  404  -8.618552582613498  12.93719911566106
+  POINT  405  -7.598448596921033  12.94129728244754
+  POINT  406  -6.580657830892998  12.94461961735053
+  POINT  407  -5.564721623493883  12.94754856845896
+  POINT  408  -4.550449594156615  12.94982267896038
+  POINT  409  -3.537564068386769  12.95146460765515
+  POINT  410  -2.525883376596742  12.95246017188719
+  POINT  411  -1.515118380882561  12.95300971020892
+  POINT  412  -0.5049676356087293  12.95322346487957
+  POINT  413  0.5049676844956841  12.95322345397402
+  POINT  414  1.515118423968893  12.95300968152577
+  POINT  415  2.525883411194239  12.95246013386642
+  POINT  416  3.537564097060069  12.95146456643065
+  POINT  417  4.550449622545449  12.94982263848316
+  POINT  418  5.56472165978088  12.9475485292704
+  POINT  419  6.580657884493699  12.94461957666239
+  POINT  420  7.598448677339204  12.9412972341219
+  POINT  421  8.618552696870632  12.93719905370227
+  POINT  422  9.640754495709061  12.93234375105686
+  POINT  423  10.66414668192525  12.927757709954
+  POINT  424  11.6873786049825  12.9267842939533
+  POINT  425  12.7121441131643  12.92742665289655
+  POINT  426  13.73682080368874  12.92743519895239
+  POINT  427  14.75567099253752  12.92630202967495
+  POINT  428  15.76140658474425  12.92213928078801
+  POINT  429  16.74680044196923  12.90757816273018
+  POINT  430  17.69954984610879  12.8378336756992
+  POINT  431  18.6834899076131  12.8636700698384
+  POINT  432  -19.02238328735229  13.82351766220752
+  POINT  433  -18.13955550450578  13.72808332961303
+  POINT  434  -17.24747413019177  13.83334150399983
+  POINT  435  -16.27671854460964  13.8444824687452
+  POINT  436  -15.27456079944098  13.83853174040222
+  POINT  437  -14.25616310884793  13.83020331307981
+  POINT  438  -13.22989658164751  13.82408308329856
+  POINT  439  -12.20135161049109  13.82071634572721
+  POINT  440  -11.17413867021331  13.81944883534201
+  POINT  441  -10.14926702413137  13.8202526514499
+  POINT  442  -9.126057836010542  13.82327629540207
+  POINT  443  -8.104996732868651  13.82665424545745
+  POINT  444  -7.086340525468896  13.82965017200467
+  POINT  445  -6.069982091125469  13.83211598100588
+  POINT  446  -5.055493375580907  13.83414727908586
+  POINT  447  -4.042551432867163  13.8356365177082
+  POINT  448  -3.030821469833524  13.83664074843842
+  POINT  449  -2.020032225634883  13.83720573920392
+  POINT  450  -1.009850751894021  13.83750425714042
+  POINT  451  1.810922449496655e-08  13.83759275454394
+  POINT  452  1.009850786298219  13.83750424406298
+  POINT  453  2.020032256013255  13.83720571680718
+  POINT  454  3.030821497136831  13.83664072069242
+  POINT  455  4.042551460337563  13.83563648775698
+  POINT  456  5.055493408535647  13.83414724818297
+  POINT  457  6.069982136283464  13.83211594828056
+  POINT  458  7.086340590263971  13.82965013439014
+  POINT  459  8.10499682427386  13.82665419928439
+  POINT  460  9.126057961450252  13.82327623361172
+  POINT  461  10.14926718918715  13.82025256130822
+  POINT  462  11.17413887129433  13.81944870576308
+  POINT  463  12.20135183449013  13.82071617071633
+  POINT  464  13.2298968126255  13.82408284872117
+  POINT  465  14.25616332583766  13.83020298488662
+  POINT  466  15.27456097333428  13.83853124901386
+  POINT  467  16.27671863417596  13.84448169655714
+  POINT  468  17.24747406497697  13.8333402848443
+  POINT  469  18.13955510497579  13.72808140596411
+  POINT  470  19.02238297028846  13.82351668571184
+  POINT  471  -19.27564676568709  14.66619818849089
+  POINT  472  -18.09766041208614  14.63187219093411
+  POINT  473  -16.95614347083327  14.72460549592841
+  POINT  474  -15.86921119998628  14.73780837074977
+  POINT  475  -14.81075412562909  14.72985007775523
+  POINT  476  -13.76486885106658  14.71947853532306
+  POINT  477  -12.72555276796724  14.71230313005461
+  POINT  478  -11.69126114605113  14.70886227379599
+  POINT  479  -10.66153612521807  14.70791746350395
+  POINT  480  -9.635755859587105  14.70873065251559
+  POINT  481  -8.613020109485847  14.71088365791704
+  POINT  482  -7.593121578733488  14.71326619553437
+  POINT  483  -6.575848554049146  14.71535684285003
+  POINT  484  -5.560852653819958  14.71698338764731
+  POINT  485  -4.547650629124863  14.71814844465915
+  POINT  486  -3.535804015609155  14.71887158153257
+  POINT  487  -2.524929077240439  14.71927025322356
+  POINT  488  -1.51473317861481  14.71940316393901
+  POINT  489  -0.5048698269273962  14.71947361417091
+  POINT  490  0.5048698535429671  14.71947360989954
+  POINT  491  1.514733203827875  14.71940315211682
+  POINT  492  2.524929101236818  14.7192702358374
+  POINT  493  3.535804040216305  14.718871560705
+  POINT  494  4.547650657766261  14.71814842161689
+  POINT  495  5.560852691237506  14.71698336234047
+  POINT  496  6.575848605965658  14.71535681381056
+  POINT  497  7.593121651312162  14.71326616047178
+  POINT  498  8.613020209763325  14.71088361248173
+  POINT  499  9.635755994552092  14.70873058948735
+  POINT  500  10.66153629879202  14.70791737591909
+  POINT  501  11.6912613588511  14.70886215652677
+  POINT  502  12.72555302053373  14.71230297372473
+  POINT  503  13.76486914422805  14.71947831783373
+  POINT  504  14.81075446037261  14.72984974915426
+  POINT  505  15.86921157538354  14.73780783221082
+  POINT  506  16.95614383875429  14.72460459306813
+  POINT  507  18.09766051890814  14.63187085031223
+  POINT  508  19.27564662677329  14.66619768647507
+  POINT  509  -19.50127447943532  15.56149871265921
+  POINT  510  -18.49586950943177  15.47325546362292
+  POINT  511  -17.47213216627488  15.54874531288023
+  POINT  512  -16.40580641559685  15.60593665709938
+  POINT  513  -15.34601737544395  15.61677435076866
+  POINT  514  -14.2947172695349  15.61000643038673
+  POINT  515  -13.24977965914606  15.60136804308813
+  POINT  516  -12.21061092357855  15.59603464741921
+  POINT  517  -11.1766690651603  15.59374881308825
+  POINT  518  -10.14751831522785  15.59340802755161
+  POINT  519  -9.122560414444946  15.59426088206107
+  POINT  520  -8.101062346441838  15.595824538575
+  POINT  521  -7.082603470679119  15.59741857217645
+  POINT  522  -6.066776863361147  15.59867868119486
+  POINT  523  -5.053111971733885  15.59945020989904
+  POINT  524  -4.041063833280758  15.59972861882586
+  POINT  525  -3.030084669706362  15.599680671072
+  POINT  526  -2.019763038193452  15.59951607389083
+  POINT  527  -1.009857003554932  15.59925577449675
+  POINT  528  1.024755921091858e-08  15.599193476494
+  POINT  529  1.009857023845601  15.59925576915614
+  POINT  530  2.019763058357887  15.59951606388146
+  POINT  531  3.030084690801801  15.59968065751039
+  POINT  532  4.041063857507812  15.59972860263055
+  POINT  533  5.053112002382292  15.59945019127528
+  POINT  534  6.066776904670986  15.59867865945828
+  POINT  535  7.082603527619012  15.59741854590029
+  POINT  536  8.101062424891389  15.59582450492322
+  POINT  537  9.122560520746296  15.59426083642217
+  POINT  538  10.14751845483047  15.59340796487829
+  POINT  539  11.17666924233262  15.59374872859052
+  POINT  540  12.21061114276325  15.59603453344294
+  POINT  541  13.24977992549936  15.60136788386504
+  POINT  542  14.29471758842084  15.61000619229367
+  POINT  543  15.34601774658832  15.61677396966515
+  POINT  544  16.40580680537335  15.60593604543914
+  POINT  545  17.47213241791181  15.54874447015032
+  POINT  546  18.4958693388047  15.47325456203676
+  POINT  547  19.50127443887344  15.56149853444409
+  POINT  548  -19.69120777770086  16.49909493767488
+  POINT  549  -18.82453814407551  16.39668162048823
+  POINT  550  -17.91856863118067  16.45118061991079
+  POINT  551  -16.92410838554749  16.48124398607248
+  POINT  552  -15.88164018773895  16.50096422915104
+  POINT  553  -14.82887068531301  16.49821045669536
+  POINT  554  -13.77807911254733  16.48886297653494
+  POINT  555  -12.7333784111039  16.48193539493605
+  POINT  556  -11.69485118291488  16.47821714148055
+  POINT  557  -10.66193355150254  16.47685701531462
+  POINT  558  -9.634017284309458  16.47687882871921
+  POINT  559  -8.610421523166179  16.47761153274202
+  POINT  560  -7.59043875501705  16.47862741976457
+  POINT  561  -6.573526910504127  16.47948404375377
+  POINT  562  -5.55916420169899  16.47991242318579
+  POINT  563  -4.546789160014427  16.4797742368711
+  POINT  564  -3.535766395032657  16.47908711802946
+  POINT  565  -2.525390013898583  16.4782315399178
+  POINT  566  -1.515222446789751  16.47755978237018
+  POINT  567  -0.505160915759866  16.47693907152057
+  POINT  568  0.5051609320854129  16.4769390697559
+  POINT  569  1.515222463409069  16.47755977720512
+  POINT  570  2.525390031591372  16.47823153173884
+  POINT  571  3.535766415254718  16.47908710738646
+  POINT  572  4.546789185065328  16.47977422398127
+  POINT  573  5.559164234676066  16.47991240775378
+  POINT  574  6.573526955235264  16.47948402492305
+  POINT  575  7.590438816148497  16.47862739571796
+  POINT  576  8.610421605901228  16.47761150046795
+  POINT  577  9.634017393679581  16.47687878455547
+  POINT  578  10.66193369197147  16.47685695525197
+  POINT  579  11.6948513586376  16.47821705943312
+  POINT  580  12.73337862581002  16.48193527915152
+  POINT  581  13.77807936895742  16.48886280392126
+  POINT  582  14.82887098061904  16.49821018706623
+  POINT  583  15.88164049446434  16.50096381647671
+  POINT  584  16.92410861282034  16.48124342897973
+  POINT  585  17.91856863399398  16.45118006156937
+  POINT  586  18.82453798513463  16.39668072056363
+  POINT  587  19.69120781864528  16.4990951679711
+  POINT  588  -19.82328465846074  17.34719293018973
+  POINT  589  -18.68356651268673  17.31043580953861
+  POINT  590  -17.56673240514328  17.36123106358058
+  POINT  591  -16.47414590791442  17.37598986974012
+  POINT  592  -15.39064716739153  17.37819173206542
+  POINT  593  -14.32006602394481  17.37102412556857
+  POINT  594  -13.2634493215721  17.36491520744474
+  POINT  595  -12.21741851257929  17.36094404730209
+  POINT  596  -11.17940525689727  17.35901220028596
+  POINT  597  -10.14779283686373  17.35850451428117
+  POINT  598  -9.121467989502685  17.35873940174785
+  POINT  599  -8.09954906046551  17.35924582268215
+  POINT  600  -7.081277449497645  17.35971278396684
+  POINT  601  -6.066028455702323  17.35983944191427
+  POINT  602  -5.053197717776997  17.35940141983762
+  POINT  603  -4.042124698542789  17.35824695931711
+  POINT  604  -3.032009115389205  17.3564023422576
+  POINT  605  -2.021821824817601  17.35459015065573
+  POINT  606  -1.011040264187739  17.35340280443575
+  POINT  607  6.814640345076395e-09  17.35243938843107
+  POINT  608  1.011040278028748  17.35340280223508
+  POINT  609  2.021821839659843  17.35459014619961
+  POINT  610  3.032009132287029  17.35640233585637
+  POINT  611  4.042124719169761  17.35824695109229
+  POINT  612  5.053197744437713  17.35940140968951
+  POINT  613  6.066028491348846  17.35983942938084
+  POINT  614  7.081277497793296  17.35971276796347
+  POINT  615  8.099549125655424  17.35924580133723
+  POINT  616  9.121468076013995  17.3587393726077
+  POINT  617  10.14779294895601  17.35850447445268
+  POINT  618  11.17940539853177  17.3590121455207
+  POINT  619  12.21741868699975  17.36094396965026
+  POINT  620  13.26344953055692  17.36491509096027
+  POINT  621  14.32006626614396  17.37102394370543
+  POINT  622  15.39064742969177  17.37819145776436
+  POINT  623  16.47414614962407  17.37598951033426
+  POINT  624  17.56673257253595  17.36123068035427
+  POINT  625  18.68356665984462  17.31043516903573
+  POINT  626  19.82328469438627  17.3471931986458
+  POINT  627  -19.92361530225037  18.25370297831815
+  POINT  628  -19.07203628626812  18.19876552320404
+  POINT  629  -18.09128424245282  18.22378292531755
+  POINT  630  -17.02794564635327  18.24352791034031
+  POINT  631  -15.94398258752478  18.24421394845224
+  POINT  632  -14.86112859360125  18.24245684590457
+  POINT  633  -13.79465161119509  18.24206223663435
+  POINT  634  -12.74159853322912  18.24073858102732
+  POINT  635  -11.698529613906  18.23959715961889
+  POINT  636  -10.66316644369302  18.23915626546558
+  POINT  637  -9.633977641977911  18.2392237253931
+  POINT  638  -8.609886644138397  18.23947670834334
+  POINT  639  -7.590062391072585  18.23966317253559
+  POINT  640  -6.573799873479021  18.2395756905061
+  POINT  641  -5.560467629070432  18.23897213290731
+  POINT  642  -4.549395686991836  18.2375962202419
+  POINT  643  -3.53974763298982  18.23518325778423
+  POINT  644  -2.530321009293305  18.23165172954483
+  POINT  645  -1.519299961772805  18.22830303022641
+  POINT  646  -0.5061568241133134  18.22651105869159
+  POINT  647  0.5061568361746052  18.22651105818931
+  POINT  648  1.519299974627625  18.2283030281956
+  POINT  649  2.530321023719614  18.23165172623696
+  POINT  650  3.539747650302188  18.23518325320082
+  POINT  651  4.549395708977971  18.23759621436859
+  POINT  652  5.560467658068336  18.23897212554887
+  POINT  653  6.573799912439206  18.23957568110988
+  POINT  654  7.590062443504756  18.23966316006795
+  POINT  655  8.609886713904036  18.23947669135741
+  POINT  656  9.633977733038876  18.23922370211182
+  POINT  657  10.66316655986387  18.23915623336316
+  POINT  658  11.69852975826159  18.23959711417069
+  POINT  659  12.74159870680618  18.24073851295247
+  POINT  660  13.79465181041776  18.24206212883075
+  POINT  661  14.86112880502805  18.24245668253721
+  POINT  662  15.94398277539668  18.24421374106404
+  POINT  663  17.02794575643996  18.24352769585881
+  POINT  664  18.09128426867969  18.22378260511285
+  POINT  665  19.07203607838779  18.19876510589028
+  POINT  666  19.92361533574309  18.25370336043873
+  POINT  667  -19.9802449810712  19.11128711446231
+  POINT  668  -18.80619197016033  19.09425379941037
+  POINT  669  -17.66225403113433  19.09510203515607
+  POINT  670  -16.52583190669753  19.09866237624121
+  POINT  671  -15.41432354959155  19.0986301021614
+  POINT  672  -14.33063667844831  19.1105065301146
+  POINT  673  -13.26794614671815  19.11638402180332
+  POINT  674  -12.21904679432654  19.11829199267038
+  POINT  675  -11.17975304147024  19.11894075428319
+  POINT  676  -10.14765766280284  19.11928688527702
+  POINT  677  -9.121321606407902  19.1195239082655
+  POINT  678  -8.099811768765214  19.11961774535636
+  POINT  679  -7.082440474765014  19.11946501955149
+  POINT  680  -6.068617555176951  19.11889174400767
+  POINT  681  -5.057733760576324  19.11759686938207
+  POINT  682  -4.048951495282913  19.11510440717879
+  POINT  683  -3.040860967573059  19.11069978972926
+  POINT  684  -2.031062116367802  19.10382972217813
+  POINT  685  -1.01638199358576  19.09746934675944
+  POINT  686  5.469910147222479e-09  19.09799582548251
+  POINT  687  1.016382005544462  19.09746934612121
+  POINT  688  2.031062129425211  19.10382972109414
+  POINT  689  3.040860982727736  19.11069978795467
+  POINT  690  4.048951514001514  19.1151044047146
+  POINT  691  5.057733784810108  19.11759686619456
+  POINT  692  6.06861758741177  19.11889173991558
+  POINT  693  7.082440518000469  19.11946501414825
+  POINT  694  8.099811826393989  19.11961773801307
+  POINT  695  9.121321682045322  19.11952389818466
+  POINT  696  10.14765776004377  19.11928687136565
+  POINT  697  11.1797531633058  19.11894073468605
+  POINT  698  12.21904694182174  19.11829196363125
+  POINT  699  13.26794631623689  19.11638397571452
+  POINT  700  14.33063685706478  19.11050645765263
+  POINT  701  15.41432371433398  19.09863001492938
+  POINT  702  16.52583203632977  19.09866230844884
+  POINT  703  17.6622541458637  19.09510191838969
+  POINT  704  18.80619204599507  19.09425361367645
+  POINT  705  19.9802449892912  19.11128730390016
+  POINT  706  -19.18788556876717  20.00005139493198
+  POINT  707  -18.23752403849579  19.99984302247159
+  POINT  708  -17.29064226017514  19.99925376166535
+  POINT  709  -16.47440002277868  20.00254940092639
+  POINT  710  -15.69589026095225  19.99922347246529
+  POINT  711  -14.75829776969549  19.99999149402495
+  POINT  712  -13.75224907606844  20.00002238976034
+  POINT  713  -12.72358628344629  20.00001314522074
+  POINT  714  -11.69063170189132  20.00000296247429
+  POINT  715  -10.65968425579931  19.99999907815186
+  POINT  716  -9.632679418332129  19.99999847573628
+  POINT  717  -8.610092788959356  19.9999987802438
+  POINT  718  -7.592007815489902  19.99999919201484
+  POINT  719  -6.578584325048967  19.99999952078446
+  POINT  720  -5.570430449173512  19.99999973968279
+  POINT  721  -4.569141973011657  19.99999986982209
+  POINT  722  -3.578262228261103  19.99999994088966
+  POINT  723  -2.605187956284842  19.99999997690123
+  POINT  724  -1.66466516281073  19.99999999380757
+  POINT  725  -0.7826655107941599  20.0000000016338
+  POINT  726  0.7826655154907771  20.00000000163381
+  POINT  727  1.664665170888243  19.99999999380764
+  POINT  728  2.605187967544461  19.99999997690146
+  POINT  729  3.578262243238  19.99999994089031
+  POINT  730  4.569141992985899  19.9999998698238
+  POINT  731  5.570430476094784  19.99999973968696
+  POINT  732  6.578584361468833  19.999999520794
+  POINT  733  7.592007864442903  19.99999919203552
+  POINT  734  8.610092853801689  19.99999878028637
+  POINT  735  9.632679502529101  19.99999847581969
+  POINT  736  10.6596843624034  19.99999907830713
+  POINT  737  11.69063183223476  20.00000296274612
+  POINT  738  12.72358643409481  20.00001314569264
+  POINT  739  13.75224923254777  20.00002239071156
+  POINT  740  14.75829790050601  19.99999149614534
+  POINT  741  15.69589033419841  19.99922348070548
+  POINT  742  16.47440003681302  20.0025493901109
+  POINT  743  17.29064231060998  19.99925377353345
+  POINT  744  18.23752405131307  19.99984302941273
+  POINT  745  19.18788543351031  20.00005138833587
+  POINT  746  -19.98023779283576  20.88887437456774
+  POINT  747  -18.80580843557483  20.90547874653299
+  POINT  748  -17.66161201461446  20.90415650737443
+  POINT  749  -16.52591330812703  20.90273438014319
+  POINT  750  -15.41490978144221  20.90067949213849
+  POINT  751  -14.33087263381866  20.8894508385836
+  POINT  752  -13.26804240623713  20.88362475434566
+  POINT  753  -12.21908307283113  20.88171102490173
+  POINT  754  -11.1797653194024  20.88105596204579
+  POINT  755  -10.14766089752007  20.88070896143329
+  POINT  756  -9.121321787680523  20.8804729634606
+  POINT  757  -8.099811171529218  20.88038023214702
+  POINT  758  -7.082439863957721  20.88053378104001
+  POINT  759  -6.068617118328885  20.88110759648338
+  POINT  760  -5.057733492537352  20.88240279408681
+  POINT  761  -4.048951345696993  20.88489543523155
+  POINT  762  -3.040860889905527  20.88930014517067
+  POINT  763  -2.031062079165233  20.89617025723036
+  POINT  764  -1.016381979500983  20.90253065295888
+  POINT  765  5.469943456515303e-09  20.90200417751546
+  POINT  766  1.016381991459812  20.90253065359715
+  POINT  767  2.03106209222298  20.89617025831457
+  POINT  768  3.040860905061069  20.88930014694594
+  POINT  769  4.048951364417659  20.88489543769765
+  POINT  770  5.057733516775839  20.8824027972792
+  POINT  771  6.06861715057387  20.88110760058708
+  POINT  772  7.082439907213993  20.88053378646916
+  POINT  773  8.099811229198181  20.8803802395451
+  POINT  774  9.121321863390992  20.88047297365156
+  POINT  775  10.14766099488602  20.88070897555551
+  POINT  776  11.17976544143952  20.88105598202432
+  POINT  777  12.21908322063199  20.88171105459812
+  POINT  778  13.26804257619063  20.88362480166985
+  POINT  779  14.33087281298531  20.88945091392941
+  POINT  780  15.41490994607966  20.90067958866326
+  POINT  781  16.52591344201236  20.90273444864004
+  POINT  782  17.66161214257477  20.90415664260873
+  POINT  783  18.80580852434392  20.90547893935344
+  POINT  784  19.98023780197282  20.88887416458981
+  POINT  785  -19.92358828250518  21.74660526428339
+  POINT  786  -19.07217434439901  21.80073889981208
+  POINT  787  -18.09112945874565  21.77562907330344
+  POINT  788  -17.02812405581322  21.75701137151901
+  POINT  789  -15.94366066593676  21.75622850710521
+  POINT  790  -14.86126409690214  21.75722234436677
+  POINT  791  -13.79471434661022  21.75787709872358
+  POINT  792  -12.74162038561464  21.75924454538805
+  POINT  793  -11.69853414597164  21.7603937981996
+  POINT  794  -10.66316512661045  21.76083746123114
+  POINT  795  -9.633974994254842  21.76077236820268
+  POINT  796  -8.609884257109169  21.76052103489894
+  POINT  797  -7.590060667734138  21.76033556874065
+  POINT  798  -6.573798770236956  21.76042363684251
+  POINT  799  -5.560466980079595  21.76102752854904
+  POINT  800  -4.549395330869891  21.76240362299502
+  POINT  801  -3.53974744971968  21.76481667916055
+  POINT  802  -2.5303209212877  21.76834825283947
+  POINT  803  -1.519299924135361  21.77169697292803
+  POINT  804  -0.5061568134041036  21.7734889506532
+  POINT  805  0.5061568254655004  21.77348895115548
+  POINT  806  1.519299936990494  21.77169697495886
+  POINT  807  2.530320935714927  21.76834825614754
+  POINT  808  3.539747467034398  21.76481668374473
+  POINT  809  4.549395352861634  21.76240362887052
+  POINT  810  5.560467009090089  21.76102753591302
+  POINT  811  6.573798809223865  21.76042364625162
+  POINT  812  7.590060720219843  21.76033558123638
+  POINT  813  8.609884326976061  21.76052105194263
+  POINT  814  9.633975085497147  21.76077239159665
+  POINT  815  10.66316524309085  21.76083749354136
+  POINT  816  11.69853429083621  21.7603938440048
+  POINT  817  12.74162056001178  21.75924461407503
+  POINT  818  13.79471454718983  21.75787720786278
+  POINT  819  14.86126431068448  21.75722251199929
+  POINT  820  15.94366086082416  21.756228717586
+  POINT  821  17.02812417119083  21.75701159238045
+  POINT  822  18.09112949141926  21.77562941392504
+  POINT  823  19.07217412140869  21.80073933755012
+  POINT  824  19.92358831980405  21.74660483881377
+  POINT  825  -19.823263456196  22.65296550038718
+  POINT  826  -18.68347167777789  22.6889724670474
+  POINT  827  -17.5669100312704  22.63883478838346
+  POINT  828  -16.47409263224828  22.6242054542872
+  POINT  829  -15.3904367336017  22.62202395225419
+  POINT  830  -14.32006894483515  22.62885094013076
+  POINT  831  -13.26345062953686  22.63505078113978
+  POINT  832  -12.21741436155782  22.63904422561734
+  POINT  833  -11.17939965412427  22.64098178723362
+  POINT  834  -10.14778782482358  22.64149205572087
+  POINT  835  -9.121464141616515  22.64125877788618
+  POINT  836  -8.099546383139796  22.64075324216461
+  POINT  837  -7.081275727631735  22.64028674537108
+  POINT  838  -6.066027421514116  22.64016033445862
+  POINT  839  -5.053197134698077  22.64059848599732
+  POINT  840  -4.042124389521369  22.64175301143073
+  POINT  841  -3.032008961880832  22.64359765889142
+  POINT  842  -2.021821754586955  22.64540986356159
+  POINT  843  -1.011040237264479  22.64659721372332
+  POINT  844  6.814665224480487e-09  22.6475606308115
+  POINT  845  1.011040251105664  22.64659721592393
+  POINT  846  2.021821769429846  22.64540986801763
+  POINT  847  3.032008978780493  22.6435976652927
+  POINT  848  4.042124410152931  22.64175301965603
+  POINT  849  5.053197161369463  22.64059849614706
+  POINT  850  6.066027457183961  22.64016034699624
+  POINT  851  7.081275775975558  22.6402867613839
+  POINT  852  8.099546448423908  22.64075326352899
+  POINT  853  9.121464228302864  22.64125880706316
+  POINT  854  10.14778793722731  22.64149209561295
+  POINT  855  11.17939979629603  22.64098184209338
+  POINT  856  12.21741453689023  22.6390443033786
+  POINT  857  13.26345084008729  22.63505089777322
+  POINT  858  14.32006918987354  22.62885112279828
+  POINT  859  15.39043700219516  22.62202422695843
+  POINT  860  16.47409288234377  22.62420581860266
+  POINT  861  17.56691020844972  22.63883518337205
+  POINT  862  18.68347184009588  22.68897314250563
+  POINT  863  19.82326349779923  22.652965189523
+  POINT  864  -19.69117813060965  23.501071811403
+  POINT  865  -18.8246775584696  23.60270488921595
+  POINT  866  -17.91872317447207  23.54877686754418
+  POINT  867  -16.92421077812897  23.51878118738913
+  POINT  868  -15.88162933414794  23.49913833184728
+  POINT  869  -14.82876942700178  23.5019021870122
+  POINT  870  -13.77806312245109  23.51109818218014
+  POINT  871  -12.7333690497193  23.51805365247506
+  POINT  872  -11.69484326979592  23.5217794620292
+  POINT  873  -10.661927166753  23.52314139532949
+  POINT  874  -9.634012473512842  23.52312044026287
+  POINT  875  -8.610418120559023  23.52238820743955
+  POINT  876  -7.590436502923668  23.52137251796749
+  POINT  877  -6.573525514872875  23.52051596810155
+  POINT  878  -5.559163390593181  23.52008761426355
+  POINT  879  -4.54678871790041  23.52022580633416
+  POINT  880  -3.535766169521851  23.52091292302367
+  POINT  881  -2.525389907129223  23.5217684966976
+  POINT  882  -1.515222401501546  23.52244024975234
+  POINT  883  -0.505160903546754  23.52306095823609
+  POINT  884  0.5051609198722887  23.52306096000069
+  POINT  885  1.515222418121158  23.52244025491717
+  POINT  886  2.525389924823131  23.52176850487623
+  POINT  887  3.535766189747005  23.52091293366626
+  POINT  888  4.546788742958842  23.52022581922355
+  POINT  889  5.559163423587246  23.52008762969507
+  POINT  890  6.573525559639977  23.52051598693144
+  POINT  891  7.590436564126859  23.52137254201168
+  POINT  892  8.610418203429177  23.52238823970576
+  POINT  893  9.634012583123939  23.5231204844028
+  POINT  894  10.66192730763136  23.52314145532485
+  POINT  895  11.69484344618557  23.52177954389795
+  POINT  896  12.73336926547453  23.51805376783202
+  POINT  897  13.77806338049386  23.51109835404176
+  POINT  898  14.82876972514016  23.50190245509659
+  POINT  899  15.88162964366185  23.49913874577929
+  POINT  900  16.92421100623148  23.5187817528495
+  POINT  901  17.9187231720003  23.54877744101314
+  POINT  902  18.82467738720799  23.60270583207815
+  POINT  903  19.69117818073977  23.50107152945477
+  POINT  904  -19.50128258193048  24.4384656875654
+  POINT  905  -18.49603377721733  24.52645328847083
+  POINT  906  -17.47222047478762  24.45122954140129
+  POINT  907  -16.40586225838657  24.39407159976292
+  POINT  908  -15.34601775579845  24.38327897298187
+  POINT  909  -14.29467265709022  24.390055636783
+  POINT  910  -13.24976676348197  24.39862650284665
+  POINT  911  -12.21060209619167  24.40396573526314
+  POINT  912  -11.17666203331493  24.40625240812431
+  POINT  913  -10.14751294202745  24.40659288968487
+  POINT  914  -9.122556531432314  24.40573982553234
+  POINT  915  -8.101059706484772  24.40417598818402
+  POINT  916  -7.082601789515715  24.40258179050725
+  POINT  917  -6.066775861079858  24.401321559102
+  POINT  918  -5.053111412995462  24.40054994850132
+  POINT  919  -4.041063542992159  24.40027148711376
+  POINT  920  -3.030084530115851  24.40031940219774
+  POINT  921  -2.019762977092939  24.40048397969316
+  POINT  922  -1.009856981565384  24.40074426873068
+  POINT  923  1.024744895883334e-08  24.40080656348254
+  POINT  924  1.009857001855979  24.40074427407103
+  POINT  925  2.019762997257817  24.40048398970201
+  POINT  926  3.030084551212998  24.40031941575852
+  POINT  927  4.041063567223794  24.40027150330772
+  POINT  928  5.053111443654583  24.40054996712262
+  POINT  929  6.066775902412783  24.40132158083352
+  POINT  930  7.082601846501917  24.40258181677218
+  POINT  931  8.101059785020986  24.40417602181029
+  POINT  932  9.122556637884827  24.40573987111417
+  POINT  933  10.14751308187546  24.40659295223369
+  POINT  934  11.17666221085666  24.40625249235723
+  POINT  935  12.21060231588698  24.40396584869259
+  POINT  936  13.24976703047505  24.39862666102139
+  POINT  937  14.29467297678669  24.39005587293844
+  POINT  938  15.34601812724821  24.38327935339093
+  POINT  939  16.40586264749961  24.39407221667886
+  POINT  940  17.47222072302032  24.45123039885839
+  POINT  941  18.49603359613996  24.52645421647772
+  POINT  942  19.50128254843763  24.438465834723
+  POINT  943  -19.27566297736843  25.33374322431333
+  POINT  944  -18.09775178956348  25.36799483110871
+  POINT  945  -16.95620348221256  25.27537035025225
+  POINT  946  -15.86925210584145  25.2621959819831
+  POINT  947  -14.81076315314948  25.27017923896646
+  POINT  948  -13.76485149074431  25.28055642554051
+  POINT  949  -12.72554494747265  25.2877018915422
+  POINT  950  -11.69125466472678  25.29114191583416
+  POINT  951  -10.66153084238642  25.29208544028669
+  POINT  952  -9.635751893753024  25.29127123899427
+  POINT  953  -8.613017330938026  25.28911759029576
+  POINT  954  -7.593119760102007  25.28673460993404
+  POINT  955  -6.575847443318799  25.28464366208886
+  POINT  956  -5.56085202263591  25.28301692601594
+  POINT  957  -4.547650297377339  25.28185175153692
+  POINT  958  -3.535803856092467  25.28112854408795
+  POINT  959  -2.524929008354851  25.28072983104776
+  POINT  960  -1.514733152989468  25.28059689769103
+  POINT  961  -0.5048698207562641  25.28052643741724
+  POINT  962  0.5048698473713688  25.28052644168841
+  POINT  963  1.51473317820234  25.28059690951267
+  POINT  964  2.524929032351727  25.28072984843296
+  POINT  965  3.535803880701605  25.28112856491395
+  POINT  966  4.54765032602379  25.28185177457648
+  POINT  967  5.560852060064414  25.28301695131759
+  POINT  968  6.575847495256659  25.28464369111745
+  POINT  969  7.593119832718212  25.28673464497304
+  POINT  970  8.613017431274047  25.28911763568033
+  POINT  971  9.635752028795475  25.29127130191628
+  POINT  972  10.66153101603581  25.29208552765603
+  POINT  973  11.6912548775394  25.29114203268002
+  POINT  974  12.72554519985952  25.28770204706892
+  POINT  975  13.76485178333624  25.28055664153414
+  POINT  976  14.81076348639632  25.27017956625211
+  POINT  977  15.86925247881834  25.26219652228766
+  POINT  978  16.95620384751598  25.27537126258778
+  POINT  979  18.09775189289379  25.36799618984021
+  POINT  980  19.27566284513804  25.33374370218195
+  POINT  981  -19.02239954985974  26.17643225215792
+  POINT  982  -18.13957375669325  26.27182967555013
+  POINT  983  -17.24752991244937  26.16660408857279
+  POINT  984  -16.27676195998304  26.15550609242113
+  POINT  985  -15.27459027941854  26.16147153179269
+  POINT  986  -14.25617297779009  26.16981316221108
+  POINT  987  -13.2298905244963  26.17593671197166
+  POINT  988  -12.20134707994185  26.17929019701242
+  POINT  989  -11.17413433418612  26.18055581832264
+  POINT  990  -10.14926347567323  26.17975046130899
+  POINT  991  -9.126055233191323  26.1767257214049
+  POINT  992  -8.104994973232515  26.17334704655403
+  POINT  993  -7.086339423772932  26.17035063568784
+  POINT  994  -6.069981455507479  26.16788451762503
+  POINT  995  -5.055493041319419  26.16585302924196
+  POINT  996  -4.042551276201685  26.16436367569299
+  POINT  997  -3.030821407389114  26.16335937686056
+  POINT  998  -2.020032206493706  26.16279434727297
+  POINT  999  -1.009850748200918  26.16249580956691
+  POINT  1000  1.810878547461869e-08  26.16240730616165
+  POINT  1001  1.009850782604362  26.16249582264381
+  POINT  1002  2.020032236871754  26.1627943696687
+  POINT  1003  3.030821434692971  26.163359404605
+  POINT  1004  4.04255130367432  26.16436370564181
+  POINT  1005  5.055493074279512  26.16585306014084
+  POINT  1006  6.069981500676009  26.16788455034281
+  POINT  1007  7.086339488585687  26.17035067328725
+  POINT  1008  8.104995064661678  26.17334709269614
+  POINT  1009  9.126055358650662  26.17672578313303
+  POINT  1010  10.14926364070988  26.17975055132968
+  POINT  1011  11.17413453512518  26.18055594767594
+  POINT  1012  12.20134730349981  26.17929037161421
+  POINT  1013  13.22989075441856  26.17593694579172
+  POINT  1014  14.25617319248297  26.1698134895775
+  POINT  1015  15.27459044923737  26.16147202351487
+  POINT  1016  16.27676204411003  26.15550686826468
+  POINT  1017  17.24752984252422  26.16660531696369
+  POINT  1018  18.13957335417382  26.27183161770785
+  POINT  1019  19.02239923981158  26.17643320705552
+  POINT  1020  -18.68351052659932  27.13627594775126
+  POINT  1021  -17.69958032840385  27.16211878258065
+  POINT  1022  -16.74683156791625  27.09239213947461
+  POINT  1023  -15.76142860035137  27.07785332363176
+  POINT  1024  -14.75568523901815  27.07369952580982
+  POINT  1025  -13.73682530497883  27.07257389333525
+  POINT  1026  -12.71214081282853  27.07258462878146
+  POINT  1027  -11.68737540619582  27.07322119480453
+  POINT  1028  -10.66414374485063  27.07224624332165
+  POINT  1029  -9.640752201106791  27.06765889268107
+  POINT  1030  -8.618551085348614  27.06280265021007
+  POINT  1031  -7.598447638413528  27.0587038340893
+  POINT  1032  -6.580657275128921  27.05538108021106
+  POINT  1033  -5.564721338620957  27.05245186732603
+  POINT  1034  -4.55044947250108  27.05017759593697
+  POINT  1035  -3.537564033075582  27.04853556963036
+  POINT  1036  -2.525883378397752  27.04753994742007
+  POINT  1037  -1.515118391171542  27.04699037668727
+  POINT  1038  -0.5049676403738673  27.04677660797433
+  POINT  1039  0.5049676892594587  27.04677661887949
+  POINT  1040  1.515118434256783  27.04699040536934
+  POINT  1041  2.525883412994776  27.04753998543922
+  POINT  1042  3.537564061749419  27.04853561085263
+  POINT  1043  4.550449500892171  27.05017763641098
+  POINT  1044  5.564721374913006  27.05245190650947
+  POINT  1045  6.580657328738541  27.0553811208901
+  POINT  1046  7.598447718844161  27.05870388239782
+  POINT  1047  8.618551199616206  27.0628027121368
+  POINT  1048  9.640752355782366  27.06765898096566
+  POINT  1049  10.66414394092225  27.07224638347101
+  POINT  1050  11.6873756228595  27.07322140691138
+  POINT  1051  12.71214101090778  27.07258491927569
+  POINT  1052  13.7368254473805  27.07257428445428
+  POINT  1053  14.75568528734847  27.07370007007758
+  POINT  1054  15.76142851055736  27.07785411803665
+  POINT  1055  16.74683128376763  27.09239333698052
+  POINT  1056  17.6995797272013  27.16212066124442
+  POINT  1057  18.68350991969133  27.13627753669932
+  POINT  1058  -18.3087899994487  28.0491122961534
+  POINT  1059  -17.29356305303868  28.05076474633064
+  POINT  1060  -16.29456855134103  28.00414807613013
+  POINT  1061  -15.27947676947299  27.98500923824287
+  POINT  1062  -14.25474850756761  27.97405313016844
+  POINT  1063  -13.22681991964508  27.96937104967781
+  POINT  1064  -12.20220140205727  27.96991345424442
+  POINT  1065  -11.18106269960114  27.96967783441059
+  POINT  1066  -10.1575317295533  27.96254624095482
+  POINT  1067  -9.134026282902123  27.9554271272794
+  POINT  1068  -8.11232808124951  27.94990275991905
+  POINT  1069  -7.093073357937705  27.94571290375888
+  POINT  1070  -6.075536956332379  27.94179197610055
+  POINT  1071  -5.059700169738454  27.9386774220445
+  POINT  1072  -4.045326088931555  27.93633896816423
+  POINT  1073  -3.03240645241726  27.93493777823327
+  POINT  1074  -2.020741779449279  27.93421009321045
+  POINT  1075  -1.010099138076054  27.93395407311486
+  POINT  1076  3.404211895013942e-08  27.93390377024507
+  POINT  1077  1.010099201965424  27.93395410521433
+  POINT  1078  2.020741831028424  27.93421014644879
+  POINT  1079  3.032406488119535  27.93493783773603
+  POINT  1080  4.045326114328983  27.93633902566877
+  POINT  1081  5.059700194472554  27.93867747350166
+  POINT  1082  6.075536993070713  27.94179202308874
+  POINT  1083  7.09307342009923  27.94571295271277
+  POINT  1084  8.112328181018478  27.94990282281439
+  POINT  1085  9.134026425405688  27.95542721427844
+  POINT  1086  10.15753191815605  27.96254637704741
+  POINT  1087  11.18106292576653  27.96967807323303
+  POINT  1088  12.2022016129779  27.96991382936287
+  POINT  1089  13.22682004031123  27.9693715547119
+  POINT  1090  14.25474849512003  27.97405379109089
+  POINT  1091  15.27947659137026  27.98501013174536
+  POINT  1092  16.29456815670813  28.00414934511754
+  POINT  1093  17.29356234408891  28.05076663883557
+  POINT  1094  18.30878908050798  28.04911438640772
+  POINT  1095  -17.88627195115217  28.94881420577205
+  POINT  1096  -16.85121623860757  28.93061933343462
+  POINT  1097  -15.81833314037684  28.89375235827191
+  POINT  1098  -14.77937167335351  28.87328385036637
+  POINT  1099  -13.74209446540223  28.86499338776666
+  POINT  1100  -12.71605582999688  28.86919825138711
+  POINT  1101  -11.69940001494518  28.87340789918018
+  POINT  1102  -10.67625922348492  28.86226791658786
+  POINT  1103  -9.65132961605895  28.851595071435
+  POINT  1104  -8.627923539340028  28.8441361901345
+  POINT  1105  -7.607383097319782  28.83914218931285
+  POINT  1106  -6.588183876610444  28.834021579554
+  POINT  1107  -5.570592938796751  28.82993786493235
+  POINT  1108  -4.554348259497055  28.82674994031302
+  POINT  1109  -3.539757274765657  28.82494387416716
+  POINT  1110  -2.526758864903647  28.82415777580468
+  POINT  1111  -1.515331685041841  28.82413311065559
+  POINT  1112  -0.5049906739901562  28.82425189305842
+  POINT  1113  0.5049907645346323  28.82425191727151
+  POINT  1114  1.515331766070061  28.82413317752096
+  POINT  1115  2.526758922906133  28.82415786552549
+  POINT  1116  3.539757303964481  28.82494396199095
+  POINT  1117  4.554348271221096  28.82675001632507
+  POINT  1118  5.5705929498453  28.82993792637928
+  POINT  1119  6.588183907369825  28.83402163235582
+  POINT  1120  7.607383167361471  28.83914224659848
+  POINT  1121  8.627923663583609  28.84413627571221
+  POINT  1122  9.651329791428106  28.85159520324159
+  POINT  1123  10.67625944341114  28.86226814518679
+  POINT  1124  11.69940025142002  28.87340833491707
+  POINT  1125  12.71605597388189  28.86919892986707
+  POINT  1126  13.74209440347107  28.86499424204478
+  POINT  1127  14.77937139138959  28.87328490937882
+  POINT  1128  15.81833261547568  28.89375376208559
+  POINT  1129  16.85121538818617  28.93062131895283
+  POINT  1130  17.88627066804774  28.94881677035237
+  POINT  1131  -17.41542967730917  29.83375864838565
+  POINT  1132  -16.36598381746591  29.79324716653365
+  POINT  1133  -15.30571123700743  29.76326236085124
+  POINT  1134  -14.25334486558897  29.75293926663301
+  POINT  1135  -13.22518619984562  29.7683098214614
+  POINT  1136  -12.21928477595643  29.78625116079143
+  POINT  1137  -11.19741514236947  29.76826012438021
+  POINT  1138  -10.17050471136325  29.75174492628818
+  POINT  1139  -9.145044524339205  29.74157318849883
+  POINT  1140  -8.1237506134133  29.73611400010283
+  POINT  1141  -7.102985757155311  29.72937235399485
+  POINT  1142  -6.083575327030116  29.72406116587013
+  POINT  1143  -5.065015794708289  29.71965157618854
+  POINT  1144  -4.048200344643696  29.7173430556003
+  POINT  1145  -3.033238232867113  29.71657292251867
+  POINT  1146  -2.020549058249011  29.71719659405831
+  POINT  1147  -1.009738878373672  29.71805565528834
+  POINT  1148  5.919503985596375e-08  29.71837020929849
+  POINT  1149  1.009738994992378  29.71805571880686
+  POINT  1150  2.020549158880593  29.71719671483972
+  POINT  1151  3.033238290617864  29.71657306631699
+  POINT  1152  4.048200349715117  29.71734318068954
+  POINT  1153  5.065015770760248  29.7196516721558
+  POINT  1154  6.083575305003133  29.72406123347293
+  POINT  1155  7.102985771361372  29.72937240771407
+  POINT  1156  8.123750692148713  29.73611406625849
+  POINT  1157  9.145044681942796  29.74157331659041
+  POINT  1158  10.17050491805136  29.75174514843446
+  POINT  1159  11.19741536641047  29.76826054031946
+  POINT  1160  12.2192849573198  29.78625198231071
+  POINT  1161  13.22518614531627  29.76831101236639
+  POINT  1162  14.25334445158184  29.75294061103708
+  POINT  1163  15.30571051603222  29.76326396462168
+  POINT  1164  16.36598278510637  29.79324928955189
+  POINT  1165  17.41542794295087  29.83376171990615
+  POINT  1166  -16.89880493119268  30.69721421200391
+  POINT  1167  -15.84084671744584  30.63188582080215
+  POINT  1168  -14.75937079783184  30.62356117741139
+  POINT  1169  -13.72667803874304  30.6613328279952
+  POINT  1170  -12.74588714172752  30.71371027983801
+  POINT  1171  -11.72514438910883  30.68212290710705
+  POINT  1172  -10.69307402425253  30.65563776551792
+  POINT  1173  -9.663653547397562  30.64189426397848
+  POINT  1174  -8.642458727492786  30.63734439158867
+  POINT  1175  -7.620362459906692  30.62824675701598
+  POINT  1176  -6.599325061244341  30.62130216573695
+  POINT  1177  -5.577936826951563  30.6148672434393
+  POINT  1178  -4.558211164728247  30.61175248302345
+  POINT  1179  -3.540362154667188  30.61087880095583
+  POINT  1180  -2.525662571249494  30.61262583895858
+  POINT  1181  -1.513887280056144  30.61507416610434
+  POINT  1182  -0.5042972278699956  30.61670205839328
+  POINT  1183  0.5042973737465498  30.61670209443389
+  POINT  1184  1.513887429060817  30.61507428789713
+  POINT  1185  2.525662692669032  30.61262604572162
+  POINT  1186  3.54036219335181  30.61087902796626
+  POINT  1187  4.558211107788653  30.61175265802142
+  POINT  1188  5.577936725817437  30.61486735811178
+  POINT  1189  6.599324974859706  30.62130222879121
+  POINT  1190  7.620362447487361  30.62824680085264
+  POINT  1191  8.642458825941324  30.63734447157217
+  POINT  1192  9.663653754394943  30.64189448764897
+  POINT  1193  10.69307423735651  30.65563818384975
+  POINT  1194  11.72514453379872  30.68212369692436
+  POINT  1195  12.74588713706405  30.71371180853617
+  POINT  1196  13.72667758015037  30.66133475353996
+  POINT  1197  14.75936981763983  30.62356312399664
+  POINT  1198  15.84084548444188  30.63188806768807
+  POINT  1199  16.89880261226452  30.69721787530422
+  POINT  1200  -16.34009128149359  31.53262402545307
+  POINT  1201  -15.28568336821521  31.44708435232277
+  POINT  1202  -14.2209000727431  31.53141889752363
+  POINT  1203  -13.2977569951397  31.66679256172576
+  POINT  1204  -12.27301009857187  31.6040005347632
+  POINT  1205  -11.22445310392184  31.55974332082998
+  POINT  1206  -10.18420406298538  31.54252893027452
+  POINT  1207  -9.163915367393241  31.5436687933713
+  POINT  1208  -8.140599406135669  31.53125016600776
+  POINT  1209  -7.118690682844557  31.52230190448825
+  POINT  1210  -6.093912293860901  31.51225498074955
+  POINT  1211  -5.07053781765046  31.50770300997673
+  POINT  1212  -4.04849776527412  31.50615467955022
+  POINT  1213  -3.030710538587649  31.50945833368958
+  POINT  1214  -2.017113296966526  31.51446605862232
+  POINT  1215  -1.007152972521004  31.5188773687048
+  POINT  1216  8.069955546863294e-08  31.52094595365134
+  POINT  1217  1.007153147259242  31.51887744675579
+  POINT  1218  2.017113486527146  31.51446627236329
+  POINT  1219  3.030710673050414  31.50945868636081
+  POINT  1220  4.048497739728965  31.5061550381337
+  POINT  1221  5.070537627085144  31.50770325017226
+  POINT  1222  6.093912047408612  31.51225510381275
+  POINT  1223  7.118690492026126  31.52230193550043
+  POINT  1224  8.140599370382356  31.53125017994062
+  POINT  1225  9.163915512128149  31.54366891796288
+  POINT  1226  10.18420431641738  31.5425293949968
+  POINT  1227  11.22445321142737  31.55974415861684
+  POINT  1228  12.27300998503818  31.60400199599792
+  POINT  1229  13.29775665030186  31.66679525624402
+  POINT  1230  14.22089893057988  31.53142164267454
+  POINT  1231  15.28568200198485  31.44708667752904
+  POINT  1232  16.34008819047632  31.53262840498486
+  POINT  1233  -15.74070991046201  32.33815429935463
+  POINT  1234  -14.74688528329741  32.29702825850423
+  POINT  1235  -13.93190385661229  32.65477363083443
+  POINT  1236  -12.86506936822592  32.52891304941449
+  POINT  1237  -11.77212159391218  32.45232300476276
+  POINT  1238  -10.70587315849742  32.4347153350411
+  POINT  1239  -9.687662057866612  32.45538673008075
+  POINT  1240  -8.662564266803992  32.43904962117873
+  POINT  1241  -7.6420354397583  32.42864000943801
+  POINT  1242  -6.613519518949163  32.41191777411576
+  POINT  1243  -5.586073763699214  32.40488779735104
+  POINT  1244  -4.558141198059786  32.40119064612167
+  POINT  1245  -3.535940044697491  32.40633890872039
+  POINT  1246  -2.519295876494282  32.41479259504359
+  POINT  1247  -1.507828324987365  32.42353533511525
+  POINT  1248  -0.5019149230875003  32.43049565557803
+  POINT  1249  0.5019150823275319  32.43049567799903
+  POINT  1250  1.507828527783088  32.42353546677084
+  POINT  1251  2.519296107078045  32.41479297153293
+  POINT  1252  3.535940160588894  32.40633951541907
+  POINT  1253  4.558141018794441  32.40119120765029
+  POINT  1254  5.58607332108212  32.40488811417254
+  POINT  1255  6.613519029401044  32.41191787120312
+  POINT  1256  7.642035101328529  32.4286399487375
+  POINT  1257  8.662564215711519  32.43904959879422
+  POINT  1258  9.687662207059672  32.45538705154674
+  POINT  1259  10.70587327603016  32.43471639543523
+  POINT  1260  11.77212124413756  32.45232461789568
+  POINT  1261  12.86506864437663  32.5289155171651
+  POINT  1262  13.9319031453721  32.65477802453022
+  POINT  1263  14.74688388336436  32.29703064706029
+  POINT  1264  15.74070577682765  32.33815957294095
+  POINT  1265  -15.07552072766293  33.14262814282181
+  POINT  1266  -14.47383699079426  33.80246509548604
+  POINT  1267  -13.45485613851754  33.44616152809291
+  POINT  1268  -12.31042376721847  33.31655850201416
+  POINT  1269  -11.2135033566313  33.30180198841559
+  POINT  1270  -10.20833474124087  33.37195219581763
+  POINT  1271  -9.180106558323141  33.35165297473918
+  POINT  1272  -8.167116093012913  33.3442344487901
+  POINT  1273  -7.135707070230799  33.31483801144155
+  POINT  1274  -6.105345665605076  33.30379118897195
+  POINT  1275  -5.06957725725357  33.29468673625933
+  POINT  1276  -4.041801375578952  33.30179332186751
+  POINT  1277  -3.020762110140957  33.31421796476505
+  POINT  1278  -2.005808444215231  33.32826293060971
+  POINT  1279  -1.000289102538041  33.34360137140605
+  POINT  1280  4.397051474314129e-08  33.34996601347633
+  POINT  1281  1.000289226544982  33.34360139490249
+  POINT  1282  2.005808652593252  33.32826315749907
+  POINT  1283  3.020762356793561  33.31421864049496
+  POINT  1284  4.04180140274841  33.30179435588055
+  POINT  1285  5.069576774752012  33.29468759101248
+  POINT  1286  6.105344800786285  33.30379157372327
+  POINT  1287  7.135706209600581  33.31483800284786
+  POINT  1288  8.167115522703435  33.3442342276991
+  POINT  1289  9.180106333286005  33.35165308658632
+  POINT  1290  10.20833438162417  33.37195324049043
+  POINT  1291  11.21350253681438  33.30180425811116
+  POINT  1292  12.31042180764285  33.31656140263814
+  POINT  1293  13.4548524153751  33.44616582254692
+  POINT  1294  14.47383044482127  33.80247196173818
+  POINT  1295  15.07551512015369  33.14263458603429
+  POINT  1296  -13.79621587368983  34.47979377169069
+  POINT  1297  -12.80117612552641  34.14340935306568
+  POINT  1298  -11.67938708456585  34.12832297638581
+  POINT  1299  -10.72142132443546  34.29425844362311
+  POINT  1300  -9.682832980733666  34.26424534470635
+  POINT  1301  -8.688207103612132  34.27689307018375
+  POINT  1302  -7.65563025945943  34.22402537362621
+  POINT  1303  -6.627660152089107  34.20733211365729
+  POINT  1304  -5.582314868145199  34.18559033550888
+  POINT  1305  -4.548886327711884  34.19487513879358
+  POINT  1306  -3.522722983675548  34.21111636664738
+  POINT  1307  -2.501187911497048  34.22961986771382
+  POINT  1308  -1.494394684397123  34.25705724567609
+  POINT  1309  -0.4971265849464807  34.27519845138761
+  POINT  1310  0.4971265078887681  34.27519841977612
+  POINT  1311  1.494394688445157  34.25705727178087
+  POINT  1312  2.501188049285862  34.22962028369921
+  POINT  1313  3.522723188878942  34.21111756307139
+  POINT  1314  4.548886155833521  34.19487684951891
+  POINT  1315  5.582313876849914  34.18559156986573
+  POINT  1316  6.627658663296168  34.20733251253952
+  POINT  1317  7.655628853358176  34.22402516036131
+  POINT  1318  8.68820599240011  34.27689283063138
+  POINT  1319  9.682831841060921  34.26424634549341
+  POINT  1320  10.72141915815556  34.29426114991747
+  POINT  1321  11.67938420379727  34.12832694300539
+  POINT  1322  12.80117158164824  34.14341469815486
+  POINT  1323  13.79620812794538  34.47980114816573
+  POINT  1324  -13.06808813704192  35.14018072687722
+  POINT  1325  -12.14172620096994  34.87954210817981
+  POINT  1326  -11.26850255798744  35.2174633859475
+  POINT  1327  -10.17404344203454  35.15495143560162
+  POINT  1328  -9.208060341626505  35.23313312650344
+  POINT  1329  -8.164338718552617  35.1425249690552
+  POINT  1330  -7.149966973739355  35.12413503072115
+  POINT  1331  -6.093958485983832  35.07390856861841
+  POINT  1332  -5.058078832983085  35.0862120839201
+  POINT  1333  -4.028041239492521  35.10535340409478
+  POINT  1334  -2.995366542760057  35.12335223032324
+  POINT  1335  -1.984673994347679  35.16616214935111
+  POINT  1336  -0.9889440302704526  35.202230425387
+  POINT  1337  -2.362829220701329e-07  35.21561385455021
+  POINT  1338  0.9889435978667032  35.20223033196604
+  POINT  1339  1.984673688665513  35.16616222501731
+  POINT  1340  2.995366465565271  35.12335296470669
+  POINT  1341  4.028041331825868  35.10535544561446
+  POINT  1342  5.05807832979828  35.08621479165007
+  POINT  1343  6.093956728733247  35.07391022323044
+  POINT  1344  7.149964603949941  35.12413537360996
+  POINT  1345  8.16433638165371  35.14252466978046
+  POINT  1346  9.208057389898194  35.23313393742545
+  POINT  1347  10.17403944712447  35.15495471543825
+  POINT  1348  11.26849645211291  35.21746853325359
+  POINT  1349  12.14171999880287  34.87954795411678
+  POINT  1350  13.0680787036588  35.14018886919808
+  POINT  1351  -12.25874524554923  35.80263158479386
+  POINT  1352  -10.64940816662681  35.9609434482652
+  POINT  1353  -9.738993523076187  36.21117036120386
+  POINT  1354  -8.645496887251596  36.05535363229623
+  POINT  1355  -7.660082219217359  36.07236004253533
+  POINT  1356  -6.59386247522779  35.96253496561209
+  POINT  1357  -5.568601871711349  35.98133911135642
+  POINT  1358  -4.542278169739824  36.00016620825533
+  POINT  1359  -3.491371001354527  36.00500762088945
+  POINT  1360  -2.474010083407105  36.06498819452312
+  POINT  1361  -1.477289195045545  36.12504113606641
+  POINT  1362  -0.4912059285544867  36.15975599214231
+  POINT  1363  0.4912047027322386  36.15975590621064
+  POINT  1364  1.477288036732875  36.12504100856928
+  POINT  1365  2.474009154113311  36.06498836685221
+  POINT  1366  3.491370484225889  36.005008798768
+  POINT  1367  4.542278089478654  36.00016955223765
+  POINT  1368  5.568600813180165  35.98134321823733
+  POINT  1369  6.593859519726857  35.96253699972355
+  POINT  1370  7.660078711252875  36.07236031674334
+  POINT  1371  8.64549260236045  36.05535452011431
+  POINT  1372  9.738986372954258  36.21117440008044
+  POINT  1373  10.64940057210636  35.96094915519707
+  POINT  1374  12.25873414120749  35.80264019887823
+  POINT  1375  -11.51773025350177  36.35059294972418
+  POINT  1376  -10.65697659081121  36.92420899016856
+  POINT  1377  -9.073839610332337  36.90105300548846
+  POINT  1378  -8.146483166419303  37.06536476868484
+  POINT  1379  -7.049598100139526  36.85375720886346
+  POINT  1380  -6.068285778904927  36.89990321056391
+  POINT  1381  -5.072991493907814  36.90817616854977
+  POINT  1382  -3.99387954502805  36.86886824762014
+  POINT  1383  -2.967956221366422  36.948391661155
+  POINT  1384  -1.969359381657599  37.03579454421214
+  POINT  1385  -0.9811568690244843  37.09928427270614
+  POINT  1386  -1.321646322029191e-06  37.12286421524274
+  POINT  1387  0.9811542273605319  37.09928414206929
+  POINT  1388  1.969356939200988  37.03579438002285
+  POINT  1389  2.967954164856175  36.94839197135881
+  POINT  1390  3.993878153189894  36.86886991249742
+  POINT  1391  5.072990965328807  36.90818161389328
+  POINT  1392  6.068283175739424  36.89990903124271
+  POINT  1393  7.049593675630685  36.85375859784719
+  POINT  1394  8.146477155142176  37.06536635726837
+  POINT  1395  9.073831993817508  36.90105705402716
+  POINT  1396  10.65696264541113  36.92421777141614
+  POINT  1397  11.51771778734179  36.35060173116444
+  POINT  1398  -9.874844025420192  37.39216649740979
+  POINT  1399  -8.96740748095799  37.87695732138048
+  POINT  1400  -7.438938982686154  37.68347468260948
+  POINT  1401  -6.50593626267252  37.87694008295671
+  POINT  1402  -5.61747021210558  37.87127533952164
+  POINT  1403  -4.50493919684402  37.70762847888211
+  POINT  1404  -3.474895680182776  37.81110994000395
+  POINT  1405  -2.47779011320007  37.9305818016129
+  POINT  1406  -1.486534122834006  38.0216095618874
+  POINT  1407  -0.4945352453330601  38.07921156797903
+  POINT  1408  0.4945300811634933  38.07921159550066
+  POINT  1409  1.486529221010789  38.02160930967654
+  POINT  1410  2.477785571750189  37.9305816710405
+  POINT  1411  3.474891600531238  37.81111046960394
+  POINT  1412  4.504935871545127  37.70763053498042
+  POINT  1413  5.617467804911568  37.87128486851104
+  POINT  1414  6.505933128734337  37.87694376153858
+  POINT  1415  7.438934268999978  37.68347575716164
+  POINT  1416  8.967392296606542  37.87696493811983
+  POINT  1417  9.874829237160435  37.39217489381149
+  POINT  1418  -8.147493943469181  38.26522221165496
+  POINT  1419  -7.204335412055579  38.65737257146897
+  POINT  1420  -6.323312496190199  38.97408019050001
+  POINT  1421  -5.01203726983948  38.51297624845616
+  POINT  1422  -4.001501092985738  38.651230540567
+  POINT  1423  -3.020444675311309  38.806876475282
+  POINT  1424  -2.033095442850132  38.92553139969691
+  POINT  1425  -1.029249995848707  39.00470609623093
+  POINT  1426  -4.74370389105111e-06  39.04491520100409
+  POINT  1427  1.029241328499785  39.00470590960975
+  POINT  1428  2.033087058128695  38.92553128934863
+  POINT  1429  3.020436112344315  38.80687697855863
+  POINT  1430  4.001492023142893  38.65123203877156
+  POINT  1431  5.01202711215084  38.51297927624825
+  POINT  1432  6.323297249481397  38.97408527161986
+  POINT  1433  7.204321660158831  38.6573778816041
+  POINT  1434  8.147479092148298  38.26522883631657
+  POINT  1435  -5.49459488339432  39.2304297161394
+  POINT  1436  -4.555054134591538  39.47438013983862
+  POINT  1437  -3.625104797446435  39.66872174818514
+  POINT  1438  -2.68641217378018  39.8187585290443
+  POINT  1439  -1.753727660812683  39.92296262335634
+  POINT  1440  -0.8514203504713909  39.98186887129251
+  POINT  1441  0.8514156417348741  39.98186906132761
+  POINT  1442  1.753718582443226  39.92296341244428
+  POINT  1443  2.686399886263002  39.81876019460063
+  POINT  1444  3.625089980059974  39.66872447914377
+  POINT  1445  4.555037417817725  39.47438404988157
+  POINT  1446  5.494577273669186  39.23043474765144
+  POINT  1447  -10.17836236469941  9.351236080585844
+  POINT  1448  -10.43178822028154  9.796311205363828
+  POINT  1449  -9.917078319793836  9.803182550031517
+  POINT  1450  -0.4257127323325477  0.4866079094147974
+  POINT  1451  -2.371846788213477e-06  0.477542337394691
+  POINT  1452  -0.4258068646365975  0.004533301166143754
+  POINT  1453  -7.678410559861725  1.532677211575885
+  POINT  1454  -7.321632913802258  1.829573658302515
+  POINT  1455  -7.793213434540115  2.025649120773706
+  POINT  1456  -0.4257125470876409  39.5133920361483
+  POINT  1457  -2.371851945525555e-06  39.52245760050205
+  POINT  1458  -0.4258066792652949  39.99546670279175
+  POINT  1459  19.49788122060637  21.77367208818195
+  POINT  1460  19.87859224467908  22.20035688754039
+  POINT  1461  19.44771880960396  22.22685226353656
+  POINT  1462  19.95652174895268  21.31804389755909
+  POINT  1463  19.52620596169076  21.34480675106996
+  POINT  1464  -18.50178077972164  27.59500547042333
+  POINT  1465  -18.00418516392628  27.60561553936703
+  POINT  1466  -18.19154542750159  27.14919736516595
+  POINT  1467  2.318125029883721  20.44808511760801
+  POINT  1468  2.823024436302765  20.4446500619237
+  POINT  1469  2.535961498642024  20.89273520263026
+  POINT  1470  -18.1915204806717  12.85075360776577
+  POINT  1471  -18.00416183249957  12.39434254388758
+  POINT  1472  -18.50176221811813  12.40494933886966
+  POINT  1473  -10.43863716835151  8.90091854855763
+  POINT  1474  -9.923927267863803  8.907789893225319
+  POINT  1475  -10.95968604283294  7.131741057062447
+  POINT  1476  -11.49280931695378  7.122937192173756
+  POINT  1477  -11.23899374083607  7.556481059276784
+  POINT  1478  -10.96516006976062  8.002771637036583
+  POINT  1479  -11.49828334388146  7.993967772147892
+  POINT  1480  -10.70432587216095  8.448865355552398
+  POINT  1481  -10.95876096899656  8.892311542912923
+  POINT  1482  -10.44503626911557  8.01137864268129
+  POINT  1483  14.20285675279642  6.771375017633135
+  POINT  1484  14.50369851507584  7.101292773533388
+  POINT  1485  14.77834984324904  6.524081630761735
+  POINT  1486  12.23551226998423  9.30208580312808
+  POINT  1487  11.99907300324982  8.856939970398869
+  POINT  1488  12.50944368805203  8.841146276347569
+  POINT  1489  11.97221231742172  9.765815913514722
+  POINT  1490  12.48258300222394  9.750022219463421
+  POINT  1491  -0.4905789853227912  2.888925581404812
+  POINT  1492  -0.7361812304740789  3.37047972852181
+  POINT  1493  -0.2456035667837216  3.358689771784562
+  POINT  1494  -4.783548996192389  1.006323236939901
+  POINT  1495  -5.026302453506227  0.6418935979999102
+  POINT  1496  -5.253316898193344  1.128297748069279
+  POINT  1497  -4.278279517467413  0.9371948906828067
+  POINT  1498  -4.50677415895651  1.41789821597725
+  POINT  1499  -3.813305411122727  0.8400241846748683
+  POINT  1500  -4.09123434595309  0.4229266387245523
+  POINT  1501  1.893402820285961  39.42424735089645
+  POINT  1502  2.359743472195849  39.37214574197463
+  POINT  1503  2.220670538841968  39.87633322383852
+  POINT  1504  0.2472626687298011  38.56206339825238
+  POINT  1505  -2.582084783431249e-06  38.07921158173984
+  POINT  1506  -0.2472699945184756  38.56206338449157
+  POINT  1507  10.65318160875874  36.4425834633066
+  POINT  1508  11.08355917972408  36.15577544318076
+  POINT  1509  11.09104919162302  36.64297534268243
+  POINT  1510  4.506759567646867  38.5821056575099
+  POINT  1511  4.758481491847984  38.11030490561433
+  POINT  1512  4.25321394734401  38.179431286876
+  POINT  1513  4.783532264984283  38.9936816630649
+  POINT  1514  5.253302192910013  38.87170701194984
+  POINT  1515  5.026287577931008  39.35811027344018
+  POINT  1516  4.278264720480308  39.06280804432657
+  POINT  1517  2.271388089598089  31.06354615904246
+  POINT  1518  1.765500457793982  31.06477028013021
+  POINT  1519  2.019775060864925  30.61385016680937
+  POINT  1520  2.52391207978878  31.51196247936205
+  POINT  1521  2.778186682859723  31.06104236604121
+  POINT  1522  19.58406521140076  19.55566934611801
+  POINT  1523  19.59394271675515  20.00002569416793
+  POINT  1524  19.99506063684425  19.5555338953416
+  POINT  1525  19.58406161774156  20.44446277646284
+  POINT  1526  19.99505884072375  20.44454692352635
+  POINT  1527  17.47612722659238  20.45170520807109
+  POINT  1528  17.94956809694392  20.45199983601073
+  POINT  1529  17.76408318096152  19.99954840147309
+  POINT  1530  17.09376279229357  20.90344554562439
+  POINT  1531  16.90827787631117  20.45099411108675
+  POINT  1532  17.65639440029453  29.39423957186695
+  POINT  1533  17.13332166556852  29.38219151942949
+  POINT  1534  17.36874302811696  28.9397190446526
+  POINT  1535  13.61482989783698  32.16078664038712
+  POINT  1536  14.07640103797599  32.09309983360238
+  POINT  1537  13.75932779044087  31.59910844945928
+  POINT  1538  16.10341413477412  30.21256867861998
+  POINT  1539  16.63239269868544  30.24523358242805
+  POINT  1540  16.3698240483532  30.66455297149614
+  POINT  1541  16.89070536402862  29.81350550472902
+  POINT  1542  16.60859908664627  29.36193530425236
+  POINT  1543  17.1625462541375  30.26873928275396
+  POINT  1544  16.0904668374591  31.08225823633646
+  POINT  1545  16.6246937806281  31.11843321269683
+  POINT  1546  15.81288509623059  31.48985754125695
+  POINT  1547  16.04545280411266  31.9391559472781
+  POINT  1548  15.51319388940625  31.89262312523499
+  POINT  1549  15.56326374321337  31.03948737260855
+  POINT  1550  13.77222000363087  24.39434126697991
+  POINT  1551  13.50730940690564  24.83959165127776
+  POINT  1552  14.02976238006146  24.83530625723629
+  POINT  1553  12.98553330932471  9.758991772893435
+  POINT  1554  12.72223335676221  10.22272188328008
+  POINT  1555  16.25410351335674  12.9148587217591
+  POINT  1556  16.01906260946011  13.38331048867258
+  POINT  1557  16.5117595380726  13.37602992964366
+  POINT  1558  16.89069502922413  10.18647787299363
+  POINT  1559  16.60858850912514  10.63804911311348
+  POINT  1560  17.13330989107297  10.61778909765387
+  POINT  1561  16.09214844821832  10.65648742134303
+  POINT  1562  16.33476331006715  11.08779864600327
+  POINT  1563  -17.80117652624369  28.04993852124202
+  POINT  1564  -17.49657169072127  27.60644176445565
+  POINT  1565  -19.58406168080147  20.44446288474986
+  POINT  1566  -19.59394278438359  20.00002569746599
+  POINT  1567  -19.99505883837563  20.44454702859078
+  POINT  1568  -18.996847002171  20.45276507073249
+  POINT  1569  -19.3930231142053  20.89717656055036
+  POINT  1570  -19.58406527491918  19.55566925469715
+  POINT  1571  -19.99506063472496  19.55553380055498
+  POINT  1572  -18.99703876946375  19.54715259717118
+  POINT  1573  -19.39321847561576  19.10277045693634
+  POINT  1574  -1.233845495929245  37.56044691729677
+  POINT  1575  -0.9905346840835332  38.05041056493322
+  POINT  1576  -0.7378460571787722  37.58924792034259
+  POINT  1577  -1.759814782842069  38.47357048079215
+  POINT  1578  -1.982162118017038  37.97609568175015
+  POINT  1579  -2.255442778025101  38.42805660065491
+  POINT  1580  -1.503048773376636  33.33593215100788
+  POINT  1581  -1.756818384601298  32.87589913286249
+  POINT  1582  -1.254058713762703  32.88356835326066
+  POINT  1583  13.51221711522611  31.16406500489199
+  POINT  1584  13.97378825536513  31.09637819810725
+  POINT  1585  1.775181014606737  21.33393361663671
+  POINT  1586  1.267840964225153  21.33711381427801
+  POINT  1587  1.523722041841396  20.89935045595586
+  POINT  1588  1.265170094048079  22.20914709544139
+  POINT  1589  1.77056085321017  22.20855342148825
+  POINT  1590  1.516431010267755  22.64600354197079
+  POINT  1591  1.012728381227997  21.77259296305717
+  POINT  1592  0.7612694084626562  21.33800980237632
+  POINT  1593  0.758598538285582  22.21004308353971
+  POINT  1594  1.847863631555612  20.4480851260611
+  POINT  1595  1.340523581174028  20.45126532370239
+  POINT  1596  2.134926569216352  19.99999998535455
+  POINT  1597  2.280691513968954  21.33225925723105
+  POINT  1598  2.785590920387998  21.32882420154674
+  POINT  1599  2.02481043635271  21.7700226155532
+  POINT  1600  2.78116495724771  22.20597296072012
+  POINT  1601  2.276071352572386  22.20687906208259
+  POINT  1602  2.52691537410517  22.64450376665516
+  POINT  1603  -9.899143737765993  12.4849004435783
+  POINT  1604  -9.387390829537839  12.48845944608934
+  POINT  1605  -9.645780226280916  12.0410160502686
+  POINT  1606  -11.94630637827111  14.2647893097616
+  POINT  1607  -12.46345218922917  14.26650973789091
+  POINT  1608  -12.20840695700918  14.7105827019253
+  POINT  1609  -13.22907293656634  11.13290745457848
+  POINT  1610  -13.48445463159971  11.58282180341283
+  POINT  1611  -12.9714364037251  11.58072072087271
+  POINT  1612  -12.45912889682464  11.58045014485459
+  POINT  1613  -11.9508016855418  11.57834567717223
+  POINT  1614  -12.20772749740889  11.128701904356
+  POINT  1615  -12.71451059185801  12.03036449368894
+  POINT  1616  -13.62553305310023  6.037019882652965
+  POINT  1617  -14.1390779208095  5.854807348663457
+  POINT  1618  -13.96434315411798  6.375683521723212
+  POINT  1619  -13.39847526011537  7.408160088352634
+  POINT  1620  -13.61481920361369  7.839222070915377
+  POINT  1621  -13.0814052589453  7.902150069513514
+  POINT  1622  -13.69337197744059  6.949534963734737
+  POINT  1623  -13.1599580327722  7.012462962332874
+  POINT  1624  -14.5037016745593  7.101298192194127
+  POINT  1625  -14.20286038146115  6.771380647742971
+  POINT  1626  -14.7783559058492  6.524088291719242
+  POINT  1627  -13.23627871209868  9.312480837244131
+  POINT  1628  -13.51221183367959  8.835940044420862
+  POINT  1629  -13.02181608086271  8.809752844899524
+  POINT  1630  -16.36981698070831  9.335436989756825
+  POINT  1631  -16.09046066583428  8.917733609398496
+  POINT  1632  -16.62468707069794  8.881556790786455
+  POINT  1633  -15.56325712327145  8.960504702078703
+  POINT  1634  -15.81287888901091  8.510134528156787
+  POINT  1635  -15.51318860052802  8.107370522015474
+  POINT  1636  -16.04544791423854  8.060837516432803
+  POINT  1637  -12.46766878840969  10.67227976168969
+  POINT  1638  -11.95934157712685  10.67017529400733
+  POINT  1639  -10.71091751983426  6.663122417067669
+  POINT  1640  -10.45710194371655  7.096666284170696
+  POINT  1641  -10.46487666458869  6.166894149966415
+  POINT  1642  -10.96746076370507  6.201968922858168
+  POINT  1643  -10.44773102895123  5.275394031275448
+  POINT  1644  -10.20212605088105  5.720747497892338
+  POINT  1645  -9.928437171372778  5.290400873410871
+  POINT  1646  -9.945582807010235  6.18190099210184
+  POINT  1647  -13.2986928764065  5.688395693536721
+  POINT  1648  -13.12801457340368  6.205213648598734
+  POINT  1649  -11.74872710378692  8.418130127367466
+  POINT  1650  -12.02256077486237  7.971839549607667
+  POINT  1651  -12.50944374702482  8.841147771275015
+  POINT  1652  -12.78537686860573  8.36460697845175
+  POINT  1653  -12.56903292510741  7.933544995889006
+  POINT  1654  -12.31858916520195  7.509382640669432
+  POINT  1655  13.43619694655841  5.185526953886848
+  POINT  1656  12.93462220614015  5.358195834077412
+  POINT  1657  13.29868673147849  5.68838933264013
+  POINT  1658  12.6048962546636  4.990129099323558
+  POINT  1659  12.47144390129601  5.488517379573725
+  POINT  1660  12.66773340441992  4.523290710179079
+  POINT  1661  12.20022404450319  4.658903670708396
+  POINT  1662  10.71091693015139  6.663120759878266
+  POINT  1663  10.46487540167239  6.166892274467385
+  POINT  1664  10.96745927067751  6.201966434828546
+  POINT  1665  11.47479568277288  8.879068504656995
+  POINT  1666  11.74872710084068  8.418128977876485
+  POINT  1667  10.41171824790274  4.44204662093386
+  POINT  1668  9.95651127773848  4.316934168875102
+  POINT  1669  10.19419137109885  3.91393666291501
+  POINT  1670  10.72126631852727  4.813787013527604
+  POINT  1671  10.99495611235534  5.244133924789459
+  POINT  1672  10.44772794837044  5.275391038155809
+  POINT  1673  10.95894641188764  4.410789507567511
+  POINT  1674  11.39310410040094  4.215962651334707
+  POINT  1675  11.08355602977641  3.844222258740964
+  POINT  1676  11.76361231084955  4.489943298379086
+  POINT  1677  11.89137865119184  3.919107181901866
+  POINT  1678  11.70510621616581  4.951490272490563
+  POINT  1679  10.26855741345323  2.837344939506088
+  POINT  1680  10.19797132927438  3.43230183825083
+  POINT  1681  9.806904421137391  3.198323297051241
+  POINT  1682  10.65317829943864  3.557414290309588
+  POINT  1683  11.09104496327604  3.357021849792107
+  POINT  1684  15.24378585350844  7.682394375166194
+  POINT  1685  14.91119126151212  7.280158226193516
+  POINT  1686  15.41335252508149  7.2552534786716
+  POINT  1687  14.33938124011792  7.524093148708583
+  POINT  1688  14.48388392770153  8.085767740880334
+  POINT  1689  14.07639118126524  7.906902288220206
+  POINT  1690  13.61481867571485  7.839218526827278
+  POINT  1691  13.75932136329846  8.400893118999029
+  POINT  1692  13.02181590626726  8.80975073334144
+  POINT  1693  12.78537663953285  8.364604900612228
+  POINT  1694  13.47592883520427  9.785178774102992
+  POINT  1695  13.99000741695932  9.792862338836377
+  POINT  1696  13.73926224561804  10.23937500144348
+  POINT  1697  13.236278480666  9.312479110286336
+  POINT  1698  13.51221143214682  8.835937734550996
+  POINT  1699  13.97378393769721  8.903621495943923
+  POINT  1700  11.4612780216533  9.774811388208361
+  POINT  1701  11.70834875389301  10.2227478045437
+  POINT  1702  1.893403551233607  0.5757525887353929
+  POINT  1703  2.220671493500129  0.1236668831597823
+  POINT  1704  2.359744414402249  0.6278542389056427
+  POINT  1705  -9.020619693030262  2.610992623251209
+  POINT  1706  -9.424238324783893  2.359599448271815
+  POINT  1707  -9.474338358545761  2.853388073889197
+  POINT  1708  -9.406414519116504  3.443886808846754
+  POINT  1709  -9.192243991855898  3.8667371366121
+  POINT  1710  -8.859666959835261  3.521795695676809
+  POINT  1711  -9.806915390566399  3.198329514824488
+  POINT  1712  -10.19798187725191  3.432308248445783
+  POINT  1713  -10.26857176218753  2.83735353592188
+  POINT  1714  -0.2472699682428073  1.437936441491353
+  POINT  1715  -2.582068645534674e-06  1.920788194433522
+  POINT  1716  0.2472626424805853  1.437936427731552
+  POINT  1717  -0.247268257212236  2.398961916430443
+  POINT  1718  0.2472643535111566  2.398961902670643
+  POINT  1719  -0.7378459209025934  2.410751873167692
+  POINT  1720  -3.510975514120101  1.270946662206892
+  POINT  1721  -3.322776245011294  0.762200977161605
+  POINT  1722  -2.853429843183762  0.6871825417534015
+  POINT  1723  -3.156651266211425  0.2506822223484442
+  POINT  1724  -2.526771255348011  1.133795929446323
+  POINT  1725  -2.359754750523105  0.6278550165060958
+  POINT  1726  -2.749118087874698  1.631270599590879
+  POINT  1727  -2.255442995214041  1.571943074343573
+  POINT  1728  1.53116419331424  38.96511859947919
+  POINT  1729  1.391479955471506  39.46383466102701
+  POINT  1730  0.7618857048316392  38.5419587525552
+  POINT  1731  0.5146182923979471  39.02481055530693
+  POINT  1732  1.257885274755287  38.51315760964314
+  POINT  1733  1.759808139569742  38.47357029951259
+  POINT  1734  0.9905296510871409  38.0504104525886
+  POINT  1735  -0.4905790953354032  37.11107424397444
+  POINT  1736  -0.2472682834896911  37.60103789161089
+  POINT  1737  0.2472643797585856  37.6010379053717
+  POINT  1738  1.263131334613411  23.08451873542055
+  POINT  1739  1.768522093775502  23.0839250614674
+  POINT  1740  10.17836399587573  30.64876633574936
+  POINT  1741  10.43178957770394  30.2036916661421
+  POINT  1742  9.917079336223154  30.19681981804171
+  POINT  1743  2.526761585236505  38.86620413395363
+  POINT  1744  2.853417999303659  39.31281858657962
+  POINT  1745  4.533434559259351  36.88852576319535
+  POINT  1746  4.788963418436968  37.30790607443685
+  POINT  1747  4.24940701236751  37.28825022373893
+  POINT  1748  -0.7511020128127708  32.88704851349204
+  POINT  1749  -1.004871624037433  32.42701549534664
+  POINT  1750  0.7570181843694639  30.16737890662038
+  POINT  1751  0.2521487164707948  30.16753615186619
+  POINT  1752  0.5048695270937089  29.71821296405268
+  POINT  1753  1.009092401403684  30.61588819116551
+  POINT  1754  1.261813212026598  30.16656500335199
+  POINT  1755  5.068073916803044  30.6133100080666
+  POINT  1756  4.814374367436898  31.05972795409684
+  POINT  1757  5.32423717645129  31.06128530414202
+  POINT  1758  16.9971372534731  13.37045922378724
+  POINT  1759  16.76209634957647  13.83891099070072
+  POINT  1760  18.58096903763212  13.77579904583797
+  POINT  1761  18.85904395297749  13.34143701271937
+  POINT  1762  18.41152250629444  13.29587573790125
+  POINT  1763  18.68665357284071  14.64903426839365
+  POINT  1764  18.29676492885642  15.05256270617449
+  POINT  1765  18.88575798278899  15.06972612425592
+  POINT  1766  17.78489646840998  15.09030766023127
+  POINT  1767  17.98400087835825  15.51099951609354
+  POINT  1768  18.5600217445983  14.22769376801203
+  POINT  1769  18.11860781194196  14.17997612813817
+  POINT  1770  19.15364966814478  14.24346421008305
+  POINT  1771  17.67256729194256  14.23260556757826
+  POINT  1772  17.69351458497638  13.7807108454042
+  POINT  1773  18.99703873975269  19.54715250100616
+  POINT  1774  19.39321851764313  19.1027704587883
+  POINT  1775  18.52185804865407  19.54704832154459
+  POINT  1776  18.71270474241169  19.9999472088743
+  POINT  1777  17.69535052595289  15.99996226585984
+  POINT  1778  18.20721898639934  15.96221731180307
+  POINT  1779  14.56172135096343  23.94597916401752
+  POINT  1780  15.08739392619418  23.94259090424376
+  POINT  1781  14.82034555201745  24.38666761316468
+  POINT  1782  19.39302316315837  20.89717655197163
+  POINT  1783  18.9389913228763  21.35310913845178
+  POINT  1784  18.99684697892711  20.45276516384465
+  POINT  1785  18.5216662878285  20.45266098438309
+  POINT  1786  18.23371033345935  20.90481779098108
+  POINT  1787  18.44846900788159  21.34055417663924
+  POINT  1788  18.58165180641398  21.78818437573758
+  POINT  1789  17.87637081699702  21.33989302826688
+  POINT  1790  14.33939351436823  32.47590433579525
+  POINT  1791  14.48389140697212  31.91422614486741
+  POINT  1792  15.01628294267461  31.87205866229466
+  POINT  1793  14.75329046628237  31.48925416010179
+  POINT  1794  15.24379483009601  32.31759511000062
+  POINT  1795  13.51391520548446  23.95486250753157
+  POINT  1796  13.2557163229842  23.51457606093689
+  POINT  1797  12.99156814797479  23.95834021442671
+  POINT  1798  14.03636817864028  23.9505771134901
+  POINT  1799  14.30341655281701  23.50650040456918
+  POINT  1800  14.0490662851837  23.06997473842002
+  POINT  1801  14.57441945750685  23.06537678894744
+  POINT  1802  14.06279368008757  21.3236640608961
+  POINT  1803  13.53137856169023  21.32075100476631
+  POINT  1804  13.79945769458797  20.88653785779963
+  POINT  1805  16.48589251600749  21.75662015498322
+  POINT  1806  16.7770188066016  21.32987302051025
+  POINT  1807  16.23478715141826  21.32948158311302
+  POINT  1808  17.3448681568828  21.33058411749459
+  POINT  1809  17.55962683130505  21.76632050315274
+  POINT  1810  16.93904168525997  24.42265130776862
+  POINT  1811  17.21421228526815  24.86330083072308
+  POINT  1812  16.6810332475078  24.83472173963332
+  POINT  1813  17.1982158646259  23.98500607585395
+  POINT  1814  16.66503682686555  23.95642698476418
+  POINT  1815  19.16297996782281  24.02058583340057
+  POINT  1816  19.25792778397388  23.55188868076646
+  POINT  1817  19.6018346474257  23.97090400112769
+  POINT  1818  18.66035549167398  24.06458002427793
+  POINT  1819  18.99865807228879  24.48246002560036
+  POINT  1820  14.55271823159151  24.83011771959528
+  POINT  1821  15.07839080682226  24.82672945982152
+  POINT  1822  14.28780763486628  25.27536810389313
+  POINT  1823  13.48363738345204  10.68334955994101
+  POINT  1824  13.99771596520709  10.69103312467439
+  POINT  1825  17.49654751855807  12.39351922586987
+  POINT  1826  17.22317514403901  12.87270591921469
+  POINT  1827  17.0201728164883  12.42839146938536
+  POINT  1828  17.91955247554229  13.28295754083165
+  POINT  1829  18.19151987686094  12.8507518727688
+  POINT  1830  17.47351195554288  13.33558698027175
+  POINT  1831  18.00416107324389  12.39434056037404
+  POINT  1832  18.50176146164216  12.40494748537886
+  POINT  1833  17.80115874569317  11.95002611054472
+  POINT  1834  16.79404890136688  11.97251973589774
+  POINT  1835  16.52067652684781  12.45170642924257
+  POINT  1836  16.02797959823532  12.45898698827148
+  POINT  1837  15.78700936626793  12.00541048997754
+  POINT  1838  15.52043635277687  12.46856278249407
+  POINT  1839  16.05643793044336  11.55103582499389
+  POINT  1840  15.5488946849849  11.56061161921647
+  POINT  1841  16.57287799135018  11.53259751676433
+  POINT  1842  17.07237428099067  11.50928255690713
+  POINT  1843  15.83583901726724  10.22173398984722
+  POINT  1844  15.57327102716685  9.802415814168842
+  POINT  1845  16.10340565717593  9.787419712774863
+  POINT  1846  15.56201381820924  10.67148352273701
+  POINT  1847  16.63238319420686  9.754752209684828
+  POINT  1848  17.16253549533622  9.731242758971581
+  POINT  1849  16.36981520410647  9.335434034006447
+  POINT  1850  16.62468438429443  8.881552759389605
+  POINT  1851  16.09045850341202  8.917730295952133
+  POINT  1852  -18.71270480363148  19.99994720870178
+  POINT  1853  -18.52166623703531  20.45266088450229
+  POINT  1854  -18.52185800432806  19.54704841094098
+  POINT  1855  -19.52620606861738  21.34480663718991
+  POINT  1856  -19.49788131345209  21.77367208204773
+  POINT  1857  -19.95652172785348  21.31804421550326
+  POINT  1858  -18.93899138998692  21.35310882317254
+  POINT  1859  -15.41336472355292  32.74473177212385
+  POINT  1860  -14.91120300548017  32.71982820066302
+  POINT  1861  -15.24379759687971  32.31759127892943
+  POINT  1862  -15.51319663933861  31.8926193258387
+  POINT  1863  -15.01628432575631  31.8720563054135
+  POINT  1864  -15.8128873248544  31.48985418888792
+  POINT  1865  -16.04545639284706  31.93915110915433
+  POINT  1866  -13.73926553271729  29.7606245440472
+  POINT  1867  -13.9977196654956  29.30896632719983
+  POINT  1868  -13.48364033262393  29.31665160461403
+  POINT  1869  -16.63239437432929  30.24523068926878
+  POINT  1870  -16.89070674738754  29.81350290745965
+  POINT  1871  -17.16254826435143  30.26873590905672
+  POINT  1872  -17.58991750209542  28.49978947605134
+  POINT  1873  -18.10312108953776  28.50158849460802
+  POINT  1874  -14.02976207391727  24.83530603116176
+  POINT  1875  -13.50730912711314  24.83959146419358
+  POINT  1876  -13.7722197102861  24.39434106981482
+  POINT  1877  -9.910917163711101  29.30166999886159
+  POINT  1878  -10.16379441977193  28.85693149401143
+  POINT  1879  -10.42338196742408  29.30700642143803
+  POINT  1880  -8.865707288319939  20.4402358718522
+  POINT  1881  -8.354951980244287  20.44018950619541
+  POINT  1882  -8.61056647960487  20.88042659780381
+  POINT  1883  -8.86570719768363  19.55976134425465
+  POINT  1884  -8.354952278862285  19.55980826280008
+  POINT  1885  -8.610566687586559  19.11957082681093
+  POINT  1886  -9.121386103645744  19.99999862799004
+  POINT  1887  -9.377000603006326  20.44023571959844
+  POINT  1888  -9.377000512370016  19.55976119200088
+  POINT  1889  -8.865603022394847  21.32049699917977
+  POINT  1890  -8.354847714319193  21.32045063352298
+  POINT  1891  -8.099972462421654  21.76042830181979
+  POINT  1892  -7.844935919631678  21.32035790044383
+  POINT  1893  -8.354715320124482  22.20063713853177
+  POINT  1894  -7.844803525436967  22.20054440545263
+  POINT  1895  -8.865674199362843  22.20088990639256
+  POINT  1896  -8.610505262378155  22.6410060100254
+  POINT  1897  -8.354985291815844  16.91842867771209
+  POINT  1898  -8.610508524984098  17.358992612215
+  POINT  1899  -8.865944756334432  16.91817546724494
+  POINT  1900  -5.563175305433118  20.88175519528509
+  POINT  1901  -5.819523783751198  20.44055366808308
+  POINT  1902  -5.314081970855431  20.4412012668848
+  POINT  1903  -6.323600721688926  20.44055355863392
+  POINT  1904  -6.07450738711124  19.99999963023362
+  POINT  1905  -7.845909792127558  19.5598084686856
+  POINT  1906  -7.337224145127458  19.55973210578316
+  POINT  1907  -7.591126121765114  19.11954138245392
+  POINT  1908  -7.085296070269434  19.99999935639965
+  POINT  1909  -6.83051239990699  19.55973227016798
+  POINT  1910  -8.101050302224628  19.99999898612932
+  POINT  1911  -7.84590949350956  20.44018971208093
+  POINT  1912  -4.813437732774505  20.44120133195445
+  POINT  1913  -5.069786211092584  19.99999980475244
+  POINT  1914  -4.81343786679399  19.55879836960208
+  POINT  1915  -5.314082104874918  19.55879830453243
+  POINT  1916  -4.309046734147286  19.55755213850044
+  POINT  1917  -4.553342627929618  19.11635063828043
+  POINT  1918  -4.309046659354325  20.44244765252682
+  POINT  1919  -4.553342419117173  20.88364911465918
+  POINT  1920  -6.321208714327986  18.67923371725688
+  POINT  1921  -5.814542592123692  18.67893193845749
+  POINT  1922  -6.067133751274726  18.23927391170671
+  POINT  1923  -5.563175657876638  19.11824430669487
+  POINT  1924  -5.309100694823378  18.67828450114469
+  POINT  1925  -6.575529014970982  19.11917838177958
+  POINT  1926  -6.828120174122017  18.6795203550288
+  POINT  1927  -5.819524002175232  19.55944574184523
+  POINT  1928  -6.323600940112959  19.55944563239606
+  POINT  1929  -0.5146273697762991  39.02481064861751
+  POINT  1930  -0.7618926205908836  38.54195883210498
+  POINT  1931  -1.257892059341357  38.51315782905916
+  POINT  1932  -1.53117271934942  38.96511874796391
+  POINT  1933  -0.940335173160049  39.49328748376172
+  POINT  1934  -1.391488828330695  39.46383435979364
+  POINT  1935  -1.302906939267033  39.95751571405174
+  POINT  1936  -1.893411551831407  39.42424701152662
+  POINT  1937  -1.723324288351572  36.58041784013928
+  POINT  1938  -1.475258125341042  37.06753940845914
+  POINT  1939  -1.229223032035015  36.61216270438628
+  POINT  1940  -2.223574747428835  37.48318817291252
+  POINT  1941  -2.46865780151201  36.99209310268357
+  POINT  1942  -2.722873167283246  37.43948673138395
+  POINT  1943  -1.727946752245803  37.52870205304977
+  POINT  1944  9.124384730034761  25.2901944687983
+  POINT  1945  9.380903693723068  25.73399854252466
+  POINT  1946  8.869536394962354  25.73292170940668
+  POINT  1947  8.867787034579436  24.84742875339725
+  POINT  1948  8.611808211452907  24.40495794646223
+  POINT  1949  8.357038608147516  24.84664682874531
+  POINT  1950  9.37915433334015  24.84850558651523
+  POINT  1951  9.635034859880143  24.40616641167393
+  POINT  1952  9.891632555335468  24.84893212707499
+  POINT  1953  8.10306863199613  25.28792614032669
+  POINT  1954  7.847089808869599  24.84545533339167
+  POINT  1955  7.337860839610064  24.84465823087261
+  POINT  1956  7.591830815761451  24.40337891929124
+  POINT  1957  7.084483663987436  25.28568916804524
+  POINT  1958  6.829224670879288  24.84361275394481
+  POINT  1959  11.17838537690847  23.52246049961141
+  POINT  1960  11.4371216212408  23.08138069299567
+  POINT  1961  10.9206635519637  23.08206164870911
+  POINT  1962  15.02252590981234  31.03532490076284
+  POINT  1963  14.49013437410986  31.07749238333559
+  POINT  1964  14.2430236988951  30.6424489387683
+  POINT  1965  15.30010765104086  30.62772559584235
+  POINT  1966  2.526915485973436  17.35549624102799
+  POINT  1967  2.276071431689728  17.79312093621829
+  POINT  1968  2.781165078003321  17.79402703104667
+  POINT  1969  6.346618006894577  8.933221976655281
+  POINT  1970  6.606300654387716  8.482722162553308
+  POINT  1971  6.859007165943082  8.928198624363933
+  POINT  1972  5.835923918840571  8.936439330716784
+  POINT  1973  6.088630430395938  9.381915792527408
+  POINT  1974  3.813293467525553  0.8400220701018267
+  POINT  1975  4.278266624098441  0.9371921865469454
+  POINT  1976  4.091218596162663  0.4229233416757498
+  POINT  1977  0.7378420180172898  2.410751924726134
+  POINT  1978  1.233841522613396  2.439553016285871
+  POINT  1979  0.9905295332508535  1.949589272233458
+  POINT  1980  0.4905763428736994  2.888925646723056
+  POINT  1981  8.615527392862056  13.82496521644805
+  POINT  1982  8.869539085606789  14.26707992304672
+  POINT  1983  8.359008517018593  14.26876890588306
+  POINT  1984  7.109843205144307  9.375226262222675
+  POINT  1985  7.369525852637445  8.924726448120705
+  POINT  1986  3.536686478737197  13.8361386042247
+  POINT  1987  3.790057778698816  13.39355052709382
+  POINT  1988  3.284192797098449  13.39405264356153
+  POINT  1989  3.789177750276934  14.27725402423099
+  POINT  1990  3.283312768676568  14.27775614069871
+  POINT  1991  3.540719142764858  10.28304212363626
+  POINT  1992  3.793978675026311  10.72885668139838
+  POINT  1993  3.286497665917229  10.72924169735144
+  POINT  1994  6.845584714338232  10.71830373756566
+  POINT  1995  7.355184401511213  10.7157436111351
+  POINT  1996  7.09778359222352  11.16341894215851
+  POINT  1997  7.361673707732298  9.821191246260845
+  POINT  1998  6.851155021037934  9.824663422504075
+  POINT  1999  4.296500541441507  13.39272956312007
+  POINT  2000  4.044006859802759  12.95064360245691
+  POINT  2001  4.802971515540548  13.39198494333306
+  POINT  2002  4.549022434436605  13.83489186796998
+  POINT  2003  4.297887859095104  12.50674192674635
+  POINT  2004  3.791445096352413  12.5075628907201
+  POINT  2005  4.805074931872197  12.50557276622567
+  POINT  2006  4.552513168421852  12.06249205448886
+  POINT  2007  4.301274159001078  10.72795370371833
+  POINT  2008  4.809681854713771  10.7267995158349
+  POINT  2009  4.556607847586633  10.28150291979977
+  POINT  2010  4.047052682153449  11.17415327743351
+  POINT  2011  4.299837130886486  11.6184557573815
+  POINT  2012  3.79254164691172  11.61935873506155
+  POINT  2013  4.80702420366358  11.61728659686082
+  POINT  2014  0.7573648401832791  10.72884628711409
+  POINT  2015  0.2524954018262905  10.72868903454322
+  POINT  2016  0.5048694975539831  10.28178714397273
+  POINT  2017  2.779998485031843  10.72963471324423
+  POINT  2018  3.033258017293297  11.17544927100636
+  POINT  2019  1.22366534318951  19.99999999772072
+  POINT  2020  0.8995237534752946  20.45126532761548
+  POINT  2021  1.847863650156727  19.55191485745089
+  POINT  2022  2.318125048484836  19.5519148489978
+  POINT  2023  -18.93911412821423  18.64650966130721
+  POINT  2024  -18.58166026436047  18.21127422426079
+  POINT  2025  -18.44873810630657  18.65901836236396
+  POINT  2026  -19.52614063366966  18.65502631883318
+  POINT  2027  -18.87780139947743  17.75460066637132
+  POINT  2028  -18.38742537756978  17.76710936742808
+  POINT  2029  -19.25342558557374  17.32881436986417
+  POINT  2030  -19.44766047236443  17.77297922669689
+  POINT  2031  -11.69163369768068  12.03021037174421
+  POINT  2032  -11.44023229826493  11.57846213124561
+  POINT  2033  -11.43422134923478  12.47855566601287
+  POINT  2034  -11.94479073651165  12.47843921193948
+  POINT  2035  -10.92866196056182  11.58403125210506
+  POINT  2036  -10.41689637261445  11.58759636307505
+  POINT  2037  -10.66929872245644  12.03389193678758
+  POINT  2038  -11.18782994842294  11.13216655753308
+  POINT  2039  -9.904431558833004  11.59293222934731
+  POINT  2040  -9.39267865060485  11.59649123185834
+  POINT  2041  -9.139626886740061  11.15213642340234
+  POINT  2042  -8.880975554187973  11.60022024432364
+  POINT  2043  -10.16379479693838  11.14307154466478
+  POINT  2044  -9.910917079266454  10.69833254287327
+  POINT  2045  -10.4233818930479  10.69299667660101
+  POINT  2046  -8.370126273665381  11.60298203772225
+  POINT  2047  -8.62317803753017  12.04733684617825
+  POINT  2048  -6.319914164590672  17.79970756621019
+  POINT  2049  -5.813248042386378  17.79940578741079
+  POINT  2050  -5.812970532530068  16.03929555219032
+  POINT  2051  -6.066345556101558  16.47969823346978
+  POINT  2052  -6.320151886932637  16.03908136247431
+  POINT  2053  -5.812596328700657  16.91987593255003
+  POINT  2054  -6.319777683103225  16.91966174283402
+  POINT  2055  -5.306138086716437  16.03968131654242
+  POINT  2056  -5.559944417547516  15.59906444554695
+  POINT  2057  -4.799950565874155  16.03961222338507
+  POINT  2058  -5.052976680856709  16.47984333002844
+  POINT  2059  -6.574690167020133  15.59804862668566
+  POINT  2060  -6.828065190591623  16.03845130796511
+  POINT  2061  -15.25853880596588  12.9242213232549
+  POINT  2062  -15.52043648370752  12.46856362456286
+  POINT  2063  -15.01756861930122  12.47064487481246
+  POINT  2064  -14.50591702520376  13.37825294329215
+  POINT  2065  -13.99649188437294  13.37881945166879
+  POINT  2066  -14.24624580072877  12.92686908188113
+  POINT  2067  -14.50520649728844  12.47612567984228
+  POINT  2068  -14.76710417503007  12.02046798115024
+  POINT  2069  -13.99841660872912  11.58047866164933
+  POINT  2070  -13.74078007588788  12.02829192794356
+  POINT  2071  -13.99578135645762  12.47669218821891
+  POINT  2072  -13.48181937932821  12.47903532998241
+  POINT  2073  -17.13331118398057  10.61779162646253
+  POINT  2074  -17.656383083496  10.60573919584698
+  POINT  2075  -17.36873112769916  11.06026014994149
+  POINT  2076  -16.02797983714253  12.45898801730209
+  POINT  2077  -16.52067686245398  12.45170765846319
+  POINT  2078  -16.25410369568363  12.9148597141664
+  POINT  2079  -15.78700965047787  12.00541156885965
+  POINT  2080  -17.58990196620047  11.50018232123824
+  POINT  2081  -17.80115956030314  11.95002810346316
+  POINT  2082  -18.10310561939233  11.49837858894322
+  POINT  2083  -17.07237505905118  11.50928449184498
+  POINT  2084  -17.49654816974892  12.39352110356614
+  POINT  2085  -16.79404945073268  11.9725213123703
+  POINT  2086  -16.57287861223137  11.53259914107355
+  POINT  2087  -17.02017330927379  12.42839300923462
+  POINT  2088  -17.22317558147022  12.87270744965903
+  POINT  2089  -10.15245041339834  12.93005084479948
+  POINT  2090  -10.41083981014142  12.48260744897875
+  POINT  2091  -10.92260539808879  12.47904233800876
+  POINT  2092  -11.17576243691975  12.92727117820404
+  POINT  2093  -12.45674776247602  13.37407164467716
+  POINT  2094  -12.19976115126335  12.92710572491763
+  POINT  2095  -11.94436499927842  13.37375042596768
+  POINT  2096  -12.45717349970925  12.47876043064897
+  POINT  2097  -12.96948100660971  12.47903100666709
+  POINT  2098  -13.22448228717945  12.92743126694244
+  POINT  2099  -12.7156240960693  13.82239971451288
+  POINT  2100  -12.97772467480737  14.26819310667658
+  POINT  2101  -13.74302984524772  13.82714319818918
+  POINT  2102  -13.48335862077273  13.37575933677816
+  POINT  2103  -12.97102024805423  13.37575501346284
+  POINT  2104  -12.66774364330618  4.523299107507239
+  POINT  2105  -12.60490407255786  4.990136093565923
+  POINT  2106  -12.20023269789926  4.658910900843035
+  POINT  2107  -12.93462919488069  5.358202577882016
+  POINT  2108  -12.47144927438711  5.488522975166397
+  POINT  2109  -13.43620550685972  5.185534732811357
+  POINT  2110  -14.33938229564766  7.524096539708034
+  POINT  2111  -14.9111947654232  7.280162642147666
+  POINT  2112  -15.24378862055976  7.682398206427763
+  POINT  2113  -15.41335736818264  7.255259352596772
+  POINT  2114  -15.01627536647982  8.127933305249282
+  POINT  2115  -15.30010260228938  9.372269247130333
+  POINT  2116  -15.02252082546601  8.964670165888624
+  POINT  2117  -14.24302038469975  9.357551373852861
+  POINT  2118  -14.50635377271081  9.811747310474253
+  POINT  2119  -13.99000785292662  9.792863973386861
+  POINT  2120  -16.10340678976494  9.787421896710498
+  POINT  2121  -16.63238487037844  9.754755103146911
+  POINT  2122  -16.89069641342317  10.18648047123871
+  POINT  2123  -17.16253750713551  9.731246135309691
+  POINT  2124  -16.60858944999246  10.6380511653244
+  POINT  2125  -11.70834855106328  10.22274842325977
+  POINT  2126  -11.44840726006248  10.67917056592608
+  POINT  2127  -10.94524324959301  9.788054215548343
+  POINT  2128  -10.68395920468744  10.24000068499402
+  POINT  2129  -10.93683692235937  10.68473968678553
+  POINT  2130  -11.47479555660216  8.87906931844303
+  POINT  2131  -11.20910685279271  9.331122511448264
+  POINT  2132  -11.46127783719861  9.774811991078451
+  POINT  2133  -11.97221215426297  9.765816719159695
+  POINT  2134  -12.23551219984005  9.302086962350581
+  POINT  2135  -12.48258291370472  9.750023394531905
+  POINT  2136  -11.99907298758307  8.856941095902805
+  POINT  2137  -13.48363744127368  10.68335058227913
+  POINT  2138  -12.97061921339908  10.68124949973901
+  POINT  2139  -12.72223329311703  10.22272288939034
+  POINT  2140  -13.73926247952205  10.23937626872396
+  POINT  2141  -13.99771620268931  10.69103422356342
+  POINT  2142  -13.47592909151099  9.785180332102566
+  POINT  2143  -12.98553333869411  9.758993132581228
+  POINT  2144  -10.99496024845769  5.244137851664762
+  POINT  2145  -10.72127136894942  4.813791227183295
+  POINT  2146  -11.76362091609507  4.48995017920419
+  POINT  2147  -11.70511237026007  4.951495769211457
+  POINT  2148  -11.39311338658647  4.215969615852156
+  POINT  2149  -11.89139041445578  3.919115893213245
+  POINT  2150  -12.24027988776031  5.8641325949175
+  POINT  2151  -11.91055476543747  5.496066110601405
+  POINT  2152  -11.20040264363509  5.788708193054712
+  POINT  2153  -11.44644349888066  6.284936460155964
+  POINT  2154  -11.47394298363328  5.327105388962559
+  POINT  2155  -12.58774158616357  7.077264164985817
+  POINT  2156  -12.04126943591853  7.115558718704478
+  POINT  2157  -11.99490361784541  6.277557986686686
+  POINT  2158  -12.55579812679505  6.270014851251677
+  POINT  2159  -12.88263830348879  6.618639040367921
+  POINT  2160  -11.7619617379154  6.690818716490142
+  POINT  2161  12.04126828125696  7.115556461827698
+  POINT  2162  11.49280873218955  7.122935250752073
+  POINT  2163  11.76196034822392  6.690816131315052
+  POINT  2164  11.49828322279317  7.993966546699665
+  POINT  2165  12.0225605432701  7.971838012441538
+  POINT  2166  12.88263546208822  6.61863544281538
+  POINT  2167  13.12801043982883  6.205208828783831
+  POINT  2168  12.55579487503194  6.270010728359129
+  POINT  2169  13.69336976028337  6.949530619644269
+  POINT  2170  13.96433801939816  6.375677941228949
+  POINT  2171  13.62552731853477  6.037014047096381
+  POINT  2172  14.13907079774611  5.854800214333848
+  POINT  2173  11.99490119766059  6.277554553029752
+  POINT  2174  11.44644164859318  6.284933341954128
+  POINT  2175  11.20040012011418  5.788704856543246
+  POINT  2176  11.91055022392465  5.49606120424435
+  POINT  2177  12.2402761754012  5.864127938998204
+  POINT  2178  11.47393849027101  5.327100831915041
+  POINT  2179  9.945582057420673  6.181899969396367
+  POINT  2180  10.20212439794679  5.720745644346648
+  POINT  2181  9.928434604118719  5.290398733084792
+  POINT  2182  8.556931258789588  2.528832819977453
+  POINT  2183  8.146974075985931  2.334700766962239
+  POINT  2184  8.559631278214885  1.92425070776564
+  POINT  2185  15.01627398335804  8.127930948668869
+  POINT  2186  15.51318585031227  8.107366722466351
+  POINT  2187  15.56325582361871  8.960502416532755
+  POINT  2188  15.81287665995519  8.510131175388402
+  POINT  2189  16.04544432483895  8.060832677422217
+  POINT  2190  14.75328392450536  8.510740088180491
+  POINT  2191  13.08140472470578  7.902147488418196
+  POINT  2192  13.39847454267256  7.408156657639373
+  POINT  2193  13.15995580927431  7.012459581235187
+  POINT  2194  12.58774024447741  7.077261480810485
+  POINT  2195  12.31858862844304  7.509380600247505
+  POINT  2196  12.56903250649056  7.933543031424325
+  POINT  2197  10.94524346823205  9.788053798414385
+  POINT  2198  11.20910703176076  9.331121907385405
+  POINT  2199  10.95876112935163  8.892310914863021
+  POINT  2200  10.43863740166071  8.90091810703888
+  POINT  2201  10.70432605267283  8.448864704310473
+  POINT  2202  10.17836257478566  9.351235759588613
+  POINT  2203  9.923927498106863  8.907789549036064
+  POINT  2204  10.43178843022046  9.796310885123368
+  POINT  2205  9.917078526666614  9.803182327120552
+  POINT  2206  10.683959420113  10.24000036594633
+  POINT  2207  0.4257056342687726  0.4866078143970918
+  POINT  2208  0.4258045314381747  0.00453325099778762
+  POINT  2209  -8.556941856736707  2.528837422625263
+  POINT  2210  -8.610159650802313  3.016790167285516
+  POINT  2211  -8.395989123541707  3.439640495050862
+  POINT  2212  -8.14698450737254  2.334704873539675
+  POINT  2213  -7.792710741676334  2.625579213893601
+  POINT  2214  -8.55964628277413  1.924257823018384
+  POINT  2215  -9.473525601179848  4.277847459291598
+  POINT  2216  -8.926778041898604  4.355756346121653
+  POINT  2217  -9.691050900332758  4.805957037797565
+  POINT  2218  -9.956516850290052  4.316937828288013
+  POINT  2219  -8.686199335312255  4.812171506430753
+  POINT  2220  -8.404917725988305  4.401061183751255
+  POINT  2221  -9.445445922262575  5.251310504414456
+  POINT  2222  -10.19419874351271  3.913941535915821
+  POINT  2223  -10.41172404266562  4.442051114421789
+  POINT  2224  -10.95895326217208  4.410794934811104
+  POINT  2225  -11.08356606030267  3.84422950309065
+  POINT  2226  -10.65318906962747  3.557421534579559
+  POINT  2227  -11.09105814178689  3.357030647526714
+  POINT  2228  -9.694219594930232  6.638197533051649
+  POINT  2229  -9.431468981222594  6.192050880977571
+  POINT  2230  -0.7570180027335149  9.832621255886785
+  POINT  2231  -0.5048693800457256  10.28178717573282
+  POINT  2232  -0.2521485634907947  9.832463971555836
+  POINT  2233  -6.855131749277465  1.732845876664869
+  POINT  2234  -6.972438504319116  2.219795679489987
+  POINT  2235  -6.414622035057123  1.574492892908077
+  POINT  2236  -6.765669841096464  1.179115021389632
+  POINT  2237  -1.004871482698477  7.572984637225677
+  POINT  2238  -1.257490486514399  8.028793797334046
+  POINT  2239  -0.7545338586426834  8.025313601582315
+  POINT  2240  -1.762470594293599  8.030999493773637
+  POINT  2241  -1.512132970237805  8.483328458130275
+  POINT  2242  -1.229222734249484  3.387837151439014
+  POINT  2243  -0.9842473157104142  3.857601341818763
+  POINT  2244  -2.760974422104667  6.228081510033119
+  POINT  2245  -2.253497692870489  6.221058881823054
+  POINT  2246  -2.513284803608339  6.678759929530004
+  POINT  2247  -2.22068215594449  0.1236680774559861
+  POINT  2248  -1.893412282768675  0.5757529280991733
+  POINT  2249  -0.7618927259509458  1.458040956527683
+  POINT  2250  -0.514627501401715  0.975189189825712
+  POINT  2251  -0.9403354900406863  0.5067124244511273
+  POINT  2252  -1.391489330979924  0.5361655784306855
+  POINT  2253  -1.302907496264832  0.04248432242006185
+  POINT  2254  -1.531173210898604  1.03488105453053
+  POINT  2255  -1.759815051157529  1.526429257888473
+  POINT  2256  -1.982161883684216  2.023903928033029
+  POINT  2257  -0.9905345662098708  1.949589159885626
+  POINT  2258  -1.233845294320426  2.439552824859994
+  POINT  2259  -1.257892099368779  1.486841908219986
+  POINT  2260  -4.253221810686109  1.820570946531706
+  POINT  2261  -4.758491289411085  1.8896992927888
+  POINT  2262  0.9403284851173297  39.49328748546868
+  POINT  2263  1.302900066834092  39.9575161643721
+  POINT  2264  0.4257054490154915  39.51339213116585
+  POINT  2265  0.4258043460689575  39.99546675296004
+  POINT  2266  0.7378421542620126  37.58924786878497
+  POINT  2267  1.23384172418566  37.56044672587291
+  POINT  2268  0.4905764528571049  37.11107417865601
+  POINT  2269  -0.2485634106147014  34.74540615296891
+  POINT  2270  -0.4944721332766874  35.20892213996861
+  POINT  2271  -0.7430353076084667  34.7387144383873
+  POINT  2272  0.248563135802923  34.74540613716317
+  POINT  2273  -3.852885629984648e-08  34.27519843558186
+  POINT  2274  -0.984247561800016  36.14239856410436
+  POINT  2275  -0.7361813987894855  36.62952013242423
+  POINT  2276  -0.2456036251004044  36.64131010369253
+  POINT  2277  -0.7400749794124697  35.68099320876465
+  POINT  2278  -1.233116612657999  35.66363578072671
+  POINT  2279  -0.2456030824187044  35.68768492334626
+  POINT  2280  -0.5050495520169673  27.93392892167996
+  POINT  2281  -0.2524953199740186  28.37907783165175
+  POINT  2282  -0.7575449060331049  28.37910298308664
+  POINT  2283  0.5049254003565739  26.16245156440273
+  POINT  2284  0.2524838536841221  26.60459196252057
+  POINT  2285  0.7574092359319105  26.60463622076165
+  POINT  2286  1.262484608430572  26.60474311400658
+  POINT  2287  1.010043061758121  27.04688351212442
+  POINT  2288  1.767930132642603  27.49060027590907
+  POINT  2289  2.02050092362578  27.04726519540428
+  POINT  2290  2.2733126220116  27.490875065944
+  POINT  2291  4.294356946623791  24.8410616389421
+  POINT  2292  4.547087505439189  24.40041073521517
+  POINT  2293  4.800380884839186  24.84120087084955
+  POINT  2294  4.293926155091318  23.96024866126563
+  POINT  2295  4.799950093306713  23.96038789317308
+  POINT  2296  3.788414878485399  23.96059221848699
+  POINT  2297  4.041277466352923  23.5205693764449
+  POINT  2298  1.514809999556898  24.40061413188652
+  POINT  2299  1.767492707689488  23.96146212230959
+  POINT  2300  1.262539709988568  23.9615922644941
+  POINT  2301  7.321627964579404  38.17042681938287
+  POINT  2302  7.793206680574138  37.97435229673911
+  POINT  2303  7.678404262385088  38.46732542318286
+  POINT  2304  6.972433698867157  37.78020975935011
+  POINT  2305  6.855127394446583  38.26716082157134
+  POINT  2306  6.414615189107867  38.42551451657923
+  POINT  2307  6.765662894204413  38.82088748771397
+  POINT  2308  5.835924386613025  31.06356123096226
+  POINT  2309  6.346618511134158  31.06677866630198
+  POINT  2310  6.088630850338571  30.61808479345149
+  POINT  2311  5.582224837246878  31.5099791769925
+  POINT  2312  10.95894851210964  35.58920884422533
+  POINT  2313  11.39310711972735  35.78403513220901
+  POINT  2314  10.72126794961869  35.18621162434592
+  POINT  2315  10.41172000961541  35.55795193531766
+  POINT  2316  10.44772930264001  34.72460793267786
+  POINT  2317  10.99495780513424  34.75586484158553
+  POINT  2318  9.020612145212025  37.38901099607349
+  POINT  2319  9.424228545153195  37.64040579751443
+  POINT  2320  9.474330615488972  37.14661597391932
+  POINT  2321  8.40491449200708  35.59893959494738
+  POINT  2322  8.926774996129321  35.64424422876988
+  POINT  2323  8.686196885775953  35.18782930360295
+  POINT  2324  8.152785656806662  36.06385741842882
+  POINT  2325  7.912207546453292  35.6074424932619
+  POINT  2326  9.956512910039363  35.68306455775935
+  POINT  2327  9.473521881426226  35.72215416875295
+  POINT  2328  9.691048418511331  35.19404432643185
+  POINT  2329  10.19419347253031  36.08606177763876
+  POINT  2330  9.192239487657353  36.13326446009738
+  POINT  2331  9.406409183385882  36.55611572705381
+  POINT  2332  8.859662298088979  36.47820578707073
+  POINT  2333  10.19797450918269  36.5676960857483
+  POINT  2334  9.806907805057346  36.80167464694597
+  POINT  2335  10.26856200452538  37.16265232046304
+  POINT  2336  6.871912061838399  35.54333618666676
+  POINT  2337  7.405021657601408  35.59824784517664
+  POINT  2338  7.126969115489866  36.01744865823345
+  POINT  2339  7.657150492801826  35.13333002169522
+  POINT  2340  6.621960666341595  35.0990227984202
+  POINT  2341  6.888811633623055  34.66573394307474
+  POINT  2342  6.360807696014708  34.64062136788498
+  POINT  2343  6.343908124230053  35.518223611477
+  POINT  2344  7.402796728654058  34.67408026698564
+  POINT  2345  7.141643758327172  34.21567883645042
+  POINT  2346  7.909982617505943  34.68327491507089
+  POINT  2347  3.322763046202144  39.2378007288512
+  POINT  2348  3.15663647718721  39.74932014657087
+  POINT  2349  3.813291001601433  39.15997825895766
+  POINT  2350  4.091217816567636  39.57707682242515
+  POINT  2351  3.510964067743604  38.72905450866509
+  POINT  2352  2.255436314939442  38.42805648019456
+  POINT  2353  1.982157396380489  37.97609549035852
+  POINT  2354  2.749110842047252  38.36872932479956
+  POINT  2355  6.081230166453511  35.97194010898045
+  POINT  2356  5.818441994459794  36.44062612474002
+  POINT  2357  6.331071347733141  36.43122301548313
+  POINT  2358  5.320795889254486  36.4447624160653
+  POINT  2359  5.570637070534115  36.904045322568
+  POINT  2360  5.831278770956706  35.52762672073389
+  POINT  2361  5.970382527196483  38.42268507006546
+  POINT  2362  6.061700466822952  37.87411431502481
+  POINT  2363  5.314747458531205  38.19213207237964
+  POINT  2364  5.061201838228348  37.78945770174573
+  POINT  2365  5.345229385120188  37.38973324120216
+  POINT  2366  5.842875490325496  37.38559694987687
+  POINT  2367  6.287108152236881  37.38842639639064
+  POINT  2368  5.556022539290377  38.55085980808124
+  POINT  2369  5.910327271106762  39.10675356293056
+  POINT  2370  4.527223806949365e-08  28.82425190516497
+  POINT  2371  0.2524954118648361  29.271311063285
+  POINT  2372  -0.2524953073975582  29.27131105117846
+  POINT  2373  0.7573648797635052  29.27115381803919
+  POINT  2374  0.2524953992883756  28.37907784375829
+  POINT  2375  2.273105925774813  30.16491138028067
+  POINT  2376  1.767218293970705  30.16613550136842
+  POINT  2377  1.515144076936485  29.71762621682329
+  POINT  2378  2.526574159573979  27.93457399209241
+  POINT  2379  2.779582705512834  28.37954785163075
+  POINT  2380  2.273750376967278  28.37918400598714
+  POINT  2381  3.286081896042008  28.37994089986349
+  POINT  2382  3.033258113435307  28.82455091375822
+  POINT  2383  3.538866301224259  27.9356384317024
+  POINT  2384  3.792541709146731  28.38064149382986
+  POINT  2385  2.779144950557156  27.49123891158762
+  POINT  2386  -0.2509574395584928  32.89023083452718
+  POINT  2387  -0.5001445292837633  33.34678369244119
+  POINT  2388  -0.248563270487983  33.81258223243197
+  POINT  2389  -0.7487078437422611  33.80939991139683
+  POINT  2390  0.2485632759296414  33.81258221662623
+  POINT  2391  0.7557252605028959  31.06778977059484
+  POINT  2392  0.5035766139793988  31.51991170020357
+  POINT  2393  0.2521487272230526  31.06882402404262
+  POINT  2394  1.512133316893194  31.51667185955954
+  POINT  2395  1.257490837521165  31.97120645676332
+  POINT  2396  1.762471007155117  31.96900086956706
+  POINT  2397  1.26052028816003  31.06697586732646
+  POINT  2398  4.299971210771425  32.85149278176542
+  POINT  2399  4.813858896773226  32.84793939933139
+  POINT  2400  4.555689088750212  33.29824097344651
+  POINT  2401  4.047040589691667  32.40376536153468
+  POINT  2402  3.788870781668652  32.85406693564981
+  POINT  2403  1.99779136886551  34.24333877774004
+  POINT  2404  1.739534188555335  34.71160974839909
+  POINT  2405  2.242930868975687  34.69789125435826
+  POINT  2406  1.750101670519205  33.79266021463997
+  POINT  2407  2.253498350939557  33.77894172059914
+  POINT  2408  4.811613439274451  30.16570216508861
+  POINT  2409  4.556608060237682  29.71849742642267
+  POINT  2410  4.303205728751885  30.16454791935548
+  POINT  2411  5.321476248288842  30.16725951513379
+  POINT  2412  5.830756015410285  30.16946429579235
+  POINT  2413  6.341450139931419  30.17268173113207
+  POINT  2414  5.574295537881691  29.72185645281436
+  POINT  2415  4.303354423758809  31.05895384807756
+  POINT  2416  4.559517683407055  31.50692914415298
+  POINT  2417  4.303319379261703  31.953673122892
+  POINT  2418  4.814339322939793  31.95444722891127
+  POINT  2419  3.792218950158929  31.95624727677639
+  POINT  2420  3.53960420638969  31.50780686224725
+  POINT  2421  3.283325416819654  31.95789910088994
+  POINT  2422  18.93911406219143  18.64650935978337
+  POINT  2423  19.5261405338395  18.65502620489522
+  POINT  2424  19.39362763295739  15.11254594470878
+  POINT  2425  18.99857188883907  15.51737654824043
+  POINT  2426  19.25787290188996  16.44788794426737
+  POINT  2427  18.75405232248962  16.85355794479968
+  POINT  2428  19.18738723924495  16.90476516850342
+  POINT  2429  18.37155330956431  16.4239303910665
+  POINT  2430  18.3010676469193  16.88080761530255
+  POINT  2431  18.66020366196966  15.9349676413002
+  POINT  2432  19.16290621200404  15.97908962750386
+  POINT  2433  19.60184782770187  16.0291610895696
+  POINT  2434  17.74265060326497  16.90620537096182
+  POINT  2435  18.12514961619028  17.335832924695
+  POINT  2436  15.35519968440101  23.50052060043794
+  POINT  2437  15.61382388545503  23.94120904958511
+  POINT  2438  16.14374614558074  23.94660548122907
+  POINT  2439  15.87594038737391  24.38867578503489
+  POINT  2440  16.40292032494667  23.50896024931439
+  POINT  2441  14.04156102276654  20.44473665232049
+  POINT  2442  13.5101459043692  20.44182359619071
+  POINT  2443  13.23791783332129  20.0000177682021
+  POINT  2444  12.99581450514272  20.44181897368124
+  POINT  2445  14.32798942893715  21.75754985993104
+  POINT  2446  14.59066675027901  22.19303681739878
+  POINT  2447  14.05739186853169  22.19336416533053
+  POINT  2448  14.59606856183489  21.32333671296435
+  POINT  2449  17.02043936108002  17.36861009534426
+  POINT  2450  16.75104595303201  17.80975860309653
+  POINT  2451  17.29733916448795  17.80237918810654
+  POINT  2452  16.8825211737115  20.00090158182218
+  POINT  2453  16.50015673941269  20.45264191937547
+  POINT  2454  16.08514518550571  20.00088643540819
+  POINT  2455  16.11090188810538  20.45097896467276
+  POINT  2456  15.67928540345191  21.32845415312463
+  POINT  2457  15.97041169404601  20.90170701865165
+  POINT  2458  15.55540014013904  20.44995153468437
+  POINT  2459  15.13808712838207  21.32895105033127
+  POINT  2460  15.40246258575432  21.75672561479265
+  POINT  2461  14.87289137953249  20.89506525129633
+  POINT  2462  16.20906446251038  17.81010162569915
+  POINT  2463  16.48596426591832  18.24387071846142
+  POINT  2464  17.67264086770901  25.76730075340195
+  POINT  2465  17.52697787020489  25.32168372621399
+  POINT  2466  17.1018668450201  25.72098828977573
+  POINT  2467  17.78498630795706  24.9096132943493
+  POINT  2468  18.29689274451687  24.94722520315896
+  POINT  2469  17.98412715958014  24.48884230766805
+  POINT  2470  18.19154482344632  27.14919909897187
+  POINT  2471  18.00418440385464  27.60561752382607
+  POINT  2472  18.50178002760287  27.59500731331329
+  POINT  2473  17.22320550548447  27.12725699911247
+  POINT  2474  16.99718056314592  26.6294993269721
+  POINT  2475  17.47355478486276  26.66436298910405
+  POINT  2476  14.77835587396051  33.47591176927389
+  POINT  2477  14.5037091327629  32.89870630528225
+  POINT  2478  14.20286679509669  33.2286249931342
+  POINT  2479  14.91119950175903  32.71983261654729
+  POINT  2480  15.41335988088872  32.74473764552774
+  POINT  2481  13.26816755360081  21.75856091096891
+  POINT  2482  13.0048315681012  21.32143470787244
+  POINT  2483  16.7511085267673  22.19060870549156
+  POINT  2484  16.20887687158396  22.19021726809433
+  POINT  2485  16.17786126300281  23.06167228219098
+  POINT  2486  16.69915194428762  23.07149378572608
+  POINT  2487  16.13755756315898  24.82813436948326
+  POINT  2488  16.41272816316716  25.26878389243772
+  POINT  2489  15.60763530303328  24.82273793783929
+  POINT  2490  15.34000798260733  25.26618804426989
+  POINT  2491  15.57192146402785  25.71183427290126
+  POINT  2492  15.04267696781684  25.71582579488349
+  POINT  2493  19.39363952846237  24.88740687823191
+  POINT  2494  18.885848220639  24.93009895932983
+  POINT  2495  18.68670736901592  25.35086994601108
+  POINT  2496  19.15366600169464  25.75648146541981
+  POINT  2497  18.56007556635269  25.77221469844787
+  POINT  2498  17.29751718982028  22.19792338787625
+  POINT  2499  17.82901984993449  22.20723229864854
+  POINT  2500  17.02050154539675  22.63152050098736
+  POINT  2501  17.2455606073406  23.07880846811078
+  POINT  2502  17.69547194751031  24.00000391993576
+  POINT  2503  18.20737838407013  24.03761582874543
+  POINT  2504  18.37170027960414  23.57574163654564
+  POINT  2505  17.42146708911589  23.53377959693132
+  POINT  2506  17.74281669022501  23.0938063121926
+  POINT  2507  15.25853878864088  12.92422065523148
+  POINT  2508  15.0175685566735  12.47064415693754
+  POINT  2509  17.58990097002385  11.50018009270076
+  POINT  2510  17.36873006000716  11.06025787356734
+  POINT  2511  18.10310452692819  11.49837625079764
+  POINT  2512  17.65638158620408  10.60573636868109
+  POINT  2513  15.04253498339223  10.68172168255394
+  POINT  2514  14.51635320344969  10.68688592002177
+  POINT  2515  14.77952260731562  10.24189432870903
+  POINT  2516  14.26072834128369  11.1308604785193
+  POINT  2517  15.29884441434331  11.11647511404975
+  POINT  2518  15.02941585016789  11.5708497790334
+  POINT  2519  -5.559612278106096  22.64037941022797
+  POINT  2520  -5.812595406053648  23.08012397436108
+  POINT  2521  -5.306180262645629  23.08034305013044
+  POINT  2522  -11.43576012403759  16.0359829772844
+  POINT  2523  -10.91930130833142  16.03530291420144
+  POINT  2524  -11.17839236720871  16.47753707839758
+  POINT  2525  -11.95093603481484  15.1524484606076
+  POINT  2526  -12.46808184577289  15.15416888873691
+  POINT  2527  -11.69363999436943  15.59489173025373
+  POINT  2528  -11.43396510560572  15.15130554344212
+  POINT  2529  -11.95273105324672  16.03712589444988
+  POINT  2530  -11.43712821990608  16.91861467088325
+  POINT  2531  -10.92066940419991  16.91793460780029
+  POINT  2532  -10.6635990468805  17.35875835728356
+  POINT  2533  -10.40486319418314  16.91768076479789
+  POINT  2534  -10.92128585029515  17.79908423287577
+  POINT  2535  -10.40547964027838  17.79883038987337
+  POINT  2536  -11.17515797884532  20.00000102031307
+  POINT  2537  -11.43519237168078  19.55947185837874
+  POINT  2538  -10.91971864863478  19.55946991621752
+  POINT  2539  -17.69355183457131  26.21921688206146
+  POINT  2540  -17.91957704254855  26.71697422906539
+  POINT  2541  -17.47355512042661  26.66436143557672
+  POINT  2542  -18.41154214164629  26.7040528116507
+  POINT  2543  -18.5809866532765  26.22413096385403
+  POINT  2544  -18.85906250548473  26.65851045942693
+  POINT  2545  -18.58165190157233  21.78818398655776
+  POINT  2546  -18.38730056826177  22.23230077017542
+  POINT  2547  -18.87782301108845  22.24485568342974
+  POINT  2548  -18.44846894716024  21.34055390991821
+  POINT  2549  -12.97062101492125  29.31875403642425
+  POINT  2550  -12.46767030297665  29.32772470608927
+  POINT  2551  -12.72223548790102  29.77728049112642
+  POINT  2552  -13.22907514769955  28.86709581957689
+  POINT  2553  -14.51635826947124  29.31311155849969
+  POINT  2554  -14.26073306937787  28.86913861906651
+  POINT  2555  -14.51706009046056  28.4236684902674
+  POINT  2556  -13.99842148648492  28.41952325896755
+  POINT  2557  -14.7795280512982  29.75810081374213
+  POINT  2558  -15.03254101741964  30.19341176913132
+  POINT  2559  -14.50635783171041  30.1882502220222
+  POINT  2560  -15.04254145518047  29.31827310560881
+  POINT  2561  -15.56202218869213  29.32850735956158
+  POINT  2562  -16.09215847892137  29.34349976240278
+  POINT  2563  -15.83584752723667  29.77825476369244
+  POINT  2564  -15.29885240686518  28.88351810431914
+  POINT  2565  -15.56326504283053  31.03948508656246
+  POINT  2566  -16.09046899946972  31.08225492312761
+  POINT  2567  -16.36982582431926  30.66455001640303
+  POINT  2568  -16.62469646598935  31.11842918285091
+  POINT  2569  -16.10341526745587  30.2125664936679
+  POINT  2570  -15.57327897722664  30.1975740908267
+  POINT  2571  -15.30010875763884  30.62772349910677
+  POINT  2572  -15.02252708302353  31.03532276486708
+  POINT  2573  -17.36874409487987  28.93971676960333
+  POINT  2574  -17.07238964582313  28.49069203988263
+  POINT  2575  -16.33477468949221  28.91218584585327
+  POINT  2576  -16.60860002803674  29.36193324998413
+  POINT  2577  -17.13332295795837  29.38218899091014
+  POINT  2578  -17.65639589526919  29.39423674904752
+  POINT  2579  -16.5728923949743  28.46738370478237
+  POINT  2580  -16.79406580218986  28.02745641123038
+  POINT  2581  -16.05645084585894  28.44895021720102
+  POINT  2582  -11.43421905289848  27.52144951460756
+  POINT  2583  -11.6916320508292  27.96979564432751
+  POINT  2584  -11.94478840412654  27.52156732452448
+  POINT  2585  -10.92260322222589  27.52096203886612
+  POINT  2586  -11.17575957552322  27.07273371906309
+  POINT  2587  -14.54458520175707  20.44472116630428
+  POINT  2588  -14.04156085494355  20.44473661417197
+  POINT  2589  -14.25527342288196  20.00000694189264
+  POINT  2590  -13.74078421360634  27.97171208992312
+  POINT  2591  -13.48445719252365  28.41718221872224
+  POINT  2592  -12.97143787482097  28.41928465053246
+  POINT  2593  -12.71451066085117  27.96964225196112
+  POINT  2594  -12.45912861602707  28.41955585281577
+  POINT  2595  -16.25413008413381  27.08512273155318
+  POINT  2596  -16.52070005962864  27.54827010780237
+  POINT  2597  -16.0279985758462  27.54100069988094
+  POINT  2598  -17.02019731047746  27.57157844290263
+  POINT  2599  -17.22320594816005  27.12725546102763
+  POINT  2600  -16.99718074018281  26.6294981140237
+  POINT  2601  -15.51800943988496  26.61966242771222
+  POINT  2602  -15.01513775921834  26.61758552880125
+  POINT  2603  -15.25855691968476  27.07577642472079
+  POINT  2604  -12.20839980609971  25.28942190368818
+  POINT  2605  -12.46344601370725  25.73349604427731
+  POINT  2606  -11.94630087233431  25.73521605642329
+  POINT  2607  -12.46807352183216  24.84583381340267
+  POINT  2608  -11.95092838045923  24.84755382554865
+  POINT  2609  -12.98765585547731  24.84316419719443
+  POINT  2610  -12.73018442983683  24.40129611905489
+  POINT  2611  -13.24519821910848  25.28412915854135
+  POINT  2612  -9.129651643227703  27.06523077144557
+  POINT  2613  -8.876288684125369  27.50911488874473
+  POINT  2614  -9.387389242004456  27.51154300998024
+  POINT  2615  -11.43269449945645  25.7358488670784
+  POINT  2616  -11.68774070706399  26.17992300766753
+  POINT  2617  -11.43075487019097  26.62688850656359
+  POINT  2618  -11.94436124306884  26.62625569590848
+  POINT  2619  -10.91913903951838  26.62640103082215
+  POINT  2620  -11.43575265155543  23.96401593507675
+  POINT  2621  -10.91929460003396  23.9646969017269
+  POINT  2622  -11.17838521827446  23.52246042867934
+  POINT  2623  -11.43395834902085  24.84869716197923
+  POINT  2624  -11.6936320647533  24.40510907169372
+  POINT  2625  -11.9527226829938  23.96287259864617
+  POINT  2626  -9.674059715189312  31.54309886182291
+  POINT  2627  -9.923928805191473  31.0922115971265
+  POINT  2628  -9.413784457395401  31.09278152867489
+  POINT  2629  -7.33625026584593  21.32043467489033
+  POINT  2630  -7.591125517743469  20.88045700659352
+  POINT  2631  -7.337223839723812  20.44026648652743
+  POINT  2632  -6.830512094503344  20.44026665091224
+  POINT  2633  -6.575528491143303  20.88082068876169
+  POINT  2634  -6.828119317097339  21.32047870894126
+  POINT  2635  -7.081929718985547  21.76037960279158
+  POINT  2636  -6.321207944282921  21.32076561666295
+  POINT  2637  -8.865941131087769  23.08182349266286
+  POINT  2638  -8.35498225184941  23.08157072480208
+  POINT  2639  -8.866487325995669  23.96406401648594
+  POINT  2640  -8.355738913521897  23.96328209781178
+  POINT  2641  -8.611808118958542  24.40495790685818
+  POINT  2642  -9.122215297035932  23.52275432385121
+  POINT  2643  -9.377738307564679  23.08218960907453
+  POINT  2644  -9.378284502472578  23.9644301328976
+  POINT  2645  -11.43519851064686  20.44052946226004
+  POINT  2646  -10.91972478760085  20.44052752009882
+  POINT  2647  -10.92146522300643  21.32094671163846
+  POINT  2648  -11.18084963629104  21.76061562971537
+  POINT  2649  -11.43914973268702  21.32072488012269
+  POINT  2650  -8.354717852301953  17.79936126551275
+  POINT  2651  -8.865677316820541  17.7991080550456
+  POINT  2652  -8.865604125273149  18.67950030830442
+  POINT  2653  -8.354849206451807  18.67954722684985
+  POINT  2654  -7.8449370799189  18.67964045894598
+  POINT  2655  -7.336251432918799  18.67956409604354
+  POINT  2656  -7.081931132275803  18.23961943152085
+  POINT  2657  -8.09997451760549  18.23956994043947
+  POINT  2658  -7.844805725769048  17.79945449760887
+  POINT  2659  -8.100430139091614  16.47811947625329
+  POINT  2660  -7.845750550729444  16.03722597916978
+  POINT  2661  -8.355741934804009  16.03671803565851
+  POINT  2662  -7.84499390774128  16.91893662122336
+  POINT  2663  -7.336521112848085  16.03802299597051
+  POINT  2664  -7.591832908560479  15.59662155537573
+  POINT  2665  -7.081982832760588  16.47905573175917
+  POINT  2666  -3.54490611780126  20.88709779020111
+  POINT  2667  -3.290304169812604  21.32705841216561
+  POINT  2668  -3.794349397708337  21.32485605719605
+  POINT  2669  -4.07370210063638  19.99999990535588
+  POINT  2670  -3.813606861772008  19.55755217403422
+  POINT  2671  -3.813606786979048  20.4424476880606
+  POINT  2672  -3.309561597917081  19.55534986530946
+  POINT  2673  -3.544906231427986  19.11290209845403
+  POINT  2674  -3.309561559083315  20.44465004303017
+  POINT  2675  -2.976342896691423  37.87084587080842
+  POINT  2676  -3.221425950774599  37.37975080057947
+  POINT  2677  -2.526770059080721  38.86620393748946
+  POINT  2678  -2.74911739425569  38.36872913844745
+  POINT  2679  -3.247670177747043  38.30899320764298
+  POINT  2680  -3.510972884148524  38.7290535079245
+  POINT  2681  -3.738198386584258  38.23117024028548
+  POINT  2682  -2.221684732532352  36.55039136936763
+  POINT  2683  -2.720983152386764  36.50668992783906
+  POINT  2684  -1.975649639226325  36.09501466529477
+  POINT  2685  -2.229342038877392  35.61557517193711
+  POINT  2686  -2.490020268553868  35.14475718983718
+  POINT  2687  -2.734688313083581  35.59417021242318
+  POINT  2688  -1.730981594696612  35.64560164270876
+  POINT  2689  -1.486809012309066  35.18419628736905
+  POINT  2690  -4.303354465001183  31.05895358128684
+  POINT  2691  -4.55951779146229  31.50692884476348
+  POINT  2692  -4.814374491189353  31.05972774650009
+  POINT  2693  -4.303319481666954  31.95367266283595
+  POINT  2694  -4.814339507855124  31.9544468280492
+  POINT  2695  -3.794429959970654  31.05851674025303
+  POINT  2696  -3.285536346627419  31.06016856732271
+  POINT  2697  -3.539604151930885  31.5078065066199
+  POINT  2698  -4.049286659697717  30.61131564198964
+  POINT  2699  -3.792218904985805  31.95624679413531
+  POINT  2700  -3.28332529164257  31.95789862120499
+  POINT  2701  -4.047040621378638  32.40376477742103
+  POINT  2702  7.293827708476641e-08  30.61670207641359
+  POINT  2703  -0.2521485735852201  31.06882400602231
+  POINT  2704  -0.2521485843374779  30.16753613384589
+  POINT  2705  -0.7573647761819143  29.27115377417338
+  POINT  2706  -0.5048694095893164  29.71821293229341
+  POINT  2707  -0.757018053121834  30.16737885684081
+  POINT  2708  -1.261813079214908  30.16656491069634
+  POINT  2709  -1.00909225396307  30.61588811224881
+  POINT  2710  -1.750101564306177  33.7926600881429
+  POINT  2711  -1.247341893467582  33.80032930854107
+  POINT  2712  -0.9957606346718019  34.26612784853185
+  POINT  2713  -1.241669357333788  34.72964383553155
+  POINT  2714  -1.739534339372401  34.71160969751359
+  POINT  2715  -11.99490542589216  33.72244073919998
+  POINT  2716  -12.55579994637244  33.72998392753992
+  POINT  2717  -12.24028160504613  34.13586616472574
+  POINT  2718  -12.58774656772219  32.92273577571433
+  POINT  2719  -12.04127268056533  32.88444075338846
+  POINT  2720  -12.31859548106905  32.49061802708863
+  POINT  2721  -11.76196356192489  33.30918024521488
+  POINT  2722  -11.49281247527174  32.87706249658918
+  POINT  2723  -11.44644522059858  33.7150624824007
+  POINT  2724  -10.96746234053338  33.79803021601935
+  POINT  2725  -10.46487803283816  33.83310531972037
+  POINT  2726  -10.71091904893609  33.33687709211661
+  POINT  2727  -11.20040420450066  34.21129071000446
+  POINT  2728  -11.46127976573915  30.22519151574363
+  POINT  2729  -11.70834995916295  29.77725564258582
+  POINT  2730  -11.97221458253263  30.23418703394924
+  POINT  2731  -10.68395992686636  29.76000252533419
+  POINT  2732  -10.93683718292719  29.31526402048404
+  POINT  2733  -13.99001145216601  30.2071360473141
+  POINT  2734  -14.24302441828744  30.64244700270329
+  POINT  2735  -13.47593211929433  30.2148213247283
+  POINT  2736  -12.882639952868  33.38136001505353
+  POINT  2737  -13.12801613202197  33.79478544057929
+  POINT  2738  -13.15996275337173  32.9875372887537
+  POINT  2739  -12.56903973339889  32.06645679208884
+  POINT  2740  -12.02256584624203  32.02816176976298
+  POINT  2741  -8.913239817098617  31.99135920727501
+  POINT  2742  -8.40158183646983  31.98514989359324
+  POINT  2743  -8.652257386764454  31.53745947968953
+  POINT  2744  -8.921335412563566  32.89535129795895
+  POINT  2745  -8.673611325668027  33.34794371176464
+  POINT  2746  -8.414840179908452  32.89164203498441
+  POINT  2747  -5.072107480879501  32.40303922173636
+  POINT  2748  -5.328305790674837  31.95629540366389
+  POINT  2749  10.14864152241564  25.29167841478616
+  POINT  2750  10.40452204895563  24.84933923994486
+  POINT  2751  7.345760569471696  27.50220841755529
+  POINT  2752  6.836865374418886  27.50054703680143
+  POINT  2753  7.089552523791351  27.05704250164396
+  POINT  2754  2.525426835782363  26.16307688713685
+  POINT  2755  2.272480634611741  25.72176210905083
+  POINT  2756  2.777875233522349  25.72204462651898
+  POINT  2757  1.767575335564268  26.60489238751902
+  POINT  2758  1.514941509738058  26.16264509615625
+  POINT  2759  2.272957824933265  26.60516717755396
+  POINT  2760  2.778352423843874  26.60544969502211
+  POINT  2761  4.805074847682363  27.49442755495632
+  POINT  2762  4.552513154400769  27.93750824958521
+  POINT  2763  4.297887807610577  27.49325833103988
+  POINT  2764  6.57468887445735  24.40195169880285
+  POINT  2765  6.321311698834721  24.84298263597548
+  POINT  2766  7.849057448689945  25.73004086883459
+  POINT  2767  8.359006247967862  25.73123236418823
+  POINT  2768  8.61552521165617  26.17503643791459
+  POINT  2769  9.404349218168869  30.19173390211969
+  POINT  2770  9.65777479999708  29.74665923251244
+  POINT  2771  10.40670379081607  26.62599846740034
+  POINT  2772  10.66169908791753  26.18015324950281
+  POINT  2773  10.91913923802371  26.62640116557348
+  POINT  2774  10.40539732837285  25.73591803949286
+  POINT  2775  10.91783277558049  25.73632073766599
+  POINT  2776  9.89250783475268  25.73551092662298
+  POINT  2777  9.637659499680273  26.17823816723135
+  POINT  2778  12.98765611516729  24.84316435404515
+  POINT  2779  13.24519849159788  25.28412934430153
+  POINT  2780  12.97771797713904  25.73181949643032
+  POINT  2781  13.4973712688774  25.72824679366293
+  POINT  2782  13.74303197345077  26.17287521768461
+  POINT  2783  13.99649931993174  26.62119388701589
+  POINT  2784  13.48335810089953  26.624255615123
+  POINT  2785  14.0105124879096  25.72518506555582
+  POINT  2786  14.53346833943965  25.71999652791481
+  POINT  2787  14.76538182086017  26.16564275654618
+  POINT  2788  12.97101588266317  26.6242609325337
+  POINT  2789  13.22448322914414  27.07257960186498
+  POINT  2790  11.18782984741558  28.86783824005193
+  POINT  2791  11.44023158859328  28.42154320407505
+  POINT  2792  10.92866118458883  28.41597310920991
+  POINT  2793  15.8358466505693  29.77825662708678
+  POINT  2794  15.57327800023705  30.19757601615488
+  POINT  2795  15.03254016683603  30.19341354430916
+  POINT  2796  -0.8995237521899599  19.54873467419662
+  POINT  2797  -1.223665336802445  19.99999999772069
+  POINT  2798  -1.340523578198245  19.5487346702835
+  POINT  2799  -0.8995237451475713  20.45126532729634
+  POINT  2800  -1.340523571155856  20.45126532338323
+  POINT  2801  -1.523722054976781  19.10064953446878
+  POINT  2802  -1.775181039070304  18.66606637620227
+  POINT  2803  -1.267840977679282  18.66288618849292
+  POINT  2804  -1.847863639589266  19.55191485799285
+  POINT  2805  3.030578223423045  16.47865931956265
+  POINT  2806  2.7786995819392  16.9173169337976
+  POINT  2807  3.283887773770873  16.91774472162141
+  POINT  2808  2.273605935625607  16.91641083896922
+  POINT  2809  2.777737361196587  16.03895609462461
+  POINT  2810  2.272576544974629  16.03887379781015
+  POINT  2811  2.524923874579844  15.59959836069592
+  POINT  2812  3.282925553028259  16.03938388244843
+  POINT  2813  -0.7612694088495366  18.66199020272551
+  POINT  2814  -1.012728392943059  18.227407044459
+  POINT  2815  -0.758598544150526  17.78995693156367
+  POINT  2816  -1.265170112980272  17.79085291733108
+  POINT  2817  4.506764545389951  1.417895953039242
+  POINT  2818  4.783535558950785  1.00631976803145
+  POINT  2819  4.758484548151512  1.889696750885436
+  POINT  2820  4.253215613299169  1.820569169400931
+  POINT  2821  3.510966697825907  1.270945661498197
+  POINT  2822  3.322764554813852  0.7621993600452871
+  POINT  2823  2.853419417958452  0.6871814573462394
+  POINT  2824  3.15663773239814  0.2506800547597778
+  POINT  2825  2.526762781558002  1.133795733001061
+  POINT  2826  0.7361792967570719  3.370479836805422
+  POINT  2827  0.984246123665582  3.857601448530803
+  POINT  2828  1.229220834288343  3.387837280503928
+  POINT  2829  0.2456021749298  4.312315065409472
+  POINT  2830  -6.12900348972989e-07  3.840243961866928
+  POINT  2831  -0.2456030241048603  4.312315022444103
+  POINT  2832  0.2456016322509388  3.358689814749931
+  POINT  2833  0.5049285170465799  15.59922462282507
+  POINT  2834  0.2524349318952632  15.15933354319677
+  POINT  2835  0.7573634386942838  15.15936468952784
+  POINT  2836  -0.2524349044090859  14.27853318435742
+  POINT  2837  1.330778542918409e-08  14.71947361203522
+  POINT  2838  0.2524349358260958  14.27853318222174
+  POINT  2839  -0.2524349083399185  15.15933354533245
+  POINT  2840  -0.7573634152411641  15.15936469433383
+  POINT  2841  -0.5049284966536864  15.59922462549537
+  POINT  2842  0.5049254022037216  13.83754849930346
+  POINT  2843  0.7574092353969514  13.3953638490185
+  POINT  2844  0.2524838513024543  13.39540810425898
+  POINT  2845  0.7573603199205929  14.27848892698126
+  POINT  2846  1.262484605133556  13.39525696279437
+  POINT  2847  1.010043054232288  12.95311656774989
+  POINT  2848  1.767575339991074  13.39510769916648
+  POINT  2849  1.514941521155737  13.83735498043508
+  POINT  2850  1.262295113836738  15.15932946063648
+  POINT  2851  1.767248131092881  15.15945960799914
+  POINT  2852  1.514810041101744  15.5993859165188
+  POINT  2853  1.009801528685421  14.71943838100818
+  POINT  2854  1.262291995063047  14.2784536980899
+  POINT  2855  1.767382729920565  14.278304434462
+  POINT  2856  10.41084000253686  12.48260731078788
+  POINT  2857  9.899143909428762  12.48490033133931
+  POINT  2858  10.15245058881716  12.93005073050543
+  POINT  2859  7.613367978441445  10.26725776150029
+  POINT  2860  7.865566856326732  10.71237296609314
+  POINT  2861  7.872056162547818  9.817820601218891
+  POINT  2862  6.840628853956597  11.61013350401928
+  POINT  2863  7.350228541129577  11.60757337758872
+  POINT  2864  7.602701329817169  12.05219325805719
+  POINT  2865  7.859856068084092  11.60547869619642
+  POINT  2866  6.584305485265666  12.05624824322372
+  POINT  2867  6.331860536359608  11.61209380779351
+  POINT  2868  7.345761240100929  12.4977925867857
+  POINT  2869  7.855388767055443  12.4956979053934
+  POINT  2870  6.836865843678177  12.49945375805594
+  POINT  2871  6.328097526081189  12.50141406183017
+  POINT  2872  7.089553280916451  12.94295840539215
+  POINT  2873  8.370126385671387  11.60298196347085
+  POINT  2874  8.117653596983795  11.15836208300238
+  POINT  2875  8.375837173914027  10.70987623336757
+  POINT  2876  4.295101059051913  14.27689245468694
+  POINT  2877  4.801572033150954  14.27614783489993
+  POINT  2878  5.054251674501884  14.71756589197868
+  POINT  2879  5.308173049886577  14.27556530526172
+  POINT  2880  4.041727348991283  14.71850999116095
+  POINT  2881  4.800381330074277  15.15879930644609
+  POINT  2882  5.3069823468099  15.15821677680788
+  POINT  2883  7.849059237793011  14.26996017987809
+  POINT  2884  8.103070930537744  14.71207488647675
+  POINT  2885  5.815417413760485  14.27454965531052
+  POINT  2886  5.562737772409555  13.83313159823176
+  POINT  2887  -0.2521485527378636  8.931176099677991
+  POINT  2888  -0.5035763908778745  8.480088454668433
+  POINT  2889  -0.7557250243185949  8.932210406700243
+  POINT  2890  -0.2509573870619522  8.024279294560063
+  POINT  2891  0.2509575473889861  8.024279283349045
+  POINT  2892  7.962417714058034e-08  7.56950443026293
+  POINT  2893  6.593280292555939  10.27328387180388
+  POINT  2894  6.335879483268245  10.7209592028273
+  POINT  2895  5.830755701913942  9.830536241827216
+  POINT  2896  5.574295302392639  10.27814403449093
+  POINT  2897  5.321475942820628  9.832740939252627
+  POINT  2898  6.341449789967948  9.827318887765713
+  POINT  2899  5.062470520941847  11.17165642054254
+  POINT  2900  5.317804209527402  10.72520563662399
+  POINT  2901  5.827083968620716  10.72300093919858
+  POINT  2902  6.079388390403009  11.16802080496036
+  POINT  2903  5.823065021712079  11.61413554416479
+  POINT  2904  5.315146558477212  11.61569271764991
+  POINT  2905  5.567618704433812  12.05976572048306
+  POINT  2906  1.26260880164937  12.50952783290288
+  POINT  2907  0.7575334319127655  12.509634719127
+  POINT  2908  1.515420485651163  12.06591797610076
+  POINT  2909  1.767930107970686  12.50939982472365
+  POINT  2910  2.779582641351243  11.62045230557948
+  POINT  2911  2.526574119133528  12.06542614609067
+  POINT  2912  2.273750314190195  11.62081612741035
+  POINT  2913  3.538866270969666  12.06436176963468
+  POINT  2914  3.284985271677322  12.50826344534523
+  POINT  2915  3.286081822236629  11.62005928968668
+  POINT  2916  2.273653942155398  10.72932286147457
+  POINT  2917  2.52689359077933  10.28311528781965
+  POINT  2918  2.021045272905355  11.17585461155564
+  POINT  2919  1.76803675068764  11.62082845206683
+  POINT  2920  1.262715444366323  11.62095646024605
+  POINT  2921  1.010161226929193  11.17580755694835
+  POINT  2922  0.7575449618927166  11.62089708098228
+  POINT  2923  1.767940378652842  10.72933518613105
+  POINT  2924  1.262535322656886  10.72890566637786
+  POINT  2925  1.515143991906928  10.28237391629679
+  POINT  2926  0.253078415467722  21.33774656433547
+  POINT  2927  0.5081909984648777  20.90226741555631
+  POINT  2928  -0.3913327526621082  20.45100208957463
+  POINT  2929  2.734971728257651e-09  20.45100208875773
+  POINT  2930  -0.39133275539708  20.0000000008169
+  POINT  2931  -0.5081909870155196  20.90226741523717
+  POINT  2932  0.3913327604803603  20.45100208957464
+  POINT  2933  0.3913327577453886  20.0000000008169
+  POINT  2934  0.2530784161400829  22.21052479098349
+  POINT  2935  0.5055201289601644  22.64707892336772
+  POINT  2936  -2.785590905596614  21.32882419900507
+  POINT  2937  -3.03503418550369  21.76658246600001
+  POINT  2938  1.770560907143734  17.79144658719761
+  POINT  2939  2.024810499173619  18.22997737721628
+  POINT  2940  1.775181052026418  18.66606637464487
+  POINT  2941  2.280691576572412  18.66774072366555
+  POINT  2942  1.265170126328186  17.79085291521534
+  POINT  2943  1.012728405401115  18.22740704319246
+  POINT  2944  0.7585985571016766  17.7899569302122
+  POINT  2945  1.516431058844295  17.35399647421735
+  POINT  2946  0.8995237605176197  19.54873467387751
+  POINT  2947  1.340523588216353  19.54873466996442
+  POINT  2948  1.523722067484837  19.10064953360767
+  POINT  2949  1.267840990086043  18.66288618715841
+  POINT  2950  0.7612694208595338  18.66199020215526
+  POINT  2951  5.813248074708591  17.79940577746486
+  POINT  2952  6.319914201894026  17.79970755524536
+  POINT  2953  6.067133785253771  18.23927390332938
+  POINT  2954  3.535574274154806  15.59970463007047
+  POINT  2955  3.788415136381265  16.0394078550085
+  POINT  2956  4.29392652128657  16.03975141330591
+  POINT  2957  4.547087929945052  15.59958939695291
+  POINT  2958  4.79995059372381  16.03961220762827
+  POINT  2959  4.041277800160023  16.47943066568386
+  POINT  2960  3.788433948862058  15.15930008166777
+  POINT  2961  3.282944365509053  15.1592761091077
+  POINT  2962  4.294357257637037  15.15893851212372
+  POINT  2963  3.794349415726029  21.32485606072119
+  POINT  2964  3.290304186047734  21.32705841534533
+  POINT  2965  3.544906134739364  20.8870977923218
+  POINT  2966  3.035034201374663  21.76658246994613
+  POINT  2967  3.285878222907446  22.20420717451871
+  POINT  2968  3.81360680382783  20.44244768929398
+  POINT  2969  4.073702118111949  19.99999990535705
+  POINT  2970  4.30904667870178  20.44244765376073
+  POINT  2971  3.813606878619757  19.55755217280245
+  POINT  2972  4.309046753493707  19.5575521372692
+  POINT  2973  3.091725105391231  19.99999995889588
+  POINT  2974  3.309561574149535  20.44465004391812
+  POINT  2975  2.535961556076473  19.1072647545244
+  POINT  2976  2.785591003223675  18.67117575709582
+  POINT  2977  2.823024475136099  19.55534988242807
+  POINT  2978  3.309561612982868  19.55534986442249
+  POINT  2979  3.544906248364625  19.11290209633464
+  POINT  2980  4.553342649405812  19.11635063545458
+  POINT  2981  4.813437888898004  19.55879836800918
+  POINT  2982  3.78894556721224  16.91866702923937
+  POINT  2983  3.537066925728395  17.35732464347433
+  POINT  2984  4.294456952117544  16.91901058753678
+  POINT  2985  10.40485762242933  23.0823167754689
+  POINT  2986  10.66359386676167  22.64123696885316
+  POINT  2987  7.336519205314388  23.96197717939193
+  POINT  2988  7.845748174573922  23.96277428191098
+  POINT  2989  7.847092038101775  15.1545453326975
+  POINT  2990  8.357041317327358  15.15335405870247
+  POINT  2991  7.335858156970897  16.91917008184071
+  POINT  2992  6.82740222651428  16.91959839644326
+  POINT  2993  7.081982885691881  16.4790557103205
+  POINT  2994  6.573652994571071  17.35977609867216
+  POINT  2995  6.82753870511625  17.79964422453667
+  POINT  2996  6.319777723292055  16.91966172715194
+  POINT  2997  8.865603095183527  21.32049701279709
+  POINT  2998  8.610566546294587  20.88042660659833
+  POINT  2999  8.354847778087121  21.32045064574386
+  POINT  3000  -19.49782579425925  18.2262342507611
+  POINT  3001  -19.95653724886555  18.68219083235013
+  POINT  3002  -19.87861801615688  17.79987597964446
+  POINT  3003  -18.66020382675364  15.93496854205557
+  POINT  3004  -19.16290631175541  15.97909016657372
+  POINT  3005  -18.99857199443355  15.51737708814106
+  POINT  3006  -17.91955297322556  13.2829594368018
+  POINT  3007  -18.41152301195191  13.295877500577
+  POINT  3008  -9.129653461818208  12.93477147753005
+  POINT  3009  -8.876289950333131  12.49088708422035
+  POINT  3010  -8.365440669810539  12.49364887761896
+  POINT  3011  -8.108500589767266  12.9392481990543
+  POINT  3012  -7.855388676964306  12.4956979610122
+  POINT  3013  -8.361774657741075  13.38192668055925
+  POINT  3014  -7.851722664894842  13.38397576395249
+  POINT  3015  -4.80356472378408  18.67759654481199
+  POINT  3016  -4.299173591137375  18.67635031371034
+  POINT  3017  -5.054931658031134  18.23828417657461
+  POINT  3018  -2.280691562830554  18.66774072586148
+  POINT  3019  -2.024810485533055  18.22997737988562
+  POINT  3020  -2.785590988433182  18.67117575963704
+  POINT  3021  -2.535961541970431  19.1072647559537
+  POINT  3022  -5.306982312776921  15.15821679877318
+  POINT  3023  -5.813814758590553  15.15783103442108
+  POINT  3024  -4.547087902507322  15.59958941436245
+  POINT  3025  -4.293926496647592  16.03975142784848
+  POINT  3026  -7.337862524706304  15.15534238385541
+  POINT  3027  -7.847091962587663  15.15454536705468
+  POINT  3028  -9.890905060586594  16.91769167150019
+  POINT  3029  -10.147975417906  16.47686792201691
+  POINT  3030  -9.122219403737819  16.47724518073061
+  POINT  3031  -9.377742636906071  16.91780911523353
+  POINT  3032  -9.634630413183206  17.35862195801451
+  POINT  3033  -15.51798373490658  13.38033590670376
+  POINT  3034  -15.01511587050028  13.38241715695336
+  POINT  3035  -14.76536195414445  13.83436752674101
+  POINT  3036  -11.6877451403522  13.82008259053461
+  POINT  3037  -11.43269990813222  14.264155554569
+  POINT  3038  -11.43075852913953  13.37311667077508
+  POINT  3039  -10.91914257799354  13.37360334277097
+  POINT  3040  -14.49013065771233  8.92250716809294
+  POINT  3041  -13.97378473792814  8.903623831005547
+  POINT  3042  -13.75932210669217  8.400895838660942
+  POINT  3043  -14.48388519872614  8.085770307453599
+  POINT  3044  -14.7532851786944  8.51074262304131
+  POINT  3045  -14.07639210786223  7.906905857500061
+  POINT  3046  -16.05643838843906  11.55103715881512
+  POINT  3047  -16.33476399675755  11.08780033828979
+  POINT  3048  -16.09214922620015  10.65648918306597
+  POINT  3049  -15.54889503500405  11.56061276607589
+  POINT  3050  11.2389936247567  7.556479722522218
+  POINT  3051  10.95968569172366  7.131739392009571
+  POINT  3052  10.96516018232728  8.002770687957165
+  POINT  3053  10.45710182271854  7.09666523164841
+  POINT  3054  10.19676557908151  7.554948702823318
+  POINT  3055  9.947996817509239  7.086330070692012
+  POINT  3056  10.44503645463636  8.011377880133024
+  POINT  3057  9.935931449427057  8.001042719176626
+  POINT  3058  9.433883059010681  7.09648042600004
+  POINT  3059  9.694219302647717  6.638196954825132
+  POINT  3060  9.431468298922116  6.192050324704395
+  POINT  3061  8.921334355776636  7.10464922441238
+  POINT  3062  9.175111870638158  7.552782340279261
+  POINT  3063  9.020608292392154  2.610986790489027
+  POINT  3064  9.474327155954036  2.853381851282785
+  POINT  3065  9.424223358758637  2.359591439050014
+  POINT  3066  8.61015283696532  3.016787348807768
+  POINT  3067  9.406407135751241  3.443882765087797
+  POINT  3068  14.24301966553495  9.357549438241348
+  POINT  3069  14.4901295966866  8.92250482268938
+  POINT  3070  15.02251965234311  8.964668030477915
+  POINT  3071  14.50635307594872  9.811745665581833
+  POINT  3072  15.03253485589125  9.806581428114002
+  POINT  3073  15.30010149579994  9.372267151041644
+  POINT  3074  1.391480458123909  0.5361652771996028
+  POINT  3075  1.5311646848921  1.034881203024674
+  POINT  3076  0.9403288020067619  0.5067124227468429
+  POINT  3077  1.30290062382262  0.04248387209852996
+  POINT  3078  0.5146184240444129  0.9751892831391331
+  POINT  3079  0.7618858102185746  1.458041036081303
+  POINT  3080  1.257885314814681  1.486842127641039
+  POINT  3081  1.759808407924379  1.526429439176829
+  POINT  3082  -7.903282532023693  3.431138862491011
+  POINT  3083  -8.152789841056642  3.936144390882303
+  POINT  3084  -7.405025206157284  4.401754955187759
+  POINT  3085  -7.126972980823624  3.982555849504718
+  POINT  3086  -6.871914937442281  4.456668046370027
+  POINT  3087  -7.912211134470291  4.392559551191403
+  POINT  3088  -7.657153091088949  4.866671748056711
+  POINT  3089  -9.947996922680865  7.086330753741288
+  POINT  3090  -10.19676544567954  7.554949393736067
+  POINT  3091  -9.433883096893222  7.096480642617021
+  POINT  3092  -9.935931248079878  8.001043112251882
+  POINT  3093  4.527367092332923e-08  11.17574818979146
+  POINT  3094  -0.252495297355625  10.7286890466501
+  POINT  3095  -0.7573647365983451  10.72884633098105
+  POINT  3096  -6.777768896535333  2.634657762748669
+  POINT  3097  -7.244270061060128  2.731385544386314
+  POINT  3098  -7.354841851407485  3.536945192983723
+  POINT  3099  -6.821731582692482  3.591858284165991
+  POINT  3100  -7.598041133892552  3.040441297152283
+  POINT  3101  -2.770028523234636  7.135495143417519
+  POINT  3102  -2.262551794000459  7.128472515207454
+  POINT  3103  -2.013561812098475  7.580836281036188
+  POINT  3104  -1.756818092472177  7.124101067148673
+  POINT  3105  -2.268204295821881  8.035370941832417
+  POINT  3106  -1.975649084420517  3.904985271154332
+  POINT  3107  -2.229341417725875  4.384424847169543
+  POINT  3108  -1.730981152791177  4.354398340751177
+  POINT  3109  -1.233116312198353  4.336364163628327
+  POINT  3110  -1.48680864550371  4.815803739643538
+  POINT  3111  -0.7430351466867606  5.261285573502088
+  POINT  3112  -0.494472020592799  4.791077844253667
+  POINT  3113  -0.2485633623686729  5.254593855235067
+  POINT  3114  -0.740074808422948  4.319006740711124
+  POINT  3115  -3.989917167396486  2.240630780408752
+  POINT  3116  -3.738200036941911  1.768829703597202
+  POINT  3117  -3.247670870830478  1.691006496083939
+  POINT  3118  -2.976342610696507  2.129153640981189
+  POINT  3119  -3.734386660790618  2.660010881492179
+  POINT  3120  -4.249408434534817  2.711752124426682
+  POINT  3121  -6.558942474787781  3.123176139372501
+  POINT  3122  -6.331073604203918  3.568786795893496
+  POINT  3123  -6.287110918046769  2.611586274476174
+  POINT  3124  -6.621962591182754  4.900980417645647
+  POINT  3125  -6.343910365849093  4.481781311962606
+  POINT  3126  1.975648595423093  36.09501468771074
+  POINT  3127  1.730980862699194  35.6456016167933
+  POINT  3128  2.229341421389412  35.61557529593476
+  POINT  3129  1.767382707537047  25.72169563959068
+  POINT  3130  2.019831105277033  25.28066337897281
+  POINT  3131  1.262291980403351  25.72154636607824
+  POINT  3132  1.767248087730079  24.84054044960734
+  POINT  3133  2.272346014804772  24.84060691906749
+  POINT  3134  1.262295090029159  24.84067059179185
+  POINT  3135  -0.2524838111325409  26.60459195706799
+  POINT  3136  2.444279567637153e-08  27.04677661342691
+  POINT  3137  -0.2524838031658742  27.4903401891097
+  POINT  3138  0.2524838616507888  27.49034019456228
+  POINT  3139  -0.7575333892249605  27.4903653405446
+  POINT  3140  3.788433723962699  24.84070003411083
+  POINT  3141  4.041727103362698  25.28149016974522
+  POINT  3142  3.283312657697288  25.72224398475948
+  POINT  3143  3.030366456526666  25.28092920667346
+  POINT  3144  3.789177592187962  25.72274613527788
+  POINT  3145  4.295100814849055  25.72310774010915
+  POINT  3146  3.536686369183645  26.16386155512341
+  POINT  3147  2.272576461040474  23.96112624728912
+  POINT  3148  2.020306171472144  23.5221043798967
+  POINT  3149  2.273605847126488  23.08358918644693
+  POINT  3150  2.778699451801812  23.08268308508446
+  POINT  3151  3.030578057285068  23.52134071927124
+  POINT  3152  3.283887584263749  23.08225529947948
+  POINT  3153  6.82172659767877  36.40814779878537
+  POINT  3154  7.35483619344178  36.46305945729526
+  POINT  3155  6.558938425685055  36.87683381454495
+  POINT  3156  6.777763402182511  37.36535117969289
+  POINT  3157  7.244263972315331  37.26861717750442
+  POINT  3158  5.845709060934203  32.8543398439479
+  POINT  3159  5.327825047917067  32.84978785259251
+  POINT  3160  5.587460787769149  33.29923958236787
+  POINT  3161  5.07210716993828  32.40303966091142
+  POINT  3162  5.839992684245366  31.95857160899264
+  POINT  3163  5.328305474083631  31.9562956821724
+  POINT  3164  11.7636152966602  35.51005436606592
+  POINT  3165  11.89138268840086  36.08088984207926
+  POINT  3166  13.96434143009819  33.62431889214255
+  POINT  3167  13.62553027166024  33.96298348535633
+  POINT  3168  14.13907578790397  34.14519481201172
+  POINT  3169  13.6933777803736  33.05047192353857
+  POINT  3170  11.47394032795509  34.67289773812949
+  POINT  3171  11.20040168097641  34.21129404646143
+  POINT  3172  11.44644337030582  33.71506560055828
+  POINT  3173  10.96746084748497  33.79803270401432
+  POINT  3174  9.928435644092694  34.70960053046583
+  POINT  3175  9.445444615479557  34.74869014145943
+  POINT  3176  10.20212549960824  34.27925374770544
+  POINT  3177  8.55693472587436  37.47116564769411
+  POINT  3178  8.610154574479843  36.98321170564777
+  POINT  3179  7.792705712071077  37.37442105721501
+  POINT  3180  8.146978123645237  37.66529759679247
+  POINT  3181  8.559637437237384  38.07574638038857
+  POINT  3182  8.395984878751314  36.56036043869134
+  POINT  3183  7.903277933197526  36.56886333700585
+  POINT  3184  7.59803541538643  36.95956247755778
+  POINT  3185  13.23628235860721  30.68752328103807
+  POINT  3186  13.02182189368296  31.19025353239009
+  POINT  3187  13.39848589487437  32.59184677084766
+  POINT  3188  13.08141264733925  32.09785538670456
+  POINT  3189  13.15996052987587  32.98754066985602
+  POINT  3190  3.734384876860566  37.33999019105068
+  POINT  3191  3.989913736038182  37.75937050229219
+  POINT  3192  3.738191811837065  38.23117125418775
+  POINT  3193  3.247663856437776  38.30899372408128
+  POINT  3194  2.976338586140713  37.87084607032222
+  POINT  3195  0.7575449832500279  28.37910301124292
+  POINT  3196  0.5050496180037712  27.9339289377297
+  POINT  3197  1.262608818111103  27.49047225529183
+  POINT  3198  1.515420516496924  27.93408212583156
+  POINT  3199  0.7575334456124412  27.49036536204691
+  POINT  3200  2.526893724749228  29.71688489057836
+  POINT  3201  2.779450491643448  30.16459955601931
+  POINT  3202  3.286497797291172  29.27075851415398
+  POINT  3203  3.54071932016649  29.71695812350327
+  POINT  3204  3.793978826839798  29.27114357134025
+  POINT  3205  2.779998606761999  29.27036546592124
+  POINT  3206  2.273654040893363  29.2706772901826
+  POINT  3207  0.2509575631490233  32.89023084573768
+  POINT  3208  7.962001580263944e-08  32.43049566678853
+  POINT  3209  0.2509575815135437  31.97572081582519
+  POINT  3210  -0.2509574211939724  31.97572080461469
+  POINT  3211  0.7545341147933871  31.97468656237741
+  POINT  3212  1.00487180505531  32.42701557238493
+  POINT  3213  2.262552379835649  32.871528064516
+  POINT  3214  2.013562317430567  32.41916421915188
+  POINT  3215  1.75681859018817  32.87589931213495
+  POINT  3216  2.268204796802595  31.96462962194811
+  POINT  3217  2.77500339006423  31.96212582894687
+  POINT  3218  3.027618133833469  32.410566243476
+  POINT  3219  1.247341957495069  33.80032933334168
+  POINT  3220  1.503048939569117  33.33593227620078
+  POINT  3221  0.7511021544362571  32.88704853645076
+  POINT  3222  0.5001446352577484  33.34678370418941
+  POINT  3223  0.7487078672168751  33.80939990733931
+  POINT  3224  0.9957605981669626  34.2661278457785
+  POINT  3225  1.254058877164035  32.88356843083666
+  POINT  3226  4.807634527403731  36.45417558306546
+  POINT  3227  4.268078121334274  36.43451973236753
+  POINT  3228  5.055439451329409  35.99075638523749
+  POINT  3229  4.016824286852271  36.00258917550283
+  POINT  3230  3.742624318707891  36.43693935563272
+  POINT  3231  4.285159710652261  35.55276249892606
+  POINT  3232  3.759705908025878  35.55518212219123
+  POINT  3233  5.313339571489223  35.5337790049437
+  POINT  3234  5.576017529265764  35.08006250744026
+  POINT  3235  4.800178209638467  35.54319217194386
+  POINT  3236  4.543059830812075  35.09578511863226
+  POINT  3237  6.593280538182253  29.7267168205935
+  POINT  3238  6.845584839365598  29.28169702003494
+  POINT  3239  6.335879606186479  29.27904143291438
+  POINT  3240  6.851155373110538  30.17533731825264
+  POINT  3241  7.361674109424366  30.17880960428335
+  POINT  3242  7.109843711173534  30.62477451482192
+  POINT  3243  7.613368231755042  29.73274323698628
+  POINT  3244  7.872056569818037  30.18218043355557
+  POINT  3245  3.794429966540387  31.05851703304998
+  POINT  3246  4.049286650570231  30.61131584299384
+  POINT  3247  3.794281271533463  30.1641111043279
+  POINT  3248  3.033012443010421  30.61175253684394
+  POINT  3249  3.285536433201112  31.06016885716353
+  POINT  3250  3.286800241984837  30.16372604714163
+  POINT  3251  19.49782570706544  18.22623423316451
+  POINT  3252  19.95653726784996  18.68219111832597
+  POINT  3253  18.58166017353374  18.21127385550157
+  POINT  3254  18.44873815733738  18.65901810939465
+  POINT  3255  17.82900842060782  17.79250664273356
+  POINT  3256  17.55961501255982  18.23365515048583
+  POINT  3257  18.38742546426215  17.76710888707429
+  POINT  3258  18.87780136911621  17.75460013746301
+  POINT  3259  17.52690217883121  14.67823772169018
+  POINT  3260  17.21413812833305  15.13667453160922
+  POINT  3261  17.10180895186563  14.27897243895621
+  POINT  3262  16.61643123646513  14.28454314481263
+  POINT  3263  16.41267770706892  14.73120621263948
+  POINT  3264  16.07296510477975  14.29114476438398
+  POINT  3265  14.25527356652689  20.00000694342845
+  POINT  3266  14.54458535674566  20.44472120503738
+  POINT  3267  15.08660392329284  20.4503355424043
+  POINT  3268  15.22709411735221  19.99960748842541
+  POINT  3269  14.54446737878539  19.55524897689899
+  POINT  3270  14.04144304480628  19.5552644241821
+  POINT  3271  15.12585065643982  22.18962336947886
+  POINT  3272  15.66704893150966  22.18912647227221
+  POINT  3273  15.93226494226947  22.62311502278055
+  POINT  3274  15.63603332292851  23.06058148636886
+  POINT  3275  15.10960336366766  23.06196334102751
+  POINT  3276  14.85525309603435  22.62543767487836
+  POINT  3277  15.07838610348047  15.1733118594097
+  POINT  3278  15.60761466098593  15.17729090093799
+  POINT  3279  15.33998301787808  14.73382879068254
+  POINT  3280  14.82036766750458  15.61339008097941
+  POINT  3281  15.08744436360368  16.05749207836569
+  POINT  3282  14.56179428451994  16.05410818967995
+  POINT  3283  14.55273602439673  15.16992797072396
+  POINT  3284  15.87591227598083  15.61135500755215
+  POINT  3285  16.13750919037845  15.17187193882498
+  POINT  3286  16.68097532206382  15.16527031925363
+  POINT  3287  16.93896961164258  15.57734025779473
+  POINT  3288  17.24542059267814  16.921237054667
+  POINT  3289  17.42133862340716  16.46621174527455
+  POINT  3290  16.6991273812222  16.92861646965699
+  POINT  3291  17.19812051536607  16.01499394956502
+  POINT  3292  16.66495770909684  16.04358973720944
+  POINT  3293  16.50011603657139  19.55060584927988
+  POINT  3294  16.11086118526408  19.54894289457717
+  POINT  3295  16.23490740586323  18.67143802475644
+  POINT  3296  16.77688889638486  18.67109500215383
+  POINT  3297  16.90823717346987  19.54895804099115
+  POINT  3298  15.66731510254423  17.81120259941419
+  POINT  3299  15.93239678965792  17.3770904840493
+  POINT  3300  15.12588811735991  17.81032407015078
+  POINT  3301  15.40255579021237  18.24333521180063
+  POINT  3302  14.85535684791786  17.37460770073489
+  POINT  3303  15.10975920515541  16.93820082241529
+  POINT  3304  14.5744686233815  16.93461706538583
+  POINT  3305  14.59059753558601  17.80674031312132
+  POINT  3306  16.79406525039852  28.02745799197655
+  POINT  3307  17.07238886613754  28.4906939788942
+  POINT  3308  16.57289177244715  28.46738533203519
+  POINT  3309  17.4965710356451  27.60644365003999
+  POINT  3310  17.80117571229844  28.04994051262165
+  POINT  3311  17.02019681392827  27.57157998790804
+  POINT  3312  16.52069972023788  27.54827134104903
+  POINT  3313  17.58991650606833  28.49979170459397
+  POINT  3314  18.10312000032976  28.50159082583126
+  POINT  3315  18.41154163693258  26.70405457720359
+  POINT  3316  18.5809862969927  26.22413241238169
+  POINT  3317  18.8590620588132  26.65851173471512
+  POINT  3318  17.91957654068757  26.71697613947613
+  POINT  3319  17.69355159834902  26.21921846733577
+  POINT  3320  18.11866262353381  25.81991390377403
+  POINT  3321  16.25412989716249  27.08512372750859
+  POINT  3322  16.02799833363274  27.5410017315771
+  POINT  3323  12.4713348273634  20.44086210014538
+  POINT  3324  12.74356289841131  20.88266792813398
+  POINT  3325  12.48035189032188  21.32047783433658
+  POINT  3326  11.9561289915379  23.08041192363828
+  POINT  3327  12.47539190118238  23.07854903560531
+  POINT  3328  12.21410635583005  23.51991665586499
+  POINT  3329  11.69840716659313  22.64001307273599
+  POINT  3330  13.00253570004953  22.19714775592412
+  POINT  3331  13.52908269363856  22.196464052818
+  POINT  3332  13.52075711029057  23.07307462590749
+  POINT  3333  13.79176001498042  22.63195101028575
+  POINT  3334  12.99841005278091  23.07655233280262
+  POINT  3335  12.74043268848876  22.63704760057591
+  POINT  3336  12.47951754845101  22.19914445872682
+  POINT  3337  16.76214594331712  26.16105609261419
+  POINT  3338  16.616482945813  25.71543906542623
+  POINT  3339  16.07300726146418  25.70885169527617
+  POINT  3340  15.7756762466737  26.15848944588978
+  POINT  3341  16.01909527733369  26.61668049315067
+  POINT  3342  15.51800947989736  26.61966307077576
+  POINT  3343  16.51179666393882  26.6239501026226
+  POINT  3344  18.1251910242728  22.66390416293884
+  POINT  3345  18.38730066575757  22.23230127821533
+  POINT  3346  18.87782298075228  22.24485624002787
+  POINT  3347  18.30109750604809  23.11887529175939
+  POINT  3348  18.75407461365194  23.14583948729189
+  POINT  3349  19.25336766894756  22.67096916601431
+  POINT  3350  19.18732501041783  23.0950223359802
+  POINT  3351  19.76177108442964  23.07772703249995
+  POINT  3352  13.22907297795537  11.13290668839839
+  POINT  3353  12.97061925836632  10.68124856516747
+  POINT  3354  12.46766895126554  10.67227901173746
+  POINT  3355  12.97143653644138  11.58072012917699
+  POINT  3356  13.4844546615271  11.58282112395052
+  POINT  3357  12.45912907450942  11.5804496180641
+  POINT  3358  12.71451075808115  12.03036405361623
+  POINT  3359  -7.335668197682937  22.20031115705586
+  POINT  3360  -7.590411055385765  22.64051999376785
+  POINT  3361  -6.827537248934346  22.20035519110679
+  POINT  3362  -6.573651574572926  22.64022353991485
+  POINT  3363  -6.319913095875537  22.20029198565057
+  POINT  3364  -5.813247200796855  22.20059393150383
+  POINT  3365  -5.306832057388836  22.20081300727318
+  POINT  3366  -6.067132875158276  21.76072558269578
+  POINT  3367  -5.81454204920424  21.32106756251621
+  POINT  3368  -5.309100236308474  21.32171516131793
+  POINT  3369  -9.89088523942082  17.79886411983713
+  POINT  3370  -10.14857204283547  18.23918999542934
+  POINT  3371  -9.377722815740299  17.79898156357048
+  POINT  3372  -9.121932143058153  18.23935021686822
+  POINT  3373  -9.377649624192905  18.6793738168293
+  POINT  3374  -10.66209369019408  15.59357842031993
+  POINT  3375  -10.4047259333652  16.03513252143312
+  POINT  3376  -9.890767799768657  16.03514342813541
+  POINT  3377  -15.5551069052719  19.54892678731335
+  POINT  3378  -15.97007772814454  19.09864623920131
+  POINT  3379  -16.11086108382489  19.54894292435325
+  POINT  3380  -15.08631065964352  19.54931079809318
+  POINT  3381  -15.22709401532387  19.99960748324512
+  POINT  3382  -11.95485738736122  20.44085699368801
+  POINT  3383  -12.47133467813871  20.44086208506123
+  POINT  3384  -12.2071089926688  20.00000805384752
+  POINT  3385  -12.48035172922288  21.32047778514489
+  POINT  3386  -11.95880860940138  21.32105241155066
+  POINT  3387  -12.22007726579314  21.75981917179383
+  POINT  3388  -11.69942419611676  20.88138349347376
+  POINT  3389  -17.47644814565474  19.54717789841071
+  POINT  3390  -17.94988903481506  19.54747252881383
+  POINT  3391  -17.76408314933547  19.99954839206847
+  POINT  3392  -18.23422300064733  19.09467791728322
+  POINT  3393  -17.87676913679358  18.65944248023681
+  POINT  3394  -17.09404296891593  19.09688220569864
+  POINT  3395  -16.90823708343633  19.54895806895328
+  POINT  3396  -19.76177103771798  23.07772732892936
+  POINT  3397  -19.25336756698695  22.67096898371729
+  POINT  3398  -19.18732490419377  23.0950221392252
+  POINT  3399  -19.4477189002975  22.22685220009963
+  POINT  3400  -19.87859220361732  22.20035725566065
+  POINT  3401  -19.25792784453962  23.55188835030948
+  POINT  3402  -18.75407461812375  23.14583867813167
+  POINT  3403  -19.16298007020004  24.02058528839067
+  POINT  3404  -19.60183463285162  23.97090406750409
+  POINT  3405  -17.87637073668006  21.33989279033893
+  POINT  3406  -17.34486803521384  21.33058393944672
+  POINT  3407  -17.55962675727944  21.76632022241122
+  POINT  3408  -17.09376266137075  20.90344544375881
+  POINT  3409  -16.77701868197013  21.3298728758311
+  POINT  3410  -17.4761271373948  20.45170513451989
+  POINT  3411  -16.90827778415109  20.45099407090427
+  POINT  3412  -17.94956802655513  20.45199976492301
+  POINT  3413  -18.23371022509465  20.90481762695371
+  POINT  3414  -15.02942422141325  28.42914654430462
+  POINT  3415  -14.7671126385203  27.97953118420565
+  POINT  3416  -15.52045268491218  27.53143128093732
+  POINT  3417  -15.78702266040701  27.9945786571865
+  POINT  3418  -15.54890495492492  28.43938079825739
+  POINT  3419  -15.01758100424557  27.52935438202635
+  POINT  3420  -14.50521687329288  27.52387632798913
+  POINT  3421  -9.904430672806125  28.40707065619491
+  POINT  3422  -10.41689547651911  28.41240707877134
+  POINT  3423  -10.66929721457722  27.96611203768271
+  POINT  3424  -10.92866096154303  28.41597287549923
+  POINT  3425  -9.645779006227713  27.95898668411711
+  POINT  3426  -9.392677949480536  28.4035110993572
+  POINT  3427  -10.41083773720197  27.51739624213824
+  POINT  3428  -9.899141965330045  27.51510256681794
+  POINT  3429  -10.15244797297871  27.06995256800136
+  POINT  3430  -12.99581434484171  20.4418189497832
+  POINT  3431  -13.51014574115279  20.441823572053
+  POINT  3432  -13.23791767975737  20.00001776749054
+  POINT  3433  -13.00483139592588  21.32143464986686
+  POINT  3434  -13.53137837642367  21.32075092653462
+  POINT  3435  -13.26816736611243  21.75856082205582
+  POINT  3436  -12.74356273953413  20.88266788962369
+  POINT  3437  -13.79945752002789  20.88653779646463
+  POINT  3438  -14.06279349021444  21.32366396865359
+  POINT  3439  -13.00253550757575  22.19714766326392
+  POINT  3440  -13.52908248807354  22.19646393993168
+  POINT  3441  -16.2347869870319  21.3294814436242
+  POINT  3442  -16.48589236087499  21.75661993931211
+  POINT  3443  -12.19975810951217  27.07290291179299
+  POINT  3444  -12.4571711074429  27.52124904151294
+  POINT  3445  -12.9694803662368  27.52097783922964
+  POINT  3446  -12.45674394638519  26.62593741289694
+  POINT  3447  -13.99578690627322  27.52331351175184
+  POINT  3448  -14.24625527199849  27.07313670957253
+  POINT  3449  -13.48182261231196  27.52097247150653
+  POINT  3450  -13.22448305890368  27.07257926105835
+  POINT  3451  -16.51179676394965  26.62394911594787
+  POINT  3452  -16.76214593621621  26.16105509049696
+  POINT  3453  -16.01909528016721  26.61667970802645
+  POINT  3454  -15.77567611970079  26.15848881210691
+  POINT  3455  -16.6164827210978  25.71543822133669
+  POINT  3456  -17.10186669733096  25.72098721941252
+  POINT  3457  -14.2878073219469  25.27536783225349
+  POINT  3458  -14.55271790511985  24.83011743787473
+  POINT  3459  -8.872303159269968  26.61976418580748
+  POINT  3460  -9.383403717149058  26.62219230704299
+  POINT  3461  -8.615525103211919  26.17503638397946
+  POINT  3462  -8.361773029290564  26.61807484838205
+  POINT  3463  -6.072689306874938  27.05391647376855
+  POINT  3464  -5.820129147476668  27.49712192171329
+  POINT  3465  -6.32809711573065  27.4985865281558
+  POINT  3466  -8.108499361881071  27.06075324214968
+  POINT  3467  -7.851721305823022  26.61602544032166
+  POINT  3468  -7.342393531093229  26.61452723488857
+  POINT  3469  -7.595667198502723  26.17184884112093
+  POINT  3470  -7.089552456771225  27.05704245715018
+  POINT  3471  -6.833498349450926  26.61286585794945
+  POINT  3472  -8.86778693118517  24.84742870791405
+  POINT  3473  -9.124384612345526  25.29019441464502
+  POINT  3474  -9.37915421259267  24.8485055322633
+  POINT  3475  -8.869536282064676  25.73292165585033
+  POINT  3476  -9.380903563472174  25.73399848019958
+  POINT  3477  -8.359006152085271  25.7312323184249
+  POINT  3478  -8.357038518711398  24.84664678923989
+  POINT  3479  -10.66208748767119  24.40642264890459
+  POINT  3480  -10.40472005439022  23.96486714250717
+  POINT  3481  -9.890762707770147  23.96485666497387
+  POINT  3482  -10.14796982013292  23.52313091779618
+  POINT  3483  -9.635034736729882  24.4061663576086
+  POINT  3484  -9.891632417890238  24.84893206433957
+  POINT  3485  -10.91783258828627  25.73632062930466
+  POINT  3486  -11.1763927535566  25.29161367806042
+  POINT  3487  -10.91909643785067  24.8491689242055
+  POINT  3488  -10.40452189220693  24.84933916498578
+  POINT  3489  -10.14864136806972  25.29167833964048
+  POINT  3490  -11.74873160124686  31.58187192779659
+  POINT  3491  -11.49828734891701  32.00603316279637
+  POINT  3492  -11.47479874651534  31.12093311396852
+  POINT  3493  -11.99907724384035  31.14306172093513
+  POINT  3494  -8.903187047443012  31.09050659247998
+  POINT  3495  -8.391529066814227  31.08429727879821
+  POINT  3496  -9.153056137445173  30.63961932778357
+  POINT  3497  -9.398187070199079  29.29658412996691
+  POINT  3498  -9.657774617851228  29.74665905739351
+  POINT  3499  -8.893751625915996  30.18945879004375
+  POINT  3500  -8.634397568876253  29.73884359430083
+  POINT  3501  -8.383104670453044  30.18672919584575
+  POINT  3502  -9.404349035868384  30.19173372623865
+  POINT  3503  -9.917079129380406  30.19681959513333
+  POINT  3504  -11.43712146196009  23.08138062463141
+  POINT  3505  -10.92066341043863  23.08206159128155
+  POINT  3506  -10.92128239036736  22.20090962423238
+  POINT  3507  -11.43896690004795  22.20068779271661
+  POINT  3508  -10.40485749578829  23.08231672552517
+  POINT  3509  -9.890900149168209  23.08230624799187
+  POINT  3510  -9.634625983220046  22.64137541680352
+  POINT  3511  -10.66359373947392  22.64123692147724
+  POINT  3512  -10.40547647571701  22.201164758476
+  POINT  3513  -10.66371310846123  20.88088246173954
+  POINT  3514  -10.40367257665969  20.44035401979257
+  POINT  3515  -10.40541301206526  21.32077321133221
+  POINT  3516  -9.8901701579261  20.44035371858478
+  POINT  3517  -10.14618183706572  19.99999877694407
+  POINT  3518  -9.634491342600295  20.88059096244695
+  POINT  3519  -6.573652952599984  17.35977611294056
+  POINT  3520  -6.827538661488333  17.79964423723647
+  POINT  3521  -7.335669920285115  17.79968797825121
+  POINT  3522  -6.827402180000886  16.91959841386031
+  POINT  3523  -7.335858102257347  16.9191701018657
+  POINT  3524  -7.590413254981577  17.35947930332449
+  POINT  3525  -3.091725092272973  19.99999995889544
+  POINT  3526  -2.823024423095185  20.44465006103595
+  POINT  3527  -2.82302446192895  19.55534988331524
+  POINT  3528  -2.318125036326323  19.55191484953968
+  POINT  3529  -2.134926559547786  19.9999999853544
+  POINT  3530  -2.359753808315156  39.37214496437061
+  POINT  3531  -2.220681201259319  39.87633202954547
+  POINT  3532  -2.853428424545745  39.31281750216315
+  POINT  3533  -3.322774736378872  39.23779911173357
+  POINT  3534  -3.813302945216087  39.15997614437607
+  POINT  3535  -4.091233566165744  39.57707352541702
+  POINT  3536  -4.278277613788639  39.06280534020281
+  POINT  3537  -3.156650010923889  39.74931797899575
+  POINT  3538  -3.033012362958341  30.6117523199572
+  POINT  3539  -2.778186554918571  31.06104208632408
+  POINT  3540  -2.27138793410801  31.06354594879045
+  POINT  3541  -2.523911917777087  31.51196219615595
+  POINT  3542  -2.019774925652819  30.61385000253146
+  POINT  3543  -1.765500288511335  31.06477011236333
+  POINT  3544  -2.779450402058304  30.16459938073862
+  POINT  3545  -3.286800193767151  30.16372586173725
+  POINT  3546  -3.794281249655442  30.16411092827807
+  POINT  3547  -3.540719288755405  29.71695798905948
+  POINT  3548  -4.303205754685972  30.16454776931187
+  POINT  3549  -3.027617960595887  32.41056575188199
+  POINT  3550  -2.775003207540966  31.96212546436659
+  POINT  3551  -2.268204586730404  31.96462932683296
+  POINT  3552  -2.013562100740824  32.41916396507942
+  POINT  3553  -1.762470810976946  31.96900069686879
+  POINT  3554  -2.77002899331762  32.86450527990432
+  POINT  3555  -3.278351077419224  32.86027843674272
+  POINT  3556  -2.262552160354756  32.87152776282665
+  POINT  3557  -2.513285277178094  33.32124044768738
+  POINT  3558  -1.512133134743765  31.51667171366356
+  POINT  3559  -1.257490648754185  31.97120635191003
+  POINT  3560  -0.7545339478042523  31.97468651214141
+  POINT  3561  -0.5035764459107245  31.51991166117807
+  POINT  3562  -0.7557251001955001  31.06778971354904
+  POINT  3563  -1.260520126288574  31.06697576740457
+  POINT  3564  -1.997791297947086  34.24333855669495
+  POINT  3565  -2.25349817785614  33.77894139916177
+  POINT  3566  -2.760975010819003  33.77191891623943
+  POINT  3567  -3.011955447586298  34.2203681171806
+  POINT  3568  -3.271742546908253  33.76266716570622
+  POINT  3569  -2.748277227128552  34.67648604901853
+  POINT  3570  -3.259044763217802  34.66723429848531
+  POINT  3571  -2.242930952922364  34.69789100853247
+  POINT  3572  -10.99496194121145  34.7558609147853
+  POINT  3573  -11.47394482127665  34.67289318116666
+  POINT  3574  -10.72127300001099  35.18620741077456
+  POINT  3575  -10.447732383235  34.72460493961236
+  POINT  3576  -11.39311640574461  35.78402816783584
+  POINT  3577  -11.76362390176834  35.51004748537068
+  POINT  3578  -11.89139445142899  36.08088113093766
+  POINT  3579  -10.945244583311  30.21194894494906
+  POINT  3580  -11.20910920668068  30.66888033631249
+  POINT  3581  -10.95876356408719  31.10769054317395
+  POINT  3582  -10.43863904361896  31.09908334789622
+  POINT  3583  -10.70432858345361  31.55113612555225
+  POINT  3584  -10.17836378582505  30.6487660147482
+  POINT  3585  -10.43178936780789  30.20369134590305
+  POINT  3586  -12.20772792247103  28.87130307528364
+  POINT  3587  -11.95934239545081  29.3298295299858
+  POINT  3588  -11.44840757865733  29.32083401178019
+  POINT  3589  -11.18782961921505  28.86783790788402
+  POINT  3590  -11.95080070850122  28.4216606767123
+  POINT  3591  -11.44023135727316  28.42154286679538
+  POINT  3592  -12.78538354685579  31.63539654824448
+  POINT  3593  -13.08141318168281  32.09785280557013
+  POINT  3594  -13.69337999756491  33.05046757946367
+  POINT  3595  -14.20287042370327  33.22861936316023
+  POINT  3596  -13.9643465646559  33.62431331178948
+  POINT  3597  -14.50371229213761  32.89870088682812
+  POINT  3598  -14.7783619362536  33.47590510864688
+  POINT  3599  -14.33939456995485  32.47590094466933
+  POINT  3600  -13.3984866124191  32.59184334012446
+  POINT  3601  -13.61483042587599  32.16078309628009
+  POINT  3602  -12.5094486201497  31.15885540730061
+  POINT  3603  -12.23551576541817  30.69791659347253
+  POINT  3604  -12.48258595884198  30.24998072031472
+  POINT  3605  -13.02182206843361  31.19025142078188
+  POINT  3606  -13.23628259023528  30.6875215539166
+  POINT  3607  -13.51221751694137  31.16406269486048
+  POINT  3608  -12.98553667078657  30.24101005064971
+  POINT  3609  -9.935933060425999  31.99895783017763
+  POINT  3610  -9.425788712629927  31.99952776172602
+  POINT  3611  -9.175113162335302  32.44721817562974
+  POINT  3612  -9.433884308094877  32.90351985240996
+  POINT  3613  -9.947998399553743  32.91366946294919
+  POINT  3614  -9.694220649782007  33.36180258527841
+  POINT  3615  -5.845709714652145  32.8543394931615
+  POINT  3616  -6.35943259227712  32.85785448154385
+  POINT  3617  -6.099796641324188  32.4084027857334
+  POINT  3618  -6.620526367917938  33.30931460020675
+  POINT  3619  -6.874613294589981  32.86337789277866
+  POINT  3620  -5.843830266875138  33.74469076224041
+  POINT  3621  -6.366502908847091  33.75556165131462
+  POINT  3622  -6.104987510117153  34.19646122458308
+  POINT  3623  -6.881683611159954  33.76108506254942
+  POINT  3624  -8.152299853281146  32.43384481530836
+  POINT  3625  -7.904575766385607  32.88643722911405
+  POINT  3626  -7.38887125499455  32.87173901043978
+  POINT  3627  -7.651411581621856  33.32953623011583
+  POINT  3628  -7.891317422946985  31.97994508772288
+  POINT  3629  -7.127777479353732  32.42027889177689
+  POINT  3630  5.815416780370211  25.7254507508302
+  POINT  3631  6.068349777660536  25.28383032121751
+  POINT  3632  6.322914497966334  25.72626412073013
+  POINT  3633  5.813813981238598  24.84216926607556
+  POINT  3634  5.054251193044102  25.28243436294704
+  POINT  3635  5.306981751859498  24.8417834592201
+  POINT  3636  5.559943673033683  24.40093577397807
+  POINT  3637  6.584305206584972  27.94375248790075
+  POINT  3638  6.331860450220269  28.38790682772228
+  POINT  3639  6.840628663734527  28.38986729253429
+  POINT  3640  6.328097160904627  27.49858657198942
+  POINT  3641  5.31221078469278  27.49556469000557
+  POINT  3642  5.057585437902588  27.05131477146023
+  POINT  3643  5.817351437794507  26.61016822842614
+  POINT  3644  6.072689351825773  27.05391651369978
+  POINT  3645  6.325319414707275  26.61163283561645
+  POINT  3646  5.82012918399186  27.49712196479911
+  POINT  3647  5.567618593771634  27.9402347482952
+  POINT  3648  4.047052787592788  28.82584698915801
+  POINT  3649  4.29983719277504  28.38154452099692
+  POINT  3650  4.807024232846825  28.38271374491336
+  POINT  3651  4.301274310468107  29.2720465985073
+  POINT  3652  4.809682020990673  29.27320084424044
+  POINT  3653  4.549022188976916  26.16510838289133
+  POINT  3654  4.802971287585841  26.60801534827591
+  POINT  3655  4.296500402283245  26.6072706710264
+  POINT  3656  5.310107224596258  26.60915248332515
+  POINT  3657  5.56273728747776  26.16686880524183
+  POINT  3658  5.308172567171963  25.72443500572921
+  POINT  3659  4.801571700151651  25.72385241735866
+  POINT  3660  3.790057682711869  26.60644965824722
+  POINT  3661  4.044006781320794  27.04935662363181
+  POINT  3662  3.284985274934477  27.49173672429433
+  POINT  3663  3.031723737372097  27.04803779814592
+  POINT  3664  3.284192748221195  26.60594750772882
+  POINT  3665  3.791445088039201  27.4924373182607
+  POINT  3666  7.595667276623683  26.1718488829917
+  POINT  3667  7.339729660651949  25.72854265913015
+  POINT  3668  6.831093491921173  25.72749718220235
+  POINT  3669  6.578160494630848  26.16911761181503
+  POINT  3670  6.833498408662114  26.61286589708867
+  POINT  3671  7.342393603714925  26.61452727784253
+  POINT  3672  7.851721391752919  26.61602548754698
+  POINT  3673  10.16379461741962  28.8569316742142
+  POINT  3674  9.910917354739734  29.30167017583803
+  POINT  3675  10.42338218073125  29.30700664681063
+  POINT  3676  9.398187236685452  29.296584259916
+  POINT  3677  11.1763929467876  25.29161378016803
+  POINT  3678  11.43269470633229  25.73584899017798
+  POINT  3679  11.17575978189087  27.0727338951912
+  POINT  3680  11.43421927431302  27.52144974007221
+  POINT  3681  10.92260343334439  27.52096222835202
+  POINT  3682  11.43075507899234  26.62688867729366
+  POINT  3683  11.95934260436991  29.32983015861389
+  POINT  3684  12.46767046560084  29.32772545608889
+  POINT  3685  12.20772811265096  28.87130363239207
+  POINT  3686  12.48258604719192  30.24998189542344
+  POINT  3687  11.97221474555926  30.23418783961753
+  POINT  3688  12.23551583543139  30.69791775273026
+  POINT  3689  12.9694805256095  27.52097823699379
+  POINT  3690  13.48182274384587  27.52097291958309
+  POINT  3691  13.74078426771563  27.97171267290139
+  POINT  3692  13.99578697125026  27.52331403777258
+  POINT  3693  -0.2530784093217016  18.66225344208705
+  POINT  3694  0.2530784208222577  18.66225344183592
+  POINT  3695  6.030645871568652e-09  18.22651105844045
+  POINT  3696  0.5081910055071862  19.09773258580186
+  POINT  3697  -0.5081909940579249  19.09773258612098
+  POINT  3698  0.3913327604803437  19.54899791355816
+  POINT  3699  2.734955073611239e-09  19.54899791274126
+  POINT  3700  -0.3913327526621249  19.54899791355815
+  POINT  3701  3.794281045691874  9.835889181209401
+  POINT  3702  3.286800036582792  9.836274197162457
+  POINT  3703  2.229340800261039  4.38442472316282
+  POINT  3704  1.730980420814213  4.354398366661153
+  POINT  3705  1.975648040643678  3.904985248730975
+  POINT  3706  5.253303014360708  1.128293718388772
+  POINT  3707  5.02628530891481  0.6418891392761246
+  POINT  3708  2.255436532179687  1.571943194814049
+  POINT  3709  1.982157162102268  2.023904119430414
+  POINT  3710  2.749111535735891  1.631270413254645
+  POINT  3711  -1.254058521951619  7.116431779054716
+  POINT  3712  -0.7511018940799036  7.112951583302987
+  POINT  3713  -1.503048503853604  6.664068013225982
+  POINT  3714  -1.997790841279557  5.756661654557217
+  POINT  3715  -1.739533928644415  5.288390381777326
+  POINT  3716  -2.242930398731676  5.302109189546279
+  POINT  3717  -1.241669088051592  5.270356204654476
+  POINT  3718  -0.9957604298274654  5.733872215635875
+  POINT  3719  -1.247341652262671  6.199670785960144
+  POINT  3720  -0.7487077108978402  6.190600154807756
+  POINT  3721  -1.750101222783229  6.207340074054102
+  POINT  3722  0.2525804711664861  16.03806627312495
+  POINT  3723  0.7575089779655068  16.03809741945602
+  POINT  3724  2.02030624750022  16.47789565447198
+  POINT  3725  1.768522151534456  16.91607496170236
+  POINT  3726  1.263131370718908  16.9154812897201
+  POINT  3727  1.010191697747241  16.47724942348051
+  POINT  3728  0.7581006050570804  16.91517093599549
+  POINT  3729  1.767492760883478  16.03853792054329
+  POINT  3730  1.262539743627335  16.03840777318063
+  POINT  3731  2.020500917581566  12.9527349076961
+  POINT  3732  2.27331260158336  12.50912505089398
+  POINT  3733  2.779144928744407  12.50876122906312
+  POINT  3734  3.031723754127154  12.95196235014854
+  POINT  3735  2.778352454165535  13.39455042727942
+  POINT  3736  2.272957833603747  13.3948329253368
+  POINT  3737  2.525426876575043  13.8369232187498
+  POINT  3738  2.777506896019309  15.1594754466739
+  POINT  3739  2.272346079797352  15.15939314985943
+  POINT  3740  2.019831152532347  14.71933669397711
+  POINT  3741  3.030366570726561  14.7190708982712
+  POINT  3742  2.272480678625036  14.27823797632229
+  POINT  3743  2.777875299186825  14.27795547826491
+  POINT  3744  10.93683714441736  10.68473936450384
+  POINT  3745  10.42338210640577  10.69299645121282
+  POINT  3746  10.16379499462924  11.14307136444035
+  POINT  3747  9.91091727032488  10.69833236588283
+  POINT  3748  10.41689657692929  11.58759618069605
+  POINT  3749  9.904431740848405  11.59293209536606
+  POINT  3750  8.383104263115078  9.813271926383957
+  POINT  3751  8.131409992405931  9.367205411144512
+  POINT  3752  9.398187257932385  10.70341785754419
+  POINT  3753  9.657774369708918  10.25334294431667
+  POINT  3754  8.893751225144806  9.810542586143804
+  POINT  3755  8.634397395286692  10.26115777621818
+  POINT  3756  8.886484135943755  10.70714689312742
+  POINT  3757  9.13962703655972  11.15213631469359
+  POINT  3758  9.404348514274115  9.808267818781912
+  POINT  3759  9.153055382102501  9.360381968947689
+  POINT  3760  8.872305329160442  13.38023764365699
+  POINT  3761  8.361774760572246  13.38192662649333
+  POINT  3762  8.108500687104918  12.93924814391208
+  POINT  3763  7.851722750806532  13.38397571670315
+  POINT  3764  9.129653596289845  12.93477140237956
+  POINT  3765  9.383406228579656  13.37780999233429
+  POINT  3766  8.365440776821156  12.49364881518358
+  POINT  3767  8.880975687566195  11.60022015801457
+  POINT  3768  8.623178158666493  12.04733677120861
+  POINT  3769  8.876290078715968  12.4908870097273
+  POINT  3770  9.387390978135182  12.48845935840459
+  POINT  3771  9.645780391854883  12.04101593868705
+  POINT  3772  9.392678809554825  11.59649112243135
+  POINT  3773  7.336521171883755  16.03802297080912
+  POINT  3774  6.828065241427138  16.03845128541167
+  POINT  3775  7.5918329762552  15.59662152541176
+  POINT  3776  7.845750620519943  16.03722595032059
+  POINT  3777  7.337862589465587  15.15534235318604
+  POINT  3778  5.057585641163165  12.94868558387678
+  POINT  3779  5.310107534158264  13.39084788872668
+  POINT  3780  5.817351898032172  13.38983223877548
+  POINT  3781  6.07268977213729  12.94608405296639
+  POINT  3782  6.325320010388582  13.38836776247147
+  POINT  3783  5.312210950489913  12.50443571161929
+  POINT  3784  5.820129413724779  12.50287853813417
+  POINT  3785  7.339731120788066  14.27145814743096
+  POINT  3786  7.595668707268915  13.82815216683726
+  POINT  3787  6.578161363273717  13.83088304133535
+  POINT  3788  6.833499237378835  13.38713485552626
+  POINT  3789  7.342394633801588  13.38547368425602
+  POINT  3790  0.252580463343477  23.08531079540609
+  POINT  3791  8.162767350938793e-09  23.52306095911839
+  POINT  3792  -0.2525804483660444  23.08531079452379
+  POINT  3793  0.7575089608641339  23.96190261703586
+  POINT  3794  1.010191668996723  23.52275060745893
+  POINT  3795  0.7581005854889762  23.08482908796231
+  POINT  3796  0.2525804650598689  23.96193376174162
+  POINT  3797  -0.2525804466496525  23.96193376085932
+  POINT  3798  0.5049285060517139  24.40077541877679
+  POINT  3799  -0.5055201152249069  22.64707892226741
+  POINT  3800  -0.7581005704056165  23.08482908597971
+  POINT  3801  -2.280691500226466  21.33225925503491
+  POINT  3802  -2.53596148453538  20.89273520120051
+  POINT  3803  -2.318125017725038  20.44808511706579
+  POINT  3804  -1.847863620987981  20.44808512551896
+  POINT  3805  -1.523722029333108  20.89935045509462
+  POINT  3806  5.812596363012457  16.91987591856731
+  POINT  3807  6.066345594955665  16.47969821633841
+  POINT  3808  5.052976709870697  16.47984331586753
+  POINT  3809  5.306138118529179  16.03968129951453
+  POINT  3810  3.790935938593665  22.20328485170038
+  POINT  3811  3.537066694466712  22.64267534247436
+  POINT  3812  3.788945299949968  23.08133297666114
+  POINT  3813  4.294456576555887  23.08098941943979
+  POINT  3814  5.814542622740053  18.67893193273223
+  POINT  3815  6.321208749925488  18.67923371051273
+  POINT  3816  5.56317568611094  19.11824430305507
+  POINT  3817  5.309100721439222  18.67828449587171
+  POINT  3818  5.55961311789328  17.35962041953518
+  POINT  3819  5.306832701253025  17.79918676761919
+  POINT  3820  5.306180989556889  16.91965690872165
+  POINT  3821  4.547661231803737  17.3588241803909
+  POINT  3822  4.799993464751521  16.91958781683539
+  POINT  3823  4.801296726707842  17.79849881202905
+  POINT  3824  4.295760214073866  17.79792158273044
+  POINT  3825  5.054931683523153  18.23828416995873
+  POINT  3826  4.80356474689404  18.67759654028158
+  POINT  3827  4.299173611489742  18.6763503095416
+  POINT  3828  3.290304316514962  18.67294152057774
+  POINT  3829  3.035034337010901  18.23341748971889
+  POINT  3830  3.285878391294609  17.79579279452859
+  POINT  3831  3.790936184735975  17.79671510214655
+  POINT  3832  4.04457167964008  18.2363897337847
+  POINT  3833  3.794349582151851  18.67514382895771
+  POINT  3834  10.40547659015908  22.20116479457716
+  POINT  3835  10.92128251969344  22.20090966781737
+  POINT  3836  10.14796994537765  23.52313096986383
+  POINT  3837  9.8907628324997  23.96485671831825
+  POINT  3838  10.40472019475341  23.96486720377927
+  POINT  3839  9.890900260175624  23.08230629000788
+  POINT  3840  9.378284610504384  23.96443017775849
+  POINT  3841  9.377738405713401  23.08218964573298
+  POINT  3842  9.634626082765084  22.64137545133806
+  POINT  3843  8.099972523597952  21.7604283165895
+  POINT  3844  7.844935974709012  21.32035791039074
+  POINT  3845  5.052976083273045  23.52015672445931
+  POINT  3846  5.306137433620915  23.96031879840885
+  POINT  3847  5.812969663000015  23.9607046052643
+  POINT  3848  8.610566754219654  19.11957081809886
+  POINT  3849  8.86560419797468  18.67950029477104
+  POINT  3850  8.354849270149012  18.67954721468524
+  POINT  3851  4.553342440596749  20.88364911748843
+  POINT  3852  4.813437754880869  20.4412013335515
+  POINT  3853  7.59041331172436  17.35947928465035
+  POINT  3854  7.84499397090196  16.91893659852759
+  POINT  3855  -19.25787296088819  16.44788827908155
+  POINT  3856  -19.60184782149814  16.02916106451099
+  POINT  3857  -19.1873871451938  16.90476537360675
+  POINT  3858  -19.76179636729207  16.92243533655163
+  POINT  3859  -18.75405232838112  16.85355871501342
+  POINT  3860  -17.47351228606856  13.33558852399519
+  POINT  3861  -16.99713742559343  13.37046042966367
+  POINT  3862  -17.69351481734877  13.78071241680643
+  POINT  3863  -17.67256727113895  14.23260684746697
+  POINT  3864  -17.10180880051252  14.27897349996412
+  POINT  3865  -17.52690194145971  14.67823884343126
+  POINT  3866  -18.11860795829596  14.17997776027357
+  POINT  3867  -8.872305209312021  13.38023770553157
+  POINT  3868  -8.615527284439597  13.82496527042976
+  POINT  3869  -9.383406088516729  13.37781006740056
+  POINT  3870  -3.29030430028144  18.67294152375674
+  POINT  3871  -3.794349564136366  18.67514383248151
+  POINT  3872  -4.044571659990828  18.23638973901306
+  POINT  3873  -3.790936165766305  17.79671510855067
+  POINT  3874  -4.295760192767313  17.79792158977951
+  POINT  3875  -3.035034321141562  18.23341749366453
+  POINT  3876  -4.801296702384416  17.79849882003976
+  POINT  3877  -4.547661208159893  17.35882418957737
+  POINT  3878  -5.306180959737993  16.91965692151171
+  POINT  3879  -5.55961308673966  17.35962043087595
+  POINT  3880  -5.306832673423715  17.79918677637247
+  POINT  3881  -4.799993438895712  16.91958782835436
+  POINT  3882  -4.294456929278608  16.9190105980941
+  POINT  3883  -2.272576526046017  16.03887380690432
+  POINT  3884  -2.777737341802472  16.0389561054949
+  POINT  3885  -2.524923853949907  15.59959837248141
+  POINT  3886  -1.009801502771103  14.71943838905496
+  POINT  3887  -1.262295091084871  15.15932946921788
+  POINT  3888  -1.767248108404131  15.15945961891492
+  POINT  3889  -1.514810020874192  15.59938592419379
+  POINT  3890  -3.788433924444957  15.15930010017922
+  POINT  3891  -3.282944342657759  15.15927612630229
+  POINT  3892  -3.53557425149356  15.59970464494893
+  POINT  3893  -7.339731052101191  14.27145818376952
+  POINT  3894  -7.595668629168774  13.82815220873106
+  POINT  3895  -7.849059155801069  14.26996022049591
+  POINT  3896  -7.342394561194965  13.3854737272261
+  POINT  3897  -7.084485066391316  14.7143115191922
+  POINT  3898  -6.829226012364133  15.15638770751324
+  POINT  3899  -6.321312708705147  15.15701776202244
+  POINT  3900  -6.068350603934552  14.71617011524867
+  POINT  3901  -6.322915322587308  14.27373641192795
+  POINT  3902  -5.815417372472714  14.27454968432659
+  POINT  3903  -6.831094539759021  14.27250350742734
+  POINT  3904  -6.578161308297183  13.83088307650527
+  POINT  3905  -8.866490968805563  16.03593620740154
+  POINT  3906  -8.611811380443392  15.59504271031803
+  POINT  3907  -9.378288849377203  16.03556985539014
+  POINT  3908  -9.6350393648364  15.59383445480634
+  POINT  3909  -9.379158137016026  15.15149576728833
+  POINT  3910  -9.89163708740748  15.1510693400336
+  POINT  3911  -15.8358398935749  10.22173585196274
+  POINT  3912  -15.57327200390477  9.802417738572654
+  POINT  3913  -15.56201444033999  10.67148502492812
+  POINT  3914  -15.03253570609934  9.806583202382573
+  POINT  3915  -14.77952317432621  10.24189580191657
+  POINT  3916  9.425787409990559  8.000472836505047
+  POINT  3917  9.674058285545414  8.456902013814751
+  POINT  3918  8.913238706756516  8.008641634917387
+  POINT  3919  9.413783458670364  8.907219666364485
+  POINT  3920  8.903186169541055  8.909494433726376
+  POINT  3921  8.934155614066498  6.185727604037459
+  POINT  3922  9.185518368839453  5.729430618608695
+  POINT  3923  8.426271183269629  5.29029227071893
+  POINT  3924  8.171917178443586  5.749542014684138
+  POINT  3925  7.909982677729378  5.316726387461308
+  POINT  3926  7.65715073777133  4.866671726394044
+  POINT  3927  7.405022267322629  4.401754646811489
+  POINT  3928  7.912208212106719  4.392559563913546
+  POINT  3929  7.402796732945287  5.325921470359251
+  POINT  3930  8.404914415163201  4.401060889634398
+  POINT  3931  8.152785944714498  3.936143810051844
+  POINT  3932  8.395983975566867  3.439639257034445
+  POINT  3933  7.903277772510386  3.431137931313593
+  POINT  3934  8.859661009169432  3.521793227546019
+  POINT  3935  9.192238274352787  3.866734673314474
+  POINT  3936  4.268076247259387  3.565481647629336
+  POINT  3937  4.016822549239988  3.997412240786614
+  POINT  3938  3.742622838171702  3.563061153758769
+  POINT  3939  7.792705379504119  2.62557788257827
+  POINT  3940  7.793203652127295  2.025645271244315
+  POINT  3941  7.321623681205077  1.829570466086152
+  POINT  3942  7.678396273741249  1.532671260083118
+  POINT  3943  -9.67405808643629  8.456902308458442
+  POINT  3944  -9.413783282784191  8.907219840486656
+  POINT  3945  -9.425787263000267  8.000473059513219
+  POINT  3946  -9.404348331955575  9.808267994664813
+  POINT  3947  -9.657774187537704  10.2533431194428
+  POINT  3948  -9.398187091428191  10.70341798750657
+  POINT  3949  -8.886483995011314  10.70714699997187
+  POINT  3950  -8.634397277109187  10.26115787334679
+  POINT  3951  -8.375837072421056  10.70987630924256
+  POINT  3952  -7.859855983182076  11.60547875629908
+  POINT  3953  -8.117653499839879  11.15836215444448
+  POINT  3954  -7.865566781937751  10.71237302781939
+  POINT  3955  -7.402798620889166  5.325921535058544
+  POINT  3956  -7.909984549202172  5.316726131062188
+  POINT  3957  -7.91137279652743  6.215871164881401
+  POINT  3958  -7.395668297048518  6.230569439935667
+  POINT  3959  -7.651411014573558  6.670464686753046
+  POINT  3960  -7.127776753374082  7.579721889218547
+  POINT  3961  -7.388870581544597  7.128261877982224
+  POINT  3962  -6.874612686924131  7.136622973043634
+  POINT  3963  -7.904575081023509  7.113563602927958
+  POINT  3964  -2.775002874658712  8.037874849929569
+  POINT  3965  -2.523911656853837  8.48803806266702
+  POINT  3966  -2.748276461706778  5.323514342820022
+  POINT  3967  -2.490019549071636  4.855243070040132
+  POINT  3968  -2.734687480700977  4.405830000443286
+  POINT  3969  -2.221684119951277  3.449608486395616
+  POINT  3970  -1.723323855016578  3.419581979977251
+  POINT  3971  -1.475257769780243  2.932460366680298
+  POINT  3972  -1.727946415087521  2.471297653398232
+  POINT  3973  -2.223574359144033  2.516811469853332
+  POINT  3974  -3.221425371391462  2.620248809612628
+  POINT  3975  -3.480916638529793  3.091370153630558
+  POINT  3976  -2.468657119838987  3.007906638484771
+  POINT  3977  -2.720982349242926  3.493309929661852
+  POINT  3978  -2.722872588435682  2.560512913119568
+  POINT  3979  -5.842877759869626  2.614418369465591
+  POINT  3980  -6.061704181617179  2.125899992841759
+  POINT  3981  -5.97038887687998  1.577324987897494
+  POINT  3982  -5.06120498229036  2.210552055587216
+  POINT  3983  -5.314757330560761  1.807879325032759
+  POINT  3984  -5.55603059107262  1.449150510867695
+  POINT  3985  -5.910338424284915  0.8932498958018659
+  POINT  3986  -5.818442258077686  3.559384883546551
+  POINT  3987  -6.081231365982387  4.02806702834004
+  POINT  3988  -5.831279019722861  4.472379399615662
+  POINT  3989  -5.313338782452499  4.466227623547525
+  POINT  3990  -5.576017782319205  4.91994190717009
+  POINT  3991  -6.359431968524975  7.142146372318731
+  POINT  3992  -6.620525796695491  6.690686361082408
+  POINT  3993  1.233115817299789  35.66363567026767
+  POINT  3994  1.486808643266108  35.18419627849168
+  POINT  3995  0.4944716807918905  35.20892209325812
+  POINT  3996  0.7430350528777356  34.73871437587108
+  POINT  3997  1.24166914315593  34.72964380187346
+  POINT  3998  1.723322487966932  36.58041769429607
+  POINT  3999  1.47525558328076  37.06753926104606
+  POINT  4000  1.229221132046703  36.61216257531929
+  POINT  4001  1.727943080105888  37.52870184484969
+  POINT  4002  2.223571255475589  37.48318802553167
+  POINT  4003  2.221683046657149  36.55039137343753
+  POINT  4004  -6.12911124076021e-07  36.15975594917647
+  POINT  4005  0.2456022332246583  35.68768488038043
+  POINT  4006  0.7400741502994709  35.68099311908834
+  POINT  4007  0.9842463697325569  36.14239845738996
+  POINT  4008  0.7361794650463853  36.62952002413996
+  POINT  4009  0.2456016905429583  36.6413100607267
+  POINT  4010  -3.793978809704677  29.27114346488373
+  POINT  4011  -3.286497753816385  29.27075839834291
+  POINT  4012  -4.047052767131356  28.82584690724009
+  POINT  4013  -4.301274302070375  29.27204649795666
+  POINT  4014  -1.010043015772705  27.0468834923308
+  POINT  4015  -1.262608764623798  27.49047222490107
+  POINT  4016  -1.767930085310411  27.49060023494886
+  POINT  4017  -1.515420458762666  27.93408208316265
+  POINT  4018  0.2524349327400771  25.72146687392503
+  POINT  4019  0.7573603149878654  25.72151113216611
+  POINT  4020  1.009801512786854  25.28056167560054
+  POINT  4021  0.7573634246136738  24.84063535787972
+  POINT  4022  0.2524349288094089  24.84066650258547
+  POINT  4023  2.777737238018064  23.96104396031738
+  POINT  4024  2.524923774235408  24.40040170273027
+  POINT  4025  2.777506791782362  24.84052463209574
+  POINT  4026  3.535574059218396  24.40029545953312
+  POINT  4027  3.282925370480001  23.96061617471239
+  POINT  4028  3.282944215957301  24.84072399033624
+  POINT  4029  12.20022707000518  35.34109407649751
+  POINT  4030  11.70510822545789  35.04850824368519
+  POINT  4031  11.91055210130007  34.50393744856109
+  POINT  4032  12.60489935123083  35.00986841165744
+  POINT  4033  12.66773748228985  35.47670596579247
+  POINT  4034  8.893751753942059  30.18945889408129
+  POINT  4035  9.153056290168134  30.63961947961057
+  POINT  4036  8.131410636714342  30.63279563621241
+  POINT  4037  8.383104759045018  30.18672926891533
+  POINT  4038  8.634397687045755  29.73884369142445
+  POINT  4039  12.58774522600974  32.92273845990162
+  POINT  4040  12.88263711150898  33.38136361259253
+  POINT  4041  11.99490300572006  33.72244417282177
+  POINT  4042  11.76196217222862  33.30918283037465
+  POINT  4043  10.44503879622377  31.98862289521601
+  POINT  4044  9.935933261738526  31.99895822327177
+  POINT  4045  10.19676774154491  32.44505172349099
+  POINT  4046  10.43863927688695  31.09908378942327
+  POINT  4047  9.923929035406161  31.09221194132288
+  POINT  4048  12.04127152589021  32.88444301026691
+  POINT  4049  12.3185949442571  32.49062006753039
+  POINT  4050  11.23899726008386  32.44352050666546
+  POINT  4051  11.49281189047597  32.87706443800342
+  POINT  4052  10.95968790642227  32.8682603267732
+  POINT  4053  1.262715484017742  28.37904364136764
+  POINT  4054  1.768036798549242  28.37917166198487
+  POINT  4055  1.010161265302347  28.82419254739624
+  POINT  4056  2.021045344488098  28.82414552152322
+  POINT  4057  1.767940462475327  29.27066494618034
+  POINT  4058  1.26253538053122  29.27109444816391
+  POINT  4059  2.770029231935803  32.86450580601395
+  POINT  4060  2.513285504693407  33.32124089899702
+  POINT  4061  3.271742772836252  33.76266810178318
+  POINT  4062  3.531281879770986  33.30800649818775
+  POINT  4063  3.782262295813676  33.75645595947597
+  POINT  4064  3.278351258691227  32.86027907795702
+  POINT  4065  2.760975203039712  33.77191946209709
+  POINT  4066  3.011955619082402  34.2203689233853
+  POINT  4067  3.24336847489558  35.56418088173734
+  POINT  4068  3.51170389869557  35.11435420516057
+  POINT  4069  3.259044827222107  34.66723526388904
+  POINT  4070  2.748277257425567  34.67648662420295
+  POINT  4071  3.775382260352405  34.65823650434292
+  POINT  4072  2.490020077115392  35.144757594862
+  POINT  4073  2.734687809839291  35.59417066577944
+  POINT  4074  2.982689819169599  36.0349985828101
+  POINT  4075  5.320196103324097  34.6359031807579
+  POINT  4076  5.838135302791581  34.62975089654809
+  POINT  4077  5.843829338818099  33.7446915717945
+  POINT  4078  5.325945325800963  33.74013958043911
+  POINT  4079  6.104986270073042  34.19646204120262
+  POINT  4080  6.366501732041227  33.75556204313139
+  POINT  4081  7.355184469361421  29.28425732715628
+  POINT  4082  7.097783537365648  28.83658193947715
+  POINT  4083  7.865566929755092  29.28762815642849
+  POINT  4084  7.350228293730351  28.39242759965563
+  POINT  4085  19.44766038638703  17.77297915226804
+  POINT  4086  19.25342567711544  17.32881418384076
+  POINT  4087  19.87861805246748  17.79987630487601
+  POINT  4088  19.7617964066728  16.92243558592404
+  POINT  4089  18.23422309592939  19.09467776603307
+  POINT  4090  17.94988909858838  19.54747247390121
+  POINT  4091  17.87676920727169  18.65944226175127
+  POINT  4092  17.47644822823684  19.54717784596157
+  POINT  4093  17.34509995115183  18.66931480712425
+  POINT  4094  17.09404309109673  19.09688211341927
+  POINT  4095  14.28781180230033  14.72466403349399
+  POINT  4096  14.01051623503285  14.27484065136018
+  POINT  4097  14.53345889310514  14.28002636702044
+  POINT  4098  14.02979336632444  15.1647422550637
+  POINT  4099  9.380906978001171  14.26600341154953
+  POINT  4100  9.12438810215771  14.70980710098454
+  POINT  4101  15.04265771685345  14.28419049908406
+  POINT  4102  14.76536214958597  13.83436711695024
+  POINT  4103  15.51798377903927  13.38033526490094
+  POINT  4104  15.77563980375512  13.8415064727855
+  POINT  4105  15.57188627435891  14.28816954061234
+  POINT  4106  15.0151159829359  13.3824166393444
+  POINT  4107  14.50591715918759  13.37825250728078
+  POINT  4108  14.32789030772291  18.24225940568398
+  POINT  4109  14.06264433374127  18.67628429324169
+  POINT  4110  14.59588283104642  18.67648157009492
+  POINT  4111  14.05735903828086  17.80654303626809
+  POINT  4112  15.97007787533187  19.09864616168911
+  POINT  4113  15.55510702426619  19.54892674781743
+  POINT  4114  15.67915324486533  18.67142187799671
+  POINT  4115  15.13772625968102  18.6705433487333
+  POINT  4116  14.87248028569938  19.104568236291
+  POINT  4117  15.08631080741999  19.54931075553736
+  POINT  4118  16.40287455364234  16.49110362272822
+  POINT  4119  16.17789332204421  16.93847666340548
+  POINT  4120  15.63614396207806  16.93957763712053
+  POINT  4121  16.14372364991884  16.05344993095792
+  POINT  4122  15.61382912052633  16.05886889307093
+  POINT  4123  15.35525573754169  16.49958700177147
+  POINT  4124  15.52045255096381  27.53143212489101
+  POINT  4125  15.7870223740392  27.99457973843145
+  POINT  4126  15.02942399137993  28.42914752056209
+  POINT  4127  14.76711254324515  27.97953196141813
+  POINT  4128  14.51705994325481  28.42366935023485
+  POINT  4129  14.50592923991572  26.62175677982754
+  POINT  4130  14.24625536736449  27.07313717726593
+  POINT  4131  14.50521689123425  27.52387693058424
+  POINT  4132  15.01513786829292  26.61758604679623
+  POINT  4133  15.25855689895291  27.07577709405712
+  POINT  4134  15.01758093935937  27.52935510091147
+  POINT  4135  12.9694811665887  12.47903060881283
+  POINT  4136  12.45717370465674  12.47876009769995
+  POINT  4137  14.50520651711792  12.4761250777077
+  POINT  4138  14.7671040812539  12.02046720497029
+  POINT  4139  13.74078013085571  12.02829134523479
+  POINT  4140  13.9984165723697  11.58047790445619
+  POINT  4141  14.51705381061231  11.57633069980357
+  POINT  4142  11.4484074904361  10.67917014008009
+  POINT  4143  11.95934178620452  10.67017466538644
+  POINT  4144  12.20772768780863  11.12870134727384
+  POINT  4145  11.18783017672887  11.13216622534658
+  POINT  4146  11.9508019094484  11.57834527171309
+  POINT  4147  -6.319776468193496  23.08033815128008
+  POINT  4148  -6.066344452733028  23.52030179118255
+  POINT  4149  -6.827400621252306  23.08040135673631
+  POINT  4150  -5.054931155474743  21.76171557577203
+  POINT  4151  -4.801296232783984  22.20150105449617
+  POINT  4152  -4.299173338283442  21.32364952911328
+  POINT  4153  -4.044571390294786  21.76361015107778
+  POINT  4154  -4.803564411703622  21.32240320854091
+  POINT  4155  -9.890817652390373  18.67925530533506
+  POINT  4156  -10.40541205324793  18.6792215753713
+  POINT  4157  -10.66370535213654  19.1191138197801
+  POINT  4158  -10.92145974258163  18.67904850987438
+  POINT  4159  -10.40367095930107  19.55964298171444
+  POINT  4160  -9.890168540567483  19.55964268050665
+  POINT  4161  -9.634489634605369  19.11940539677126
+  POINT  4162  -10.40452722022296  15.15066274552778
+  POINT  4163  -10.91910259518919  15.1508331382961
+  POINT  4164  -11.1763986356346  14.70838986864997
+  POINT  4165  -10.91783739771569  14.26368314942298
+  POINT  4166  -10.14864599240259  14.70832405800977
+  POINT  4167  -12.73019529136231  15.59870134525367
+  POINT  4168  -12.98766621355665  15.15683558657137
+  POINT  4169  -15.04265746253503  14.28419090907873
+  POINT  4170  -14.53345861723851  14.28002669541752
+  POINT  4171  -17.78489628918051  15.09030875190717
+  POINT  4172  -17.98400083785333  15.51100038825157
+  POINT  4173  -18.29676496075896  15.05256382727852
+  POINT  4174  -17.21413781855408  15.13667540440432
+  POINT  4175  -18.37155338762809  16.42393112019951
+  POINT  4176  -18.3010675719337  16.8808082147247
+  POINT  4177  -18.20721907030622  15.96221804176685
+  POINT  4178  -17.69535039872778  15.99996296639551
+  POINT  4179  -11.18084802879951  18.23937671254223
+  POINT  4180  -11.43914132768812  18.67926895695104
+  POINT  4181  -11.43896743540164  17.79930467995242
+  POINT  4182  -12.99576621508222  19.55819858351203
+  POINT  4183  -13.5100976113933  19.55820320578183
+  POINT  4184  -14.85535659566817  17.374607928817
+  POINT  4185  -14.59059730877303  17.80674048573657
+  POINT  4186  -15.12588788049639  17.81032428898499
+  POINT  4187  -14.57446835462891  16.93461729113196
+  POINT  4188  -15.10975892635227  16.93820109438039
+  POINT  4189  -16.50015666545286  20.45264189053479
+  POINT  4190  -16.08514514186547  20.00088643669584
+  POINT  4191  -16.11090178453964  20.45097892630424
+  POINT  4192  -16.88252114147691  20.00090158129587
+  POINT  4193  -16.50011596473811  19.5506058885838
+  POINT  4194  -18.66035566784347  24.06457908884339
+  POINT  4195  -18.99865817957391  24.48245948801812
+  POINT  4196  -18.88584837729288  24.93009825639208
+  POINT  4197  -19.39363960589392  24.88740656466259
+  POINT  4198  -17.82901974500803  22.20723193084345
+  POINT  4199  -17.29751704354181  22.19792307995124
+  POINT  4200  -18.12519085452415  22.66390362771543
+  POINT  4201  -17.42146697630052  23.53377902746666
+  POINT  4202  -17.69547182462984  24.00000320447274
+  POINT  4203  -17.19821562645829  23.98500536439521
+  POINT  4204  -18.2073784758447  24.03761507800751
+  POINT  4205  -17.98412712600248  24.48884141493606
+  POINT  4206  -18.37170036647084  23.57574087838007
+  POINT  4207  -17.74281660287124  23.09380582796382
+  POINT  4208  -17.24556040469969  23.0788079878863
+  POINT  4209  -18.30109742612498  23.11887466729579
+  POINT  4210  -12.74043249554734  22.63704750337856
+  POINT  4211  -12.47951737358623  22.1991443855027
+  POINT  4212  -11.95797425376473  22.19971901190847
+  POINT  4213  -11.69840700784104  22.64001300642548
+  POINT  4214  -11.95612881567687  23.08041184382327
+  POINT  4215  -13.79175978718601  22.63195086063527
+  POINT  4216  -14.05739164572269  22.19336401942717
+  POINT  4217  -16.69915170518863  23.07149332083817
+  POINT  4218  -16.17786098319811  23.06167189306724
+  POINT  4219  -16.40292005613846  23.50895975961821
+  POINT  4220  -16.20887664909252  22.19021698069621
+  POINT  4221  -16.75110834403075  22.1906084129031
+  POINT  4222  -17.02050133175934  22.63152012133533
+  POINT  4223  -13.99649914138446  26.62119352777317
+  POINT  4224  -14.50592910840412  26.62175634401045
+  POINT  4225  -14.76538162860431  26.16564234700188
+  POINT  4226  -14.53346806546978  25.71999620058877
+  POINT  4227  -14.0105122342672  25.72518479387579
+  POINT  4228  -15.04267671628401  25.71582538537957
+  POINT  4229  -16.66503651825777  23.95642639357603
+  POINT  4230  -16.14374579626725  23.9466049658051
+  POINT  4231  -16.93904136658709  24.42265057058211
+  POINT  4232  -16.68103287029956  24.83472097500758
+  POINT  4233  -17.21421197850009  24.86329994582677
+  POINT  4234  -9.637659354432278  26.17823809135695
+  POINT  4235  -9.895007838390011  26.62370467699503
+  POINT  4236  -10.40670361026193  26.62599835231532
+  POINT  4237  -10.66169890492968  26.18015313981581
+  POINT  4238  -10.40539715902982  25.73591795079784
+  POINT  4239  -9.892507684713129  25.73551085015163
+  POINT  4240  -3.538866270674407  27.93563837319875
+  POINT  4241  -3.791445061003568  27.4924372688973
+  POINT  4242  -3.284985242746421  27.49173667393181
+  POINT  4243  -3.792541681848606  28.3806414211657
+  POINT  4244  -4.299837174214305  28.38154445423863
+  POINT  4245  -3.286081863591458  28.37994082620021
+  POINT  4246  -6.578160439640206  26.16911757665643
+  POINT  4247  -6.3253193653182  26.61163279891804
+  POINT  4248  -5.817351397064218  26.61016819247553
+  POINT  4249  -6.322914449413139  25.72626408985695
+  POINT  4250  -6.831093433545865  25.72749714888835
+  POINT  4251  -5.815416739071694  25.72545072182048
+  POINT  4252  -6.068349732977355  25.2838302940524
+  POINT  4253  -8.103068545520017  25.2879261001149
+  POINT  4254  -7.847089733293389  24.84545529905903
+  POINT  4255  -7.33972959193747  25.72854262281094
+  POINT  4256  -7.084483601710403  25.28568913601146
+  POINT  4257  -7.84905736666726  25.73004082824404
+  POINT  4258  -7.337860774808862  24.84465820022065
+  POINT  4259  -6.829224616417257  24.84361272629806
+  POINT  4260  -7.591830748000244  24.40337888934564
+  POINT  4261  -10.95968825756436  32.86825866172835
+  POINT  4262  -11.2389973762048  32.44351916990193
+  POINT  4263  -10.96516313120963  31.99722932793554
+  POINT  4264  -10.45710394986915  32.90333376542937
+  POINT  4265  -10.19676760818201  32.44505103256093
+  POINT  4266  -10.4450386107414  31.98862213265781
+  POINT  4267  -5.839993028780057  31.9585713890503
+  POINT  4268  -5.58222505575568  31.50997899536313
+  POINT  4269  -6.353715906405032  31.96208637743266
+  POINT  4270  -9.890881409539208  22.20113221196177
+  POINT  4271  -9.377719567935678  22.20101557304443
+  POINT  4272  -9.890817945887456  21.32074066481798
+  POINT  4273  -9.377648390967682  21.32062266583164
+  POINT  4274  -10.14857006043265  21.76080491471691
+  POINT  4275  -9.121929625682005  21.76064670155081
+  POINT  4276  -3.989917438513398  37.75936920944303
+  POINT  4277  -4.253220144914879  38.17942950972456
+  POINT  4278  -5.0612047044748  37.78945190920187
+  POINT  4279  -4.788965345375917  37.30790232371594
+  POINT  4280  -5.345230853006697  37.3897257540357
+  POINT  4281  -3.511703891126289  35.11435281720901
+  POINT  4282  -3.775382111584034  34.65823488537108
+  POINT  4283  -4.288463783602202  34.65011427144418
+  POINT  4284  -4.035804655693716  34.20299575272048
+  POINT  4285  -13.43620984438418  34.81446134683805
+  POINT  4286  -13.29869599960812  34.31160156237819
+  POINT  4287  -12.93463213128416  34.64179503997145
+  POINT  4288  -13.62553600610368  33.9629776498918
+  POINT  4289  -14.13908291075123  34.14518767789303
+  POINT  4290  -12.60490716900593  35.00986141752851
+  POINT  4291  -12.20023572325958  35.34108684648683
+  POINT  4292  -12.66774772099321  35.47669756860905
+  POINT  4293  -11.70511437947869  35.04850274706365
+  POINT  4294  -11.9105566427679  34.50393254228281
+  POINT  4295  -12.47145116324818  34.51147573062274
+  POINT  4296  -9.806918774248189  36.80166842930682
+  POINT  4297  -10.26857635288579  37.16264372426561
+  POINT  4298  -10.1979850569437  36.56768967568621
+  POINT  4299  -1.515143968311342  29.71762612467332
+  POINT  4300  -1.767218169152578  30.16613538008133
+  POINT  4301  -2.273105814749252  30.16491121650845
+  POINT  4302  -2.526893645558062  29.71688475828849
+  POINT  4303  -4.295343851645418  33.74833423033055
+  POINT  4304  -3.78226217962725  33.75645484425745
+  POINT  4305  -3.531281742859955  33.30800564331628
+  POINT  4306  -3.788870710138221  32.85406611529395
+  POINT  4307  -4.299971286819369  32.85149198399459
+  POINT  4308  -10.95895536230713  35.58920341710635
+  POINT  4309  -10.41172580433067  35.55794744193341
+  POINT  4310  -11.08356921006429  36.15576819899469
+  POINT  4311  -10.1942008448515  36.08605690473453
+  POINT  4312  -9.956518482555364  35.68306089840274
+  POINT  4313  -10.65319237871901  36.44257621921687
+  POINT  4314  -11.0910623698248  36.64296654514917
+  POINT  4315  -13.7593285339414  31.59910572962469
+  POINT  4316  -13.97378905574307  31.09637586275941
+  POINT  4317  -14.49013543528747  31.07749003746751
+  POINT  4318  -14.0764019646777  32.09309626417902
+  POINT  4319  -14.48389267802026  31.91422357801393
+  POINT  4320  -14.75329172047915  31.4892516249232
+  POINT  4321  -5.587461461429323  33.29923896261564
+  POINT  4322  -5.325946062699384  33.7401385358841
+  POINT  4323  -5.327825510476393  32.84978726680519
+  POINT  4324  -4.809231792482727  33.74478093752646
+  POINT  4325  -5.065600597928541  34.19023273715123
+  POINT  4326  -4.555689316416261  33.29824002906342
+  POINT  4327  -4.813859227656678  32.8479386911905
+  POINT  4328  5.823064971458006  28.38586497473401
+  POINT  4329  5.315146572158927  28.38430769994047
+  POINT  4330  5.062470610533198  28.82834397135218
+  POINT  4331  6.079388428607562  28.83197977936755
+  POINT  4332  5.317804360302774  29.27479479926754
+  POINT  4333  5.827084127424216  29.27699957992611
+  POINT  4334  10.41689568078359  28.4124072611171
+  POINT  4335  10.66929742196129  27.96611222514022
+  POINT  4336  9.904430854792075  28.4070707901445
+  POINT  4337  10.41083792953915  27.51739638025921
+  POINT  4338  8.886484172763202  29.29285479615131
+  POINT  4339  8.37583717786616  29.29012517098535
+  POINT  4340  9.139626727505856  28.8478657394769
+  POINT  4341  8.117653415472539  28.84163926115534
+  POINT  4342  11.95092859671319  24.8475539406863
+  POINT  4343  12.46807375787325  24.84583394788076
+  POINT  4344  12.20840003869946  25.28942203987447
+  POINT  4345  11.95272288103627  23.96287269629527
+  POINT  4346  12.47198579068075  23.9610098082623
+  POINT  4347  12.73018467318101  24.40129625485699
+  POINT  4348  11.43575282852112  23.96401601812759
+  POINT  4349  10.91929475924401  23.96469697384104
+  POINT  4350  11.43395854419803  24.84869726251862
+  POINT  4351  10.91909661344623  24.84916901000663
+  POINT  4352  11.69363226337182  24.40510917052491
+  POINT  4353  10.66208764636606  24.40642272229546
+  POINT  4354  12.45674415720379  26.62593764544495
+  POINT  4355  12.71561902895919  26.17761365870297
+  POINT  4356  12.46344625167966  25.73349620934157
+  POINT  4357  11.9463010905196  25.73521620214711
+  POINT  4358  11.68774091931249  26.17992315964508
+  POINT  4359  11.94436146317965  26.6262558892628
+  POINT  4360  12.19975831688364  27.07290316309354
+  POINT  4361  11.70835016186513  29.77725626131508
+  POINT  4362  11.44840780891525  29.32083443761827
+  POINT  4363  10.94524480188349  30.2119493620846
+  POINT  4364  10.68396014223092  29.76000284437696
+  POINT  4365  11.4612799501046  30.22519211862191
+  POINT  4366  11.20910938557762  30.66888094038705
+  POINT  4367  10.9368374049108  29.31526434275312
+  POINT  4368  11.95080093219896  28.42166108213997
+  POINT  4369  12.4591287934299  28.41955637961497
+  POINT  4370  12.71451082664457  27.96964269203738
+  POINT  4371  12.97143800709656  28.41928524228948
+  POINT  4372  11.69163226937222  27.96979595129795
+  POINT  4373  12.45717131194284  27.52124937431928
+  POINT  4374  11.9447886179187  27.52156761813713
+  POINT  4375  15.29885200343264  28.8835193357322
+  POINT  4376  15.56202156575395  29.32850886335364
+  POINT  4377  15.04254095371091  29.31827443700025
+  POINT  4378  16.0564503860919  28.44895155360157
+  POINT  4379  16.33477400183093  28.91218754051921
+  POINT  4380  15.54890460342297  28.43938194691547
+  POINT  4381  16.09215770029102  29.34350152581874
+  POINT  4382  12.72223555131803  29.77728149733855
+  POINT  4383  12.97062105959908  29.31875497111673
+  POINT  4384  12.98553664119016  30.24101141045128
+  POINT  4385  13.47593186273332  30.21482288295318
+  POINT  4386  14.77952748380703  29.75810228782938
+  POINT  4387  14.50635713461083  30.18825186751686
+  POINT  4388  14.51635792148571  29.31311276020795
+  POINT  4389  13.9900110158661  30.20713768228853
+  POINT  4390  13.73926529844905  29.76062581170174
+  POINT  4391  2.273105774761268  9.83508879984791
+  POINT  4392  2.779450317637714  9.835400651617574
+  POINT  4393  3.033012220564729  9.388247709190718
+  POINT  4394  5.582224331984559  8.490021384452593
+  POINT  4395  5.324236755485918  8.938715200324722
+  POINT  4396  4.303205470450614  9.835452415437004
+  POINT  4397  4.811613166163307  9.834298227553571
+  POINT  4398  4.049286364268548  9.3886844889632
+  POINT  4399  5.068073565684609  9.386690434889857
+  POINT  4400  4.814373978828597  8.940272488625666
+  POINT  4401  2.221682434110464  3.449608482318896
+  POINT  4402  1.723322054663639  3.41958212581723
+  POINT  4403  1.475255227755129  2.932460514091849
+  POINT  4404  1.727942742988692  2.471297861599172
+  POINT  4405  2.223570867244001  2.516811617236392
+  POINT  4406  3.247664549616101  1.691005979661493
+  POINT  4407  3.738193462327802  1.768828689718033
+  POINT  4408  2.976338300237787  2.129153441474481
+  POINT  4409  3.989913465089363  2.240629487564227
+  POINT  4410  3.734383925154549  2.66000978424141
+  POINT  4411  4.249406076125915  2.711750263924309
+  POINT  4412  -0.2525804527561534  16.03806627400728
+  POINT  4413  -0.7575089596573991  16.03809742300865
+  POINT  4414  8.162773457165429e-09  16.47693907063823
+  POINT  4415  0.5055201424216942  17.35292109533307
+  POINT  4416  0.2530784214946227  17.78947522331019
+  POINT  4417  0.2525804694500266  16.91468922909349
+  POINT  4418  -0.2525804544726128  16.91468922997582
+  POINT  4419  -0.2530784086493366  17.78947522356133
+  POINT  4420  -0.5055201286865491  17.35292109643341
+  POINT  4421  -0.7581005899738023  16.91517093797816
+  POINT  4422  10.92866218369657  11.58403101835576
+  POINT  4423  10.66929892991574  12.03389174928147
+  POINT  4424  10.92260560930413  12.47904214844759
+  POINT  4425  11.44023252971531  11.57846179393201
+  POINT  4426  11.6916339164161  12.03021006472227
+  POINT  4427  6.829226066792335  15.15638767985543
+  POINT  4428  7.08448512863891  14.71431148714117
+  POINT  4429  6.32291537112456  14.27373638104556
+  POINT  4430  6.068350648601582  14.71617008807552
+  POINT  4431  6.831094598114815  14.27250347410035
+  POINT  4432  6.574690216144999  15.59804860267928
+  POINT  4433  6.320151929953125  16.03908134219066
+  POINT  4434  5.812970569673526  16.03929553360603
+  POINT  4435  5.559944453526639  15.59906442536678
+  POINT  4436  5.813814797954246  15.15783101089938
+  POINT  4437  6.321312755318322  15.15701773663442
+  POINT  4438  -1.775181001650297  21.33393361507919
+  POINT  4439  -1.267840951818172  21.33711381294345
+  POINT  4440  -2.024810422711531  21.77002261288375
+  POINT  4441  -0.7585985253342913  22.21004308218826
+  POINT  4442  -0.2530784032947191  22.21052479073235
+  POINT  4443  -0.25307840396708  21.33774656408433
+  POINT  4444  6.030698440628868e-09  21.77348895090434
+  POINT  4445  -0.761269396452543  21.33800980180604
+  POINT  4446  -1.012728368769732  21.77259296179061
+  POINT  4447  -1.26517008069992  22.20914709332568
+  POINT  4448  6.57552905270612  19.11917837703191
+  POINT  4449  6.830512439734651  19.55973226747113
+  POINT  4450  6.323600974440302  19.55944563035479
+  POINT  4451  7.337224191221686  19.55973210309189
+  POINT  4452  7.085296112955868  19.99999935641476
+  POINT  4453  7.591126172197229  19.11954137608066
+  POINT  4454  7.845909845418445  19.55980846502429
+  POINT  4455  6.828120215219838  18.67952034762907
+  POINT  4456  5.819524031753277  19.55944573980127
+  POINT  4457  6.074507418781808  19.99999963024048
+  POINT  4458  5.819523813334327  20.44055367013701
+  POINT  4459  6.323600756021351  20.44055356069054
+  POINT  4460  5.314082130452446  19.55879830294076
+  POINT  4461  5.069786234540341  19.99999980475538
+  POINT  4462  5.314081996435311  20.44120126848308
+  POINT  4463  5.563175333674854  20.88175519893314
+  POINT  4464  8.866487420657002  23.96406405540996
+  POINT  4465  8.355738994225081  23.96328213075802
+  POINT  4466  8.100427383778017  23.52188039085872
+  POINT  4467  9.122215393276559  23.52275436205428
+  POINT  4468  8.86594121586602  23.08182352338446
+  POINT  4469  11.18084976696353  21.76061566877308
+  POINT  4470  11.43896704356612  22.20068784304909
+  POINT  4471  11.95797441386322  22.1997190736917
+  POINT  4472  11.9588087557341  21.32105244930146
+  POINT  4473  12.22007742542399  21.75981922903992
+  POINT  4474  10.148570164294  21.76080494256901
+  POINT  4475  9.890881511362227  22.2011322436048
+  POINT  4476  9.377719656900005  22.20101559932991
+  POINT  4477  9.377648474444069  21.3206226826241
+  POINT  4478  9.121929706236603  21.76064672176964
+  POINT  4479  8.865674277639464  22.2008899295029
+  POINT  4480  7.336250313716918  21.32043468385277
+  POINT  4481  7.591125568206087  20.88045701300713
+  POINT  4482  7.337223885828448  20.44026648925234
+  POINT  4483  7.845909546820542  20.44018971579031
+  POINT  4484  6.830512134341413  20.44026665363158
+  POINT  4485  6.575528528893932  20.88082069352811
+  POINT  4486  4.547660785761197  22.64117575790155
+  POINT  4487  4.799992952164152  23.08041215768531
+  POINT  4488  5.306180292478354  23.08034306292107
+  POINT  4489  8.865707267923504  19.55976133923551
+  POINT  4490  8.354952340097839  19.55980825914972
+  POINT  4491  8.865707358596341  20.44023587696896
+  POINT  4492  8.354952041499935  20.44018950991573
+  POINT  4493  9.121386178165395  19.99999862805303
+  POINT  4494  9.377000682960047  20.44023572473563
+  POINT  4495  9.37700059228721  19.55976118700218
+  POINT  4496  8.101050359122295  19.99999898616094
+  POINT  4497  -18.88575813755943  15.0697268260569
+  POINT  4498  -19.39362771734272  15.11254628586869
+  POINT  4499  -18.68665358888661  14.6490351897125
+  POINT  4500  -15.77563967202531  13.84150710457371
+  POINT  4501  -16.01906260749091  13.38331127087525
+  POINT  4502  -16.51175963280237  13.37603091203635
+  POINT  4503  -16.76209633740071  13.83891198637251
+  POINT  4504  -16.61643100772146  14.28454398233681
+  POINT  4505  -3.285878374189513  17.79579280002091
+  POINT  4506  -3.537066906965997  17.35732465078735
+  POINT  4507  -2.781165062341254  17.79402703590121
+  POINT  4508  -2.272346057716946  15.15939316355719
+  POINT  4509  -2.777506873473401  15.15947546214778
+  POINT  4510  -2.019831127927625  14.71933670858128
+  POINT  4511  -3.030366546424797  14.71907091737807
+  POINT  4512  -4.29435723120281  15.1589385317425
+  POINT  4513  -4.800381300429374  15.1587993272791
+  POINT  4514  -4.041727322367009  14.71851001309586
+  POINT  4515  -5.05425164147241  14.71756591615323
+  POINT  4516  -4.295101030996014  14.27689248118367
+  POINT  4517  -3.789177724238159  14.27725404962039
+  POINT  4518  -8.103070844109666  14.7120749267257
+  POINT  4519  -8.357041227963842  15.15335409824602
+  POINT  4520  -8.867790261965396  15.15257226998905
+  POINT  4521  -8.359008421177249  14.26876895168724
+  POINT  4522  -9.124387984536476  14.70980715521631
+  POINT  4523  -8.869538972748195  14.26707997665955
+  POINT  4524  -9.380906847798823  14.26600347395883
+  POINT  4525  -15.04253548417184  10.68172301284076
+  POINT  4526  -14.51635355078331  10.68688712093244
+  POINT  4527  -14.26072851253494  11.13086143448761
+  POINT  4528  -15.29884481679709  11.11647634394399
+  POINT  4529  -15.0294160788359  11.57085075398853
+  POINT  4530  -14.51705395682312  11.57633155901834
+  POINT  4531  8.673610243951781  6.652056971493288
+  POINT  4532  8.414839055579259  7.108358885772509
+  POINT  4533  7.90457462665794  7.113563743870362
+  POINT  4534  8.152298738482797  7.566155996789455
+  POINT  4535  7.651410299100585  6.670464801650749
+  POINT  4536  7.388869982004122  7.128261912667696
+  POINT  4537  7.91137180832887  6.215871382139966
+  POINT  4538  7.395667163675052  6.2305695509373
+  POINT  4539  8.427660313869119  6.189437265397586
+  POINT  4540  8.401580829217719  8.014850918935689
+  POINT  4541  7.8913164002964  8.020055777033541
+  POINT  4542  8.65225636857012  8.462541415161475
+  POINT  4543  7.629644152233771  8.473224754720867
+  POINT  4544  7.380362061498849  8.024529832574634
+  POINT  4545  8.391528292002256  8.915703717744677
+  POINT  4546  7.880480191434996  8.920252392579611
+  POINT  4547  8.948131191765635  5.244986877960783
+  POINT  4548  8.686196691051427  4.812171250737954
+  POINT  4549  8.926774423659207  4.355755496876252
+  POINT  4550  9.445443876621251  5.251309598627719
+  POINT  4551  9.6910474270449  4.80595499243688
+  POINT  4552  9.473520550241012  4.27784503441803
+  POINT  4553  6.871912274813603  4.456666857990875
+  POINT  4554  6.343908009479829  4.48177946767831
+  POINT  4555  6.621960527653464  4.900979418979421
+  POINT  4556  7.126969749148993  3.982554695510378
+  POINT  4557  4.533432449664246  3.111476287422326
+  POINT  4558  4.788961989599059  2.692095990745143
+  POINT  4559  4.807632160732531  3.545827374450171
+  POINT  4560  6.855123306554548  1.732841382331951
+  POINT  4561  6.414612844901361  1.574488513075082
+  POINT  4562  6.765655367225731  1.179109809653417
+  POINT  4563  6.972434580994955  2.219793303106146
+  POINT  4564  -7.602701248857268  12.05219331399483
+  POINT  4565  -7.345761168813994  12.49779263543017
+  POINT  4566  -7.350228475031765  11.60757343071705
+  POINT  4567  -5.308173014700433  14.27556533336659
+  POINT  4568  -5.562737733353188  13.83313163004587
+  POINT  4569  -4.801572002352885  14.27614786187251
+  POINT  4570  -4.549022404224035  13.83489189839703
+  POINT  4571  -1.261812988480139  9.83343522240709
+  POINT  4572  -1.009092171925209  9.384112018230109
+  POINT  4573  -1.260520010065219  8.933024373220549
+  POINT  4574  -1.765500117844419  8.93523006966014
+  POINT  4575  -5.068073644725306  9.38669057972551
+  POINT  4576  -4.811613206609751  9.83429836303813
+  POINT  4577  -5.321476005364882  9.832741044573023
+  POINT  4578  -8.171918437075256  5.749541788172571
+  POINT  4579  -8.426272907275038  5.290292001170738
+  POINT  4580  -8.948133223185337  5.244987163541136
+  POINT  4581  -9.185519494225359  5.729430999154442
+  POINT  4582  -8.934156282145356  6.185727540104251
+  POINT  4583  -8.427661154600298  6.18943703498995
+  POINT  4584  -8.673610641597531  6.652056916813081
+  POINT  4585  -6.360808891330913  5.359381494985303
+  POINT  4586  -6.8888134629241  5.334268229392724
+  POINT  4587  -7.141644921037324  5.784322612398201
+  POINT  4588  -6.881683139083452  6.238916134269846
+  POINT  4589  -6.366502420684297  6.244439533544943
+  POINT  4590  -8.913238659918125  8.008641685997079
+  POINT  4591  -9.175111821561714  7.552782489790519
+  POINT  4592  -8.152298933237061  7.566155955215757
+  POINT  4593  -8.414839366266023  7.108358763986579
+  POINT  4594  -8.401580872630081  8.014850914686292
+  POINT  4595  -8.652256314068634  8.462541484408993
+  POINT  4596  -7.891316587387569  8.020055753627672
+  POINT  4597  -8.921334493811083  7.104649269100879
+  POINT  4598  0.5050496066864969  12.06607114806098
+  POINT  4599  0.2524838592694156  12.509659882908
+  POINT  4600  -0.5050495406976978  12.06607116411123
+  POINT  4601  -0.2524953099325488  11.62092225687016
+  POINT  4602  -0.7575448846733936  11.62089710913941
+  POINT  4603  0.2524953892493668  11.62092224476328
+  POINT  4604  -3.283324914400852  8.042101763472806
+  POINT  4605  -3.027617553368896  7.589434642638204
+  POINT  4606  -3.78887016301438  7.145934490043004
+  POINT  4607  -4.047040141601858  7.596235740379548
+  POINT  4608  -4.299970711505202  7.148508674241112
+  POINT  4609  -3.792218491321482  8.043753636400142
+  POINT  4610  -4.303319039812305  8.04632782059825
+  POINT  4611  -3.539603812611298  8.492193843691508
+  POINT  4612  -3.278350562976776  7.139722056960755
+  POINT  4613  -3.53128113288012  6.69199499082232
+  POINT  4614  -3.259043844909186  5.332766362072315
+  POINT  4615  -3.011954694569225  5.779632481578462
+  POINT  4616  -3.271741805307075  6.237333529285412
+  POINT  4617  -3.782261405344679  6.243545962367661
+  POINT  4618  -4.035803751858573  5.797005308049524
+  POINT  4619  -4.295343079431618  6.251666769586432
+  POINT  4620  -3.775380952945744  5.341766264901346
+  POINT  4621  -3.511702720083296  4.885648126142907
+  POINT  4622  -4.543058686584349  4.904219080036945
+  POINT  4623  -4.288462627032683  5.349887072120117
+  POINT  4624  -4.803481485497177  5.359458123185124
+  POINT  4625  -3.243367634643463  4.435820574068364
+  POINT  4626  -2.982689503297702  3.965002351197774
+  POINT  4627  -3.229662503185413  3.52330050328693
+  POINT  4628  -3.742623792584569  3.563062575166481
+  POINT  4629  -3.759704742680022  4.444820476897395
+  POINT  4630  -5.320794455696689  3.555246287829873
+  POINT  4631  -5.570636693918219  3.095966055383329
+  POINT  4632  -5.345229957488629  2.610279773748913
+  POINT  4633  -4.788963916338954  2.692099741504953
+  POINT  4634  -4.533433409733085  3.11147984258838
+  POINT  4635  -5.320195886747793  5.3641005719377
+  POINT  4636  -5.065599827196129  5.809768564020871
+  POINT  4637  -5.838136124018156  5.370252348005836
+  POINT  4638  -6.104986995759502  5.803540159752914
+  POINT  4639  -5.843829653371539  6.255310386565476
+  POINT  4640  -5.845709132172464  7.14566131989957
+  POINT  4641  -6.099796022401105  7.591597931860797
+  POINT  4642  2.468655552028582  36.99209317569083
+  POINT  4643  2.720981659484743  36.50669016910551
+  POINT  4644  3.221422882693706  37.37975122048137
+  POINT  4645  3.480916159023034  36.90863094192812
+  POINT  4646  2.722869868303182  37.43948682119965
+  POINT  4647  3.229662324541032  36.47670038506341
+  POINT  4648  -2.273750322176463  28.37918393450756
+  POINT  4649  -2.779582658660454  28.37954777701897
+  POINT  4650  -2.526574115933269  27.93457393572186
+  POINT  4651  -3.033258069834652  28.82455082498592
+  POINT  4652  -2.77999854888538  29.27036534916167
+  POINT  4653  -2.273653961576329  29.27067718493149
+  POINT  4654  -4.295759860195631  22.20207831721287
+  POINT  4655  -3.790935919620525  22.20328484529564
+  POINT  4656  -4.547660762109723  22.64117574871403
+  POINT  4657  -1.770560839361158  22.20855341824481
+  POINT  4658  -2.276071337937328  22.20687905820053
+  POINT  4659  -1.516430995925717  22.64600353864246
+  POINT  4660  -0.7574091942873926  26.60463620877062
+  POINT  4661  -0.5049253650460661  26.16245155786428
+  POINT  4662  -1.26248456968623  26.60474309312709
+  POINT  4663  -2.020500884784648  27.04726516205367
+  POINT  4664  -2.273312578923515  27.49087502031526
+  POINT  4665  -2.779144915407506  27.49123886282667
+  POINT  4666  -3.031723705736667  27.04803775852522
+  POINT  4667  9.674059914272764  31.54309915647984
+  POINT  4668  9.425788859593911  31.99952798475481
+  POINT  4669  8.903187169034737  31.09050669476753
+  POINT  4670  9.413784633261546  31.09278170280593
+  POINT  4671  7.395667531479379  33.76943158160459
+  POINT  4672  6.881682436448375  33.76108525769369
+  POINT  4673  6.620525505193433  33.30931478828556
+  POINT  4674  6.099796175241582  32.40840299268783
+  POINT  4675  6.359431915093664  32.8578547224632
+  POINT  4676  6.874612619500812  32.86337793702549
+  POINT  4677  7.127777065364786  32.42027890997031
+  POINT  4678  7.388870655464554  32.87173897579268
+  POINT  4679  6.353715538404828  31.96208648750794
+  POINT  4680  8.934156162843058  33.81427295860885
+  POINT  4681  9.185518916730516  34.2705695880624
+  POINT  4682  9.431469087173463  33.80794971603986
+  POINT  4683  8.171917422879144  34.25045899549634
+  POINT  4684  8.426271187026909  34.70970875020592
+  POINT  4685  8.948131691149152  34.75501338402842
+  POINT  4686  7.651410866152008  33.32953611527348
+  POINT  4687  7.904575312015982  32.8864370882183
+  POINT  4688  7.911372188030805  33.78412969403021
+  POINT  4689  8.427660757551774  33.81056352916524
+  POINT  4690  8.673610927994719  33.34794365714271
+  POINT  4691  9.694220357455089  33.36180316353837
+  POINT  4692  9.945583111342547  33.81809979299192
+  POINT  4693  10.71091845921928  33.33687874930079
+  POINT  4694  10.46487676988987  33.83310719520395
+  POINT  4695  9.947998294341922  32.91367014601859
+  POINT  4696  9.43388427017284  32.90352006906653
+  POINT  4697  10.45710382882717  32.90333481796283
+  POINT  4698  12.55579669464555  33.7299880503965
+  POINT  4699  13.12801199851167  33.79479026035089
+  POINT  4700  12.47144579022556  34.51148132613582
+  POINT  4701  12.93462514265352  34.64180178367647
+  POINT  4702  12.24027789272276  34.13587082058012
+  POINT  4703  13.29868985479681  34.3116079231603
+  POINT  4704  13.43620128425083  34.8144691256151
+  POINT  4705  12.50944856105111  31.15885690226704
+  POINT  4706  11.99907725941845  31.14306284646113
+  POINT  4707  12.78538331767002  31.63539862612097
+  POINT  4708  12.5690393147074  32.06645875658151
+  POINT  4709  12.02256561458787  32.0281633069468
+  POINT  4710  5.065600016341717  34.19023420969232
+  POINT  4711  4.803482242815901  34.64054582058449
+  POINT  4712  4.035804672356232  34.20299720629515
+  POINT  4713  4.295343779290965  33.74833560269973
+  POINT  4714  4.809231465292767  33.74478222026569
+  POINT  4715  4.288463743829695  34.65011614756668
+  POINT  4716  9.637662575318704  13.82176439745997
+  POINT  4717  9.895010842448107  13.37629815618254
+  POINT  4718  9.892511591869622  14.26449157539778
+  POINT  4719  10.4067069355562  13.37400513563111
+  POINT  4720  13.52905067048734  17.80348860989551
+  POINT  4721  13.79175789835044  17.36796951733285
+  POINT  4722  13.00252411868155  17.80282680195637
+  POINT  4723  13.26812525861197  18.24140032089161
+  POINT  4724  12.74043410877834  17.36292953030527
+  POINT  4725  12.47950869690297  17.80084124130137
+  POINT  4726  13.51009777439233  19.55820318321305
+  POINT  4727  13.79929158665083  19.11344521668358
+  POINT  4728  13.53129906332733  18.67922305227264
+  POINT  4729  13.00477251152154  18.6785612443335
+  POINT  4730  12.99576637516585  19.55819856070358
+  POINT  4731  12.74349662902931  19.11733796967289
+  POINT  4732  12.47131668795828  19.55915255466194
+  POINT  4733  12.48032282431396  18.67951523829186
+  POINT  4734  11.43914986613786  21.32072491301456
+  POINT  4735  11.69942433103575  20.88138351831122
+  POINT  4736  10.92146534226518  21.32094673778284
+  POINT  4737  12.71562432355781  13.82239950971875
+  POINT  4738  12.9710204628949  13.37575475080886
+  POINT  4739  12.45674797382721  13.37407141180644
+  POINT  4740  12.97772491657961  14.26819291122295
+  POINT  4741  12.46345242751193  14.26650957222053
+  POINT  4742  13.49738297842677  14.27178058327745
+  POINT  4743  13.74303006923158  13.8271429168039
+  POINT  4744  13.24521108238089  14.71589064577923
+  POINT  4745  13.22448245842652  12.92743092592447
+  POINT  4746  13.48181951185093  12.47903488184075
+  POINT  4747  13.99578142269353  12.47669166234643
+  POINT  4748  14.24624589811313  12.92686861431367
+  POINT  4749  13.48335880815712  13.37575902383678
+  POINT  4750  13.9964920647632  13.37881909191951
+  POINT  4751  -6.320150687976366  23.96091876360178
+  POINT  4752  -5.812969625836519  23.96070458668278
+  POINT  4753  -6.574688825297787  24.40195167480463
+  POINT  4754  -6.828063652194295  23.9615488793044
+  POINT  4755  -5.813813941857884  24.84216924255897
+  POINT  4756  -6.321311652199329  24.84298261059543
+  POINT  4757  -7.081981008898271  23.52094424303451
+  POINT  4758  -7.336519146219691  23.96197715423737
+  POINT  4759  -7.845748104704221  23.96277425307575
+  POINT  4760  -7.335856115277702  23.08082963166928
+  POINT  4761  -7.844991443031732  23.08106288006605
+  POINT  4762  -8.100427311741345  23.52188036270352
+  POINT  4763  -10.40540157467472  14.26408505747693
+  POINT  4764  -10.66170284717234  13.81985074339596
+  POINT  4765  -9.637662430070954  13.82176447342599
+  POINT  4766  -9.895010682577141  13.37629824542447
+  POINT  4767  -9.892511441859234  14.26449165198275
+  POINT  4768  -10.40670675495256  13.37400525082491
+  POINT  4769  -12.47199466734123  16.03898502117763
+  POINT  4770  -12.21411479700939  16.4800762682083
+  POINT  4771  -12.99157903512498  16.04165171901209
+  POINT  4772  -14.28781148834783  14.72466430653915
+  POINT  4773  -14.01051597995725  14.27484092420143
+  POINT  4774  -13.50732425510632  15.16042328920559
+  POINT  4775  -13.24521080951691  14.71589083268884
+  POINT  4776  -13.49738271635704  14.27178080931081
+  POINT  4777  -16.93896929093587  15.5773409849898
+  POINT  4778  -16.68097494321506  15.16527107651389
+  POINT  4779  -15.67915306855816  18.67142202530682
+  POINT  4780  -15.40255559056302  18.2433353971784
+  POINT  4781  -15.1377260715964  18.67054347403299
+  POINT  4782  -15.66731487745816  17.81120284025883
+  POINT  4783  -16.23490724711116  18.67143816234672
+  POINT  4784  -11.95483924810893  19.55914747757233
+  POINT  4785  -11.69939991789839  19.11861637347679
+  POINT  4786  -11.95878820411627  18.67894457614464
+  POINT  4787  -12.47131653888641  19.55915256894556
+  POINT  4788  -12.48032266377783  18.67951528684885
+  POINT  4789  -12.22006407356756  18.2401678703231
+  POINT  4790  -12.74349647052235  19.11733800723685
+  POINT  4791  -13.00477233997363  18.67856130141531
+  POINT  4792  -14.87248011401993  19.104568316138
+  POINT  4793  -14.5444672240719  19.55524901206978
+  POINT  4794  -14.59588263602478  18.67648168800958
+  POINT  4795  -14.04144287725837  19.55526445993747
+  POINT  4796  -13.79929141258323  19.11344527595896
+  POINT  4797  -13.53129887895662  18.67922312921883
+  POINT  4798  -13.2681250722121  18.24140040883083
+  POINT  4799  -14.0626441448217  18.67628438337447
+  POINT  4800  -14.05735881756995  17.80654318110146
+  POINT  4801  -14.32789010239817  18.24225954126945
+  POINT  4802  -18.2968927833904  24.94722405978977
+  POINT  4803  -18.68670738346595  25.35086902771102
+  POINT  4804  -18.11866277312836  25.81991225332942
+  POINT  4805  -18.56007566971161  25.77221354163332
+  POINT  4806  -19.15366621552857  25.75648074725418
+  POINT  4807  -17.67264085100642  25.76729945984075
+  POINT  4808  -17.52697763588802  25.32168259068048
+  POINT  4809  -17.78498613217555  24.909612186255
+  POINT  4810  -12.47539170563856  23.0785489390462
+  POINT  4811  -12.99840983962808  23.07655221680742
+  POINT  4812  -12.47198557295549  23.9610096938691
+  POINT  4813  -12.99156790660064  23.95834007766085
+  POINT  4814  -12.21410615975761  23.51991655725213
+  POINT  4815  -14.04906603364312  23.06997456115545
+  POINT  4816  -13.52075687599397  23.07307448165996
+  POINT  4817  -14.03636788977065  23.95057690948157
+  POINT  4818  -13.51391494296653  23.95486234251339
+  POINT  4819  -14.30341627472643  23.50650018459617
+  POINT  4820  -14.561721042046  23.9459789118976
+  POINT  4821  -14.57441918591847  23.06537656357148
+  POINT  4822  -13.25571608608519  23.5145759173276
+  POINT  4823  -14.5960683653604  21.32333659147519
+  POINT  4824  -14.32798922175618  21.75754972154517
+  POINT  4825  -14.59066652086865  22.19303664224877
+  POINT  4826  -13.74303175114319  26.17287493709136
+  POINT  4827  -13.48335791473757  26.62425530265345
+  POINT  4828  -12.97771773598447  25.73181930175693
+  POINT  4829  -12.71561880221907  26.17761345449204
+  POINT  4830  -13.49737100762031  25.72824656875608
+  POINT  4831  -12.97101566866241  26.62426067037656
+  POINT  4832  -15.87594000709251  24.3886752863724
+  POINT  4833  -15.61382354497319  23.94120865241457
+  POINT  4834  -15.08739359140011  23.94259057999703
+  POINT  4835  -15.35519938057486  23.50052025942974
+  POINT  4836  -15.07839045447396  24.82672910597416
+  POINT  4837  -14.82034520644433  24.38666730488244
+  POINT  4838  -4.297887780716318  27.4932582820506
+  POINT  4839  -4.044006752788331  27.04935658278367
+  POINT  4840  -5.312210754179706  27.49556464468527
+  POINT  4841  -5.567618563035417  27.94023469907253
+  POINT  4842  -4.552513129335004  27.93750819510436
+  POINT  4843  -4.807024214617755  28.38271368117876
+  POINT  4844  -4.805074821119767  27.49442750899073
+  POINT  4845  -5.057585405561018  27.0513147316315
+  POINT  4846  -6.33587960182028  29.27904137271206
+  POINT  4847  -6.593280542092714  29.72671675993249
+  POINT  4848  -6.845584816882877  29.28169696677443
+  POINT  4849  -9.139626577699488  28.84786563078475
+  POINT  4850  -8.880974911121076  28.39978165870695
+  POINT  4851  -8.886484031839617  29.29285468931666
+  POINT  4852  -8.375837076376664  29.29012509511866
+  POINT  4853  -6.606301488352729  31.5172784426189
+  POINT  4854  -6.86610510089686  31.96710983930201
+  POINT  4855  -7.380363061301429  31.97547095696313
+  POINT  4856  -7.629645044490113  31.52677603524801
+  POINT  4857  -3.734387612605413  37.33998909381205
+  POINT  4858  -3.480917883197236  36.90862995438757
+  POINT  4859  -4.249409370936035  37.28824836325113
+  POINT  4860  -4.533435519467933  36.88852220808495
+  POINT  4861  -4.758488233341749  38.11030236366913
+  POINT  4862  -4.50676918141261  38.58210339451158
+  POINT  4863  -4.783545702215509  38.99367819414739
+  POINT  4864  -5.253316076616899  38.87170298229778
+  POINT  4865  -5.026304722136116  39.35810581481412
+  POINT  4866  -5.31475374097253  38.1921257939889
+  POINT  4867  -5.55603254774995  38.55085252783052
+  POINT  4868  -4.803482580347485  34.64054361135685
+  POINT  4869  -5.320196850564142  34.63590120971449
+  POINT  4870  -4.543060036237803  35.09578274400744
+  POINT  4871  -9.474341817876265  37.14660975144912
+  POINT  4872  -9.406416566704262  36.55611168334616
+  POINT  4873  -9.473526932351346  35.72215174385364
+  POINT  4874  -9.691051891830522  35.19404228105253
+  POINT  4875  -7.395668664845115  33.76943169253389
+  POINT  4876  -7.141645205774269  34.21567874364175
+  POINT  4877  -7.911373176236172  33.78412991120815
+  POINT  4878  -5.970391354147889  38.42267776501082
+  POINT  4879  -5.910343674528779  39.10674848218104
+  POINT  4880  9.899142136969207  27.51510267900654
+  POINT  4881  10.15244814835231  27.06995268221834
+  POINT  4882  9.895007998246125  26.62370476614767
+  POINT  4883  9.383403857216514  26.62219238204935
+  POINT  4884  9.645779171780866  27.95898679566293
+  POINT  4885  9.392678108416897  28.40351120876002
+  POINT  4886  8.880975044494647  28.39978174499532
+  POINT  4887  9.387389390594027  27.51154309762205
+  POINT  4888  14.26073289743033  28.8691395757118
+  POINT  4889  13.99842144929555  28.41952401656783
+  POINT  4890  13.99771942752645  29.30896742654093
+  POINT  4891  13.48445722189115  28.41718289837834
+  POINT  4892  13.22907518867648  28.86709658595593
+  POINT  4893  13.48364027439367  29.31665262720558
+  POINT  4894  2.778186435888486  8.938957890864957
+  POINT  4895  3.285536154833564  8.93983143640984
+  POINT  4896  0.503576558953103  8.480088415641912
+  POINT  4897  0.7545340256392324  8.025313551344778
+  POINT  4898  1.257490675288657  8.028793692477928
+  POINT  4899  1.00487166372454  7.572984560185061
+  POINT  4900  1.767218177292147  9.833864649502274
+  POINT  4901  1.261813121296191  9.833435129749081
+  POINT  4902  2.01977490415053  9.386150013300199
+  POINT  4903  1.254058685362145  7.116431701475741
+  POINT  4904  0.7511020357127205  7.112951560342591
+  POINT  4905  1.503048670056133  6.664067888028908
+  POINT  4906  1.756818298067953  7.124100887871379
+  POINT  4907  3.221422303399006  2.620248389708918
+  POINT  4908  3.480914914435558  3.091369166068999
+  POINT  4909  2.72098085638526  3.493309688384574
+  POINT  4910  3.229661216416159  3.523299759226276
+  POINT  4911  2.982688780121403  3.965001676074344
+  POINT  4912  2.46865487040522  3.007906565470829
+  POINT  4913  2.722869289518796  2.56051282330207
+  POINT  4914  -1.010191681274808  16.47724942694537
+  POINT  4915  -1.263131355488745  16.91548129340297
+  POINT  4916  -2.020306230344167  16.47789566114399
+  POINT  4917  -1.767492742491601  16.03853792813051
+  POINT  4918  -1.262539725172341  16.03840777843346
+  POINT  4919  12.1997613590734  12.92710547342492
+  POINT  4920  11.94479095056584  12.47843891822832
+  POINT  4921  11.43422157083276  12.47855544044724
+  POINT  4922  11.17576264345388  12.92727100195365
+  POINT  4923  11.94436521973632  13.37375023233481
+  POINT  4924  7.336251480752613  18.6795640871081
+  POINT  4925  7.844937134949372  18.67964044904051
+  POINT  4926  8.099974578704396  18.23956992571268
+  POINT  4927  7.84480578458009  17.79945448070259
+  POINT  4928  8.354717919779731  17.79936124634732
+  POINT  4929  7.335669970649025  17.79968796401571
+  POINT  4930  7.081931177971981  18.23961942058892
+  POINT  4931  8.354982325926542  23.08157075161737
+  POINT  4932  7.844991506275383  23.08106290277033
+  POINT  4933  7.844803584321875  22.20054442238268
+  POINT  4934  8.354715387699985  22.20063715773581
+  POINT  4935  8.610505338363385  22.64100603529607
+  POINT  4936  7.590411112199734  22.64052001245645
+  POINT  4937  7.335856170051208  23.08082965169779
+  POINT  4938  7.335668248097701  22.20031117131014
+  POINT  4939  9.890818040191585  21.32074068357608
+  POINT  4940  10.40541311898843  21.32077323454844
+  POINT  4941  10.66371321816277  20.88088247878991
+  POINT  4942  10.40367267864471  20.44035402693132
+  POINT  4943  10.91972490192146  20.44052753016572
+  POINT  4944  9.890170248707562  20.4403537256876
+  POINT  4945  10.14618193246625  19.99999877706341
+  POINT  4946  9.634491429138507  20.88059097460354
+  POINT  4947  6.827400667807767  23.08040137415767
+  POINT  4948  7.081981061883418  23.52094426447156
+  POINT  4949  6.066344491613611  23.52030180831326
+  POINT  4950  6.320150731026381  23.96091878388248
+  POINT  4951  6.828063703070947  23.96154890185181
+  POINT  4952  4.803564434818736  21.32240321307486
+  POINT  4953  4.299173358639647  21.32364953328408
+  POINT  4954  4.044571409948016  21.76361015630762
+  POINT  4955  4.295759881507283  22.20207832426327
+  POINT  4956  4.801296257115548  22.20150106250879
+  POINT  4957  5.054931180975862  21.76171558239177
+  POINT  4958  5.306832085229775  22.20081301603004
+  POINT  4959  5.309100262932963  21.32171516659611
+  POINT  4960  5.81454207983198  21.32106756825005
+  POINT  4961  -18.56002184971921  14.22769492657082
+  POINT  4962  -18.58096939592903  13.77580049591028
+  POINT  4963  -19.15364988885438  14.24346495111939
+  POINT  4964  -18.85904440570564  13.34143830515129
+  POINT  4965  -15.33998266280768  14.7338292242525
+  POINT  4966  -15.57188599971363  14.288170055576
+  POINT  4967  -16.07296487229796  14.29114541974748
+  POINT  4968  -16.41267733540978  14.73120693333909
+  POINT  4969  -16.13750880779156  15.17187251392457
+  POINT  4970  -3.788945546787723  16.91866703867328
+  POINT  4971  -4.041277777523542  16.47943067745028
+  POINT  4972  -3.283887755210931  16.91774473014353
+  POINT  4973  -3.03057820446562  16.47865932897363
+  POINT  4974  -2.778699564643894  16.9173169410877
+  POINT  4975  -3.788415114156707  16.03940786842766
+  POINT  4976  -3.282925532369509  16.03938389455073
+  POINT  4977  -2.526915470103403  17.35549624645666
+  POINT  4978  -2.273605919358092  16.91641084528677
+  POINT  4979  -1.516431044502669  17.35399647754574
+  POINT  4980  -1.770560893295203  17.79144659044107
+  POINT  4981  -2.276071417055452  17.79312094010028
+  POINT  4982  -1.768522135803676  16.91607496651296
+  POINT  4983  6.366501243846965  6.244439141771339
+  POINT  4984  6.881681964346839  6.238915939179471
+  POINT  4985  6.620524933946894  6.690686173039952
+  POINT  4986  7.141643473575124  5.784322519668687
+  POINT  4987  6.888811533617075  5.334267858601422
+  POINT  4988  6.360807268283301  5.359380468288856
+  POINT  4989  5.328304956021583  8.043704908345143
+  POINT  4990  5.839992119376236  8.041429038737206
+  POINT  4991  5.072106627115973  7.596960962835897
+  POINT  4992  4.814338839724297  8.045553308551284
+  POINT  4993  6.874612011818435  7.136622928830665
+  POINT  4994  7.12777633937579  7.579721871050277
+  POINT  4995  6.359431291318561  7.142146131422533
+  POINT  4996  6.866104091313161  8.032890848737603
+  POINT  4997  6.099795556301682  7.591597724921501
+  POINT  4998  5.84570847843014  7.145660969130788
+  POINT  4999  6.353714932264657  8.037914201028951
+  POINT  5000  6.081229359011346  4.028063957887165
+  POINT  5001  5.831277611851206  4.472376518875711
+  POINT  5002  5.818440427341621  3.559379919758002
+  POINT  5003  6.331070824970244  3.568782868560602
+  POINT  5004  5.320793662260057  3.555241511663863
+  POINT  5005  5.570635128218955  3.0959604223373
+  POINT  5006  5.055437459855198  4.009246871870873
+  POINT  5007  6.821727892775355  3.591856572778605
+  POINT  5008  6.558938961105631  3.123172534649443
+  POINT  5009  6.777765117627584  2.634655229109696
+  POINT  5010  6.287108049822472  2.611581524891692
+  POINT  5011  7.244265492278114  2.731384312863897
+  POINT  5012  7.354837885284381  3.536944361599219
+  POINT  5013  7.598035916136748  3.04043980858182
+  POINT  5014  4.299970635453084  7.14850787645576
+  POINT  5015  3.788870234546398  7.145933669669137
+  POINT  5016  4.047040109912  7.596235156255416
+  POINT  5017  5.345228489927225  2.610272286506451
+  POINT  5018  5.842875255008789  2.614410694600591
+  POINT  5019  6.061701411530742  2.125893389060844
+  POINT  5020  5.314751048479676  1.807873046646745
+  POINT  5021  5.061202116388895  2.210546263008434
+  POINT  5022  5.970380050087678  1.57731768278398
+  POINT  5023  5.556020582598091  1.44914323051177
+  POINT  5024  5.91032202053712  0.893244814956379
+  POINT  5025  -6.836865785799978  12.49945380288166
+  POINT  5026  -7.089553213907015  12.94295844989903
+  POINT  5027  -6.833499178180947  13.3871348946776
+  POINT  5028  -6.325319961009233  13.38836779917821
+  POINT  5029  -1.767218052469922  9.83386477079263
+  POINT  5030  -1.515143883278228  10.28237400844931
+  POINT  5031  -4.303205496386696  9.835452565483031
+  POINT  5032  -4.556607857026273  10.28150303033054
+  POINT  5033  -3.794281023813899  9.835889357263516
+  POINT  5034  -3.286799988363986  9.836274382571714
+  POINT  5035  -3.540719111353306  10.28304225808364
+  POINT  5036  -4.049286373397377  9.3886846899711
+  POINT  5037  -3.285536068257624  8.939831726257879
+  POINT  5038  -3.794429645178254  8.941483599185215
+  POINT  5039  -4.303354117751051  8.94104680740473
+  POINT  5040  -8.903186047936739  8.909494536004507
+  POINT  5041  -9.153055229364252  9.360382120771384
+  POINT  5042  -8.391528260648695  8.915703764693721
+  POINT  5043  -8.131409949387299  9.367205473050699
+  POINT  5044  -7.880480215519194  8.920252421455185
+  POINT  5045  -8.893751097108121  9.810542690182665
+  POINT  5046  -8.383104174517864  9.813271999453356
+  POINT  5047  -7.872056129388366  9.81782065621482
+  POINT  5048  -0.2524838087497524  13.39540810971175
+  POINT  5049  2.44434774088198e-08  12.95322345942679
+  POINT  5050  -0.2524838007827911  12.50965988836077
+  POINT  5051  -0.757533375523636  12.50963474063003
+  POINT  5052  -1.010043008245645  12.95311658754424
+  POINT  5053  -1.262608748160552  12.5095278632947
+  POINT  5054  -5.055438029190892  4.009250597348579
+  POINT  5055  -4.800176791787235  4.456813104903008
+  POINT  5056  -4.285157933322742  4.447242053838
+  POINT  5057  -4.807632465031426  3.545831769185357
+  POINT  5058  -4.268076983227289  3.565484152107086
+  POINT  5059  -4.016822847882909  3.997414501763457
+  POINT  5060  -4.555688689148163  6.701760771737632
+  POINT  5061  -4.809231035662058  6.255220117419496
+  POINT  5062  -5.325945436912674  6.259862566172071
+  POINT  5063  -4.813858667735643  7.152062022074176
+  POINT  5064  -5.327824915713599  7.150213499506166
+  POINT  5065  -5.072106938070638  7.596961402009646
+  POINT  5066  -5.587460861837469  6.7007619399641
+  POINT  5067  -4.814374102587054  8.940272696222461
+  POINT  5068  -4.559517374367931  8.493071605436576
+  POINT  5069  -5.324236901342186  8.938715377757356
+  POINT  5070  -4.814339024648308  8.045553709415984
+  POINT  5071  -5.328305272626263  8.043705186847973
+  POINT  5072  -2.021045274972744  28.82414544323013
+  POINT  5073  -1.76803673224556  28.37917160193302
+  POINT  5074  -1.262715411558947  28.37904359188522
+  POINT  5075  -1.010161179515999  28.82419250185701
+  POINT  5076  -1.767940371645426  29.27066485235695
+  POINT  5077  -1.262535281707757  29.27109438297196
+  POINT  5078  -3.537066675701101  22.64267533516108
+  POINT  5079  -3.283887565701342  23.08225529095755
+  POINT  5080  -3.78894527952161  23.0813329672272
+  POINT  5081  -2.526915358233893  22.64450376122651
+  POINT  5082  -2.781164941584266  22.20597295586544
+  POINT  5083  -3.285878205800256  22.20420716902598
+  POINT  5084  -2.777737218622537  23.96104394944767
+  POINT  5085  -3.030578038325537  23.52134070986063
+  POINT  5086  -3.282925349818851  23.96061616261071
+  POINT  5087  -2.778699434505028  23.08268307779451
+  POINT  5088  -2.273605830858089  23.08358918012959
+  POINT  5089  -4.294456553710889  23.08098940888245
+  POINT  5090  -4.04127744371113  23.52056936467892
+  POINT  5091  -4.799992926299243  23.08041214616574
+  POINT  5092  -5.052976054246795  23.52015671029886
+  POINT  5093  -2.777506769235351  24.84052461662275
+  POINT  5094  -3.030366432223659  25.28092918756785
+  POINT  5095  -3.282944193104159  24.84072397314284
+  POINT  5096  1.330755233786007e-08  25.28052643955282
+  POINT  5097  -0.2524349013237393  25.72146687178944
+  POINT  5098  -0.7573602844785909  25.72151112349207
+  POINT  5099  -0.2524349052544075  24.84066650044989
+  POINT  5100  -1.514941477347312  26.16264507841994
+  POINT  5101  -1.767575298832624  26.60489236198012
+  POINT  5102  -2.272957792445729  26.60516714734652
+  POINT  5103  8.652257441255252  31.53745954895175
+  POINT  5104  8.39152909816184  31.0842973257564
+  POINT  5105  7.880480908934858  31.07974849039663
+  POINT  5106  8.414839869207476  32.89164191324666
+  POINT  5107  8.152299658520024  32.43384477376586
+  POINT  5108  8.913239863919834  31.99135925837855
+  POINT  5109  9.175113211385597  32.44721832517048
+  POINT  5110  8.921335274498762  32.89535134269027
+  POINT  5111  8.401581793046937  31.98514988936742
+  POINT  5112  7.891317235855443  31.97994506433906
+  POINT  5113  11.74873159823277  31.58187307730738
+  POINT  5114  11.47479887261305  31.1209339277706
+  POINT  5115  11.49828722778247  32.00603438825626
+  POINT  5116  10.96516324372876  31.99723027702603
+  POINT  5117  10.70432876392238  31.55113677680682
+  POINT  5118  10.95876372439194  31.10769117123329
+  POINT  5119  13.5073245348637  15.16042310084938
+  POINT  5120  13.7722487569601  15.60568703807935
+  POINT  5121  12.98766647301654  15.15683542879488
+  POINT  5122  11.95878835004167  18.67894453890096
+  POINT  5123  11.43914146078369  18.67926892442837
+  POINT  5124  11.69940005256377  19.11861634915865
+  POINT  5125  11.95797422263067  17.80027054191047
+  POINT  5126  12.22006423253389  18.24016781356158
+  POINT  5127  11.95483938702825  19.55914746318869
+  POINT  5128  11.43519249777028  19.55947184871609
+  POINT  5129  11.17515809731908  20.00000102052662
+  POINT  5130  10.9197187628546  19.55946990649659
+  POINT  5131  11.43519863683714  20.44052947238522
+  POINT  5132  11.95485752643337  20.44085700867212
+  POINT  5133  12.20710913316478  20.00000805421938
+  POINT  5134  8.610508600834709  17.35899258697246
+  POINT  5135  8.865677394959015  17.79910803198256
+  POINT  5136  10.66370546167478  19.11911380302585
+  POINT  5137  10.40367106122358  19.55964297483639
+  POINT  5138  9.890168631286432  19.55964267359267
+  POINT  5139  9.634489721044543  19.11940538477516
+  POINT  5140  -4.8003808551864  24.84120085001912
+  POINT  5141  -5.306981717815686  24.84178343725863
+  POINT  5142  -5.054251160006624  25.28243433877643
+  POINT  5143  -5.55994363703766  24.40093575380166
+  POINT  5144  -5.306137401794322  23.96031878138243
+  POINT  5145  -4.799950065447936  23.96038787741774
+  POINT  5146  -11.95797406324265  17.80027060346049
+  POINT  5147  -12.47950852290421  17.80084131416471
+  POINT  5148  -12.4753984618416  16.92143972111907
+  POINT  5149  -11.95613484774709  16.91958059439132
+  POINT  5150  -11.69841188473828  17.35997812379403
+  POINT  5151  -13.25572876182561  16.4853991857355
+  POINT  5152  -13.51392938584669  16.04511550981153
+  POINT  5153  -14.04907256824607  16.92994355105175
+  POINT  5154  -14.30347489893017  16.49353671661515
+  POINT  5155  -17.42133850836408  16.46621230299164
+  POINT  5156  -17.19812027591119  16.01499464947636
+  POINT  5157  -16.66495740057217  16.04359032158593
+  POINT  5158  -16.48596411693903  18.24387092939627
+  POINT  5159  -16.7768887765254  18.67109514329076
+  POINT  5160  -17.3450998387438  18.66931497274819
+  POINT  5161  -17.55961494440304  18.23365541782893
+  POINT  5162  -15.13808693917218  21.32895091825263
+  POINT  5163  -14.87289120763043  20.89506516536105
+  POINT  5164  -15.08660377556885  20.45033549308172
+  POINT  5165  -15.55540002119723  20.44995148230189
+  POINT  5166  -15.67928522368949  21.32845399962185
+  POINT  5167  -15.40246238141945  21.75672542573599
+  POINT  5168  -15.97041154478462  20.90170693614084
+  POINT  5169  -15.10960308030174  23.06196306963319
+  POINT  5170  -14.85525283921842  22.62543744619248
+  POINT  5171  -15.12585041525192  22.18962314831048
+  POINT  5172  -15.63603303387482  23.06058114205074
+  POINT  5173  -15.66704869976923  22.1891262296797
+  POINT  5174  -15.93226468292499  22.62311470327069
+  POINT  5175  -15.60763493081995  24.82273747748248
+  POINT  5176  -16.13755718211401  24.82813379087301
+  POINT  5177  -16.07300703291225  25.70885103720212
+  POINT  5178  -16.41272779402701  25.26878316611768
+  POINT  5179  -15.34000762949547  25.26618761047478
+  POINT  5180  -15.57192119263  25.71183375688789
+  POINT  5181  -4.801571669348379  25.72385239038944
+  POINT  5182  -5.308172531977664  25.72443497762895
+  POINT  5183  -5.562737248413449  26.16686877343349
+  POINT  5184  -5.310107189970187  26.609152448284
+  POINT  5185  -4.802971256910249  26.60801531258947
+  POINT  5186  -6.341450194137229  30.17268166580354
+  POINT  5187  -6.851155409199826  30.1753372598659
+  POINT  5188  -6.859007872044449  31.0718020351126
+  POINT  5189  -6.346618677552621  31.06677857324325
+  POINT  5190  -5.827084132913434  29.27699951540124
+  POINT  5191  -6.079388407703597  28.83197972224318
+  POINT  5192  -5.823064947564565  28.38586492051645
+  POINT  5193  -6.331860416471411  28.38790677782728
+  POINT  5194  -5.315146554267603  28.38430764348843
+  POINT  5195  -5.062470599146903  28.82834390262268
+  POINT  5196  -4.556608069675993  29.71849731589442
+  POINT  5197  -4.811613479718268  30.165702029606
+  POINT  5198  -5.317804366752521  29.27479472056045
+  POINT  5199  -5.574295560869203  29.72185637102933
+  POINT  5200  -4.809682027102673  29.27320075825078
+  POINT  5201  -8.37012581029477  28.39701947502677
+  POINT  5202  -8.623177182075818  27.95266494359922
+  POINT  5203  -8.365439583299061  27.50635270506456
+  POINT  5204  -7.855387859831518  27.50430329700417
+  POINT  5205  -5.055440020725587  35.99075265980588
+  POINT  5206  -4.807634831823819  36.45417118840255
+  POINT  5207  -5.320796682809582  36.4447576399531
+  POINT  5208  -4.268078857383937  36.43451722793773
+  POINT  5209  -4.800178501361454  35.54318914608771
+  POINT  5210  -5.313340352347217  35.53377559763826
+  POINT  5211  -4.285159704616173  35.55275980617505
+  POINT  5212  -3.759706120423524  35.55518051249211
+  POINT  5213  -3.243368772057292  35.56417992560635
+  POINT  5214  -2.982690542380816  36.03499790770628
+  POINT  5215  -4.016824585547176  36.00258691457239
+  POINT  5216  -3.742625273191289  36.4369379342548
+  POINT  5217  -3.229663611360475  36.47669964102222
+  POINT  5218  -7.354840159678442  36.4630586256994
+  POINT  5219  -7.903282692818332  36.56886240561009
+  POINT  5220  -7.598040633279414  36.95956098877416
+  POINT  5221  -7.126972347222575  36.01744750407371
+  POINT  5222  -6.821730287683658  36.40814608723778
+  POINT  5223  -9.020623545645163  37.38900516343447
+  POINT  5224  -9.424243510782267  37.64039778849911
+  POINT  5225  -8.55965244144466  38.07573926529626
+  POINT  5226  -8.556945323688646  37.47116104503266
+  POINT  5227  -8.146988554944242  37.6652934901699
+  POINT  5228  -8.61016138837582  36.98320888708665
+  POINT  5229  -8.948133722619318  34.7550130983436
+  POINT  5230  -8.426272911082375  34.70970901961947
+  POINT  5231  -8.68619953008956  35.18782904777932
+  POINT  5232  -8.171918681535782  34.25045922190498
+  POINT  5233  -7.909984489006024  34.68327517134071
+  POINT  5234  -8.934156830967638  33.81427302246146
+  POINT  5235  -8.427661598312522  33.81056375948693
+  POINT  5236  -7.402798616599393  34.67408020217368
+  POINT  5237  -7.657152846145986  35.13332999988818
+  POINT  5238  -7.405024596478357  35.59824753662824
+  POINT  5239  -7.912210468884988  35.60744250579526
+  POINT  5240  -6.871914724483572  35.54333499816662
+  POINT  5241  -6.888813562914232  34.66573357218922
+  POINT  5242  -5.838136677064515  34.62974945206364
+  POINT  5243  -6.36080931903647  34.64062034113785
+  POINT  5244  -6.621962729861593  35.09902179966978
+  POINT  5245  -6.34391048060581  35.51822176711525
+  POINT  5246  -5.576018659483458  35.08006032626925
+  POINT  5247  -5.831280178847591  35.52762383998741
+  POINT  5248  -6.081232173469569  35.97193703848426
+  POINT  5249  -6.414624379431359  38.42551013672836
+  POINT  5250  -6.06170323738905  37.87410771123918
+  POINT  5251  -6.85513583736405  38.26715632721284
+  POINT  5252  -6.765677367949003  38.82088227601641
+  POINT  5253  -5.842877995505253  37.38558927504278
+  POINT  5254  -5.57063863640637  36.90403968955684
+  POINT  5255  -5.818443825308139  36.44062116096016
+  POINT  5256  -6.287111020788723  37.38842164676031
+  POINT  5257  -6.558941939522226  36.87683020971369
+  POINT  5258  -6.777767181406023  37.36534864591009
+  POINT  5259  -6.331074127066358  36.431219088088
+  POINT  5260  8.876288812510946  27.50911496320762
+  POINT  5261  9.129651777699287  27.06523084655123
+  POINT  5262  8.872303279133433  26.61976424763491
+  POINT  5263  8.361773132138943  26.61807490241647
+  POINT  5264  8.108499459230185  27.06075329726731
+  POINT  5265  8.370125922301042  28.3970195492633
+  POINT  5266  7.859855674189975  28.39452253470644
+  POINT  5267  8.623177303212083  27.95266501854642
+  POINT  5268  7.602700800558854  27.94780788776358
+  POINT  5269  8.365439690317341  27.5063527674756
+  POINT  5270  7.85538794993132  27.50430335260611
+  POINT  5271  2.013562028795792  7.580836026957666
+  POINT  5272  2.26255201348978  7.128472213510832
+  POINT  5273  2.77500305718747  8.037874485340598
+  POINT  5274  3.027617726611467  7.589434151032957
+  POINT  5275  3.283325039581317  8.042101283776436
+  POINT  5276  4.303354076505858  8.941046540609735
+  POINT  5277  4.559517266307168  8.493071306044598
+  POINT  5278  4.303318937401558  8.046327360535352
+  POINT  5279  3.794429651747119  8.941483306382132
+  POINT  5280  3.539603867070875  8.492193488056373
+  POINT  5281  3.792218536494872  8.04375315374873
+  POINT  5282  1.765500287132538  8.935229901889144
+  POINT  5283  1.512133152393508  8.483328312230684
+  POINT  5284  1.26052017194238  8.933024273296105
+  POINT  5285  2.268204505900643  8.035370646710422
+  POINT  5286  2.523911818870494  8.488037779453901
+  POINT  5287  2.271387884601659  8.93645405223478
+  POINT  5288  1.762470790478816  8.030999321070967
+  POINT  5289  0.7570181339856141  9.832621206105948
+  POINT  5290  0.2521486956286256  9.832463953535083
+  POINT  5291  1.009092319370833  9.384111939311431
+  POINT  5292  7.294083631537163e-08  9.383298033689051
+  POINT  5293  0.755725184631803  8.932210349652973
+  POINT  5294  0.2521487063815567  8.931176081657238
+  POINT  5295  0.5001445506630317  6.653216377611718
+  POINT  5296  0.2509575290254266  7.109769236321039
+  POINT  5297  -0.2509574054255117  7.109769247532057
+  POINT  5298  -0.5001444446786542  6.653216389361097
+  POINT  5299  -0.2485632222434483  6.187417819036827
+  POINT  5300  1.486808276477663  4.815803748516092
+  POINT  5301  1.233115516860302  4.336364274084247
+  POINT  5302  0.7400739793290316  4.319006830385741
+  POINT  5303  0.4944715681245202  4.791077890962915
+  POINT  5304  1.247341716301759  6.199670761156298
+  POINT  5305  1.750101329007567  6.207339947551936
+  POINT  5306  1.241668873888472  5.270356238309256
+  POINT  5307  1.739533777842383  5.288390330886163
+  POINT  5308  6.319776508411969  23.08033816696384
+  POINT  5309  6.57365161657976  22.64022355419007
+  POINT  5310  5.813247233137025  22.20059394145463
+  POINT  5311  5.559612309276712  22.64037942157165
+  POINT  5312  5.812595440385603  23.08012398834565
+  POINT  5313  6.827537292599711  22.20035520381776
+  POINT  5314  7.081929764721854  21.760379613744
+  POINT  5315  6.067132909156976  21.76072559108232
+  POINT  5316  6.321207979898867  21.32076562341935
+  POINT  5317  6.319913133203913  22.20029199662393
+  POINT  5318  6.828119358218929  21.32047871636039
+  POINT  5319  -15.60761428771511  15.17729136075921
+  POINT  5320  -15.8759118955204  15.61135550393402
+  POINT  5321  -15.07838575053652  15.17331221426195
+  POINT  5322  5.313338001627086  4.46622421620718
+  POINT  5323  4.800176500099562  4.456810078993488
+  POINT  5324  5.57601665209557  4.919939725998326
+  POINT  5325  3.782261521536312  6.243544847125578
+  POINT  5326  4.035803768525128  5.797003854445578
+  POINT  5327  4.295343007076298  6.25166539718948
+  POINT  5328  5.32782445313552  7.150212913721168
+  POINT  5329  5.5874601881524  6.7007613202222
+  POINT  5330  4.555688461472631  6.70175982734103
+  POINT  5331  4.809230708461447  6.255218834661029
+  POINT  5332  4.813858336838233  7.152061313927309
+  POINT  5333  -5.310107499537395  13.39084792377241
+  POINT  5334  -5.817351857309676  13.38983227473242
+  POINT  5335  -6.07268972719344  12.94608409290475
+  POINT  5336  -5.830755763497873  9.830536332965101
+  POINT  5337  -5.574295325382317  10.27814411627772
+  POINT  5338  -5.827083974112147  10.72300100372588
+  POINT  5339  -5.317804215979157  10.7252057153338
+  POINT  5340  -6.328097480913719  12.50141410567111
+  POINT  5341  -6.584305435820698  12.05624829120225
+  POINT  5342  -5.820129377214162  12.50287858122533
+  POINT  5343  -2.273653862835852  10.72932296672886
+  POINT  5344  -2.779998427153544  10.72963483000736
+  POINT  5345  -2.526893511585702  10.28311542011334
+  POINT  5346  -3.03325797369162  11.17544935978157
+  POINT  5347  -3.286081789785646  11.62005936335257
+  POINT  5348  -2.77958259449772  11.62045238019389
+  POINT  5349  -3.793978657891382  10.72885678785785
+  POINT  5350  -3.28649762244147  10.72924181316605
+  POINT  5351  -3.033012140510429  9.388247926083039
+  POINT  5352  -2.778186307943474  8.938958170589331
+  POINT  5353  -2.271387729106642  8.936454262492179
+  POINT  5354  -2.019774768934057  9.386150177582453
+  POINT  5355  -2.273105663732145  9.835088963624671
+  POINT  5356  -2.779450228049837  9.835400826903166
+  POINT  5357  -5.5822245505022  8.490021566077278
+  POINT  5358  -5.835924092640452  8.936439449580325
+  POINT  5359  -5.83999246392453  8.041429258670941
+  POINT  5360  -6.353715300277041  8.037914311090102
+  POINT  5361  -0.7574091937513752  13.39536386100999
+  POINT  5362  -0.5049253668923982  13.83754850584218
+  POINT  5363  -1.262484566388291  13.39525698367467
+  POINT  5364  -0.7573602894107085  14.27848893565566
+  POINT  5365  -1.262291965254416  14.27845371053971
+  POINT  5366  -3.28331274272134  14.2777561649855
+  POINT  5367  -3.536686451350343  13.83613863307331
+  POINT  5368  -2.777875273536981  14.27795550083099
+  POINT  5369  -2.272576442111081  23.96112623819538
+  POINT  5370  -2.524923753604395  24.40040169094545
+  POINT  5371  -2.272345992723895  24.84060690537046
+  POINT  5372  -1.009801486872866  25.28056166755413
+  POINT  5373  -1.262291950595193  25.72154635362897
+  POINT  5374  -1.767382679741587  25.721695622482
+  POINT  5375  -2.01983108067216  25.2806633643694
+  POINT  5376  -2.272480607424279  25.72176208916036
+  POINT  5377  -1.767248065041203  24.84054043869209
+  POINT  5378  -2.778352392893433  26.60544966214032
+  POINT  5379  -3.284192720232348  26.60594747324546
+  POINT  5380  -2.52542680694141  26.16307686206677
+  POINT  5381  -2.777875207871983  25.72204460395416
+  POINT  5382  -3.28331263174079  25.72224396047425
+  POINT  5383  6.866104760713585  31.96710990335178
+  POINT  5384  7.380362796677328  31.97547094211897
+  POINT  5385  7.629644931204242  31.52677605772053
+  POINT  5386  6.606301269717369  31.51727851965659
+  POINT  5387  7.369526469756744  31.07527436817653
+  POINT  5388  6.859007733442916  31.07180208214582
+  POINT  5389  13.51392964722839  16.04511534389315
+  POINT  5390  14.03639847868913  16.04943449810747
+  POINT  5391  13.52076444975717  16.92688894744077
+  POINT  5392  14.04907281755069  16.92994337381335
+  POINT  5393  14.30347517478823  16.49353649549375
+  POINT  5394  11.18084815906273  18.23937667376692
+  POINT  5395  10.92145986158483  18.67904848402461
+  POINT  5396  10.40541215995382  18.6792215523644
+  POINT  5397  11.43896757839668  17.79930462984569
+  POINT  5398  11.69841204276576  17.35997805758548
+  POINT  5399  10.92128597919782  17.79908418944193
+  POINT  5400  10.66359917374389  17.35875830998669
+  POINT  5401  10.40547975440994  17.79883035390792
+  POINT  5402  8.865944840957612  16.91817543653783
+  POINT  5403  8.354985365778326  16.91842865090259
+  POINT  5404  8.355742015396309  16.03671800269559
+  POINT  5405  8.100430211024863  16.47811944809296
+  POINT  5406  9.377722904526436  17.79898153735976
+  POINT  5407  9.890885340997441  17.79886408828225
+  POINT  5408  9.634630512485  17.35862192353019
+  POINT  5409  10.14857214645137  18.23918996773749
+  POINT  5410  9.89081774654132  18.67925528673874
+  POINT  5411  9.377649707542098  18.67937380014824
+  POINT  5412  9.121932223471456  18.23935019673461
+  POINT  5413  12.7301955341313  15.59870120865399
+  POINT  5414  12.46808208164849  15.15416875358384
+  POINT  5415  10.66170303024074  13.81985063353565
+  POINT  5416  10.91914277660979  13.37360320785854
+  POINT  5417  11.43075873813842  13.37311649985818
+  POINT  5418  11.68774535289223  13.8200824382397
+  POINT  5419  -4.294356920184748  24.84106161932534
+  POINT  5420  -3.788433699542313  24.84070001560085
+  POINT  5421  -4.041727076734903  25.28149014781243
+  POINT  5422  -4.547087477993811  24.40041071780754
+  POINT  5423  -3.535574036554005  24.40029544465575
+  POINT  5424  -3.788414856257005  23.96059220506871
+  POINT  5425  -4.293926130446284  23.96024864672396
+  POINT  5426  -13.52905046638359  17.80348872203954
+  POINT  5427  -13.79175767275845  17.36796966650665
+  POINT  5428  -13.52076421705971  16.92688909198984
+  POINT  5429  -13.00252392740061  17.80282689423603
+  POINT  5430  -12.998413866338  16.9234253011904
+  POINT  5431  -12.7404339170757  17.36292962737342
+  POINT  5432  -14.02979306030074  15.16474248285489
+  POINT  5433  -14.55273569758199  15.16992825407098
+  POINT  5434  -14.03639819104111  16.04943470346083
+  POINT  5435  -14.56179397742396  16.05410844354104
+  POINT  5436  -13.77224846434048  15.60568723673743
+  POINT  5437  -14.82036732248942  15.61339039057769
+  POINT  5438  -15.08744403037848  16.05749240373201
+  POINT  5439  -16.2090642477196  17.81010190909618
+  POINT  5440  -15.93239653765298  17.37709080090277
+  POINT  5441  -16.75104577713385  17.80975889004021
+  POINT  5442  -17.29733902574828  17.80237948696045
+  POINT  5443  -17.82900832379805  17.79250699444906
+  POINT  5444  -18.125149458915  17.3358334365596
+  POINT  5445  -17.74265051816197  16.90620584174569
+  POINT  5446  -17.02043915652885  17.36861046666035
+  POINT  5447  -17.24542039534538  16.92123752482653
+  POINT  5448  -16.69912714673096  16.9286169279063
+  POINT  5449  -6.088630944097952  30.61808470458812
+  POINT  5450  -5.83075607699084  30.16946420465471
+  POINT  5451  -5.321476310829926  30.16725940981392
+  POINT  5452  -5.068073995839905  30.61330986323137
+  POINT  5453  -5.324237322301012  31.06128512670801
+  POINT  5454  -5.835924560406232  31.06356111209442
+  POINT  5455  -7.109843760575517  30.62477446137646
+  POINT  5456  -7.369526571375625  31.07527433075212
+  POINT  5457  -8.131410593699739  30.63279557430232
+  POINT  5458  -7.880480933021181  31.07974846151187
+  POINT  5459  -7.872056536659996  30.1821803785594
+  POINT  5460  -7.361674108531002  30.17880955550542
+  POINT  5461  -7.613368185284306  29.73274317704884
+  POINT  5462  -7.859855589284646  28.39452247461595
+  POINT  5463  -8.117653318329905  28.84163918972367
+  POINT  5464  -7.097783486965113  28.83658188443342
+  POINT  5465  -7.355184427237546  29.28425727165385
+  POINT  5466  -7.865566855366541  29.28762809470784
+  POINT  5467  -6.840628617274074  28.38986724165644
+  POINT  5468  -6.584305157135041  27.94375243992971
+  POINT  5469  -7.602700719593607  27.94780783183896
+  POINT  5470  -7.345760498175617  27.50220836892409
+  POINT  5471  -7.350228227628744  28.39242754653586
+  POINT  5472  -6.836865316533313  27.50054699198497
+  POINT  5473  -8.859668248791966  36.47820331889234
+  POINT  5474  -9.192245205163893  36.13326199675004
+  POINT  5475  -8.926778614439051  35.64424337939984
+  POINT  5476  -8.395990026835449  36.56035920049054
+  POINT  5477  -8.152789553234477  36.06385683741578
+  POINT  5478  -8.404917802902107  35.59893930067572
+  POINT  5479  -9.445446661180085  34.74868923560489
+  POINT  5480  -9.928438211384101  34.70959839015399
+  POINT  5481  -9.1855200421729  34.27056920744505
+  POINT  5482  -10.20212715258456  34.27925189416473
+  POINT  5483  -9.94558386098727  33.81809877026199
+  POINT  5484  -9.431469769528404  33.80794915972277
+  POINT  5485  -6.972437622679337  37.78020738278309
+  POINT  5486  -7.24426854141284  37.26861594573647
+  POINT  5487  -7.793216463077668  37.97434844713221
+  POINT  5488  -7.792711074552729  37.37441972564716
+  POINT  5489  -7.321637197370867  38.17042362703923
+  POINT  5490  -7.678418548302079  38.46731947176784
+  POINT  5491  2.770028761860395  7.135494617296446
+  POINT  5492  2.513285031132556  6.678759478210158
+  POINT  5493  3.271742031244156  6.237332593188722
+  POINT  5494  3.531281269795326  6.691994135932626
+  POINT  5495  3.278350744254242  7.139721415732282
+  POINT  5496  0.2485632276968463  6.187417834842025
+  POINT  5497  0.7487077343841402  6.190600158863577
+  POINT  5498  0.9957603933355736  5.733872218386605
+  POINT  5499  -3.852233976253672e-08  5.724801600288686
+  POINT  5500  0.7430348919708534  5.261285636016535
+  POINT  5501  0.2485630875716218  5.254593871040265
+  POINT  5502  -15.61382878159145  16.05886928995985
+  POINT  5503  -16.1437233016679  16.05345044312521
+  POINT  5504  -16.40287428664322  16.49110410761176
+  POINT  5505  -15.63614367756524  16.93957798060823
+  POINT  5506  -15.35525543652598  16.4995873429232
+  POINT  5507  -16.17789304782668  16.93847704944558
+  POINT  5508  1.997790912210466  5.756661433504865
+  POINT  5509  2.253497865964841  6.221058560377475
+  POINT  5510  2.760974614335455  6.228080964163087
+  POINT  5511  3.011954866076441  5.77963167535604
+  POINT  5512  2.242930314799657  5.302108943711701
+  POINT  5513  4.543058481172607  4.904216705369631
+  POINT  5514  4.288462587269439  5.349885195959473
+  POINT  5515  4.803481147968283  5.359455913919637
+  POINT  5516  3.775381101729453  5.34176464589557
+  POINT  5517  4.285157939400719  4.447239361033324
+  POINT  5518  3.759704530313033  4.444818867162756
+  POINT  5519  5.325944699989877  6.259861521617189
+  POINT  5520  5.843828725284497  6.255309577026809
+  POINT  5521  6.104985755684442  5.803539343166328
+  POINT  5522  5.838134749720831  5.370250903544328
+  POINT  5523  5.065599245593544  5.809767091465639
+  POINT  5524  5.320195139496712  5.364098600875796
+  POINT  5525  -4.802971484868761  13.39198497902312
+  POINT  5526  -4.296500513511889  13.39272959833429
+  POINT  5527  -5.057585608825249  12.94868562370967
+  POINT  5528  -6.335879478904616  10.72095926303271
+  POINT  5529  -6.079388369501457  11.1680208620888
+  POINT  5530  -6.84062880750044  11.61013355490421
+  POINT  5531  -7.097783541825249  11.16341899720847
+  POINT  5532  -6.331860502614183  11.61209385769366
+  POINT  5533  -5.823064997821714  11.61413559838683
+  POINT  5534  -6.341449844176644  9.827318953093449
+  POINT  5535  -6.08863052415921  9.381915881388753
+  POINT  5536  -6.346618173319224  8.933222069708673
+  POINT  5537  -2.273750259397786  11.62081619889232
+  POINT  5538  -2.526574075491812  12.06542620246332
+  POINT  5539  -2.27331255849431  12.50912509652447
+  POINT  5540  -2.779144893594244  12.50876127782604
+  POINT  5541  -1.767930060637219  12.50939986568534
+  POINT  5542  -1.51542042791521  12.06591801877112
+  POINT  5543  -2.020500878739651  12.95273494104806
+  POINT  5544  -7.369525954258662  8.924726485537136
+  POINT  5545  -7.629644265520056  8.473224777180157
+  POINT  5546  -6.606300873029995  8.482722239581177
+  POINT  5547  -6.86610443150657  8.032890912771032
+  POINT  5548  -6.859007304548753  8.928198671389605
+  POINT  5549  -7.109843254547891  9.375226315664634
+  POINT  5550  -7.380362326127036  8.024529817709622
+  POINT  5551  -2.525426847734203  13.83692324382117
+  POINT  5552  -2.272480651437661  14.27823799621374
+  POINT  5553  -1.767382702124846  14.27830445157146
+  POINT  5554  -1.514941488764452  13.83735499817217
+  POINT  5555  -1.767575303258722  13.39510772470642
+  POINT  5556  -2.272957801115813  13.39483295554556
+  POINT  5557  -2.778352423215133  13.39455046016281
+  POINT  5558  -1.767492689297242  23.96146211472275
+  POINT  5559  -2.020306154315385  23.52210437322497
+  POINT  5560  -1.263131319383013  23.08451873173783
+  POINT  5561  -1.01019165252415  23.52275060399421
+  POINT  5562  -1.768522078044251  23.08392505665697
+  POINT  5563  -1.262295067277426  24.84067058321086
+  POINT  5564  -1.514809979329161  24.40061412421192
+  POINT  5565  -0.7575089425560693  23.96190261348339
+  POINT  5566  -0.5049284856589678  24.40077541610661
+  POINT  5567  -0.7573634011608242  24.84063535307396
+  POINT  5568  -1.262539691533465  23.96159225924151
+  POINT  5569  -4.549022158760552  26.16510835246748
+  POINT  5570  -4.295100786789511  25.72310771361495
+  POINT  5571  -3.789177566147076  25.72274610989047
+  POINT  5572  -3.5366863417954  26.16386152627678
+  POINT  5573  -3.790057654638633  26.60644962266168
+  POINT  5574  -4.296500374351382  26.60727063581498
+  POINT  5575  10.92066954525162  16.91793455038633
+  POINT  5576  10.40486332046374  16.91768071485232
+  POINT  5577  10.40472607340097  16.03513246006513
+  POINT  5578  10.91930146715205  16.03530284192124
+  POINT  5579  10.66209384858155  15.5935783467344
+  POINT  5580  12.47199488428663  16.03898490629723
+  POINT  5581  12.99157927565469  16.04165158150828
+  POINT  5582  12.99841407818347  16.92342518505589
+  POINT  5583  12.47539865640488  16.92143962440089
+  POINT  5584  13.25572899738372  16.48539904153639
+  POINT  5585  11.95273125070042  16.03712579643803
+  POINT  5586  11.43576030048511  16.03598289401182
+  POINT  5587  11.69364019254794  15.59489163101673
+  POINT  5588  11.17839252530453  16.47753700734255
+  POINT  5589  11.43712837858468  16.91861460247691
+  POINT  5590  11.95613502281867  16.91958051454169
+  POINT  5591  12.21411499222381  16.48007616929232
+  POINT  5592  11.95093625080717  15.15244834498486
+  POINT  5593  11.43396530059186  15.15130544255865
+  POINT  5594  11.43270011507272  14.26415543114492
+  POINT  5595  11.94630659667062  14.26478916362155
+  POINT  5596  12.20840718969241  14.71058256512575
+  POINT  5597  9.122219499790404  16.47724514251171
+  POINT  5598  9.377742734846787  16.91780907858158
+  POINT  5599  9.890905171317794  16.91769162950407
+  POINT  5600  10.14797554282553  16.47686786990372
+  POINT  5601  9.890767924255025  16.03514337471688
+  POINT  5602  10.91783758504318  14.26368304084108
+  POINT  5603  10.40540174398959  14.26408496861366
+  POINT  5604  10.40452737681125  15.15066267039869
+  POINT  5605  10.91910277056232  15.15083305225481
+  POINT  5606  11.17639882882156  14.70838976622293
+  POINT  5607  10.14864614667206  14.70832398270322
+  POINT  5608  9.89163722469128  15.15106927718282
+  POINT  5609  3.51170272767204  4.885646738160905
+  POINT  5610  3.243367337511309  4.435819617914195
+  POINT  5611  2.748276492019028  5.323513767621375
+  POINT  5612  2.490019357650945  4.85524266500267
+  POINT  5613  3.259043908927729  5.332765396647009
+  POINT  5614  2.734686977480409  4.405829547072493
+  POINT  5615  -3.031723722491756  12.95196238977117
+  POINT  5616  -3.284985239489258  12.50826349571002
+  POINT  5617  -4.044006831271692  12.95064364330777
+  POINT  5618  -3.790057750626966  13.39355056268168
+  POINT  5619  -3.284192769110147  13.39405267804679
+  POINT  5620  -3.792541619613724  11.61935880772859
+  POINT  5621  -3.538866240419825  12.0643618281409
+  POINT  5622  -3.791445069317336  12.50756294008603
+  POINT  5623  -4.297887832202258  12.50674197573865
+  POINT  5624  -6.851155057129612  9.824663480890202
+  POINT  5625  -6.593280296468273  10.27328393246655
+  POINT  5626  -7.355184359388906  10.7157436666423
+  POINT  5627  -7.613367931970085  10.26725782144039
+  POINT  5628  -7.36167370683952  9.821191295037732
+  POINT  5629  -6.845584691857582  10.71830379082946
+  POINT  5630  -1.76803668438193  11.62082851212063
+  POINT  5631  -2.021045203387837  11.17585468985119
+  POINT  5632  -1.767940287819996  10.72933527995718
+  POINT  5633  -1.262715371905262  11.62095650973
+  POINT  5634  -1.010161141140113  11.17580760248892
+  POINT  5635  -1.262535223830214  10.72890573157164
+  POINT  5636  9.378288957212938  16.03556981048882
+  POINT  5637  8.866491063323762  16.03593616844507
+  POINT  5638  8.611811472818843  15.5950426706727
+  POINT  5639  8.867790365254811  15.15257222445195
+  POINT  5640  9.379158257649195  15.15149571295476
+  POINT  5641  9.635039487788383  15.59383440065023
+  POINT  5642  -4.299837112326497  11.6184558241427
+  POINT  5643  -4.047052661692318  11.17415335935438
+  POINT  5644  -4.301274150604154  10.72795380427197
+  POINT  5645  -5.062470509557039  11.17165648927523
+  POINT  5646  -4.809681860827208  10.72679960182707
+  POINT  5647  -4.805074905311793  12.50557281219472
+  POINT  5648  -5.312210919980426  12.50443575694401
+  POINT  5649  -4.552513143357436  12.06249210897299
+  POINT  5650  -5.567618673700705  12.05976576971038
+  POINT  5651  -4.807024185436029  11.61728666059878
+  POINT  5652  -5.315146540587978  11.61569277410551
 
 END POINTS LIST
 
@@ -1403,669 +5665,2765 @@ END POINTS LIST
 
 BEGIN MESH STRUCTURE DESCRIPTION
 
-CONVEX 0    'GT_PK(2,2)'      181  364  142  365  366  161
-CONVEX 1    'GT_PK(2,2)'      180  367  181  368  369  3
-CONVEX 2    'GT_PK(2,2)'      180  367  181  370  365  161
-CONVEX 3    'GT_PK(2,2)'      358  371  359  372  373  4
-CONVEX 4    'GT_PK(2,2)'      360  374  359  375  373  4
-CONVEX 5    'GT_PK(2,2)'      350  376  360  377  378  361
-CONVEX 6    'GT_PK(2,2)'      127  379  108  380  381  128
-CONVEX 7    'GT_PK(2,2)'      127  379  108  382  383  107
-CONVEX 8    'GT_PK(2,2)'      182  384  201  385  386  2
-CONVEX 9    'GT_PK(2,2)'      141  387  142  388  389  122
-CONVEX 10    'GT_PK(2,2)'      141  387  142  390  366  161
-CONVEX 11    'GT_PK(2,2)'      17  391  8  392  393  7
-CONVEX 12    'GT_PK(2,2)'      325  394  309  395  396  326
-CONVEX 13    'GT_PK(2,2)'      354  397  341  398  399  353
-CONVEX 14    'GT_PK(2,2)'      39  400  55  401  402  40
-CONVEX 15    'GT_PK(2,2)'      39  403  25  401  404  40
-CONVEX 16    'GT_PK(2,2)'      71  405  55  406  407  72
-CONVEX 17    'GT_PK(2,2)'      316  408  317  409  410  331
-CONVEX 18    'GT_PK(2,2)'      356  411  346  412  413  357
-CONVEX 19    'GT_PK(2,2)'      87  414  86  415  416  69
-CONVEX 20    'GT_PK(2,2)'      89  417  108  418  383  107
-CONVEX 21    'GT_PK(2,2)'      89  419  71  420  406  72
-CONVEX 22    'GT_PK(2,2)'      109  421  108  422  381  128
-CONVEX 23    'GT_PK(2,2)'      126  423  127  424  382  107
-CONVEX 24    'GT_PK(2,2)'      163  425  162  426  427  143
-CONVEX 25    'GT_PK(2,2)'      163  425  162  428  429  2
-CONVEX 26    'GT_PK(2,2)'      163  430  182  428  385  2
-CONVEX 27    'GT_PK(2,2)'      191  431  211  432  433  210
-CONVEX 28    'GT_PK(2,2)'      191  434  190  435  436  1
-CONVEX 29    'GT_PK(2,2)'      191  434  190  432  437  210
-CONVEX 30    'GT_PK(2,2)'      136  438  155  439  440  135
-CONVEX 31    'GT_PK(2,2)'      149  441  130  442  443  150
-CONVEX 32    'GT_PK(2,2)'      131  444  130  445  443  150
-CONVEX 33    'GT_PK(2,2)'      15  446  6  447  448  5
-CONVEX 34    'GT_PK(2,2)'      18  449  17  450  451  30
-CONVEX 35    'GT_PK(2,2)'      18  452  9  453  454  0
-CONVEX 36    'GT_PK(2,2)'      18  455  8  453  456  0
-CONVEX 37    'GT_PK(2,2)'      18  449  17  455  391  8
-CONVEX 38    'GT_PK(2,2)'      363  457  362  458  459  352
-CONVEX 39    'GT_PK(2,2)'      351  460  362  461  459  352
-CONVEX 40    'GT_PK(2,2)'      351  462  338  463  464  350
-CONVEX 41    'GT_PK(2,2)'      351  463  350  465  377  361
-CONVEX 42    'GT_PK(2,2)'      351  460  362  465  466  361
-CONVEX 43    'GT_PK(2,2)'      339  467  325  468  469  324
-CONVEX 44    'GT_PK(2,2)'      339  470  338  468  471  324
-CONVEX 45    'GT_PK(2,2)'      339  472  351  473  461  352
-CONVEX 46    'GT_PK(2,2)'      339  472  351  470  462  338
-CONVEX 47    'GT_PK(2,2)'      340  474  341  475  399  353
-CONVEX 48    'GT_PK(2,2)'      340  476  339  477  473  352
-CONVEX 49    'GT_PK(2,2)'      340  476  339  478  467  325
-CONVEX 50    'GT_PK(2,2)'      340  474  341  479  480  326
-CONVEX 51    'GT_PK(2,2)'      340  478  325  479  395  326
-CONVEX 52    'GT_PK(2,2)'      340  481  363  475  482  353
-CONVEX 53    'GT_PK(2,2)'      340  481  363  477  458  352
-CONVEX 54    'GT_PK(2,2)'      278  483  259  484  485  258
-CONVEX 55    'GT_PK(2,2)'      276  486  257  487  488  256
-CONVEX 56    'GT_PK(2,2)'      347  489  358  490  491  357
-CONVEX 57    'GT_PK(2,2)'      347  492  346  490  413  357
-CONVEX 58    'GT_PK(2,2)'      337  493  338  494  464  350
-CONVEX 59    'GT_PK(2,2)'      308  495  325  496  469  324
-CONVEX 60    'GT_PK(2,2)'      308  495  325  497  394  309
-CONVEX 61    'GT_PK(2,2)'      291  498  309  499  500  292
-CONVEX 62    'GT_PK(2,2)'      291  501  308  498  497  309
-CONVEX 63    'GT_PK(2,2)'      291  501  308  502  503  290
-CONVEX 64    'GT_PK(2,2)'      197  504  216  505  506  196
-CONVEX 65    'GT_PK(2,2)'      197  507  178  508  509  198
-CONVEX 66    'GT_PK(2,2)'      171  510  190  511  436  1
-CONVEX 67    'GT_PK(2,2)'      64  512  81  513  514  80
-CONVEX 68    'GT_PK(2,2)'      19  515  9  516  517  10
-CONVEX 69    'GT_PK(2,2)'      19  518  18  515  452  9
-CONVEX 70    'GT_PK(2,2)'      24  519  39  520  521  38
-CONVEX 71    'GT_PK(2,2)'      24  519  39  522  403  25
-CONVEX 72    'GT_PK(2,2)'      54  523  39  524  400  55
-CONVEX 73    'GT_PK(2,2)'      54  525  71  524  405  55
-CONVEX 74    'GT_PK(2,2)'      54  523  39  526  521  38
-CONVEX 75    'GT_PK(2,2)'      54  527  53  526  528  38
-CONVEX 76    'GT_PK(2,2)'      315  529  316  530  531  299
-CONVEX 77    'GT_PK(2,2)'      343  532  344  533  534  331
-CONVEX 78    'GT_PK(2,2)'      343  535  316  533  409  331
-CONVEX 79    'GT_PK(2,2)'      300  536  316  537  531  299
-CONVEX 80    'GT_PK(2,2)'      300  536  316  538  408  317
-CONVEX 81    'GT_PK(2,2)'      123  539  124  540  541  104
-CONVEX 82    'GT_PK(2,2)'      123  539  124  542  543  143
-CONVEX 83    'GT_PK(2,2)'      123  544  162  542  427  143
-CONVEX 84    'GT_PK(2,2)'      70  545  53  546  547  69
-CONVEX 85    'GT_PK(2,2)'      70  548  87  546  415  69
-CONVEX 86    'GT_PK(2,2)'      70  549  54  545  527  53
-CONVEX 87    'GT_PK(2,2)'      70  549  54  550  525  71
-CONVEX 88    'GT_PK(2,2)'      106  551  126  552  553  125
-CONVEX 89    'GT_PK(2,2)'      106  551  126  554  424  107
-CONVEX 90    'GT_PK(2,2)'      105  555  86  556  557  104
-CONVEX 91    'GT_PK(2,2)'      105  558  87  555  414  86
-CONVEX 92    'GT_PK(2,2)'      105  559  124  556  541  104
-CONVEX 93    'GT_PK(2,2)'      105  560  106  558  561  87
-CONVEX 94    'GT_PK(2,2)'      105  559  124  562  563  125
-CONVEX 95    'GT_PK(2,2)'      105  560  106  562  552  125
-CONVEX 96    'GT_PK(2,2)'      179  564  178  565  509  198
-CONVEX 97    'GT_PK(2,2)'      56  566  73  567  568  57
-CONVEX 98    'GT_PK(2,2)'      56  569  55  570  402  40
-CONVEX 99    'GT_PK(2,2)'      56  569  55  571  407  72
-CONVEX 100    'GT_PK(2,2)'      56  566  73  571  572  72
-CONVEX 101    'GT_PK(2,2)'      90  573  109  574  421  108
-CONVEX 102    'GT_PK(2,2)'      90  575  89  576  420  72
-CONVEX 103    'GT_PK(2,2)'      90  575  89  574  417  108
-CONVEX 104    'GT_PK(2,2)'      90  577  73  576  572  72
-CONVEX 105    'GT_PK(2,2)'      187  578  167  579  580  168
-CONVEX 106    'GT_PK(2,2)'      116  581  136  582  439  135
-CONVEX 107    'GT_PK(2,2)'      116  581  136  583  584  117
-CONVEX 108    'GT_PK(2,2)'      154  585  153  586  587  173
-CONVEX 109    'GT_PK(2,2)'      154  588  155  589  440  135
-CONVEX 110    'GT_PK(2,2)'      172  590  153  591  587  173
-CONVEX 111    'GT_PK(2,2)'      172  592  171  593  511  1
-CONVEX 112    'GT_PK(2,2)'      264  594  245  595  596  244
-CONVEX 113    'GT_PK(2,2)'      298  597  297  598  599  314
-CONVEX 114    'GT_PK(2,2)'      298  600  315  598  601  314
-CONVEX 115    'GT_PK(2,2)'      298  602  281  603  604  299
-CONVEX 116    'GT_PK(2,2)'      298  600  315  603  530  299
-CONVEX 117    'GT_PK(2,2)'      202  605  182  606  384  201
-CONVEX 118    'GT_PK(2,2)'      144  607  163  608  426  143
-CONVEX 119    'GT_PK(2,2)'      144  609  124  610  563  125
-CONVEX 120    'GT_PK(2,2)'      144  609  124  608  543  143
-CONVEX 121    'GT_PK(2,2)'      215  611  216  612  506  196
-CONVEX 122    'GT_PK(2,2)'      215  613  195  612  614  196
-CONVEX 123    'GT_PK(2,2)'      99  615  81  616  617  82
-CONVEX 124    'GT_PK(2,2)'      99  618  118  619  620  117
-CONVEX 125    'GT_PK(2,2)'      35  621  36  622  623  23
-CONVEX 126    'GT_PK(2,2)'      35  621  36  624  625  50
-CONVEX 127    'GT_PK(2,2)'      100  626  118  627  628  119
-CONVEX 128    'GT_PK(2,2)'      100  629  99  630  616  82
-CONVEX 129    'GT_PK(2,2)'      100  629  99  626  618  118
-CONVEX 130    'GT_PK(2,2)'      137  631  136  632  584  117
-CONVEX 131    'GT_PK(2,2)'      137  633  118  632  620  117
-CONVEX 132    'GT_PK(2,2)'      74  634  73  635  568  57
-CONVEX 133    'GT_PK(2,2)'      74  636  75  637  638  92
-CONVEX 134    'GT_PK(2,2)'      148  639  167  640  580  168
-CONVEX 135    'GT_PK(2,2)'      148  641  149  640  642  168
-CONVEX 136    'GT_PK(2,2)'      93  643  75  644  645  76
-CONVEX 137    'GT_PK(2,2)'      93  643  75  646  638  92
-CONVEX 138    'GT_PK(2,2)'      46  647  45  648  649  61
-CONVEX 139    'GT_PK(2,2)'      46  650  62  648  651  61
-CONVEX 140    'GT_PK(2,2)'      46  650  62  652  653  47
-CONVEX 141    'GT_PK(2,2)'      327  654  354  655  397  341
-CONVEX 142    'GT_PK(2,2)'      327  655  341  656  480  326
-CONVEX 143    'GT_PK(2,2)'      217  657  218  658  659  198
-CONVEX 144    'GT_PK(2,2)'      217  660  197  658  508  198
-CONVEX 145    'GT_PK(2,2)'      217  660  197  661  504  216
-CONVEX 146    'GT_PK(2,2)'      200  662  180  663  368  3
-CONVEX 147    'GT_PK(2,2)'      200  664  220  663  665  3
-CONVEX 148    'GT_PK(2,2)'      238  666  257  667  668  258
-CONVEX 149    'GT_PK(2,2)'      238  669  259  667  485  258
-CONVEX 150    'GT_PK(2,2)'      238  670  239  669  671  259
-CONVEX 151    'GT_PK(2,2)'      277  672  257  673  668  258
-CONVEX 152    'GT_PK(2,2)'      277  674  276  672  486  257
-CONVEX 153    'GT_PK(2,2)'      277  675  278  673  484  258
-CONVEX 154    'GT_PK(2,2)'      277  675  278  676  677  296
-CONVEX 155    'GT_PK(2,2)'      236  678  255  679  680  256
-CONVEX 156    'GT_PK(2,2)'      236  681  217  682  661  216
-CONVEX 157    'GT_PK(2,2)'      275  683  276  684  487  256
-CONVEX 158    'GT_PK(2,2)'      275  685  255  684  680  256
-CONVEX 159    'GT_PK(2,2)'      275  686  294  683  687  276
-CONVEX 160    'GT_PK(2,2)'      275  686  294  688  689  293
-CONVEX 161    'GT_PK(2,2)'      209  690  229  691  692  210
-CONVEX 162    'GT_PK(2,2)'      209  693  189  694  695  208
-CONVEX 163    'GT_PK(2,2)'      209  696  190  691  437  210
-CONVEX 164    'GT_PK(2,2)'      209  693  189  696  697  190
-CONVEX 165    'GT_PK(2,2)'      334  698  347  699  492  346
-CONVEX 166    'GT_PK(2,2)'      345  700  356  701  411  346
-CONVEX 167    'GT_PK(2,2)'      345  702  355  700  703  356
-CONVEX 168    'GT_PK(2,2)'      349  704  337  705  494  350
-CONVEX 169    'GT_PK(2,2)'      349  706  360  707  374  359
-CONVEX 170    'GT_PK(2,2)'      349  705  350  706  376  360
-CONVEX 171    'GT_PK(2,2)'      349  708  336  704  709  337
-CONVEX 172    'GT_PK(2,2)'      323  710  338  711  471  324
-CONVEX 173    'GT_PK(2,2)'      323  712  337  710  493  338
-CONVEX 174    'GT_PK(2,2)'      307  713  308  714  503  290
-CONVEX 175    'GT_PK(2,2)'      307  713  308  715  496  324
-CONVEX 176    'GT_PK(2,2)'      307  716  323  715  711  324
-CONVEX 177    'GT_PK(2,2)'      307  716  323  717  718  306
-CONVEX 178    'GT_PK(2,2)'      272  719  291  720  502  290
-CONVEX 179    'GT_PK(2,2)'      169  721  149  722  442  150
-CONVEX 180    'GT_PK(2,2)'      169  721  149  723  642  168
-CONVEX 181    'GT_PK(2,2)'      22  724  35  725  726  34
-CONVEX 182    'GT_PK(2,2)'      22  724  35  727  622  23
-CONVEX 183    'GT_PK(2,2)'      63  728  62  729  653  47
-CONVEX 184    'GT_PK(2,2)'      63  728  62  730  731  79
-CONVEX 185    'GT_PK(2,2)'      63  730  79  732  733  80
-CONVEX 186    'GT_PK(2,2)'      63  734  64  732  513  80
-CONVEX 187    'GT_PK(2,2)'      21  735  12  736  737  11
-CONVEX 188    'GT_PK(2,2)'      21  738  33  739  740  34
-CONVEX 189    'GT_PK(2,2)'      21  741  22  739  725  34
-CONVEX 190    'GT_PK(2,2)'      21  741  22  735  742  12
-CONVEX 191    'GT_PK(2,2)'      49  743  35  744  726  34
-CONVEX 192    'GT_PK(2,2)'      49  743  35  745  624  50
-CONVEX 193    'GT_PK(2,2)'      330  746  315  747  529  316
-CONVEX 194    'GT_PK(2,2)'      330  748  343  747  535  316
-CONVEX 195    'GT_PK(2,2)'      330  746  315  749  601  314
-CONVEX 196    'GT_PK(2,2)'      88  750  70  751  548  87
-CONVEX 197    'GT_PK(2,2)'      88  752  106  751  561  87
-CONVEX 198    'GT_PK(2,2)'      88  750  70  753  550  71
-CONVEX 199    'GT_PK(2,2)'      88  752  106  754  554  107
-CONVEX 200    'GT_PK(2,2)'      88  755  89  754  418  107
-CONVEX 201    'GT_PK(2,2)'      88  755  89  753  419  71
-CONVEX 202    'GT_PK(2,2)'      159  756  179  757  564  178
-CONVEX 203    'GT_PK(2,2)'      129  758  110  759  760  130
-CONVEX 204    'GT_PK(2,2)'      129  761  148  762  763  128
-CONVEX 205    'GT_PK(2,2)'      129  764  109  762  422  128
-CONVEX 206    'GT_PK(2,2)'      129  758  110  764  765  109
-CONVEX 207    'GT_PK(2,2)'      129  766  149  759  441  130
-CONVEX 208    'GT_PK(2,2)'      129  761  148  766  641  149
-CONVEX 209    'GT_PK(2,2)'      111  767  131  768  444  130
-CONVEX 210    'GT_PK(2,2)'      111  769  110  768  760  130
-CONVEX 211    'GT_PK(2,2)'      111  769  110  770  771  92
-CONVEX 212    'GT_PK(2,2)'      111  772  93  770  646  92
-CONVEX 213    'GT_PK(2,2)'      91  773  90  774  573  109
-CONVEX 214    'GT_PK(2,2)'      91  775  110  776  771  92
-CONVEX 215    'GT_PK(2,2)'      91  775  110  774  765  109
-CONVEX 216    'GT_PK(2,2)'      91  777  74  776  637  92
-CONVEX 217    'GT_PK(2,2)'      91  773  90  778  577  73
-CONVEX 218    'GT_PK(2,2)'      91  777  74  778  634  73
-CONVEX 219    'GT_PK(2,2)'      97  779  79  780  733  80
-CONVEX 220    'GT_PK(2,2)'      97  781  96  779  782  79
-CONVEX 221    'GT_PK(2,2)'      114  783  133  784  785  113
-CONVEX 222    'GT_PK(2,2)'      114  786  95  784  787  113
-CONVEX 223    'GT_PK(2,2)'      114  786  95  788  789  96
-CONVEX 224    'GT_PK(2,2)'      132  790  133  791  785  113
-CONVEX 225    'GT_PK(2,2)'      263  792  264  793  595  244
-CONVEX 226    'GT_PK(2,2)'      263  794  262  795  796  281
-CONVEX 227    'GT_PK(2,2)'      282  797  281  798  604  299
-CONVEX 228    'GT_PK(2,2)'      282  799  264  800  801  283
-CONVEX 229    'GT_PK(2,2)'      282  802  263  797  795  281
-CONVEX 230    'GT_PK(2,2)'      282  802  263  799  792  264
-CONVEX 231    'GT_PK(2,2)'      282  803  300  800  804  283
-CONVEX 232    'GT_PK(2,2)'      282  803  300  798  537  299
-CONVEX 233    'GT_PK(2,2)'      261  805  279  806  807  260
-CONVEX 234    'GT_PK(2,2)'      243  808  263  809  793  244
-CONVEX 235    'GT_PK(2,2)'      243  808  263  810  794  262
-CONVEX 236    'GT_PK(2,2)'      221  811  202  812  606  201
-CONVEX 237    'GT_PK(2,2)'      221  813  240  814  815  222
-CONVEX 238    'GT_PK(2,2)'      221  811  202  814  816  222
-CONVEX 239    'GT_PK(2,2)'      156  817  136  818  438  155
-CONVEX 240    'GT_PK(2,2)'      156  819  175  818  820  155
-CONVEX 241    'GT_PK(2,2)'      156  821  137  817  631  136
-CONVEX 242    'GT_PK(2,2)'      192  822  191  823  431  211
-CONVEX 243    'GT_PK(2,2)'      192  822  191  824  435  1
-CONVEX 244    'GT_PK(2,2)'      192  825  172  824  593  1
-CONVEX 245    'GT_PK(2,2)'      192  825  172  826  591  173
-CONVEX 246    'GT_PK(2,2)'      174  827  154  828  586  173
-CONVEX 247    'GT_PK(2,2)'      174  827  154  829  588  155
-CONVEX 248    'GT_PK(2,2)'      174  830  175  829  820  155
-CONVEX 249    'GT_PK(2,2)'      214  831  215  832  613  195
-CONVEX 250    'GT_PK(2,2)'      214  831  215  833  834  234
-CONVEX 251    'GT_PK(2,2)'      98  835  81  836  514  80
-CONVEX 252    'GT_PK(2,2)'      98  837  99  835  615  81
-CONVEX 253    'GT_PK(2,2)'      98  838  97  836  780  80
-CONVEX 254    'GT_PK(2,2)'      98  837  99  839  619  117
-CONVEX 255    'GT_PK(2,2)'      98  840  116  839  583  117
-CONVEX 256    'GT_PK(2,2)'      98  838  97  840  841  116
-CONVEX 257    'GT_PK(2,2)'      52  842  68  843  844  67
-CONVEX 258    'GT_PK(2,2)'      83  845  66  846  847  67
-CONVEX 259    'GT_PK(2,2)'      83  848  100  849  630  82
-CONVEX 260    'GT_PK(2,2)'      83  845  66  849  850  82
-CONVEX 261    'GT_PK(2,2)'      51  851  66  852  853  50
-CONVEX 262    'GT_PK(2,2)'      51  854  36  855  856  37
-CONVEX 263    'GT_PK(2,2)'      51  854  36  852  625  50
-CONVEX 264    'GT_PK(2,2)'      51  851  66  857  847  67
-CONVEX 265    'GT_PK(2,2)'      51  858  52  855  859  37
-CONVEX 266    'GT_PK(2,2)'      51  858  52  857  843  67
-CONVEX 267    'GT_PK(2,2)'      103  860  102  861  862  85
-CONVEX 268    'GT_PK(2,2)'      121  863  102  864  865  120
-CONVEX 269    'GT_PK(2,2)'      121  866  141  867  388  122
-CONVEX 270    'GT_PK(2,2)'      121  868  103  867  869  122
-CONVEX 271    'GT_PK(2,2)'      121  868  103  863  860  102
-CONVEX 272    'GT_PK(2,2)'      58  870  74  871  635  57
-CONVEX 273    'GT_PK(2,2)'      58  870  74  872  636  75
-CONVEX 274    'GT_PK(2,2)'      29  873  17  874  451  30
-CONVEX 275    'GT_PK(2,2)'      60  875  45  876  649  61
-CONVEX 276    'GT_PK(2,2)'      60  877  77  878  879  76
-CONVEX 277    'GT_PK(2,2)'      60  877  77  876  880  61
-CONVEX 278    'GT_PK(2,2)'      94  881  95  882  787  113
-CONVEX 279    'GT_PK(2,2)'      94  883  93  884  644  76
-CONVEX 280    'GT_PK(2,2)'      94  885  77  884  879  76
-CONVEX 281    'GT_PK(2,2)'      94  885  77  881  886  95
-CONVEX 282    'GT_PK(2,2)'      41  887  56  888  570  40
-CONVEX 283    'GT_PK(2,2)'      41  887  56  889  567  57
-CONVEX 284    'GT_PK(2,2)'      28  890  27  891  892  15
-CONVEX 285    'GT_PK(2,2)'      28  893  29  894  895  43
-CONVEX 286    'GT_PK(2,2)'      14  896  15  897  447  5
-CONVEX 287    'GT_PK(2,2)'      14  898  27  896  892  15
-CONVEX 288    'GT_PK(2,2)'      31  899  45  900  901  30
-CONVEX 289    'GT_PK(2,2)'      31  902  46  899  647  45
-CONVEX 290    'GT_PK(2,2)'      31  903  18  900  450  30
-CONVEX 291    'GT_PK(2,2)'      31  904  19  903  518  18
-CONVEX 292    'GT_PK(2,2)'      311  905  327  906  907  328
-CONVEX 293    'GT_PK(2,2)'      311  908  294  909  689  293
-CONVEX 294    'GT_PK(2,2)'      342  910  329  911  912  328
-CONVEX 295    'GT_PK(2,2)'      342  913  327  914  654  354
-CONVEX 296    'GT_PK(2,2)'      342  913  327  911  907  328
-CONVEX 297    'GT_PK(2,2)'      237  915  217  916  657  218
-CONVEX 298    'GT_PK(2,2)'      237  917  238  918  666  257
-CONVEX 299    'GT_PK(2,2)'      237  917  238  916  919  218
-CONVEX 300    'GT_PK(2,2)'      237  920  236  915  681  217
-CONVEX 301    'GT_PK(2,2)'      237  918  257  921  488  256
-CONVEX 302    'GT_PK(2,2)'      237  920  236  921  679  256
-CONVEX 303    'GT_PK(2,2)'      199  922  218  923  659  198
-CONVEX 304    'GT_PK(2,2)'      199  924  179  923  565  198
-CONVEX 305    'GT_PK(2,2)'      199  924  179  925  926  180
-CONVEX 306    'GT_PK(2,2)'      199  927  200  925  662  180
-CONVEX 307    'GT_PK(2,2)'      219  928  239  929  930  220
-CONVEX 308    'GT_PK(2,2)'      219  931  238  928  670  239
-CONVEX 309    'GT_PK(2,2)'      219  932  200  929  664  220
-CONVEX 310    'GT_PK(2,2)'      219  931  238  933  919  218
-CONVEX 311    'GT_PK(2,2)'      219  934  199  933  922  218
-CONVEX 312    'GT_PK(2,2)'      219  934  199  932  927  200
-CONVEX 313    'GT_PK(2,2)'      312  935  329  936  912  328
-CONVEX 314    'GT_PK(2,2)'      312  937  311  936  906  328
-CONVEX 315    'GT_PK(2,2)'      312  937  311  938  908  294
-CONVEX 316    'GT_PK(2,2)'      235  939  236  940  682  216
-CONVEX 317    'GT_PK(2,2)'      235  939  236  941  678  255
-CONVEX 318    'GT_PK(2,2)'      235  942  215  940  611  216
-CONVEX 319    'GT_PK(2,2)'      235  942  215  943  834  234
-CONVEX 320    'GT_PK(2,2)'      235  944  254  943  945  234
-CONVEX 321    'GT_PK(2,2)'      235  944  254  941  946  255
-CONVEX 322    'GT_PK(2,2)'      265  947  264  948  801  283
-CONVEX 323    'GT_PK(2,2)'      265  947  264  949  594  245
-CONVEX 324    'GT_PK(2,2)'      333  950  334  951  699  346
-CONVEX 325    'GT_PK(2,2)'      333  952  345  951  701  346
-CONVEX 326    'GT_PK(2,2)'      332  953  317  954  410  331
-CONVEX 327    'GT_PK(2,2)'      332  955  318  953  956  317
-CONVEX 328    'GT_PK(2,2)'      332  957  344  954  534  331
-CONVEX 329    'GT_PK(2,2)'      332  958  333  955  959  318
-CONVEX 330    'GT_PK(2,2)'      332  958  333  960  952  345
-CONVEX 331    'GT_PK(2,2)'      332  961  355  957  962  344
-CONVEX 332    'GT_PK(2,2)'      332  960  345  961  702  355
-CONVEX 333    'GT_PK(2,2)'      335  963  334  964  698  347
-CONVEX 334    'GT_PK(2,2)'      335  965  336  966  967  321
-CONVEX 335    'GT_PK(2,2)'      322  968  323  969  718  306
-CONVEX 336    'GT_PK(2,2)'      322  968  323  970  712  337
-CONVEX 337    'GT_PK(2,2)'      322  971  336  972  967  321
-CONVEX 338    'GT_PK(2,2)'      322  971  336  970  709  337
-CONVEX 339    'GT_PK(2,2)'      250  973  270  974  975  251
-CONVEX 340    'GT_PK(2,2)'      289  976  307  977  714  290
-CONVEX 341    'GT_PK(2,2)'      289  976  307  978  717  306
-CONVEX 342    'GT_PK(2,2)'      305  979  322  980  972  321
-CONVEX 343    'GT_PK(2,2)'      305  979  322  981  969  306
-CONVEX 344    'GT_PK(2,2)'      274  982  275  983  685  255
-CONVEX 345    'GT_PK(2,2)'      274  984  254  983  946  255
-CONVEX 346    'GT_PK(2,2)'      274  982  275  985  688  293
-CONVEX 347    'GT_PK(2,2)'      274  985  293  986  987  292
-CONVEX 348    'GT_PK(2,2)'      273  988  291  989  499  292
-CONVEX 349    'GT_PK(2,2)'      273  990  272  988  719  291
-CONVEX 350    'GT_PK(2,2)'      273  991  274  989  986  292
-CONVEX 351    'GT_PK(2,2)'      273  991  274  992  984  254
-CONVEX 352    'GT_PK(2,2)'      170  993  169  994  722  150
-CONVEX 353    'GT_PK(2,2)'      170  993  169  995  996  189
-CONVEX 354    'GT_PK(2,2)'      170  997  171  998  510  190
-CONVEX 355    'GT_PK(2,2)'      170  995  189  998  697  190
-CONVEX 356    'GT_PK(2,2)'      188  999  189  1000  695  208
-CONVEX 357    'GT_PK(2,2)'      188  1001  169  999  996  189
-CONVEX 358    'GT_PK(2,2)'      188  1000  208  1002  1003  207
-CONVEX 359    'GT_PK(2,2)'      188  1004  187  1002  1005  207
-CONVEX 360    'GT_PK(2,2)'      188  1004  187  1006  579  168
-CONVEX 361    'GT_PK(2,2)'      188  1001  169  1006  723  168
-CONVEX 362    'GT_PK(2,2)'      48  1007  63  1008  734  64
-CONVEX 363    'GT_PK(2,2)'      48  1009  49  1008  1010  64
-CONVEX 364    'GT_PK(2,2)'      48  1011  33  1012  1013  47
-CONVEX 365    'GT_PK(2,2)'      48  1007  63  1012  729  47
-CONVEX 366    'GT_PK(2,2)'      48  1011  33  1014  740  34
-CONVEX 367    'GT_PK(2,2)'      48  1009  49  1014  744  34
-CONVEX 368    'GT_PK(2,2)'      20  1015  21  1016  736  11
-CONVEX 369    'GT_PK(2,2)'      20  1017  10  1016  1018  11
-CONVEX 370    'GT_PK(2,2)'      20  1019  19  1017  516  10
-CONVEX 371    'GT_PK(2,2)'      20  1015  21  1020  738  33
-CONVEX 372    'GT_PK(2,2)'      65  1021  49  1022  1010  64
-CONVEX 373    'GT_PK(2,2)'      65  1022  64  1023  512  81
-CONVEX 374    'GT_PK(2,2)'      65  1024  66  1025  853  50
-CONVEX 375    'GT_PK(2,2)'      65  1021  49  1025  745  50
-CONVEX 376    'GT_PK(2,2)'      65  1023  81  1026  617  82
-CONVEX 377    'GT_PK(2,2)'      65  1024  66  1026  850  82
-CONVEX 378    'GT_PK(2,2)'      139  1027  120  1028  1029  119
-CONVEX 379    'GT_PK(2,2)'      140  1030  139  1031  1032  159
-CONVEX 380    'GT_PK(2,2)'      140  1030  139  1033  1027  120
-CONVEX 381    'GT_PK(2,2)'      140  1034  121  1035  866  141
-CONVEX 382    'GT_PK(2,2)'      140  1034  121  1033  864  120
-CONVEX 383    'GT_PK(2,2)'      160  1036  159  1037  756  179
-CONVEX 384    'GT_PK(2,2)'      160  1038  180  1039  370  161
-CONVEX 385    'GT_PK(2,2)'      160  1037  179  1038  926  180
-CONVEX 386    'GT_PK(2,2)'      160  1040  140  1036  1031  159
-CONVEX 387    'GT_PK(2,2)'      160  1041  141  1039  390  161
-CONVEX 388    'GT_PK(2,2)'      160  1040  140  1041  1035  141
-CONVEX 389    'GT_PK(2,2)'      186  1042  187  1043  578  167
-CONVEX 390    'GT_PK(2,2)'      164  1044  144  1045  607  163
-CONVEX 391    'GT_PK(2,2)'      147  1046  127  1047  380  128
-CONVEX 392    'GT_PK(2,2)'      147  1048  148  1047  763  128
-CONVEX 393    'GT_PK(2,2)'      147  1048  148  1049  639  167
-CONVEX 394    'GT_PK(2,2)'      78  1050  95  1051  789  96
-CONVEX 395    'GT_PK(2,2)'      78  1052  77  1050  886  95
-CONVEX 396    'GT_PK(2,2)'      78  1051  96  1053  782  79
-CONVEX 397    'GT_PK(2,2)'      78  1054  62  1053  731  79
-CONVEX 398    'GT_PK(2,2)'      78  1054  62  1055  651  61
-CONVEX 399    'GT_PK(2,2)'      78  1052  77  1055  880  61
-CONVEX 400    'GT_PK(2,2)'      115  1056  116  1057  582  135
-CONVEX 401    'GT_PK(2,2)'      115  1058  114  1059  788  96
-CONVEX 402    'GT_PK(2,2)'      115  1060  97  1059  781  96
-CONVEX 403    'GT_PK(2,2)'      115  1060  97  1056  841  116
-CONVEX 404    'GT_PK(2,2)'      134  1061  133  1062  1063  153
-CONVEX 405    'GT_PK(2,2)'      134  1064  114  1061  783  133
-CONVEX 406    'GT_PK(2,2)'      134  1065  115  1064  1058  114
-CONVEX 407    'GT_PK(2,2)'      134  1065  115  1066  1057  135
-CONVEX 408    'GT_PK(2,2)'      134  1067  154  1066  589  135
-CONVEX 409    'GT_PK(2,2)'      134  1067  154  1062  585  153
-CONVEX 410    'GT_PK(2,2)'      151  1068  132  1069  1070  131
-CONVEX 411    'GT_PK(2,2)'      151  1069  131  1071  445  150
-CONVEX 412    'GT_PK(2,2)'      151  1072  170  1071  994  150
-CONVEX 413    'GT_PK(2,2)'      151  1072  170  1073  997  171
-CONVEX 414    'GT_PK(2,2)'      152  1074  172  1075  592  171
-CONVEX 415    'GT_PK(2,2)'      152  1076  151  1075  1073  171
-CONVEX 416    'GT_PK(2,2)'      152  1076  151  1077  1068  132
-CONVEX 417    'GT_PK(2,2)'      152  1077  132  1078  790  133
-CONVEX 418    'GT_PK(2,2)'      152  1078  133  1079  1063  153
-CONVEX 419    'GT_PK(2,2)'      152  1074  172  1079  590  153
-CONVEX 420    'GT_PK(2,2)'      242  1080  222  1081  1082  223
-CONVEX 421    'GT_PK(2,2)'      242  1083  261  1084  1085  262
-CONVEX 422    'GT_PK(2,2)'      242  1086  243  1081  1087  223
-CONVEX 423    'GT_PK(2,2)'      242  1086  243  1084  810  262
-CONVEX 424    'GT_PK(2,2)'      280  1088  261  1089  805  279
-CONVEX 425    'GT_PK(2,2)'      280  1090  298  1091  597  297
-CONVEX 426    'GT_PK(2,2)'      280  1089  279  1091  1092  297
-CONVEX 427    'GT_PK(2,2)'      280  1090  298  1093  602  281
-CONVEX 428    'GT_PK(2,2)'      280  1094  262  1093  796  281
-CONVEX 429    'GT_PK(2,2)'      280  1088  261  1094  1085  262
-CONVEX 430    'GT_PK(2,2)'      176  1095  156  1096  819  175
-CONVEX 431    'GT_PK(2,2)'      176  1097  195  1098  614  196
-CONVEX 432    'GT_PK(2,2)'      176  1096  175  1097  1099  195
-CONVEX 433    'GT_PK(2,2)'      252  1100  232  1101  1102  251
-CONVEX 434    'GT_PK(2,2)'      231  1103  232  1104  1102  251
-CONVEX 435    'GT_PK(2,2)'      231  1105  250  1104  974  251
-CONVEX 436    'GT_PK(2,2)'      212  1106  232  1107  1108  213
-CONVEX 437    'GT_PK(2,2)'      212  1109  192  1110  823  211
-CONVEX 438    'GT_PK(2,2)'      212  1111  231  1110  1112  211
-CONVEX 439    'GT_PK(2,2)'      212  1111  231  1106  1103  232
-CONVEX 440    'GT_PK(2,2)'      193  1113  174  1114  828  173
-CONVEX 441    'GT_PK(2,2)'      193  1115  212  1116  1107  213
-CONVEX 442    'GT_PK(2,2)'      193  1117  192  1114  826  173
-CONVEX 443    'GT_PK(2,2)'      193  1115  212  1117  1109  192
-CONVEX 444    'GT_PK(2,2)'      194  1118  214  1119  832  195
-CONVEX 445    'GT_PK(2,2)'      194  1120  175  1119  1099  195
-CONVEX 446    'GT_PK(2,2)'      194  1121  174  1120  830  175
-CONVEX 447    'GT_PK(2,2)'      194  1118  214  1122  1123  213
-CONVEX 448    'GT_PK(2,2)'      194  1124  193  1122  1116  213
-CONVEX 449    'GT_PK(2,2)'      194  1124  193  1121  1113  174
-CONVEX 450    'GT_PK(2,2)'      101  1125  102  1126  865  120
-CONVEX 451    'GT_PK(2,2)'      101  1126  120  1127  1029  119
-CONVEX 452    'GT_PK(2,2)'      101  1128  100  1127  627  119
-CONVEX 453    'GT_PK(2,2)'      101  1129  83  1128  848  100
-CONVEX 454    'GT_PK(2,2)'      59  1130  58  1131  872  75
-CONVEX 455    'GT_PK(2,2)'      59  1130  58  1132  1133  43
-CONVEX 456    'GT_PK(2,2)'      59  1131  75  1134  645  76
-CONVEX 457    'GT_PK(2,2)'      59  1135  60  1134  878  76
-CONVEX 458    'GT_PK(2,2)'      16  1136  29  1137  873  17
-CONVEX 459    'GT_PK(2,2)'      16  1138  15  1139  446  6
-CONVEX 460    'GT_PK(2,2)'      16  1140  28  1138  891  15
-CONVEX 461    'GT_PK(2,2)'      16  1140  28  1136  893  29
-CONVEX 462    'GT_PK(2,2)'      16  1137  17  1141  392  7
-CONVEX 463    'GT_PK(2,2)'      16  1139  6  1141  1142  7
-CONVEX 464    'GT_PK(2,2)'      44  1143  60  1144  875  45
-CONVEX 465    'GT_PK(2,2)'      44  1145  29  1146  895  43
-CONVEX 466    'GT_PK(2,2)'      44  1147  59  1146  1132  43
-CONVEX 467    'GT_PK(2,2)'      44  1147  59  1143  1135  60
-CONVEX 468    'GT_PK(2,2)'      44  1144  45  1148  901  30
-CONVEX 469    'GT_PK(2,2)'      44  1145  29  1148  874  30
-CONVEX 470    'GT_PK(2,2)'      112  1149  94  1150  882  113
-CONVEX 471    'GT_PK(2,2)'      112  1151  132  1150  791  113
-CONVEX 472    'GT_PK(2,2)'      112  1151  132  1152  1070  131
-CONVEX 473    'GT_PK(2,2)'      112  1149  94  1153  883  93
-CONVEX 474    'GT_PK(2,2)'      112  1154  111  1152  767  131
-CONVEX 475    'GT_PK(2,2)'      112  1154  111  1153  772  93
-CONVEX 476    'GT_PK(2,2)'      26  1155  41  1156  1157  27
-CONVEX 477    'GT_PK(2,2)'      26  1158  14  1159  1160  13
-CONVEX 478    'GT_PK(2,2)'      26  1158  14  1156  898  27
-CONVEX 479    'GT_PK(2,2)'      26  1155  41  1161  888  40
-CONVEX 480    'GT_PK(2,2)'      26  1162  25  1161  404  40
-CONVEX 481    'GT_PK(2,2)'      26  1159  13  1162  1163  25
-CONVEX 482    'GT_PK(2,2)'      42  1164  41  1165  1157  27
-CONVEX 483    'GT_PK(2,2)'      42  1166  28  1165  890  27
-CONVEX 484    'GT_PK(2,2)'      42  1164  41  1167  889  57
-CONVEX 485    'GT_PK(2,2)'      42  1168  58  1167  871  57
-CONVEX 486    'GT_PK(2,2)'      42  1168  58  1169  1133  43
-CONVEX 487    'GT_PK(2,2)'      42  1166  28  1169  894  43
-CONVEX 488    'GT_PK(2,2)'      310  1170  327  1171  656  326
-CONVEX 489    'GT_PK(2,2)'      310  1172  311  1170  905  327
-CONVEX 490    'GT_PK(2,2)'      310  1173  309  1171  396  326
-CONVEX 491    'GT_PK(2,2)'      310  1173  309  1174  500  292
-CONVEX 492    'GT_PK(2,2)'      310  1175  293  1174  987  292
-CONVEX 493    'GT_PK(2,2)'      310  1172  311  1175  909  293
-CONVEX 494    'GT_PK(2,2)'      313  1176  312  1177  935  329
-CONVEX 495    'GT_PK(2,2)'      295  1178  277  1179  676  296
-CONVEX 496    'GT_PK(2,2)'      295  1180  313  1179  1181  296
-CONVEX 497    'GT_PK(2,2)'      295  1180  313  1182  1176  312
-CONVEX 498    'GT_PK(2,2)'      295  1182  312  1183  938  294
-CONVEX 499    'GT_PK(2,2)'      295  1183  294  1184  687  276
-CONVEX 500    'GT_PK(2,2)'      295  1178  277  1184  674  276
-CONVEX 501    'GT_PK(2,2)'      284  1185  265  1186  948  283
-CONVEX 502    'GT_PK(2,2)'      284  1185  265  1187  1188  266
-CONVEX 503    'GT_PK(2,2)'      319  1189  333  1190  950  334
-CONVEX 504    'GT_PK(2,2)'      319  1191  302  1192  1193  318
-CONVEX 505    'GT_PK(2,2)'      319  1189  333  1192  959  318
-CONVEX 506    'GT_PK(2,2)'      227  1194  208  1195  1003  207
-CONVEX 507    'GT_PK(2,2)'      227  1196  226  1195  1197  207
-CONVEX 508    'GT_PK(2,2)'      246  1198  265  1199  1188  266
-CONVEX 509    'GT_PK(2,2)'      246  1200  247  1199  1201  266
-CONVEX 510    'GT_PK(2,2)'      246  1198  265  1202  949  245
-CONVEX 511    'GT_PK(2,2)'      246  1203  227  1200  1204  247
-CONVEX 512    'GT_PK(2,2)'      246  1205  226  1202  1206  245
-CONVEX 513    'GT_PK(2,2)'      246  1203  227  1205  1196  226
-CONVEX 514    'GT_PK(2,2)'      348  1207  335  1208  964  347
-CONVEX 515    'GT_PK(2,2)'      348  1209  358  1210  371  359
-CONVEX 516    'GT_PK(2,2)'      348  1208  347  1209  489  358
-CONVEX 517    'GT_PK(2,2)'      348  1207  335  1211  965  336
-CONVEX 518    'GT_PK(2,2)'      348  1212  349  1210  707  359
-CONVEX 519    'GT_PK(2,2)'      348  1212  349  1211  708  336
-CONVEX 520    'GT_PK(2,2)'      230  1213  211  1214  433  210
-CONVEX 521    'GT_PK(2,2)'      230  1215  229  1214  692  210
-CONVEX 522    'GT_PK(2,2)'      230  1216  231  1213  1112  211
-CONVEX 523    'GT_PK(2,2)'      230  1216  231  1217  1105  250
-CONVEX 524    'GT_PK(2,2)'      271  1218  289  1219  1220  270
-CONVEX 525    'GT_PK(2,2)'      271  1219  270  1221  975  251
-CONVEX 526    'GT_PK(2,2)'      271  1222  272  1223  720  290
-CONVEX 527    'GT_PK(2,2)'      271  1218  289  1223  977  290
-CONVEX 528    'GT_PK(2,2)'      271  1224  252  1221  1101  251
-CONVEX 529    'GT_PK(2,2)'      271  1224  252  1222  1225  272
-CONVEX 530    'GT_PK(2,2)'      288  1226  289  1227  1220  270
-CONVEX 531    'GT_PK(2,2)'      288  1226  289  1228  978  306
-CONVEX 532    'GT_PK(2,2)'      288  1229  305  1228  981  306
-CONVEX 533    'GT_PK(2,2)'      32  1230  20  1231  1020  33
-CONVEX 534    'GT_PK(2,2)'      32  1232  31  1233  902  46
-CONVEX 535    'GT_PK(2,2)'      32  1232  31  1234  904  19
-CONVEX 536    'GT_PK(2,2)'      32  1230  20  1234  1019  19
-CONVEX 537    'GT_PK(2,2)'      32  1231  33  1235  1013  47
-CONVEX 538    'GT_PK(2,2)'      32  1233  46  1235  652  47
-CONVEX 539    'GT_PK(2,2)'      206  1236  187  1237  1005  207
-CONVEX 540    'GT_PK(2,2)'      206  1238  186  1236  1042  187
-CONVEX 541    'GT_PK(2,2)'      206  1239  226  1237  1197  207
-CONVEX 542    'GT_PK(2,2)'      184  1240  204  1241  1242  185
-CONVEX 543    'GT_PK(2,2)'      145  1243  164  1244  1044  144
-CONVEX 544    'GT_PK(2,2)'      145  1245  126  1246  553  125
-CONVEX 545    'GT_PK(2,2)'      145  1244  144  1246  610  125
-CONVEX 546    'GT_PK(2,2)'      183  1247  163  1248  430  182
-CONVEX 547    'GT_PK(2,2)'      183  1249  164  1247  1045  163
-CONVEX 548    'GT_PK(2,2)'      183  1250  184  1249  1251  164
-CONVEX 549    'GT_PK(2,2)'      183  1252  202  1248  605  182
-CONVEX 550    'GT_PK(2,2)'      241  1253  240  1254  815  222
-CONVEX 551    'GT_PK(2,2)'      241  1255  242  1254  1080  222
-CONVEX 552    'GT_PK(2,2)'      241  1255  242  1256  1083  261
-CONVEX 553    'GT_PK(2,2)'      241  1253  240  1257  1258  260
-CONVEX 554    'GT_PK(2,2)'      241  1256  261  1257  806  260
-CONVEX 555    'GT_PK(2,2)'      177  1259  197  1260  505  196
-CONVEX 556    'GT_PK(2,2)'      177  1261  176  1260  1098  196
-CONVEX 557    'GT_PK(2,2)'      177  1259  197  1262  507  178
-CONVEX 558    'GT_PK(2,2)'      233  1263  252  1264  1100  232
-CONVEX 559    'GT_PK(2,2)'      233  1264  232  1265  1108  213
-CONVEX 560    'GT_PK(2,2)'      233  1266  214  1267  833  234
-CONVEX 561    'GT_PK(2,2)'      233  1266  214  1265  1123  213
-CONVEX 562    'GT_PK(2,2)'      253  1268  273  1269  990  272
-CONVEX 563    'GT_PK(2,2)'      253  1270  252  1269  1225  272
-CONVEX 564    'GT_PK(2,2)'      253  1268  273  1271  992  254
-CONVEX 565    'GT_PK(2,2)'      253  1272  233  1270  1263  252
-CONVEX 566    'GT_PK(2,2)'      253  1271  254  1273  945  234
-CONVEX 567    'GT_PK(2,2)'      253  1272  233  1273  1267  234
-CONVEX 568    'GT_PK(2,2)'      84  1274  101  1275  1125  102
-CONVEX 569    'GT_PK(2,2)'      84  1276  68  1277  844  67
-CONVEX 570    'GT_PK(2,2)'      84  1278  83  1277  846  67
-CONVEX 571    'GT_PK(2,2)'      84  1274  101  1278  1129  83
-CONVEX 572    'GT_PK(2,2)'      84  1276  68  1279  1280  85
-CONVEX 573    'GT_PK(2,2)'      84  1275  102  1279  862  85
-CONVEX 574    'GT_PK(2,2)'      301  1281  284  1282  1186  283
-CONVEX 575    'GT_PK(2,2)'      301  1281  284  1283  1284  302
-CONVEX 576    'GT_PK(2,2)'      301  1285  300  1282  804  283
-CONVEX 577    'GT_PK(2,2)'      301  1285  300  1286  538  317
-CONVEX 578    'GT_PK(2,2)'      301  1287  318  1286  956  317
-CONVEX 579    'GT_PK(2,2)'      301  1283  302  1287  1193  318
-CONVEX 580    'GT_PK(2,2)'      320  1288  335  1289  966  321
-CONVEX 581    'GT_PK(2,2)'      320  1288  335  1290  963  334
-CONVEX 582    'GT_PK(2,2)'      320  1291  319  1290  1190  334
-CONVEX 583    'GT_PK(2,2)'      228  1292  227  1293  1204  247
-CONVEX 584    'GT_PK(2,2)'      228  1294  209  1295  690  229
-CONVEX 585    'GT_PK(2,2)'      228  1294  209  1296  694  208
-CONVEX 586    'GT_PK(2,2)'      228  1292  227  1296  1194  208
-CONVEX 587    'GT_PK(2,2)'      269  1297  250  1298  973  270
-CONVEX 588    'GT_PK(2,2)'      269  1299  288  1298  1227  270
-CONVEX 589    'GT_PK(2,2)'      225  1300  206  1301  1239  226
-CONVEX 590    'GT_PK(2,2)'      225  1302  245  1303  596  244
-CONVEX 591    'GT_PK(2,2)'      225  1301  226  1302  1206  245
-CONVEX 592    'GT_PK(2,2)'      166  1304  147  1305  1049  167
-CONVEX 593    'GT_PK(2,2)'      166  1306  186  1305  1043  167
-CONVEX 594    'GT_PK(2,2)'      166  1306  186  1307  1308  185
-CONVEX 595    'GT_PK(2,2)'      203  1309  184  1310  1240  204
-CONVEX 596    'GT_PK(2,2)'      203  1311  183  1309  1250  184
-CONVEX 597    'GT_PK(2,2)'      203  1310  204  1312  1313  223
-CONVEX 598    'GT_PK(2,2)'      203  1311  183  1314  1252  202
-CONVEX 599    'GT_PK(2,2)'      203  1315  222  1312  1082  223
-CONVEX 600    'GT_PK(2,2)'      203  1314  202  1315  816  222
-CONVEX 601    'GT_PK(2,2)'      138  1316  137  1317  633  118
-CONVEX 602    'GT_PK(2,2)'      138  1317  118  1318  628  119
-CONVEX 603    'GT_PK(2,2)'      138  1319  139  1318  1028  119
-CONVEX 604    'GT_PK(2,2)'      157  1320  176  1321  1095  156
-CONVEX 605    'GT_PK(2,2)'      157  1322  177  1320  1261  176
-CONVEX 606    'GT_PK(2,2)'      157  1321  156  1323  821  137
-CONVEX 607    'GT_PK(2,2)'      157  1324  138  1323  1316  137
-CONVEX 608    'GT_PK(2,2)'      249  1325  269  1326  1297  250
-CONVEX 609    'GT_PK(2,2)'      249  1327  230  1328  1215  229
-CONVEX 610    'GT_PK(2,2)'      249  1327  230  1326  1217  250
-CONVEX 611    'GT_PK(2,2)'      287  1329  288  1330  1229  305
-CONVEX 612    'GT_PK(2,2)'      287  1331  269  1329  1299  288
-CONVEX 613    'GT_PK(2,2)'      224  1332  243  1333  1087  223
-CONVEX 614    'GT_PK(2,2)'      224  1334  204  1333  1313  223
-CONVEX 615    'GT_PK(2,2)'      224  1332  243  1335  809  244
-CONVEX 616    'GT_PK(2,2)'      224  1336  225  1335  1303  244
-CONVEX 617    'GT_PK(2,2)'      205  1337  206  1338  1238  186
-CONVEX 618    'GT_PK(2,2)'      205  1339  225  1337  1300  206
-CONVEX 619    'GT_PK(2,2)'      205  1338  186  1340  1308  185
-CONVEX 620    'GT_PK(2,2)'      205  1341  224  1339  1336  225
-CONVEX 621    'GT_PK(2,2)'      205  1342  204  1340  1242  185
-CONVEX 622    'GT_PK(2,2)'      205  1341  224  1342  1334  204
-CONVEX 623    'GT_PK(2,2)'      146  1343  166  1344  1304  147
-CONVEX 624    'GT_PK(2,2)'      146  1344  147  1345  1046  127
-CONVEX 625    'GT_PK(2,2)'      146  1346  126  1345  423  127
-CONVEX 626    'GT_PK(2,2)'      146  1347  145  1346  1245  126
-CONVEX 627    'GT_PK(2,2)'      165  1348  184  1349  1251  164
-CONVEX 628    'GT_PK(2,2)'      165  1350  145  1349  1243  164
-CONVEX 629    'GT_PK(2,2)'      165  1348  184  1351  1241  185
-CONVEX 630    'GT_PK(2,2)'      165  1352  166  1351  1307  185
-CONVEX 631    'GT_PK(2,2)'      165  1353  146  1350  1347  145
-CONVEX 632    'GT_PK(2,2)'      165  1353  146  1352  1343  166
-CONVEX 633    'GT_PK(2,2)'      158  1354  157  1355  1322  177
-CONVEX 634    'GT_PK(2,2)'      158  1356  159  1357  757  178
-CONVEX 635    'GT_PK(2,2)'      158  1355  177  1357  1262  178
-CONVEX 636    'GT_PK(2,2)'      158  1354  157  1358  1324  138
-CONVEX 637    'GT_PK(2,2)'      158  1359  139  1356  1032  159
-CONVEX 638    'GT_PK(2,2)'      158  1358  138  1359  1319  139
-CONVEX 639    'GT_PK(2,2)'      267  1360  247  1361  1201  266
-CONVEX 640    'GT_PK(2,2)'      248  1362  249  1363  1328  229
-CONVEX 641    'GT_PK(2,2)'      248  1364  267  1365  1360  247
-CONVEX 642    'GT_PK(2,2)'      248  1366  228  1363  1295  229
-CONVEX 643    'GT_PK(2,2)'      248  1366  228  1365  1293  247
-CONVEX 644    'GT_PK(2,2)'      268  1367  287  1368  1331  269
-CONVEX 645    'GT_PK(2,2)'      268  1369  248  1370  1364  267
-CONVEX 646    'GT_PK(2,2)'      268  1371  249  1368  1325  269
-CONVEX 647    'GT_PK(2,2)'      268  1369  248  1371  1362  249
-CONVEX 648    'GT_PK(2,2)'      303  1372  319  1373  1191  302
-CONVEX 649    'GT_PK(2,2)'      303  1374  320  1372  1291  319
-CONVEX 650    'GT_PK(2,2)'      286  1375  268  1376  1367  287
-CONVEX 651    'GT_PK(2,2)'      286  1375  268  1377  1370  267
-CONVEX 652    'GT_PK(2,2)'      304  1378  287  1379  1330  305
-CONVEX 653    'GT_PK(2,2)'      304  1380  303  1381  1374  320
-CONVEX 654    'GT_PK(2,2)'      304  1382  286  1378  1376  287
-CONVEX 655    'GT_PK(2,2)'      304  1382  286  1380  1383  303
-CONVEX 656    'GT_PK(2,2)'      304  1379  305  1384  980  321
-CONVEX 657    'GT_PK(2,2)'      304  1381  320  1384  1289  321
-CONVEX 658    'GT_PK(2,2)'      285  1385  286  1386  1383  303
-CONVEX 659    'GT_PK(2,2)'      285  1387  284  1388  1284  302
-CONVEX 660    'GT_PK(2,2)'      285  1386  303  1388  1373  302
-CONVEX 661    'GT_PK(2,2)'      285  1385  286  1389  1377  267
-CONVEX 662    'GT_PK(2,2)'      285  1387  284  1390  1187  266
-CONVEX 663    'GT_PK(2,2)'      285  1389  267  1390  1361  266
+CONVEX 0    GT_PK(2,2)      258  1447  259  1448  1449  293
+CONVEX 1    GT_PK(2,2)      25  1450  10  1451  1452  0
+CONVEX 2    GT_PK(2,2)      18  1453  17  1454  1455  36
+CONVEX 3    GT_PK(2,2)      1426  1456  1440  1457  1458  4
+CONVEX 4    GT_PK(2,2)      824  1459  823  1460  1461  863
+CONVEX 5    GT_PK(2,2)      824  1462  784  1459  1463  823
+CONVEX 6    GT_PK(2,2)      1058  1464  1020  1465  1466  1021
+CONVEX 7    GT_PK(2,2)      728  1467  767  1468  1469  768
+CONVEX 8    GT_PK(2,2)      395  1470  394  1471  1472  357
+CONVEX 9    GT_PK(2,2)      225  1473  258  1474  1447  259
+CONVEX 10    GT_PK(2,2)      160  1475  192  1476  1477  191
+CONVEX 11    GT_PK(2,2)      224  1478  192  1479  1477  191
+CONVEX 12    GT_PK(2,2)      224  1480  225  1481  1473  258
+CONVEX 13    GT_PK(2,2)      224  1480  225  1478  1482  192
+CONVEX 14    GT_PK(2,2)      216  1483  185  1484  1485  186
+CONVEX 15    GT_PK(2,2)      280  1486  281  1487  1488  247
+CONVEX 16    GT_PK(2,2)      280  1486  281  1489  1490  315
+CONVEX 17    GT_PK(2,2)      64  1491  65  1492  1493  88
+CONVEX 18    GT_PK(2,2)      6  1494  20  1495  1496  5
+CONVEX 19    GT_PK(2,2)      21  1497  6  1498  1494  20
+CONVEX 20    GT_PK(2,2)      21  1497  6  1499  1500  7
+CONVEX 21    GT_PK(2,2)      1428  1501  1442  1502  1503  1443
+CONVEX 22    GT_PK(2,2)      1408  1504  1426  1505  1506  1407
+CONVEX 23    GT_PK(2,2)      1373  1507  1396  1508  1509  1397
+CONVEX 24    GT_PK(2,2)      1431  1510  1430  1511  1512  1412
+CONVEX 25    GT_PK(2,2)      1431  1513  1445  1514  1515  1446
+CONVEX 26    GT_PK(2,2)      1431  1510  1430  1513  1516  1445
+CONVEX 27    GT_PK(2,2)      1218  1517  1185  1518  1519  1184
+CONVEX 28    GT_PK(2,2)      1218  1517  1185  1520  1521  1219
+CONVEX 29    GT_PK(2,2)      745  1522  705  1523  1524  3
+CONVEX 30    GT_PK(2,2)      745  1525  784  1523  1526  3
+CONVEX 31    GT_PK(2,2)      782  1527  743  1528  1529  744
+CONVEX 32    GT_PK(2,2)      782  1527  743  1530  1531  781
+CONVEX 33    GT_PK(2,2)      1165  1532  1130  1533  1534  1129
+CONVEX 34    GT_PK(2,2)      1262  1535  1229  1536  1537  1230
+CONVEX 35    GT_PK(2,2)      1164  1538  1198  1539  1540  1199
+CONVEX 36    GT_PK(2,2)      1164  1541  1165  1542  1533  1129
+CONVEX 37    GT_PK(2,2)      1164  1541  1165  1539  1543  1199
+CONVEX 38    GT_PK(2,2)      1232  1544  1198  1545  1540  1199
+CONVEX 39    GT_PK(2,2)      1232  1546  1231  1547  1548  1264
+CONVEX 40    GT_PK(2,2)      1232  1546  1231  1544  1549  1198
+CONVEX 41    GT_PK(2,2)      936  1550  937  1551  1552  975
+CONVEX 42    GT_PK(2,2)      316  1553  281  1554  1490  315
+CONVEX 43    GT_PK(2,2)      428  1555  429  1556  1557  467
+CONVEX 44    GT_PK(2,2)      319  1558  320  1559  1560  355
+CONVEX 45    GT_PK(2,2)      319  1561  354  1559  1562  355
+CONVEX 46    GT_PK(2,2)      1059  1563  1058  1564  1465  1021
+CONVEX 47    GT_PK(2,2)      706  1565  746  1566  1567  2
+CONVEX 48    GT_PK(2,2)      706  1565  746  1568  1569  747
+CONVEX 49    GT_PK(2,2)      706  1570  667  1566  1571  2
+CONVEX 50    GT_PK(2,2)      706  1572  668  1570  1573  667
+CONVEX 51    GT_PK(2,2)      1406  1574  1385  1575  1576  1407
+CONVEX 52    GT_PK(2,2)      1406  1577  1424  1578  1579  1405
+CONVEX 53    GT_PK(2,2)      1278  1580  1279  1581  1582  1247
+CONVEX 54    GT_PK(2,2)      1196  1583  1229  1584  1537  1230
+CONVEX 55    GT_PK(2,2)      806  1585  767  1586  1587  766
+CONVEX 56    GT_PK(2,2)      806  1588  845  1589  1590  846
+CONVEX 57    GT_PK(2,2)      806  1591  805  1586  1592  766
+CONVEX 58    GT_PK(2,2)      806  1591  805  1588  1593  845
+CONVEX 59    GT_PK(2,2)      727  1594  767  1595  1587  766
+CONVEX 60    GT_PK(2,2)      727  1596  728  1594  1467  767
+CONVEX 61    GT_PK(2,2)      807  1597  767  1598  1469  768
+CONVEX 62    GT_PK(2,2)      807  1599  806  1597  1585  767
+CONVEX 63    GT_PK(2,2)      807  1600  847  1601  1602  846
+CONVEX 64    GT_PK(2,2)      807  1599  806  1601  1589  846
+CONVEX 65    GT_PK(2,2)      403  1603  365  1604  1605  366
+CONVEX 66    GT_PK(2,2)      439  1606  478  1607  1608  477
+CONVEX 67    GT_PK(2,2)      325  1609  326  1610  1611  362
+CONVEX 68    GT_PK(2,2)      363  1612  326  1613  1614  327
+CONVEX 69    GT_PK(2,2)      363  1612  326  1615  1611  362
+CONVEX 70    GT_PK(2,2)      128  1616  158  1617  1618  157
+CONVEX 71    GT_PK(2,2)      189  1619  190  1620  1621  222
+CONVEX 72    GT_PK(2,2)      189  1619  190  1622  1623  158
+CONVEX 73    GT_PK(2,2)      189  1624  156  1625  1626  157
+CONVEX 74    GT_PK(2,2)      189  1622  158  1625  1618  157
+CONVEX 75    GT_PK(2,2)      255  1627  256  1628  1629  222
+CONVEX 76    GT_PK(2,2)      253  1630  252  1631  1632  219
+CONVEX 77    GT_PK(2,2)      253  1633  220  1631  1634  219
+CONVEX 78    GT_PK(2,2)      187  1635  220  1636  1634  219
+CONVEX 79    GT_PK(2,2)      291  1637  326  1638  1614  327
+CONVEX 80    GT_PK(2,2)      161  1639  160  1640  1475  192
+CONVEX 81    GT_PK(2,2)      131  1641  161  1642  1639  160
+CONVEX 82    GT_PK(2,2)      131  1643  104  1644  1645  132
+CONVEX 83    GT_PK(2,2)      131  1641  161  1644  1646  132
+CONVEX 84    GT_PK(2,2)      129  1647  128  1648  1616  158
+CONVEX 85    GT_PK(2,2)      223  1649  224  1650  1479  191
+CONVEX 86    GT_PK(2,2)      223  1651  256  1652  1629  222
+CONVEX 87    GT_PK(2,2)      223  1653  190  1650  1654  191
+CONVEX 88    GT_PK(2,2)      223  1653  190  1652  1621  222
+CONVEX 89    GT_PK(2,2)      127  1655  155  1656  1657  154
+CONVEX 90    GT_PK(2,2)      127  1658  126  1656  1659  154
+CONVEX 91    GT_PK(2,2)      127  1660  100  1658  1661  126
+CONVEX 92    GT_PK(2,2)      181  1662  182  1663  1664  152
+CONVEX 93    GT_PK(2,2)      246  1665  280  1666  1487  247
+CONVEX 94    GT_PK(2,2)      124  1667  99  1668  1669  98
+CONVEX 95    GT_PK(2,2)      125  1670  124  1671  1672  152
+CONVEX 96    GT_PK(2,2)      125  1670  124  1673  1667  99
+CONVEX 97    GT_PK(2,2)      125  1673  99  1674  1675  76
+CONVEX 98    GT_PK(2,2)      125  1676  100  1674  1677  76
+CONVEX 99    GT_PK(2,2)      125  1676  100  1678  1661  126
+CONVEX 100    GT_PK(2,2)      75  1679  53  1680  1681  98
+CONVEX 101    GT_PK(2,2)      75  1682  99  1680  1669  98
+CONVEX 102    GT_PK(2,2)      75  1682  99  1683  1675  76
+CONVEX 103    GT_PK(2,2)      217  1684  218  1685  1686  186
+CONVEX 104    GT_PK(2,2)      217  1687  216  1685  1484  186
+CONVEX 105    GT_PK(2,2)      217  1687  216  1688  1689  249
+CONVEX 106    GT_PK(2,2)      248  1690  216  1691  1689  249
+CONVEX 107    GT_PK(2,2)      248  1692  281  1693  1488  247
+CONVEX 108    GT_PK(2,2)      282  1694  316  1695  1696  317
+CONVEX 109    GT_PK(2,2)      282  1694  316  1697  1553  281
+CONVEX 110    GT_PK(2,2)      282  1698  248  1699  1691  249
+CONVEX 111    GT_PK(2,2)      282  1698  248  1697  1692  281
+CONVEX 112    GT_PK(2,2)      314  1700  280  1701  1489  315
+CONVEX 113    GT_PK(2,2)      12  1702  27  1703  1704  13
+CONVEX 114    GT_PK(2,2)      35  1705  56  1706  1707  34
+CONVEX 115    GT_PK(2,2)      79  1708  56  1709  1710  80
+CONVEX 116    GT_PK(2,2)      79  1711  34  1712  1713  55
+CONVEX 117    GT_PK(2,2)      79  1708  56  1711  1707  34
+CONVEX 118    GT_PK(2,2)      43  1714  25  1715  1716  44
+CONVEX 119    GT_PK(2,2)      43  1717  65  1715  1718  44
+CONVEX 120    GT_PK(2,2)      43  1719  64  1717  1491  65
+CONVEX 121    GT_PK(2,2)      22  1720  21  1721  1499  7
+CONVEX 122    GT_PK(2,2)      22  1722  8  1721  1723  7
+CONVEX 123    GT_PK(2,2)      22  1722  8  1724  1725  23
+CONVEX 124    GT_PK(2,2)      22  1724  23  1726  1727  41
+CONVEX 125    GT_PK(2,2)      1427  1728  1428  1729  1501  1442
+CONVEX 126    GT_PK(2,2)      1427  1730  1408  1731  1504  1426
+CONVEX 127    GT_PK(2,2)      1427  1728  1428  1732  1733  1409
+CONVEX 128    GT_PK(2,2)      1427  1730  1408  1732  1734  1409
+CONVEX 129    GT_PK(2,2)      1386  1735  1385  1736  1576  1407
+CONVEX 130    GT_PK(2,2)      1386  1737  1408  1736  1505  1407
+CONVEX 131    GT_PK(2,2)      885  1738  845  1739  1590  846
+CONVEX 132    GT_PK(2,2)      1193  1740  1192  1741  1742  1158
+CONVEX 133    GT_PK(2,2)      1429  1743  1428  1744  1502  1443
+CONVEX 134    GT_PK(2,2)      1391  1745  1390  1746  1747  1412
+CONVEX 135    GT_PK(2,2)      1248  1748  1279  1749  1582  1247
+CONVEX 136    GT_PK(2,2)      1183  1750  1149  1751  1752  1148
+CONVEX 137    GT_PK(2,2)      1183  1750  1149  1753  1754  1184
+CONVEX 138    GT_PK(2,2)      1187  1755  1188  1756  1757  1221
+CONVEX 139    GT_PK(2,2)      468  1758  429  1759  1557  467
+CONVEX 140    GT_PK(2,2)      470  1760  469  1761  1762  431
+CONVEX 141    GT_PK(2,2)      507  1763  508  1764  1765  546
+CONVEX 142    GT_PK(2,2)      507  1766  545  1764  1767  546
+CONVEX 143    GT_PK(2,2)      507  1768  470  1769  1760  469
+CONVEX 144    GT_PK(2,2)      507  1768  470  1763  1770  508
+CONVEX 145    GT_PK(2,2)      507  1771  468  1769  1772  469
+CONVEX 146    GT_PK(2,2)      704  1773  745  1774  1522  705
+CONVEX 147    GT_PK(2,2)      704  1773  745  1775  1776  744
+CONVEX 148    GT_PK(2,2)      585  1777  545  1778  1767  546
+CONVEX 149    GT_PK(2,2)      898  1779  937  1780  1781  938
+CONVEX 150    GT_PK(2,2)      783  1782  784  1783  1463  823
+CONVEX 151    GT_PK(2,2)      783  1784  745  1782  1525  784
+CONVEX 152    GT_PK(2,2)      783  1784  745  1785  1776  744
+CONVEX 153    GT_PK(2,2)      783  1786  782  1785  1528  744
+CONVEX 154    GT_PK(2,2)      783  1783  823  1787  1788  822
+CONVEX 155    GT_PK(2,2)      783  1786  782  1787  1789  822
+CONVEX 156    GT_PK(2,2)      1263  1790  1262  1791  1536  1230
+CONVEX 157    GT_PK(2,2)      1263  1792  1231  1791  1793  1230
+CONVEX 158    GT_PK(2,2)      1263  1792  1231  1794  1548  1264
+CONVEX 159    GT_PK(2,2)      897  1795  936  1796  1797  896
+CONVEX 160    GT_PK(2,2)      897  1795  936  1798  1550  937
+CONVEX 161    GT_PK(2,2)      897  1799  898  1800  1801  858
+CONVEX 162    GT_PK(2,2)      897  1799  898  1798  1779  937
+CONVEX 163    GT_PK(2,2)      818  1802  779  1803  1804  778
+CONVEX 164    GT_PK(2,2)      821  1805  820  1806  1807  781
+CONVEX 165    GT_PK(2,2)      821  1808  782  1809  1789  822
+CONVEX 166    GT_PK(2,2)      821  1808  782  1806  1530  781
+CONVEX 167    GT_PK(2,2)      940  1810  939  1811  1812  978
+CONVEX 168    GT_PK(2,2)      940  1810  939  1813  1814  900
+CONVEX 169    GT_PK(2,2)      902  1815  942  1816  1817  903
+CONVEX 170    GT_PK(2,2)      902  1815  942  1818  1819  941
+CONVEX 171    GT_PK(2,2)      976  1820  937  1821  1781  938
+CONVEX 172    GT_PK(2,2)      976  1820  937  1822  1552  975
+CONVEX 173    GT_PK(2,2)      352  1823  316  1824  1696  317
+CONVEX 174    GT_PK(2,2)      430  1825  392  1826  1827  429
+CONVEX 175    GT_PK(2,2)      430  1828  469  1829  1762  431
+CONVEX 176    GT_PK(2,2)      430  1830  468  1826  1758  429
+CONVEX 177    GT_PK(2,2)      430  1830  468  1828  1772  469
+CONVEX 178    GT_PK(2,2)      393  1831  430  1832  1829  431
+CONVEX 179    GT_PK(2,2)      393  1831  430  1833  1825  392
+CONVEX 180    GT_PK(2,2)      391  1834  392  1835  1827  429
+CONVEX 181    GT_PK(2,2)      391  1836  428  1837  1838  390
+CONVEX 182    GT_PK(2,2)      391  1836  428  1835  1555  429
+CONVEX 183    GT_PK(2,2)      391  1839  354  1837  1840  390
+CONVEX 184    GT_PK(2,2)      391  1834  392  1841  1842  355
+CONVEX 185    GT_PK(2,2)      391  1839  354  1841  1562  355
+CONVEX 186    GT_PK(2,2)      318  1843  319  1844  1845  284
+CONVEX 187    GT_PK(2,2)      318  1843  319  1846  1561  354
+CONVEX 188    GT_PK(2,2)      285  1847  319  1848  1558  320
+CONVEX 189    GT_PK(2,2)      285  1849  284  1850  1851  251
+CONVEX 190    GT_PK(2,2)      285  1847  319  1849  1845  284
+CONVEX 191    GT_PK(2,2)      707  1852  706  1853  1568  747
+CONVEX 192    GT_PK(2,2)      707  1852  706  1854  1572  668
+CONVEX 193    GT_PK(2,2)      786  1855  746  1856  1857  785
+CONVEX 194    GT_PK(2,2)      786  1855  746  1858  1569  747
+CONVEX 195    GT_PK(2,2)      1265  1859  1233  1860  1861  1234
+CONVEX 196    GT_PK(2,2)      1201  1862  1233  1863  1861  1234
+CONVEX 197    GT_PK(2,2)      1201  1862  1233  1864  1865  1200
+CONVEX 198    GT_PK(2,2)      1134  1866  1135  1867  1868  1099
+CONVEX 199    GT_PK(2,2)      1132  1869  1166  1870  1871  1131
+CONVEX 200    GT_PK(2,2)      1095  1872  1059  1873  1563  1058
+CONVEX 201    GT_PK(2,2)      948  1874  909  1875  1876  910
+CONVEX 202    GT_PK(2,2)      1103  1877  1138  1878  1879  1102
+CONVEX 203    GT_PK(2,2)      717  1880  756  1881  1882  757
+CONVEX 204    GT_PK(2,2)      717  1883  677  1884  1885  678
+CONVEX 205    GT_PK(2,2)      717  1880  756  1886  1887  716
+CONVEX 206    GT_PK(2,2)      717  1883  677  1886  1888  716
+CONVEX 207    GT_PK(2,2)      796  1889  756  1890  1882  757
+CONVEX 208    GT_PK(2,2)      796  1891  797  1890  1892  757
+CONVEX 209    GT_PK(2,2)      796  1891  797  1893  1894  836
+CONVEX 210    GT_PK(2,2)      796  1895  835  1893  1896  836
+CONVEX 211    GT_PK(2,2)      599  1897  559  1898  1899  598
+CONVEX 212    GT_PK(2,2)      759  1900  760  1901  1902  720
+CONVEX 213    GT_PK(2,2)      759  1903  719  1901  1904  720
+CONVEX 214    GT_PK(2,2)      718  1905  678  1906  1907  679
+CONVEX 215    GT_PK(2,2)      718  1908  719  1906  1909  679
+CONVEX 216    GT_PK(2,2)      718  1910  717  1911  1881  757
+CONVEX 217    GT_PK(2,2)      718  1910  717  1905  1884  678
+CONVEX 218    GT_PK(2,2)      721  1912  760  1913  1902  720
+CONVEX 219    GT_PK(2,2)      721  1914  681  1913  1915  720
+CONVEX 220    GT_PK(2,2)      721  1914  681  1916  1917  682
+CONVEX 221    GT_PK(2,2)      721  1918  761  1912  1919  760
+CONVEX 222    GT_PK(2,2)      680  1920  640  1921  1922  641
+CONVEX 223    GT_PK(2,2)      680  1923  681  1921  1924  641
+CONVEX 224    GT_PK(2,2)      680  1920  640  1925  1926  679
+CONVEX 225    GT_PK(2,2)      680  1923  681  1927  1915  720
+CONVEX 226    GT_PK(2,2)      680  1928  719  1925  1909  679
+CONVEX 227    GT_PK(2,2)      680  1928  719  1927  1904  720
+CONVEX 228    GT_PK(2,2)      1425  1929  1426  1930  1506  1407
+CONVEX 229    GT_PK(2,2)      1425  1931  1406  1930  1575  1407
+CONVEX 230    GT_PK(2,2)      1425  1931  1406  1932  1577  1424
+CONVEX 231    GT_PK(2,2)      1425  1929  1426  1933  1456  1440
+CONVEX 232    GT_PK(2,2)      1425  1933  1440  1934  1935  1439
+CONVEX 233    GT_PK(2,2)      1425  1932  1424  1934  1936  1439
+CONVEX 234    GT_PK(2,2)      1384  1937  1361  1938  1939  1385
+CONVEX 235    GT_PK(2,2)      1384  1940  1405  1941  1942  1383
+CONVEX 236    GT_PK(2,2)      1384  1943  1406  1940  1578  1405
+CONVEX 237    GT_PK(2,2)      1384  1943  1406  1938  1574  1385
+CONVEX 238    GT_PK(2,2)      971  1944  970  1945  1946  1009
+CONVEX 239    GT_PK(2,2)      932  1947  970  1948  1949  931
+CONVEX 240    GT_PK(2,2)      932  1950  971  1951  1952  933
+CONVEX 241    GT_PK(2,2)      932  1950  971  1947  1944  970
+CONVEX 242    GT_PK(2,2)      969  1953  970  1954  1949  931
+CONVEX 243    GT_PK(2,2)      969  1955  930  1954  1956  931
+CONVEX 244    GT_PK(2,2)      969  1955  930  1957  1958  968
+CONVEX 245    GT_PK(2,2)      895  1959  894  1960  1961  855
+CONVEX 246    GT_PK(2,2)      1197  1962  1231  1963  1793  1230
+CONVEX 247    GT_PK(2,2)      1197  1964  1196  1963  1584  1230
+CONVEX 248    GT_PK(2,2)      1197  1962  1231  1965  1549  1198
+CONVEX 249    GT_PK(2,2)      609  1966  610  1967  1968  649
+CONVEX 250    GT_PK(2,2)      241  1969  275  1970  1971  242
+CONVEX 251    GT_PK(2,2)      241  1972  274  1969  1973  275
+CONVEX 252    GT_PK(2,2)      29  1974  14  1975  1976  15
+CONVEX 253    GT_PK(2,2)      66  1977  44  1978  1979  45
+CONVEX 254    GT_PK(2,2)      66  1980  65  1977  1718  44
+CONVEX 255    GT_PK(2,2)      460  1981  459  1982  1983  498
+CONVEX 256    GT_PK(2,2)      276  1984  275  1985  1971  242
+CONVEX 257    GT_PK(2,2)      455  1986  454  1987  1988  416
+CONVEX 258    GT_PK(2,2)      455  1986  454  1989  1990  493
+CONVEX 259    GT_PK(2,2)      307  1991  306  1992  1993  342
+CONVEX 260    GT_PK(2,2)      310  1994  345  1995  1996  346
+CONVEX 261    GT_PK(2,2)      310  1997  276  1998  1984  275
+CONVEX 262    GT_PK(2,2)      417  1999  455  2000  1987  416
+CONVEX 263    GT_PK(2,2)      417  1999  455  2001  2002  456
+CONVEX 264    GT_PK(2,2)      417  2003  379  2000  2004  416
+CONVEX 265    GT_PK(2,2)      417  2003  379  2005  2006  380
+CONVEX 266    GT_PK(2,2)      343  2007  307  2008  2009  308
+CONVEX 267    GT_PK(2,2)      343  2007  307  2010  1992  342
+CONVEX 268    GT_PK(2,2)      343  2011  379  2010  2012  342
+CONVEX 269    GT_PK(2,2)      343  2011  379  2013  2006  380
+CONVEX 270    GT_PK(2,2)      339  2014  304  2015  2016  303
+CONVEX 271    GT_PK(2,2)      341  2017  306  2018  1993  342
+CONVEX 272    GT_PK(2,2)      726  2019  727  2020  1595  766
+CONVEX 273    GT_PK(2,2)      688  2021  727  2022  1596  728
+CONVEX 274    GT_PK(2,2)      628  2023  668  2024  2025  629
+CONVEX 275    GT_PK(2,2)      628  2023  668  2026  1573  667
+CONVEX 276    GT_PK(2,2)      589  2027  628  2028  2024  629
+CONVEX 277    GT_PK(2,2)      589  2027  628  2029  2030  588
+CONVEX 278    GT_PK(2,2)      364  2031  363  2032  1613  327
+CONVEX 279    GT_PK(2,2)      364  2031  363  2033  2034  401
+CONVEX 280    GT_PK(2,2)      328  2035  364  2036  2037  365
+CONVEX 281    GT_PK(2,2)      328  2035  364  2038  2032  327
+CONVEX 282    GT_PK(2,2)      329  2039  365  2040  1605  366
+CONVEX 283    GT_PK(2,2)      329  2041  330  2040  2042  366
+CONVEX 284    GT_PK(2,2)      329  2043  328  2039  2036  365
+CONVEX 285    GT_PK(2,2)      329  2043  328  2044  2045  293
+CONVEX 286    GT_PK(2,2)      367  2046  330  2047  2042  366
+CONVEX 287    GT_PK(2,2)      601  2048  640  2049  1922  641
+CONVEX 288    GT_PK(2,2)      562  2050  522  2051  2052  561
+CONVEX 289    GT_PK(2,2)      562  2053  601  2051  2054  561
+CONVEX 290    GT_PK(2,2)      523  2055  562  2056  2050  522
+CONVEX 291    GT_PK(2,2)      523  2055  562  2057  2058  563
+CONVEX 292    GT_PK(2,2)      521  2059  522  2060  2052  561
+CONVEX 293    GT_PK(2,2)      397  2061  398  2062  2063  360
+CONVEX 294    GT_PK(2,2)      437  2064  398  2065  2066  399
+CONVEX 295    GT_PK(2,2)      361  2067  398  2068  2063  360
+CONVEX 296    GT_PK(2,2)      361  2069  325  2070  1610  362
+CONVEX 297    GT_PK(2,2)      361  2070  362  2071  2072  399
+CONVEX 298    GT_PK(2,2)      361  2067  398  2071  2066  399
+CONVEX 299    GT_PK(2,2)      286  2073  322  2074  2075  321
+CONVEX 300    GT_PK(2,2)      359  2076  397  2077  2078  396
+CONVEX 301    GT_PK(2,2)      359  2076  397  2079  2062  360
+CONVEX 302    GT_PK(2,2)      358  2080  321  2081  2082  357
+CONVEX 303    GT_PK(2,2)      358  2083  322  2080  2075  321
+CONVEX 304    GT_PK(2,2)      358  2084  395  2081  1471  357
+CONVEX 305    GT_PK(2,2)      358  2085  359  2083  2086  322
+CONVEX 306    GT_PK(2,2)      358  2084  395  2087  2088  396
+CONVEX 307    GT_PK(2,2)      358  2085  359  2087  2077  396
+CONVEX 308    GT_PK(2,2)      402  2089  403  2090  1603  365
+CONVEX 309    GT_PK(2,2)      402  2091  364  2092  2033  401
+CONVEX 310    GT_PK(2,2)      402  2091  364  2090  2037  365
+CONVEX 311    GT_PK(2,2)      400  2093  439  2094  2095  401
+CONVEX 312    GT_PK(2,2)      400  2096  363  2094  2034  401
+CONVEX 313    GT_PK(2,2)      400  2097  362  2098  2072  399
+CONVEX 314    GT_PK(2,2)      400  2096  363  2097  1615  362
+CONVEX 315    GT_PK(2,2)      438  2099  439  2100  1607  477
+CONVEX 316    GT_PK(2,2)      438  2101  437  2102  2065  399
+CONVEX 317    GT_PK(2,2)      438  2103  400  2102  2098  399
+CONVEX 318    GT_PK(2,2)      438  2103  400  2099  2093  439
+CONVEX 319    GT_PK(2,2)      101  2104  77  2105  2106  102
+CONVEX 320    GT_PK(2,2)      101  2107  129  2105  2108  102
+CONVEX 321    GT_PK(2,2)      101  2107  129  2109  1647  128
+CONVEX 322    GT_PK(2,2)      188  2110  189  2111  1624  156
+CONVEX 323    GT_PK(2,2)      188  2112  187  2111  2113  156
+CONVEX 324    GT_PK(2,2)      188  2112  187  2114  1635  220
+CONVEX 325    GT_PK(2,2)      254  2115  253  2116  1633  220
+CONVEX 326    GT_PK(2,2)      254  2117  255  2118  2119  289
+CONVEX 327    GT_PK(2,2)      287  2120  253  2121  1630  252
+CONVEX 328    GT_PK(2,2)      287  2122  286  2121  2123  252
+CONVEX 329    GT_PK(2,2)      287  2122  286  2124  2073  322
+CONVEX 330    GT_PK(2,2)      292  2125  291  2126  1638  327
+CONVEX 331    GT_PK(2,2)      292  2127  258  2128  1448  293
+CONVEX 332    GT_PK(2,2)      292  2129  328  2128  2045  293
+CONVEX 333    GT_PK(2,2)      292  2129  328  2126  2038  327
+CONVEX 334    GT_PK(2,2)      257  2130  224  2131  1481  258
+CONVEX 335    GT_PK(2,2)      257  2132  292  2131  2127  258
+CONVEX 336    GT_PK(2,2)      257  2132  292  2133  2125  291
+CONVEX 337    GT_PK(2,2)      257  2133  291  2134  2135  256
+CONVEX 338    GT_PK(2,2)      257  2136  223  2134  1651  256
+CONVEX 339    GT_PK(2,2)      257  2136  223  2130  1649  224
+CONVEX 340    GT_PK(2,2)      290  2137  325  2138  1609  326
+CONVEX 341    GT_PK(2,2)      290  2139  291  2138  1637  326
+CONVEX 342    GT_PK(2,2)      290  2137  325  2140  2141  289
+CONVEX 343    GT_PK(2,2)      290  2142  255  2140  2119  289
+CONVEX 344    GT_PK(2,2)      290  2142  255  2143  1627  256
+CONVEX 345    GT_PK(2,2)      290  2139  291  2143  2135  256
+CONVEX 346    GT_PK(2,2)      103  2144  131  2145  1643  104
+CONVEX 347    GT_PK(2,2)      103  2146  77  2147  2106  102
+CONVEX 348    GT_PK(2,2)      103  2148  54  2146  2149  77
+CONVEX 349    GT_PK(2,2)      130  2150  129  2151  2108  102
+CONVEX 350    GT_PK(2,2)      130  2152  131  2153  1642  160
+CONVEX 351    GT_PK(2,2)      130  2154  103  2151  2147  102
+CONVEX 352    GT_PK(2,2)      130  2154  103  2152  2144  131
+CONVEX 353    GT_PK(2,2)      159  2155  190  2156  1654  191
+CONVEX 354    GT_PK(2,2)      159  2157  130  2158  2150  129
+CONVEX 355    GT_PK(2,2)      159  2155  190  2159  1623  158
+CONVEX 356    GT_PK(2,2)      159  2158  129  2159  1648  158
+CONVEX 357    GT_PK(2,2)      159  2160  160  2156  1476  191
+CONVEX 358    GT_PK(2,2)      159  2157  130  2160  2153  160
+CONVEX 359    GT_PK(2,2)      214  2161  183  2162  2163  182
+CONVEX 360    GT_PK(2,2)      214  2164  246  2165  1666  247
+CONVEX 361    GT_PK(2,2)      184  2166  183  2167  2168  154
+CONVEX 362    GT_PK(2,2)      184  2169  216  2170  1483  185
+CONVEX 363    GT_PK(2,2)      184  2171  155  2167  1657  154
+CONVEX 364    GT_PK(2,2)      184  2170  185  2171  2172  155
+CONVEX 365    GT_PK(2,2)      153  2173  183  2174  2163  182
+CONVEX 366    GT_PK(2,2)      153  2174  182  2175  1664  152
+CONVEX 367    GT_PK(2,2)      153  2176  126  2177  1659  154
+CONVEX 368    GT_PK(2,2)      153  2173  183  2177  2168  154
+CONVEX 369    GT_PK(2,2)      153  2178  125  2175  1671  152
+CONVEX 370    GT_PK(2,2)      153  2178  125  2176  1678  126
+CONVEX 371    GT_PK(2,2)      151  2179  181  2180  1663  152
+CONVEX 372    GT_PK(2,2)      151  2181  124  2180  1672  152
+CONVEX 373    GT_PK(2,2)      73  2182  52  2183  2184  33
+CONVEX 374    GT_PK(2,2)      250  2185  217  2186  1684  218
+CONVEX 375    GT_PK(2,2)      250  2187  284  2188  1851  251
+CONVEX 376    GT_PK(2,2)      250  2186  218  2188  2189  251
+CONVEX 377    GT_PK(2,2)      250  2185  217  2190  1688  249
+CONVEX 378    GT_PK(2,2)      215  2191  248  2192  1690  216
+CONVEX 379    GT_PK(2,2)      215  2193  184  2192  2169  216
+CONVEX 380    GT_PK(2,2)      215  2193  184  2194  2166  183
+CONVEX 381    GT_PK(2,2)      215  2195  214  2194  2161  183
+CONVEX 382    GT_PK(2,2)      215  2191  248  2196  1693  247
+CONVEX 383    GT_PK(2,2)      215  2195  214  2196  2165  247
+CONVEX 384    GT_PK(2,2)      279  2197  314  2198  1700  280
+CONVEX 385    GT_PK(2,2)      279  2199  246  2200  2201  245
+CONVEX 386    GT_PK(2,2)      279  2199  246  2198  1665  280
+CONVEX 387    GT_PK(2,2)      279  2202  278  2200  2203  245
+CONVEX 388    GT_PK(2,2)      279  2202  278  2204  2205  313
+CONVEX 389    GT_PK(2,2)      279  2197  314  2204  2206  313
+CONVEX 390    GT_PK(2,2)      11  2207  25  2208  1451  0
+CONVEX 391    GT_PK(2,2)      57  2209  35  2210  1705  56
+CONVEX 392    GT_PK(2,2)      57  2210  56  2211  1710  80
+CONVEX 393    GT_PK(2,2)      57  2212  17  2213  1455  36
+CONVEX 394    GT_PK(2,2)      57  2209  35  2212  2214  17
+CONVEX 395    GT_PK(2,2)      105  2215  79  2216  1709  80
+CONVEX 396    GT_PK(2,2)      105  2215  79  2217  2218  104
+CONVEX 397    GT_PK(2,2)      105  2219  106  2216  2220  80
+CONVEX 398    GT_PK(2,2)      105  2217  104  2221  1645  132
+CONVEX 399    GT_PK(2,2)      78  2222  79  2223  2218  104
+CONVEX 400    GT_PK(2,2)      78  2224  103  2223  2145  104
+CONVEX 401    GT_PK(2,2)      78  2224  103  2225  2148  54
+CONVEX 402    GT_PK(2,2)      78  2225  54  2226  2227  55
+CONVEX 403    GT_PK(2,2)      78  2222  79  2226  1712  55
+CONVEX 404    GT_PK(2,2)      162  2228  161  2229  1646  132
+CONVEX 405    GT_PK(2,2)      302  2230  268  2231  2232  303
+CONVEX 406    GT_PK(2,2)      37  2233  18  2234  1454  36
+CONVEX 407    GT_PK(2,2)      37  2235  19  2233  2236  18
+CONVEX 408    GT_PK(2,2)      201  2237  202  2238  2239  234
+CONVEX 409    GT_PK(2,2)      201  2240  233  2238  2241  234
+CONVEX 410    GT_PK(2,2)      87  2242  64  2243  1492  88
+CONVEX 411    GT_PK(2,2)      139  2244  168  2245  2246  169
+CONVEX 412    GT_PK(2,2)      9  2247  8  2248  1725  23
+CONVEX 413    GT_PK(2,2)      24  2249  43  2250  1714  25
+CONVEX 414    GT_PK(2,2)      24  2250  25  2251  1450  10
+CONVEX 415    GT_PK(2,2)      24  2252  9  2251  2253  10
+CONVEX 416    GT_PK(2,2)      24  2252  9  2254  2248  23
+CONVEX 417    GT_PK(2,2)      42  2255  23  2256  1727  41
+CONVEX 418    GT_PK(2,2)      42  2257  43  2258  1719  64
+CONVEX 419    GT_PK(2,2)      42  2259  24  2255  2254  23
+CONVEX 420    GT_PK(2,2)      42  2259  24  2257  2249  43
+CONVEX 421    GT_PK(2,2)      39  2260  21  2261  1498  20
+CONVEX 422    GT_PK(2,2)      1441  2262  1427  2263  1729  1442
+CONVEX 423    GT_PK(2,2)      1441  2264  1426  2265  1457  4
+CONVEX 424    GT_PK(2,2)      1441  2262  1427  2264  1731  1426
+CONVEX 425    GT_PK(2,2)      1387  2266  1408  2267  1734  1409
+CONVEX 426    GT_PK(2,2)      1387  2268  1386  2266  1737  1408
+CONVEX 427    GT_PK(2,2)      1337  2269  1309  2270  2271  1336
+CONVEX 428    GT_PK(2,2)      1337  2269  1309  2272  2273  1310
+CONVEX 429    GT_PK(2,2)      1362  2274  1361  2275  1939  1385
+CONVEX 430    GT_PK(2,2)      1362  2276  1386  2275  1735  1385
+CONVEX 431    GT_PK(2,2)      1362  2274  1361  2277  2278  1336
+CONVEX 432    GT_PK(2,2)      1362  2279  1337  2277  2270  1336
+CONVEX 433    GT_PK(2,2)      1076  2280  1075  2281  2282  1112
+CONVEX 434    GT_PK(2,2)      1000  2283  1001  2284  2285  1039
+CONVEX 435    GT_PK(2,2)      1040  2286  1001  2287  2285  1039
+CONVEX 436    GT_PK(2,2)      1040  2288  1078  2289  2290  1041
+CONVEX 437    GT_PK(2,2)      927  2291  966  2292  2293  928
+CONVEX 438    GT_PK(2,2)      927  2294  888  2292  2295  928
+CONVEX 439    GT_PK(2,2)      927  2296  887  2294  2297  888
+CONVEX 440    GT_PK(2,2)      925  2298  924  2299  2300  885
+CONVEX 441    GT_PK(2,2)      1415  2301  1433  2302  2303  1434
+CONVEX 442    GT_PK(2,2)      1415  2304  1414  2301  2305  1433
+CONVEX 443    GT_PK(2,2)      1432  2306  1414  2307  2305  1433
+CONVEX 444    GT_PK(2,2)      1222  2308  1188  2309  2310  1189
+CONVEX 445    GT_PK(2,2)      1222  2308  1188  2311  1757  1221
+CONVEX 446    GT_PK(2,2)      1348  2312  1373  2313  1508  1397
+CONVEX 447    GT_PK(2,2)      1347  2314  1348  2315  2312  1373
+CONVEX 448    GT_PK(2,2)      1347  2314  1348  2316  2317  1320
+CONVEX 449    GT_PK(2,2)      1416  2318  1395  2319  2320  1417
+CONVEX 450    GT_PK(2,2)      1371  2321  1345  2322  2323  1346
+CONVEX 451    GT_PK(2,2)      1371  2321  1345  2324  2325  1370
+CONVEX 452    GT_PK(2,2)      1372  2326  1347  2327  2328  1346
+CONVEX 453    GT_PK(2,2)      1372  2326  1347  2329  2315  1373
+CONVEX 454    GT_PK(2,2)      1372  2330  1371  2327  2322  1346
+CONVEX 455    GT_PK(2,2)      1372  2330  1371  2331  2332  1395
+CONVEX 456    GT_PK(2,2)      1372  2329  1373  2333  1507  1396
+CONVEX 457    GT_PK(2,2)      1372  2333  1396  2334  2335  1417
+CONVEX 458    GT_PK(2,2)      1372  2331  1395  2334  2320  1417
+CONVEX 459    GT_PK(2,2)      1344  2336  1369  2337  2338  1370
+CONVEX 460    GT_PK(2,2)      1344  2339  1345  2337  2325  1370
+CONVEX 461    GT_PK(2,2)      1344  2340  1343  2341  2342  1316
+CONVEX 462    GT_PK(2,2)      1344  2340  1343  2336  2343  1369
+CONVEX 463    GT_PK(2,2)      1317  2344  1344  2345  2341  1316
+CONVEX 464    GT_PK(2,2)      1317  2344  1344  2346  2339  1345
+CONVEX 465    GT_PK(2,2)      1444  2347  1429  2348  1744  1443
+CONVEX 466    GT_PK(2,2)      1444  2349  1430  2350  1516  1445
+CONVEX 467    GT_PK(2,2)      1444  2347  1429  2349  2351  1430
+CONVEX 468    GT_PK(2,2)      1410  2352  1428  2353  1733  1409
+CONVEX 469    GT_PK(2,2)      1410  2354  1429  2352  1743  1428
+CONVEX 470    GT_PK(2,2)      1368  2355  1369  2356  2357  1392
+CONVEX 471    GT_PK(2,2)      1368  2358  1391  2356  2359  1392
+CONVEX 472    GT_PK(2,2)      1368  2360  1343  2355  2343  1369
+CONVEX 473    GT_PK(2,2)      1413  2361  1432  2362  2306  1414
+CONVEX 474    GT_PK(2,2)      1413  2363  1431  2364  1511  1412
+CONVEX 475    GT_PK(2,2)      1413  2365  1391  2364  1746  1412
+CONVEX 476    GT_PK(2,2)      1413  2362  1414  2366  2367  1392
+CONVEX 477    GT_PK(2,2)      1413  2365  1391  2366  2359  1392
+CONVEX 478    GT_PK(2,2)      1413  2363  1431  2368  1514  1446
+CONVEX 479    GT_PK(2,2)      1413  2361  1432  2368  2369  1446
+CONVEX 480    GT_PK(2,2)      1113  2370  1112  2371  2372  1148
+CONVEX 481    GT_PK(2,2)      1113  2373  1149  2371  1752  1148
+CONVEX 482    GT_PK(2,2)      1113  2374  1076  2370  2281  1112
+CONVEX 483    GT_PK(2,2)      1150  2375  1185  2376  1519  1184
+CONVEX 484    GT_PK(2,2)      1150  2377  1149  2376  1754  1184
+CONVEX 485    GT_PK(2,2)      1079  2378  1078  2379  2380  1115
+CONVEX 486    GT_PK(2,2)      1079  2381  1116  2379  2382  1115
+CONVEX 487    GT_PK(2,2)      1079  2381  1116  2383  2384  1080
+CONVEX 488    GT_PK(2,2)      1079  2378  1078  2385  2290  1041
+CONVEX 489    GT_PK(2,2)      1280  2386  1248  2387  1748  1279
+CONVEX 490    GT_PK(2,2)      1280  2388  1309  2387  2389  1279
+CONVEX 491    GT_PK(2,2)      1280  2388  1309  2390  2273  1310
+CONVEX 492    GT_PK(2,2)      1217  2391  1183  2392  2393  1216
+CONVEX 493    GT_PK(2,2)      1217  2394  1218  2395  2396  1250
+CONVEX 494    GT_PK(2,2)      1217  2394  1218  2397  1518  1184
+CONVEX 495    GT_PK(2,2)      1217  2391  1183  2397  1753  1184
+CONVEX 496    GT_PK(2,2)      1253  2398  1284  2399  2400  1285
+CONVEX 497    GT_PK(2,2)      1253  2401  1252  2398  2402  1284
+CONVEX 498    GT_PK(2,2)      1311  2403  1312  2404  2405  1339
+CONVEX 499    GT_PK(2,2)      1311  2406  1282  2403  2407  1312
+CONVEX 500    GT_PK(2,2)      1153  2408  1187  2409  2410  1152
+CONVEX 501    GT_PK(2,2)      1153  2408  1187  2411  1755  1188
+CONVEX 502    GT_PK(2,2)      1154  2412  1188  2413  2310  1189
+CONVEX 503    GT_PK(2,2)      1154  2414  1153  2412  2411  1188
+CONVEX 504    GT_PK(2,2)      1220  2415  1187  2416  1756  1221
+CONVEX 505    GT_PK(2,2)      1220  2417  1253  2416  2418  1221
+CONVEX 506    GT_PK(2,2)      1220  2419  1252  2420  2421  1219
+CONVEX 507    GT_PK(2,2)      1220  2417  1253  2419  2401  1252
+CONVEX 508    GT_PK(2,2)      665  2422  704  2423  1774  705
+CONVEX 509    GT_PK(2,2)      547  2424  508  2425  1765  546
+CONVEX 510    GT_PK(2,2)      586  2426  587  2427  2428  625
+CONVEX 511    GT_PK(2,2)      586  2429  585  2427  2430  625
+CONVEX 512    GT_PK(2,2)      586  2429  585  2431  1778  546
+CONVEX 513    GT_PK(2,2)      586  2432  547  2431  2425  546
+CONVEX 514    GT_PK(2,2)      586  2432  547  2426  2433  587
+CONVEX 515    GT_PK(2,2)      624  2434  585  2435  2430  625
+CONVEX 516    GT_PK(2,2)      899  2436  898  2437  1780  938
+CONVEX 517    GT_PK(2,2)      899  2438  939  2437  2439  938
+CONVEX 518    GT_PK(2,2)      899  2438  939  2440  1814  900
+CONVEX 519    GT_PK(2,2)      739  2441  779  2442  1804  778
+CONVEX 520    GT_PK(2,2)      739  2443  738  2442  2444  778
+CONVEX 521    GT_PK(2,2)      819  2445  818  2446  2447  858
+CONVEX 522    GT_PK(2,2)      819  2445  818  2448  1802  779
+CONVEX 523    GT_PK(2,2)      623  2449  624  2450  2451  663
+CONVEX 524    GT_PK(2,2)      742  2452  743  2453  1531  781
+CONVEX 525    GT_PK(2,2)      742  2454  741  2453  2455  781
+CONVEX 526    GT_PK(2,2)      780  2456  820  2457  1807  781
+CONVEX 527    GT_PK(2,2)      780  2458  741  2457  2455  781
+CONVEX 528    GT_PK(2,2)      780  2459  819  2456  2460  820
+CONVEX 529    GT_PK(2,2)      780  2459  819  2461  2448  779
+CONVEX 530    GT_PK(2,2)      662  2462  623  2463  2450  663
+CONVEX 531    GT_PK(2,2)      979  2464  1017  2465  2466  978
+CONVEX 532    GT_PK(2,2)      979  2467  940  2465  1811  978
+CONVEX 533    GT_PK(2,2)      979  2467  940  2468  2469  941
+CONVEX 534    GT_PK(2,2)      1056  2470  1057  2471  2472  1094
+CONVEX 535    GT_PK(2,2)      1055  2473  1056  2474  2475  1017
+CONVEX 536    GT_PK(2,2)      1295  2476  1294  2477  2478  1262
+CONVEX 537    GT_PK(2,2)      1295  2479  1263  2477  1790  1262
+CONVEX 538    GT_PK(2,2)      1295  2479  1263  2480  1794  1264
+CONVEX 539    GT_PK(2,2)      817  2481  818  2482  1803  778
+CONVEX 540    GT_PK(2,2)      860  2483  821  2484  1805  820
+CONVEX 541    GT_PK(2,2)      860  2485  899  2486  2440  900
+CONVEX 542    GT_PK(2,2)      977  2487  939  2488  1812  978
+CONVEX 543    GT_PK(2,2)      977  2487  939  2489  2439  938
+CONVEX 544    GT_PK(2,2)      977  2490  976  2489  1821  938
+CONVEX 545    GT_PK(2,2)      977  2490  976  2491  2492  1015
+CONVEX 546    GT_PK(2,2)      980  2493  942  2494  1819  941
+CONVEX 547    GT_PK(2,2)      980  2495  979  2496  2497  1019
+CONVEX 548    GT_PK(2,2)      980  2495  979  2494  2468  941
+CONVEX 549    GT_PK(2,2)      861  2498  821  2499  1809  822
+CONVEX 550    GT_PK(2,2)      861  2500  860  2501  2486  900
+CONVEX 551    GT_PK(2,2)      861  2500  860  2498  2483  821
+CONVEX 552    GT_PK(2,2)      901  2502  940  2503  2469  941
+CONVEX 553    GT_PK(2,2)      901  2504  902  2503  1818  941
+CONVEX 554    GT_PK(2,2)      901  2502  940  2505  1813  900
+CONVEX 555    GT_PK(2,2)      901  2506  861  2505  2501  900
+CONVEX 556    GT_PK(2,2)      427  2507  428  2508  1838  390
+CONVEX 557    GT_PK(2,2)      356  2509  392  2510  1842  355
+CONVEX 558    GT_PK(2,2)      356  2511  393  2509  1833  392
+CONVEX 559    GT_PK(2,2)      356  2512  320  2510  1560  355
+CONVEX 560    GT_PK(2,2)      353  2513  318  2514  2515  317
+CONVEX 561    GT_PK(2,2)      353  2516  352  2514  1824  317
+CONVEX 562    GT_PK(2,2)      353  2517  354  2518  1840  390
+CONVEX 563    GT_PK(2,2)      353  2513  318  2517  1846  354
+CONVEX 564    GT_PK(2,2)      838  2519  839  2520  2521  878
+CONVEX 565    GT_PK(2,2)      517  2522  556  2523  2524  557
+CONVEX 566    GT_PK(2,2)      516  2525  478  2526  1608  477
+CONVEX 567    GT_PK(2,2)      516  2527  517  2525  2528  478
+CONVEX 568    GT_PK(2,2)      516  2527  517  2529  2522  556
+CONVEX 569    GT_PK(2,2)      596  2530  556  2531  2524  557
+CONVEX 570    GT_PK(2,2)      596  2532  597  2531  2533  557
+CONVEX 571    GT_PK(2,2)      596  2532  597  2534  2535  636
+CONVEX 572    GT_PK(2,2)      714  2536  715  2537  2538  675
+CONVEX 573    GT_PK(2,2)      982  2539  983  2540  2541  1021
+CONVEX 574    GT_PK(2,2)      982  2542  1020  2540  1466  1021
+CONVEX 575    GT_PK(2,2)      982  2543  981  2542  2544  1020
+CONVEX 576    GT_PK(2,2)      787  2545  786  2546  2547  826
+CONVEX 577    GT_PK(2,2)      787  2545  786  2548  1858  747
+CONVEX 578    GT_PK(2,2)      1100  2549  1135  2550  2551  1136
+CONVEX 579    GT_PK(2,2)      1100  2549  1135  2552  1868  1099
+CONVEX 580    GT_PK(2,2)      1098  2553  1134  2554  1867  1099
+CONVEX 581    GT_PK(2,2)      1098  2555  1062  2554  2556  1099
+CONVEX 582    GT_PK(2,2)      1133  2557  1134  2558  2559  1168
+CONVEX 583    GT_PK(2,2)      1133  2560  1098  2557  2553  1134
+CONVEX 584    GT_PK(2,2)      1097  2561  1133  2562  2563  1132
+CONVEX 585    GT_PK(2,2)      1097  2561  1133  2564  2560  1098
+CONVEX 586    GT_PK(2,2)      1167  2565  1201  2566  1864  1200
+CONVEX 587    GT_PK(2,2)      1167  2567  1166  2566  2568  1200
+CONVEX 588    GT_PK(2,2)      1167  2569  1132  2567  1869  1166
+CONVEX 589    GT_PK(2,2)      1167  2570  1133  2569  2563  1132
+CONVEX 590    GT_PK(2,2)      1167  2565  1201  2571  2572  1168
+CONVEX 591    GT_PK(2,2)      1167  2570  1133  2571  2558  1168
+CONVEX 592    GT_PK(2,2)      1096  2573  1095  2574  1872  1059
+CONVEX 593    GT_PK(2,2)      1096  2575  1097  2576  2562  1132
+CONVEX 594    GT_PK(2,2)      1096  2576  1132  2577  1870  1131
+CONVEX 595    GT_PK(2,2)      1096  2573  1095  2577  2578  1131
+CONVEX 596    GT_PK(2,2)      1096  2574  1059  2579  2580  1060
+CONVEX 597    GT_PK(2,2)      1096  2575  1097  2579  2581  1060
+CONVEX 598    GT_PK(2,2)      1065  2582  1027  2583  2584  1064
+CONVEX 599    GT_PK(2,2)      1065  2582  1027  2585  2586  1028
+CONVEX 600    GT_PK(2,2)      751  2587  711  2588  2589  712
+CONVEX 601    GT_PK(2,2)      1063  2590  1062  2591  2556  1099
+CONVEX 602    GT_PK(2,2)      1063  2592  1100  2591  2552  1099
+CONVEX 603    GT_PK(2,2)      1063  2592  1100  2593  2594  1064
+CONVEX 604    GT_PK(2,2)      1022  2595  1023  2596  2597  1060
+CONVEX 605    GT_PK(2,2)      1022  2598  1059  2599  1564  1021
+CONVEX 606    GT_PK(2,2)      1022  2598  1059  2596  2580  1060
+CONVEX 607    GT_PK(2,2)      1022  2600  983  2599  2541  1021
+CONVEX 608    GT_PK(2,2)      985  2601  1023  2602  2603  1024
+CONVEX 609    GT_PK(2,2)      949  2604  950  2605  2606  988
+CONVEX 610    GT_PK(2,2)      949  2604  950  2607  2608  911
+CONVEX 611    GT_PK(2,2)      949  2607  911  2609  2610  910
+CONVEX 612    GT_PK(2,2)      949  2611  948  2609  1875  910
+CONVEX 613    GT_PK(2,2)      1030  2612  1029  2613  2614  1067
+CONVEX 614    GT_PK(2,2)      989  2615  950  2616  2606  988
+CONVEX 615    GT_PK(2,2)      989  2617  1027  2616  2618  988
+CONVEX 616    GT_PK(2,2)      989  2617  1027  2619  2586  1028
+CONVEX 617    GT_PK(2,2)      912  2620  872  2621  2622  873
+CONVEX 618    GT_PK(2,2)      912  2623  950  2624  2608  911
+CONVEX 619    GT_PK(2,2)      912  2620  872  2624  2625  911
+CONVEX 620    GT_PK(2,2)      1206  2626  1207  2627  2628  1173
+CONVEX 621    GT_PK(2,2)      758  2629  797  2630  1892  757
+CONVEX 622    GT_PK(2,2)      758  2631  718  2630  1911  757
+CONVEX 623    GT_PK(2,2)      758  2631  718  2632  1908  719
+CONVEX 624    GT_PK(2,2)      758  2633  759  2632  1903  719
+CONVEX 625    GT_PK(2,2)      758  2629  797  2634  2635  798
+CONVEX 626    GT_PK(2,2)      758  2633  759  2634  2636  798
+CONVEX 627    GT_PK(2,2)      875  2637  835  2638  1896  836
+CONVEX 628    GT_PK(2,2)      875  2639  914  2640  2641  915
+CONVEX 629    GT_PK(2,2)      875  2637  835  2642  2643  874
+CONVEX 630    GT_PK(2,2)      875  2639  914  2642  2644  874
+CONVEX 631    GT_PK(2,2)      754  2645  714  2646  2536  715
+CONVEX 632    GT_PK(2,2)      794  2647  754  2648  2649  793
+CONVEX 633    GT_PK(2,2)      638  2650  599  2651  1898  598
+CONVEX 634    GT_PK(2,2)      638  2652  677  2653  1885  678
+CONVEX 635    GT_PK(2,2)      639  2654  678  2655  1907  679
+CONVEX 636    GT_PK(2,2)      639  2656  640  2655  1926  679
+CONVEX 637    GT_PK(2,2)      639  2657  638  2654  2653  678
+CONVEX 638    GT_PK(2,2)      639  2657  638  2658  2650  599
+CONVEX 639    GT_PK(2,2)      560  2659  559  2660  2661  520
+CONVEX 640    GT_PK(2,2)      560  2662  599  2659  1897  559
+CONVEX 641    GT_PK(2,2)      560  2663  521  2660  2664  520
+CONVEX 642    GT_PK(2,2)      560  2663  521  2665  2060  561
+CONVEX 643    GT_PK(2,2)      762  2666  761  2667  2668  801
+CONVEX 644    GT_PK(2,2)      722  2669  721  2670  1916  682
+CONVEX 645    GT_PK(2,2)      722  2669  721  2671  1918  761
+CONVEX 646    GT_PK(2,2)      722  2672  683  2670  2673  682
+CONVEX 647    GT_PK(2,2)      722  2674  762  2671  2666  761
+CONVEX 648    GT_PK(2,2)      1404  2675  1405  2676  1942  1383
+CONVEX 649    GT_PK(2,2)      1423  2677  1424  2678  1579  1405
+CONVEX 650    GT_PK(2,2)      1423  2679  1404  2678  2675  1405
+CONVEX 651    GT_PK(2,2)      1423  2679  1404  2680  2681  1422
+CONVEX 652    GT_PK(2,2)      1360  2682  1384  2683  1941  1383
+CONVEX 653    GT_PK(2,2)      1360  2682  1384  2684  1937  1361
+CONVEX 654    GT_PK(2,2)      1335  2685  1360  2686  2687  1334
+CONVEX 655    GT_PK(2,2)      1335  2688  1361  2689  2278  1336
+CONVEX 656    GT_PK(2,2)      1335  2685  1360  2688  2684  1361
+CONVEX 657    GT_PK(2,2)      1212  2690  1178  2691  2692  1211
+CONVEX 658    GT_PK(2,2)      1212  2693  1244  2691  2694  1211
+CONVEX 659    GT_PK(2,2)      1179  2695  1212  2696  2697  1213
+CONVEX 660    GT_PK(2,2)      1179  2695  1212  2698  2690  1178
+CONVEX 661    GT_PK(2,2)      1245  2699  1212  2700  2697  1213
+CONVEX 662    GT_PK(2,2)      1245  2699  1212  2701  2693  1244
+CONVEX 663    GT_PK(2,2)      1182  2702  1183  2703  2393  1216
+CONVEX 664    GT_PK(2,2)      1182  2702  1183  2704  1751  1148
+CONVEX 665    GT_PK(2,2)      1147  2705  1112  2706  2372  1148
+CONVEX 666    GT_PK(2,2)      1147  2707  1182  2706  2704  1148
+CONVEX 667    GT_PK(2,2)      1147  2707  1182  2708  2709  1181
+CONVEX 668    GT_PK(2,2)      1308  2710  1278  2711  1580  1279
+CONVEX 669    GT_PK(2,2)      1308  2712  1309  2711  2389  1279
+CONVEX 670    GT_PK(2,2)      1308  2712  1309  2713  2271  1336
+CONVEX 671    GT_PK(2,2)      1308  2714  1335  2713  2689  1336
+CONVEX 672    GT_PK(2,2)      1268  2715  1298  2716  2717  1297
+CONVEX 673    GT_PK(2,2)      1268  2718  1236  2719  2720  1237
+CONVEX 674    GT_PK(2,2)      1268  2721  1269  2719  2722  1237
+CONVEX 675    GT_PK(2,2)      1268  2721  1269  2715  2723  1298
+CONVEX 676    GT_PK(2,2)      1299  2724  1269  2725  2726  1270
+CONVEX 677    GT_PK(2,2)      1299  2724  1269  2727  2723  1298
+CONVEX 678    GT_PK(2,2)      1137  2728  1171  2729  2730  1136
+CONVEX 679    GT_PK(2,2)      1137  2731  1138  2732  1879  1102
+CONVEX 680    GT_PK(2,2)      1169  2733  1134  2734  2559  1168
+CONVEX 681    GT_PK(2,2)      1169  2733  1134  2735  1866  1135
+CONVEX 682    GT_PK(2,2)      1267  2736  1268  2737  2716  1297
+CONVEX 683    GT_PK(2,2)      1267  2736  1268  2738  2718  1236
+CONVEX 684    GT_PK(2,2)      1204  2739  1236  2740  2720  1237
+CONVEX 685    GT_PK(2,2)      1240  2741  1207  2742  2743  1208
+CONVEX 686    GT_PK(2,2)      1271  2744  1240  2745  2746  1272
+CONVEX 687    GT_PK(2,2)      1243  2747  1244  2748  2694  1211
+CONVEX 688    GT_PK(2,2)      972  2749  971  2750  1952  933
+CONVEX 689    GT_PK(2,2)      1083  2751  1046  2752  2753  1045
+CONVEX 690    GT_PK(2,2)      1002  2754  1003  2755  2756  964
+CONVEX 691    GT_PK(2,2)      1002  2757  1040  2758  2286  1001
+CONVEX 692    GT_PK(2,2)      1002  2754  1003  2759  2760  1041
+CONVEX 693    GT_PK(2,2)      1002  2757  1040  2759  2289  1041
+CONVEX 694    GT_PK(2,2)      1081  2761  1043  2762  2763  1080
+CONVEX 695    GT_PK(2,2)      929  2764  930  2765  1958  968
+CONVEX 696    GT_PK(2,2)      1008  2766  969  2767  1953  970
+CONVEX 697    GT_PK(2,2)      1008  2767  970  2768  1946  1009
+CONVEX 698    GT_PK(2,2)      1157  2769  1192  2770  1742  1158
+CONVEX 699    GT_PK(2,2)      1010  2771  1049  2772  2773  1011
+CONVEX 700    GT_PK(2,2)      1010  2774  972  2772  2775  1011
+CONVEX 701    GT_PK(2,2)      1010  2776  971  2777  1945  1009
+CONVEX 702    GT_PK(2,2)      1010  2774  972  2776  2749  971
+CONVEX 703    GT_PK(2,2)      974  2778  936  2779  1551  975
+CONVEX 704    GT_PK(2,2)      974  2780  1013  2779  2781  975
+CONVEX 705    GT_PK(2,2)      1014  2782  1013  2783  2784  1052
+CONVEX 706    GT_PK(2,2)      1014  2782  1013  2785  2781  975
+CONVEX 707    GT_PK(2,2)      1014  2786  976  2785  1822  975
+CONVEX 708    GT_PK(2,2)      1014  2786  976  2787  2492  1015
+CONVEX 709    GT_PK(2,2)      1051  2788  1013  2789  2784  1052
+CONVEX 710    GT_PK(2,2)      1124  2790  1123  2791  2792  1087
+CONVEX 711    GT_PK(2,2)      1163  2793  1164  2794  1538  1198
+CONVEX 712    GT_PK(2,2)      1163  2795  1197  2794  1965  1198
+CONVEX 713    GT_PK(2,2)      725  2796  685  2797  2798  724
+CONVEX 714    GT_PK(2,2)      725  2799  764  2797  2800  724
+CONVEX 715    GT_PK(2,2)      684  2801  685  2802  2803  645
+CONVEX 716    GT_PK(2,2)      684  2801  685  2804  2798  724
+CONVEX 717    GT_PK(2,2)      570  2805  571  2806  2807  610
+CONVEX 718    GT_PK(2,2)      570  2808  609  2806  1966  610
+CONVEX 719    GT_PK(2,2)      570  2809  531  2810  2811  530
+CONVEX 720    GT_PK(2,2)      570  2809  531  2805  2812  571
+CONVEX 721    GT_PK(2,2)      646  2813  685  2814  2803  645
+CONVEX 722    GT_PK(2,2)      646  2815  606  2814  2816  645
+CONVEX 723    GT_PK(2,2)      30  2817  29  2818  1975  15
+CONVEX 724    GT_PK(2,2)      30  2817  29  2819  2820  48
+CONVEX 725    GT_PK(2,2)      28  2821  29  2822  1974  14
+CONVEX 726    GT_PK(2,2)      28  2822  14  2823  2824  13
+CONVEX 727    GT_PK(2,2)      28  2825  27  2823  1704  13
+CONVEX 728    GT_PK(2,2)      89  2826  66  2827  2828  90
+CONVEX 729    GT_PK(2,2)      89  2829  114  2830  2831  88
+CONVEX 730    GT_PK(2,2)      89  2832  65  2830  1493  88
+CONVEX 731    GT_PK(2,2)      89  2826  66  2832  1980  65
+CONVEX 732    GT_PK(2,2)      528  2833  529  2834  2835  490
+CONVEX 733    GT_PK(2,2)      489  2836  451  2837  2838  490
+CONVEX 734    GT_PK(2,2)      489  2839  528  2840  2841  527
+CONVEX 735    GT_PK(2,2)      489  2839  528  2837  2834  490
+CONVEX 736    GT_PK(2,2)      452  2842  451  2843  2844  413
+CONVEX 737    GT_PK(2,2)      452  2842  451  2845  2838  490
+CONVEX 738    GT_PK(2,2)      414  2846  452  2847  2843  413
+CONVEX 739    GT_PK(2,2)      414  2846  452  2848  2849  453
+CONVEX 740    GT_PK(2,2)      491  2850  529  2851  2852  530
+CONVEX 741    GT_PK(2,2)      491  2850  529  2853  2835  490
+CONVEX 742    GT_PK(2,2)      491  2854  452  2853  2845  490
+CONVEX 743    GT_PK(2,2)      491  2854  452  2855  2849  453
+CONVEX 744    GT_PK(2,2)      385  2856  423  2857  2858  422
+CONVEX 745    GT_PK(2,2)      311  2859  310  2860  1995  346
+CONVEX 746    GT_PK(2,2)      311  2859  310  2861  1997  276
+CONVEX 747    GT_PK(2,2)      382  2862  345  2863  1996  346
+CONVEX 748    GT_PK(2,2)      382  2864  383  2863  2865  346
+CONVEX 749    GT_PK(2,2)      382  2866  381  2862  2867  345
+CONVEX 750    GT_PK(2,2)      382  2868  420  2864  2869  383
+CONVEX 751    GT_PK(2,2)      382  2866  381  2870  2871  419
+CONVEX 752    GT_PK(2,2)      382  2868  420  2870  2872  419
+CONVEX 753    GT_PK(2,2)      347  2873  383  2874  2865  346
+CONVEX 754    GT_PK(2,2)      347  2875  311  2874  2860  346
+CONVEX 755    GT_PK(2,2)      494  2876  455  2877  2002  456
+CONVEX 756    GT_PK(2,2)      494  2878  495  2877  2879  456
+CONVEX 757    GT_PK(2,2)      494  2876  455  2880  1989  493
+CONVEX 758    GT_PK(2,2)      494  2878  495  2881  2882  533
+CONVEX 759    GT_PK(2,2)      497  2883  459  2884  1983  498
+CONVEX 760    GT_PK(2,2)      457  2885  495  2886  2879  456
+CONVEX 761    GT_PK(2,2)      235  2887  268  2888  2889  234
+CONVEX 762    GT_PK(2,2)      235  2890  202  2888  2239  234
+CONVEX 763    GT_PK(2,2)      235  2891  203  2890  2892  202
+CONVEX 764    GT_PK(2,2)      309  2893  310  2894  1994  345
+CONVEX 765    GT_PK(2,2)      309  2895  274  2896  2897  308
+CONVEX 766    GT_PK(2,2)      309  2895  274  2898  1973  275
+CONVEX 767    GT_PK(2,2)      309  2893  310  2898  1998  275
+CONVEX 768    GT_PK(2,2)      344  2899  343  2900  2008  308
+CONVEX 769    GT_PK(2,2)      344  2901  309  2900  2896  308
+CONVEX 770    GT_PK(2,2)      344  2901  309  2902  2894  345
+CONVEX 771    GT_PK(2,2)      344  2903  381  2902  2867  345
+CONVEX 772    GT_PK(2,2)      344  2903  381  2904  2905  380
+CONVEX 773    GT_PK(2,2)      344  2899  343  2904  2013  380
+CONVEX 774    GT_PK(2,2)      376  2906  414  2907  2847  413
+CONVEX 775    GT_PK(2,2)      376  2906  414  2908  2909  377
+CONVEX 776    GT_PK(2,2)      378  2910  341  2911  2912  377
+CONVEX 777    GT_PK(2,2)      378  2913  379  2914  2004  416
+CONVEX 778    GT_PK(2,2)      378  2913  379  2915  2012  342
+CONVEX 779    GT_PK(2,2)      378  2910  341  2915  2018  342
+CONVEX 780    GT_PK(2,2)      305  2916  341  2917  2017  306
+CONVEX 781    GT_PK(2,2)      340  2918  341  2919  2912  377
+CONVEX 782    GT_PK(2,2)      340  2920  376  2919  2908  377
+CONVEX 783    GT_PK(2,2)      340  2920  376  2921  2922  339
+CONVEX 784    GT_PK(2,2)      340  2923  305  2918  2916  341
+CONVEX 785    GT_PK(2,2)      340  2921  339  2924  2014  304
+CONVEX 786    GT_PK(2,2)      340  2923  305  2924  2925  304
+CONVEX 787    GT_PK(2,2)      765  2926  805  2927  1592  766
+CONVEX 788    GT_PK(2,2)      765  2928  725  2929  2930  1
+CONVEX 789    GT_PK(2,2)      765  2928  725  2931  2799  764
+CONVEX 790    GT_PK(2,2)      765  2932  726  2929  2933  1
+CONVEX 791    GT_PK(2,2)      765  2932  726  2927  2020  766
+CONVEX 792    GT_PK(2,2)      844  2934  805  2935  1593  845
+CONVEX 793    GT_PK(2,2)      802  2936  762  2937  2667  801
+CONVEX 794    GT_PK(2,2)      648  2938  609  2939  1967  649
+CONVEX 795    GT_PK(2,2)      648  2940  688  2939  2941  649
+CONVEX 796    GT_PK(2,2)      648  2942  608  2943  2944  647
+CONVEX 797    GT_PK(2,2)      648  2942  608  2938  2945  609
+CONVEX 798    GT_PK(2,2)      687  2946  726  2947  2019  727
+CONVEX 799    GT_PK(2,2)      687  2948  688  2947  2021  727
+CONVEX 800    GT_PK(2,2)      687  2949  648  2948  2940  688
+CONVEX 801    GT_PK(2,2)      687  2949  648  2950  2943  647
+CONVEX 802    GT_PK(2,2)      613  2951  652  2952  2953  653
+CONVEX 803    GT_PK(2,2)      532  2954  531  2955  2812  571
+CONVEX 804    GT_PK(2,2)      532  2956  572  2957  2958  533
+CONVEX 805    GT_PK(2,2)      532  2956  572  2955  2959  571
+CONVEX 806    GT_PK(2,2)      532  2954  531  2960  2961  493
+CONVEX 807    GT_PK(2,2)      532  2962  494  2957  2881  533
+CONVEX 808    GT_PK(2,2)      532  2962  494  2960  2880  493
+CONVEX 809    GT_PK(2,2)      808  2963  769  2964  2965  768
+CONVEX 810    GT_PK(2,2)      808  2966  807  2964  1598  768
+CONVEX 811    GT_PK(2,2)      808  2966  807  2967  1600  847
+CONVEX 812    GT_PK(2,2)      729  2968  769  2969  2970  730
+CONVEX 813    GT_PK(2,2)      729  2971  690  2969  2972  730
+CONVEX 814    GT_PK(2,2)      729  2973  728  2974  1468  768
+CONVEX 815    GT_PK(2,2)      729  2968  769  2974  2965  768
+CONVEX 816    GT_PK(2,2)      689  2975  688  2976  2941  649
+CONVEX 817    GT_PK(2,2)      689  2975  688  2977  2022  728
+CONVEX 818    GT_PK(2,2)      689  2978  729  2977  2973  728
+CONVEX 819    GT_PK(2,2)      689  2978  729  2979  2971  690
+CONVEX 820    GT_PK(2,2)      691  2980  690  2981  2972  730
+CONVEX 821    GT_PK(2,2)      611  2982  571  2983  2807  610
+CONVEX 822    GT_PK(2,2)      611  2984  572  2982  2959  571
+CONVEX 823    GT_PK(2,2)      854  2985  894  2986  1961  855
+CONVEX 824    GT_PK(2,2)      891  2987  930  2988  1956  931
+CONVEX 825    GT_PK(2,2)      536  2989  497  2990  2884  498
+CONVEX 826    GT_PK(2,2)      614  2991  575  2992  2993  574
+CONVEX 827    GT_PK(2,2)      614  2994  613  2995  2952  653
+CONVEX 828    GT_PK(2,2)      614  2994  613  2992  2996  574
+CONVEX 829    GT_PK(2,2)      774  2997  813  2998  2999  773
+CONVEX 830    GT_PK(2,2)      627  3000  628  3001  2026  667
+CONVEX 831    GT_PK(2,2)      627  3000  628  3002  2030  588
+CONVEX 832    GT_PK(2,2)      549  3003  510  3004  3005  509
+CONVEX 833    GT_PK(2,2)      433  3006  395  3007  1470  394
+CONVEX 834    GT_PK(2,2)      404  3008  403  3009  1604  366
+CONVEX 835    GT_PK(2,2)      404  3010  367  3009  2047  366
+CONVEX 836    GT_PK(2,2)      404  3010  367  3011  3012  405
+CONVEX 837    GT_PK(2,2)      404  3013  443  3011  3014  405
+CONVEX 838    GT_PK(2,2)      642  3015  681  3016  1917  682
+CONVEX 839    GT_PK(2,2)      642  3015  681  3017  1924  641
+CONVEX 840    GT_PK(2,2)      644  3018  684  3019  2802  645
+CONVEX 841    GT_PK(2,2)      644  3018  684  3020  3021  683
+CONVEX 842    GT_PK(2,2)      484  3022  523  3023  2056  522
+CONVEX 843    GT_PK(2,2)      524  3024  523  3025  2057  563
+CONVEX 844    GT_PK(2,2)      482  3026  521  3027  2664  520
+CONVEX 845    GT_PK(2,2)      558  3028  597  3029  2533  557
+CONVEX 846    GT_PK(2,2)      558  3030  559  3031  1899  598
+CONVEX 847    GT_PK(2,2)      558  3028  597  3031  3032  598
+CONVEX 848    GT_PK(2,2)      436  3033  397  3034  2061  398
+CONVEX 849    GT_PK(2,2)      436  3035  437  3034  2064  398
+CONVEX 850    GT_PK(2,2)      440  3036  439  3037  1606  478
+CONVEX 851    GT_PK(2,2)      440  3036  439  3038  2095  401
+CONVEX 852    GT_PK(2,2)      440  3039  402  3038  2092  401
+CONVEX 853    GT_PK(2,2)      221  3040  254  3041  2117  255
+CONVEX 854    GT_PK(2,2)      221  3041  255  3042  1628  222
+CONVEX 855    GT_PK(2,2)      221  3043  188  3044  2114  220
+CONVEX 856    GT_PK(2,2)      221  3040  254  3044  2116  220
+CONVEX 857    GT_PK(2,2)      221  3045  189  3042  1620  222
+CONVEX 858    GT_PK(2,2)      221  3043  188  3045  2110  189
+CONVEX 859    GT_PK(2,2)      323  3046  359  3047  2086  322
+CONVEX 860    GT_PK(2,2)      323  3048  287  3047  2124  322
+CONVEX 861    GT_PK(2,2)      323  3046  359  3049  2079  360
+CONVEX 862    GT_PK(2,2)      213  3050  214  3051  2162  182
+CONVEX 863    GT_PK(2,2)      213  3050  214  3052  2164  246
+CONVEX 864    GT_PK(2,2)      213  3053  181  3051  1662  182
+CONVEX 865    GT_PK(2,2)      213  3054  212  3053  3055  181
+CONVEX 866    GT_PK(2,2)      213  3052  246  3056  2201  245
+CONVEX 867    GT_PK(2,2)      213  3054  212  3056  3057  245
+CONVEX 868    GT_PK(2,2)      180  3058  212  3059  3055  181
+CONVEX 869    GT_PK(2,2)      180  3060  151  3059  2179  181
+CONVEX 870    GT_PK(2,2)      180  3061  211  3058  3062  212
+CONVEX 871    GT_PK(2,2)      74  3063  52  3064  3065  53
+CONVEX 872    GT_PK(2,2)      74  3066  73  3063  2182  52
+CONVEX 873    GT_PK(2,2)      74  3064  53  3067  1681  98
+CONVEX 874    GT_PK(2,2)      283  3068  282  3069  1699  249
+CONVEX 875    GT_PK(2,2)      283  3070  250  3069  2190  249
+CONVEX 876    GT_PK(2,2)      283  3068  282  3071  1695  317
+CONVEX 877    GT_PK(2,2)      283  3072  318  3071  2515  317
+CONVEX 878    GT_PK(2,2)      283  3072  318  3073  1844  284
+CONVEX 879    GT_PK(2,2)      283  3070  250  3073  2187  284
+CONVEX 880    GT_PK(2,2)      26  3074  12  3075  1702  27
+CONVEX 881    GT_PK(2,2)      26  3076  11  3074  3077  12
+CONVEX 882    GT_PK(2,2)      26  3076  11  3078  2207  25
+CONVEX 883    GT_PK(2,2)      26  3078  25  3079  1716  44
+CONVEX 884    GT_PK(2,2)      26  3079  44  3080  1979  45
+CONVEX 885    GT_PK(2,2)      26  3075  27  3080  3081  45
+CONVEX 886    GT_PK(2,2)      81  3082  57  3083  2211  80
+CONVEX 887    GT_PK(2,2)      81  3084  107  3085  3086  82
+CONVEX 888    GT_PK(2,2)      81  3087  106  3083  2220  80
+CONVEX 889    GT_PK(2,2)      81  3084  107  3087  3088  106
+CONVEX 890    GT_PK(2,2)      193  3089  161  3090  1640  192
+CONVEX 891    GT_PK(2,2)      193  3091  162  3089  2228  161
+CONVEX 892    GT_PK(2,2)      193  3092  225  3090  1482  192
+CONVEX 893    GT_PK(2,2)      338  3093  339  3094  2015  303
+CONVEX 894    GT_PK(2,2)      338  3095  302  3094  2231  303
+CONVEX 895    GT_PK(2,2)      58  3096  37  3097  2234  36
+CONVEX 896    GT_PK(2,2)      58  3098  81  3099  3085  82
+CONVEX 897    GT_PK(2,2)      58  3100  57  3097  2213  36
+CONVEX 898    GT_PK(2,2)      58  3098  81  3100  3082  57
+CONVEX 899    GT_PK(2,2)      200  3101  168  3102  2246  169
+CONVEX 900    GT_PK(2,2)      200  3103  201  3102  3104  169
+CONVEX 901    GT_PK(2,2)      200  3103  201  3105  2240  233
+CONVEX 902    GT_PK(2,2)      86  3106  87  3107  3108  112
+CONVEX 903    GT_PK(2,2)      113  3109  87  3110  3108  112
+CONVEX 904    GT_PK(2,2)      113  3111  141  3112  3113  114
+CONVEX 905    GT_PK(2,2)      113  3112  114  3114  2831  88
+CONVEX 906    GT_PK(2,2)      113  3109  87  3114  2243  88
+CONVEX 907    GT_PK(2,2)      40  3115  39  3116  2260  21
+CONVEX 908    GT_PK(2,2)      40  3117  22  3118  1726  41
+CONVEX 909    GT_PK(2,2)      40  3117  22  3116  1720  21
+CONVEX 910    GT_PK(2,2)      40  3115  39  3119  3120  61
+CONVEX 911    GT_PK(2,2)      59  3121  58  3122  3099  82
+CONVEX 912    GT_PK(2,2)      59  3121  58  3123  3096  37
+CONVEX 913    GT_PK(2,2)      108  3124  107  3125  3086  82
+CONVEX 914    GT_PK(2,2)      1364  3126  1365  3127  3128  1339
+CONVEX 915    GT_PK(2,2)      963  3129  1002  3130  2755  964
+CONVEX 916    GT_PK(2,2)      963  3129  1002  3131  2758  1001
+CONVEX 917    GT_PK(2,2)      963  3132  925  3130  3133  964
+CONVEX 918    GT_PK(2,2)      963  3132  925  3134  2298  924
+CONVEX 919    GT_PK(2,2)      1038  3135  1000  3136  2284  1039
+CONVEX 920    GT_PK(2,2)      1038  3137  1076  3136  3138  1039
+CONVEX 921    GT_PK(2,2)      1038  3137  1076  3139  2280  1075
+CONVEX 922    GT_PK(2,2)      965  3140  927  3141  2291  966
+CONVEX 923    GT_PK(2,2)      965  3142  1003  3143  2756  964
+CONVEX 924    GT_PK(2,2)      965  3144  1004  3141  3145  966
+CONVEX 925    GT_PK(2,2)      965  3144  1004  3142  3146  1003
+CONVEX 926    GT_PK(2,2)      886  3147  925  3148  2299  885
+CONVEX 927    GT_PK(2,2)      886  3148  885  3149  1739  846
+CONVEX 928    GT_PK(2,2)      886  3150  847  3149  1602  846
+CONVEX 929    GT_PK(2,2)      886  3151  887  3150  3152  847
+CONVEX 930    GT_PK(2,2)      1393  3153  1369  3154  2338  1370
+CONVEX 931    GT_PK(2,2)      1393  3153  1369  3155  2357  1392
+CONVEX 932    GT_PK(2,2)      1393  3156  1414  3155  2367  1392
+CONVEX 933    GT_PK(2,2)      1393  3157  1415  3156  2304  1414
+CONVEX 934    GT_PK(2,2)      1254  3158  1286  3159  3160  1285
+CONVEX 935    GT_PK(2,2)      1254  3161  1253  3159  2399  1285
+CONVEX 936    GT_PK(2,2)      1254  3162  1222  3163  2311  1221
+CONVEX 937    GT_PK(2,2)      1254  3161  1253  3163  2418  1221
+CONVEX 938    GT_PK(2,2)      1374  3164  1348  3165  2313  1397
+CONVEX 939    GT_PK(2,2)      1293  3166  1294  3167  3168  1323
+CONVEX 940    GT_PK(2,2)      1293  3166  1294  3169  2478  1262
+CONVEX 941    GT_PK(2,2)      1321  3170  1348  3171  2317  1320
+CONVEX 942    GT_PK(2,2)      1321  3172  1291  3171  3173  1320
+CONVEX 943    GT_PK(2,2)      1319  3174  1347  3175  2328  1346
+CONVEX 944    GT_PK(2,2)      1319  3174  1347  3176  2316  1320
+CONVEX 945    GT_PK(2,2)      1394  3177  1416  3178  2318  1395
+CONVEX 946    GT_PK(2,2)      1394  3179  1415  3180  2302  1434
+CONVEX 947    GT_PK(2,2)      1394  3177  1416  3180  3181  1434
+CONVEX 948    GT_PK(2,2)      1394  3182  1371  3183  2324  1370
+CONVEX 949    GT_PK(2,2)      1394  3182  1371  3178  2332  1395
+CONVEX 950    GT_PK(2,2)      1394  3184  1393  3183  3154  1370
+CONVEX 951    GT_PK(2,2)      1394  3184  1393  3179  3157  1415
+CONVEX 952    GT_PK(2,2)      1195  3185  1196  3186  1583  1229
+CONVEX 953    GT_PK(2,2)      1261  3187  1262  3188  1535  1229
+CONVEX 954    GT_PK(2,2)      1261  3189  1293  3187  3169  1262
+CONVEX 955    GT_PK(2,2)      1411  3190  1390  3191  1747  1412
+CONVEX 956    GT_PK(2,2)      1411  3192  1430  3191  1512  1412
+CONVEX 957    GT_PK(2,2)      1411  3193  1429  3192  2351  1430
+CONVEX 958    GT_PK(2,2)      1411  3194  1410  3193  2354  1429
+CONVEX 959    GT_PK(2,2)      1077  3195  1113  3196  2374  1076
+CONVEX 960    GT_PK(2,2)      1077  3197  1040  3198  2288  1078
+CONVEX 961    GT_PK(2,2)      1077  3196  1076  3199  3138  1039
+CONVEX 962    GT_PK(2,2)      1077  3197  1040  3199  2287  1039
+CONVEX 963    GT_PK(2,2)      1151  3200  1150  3201  2375  1185
+CONVEX 964    GT_PK(2,2)      1151  3202  1116  3203  3204  1152
+CONVEX 965    GT_PK(2,2)      1151  3202  1116  3205  2382  1115
+CONVEX 966    GT_PK(2,2)      1151  3200  1150  3205  3206  1115
+CONVEX 967    GT_PK(2,2)      1249  3207  1280  3208  2386  1248
+CONVEX 968    GT_PK(2,2)      1249  3208  1248  3209  3210  1216
+CONVEX 969    GT_PK(2,2)      1249  3211  1217  3212  2395  1250
+CONVEX 970    GT_PK(2,2)      1249  3211  1217  3209  2392  1216
+CONVEX 971    GT_PK(2,2)      1251  3213  1282  3214  3215  1250
+CONVEX 972    GT_PK(2,2)      1251  3216  1218  3214  2396  1250
+CONVEX 973    GT_PK(2,2)      1251  3216  1218  3217  1520  1219
+CONVEX 974    GT_PK(2,2)      1251  3218  1252  3217  2421  1219
+CONVEX 975    GT_PK(2,2)      1281  3219  1311  3220  2406  1282
+CONVEX 976    GT_PK(2,2)      1281  3221  1249  3222  3207  1280
+CONVEX 977    GT_PK(2,2)      1281  3222  1280  3223  2390  1310
+CONVEX 978    GT_PK(2,2)      1281  3219  1311  3223  3224  1310
+CONVEX 979    GT_PK(2,2)      1281  3220  1282  3225  3215  1250
+CONVEX 980    GT_PK(2,2)      1281  3221  1249  3225  3212  1250
+CONVEX 981    GT_PK(2,2)      1367  3226  1391  3227  1745  1390
+CONVEX 982    GT_PK(2,2)      1367  3228  1368  3226  2358  1391
+CONVEX 983    GT_PK(2,2)      1367  3229  1366  3227  3230  1390
+CONVEX 984    GT_PK(2,2)      1367  3229  1366  3231  3232  1341
+CONVEX 985    GT_PK(2,2)      1342  3233  1368  3234  2360  1343
+CONVEX 986    GT_PK(2,2)      1342  3235  1367  3233  3228  1368
+CONVEX 987    GT_PK(2,2)      1342  3235  1367  3236  3231  1341
+CONVEX 988    GT_PK(2,2)      1155  3237  1154  3238  3239  1119
+CONVEX 989    GT_PK(2,2)      1155  3237  1154  3240  2413  1189
+CONVEX 990    GT_PK(2,2)      1155  3241  1190  3240  3242  1189
+CONVEX 991    GT_PK(2,2)      1155  3241  1190  3243  3244  1156
+CONVEX 992    GT_PK(2,2)      1186  3245  1220  3246  2415  1187
+CONVEX 993    GT_PK(2,2)      1186  3246  1187  3247  2410  1152
+CONVEX 994    GT_PK(2,2)      1186  3248  1185  3249  1521  1219
+CONVEX 995    GT_PK(2,2)      1186  3245  1220  3249  2420  1219
+CONVEX 996    GT_PK(2,2)      1186  3250  1151  3247  3203  1152
+CONVEX 997    GT_PK(2,2)      1186  3250  1151  3248  3201  1185
+CONVEX 998    GT_PK(2,2)      666  3251  665  3252  2423  705
+CONVEX 999    GT_PK(2,2)      664  3253  665  3254  2422  704
+CONVEX 1000    GT_PK(2,2)      664  3255  624  3256  2451  663
+CONVEX 1001    GT_PK(2,2)      664  3253  665  3257  3258  625
+CONVEX 1002    GT_PK(2,2)      664  3255  624  3257  2435  625
+CONVEX 1003    GT_PK(2,2)      506  3259  507  3260  1766  545
+CONVEX 1004    GT_PK(2,2)      506  3259  507  3261  1771  468
+CONVEX 1005    GT_PK(2,2)      506  3261  468  3262  1759  467
+CONVEX 1006    GT_PK(2,2)      506  3263  505  3262  3264  467
+CONVEX 1007    GT_PK(2,2)      740  3265  739  3266  2441  779
+CONVEX 1008    GT_PK(2,2)      740  3267  780  3266  2461  779
+CONVEX 1009    GT_PK(2,2)      740  3267  780  3268  2458  741
+CONVEX 1010    GT_PK(2,2)      740  3265  739  3269  3270  700
+CONVEX 1011    GT_PK(2,2)      859  3271  819  3272  2460  820
+CONVEX 1012    GT_PK(2,2)      859  3273  860  3272  2484  820
+CONVEX 1013    GT_PK(2,2)      859  3273  860  3274  2485  899
+CONVEX 1014    GT_PK(2,2)      859  3274  899  3275  2436  898
+CONVEX 1015    GT_PK(2,2)      859  3275  898  3276  1801  858
+CONVEX 1016    GT_PK(2,2)      859  3271  819  3276  2446  858
+CONVEX 1017    GT_PK(2,2)      543  3277  504  3278  3279  505
+CONVEX 1018    GT_PK(2,2)      543  3280  542  3281  3282  582
+CONVEX 1019    GT_PK(2,2)      543  3277  504  3280  3283  542
+CONVEX 1020    GT_PK(2,2)      544  3284  543  3285  3278  505
+CONVEX 1021    GT_PK(2,2)      544  3286  506  3287  3260  545
+CONVEX 1022    GT_PK(2,2)      544  3286  506  3285  3263  505
+CONVEX 1023    GT_PK(2,2)      584  3288  624  3289  2434  585
+CONVEX 1024    GT_PK(2,2)      584  3290  623  3288  2449  624
+CONVEX 1025    GT_PK(2,2)      584  3289  585  3291  1777  545
+CONVEX 1026    GT_PK(2,2)      584  3292  544  3291  3287  545
+CONVEX 1027    GT_PK(2,2)      702  3293  742  3294  2454  741
+CONVEX 1028    GT_PK(2,2)      702  3295  662  3296  2463  663
+CONVEX 1029    GT_PK(2,2)      702  3293  742  3297  2452  743
+CONVEX 1030    GT_PK(2,2)      622  3298  662  3299  2462  623
+CONVEX 1031    GT_PK(2,2)      622  3298  662  3300  3301  661
+CONVEX 1032    GT_PK(2,2)      622  3302  621  3303  3304  582
+CONVEX 1033    GT_PK(2,2)      622  3302  621  3300  3305  661
+CONVEX 1034    GT_PK(2,2)      1093  3306  1092  3307  3308  1129
+CONVEX 1035    GT_PK(2,2)      1093  3309  1056  3310  2471  1094
+CONVEX 1036    GT_PK(2,2)      1093  3311  1055  3306  3312  1092
+CONVEX 1037    GT_PK(2,2)      1093  3311  1055  3309  2473  1056
+CONVEX 1038    GT_PK(2,2)      1093  3313  1130  3307  1534  1129
+CONVEX 1039    GT_PK(2,2)      1093  3310  1094  3313  3314  1130
+CONVEX 1040    GT_PK(2,2)      1018  3315  1057  3316  3317  1019
+CONVEX 1041    GT_PK(2,2)      1018  3318  1056  3315  2470  1057
+CONVEX 1042    GT_PK(2,2)      1018  3318  1056  3319  2475  1017
+CONVEX 1043    GT_PK(2,2)      1018  3320  979  3316  2497  1019
+CONVEX 1044    GT_PK(2,2)      1018  3320  979  3319  2464  1017
+CONVEX 1045    GT_PK(2,2)      1054  3321  1055  3322  3312  1092
+CONVEX 1046    GT_PK(2,2)      777  3323  738  3324  2444  778
+CONVEX 1047    GT_PK(2,2)      777  3325  817  3324  2482  778
+CONVEX 1048    GT_PK(2,2)      856  3326  895  3327  3328  896
+CONVEX 1049    GT_PK(2,2)      856  3326  895  3329  1960  855
+CONVEX 1050    GT_PK(2,2)      857  3330  817  3331  2481  818
+CONVEX 1051    GT_PK(2,2)      857  3332  897  3333  1800  858
+CONVEX 1052    GT_PK(2,2)      857  3331  818  3333  2447  858
+CONVEX 1053    GT_PK(2,2)      857  3332  897  3334  1796  896
+CONVEX 1054    GT_PK(2,2)      857  3335  856  3334  3327  896
+CONVEX 1055    GT_PK(2,2)      857  3335  856  3330  3336  817
+CONVEX 1056    GT_PK(2,2)      1016  3337  1017  3338  2466  978
+CONVEX 1057    GT_PK(2,2)      1016  3339  977  3338  2488  978
+CONVEX 1058    GT_PK(2,2)      1016  3339  977  3340  2491  1015
+CONVEX 1059    GT_PK(2,2)      1016  3341  1054  3340  3342  1015
+CONVEX 1060    GT_PK(2,2)      1016  3343  1055  3337  2474  1017
+CONVEX 1061    GT_PK(2,2)      1016  3341  1054  3343  3321  1055
+CONVEX 1062    GT_PK(2,2)      862  3344  861  3345  2499  822
+CONVEX 1063    GT_PK(2,2)      862  3346  823  3345  1788  822
+CONVEX 1064    GT_PK(2,2)      862  3347  901  3348  2504  902
+CONVEX 1065    GT_PK(2,2)      862  3347  901  3344  2506  861
+CONVEX 1066    GT_PK(2,2)      862  3346  823  3349  1461  863
+CONVEX 1067    GT_PK(2,2)      862  3350  903  3349  3351  863
+CONVEX 1068    GT_PK(2,2)      862  3348  902  3350  1816  903
+CONVEX 1069    GT_PK(2,2)      351  3352  352  3353  1823  316
+CONVEX 1070    GT_PK(2,2)      351  3353  316  3354  1554  315
+CONVEX 1071    GT_PK(2,2)      351  3355  388  3352  3356  352
+CONVEX 1072    GT_PK(2,2)      351  3355  388  3357  3358  387
+CONVEX 1073    GT_PK(2,2)      837  3359  797  3360  1894  836
+CONVEX 1074    GT_PK(2,2)      837  3359  797  3361  2635  798
+CONVEX 1075    GT_PK(2,2)      837  3362  838  3361  3363  798
+CONVEX 1076    GT_PK(2,2)      799  3364  838  3365  2519  839
+CONVEX 1077    GT_PK(2,2)      799  3364  838  3366  3363  798
+CONVEX 1078    GT_PK(2,2)      799  3367  759  3366  2636  798
+CONVEX 1079    GT_PK(2,2)      799  3367  759  3368  1900  760
+CONVEX 1080    GT_PK(2,2)      637  3369  597  3370  2535  636
+CONVEX 1081    GT_PK(2,2)      637  3369  597  3371  3032  598
+CONVEX 1082    GT_PK(2,2)      637  3372  638  3371  2651  598
+CONVEX 1083    GT_PK(2,2)      637  3372  638  3373  2652  677
+CONVEX 1084    GT_PK(2,2)      518  3374  517  3375  2523  557
+CONVEX 1085    GT_PK(2,2)      518  3376  558  3375  3029  557
+CONVEX 1086    GT_PK(2,2)      671  3377  710  3378  3379  670
+CONVEX 1087    GT_PK(2,2)      671  3380  711  3377  3381  710
+CONVEX 1088    GT_PK(2,2)      753  3382  714  3383  3384  713
+CONVEX 1089    GT_PK(2,2)      753  3385  792  3386  3387  793
+CONVEX 1090    GT_PK(2,2)      753  3388  754  3386  2649  793
+CONVEX 1091    GT_PK(2,2)      753  3388  754  3382  2645  714
+CONVEX 1092    GT_PK(2,2)      669  3389  708  3390  3391  707
+CONVEX 1093    GT_PK(2,2)      669  3392  668  3393  2025  629
+CONVEX 1094    GT_PK(2,2)      669  3390  707  3392  1854  668
+CONVEX 1095    GT_PK(2,2)      669  3389  708  3394  3395  670
+CONVEX 1096    GT_PK(2,2)      825  3396  864  3397  3398  826
+CONVEX 1097    GT_PK(2,2)      825  3399  786  3400  1856  785
+CONVEX 1098    GT_PK(2,2)      825  3399  786  3397  2547  826
+CONVEX 1099    GT_PK(2,2)      865  3401  864  3402  3398  826
+CONVEX 1100    GT_PK(2,2)      865  3401  864  3403  3404  904
+CONVEX 1101    GT_PK(2,2)      748  3405  787  3406  3407  788
+CONVEX 1102    GT_PK(2,2)      748  3408  749  3406  3409  788
+CONVEX 1103    GT_PK(2,2)      748  3408  749  3410  3411  708
+CONVEX 1104    GT_PK(2,2)      748  3410  708  3412  3391  707
+CONVEX 1105    GT_PK(2,2)      748  3412  707  3413  1853  747
+CONVEX 1106    GT_PK(2,2)      748  3405  787  3413  2548  747
+CONVEX 1107    GT_PK(2,2)      1061  3414  1098  3415  2555  1062
+CONVEX 1108    GT_PK(2,2)      1061  3416  1023  3417  2597  1060
+CONVEX 1109    GT_PK(2,2)      1061  3418  1097  3417  2581  1060
+CONVEX 1110    GT_PK(2,2)      1061  3418  1097  3414  2564  1098
+CONVEX 1111    GT_PK(2,2)      1061  3415  1062  3419  3420  1024
+CONVEX 1112    GT_PK(2,2)      1061  3416  1023  3419  2603  1024
+CONVEX 1113    GT_PK(2,2)      1066  3421  1103  3422  1878  1102
+CONVEX 1114    GT_PK(2,2)      1066  3423  1065  3422  3424  1102
+CONVEX 1115    GT_PK(2,2)      1066  3421  1103  3425  3426  1067
+CONVEX 1116    GT_PK(2,2)      1066  3423  1065  3427  2585  1028
+CONVEX 1117    GT_PK(2,2)      1066  3428  1029  3425  2614  1067
+CONVEX 1118    GT_PK(2,2)      1066  3428  1029  3427  3429  1028
+CONVEX 1119    GT_PK(2,2)      752  3430  713  3431  3432  712
+CONVEX 1120    GT_PK(2,2)      752  3433  792  3434  3435  791
+CONVEX 1121    GT_PK(2,2)      752  3436  753  3430  3383  713
+CONVEX 1122    GT_PK(2,2)      752  3436  753  3433  3385  792
+CONVEX 1123    GT_PK(2,2)      752  3437  751  3431  2588  712
+CONVEX 1124    GT_PK(2,2)      752  3437  751  3434  3438  791
+CONVEX 1125    GT_PK(2,2)      831  3439  792  3440  3435  791
+CONVEX 1126    GT_PK(2,2)      789  3441  749  3442  3409  788
+CONVEX 1127    GT_PK(2,2)      1026  3443  1027  3444  2584  1064
+CONVEX 1128    GT_PK(2,2)      1026  3445  1063  3444  2593  1064
+CONVEX 1129    GT_PK(2,2)      1026  3443  1027  3446  2618  988
+CONVEX 1130    GT_PK(2,2)      1025  3447  1062  3448  3420  1024
+CONVEX 1131    GT_PK(2,2)      1025  3449  1063  3447  2590  1062
+CONVEX 1132    GT_PK(2,2)      1025  3450  1026  3449  3445  1063
+CONVEX 1133    GT_PK(2,2)      984  3451  1022  3452  2600  983
+CONVEX 1134    GT_PK(2,2)      984  3451  1022  3453  2595  1023
+CONVEX 1135    GT_PK(2,2)      984  3454  985  3453  2601  1023
+CONVEX 1136    GT_PK(2,2)      984  3455  945  3452  3456  983
+CONVEX 1137    GT_PK(2,2)      947  3457  948  3458  1874  909
+CONVEX 1138    GT_PK(2,2)      991  3459  1030  3460  2612  1029
+CONVEX 1139    GT_PK(2,2)      991  3459  1030  3461  3462  992
+CONVEX 1140    GT_PK(2,2)      1033  3463  1032  3464  3465  1070
+CONVEX 1141    GT_PK(2,2)      1031  3466  1030  3467  3462  992
+CONVEX 1142    GT_PK(2,2)      1031  3468  993  3467  3469  992
+CONVEX 1143    GT_PK(2,2)      1031  3468  993  3470  3471  1032
+CONVEX 1144    GT_PK(2,2)      953  3472  914  3473  3474  952
+CONVEX 1145    GT_PK(2,2)      953  3475  991  3473  3476  952
+CONVEX 1146    GT_PK(2,2)      953  3475  991  3477  3461  992
+CONVEX 1147    GT_PK(2,2)      953  3472  914  3478  2641  915
+CONVEX 1148    GT_PK(2,2)      913  3479  912  3480  2621  873
+CONVEX 1149    GT_PK(2,2)      913  3480  873  3481  3482  874
+CONVEX 1150    GT_PK(2,2)      913  3483  914  3481  2644  874
+CONVEX 1151    GT_PK(2,2)      913  3483  914  3484  3474  952
+CONVEX 1152    GT_PK(2,2)      951  3485  989  3486  2615  950
+CONVEX 1153    GT_PK(2,2)      951  3487  912  3486  2623  950
+CONVEX 1154    GT_PK(2,2)      951  3488  913  3487  3479  912
+CONVEX 1155    GT_PK(2,2)      951  3488  913  3489  3484  952
+CONVEX 1156    GT_PK(2,2)      1205  3490  1204  3491  2740  1237
+CONVEX 1157    GT_PK(2,2)      1205  3490  1204  3492  3493  1171
+CONVEX 1158    GT_PK(2,2)      1174  3494  1207  3495  2743  1208
+CONVEX 1159    GT_PK(2,2)      1174  3494  1207  3496  2628  1173
+CONVEX 1160    GT_PK(2,2)      1139  3497  1103  3498  1877  1138
+CONVEX 1161    GT_PK(2,2)      1139  3499  1174  3500  3501  1140
+CONVEX 1162    GT_PK(2,2)      1139  3498  1138  3502  3503  1173
+CONVEX 1163    GT_PK(2,2)      1139  3499  1174  3502  3496  1173
+CONVEX 1164    GT_PK(2,2)      833  3504  872  3505  2622  873
+CONVEX 1165    GT_PK(2,2)      833  3506  794  3507  2648  793
+CONVEX 1166    GT_PK(2,2)      834  3508  873  3509  3482  874
+CONVEX 1167    GT_PK(2,2)      834  3510  835  3509  2643  874
+CONVEX 1168    GT_PK(2,2)      834  3511  833  3508  3505  873
+CONVEX 1169    GT_PK(2,2)      834  3511  833  3512  3506  794
+CONVEX 1170    GT_PK(2,2)      755  3513  754  3514  2646  715
+CONVEX 1171    GT_PK(2,2)      755  3515  794  3513  2647  754
+CONVEX 1172    GT_PK(2,2)      755  3514  715  3516  3517  716
+CONVEX 1173    GT_PK(2,2)      755  3518  756  3516  1887  716
+CONVEX 1174    GT_PK(2,2)      600  3519  601  3520  2048  640
+CONVEX 1175    GT_PK(2,2)      600  3521  639  3520  2656  640
+CONVEX 1176    GT_PK(2,2)      600  3519  601  3522  2054  561
+CONVEX 1177    GT_PK(2,2)      600  3523  560  3522  2665  561
+CONVEX 1178    GT_PK(2,2)      600  3521  639  3524  2658  599
+CONVEX 1179    GT_PK(2,2)      600  3523  560  3524  2662  599
+CONVEX 1180    GT_PK(2,2)      723  3525  722  3526  2674  762
+CONVEX 1181    GT_PK(2,2)      723  3525  722  3527  2672  683
+CONVEX 1182    GT_PK(2,2)      723  3528  684  3529  2804  724
+CONVEX 1183    GT_PK(2,2)      723  3528  684  3527  3021  683
+CONVEX 1184    GT_PK(2,2)      1438  3530  1424  3531  1936  1439
+CONVEX 1185    GT_PK(2,2)      1438  3532  1423  3530  2677  1424
+CONVEX 1186    GT_PK(2,2)      1437  3533  1423  3534  2680  1422
+CONVEX 1187    GT_PK(2,2)      1437  3535  1436  3534  3536  1422
+CONVEX 1188    GT_PK(2,2)      1437  3537  1438  3533  3532  1423
+CONVEX 1189    GT_PK(2,2)      1180  3538  1179  3539  2696  1213
+CONVEX 1190    GT_PK(2,2)      1180  3540  1214  3539  3541  1213
+CONVEX 1191    GT_PK(2,2)      1180  3540  1214  3542  3543  1181
+CONVEX 1192    GT_PK(2,2)      1180  3538  1179  3544  3545  1145
+CONVEX 1193    GT_PK(2,2)      1144  3546  1179  3547  3545  1145
+CONVEX 1194    GT_PK(2,2)      1144  3546  1179  3548  2698  1178
+CONVEX 1195    GT_PK(2,2)      1246  3549  1245  3550  2700  1213
+CONVEX 1196    GT_PK(2,2)      1246  3551  1214  3550  3541  1213
+CONVEX 1197    GT_PK(2,2)      1246  3551  1214  3552  3553  1247
+CONVEX 1198    GT_PK(2,2)      1246  3554  1277  3549  3555  1245
+CONVEX 1199    GT_PK(2,2)      1246  3556  1278  3552  1581  1247
+CONVEX 1200    GT_PK(2,2)      1246  3554  1277  3556  3557  1278
+CONVEX 1201    GT_PK(2,2)      1215  3558  1214  3559  3553  1247
+CONVEX 1202    GT_PK(2,2)      1215  3560  1248  3559  1749  1247
+CONVEX 1203    GT_PK(2,2)      1215  3560  1248  3561  3210  1216
+CONVEX 1204    GT_PK(2,2)      1215  3562  1182  3561  2703  1216
+CONVEX 1205    GT_PK(2,2)      1215  3558  1214  3563  3543  1181
+CONVEX 1206    GT_PK(2,2)      1215  3562  1182  3563  2709  1181
+CONVEX 1207    GT_PK(2,2)      1307  3564  1308  3565  2710  1278
+CONVEX 1208    GT_PK(2,2)      1307  3566  1277  3567  3568  1306
+CONVEX 1209    GT_PK(2,2)      1307  3566  1277  3565  3557  1278
+CONVEX 1210    GT_PK(2,2)      1307  3569  1334  3567  3570  1306
+CONVEX 1211    GT_PK(2,2)      1307  3571  1335  3569  2686  1334
+CONVEX 1212    GT_PK(2,2)      1307  3564  1308  3571  2714  1335
+CONVEX 1213    GT_PK(2,2)      1326  3572  1299  3573  2727  1298
+CONVEX 1214    GT_PK(2,2)      1326  3572  1299  3574  3575  1327
+CONVEX 1215    GT_PK(2,2)      1326  3576  1375  3577  3578  1351
+CONVEX 1216    GT_PK(2,2)      1172  3579  1137  3580  2728  1171
+CONVEX 1217    GT_PK(2,2)      1172  3581  1205  3580  3492  1171
+CONVEX 1218    GT_PK(2,2)      1172  3581  1205  3582  3583  1206
+CONVEX 1219    GT_PK(2,2)      1172  3582  1206  3584  2627  1173
+CONVEX 1220    GT_PK(2,2)      1172  3585  1138  3584  3503  1173
+CONVEX 1221    GT_PK(2,2)      1172  3579  1137  3585  2731  1138
+CONVEX 1222    GT_PK(2,2)      1101  3586  1100  3587  2550  1136
+CONVEX 1223    GT_PK(2,2)      1101  3588  1137  3587  2729  1136
+CONVEX 1224    GT_PK(2,2)      1101  3588  1137  3589  2732  1102
+CONVEX 1225    GT_PK(2,2)      1101  3586  1100  3590  2594  1064
+CONVEX 1226    GT_PK(2,2)      1101  3591  1065  3589  3424  1102
+CONVEX 1227    GT_PK(2,2)      1101  3591  1065  3590  2583  1064
+CONVEX 1228    GT_PK(2,2)      1203  3592  1204  3593  2739  1236
+CONVEX 1229    GT_PK(2,2)      1235  3594  1267  3595  3596  1266
+CONVEX 1230    GT_PK(2,2)      1235  3597  1265  3595  3598  1266
+CONVEX 1231    GT_PK(2,2)      1235  3597  1265  3599  1860  1234
+CONVEX 1232    GT_PK(2,2)      1235  3594  1267  3600  2738  1236
+CONVEX 1233    GT_PK(2,2)      1235  3601  1203  3600  3593  1236
+CONVEX 1234    GT_PK(2,2)      1170  3602  1204  3603  3493  1171
+CONVEX 1235    GT_PK(2,2)      1170  3603  1171  3604  2730  1136
+CONVEX 1236    GT_PK(2,2)      1170  3605  1203  3606  3607  1169
+CONVEX 1237    GT_PK(2,2)      1170  3605  1203  3602  3592  1204
+CONVEX 1238    GT_PK(2,2)      1170  3608  1135  3604  2551  1136
+CONVEX 1239    GT_PK(2,2)      1170  3606  1169  3608  2735  1135
+CONVEX 1240    GT_PK(2,2)      1239  3609  1206  3610  2626  1207
+CONVEX 1241    GT_PK(2,2)      1239  3611  1240  3610  2741  1207
+CONVEX 1242    GT_PK(2,2)      1239  3612  1271  3611  2744  1240
+CONVEX 1243    GT_PK(2,2)      1239  3612  1271  3613  3614  1270
+CONVEX 1244    GT_PK(2,2)      1274  3615  1243  3616  3617  1242
+CONVEX 1245    GT_PK(2,2)      1274  3618  1273  3616  3619  1242
+CONVEX 1246    GT_PK(2,2)      1274  3620  1304  3621  3622  1303
+CONVEX 1247    GT_PK(2,2)      1274  3618  1273  3621  3623  1303
+CONVEX 1248    GT_PK(2,2)      1241  3624  1240  3625  2746  1272
+CONVEX 1249    GT_PK(2,2)      1241  3626  1273  3625  3627  1272
+CONVEX 1250    GT_PK(2,2)      1241  3624  1240  3628  2742  1208
+CONVEX 1251    GT_PK(2,2)      1241  3626  1273  3629  3619  1242
+CONVEX 1252    GT_PK(2,2)      967  3630  1006  3631  3632  968
+CONVEX 1253    GT_PK(2,2)      967  3633  929  3631  2765  968
+CONVEX 1254    GT_PK(2,2)      967  3634  966  3635  2293  928
+CONVEX 1255    GT_PK(2,2)      967  3633  929  3635  3636  928
+CONVEX 1256    GT_PK(2,2)      1082  3637  1083  3638  3639  1119
+CONVEX 1257    GT_PK(2,2)      1082  3637  1083  3640  2752  1045
+CONVEX 1258    GT_PK(2,2)      1044  3641  1081  3642  2761  1043
+CONVEX 1259    GT_PK(2,2)      1044  3643  1006  3644  3645  1045
+CONVEX 1260    GT_PK(2,2)      1044  3646  1082  3644  3640  1045
+CONVEX 1261    GT_PK(2,2)      1044  3646  1082  3641  3647  1081
+CONVEX 1262    GT_PK(2,2)      1117  3648  1116  3649  2384  1080
+CONVEX 1263    GT_PK(2,2)      1117  3650  1081  3649  2762  1080
+CONVEX 1264    GT_PK(2,2)      1117  3648  1116  3651  3204  1152
+CONVEX 1265    GT_PK(2,2)      1117  3652  1153  3651  2409  1152
+CONVEX 1266    GT_PK(2,2)      1005  3653  1004  3654  3655  1043
+CONVEX 1267    GT_PK(2,2)      1005  3656  1044  3654  3642  1043
+CONVEX 1268    GT_PK(2,2)      1005  3656  1044  3657  3643  1006
+CONVEX 1269    GT_PK(2,2)      1005  3658  967  3657  3630  1006
+CONVEX 1270    GT_PK(2,2)      1005  3653  1004  3659  3145  966
+CONVEX 1271    GT_PK(2,2)      1005  3658  967  3659  3634  966
+CONVEX 1272    GT_PK(2,2)      1042  3660  1004  3661  3655  1043
+CONVEX 1273    GT_PK(2,2)      1042  3662  1079  3663  2385  1041
+CONVEX 1274    GT_PK(2,2)      1042  3664  1003  3663  2760  1041
+CONVEX 1275    GT_PK(2,2)      1042  3660  1004  3664  3146  1003
+CONVEX 1276    GT_PK(2,2)      1042  3661  1043  3665  2763  1080
+CONVEX 1277    GT_PK(2,2)      1042  3662  1079  3665  2383  1080
+CONVEX 1278    GT_PK(2,2)      1007  3666  1008  3667  2766  969
+CONVEX 1279    GT_PK(2,2)      1007  3667  969  3668  1957  968
+CONVEX 1280    GT_PK(2,2)      1007  3669  1006  3668  3632  968
+CONVEX 1281    GT_PK(2,2)      1007  3669  1006  3670  3645  1045
+CONVEX 1282    GT_PK(2,2)      1007  3671  1046  3670  2753  1045
+CONVEX 1283    GT_PK(2,2)      1007  3666  1008  3671  3672  1046
+CONVEX 1284    GT_PK(2,2)      1122  3673  1123  3674  3675  1158
+CONVEX 1285    GT_PK(2,2)      1122  3676  1157  3674  2770  1158
+CONVEX 1286    GT_PK(2,2)      973  3677  972  3678  2775  1011
+CONVEX 1287    GT_PK(2,2)      1050  3679  1049  3680  3681  1087
+CONVEX 1288    GT_PK(2,2)      1050  3679  1049  3682  2773  1011
+CONVEX 1289    GT_PK(2,2)      1160  3683  1124  3684  3685  1125
+CONVEX 1290    GT_PK(2,2)      1160  3686  1195  3687  3688  1194
+CONVEX 1291    GT_PK(2,2)      1089  3689  1051  3690  2789  1052
+CONVEX 1292    GT_PK(2,2)      1089  3691  1090  3690  3692  1052
+CONVEX 1293    GT_PK(2,2)      686  3693  646  3694  3695  647
+CONVEX 1294    GT_PK(2,2)      686  3696  687  3694  2950  647
+CONVEX 1295    GT_PK(2,2)      686  3693  646  3697  2813  685
+CONVEX 1296    GT_PK(2,2)      686  3698  726  3699  2933  1
+CONVEX 1297    GT_PK(2,2)      686  3696  687  3698  2946  726
+CONVEX 1298    GT_PK(2,2)      686  3700  725  3699  2930  1
+CONVEX 1299    GT_PK(2,2)      686  3700  725  3697  2796  685
+CONVEX 1300    GT_PK(2,2)      272  3701  307  3702  1991  306
+CONVEX 1301    GT_PK(2,2)      116  3703  91  3704  3705  90
+CONVEX 1302    GT_PK(2,2)      16  3706  30  3707  2818  15
+CONVEX 1303    GT_PK(2,2)      46  3708  27  3709  3081  45
+CONVEX 1304    GT_PK(2,2)      46  3710  28  3708  2825  27
+CONVEX 1305    GT_PK(2,2)      170  3711  201  3712  2237  202
+CONVEX 1306    GT_PK(2,2)      170  3711  201  3713  3104  169
+CONVEX 1307    GT_PK(2,2)      140  3714  139  3715  3716  112
+CONVEX 1308    GT_PK(2,2)      140  3717  113  3715  3110  112
+CONVEX 1309    GT_PK(2,2)      140  3717  113  3718  3111  141
+CONVEX 1310    GT_PK(2,2)      140  3719  170  3718  3720  141
+CONVEX 1311    GT_PK(2,2)      140  3714  139  3721  2245  169
+CONVEX 1312    GT_PK(2,2)      140  3719  170  3721  3713  169
+CONVEX 1313    GT_PK(2,2)      568  3722  528  3723  2833  529
+CONVEX 1314    GT_PK(2,2)      569  3724  570  3725  2808  609
+CONVEX 1315    GT_PK(2,2)      569  3726  608  3725  2945  609
+CONVEX 1316    GT_PK(2,2)      569  3727  568  3726  3728  608
+CONVEX 1317    GT_PK(2,2)      569  3724  570  3729  2810  530
+CONVEX 1318    GT_PK(2,2)      569  3730  529  3729  2852  530
+CONVEX 1319    GT_PK(2,2)      569  3727  568  3730  3723  529
+CONVEX 1320    GT_PK(2,2)      415  3731  414  3732  2909  377
+CONVEX 1321    GT_PK(2,2)      415  3733  378  3734  2914  416
+CONVEX 1322    GT_PK(2,2)      415  3733  378  3732  2911  377
+CONVEX 1323    GT_PK(2,2)      415  3735  454  3734  1988  416
+CONVEX 1324    GT_PK(2,2)      415  3736  453  3735  3737  454
+CONVEX 1325    GT_PK(2,2)      415  3731  414  3736  2848  453
+CONVEX 1326    GT_PK(2,2)      492  3738  531  3739  2811  530
+CONVEX 1327    GT_PK(2,2)      492  3740  491  3739  2851  530
+CONVEX 1328    GT_PK(2,2)      492  3738  531  3741  2961  493
+CONVEX 1329    GT_PK(2,2)      492  3740  491  3742  2855  453
+CONVEX 1330    GT_PK(2,2)      492  3743  454  3741  1990  493
+CONVEX 1331    GT_PK(2,2)      492  3742  453  3743  3737  454
+CONVEX 1332    GT_PK(2,2)      349  3744  314  3745  2206  313
+CONVEX 1333    GT_PK(2,2)      349  3746  348  3745  3747  313
+CONVEX 1334    GT_PK(2,2)      349  3748  385  3746  3749  348
+CONVEX 1335    GT_PK(2,2)      277  3750  311  3751  2861  276
+CONVEX 1336    GT_PK(2,2)      312  3752  348  3753  3747  313
+CONVEX 1337    GT_PK(2,2)      312  3754  277  3755  3750  311
+CONVEX 1338    GT_PK(2,2)      312  3756  347  3752  3757  348
+CONVEX 1339    GT_PK(2,2)      312  3756  347  3755  2875  311
+CONVEX 1340    GT_PK(2,2)      312  3758  278  3753  2205  313
+CONVEX 1341    GT_PK(2,2)      312  3754  277  3758  3759  278
+CONVEX 1342    GT_PK(2,2)      421  3760  460  3761  1981  459
+CONVEX 1343    GT_PK(2,2)      421  3762  420  3761  3763  459
+CONVEX 1344    GT_PK(2,2)      421  3760  460  3764  3765  422
+CONVEX 1345    GT_PK(2,2)      421  3762  420  3766  2869  383
+CONVEX 1346    GT_PK(2,2)      384  3767  347  3768  2873  383
+CONVEX 1347    GT_PK(2,2)      384  3769  421  3770  3764  422
+CONVEX 1348    GT_PK(2,2)      384  3769  421  3768  3766  383
+CONVEX 1349    GT_PK(2,2)      384  3771  385  3770  2857  422
+CONVEX 1350    GT_PK(2,2)      384  3771  385  3772  3749  348
+CONVEX 1351    GT_PK(2,2)      384  3767  347  3772  3757  348
+CONVEX 1352    GT_PK(2,2)      535  3773  575  3774  2993  574
+CONVEX 1353    GT_PK(2,2)      535  3775  536  3773  3776  575
+CONVEX 1354    GT_PK(2,2)      535  3775  536  3777  2989  497
+CONVEX 1355    GT_PK(2,2)      418  3778  417  3779  2001  456
+CONVEX 1356    GT_PK(2,2)      418  3780  457  3779  2886  456
+CONVEX 1357    GT_PK(2,2)      418  3780  457  3781  3782  419
+CONVEX 1358    GT_PK(2,2)      418  3778  417  3783  2005  380
+CONVEX 1359    GT_PK(2,2)      418  3784  381  3781  2871  419
+CONVEX 1360    GT_PK(2,2)      418  3784  381  3783  2905  380
+CONVEX 1361    GT_PK(2,2)      458  3785  497  3786  2883  459
+CONVEX 1362    GT_PK(2,2)      458  3787  457  3788  3782  419
+CONVEX 1363    GT_PK(2,2)      458  3789  420  3788  2872  419
+CONVEX 1364    GT_PK(2,2)      458  3789  420  3786  3763  459
+CONVEX 1365    GT_PK(2,2)      884  3790  844  3791  3792  883
+CONVEX 1366    GT_PK(2,2)      884  3793  924  3794  2300  885
+CONVEX 1367    GT_PK(2,2)      884  3794  885  3795  1738  845
+CONVEX 1368    GT_PK(2,2)      884  3790  844  3795  2935  845
+CONVEX 1369    GT_PK(2,2)      884  3791  883  3796  3797  923
+CONVEX 1370    GT_PK(2,2)      884  3793  924  3796  3798  923
+CONVEX 1371    GT_PK(2,2)      843  3799  844  3800  3792  883
+CONVEX 1372    GT_PK(2,2)      763  3801  802  3802  2936  762
+CONVEX 1373    GT_PK(2,2)      763  3803  723  3804  3529  724
+CONVEX 1374    GT_PK(2,2)      763  3803  723  3802  3526  762
+CONVEX 1375    GT_PK(2,2)      763  3805  764  3804  2800  724
+CONVEX 1376    GT_PK(2,2)      573  3806  613  3807  2996  574
+CONVEX 1377    GT_PK(2,2)      573  3808  572  3809  2958  533
+CONVEX 1378    GT_PK(2,2)      848  3810  808  3811  2967  847
+CONVEX 1379    GT_PK(2,2)      848  3812  887  3813  2297  888
+CONVEX 1380    GT_PK(2,2)      848  3812  887  3811  3152  847
+CONVEX 1381    GT_PK(2,2)      692  3814  652  3815  2953  653
+CONVEX 1382    GT_PK(2,2)      692  3816  691  3814  3817  652
+CONVEX 1383    GT_PK(2,2)      612  3818  613  3819  2951  652
+CONVEX 1384    GT_PK(2,2)      612  3820  573  3818  3806  613
+CONVEX 1385    GT_PK(2,2)      612  3821  611  3822  2984  572
+CONVEX 1386    GT_PK(2,2)      612  3820  573  3822  3808  572
+CONVEX 1387    GT_PK(2,2)      651  3823  612  3824  3821  611
+CONVEX 1388    GT_PK(2,2)      651  3823  612  3825  3819  652
+CONVEX 1389    GT_PK(2,2)      651  3826  691  3825  3817  652
+CONVEX 1390    GT_PK(2,2)      651  3826  691  3827  2980  690
+CONVEX 1391    GT_PK(2,2)      650  3828  689  3829  2976  649
+CONVEX 1392    GT_PK(2,2)      650  3830  610  3829  1968  649
+CONVEX 1393    GT_PK(2,2)      650  3831  611  3830  2983  610
+CONVEX 1394    GT_PK(2,2)      650  3832  651  3831  3824  611
+CONVEX 1395    GT_PK(2,2)      650  3828  689  3833  2979  690
+CONVEX 1396    GT_PK(2,2)      650  3832  651  3833  3827  690
+CONVEX 1397    GT_PK(2,2)      815  3834  854  3835  2986  855
+CONVEX 1398    GT_PK(2,2)      893  3836  894  3837  3838  933
+CONVEX 1399    GT_PK(2,2)      893  3839  854  3836  2985  894
+CONVEX 1400    GT_PK(2,2)      893  3840  932  3837  1951  933
+CONVEX 1401    GT_PK(2,2)      893  3841  853  3839  3842  854
+CONVEX 1402    GT_PK(2,2)      812  3843  813  3844  2999  773
+CONVEX 1403    GT_PK(2,2)      889  3845  888  3846  2295  928
+CONVEX 1404    GT_PK(2,2)      889  3847  929  3846  3636  928
+CONVEX 1405    GT_PK(2,2)      695  3848  694  3849  3850  655
+CONVEX 1406    GT_PK(2,2)      770  3851  769  3852  2970  730
+CONVEX 1407    GT_PK(2,2)      615  3853  614  3854  2991  575
+CONVEX 1408    GT_PK(2,2)      548  3855  549  3856  3004  509
+CONVEX 1409    GT_PK(2,2)      548  3857  589  3858  2029  588
+CONVEX 1410    GT_PK(2,2)      548  3855  549  3857  3859  589
+CONVEX 1411    GT_PK(2,2)      434  3860  395  3861  2088  396
+CONVEX 1412    GT_PK(2,2)      434  3862  433  3860  3006  395
+CONVEX 1413    GT_PK(2,2)      434  3863  472  3864  3865  473
+CONVEX 1414    GT_PK(2,2)      434  3863  472  3862  3866  433
+CONVEX 1415    GT_PK(2,2)      442  3867  404  3868  3013  443
+CONVEX 1416    GT_PK(2,2)      442  3867  404  3869  3008  403
+CONVEX 1417    GT_PK(2,2)      643  3870  683  3871  2673  682
+CONVEX 1418    GT_PK(2,2)      643  3872  642  3871  3016  682
+CONVEX 1419    GT_PK(2,2)      643  3872  642  3873  3874  603
+CONVEX 1420    GT_PK(2,2)      643  3875  644  3870  3020  683
+CONVEX 1421    GT_PK(2,2)      602  3876  642  3877  3874  603
+CONVEX 1422    GT_PK(2,2)      602  3878  562  3879  2053  601
+CONVEX 1423    GT_PK(2,2)      602  3879  601  3880  2049  641
+CONVEX 1424    GT_PK(2,2)      602  3876  642  3880  3017  641
+CONVEX 1425    GT_PK(2,2)      602  3878  562  3881  2058  563
+CONVEX 1426    GT_PK(2,2)      602  3877  603  3881  3882  563
+CONVEX 1427    GT_PK(2,2)      565  3883  526  3884  3885  525
+CONVEX 1428    GT_PK(2,2)      488  3886  489  3887  2840  527
+CONVEX 1429    GT_PK(2,2)      488  3888  526  3887  3889  527
+CONVEX 1430    GT_PK(2,2)      486  3890  524  3891  3892  525
+CONVEX 1431    GT_PK(2,2)      444  3893  482  3894  3895  443
+CONVEX 1432    GT_PK(2,2)      444  3894  443  3896  3014  405
+CONVEX 1433    GT_PK(2,2)      483  3897  482  3898  3026  521
+CONVEX 1434    GT_PK(2,2)      483  3898  521  3899  2059  522
+CONVEX 1435    GT_PK(2,2)      483  3900  484  3899  3023  522
+CONVEX 1436    GT_PK(2,2)      483  3900  484  3901  3902  445
+CONVEX 1437    GT_PK(2,2)      483  3903  444  3901  3904  445
+CONVEX 1438    GT_PK(2,2)      483  3903  444  3897  3893  482
+CONVEX 1439    GT_PK(2,2)      519  3905  559  3906  2661  520
+CONVEX 1440    GT_PK(2,2)      519  3907  558  3905  3030  559
+CONVEX 1441    GT_PK(2,2)      519  3908  518  3909  3910  480
+CONVEX 1442    GT_PK(2,2)      519  3908  518  3907  3376  558
+CONVEX 1443    GT_PK(2,2)      288  3911  287  3912  2120  253
+CONVEX 1444    GT_PK(2,2)      288  3913  323  3911  3048  287
+CONVEX 1445    GT_PK(2,2)      288  3914  254  3912  2115  253
+CONVEX 1446    GT_PK(2,2)      288  3914  254  3915  2118  289
+CONVEX 1447    GT_PK(2,2)      244  3916  212  3917  3057  245
+CONVEX 1448    GT_PK(2,2)      244  3918  211  3916  3062  212
+CONVEX 1449    GT_PK(2,2)      244  3919  278  3917  2203  245
+CONVEX 1450    GT_PK(2,2)      244  3920  277  3919  3759  278
+CONVEX 1451    GT_PK(2,2)      150  3921  180  3922  3060  151
+CONVEX 1452    GT_PK(2,2)      150  3923  122  3924  3925  149
+CONVEX 1453    GT_PK(2,2)      121  3926  122  3927  3928  96
+CONVEX 1454    GT_PK(2,2)      121  3926  122  3929  3925  149
+CONVEX 1455    GT_PK(2,2)      97  3930  122  3931  3928  96
+CONVEX 1456    GT_PK(2,2)      97  3932  73  3931  3933  96
+CONVEX 1457    GT_PK(2,2)      97  3934  74  3932  3066  73
+CONVEX 1458    GT_PK(2,2)      97  3934  74  3935  3067  98
+CONVEX 1459    GT_PK(2,2)      93  3936  69  3937  3938  92
+CONVEX 1460    GT_PK(2,2)      51  3939  73  3940  2183  33
+CONVEX 1461    GT_PK(2,2)      51  3941  32  3940  3942  33
+CONVEX 1462    GT_PK(2,2)      226  3943  225  3944  1474  259
+CONVEX 1463    GT_PK(2,2)      226  3945  193  3943  3092  225
+CONVEX 1464    GT_PK(2,2)      294  3946  259  3947  1449  293
+CONVEX 1465    GT_PK(2,2)      294  3948  329  3947  2044  293
+CONVEX 1466    GT_PK(2,2)      294  3948  329  3949  2041  330
+CONVEX 1467    GT_PK(2,2)      294  3950  295  3949  3951  330
+CONVEX 1468    GT_PK(2,2)      331  3952  367  3953  2046  330
+CONVEX 1469    GT_PK(2,2)      331  3954  295  3953  3951  330
+CONVEX 1470    GT_PK(2,2)      134  3955  107  3956  3088  106
+CONVEX 1471    GT_PK(2,2)      134  3957  163  3958  3959  164
+CONVEX 1472    GT_PK(2,2)      195  3960  196  3961  3962  164
+CONVEX 1473    GT_PK(2,2)      195  3963  163  3961  3959  164
+CONVEX 1474    GT_PK(2,2)      232  3964  200  3965  3105  233
+CONVEX 1475    GT_PK(2,2)      111  3966  139  3967  3716  112
+CONVEX 1476    GT_PK(2,2)      111  3968  86  3967  3107  112
+CONVEX 1477    GT_PK(2,2)      63  3969  86  3970  3106  87
+CONVEX 1478    GT_PK(2,2)      63  3970  87  3971  2242  64
+CONVEX 1479    GT_PK(2,2)      63  3972  42  3973  2256  41
+CONVEX 1480    GT_PK(2,2)      63  3972  42  3971  2258  64
+CONVEX 1481    GT_PK(2,2)      62  3974  40  3975  3119  61
+CONVEX 1482    GT_PK(2,2)      62  3976  63  3977  3969  86
+CONVEX 1483    GT_PK(2,2)      62  3974  40  3978  3118  41
+CONVEX 1484    GT_PK(2,2)      62  3976  63  3978  3973  41
+CONVEX 1485    GT_PK(2,2)      38  3979  59  3980  3123  37
+CONVEX 1486    GT_PK(2,2)      38  3980  37  3981  2235  19
+CONVEX 1487    GT_PK(2,2)      38  3982  39  3983  2261  20
+CONVEX 1488    GT_PK(2,2)      38  3983  20  3984  1496  5
+CONVEX 1489    GT_PK(2,2)      38  3981  19  3984  3985  5
+CONVEX 1490    GT_PK(2,2)      83  3986  59  3987  3122  82
+CONVEX 1491    GT_PK(2,2)      83  3988  108  3987  3125  82
+CONVEX 1492    GT_PK(2,2)      83  3988  108  3989  3990  109
+CONVEX 1493    GT_PK(2,2)      165  3991  196  3992  3962  164
+CONVEX 1494    GT_PK(2,2)      1338  3993  1364  3994  3127  1339
+CONVEX 1495    GT_PK(2,2)      1338  3995  1337  3996  2272  1310
+CONVEX 1496    GT_PK(2,2)      1338  3997  1311  3994  2404  1339
+CONVEX 1497    GT_PK(2,2)      1338  3997  1311  3996  3224  1310
+CONVEX 1498    GT_PK(2,2)      1388  3998  1364  3999  4000  1387
+CONVEX 1499    GT_PK(2,2)      1388  3999  1387  4001  2267  1409
+CONVEX 1500    GT_PK(2,2)      1388  4002  1410  4001  2353  1409
+CONVEX 1501    GT_PK(2,2)      1388  3998  1364  4003  3126  1365
+CONVEX 1502    GT_PK(2,2)      1363  4004  1362  4005  2279  1337
+CONVEX 1503    GT_PK(2,2)      1363  4006  1338  4005  3995  1337
+CONVEX 1504    GT_PK(2,2)      1363  4006  1338  4007  3993  1364
+CONVEX 1505    GT_PK(2,2)      1363  4007  1364  4008  4000  1387
+CONVEX 1506    GT_PK(2,2)      1363  4008  1387  4009  2268  1386
+CONVEX 1507    GT_PK(2,2)      1363  4004  1362  4009  2276  1386
+CONVEX 1508    GT_PK(2,2)      1109  4010  1144  4011  3547  1145
+CONVEX 1509    GT_PK(2,2)      1109  4010  1144  4012  4013  1108
+CONVEX 1510    GT_PK(2,2)      1037  4014  1038  4015  3139  1075
+CONVEX 1511    GT_PK(2,2)      1037  4016  1074  4015  4017  1075
+CONVEX 1512    GT_PK(2,2)      962  4018  1000  4019  2283  1001
+CONVEX 1513    GT_PK(2,2)      962  4020  963  4019  3131  1001
+CONVEX 1514    GT_PK(2,2)      962  4021  924  4022  3798  923
+CONVEX 1515    GT_PK(2,2)      962  4020  963  4021  3134  924
+CONVEX 1516    GT_PK(2,2)      926  4023  886  4024  3147  925
+CONVEX 1517    GT_PK(2,2)      926  4024  925  4025  3133  964
+CONVEX 1518    GT_PK(2,2)      926  4026  927  4027  2296  887
+CONVEX 1519    GT_PK(2,2)      926  4023  886  4027  3151  887
+CONVEX 1520    GT_PK(2,2)      926  4028  965  4025  3143  964
+CONVEX 1521    GT_PK(2,2)      926  4028  965  4026  3140  927
+CONVEX 1522    GT_PK(2,2)      1349  4029  1374  4030  3164  1348
+CONVEX 1523    GT_PK(2,2)      1349  4031  1321  4030  3170  1348
+CONVEX 1524    GT_PK(2,2)      1349  4029  1374  4032  4033  1350
+CONVEX 1525    GT_PK(2,2)      1191  4034  1157  4035  2769  1192
+CONVEX 1526    GT_PK(2,2)      1191  4036  1190  4037  3244  1156
+CONVEX 1527    GT_PK(2,2)      1191  4034  1157  4037  4038  1156
+CONVEX 1528    GT_PK(2,2)      1292  4039  1261  4040  3189  1293
+CONVEX 1529    GT_PK(2,2)      1292  4041  1321  4042  3172  1291
+CONVEX 1530    GT_PK(2,2)      1226  4043  1259  4044  4045  1258
+CONVEX 1531    GT_PK(2,2)      1226  4046  1193  4047  1740  1192
+CONVEX 1532    GT_PK(2,2)      1260  4048  1292  4049  4039  1261
+CONVEX 1533    GT_PK(2,2)      1260  4050  1259  4051  4052  1291
+CONVEX 1534    GT_PK(2,2)      1260  4048  1292  4051  4042  1291
+CONVEX 1535    GT_PK(2,2)      1114  4053  1077  4054  3198  1078
+CONVEX 1536    GT_PK(2,2)      1114  4053  1077  4055  3195  1113
+CONVEX 1537    GT_PK(2,2)      1114  4054  1078  4056  2380  1115
+CONVEX 1538    GT_PK(2,2)      1114  4057  1150  4056  3206  1115
+CONVEX 1539    GT_PK(2,2)      1114  4055  1113  4058  2373  1149
+CONVEX 1540    GT_PK(2,2)      1114  4057  1150  4058  2377  1149
+CONVEX 1541    GT_PK(2,2)      1283  4059  1251  4060  3213  1282
+CONVEX 1542    GT_PK(2,2)      1283  4061  1313  4062  4063  1284
+CONVEX 1543    GT_PK(2,2)      1283  4064  1252  4062  2402  1284
+CONVEX 1544    GT_PK(2,2)      1283  4059  1251  4064  3218  1252
+CONVEX 1545    GT_PK(2,2)      1283  4060  1282  4065  2407  1312
+CONVEX 1546    GT_PK(2,2)      1283  4061  1313  4065  4066  1312
+CONVEX 1547    GT_PK(2,2)      1340  4067  1366  4068  3232  1341
+CONVEX 1548    GT_PK(2,2)      1340  4069  1313  4070  4066  1312
+CONVEX 1549    GT_PK(2,2)      1340  4069  1313  4068  4071  1341
+CONVEX 1550    GT_PK(2,2)      1340  4070  1312  4072  2405  1339
+CONVEX 1551    GT_PK(2,2)      1340  4073  1365  4072  3128  1339
+CONVEX 1552    GT_PK(2,2)      1340  4067  1366  4073  4074  1365
+CONVEX 1553    GT_PK(2,2)      1315  4075  1342  4076  3234  1343
+CONVEX 1554    GT_PK(2,2)      1315  4077  1286  4078  3160  1285
+CONVEX 1555    GT_PK(2,2)      1315  4077  1286  4079  4080  1316
+CONVEX 1556    GT_PK(2,2)      1315  4076  1343  4079  2342  1316
+CONVEX 1557    GT_PK(2,2)      1120  4081  1155  4082  3238  1119
+CONVEX 1558    GT_PK(2,2)      1120  4081  1155  4083  3243  1156
+CONVEX 1559    GT_PK(2,2)      1120  4084  1083  4082  3639  1119
+CONVEX 1560    GT_PK(2,2)      626  4085  665  4086  3258  625
+CONVEX 1561    GT_PK(2,2)      626  4087  666  4085  3251  665
+CONVEX 1562    GT_PK(2,2)      626  4088  587  4086  2428  625
+CONVEX 1563    GT_PK(2,2)      703  4089  704  4090  1775  744
+CONVEX 1564    GT_PK(2,2)      703  4091  664  4089  3254  704
+CONVEX 1565    GT_PK(2,2)      703  4092  743  4090  1529  744
+CONVEX 1566    GT_PK(2,2)      703  4091  664  4093  3256  663
+CONVEX 1567    GT_PK(2,2)      703  4094  702  4093  3296  663
+CONVEX 1568    GT_PK(2,2)      703  4094  702  4092  3297  743
+CONVEX 1569    GT_PK(2,2)      503  4095  504  4096  4097  465
+CONVEX 1570    GT_PK(2,2)      503  4095  504  4098  3283  542
+CONVEX 1571    GT_PK(2,2)      499  4099  460  4100  1982  498
+CONVEX 1572    GT_PK(2,2)      466  4101  504  4102  4097  465
+CONVEX 1573    GT_PK(2,2)      466  4103  428  4104  1556  467
+CONVEX 1574    GT_PK(2,2)      466  4105  505  4104  3264  467
+CONVEX 1575    GT_PK(2,2)      466  4101  504  4105  3279  505
+CONVEX 1576    GT_PK(2,2)      466  4106  427  4102  4107  465
+CONVEX 1577    GT_PK(2,2)      466  4106  427  4103  2507  428
+CONVEX 1578    GT_PK(2,2)      660  4108  661  4109  4110  700
+CONVEX 1579    GT_PK(2,2)      660  4111  621  4108  3305  661
+CONVEX 1580    GT_PK(2,2)      701  4112  702  4113  3294  741
+CONVEX 1581    GT_PK(2,2)      701  4112  702  4114  3295  662
+CONVEX 1582    GT_PK(2,2)      701  4114  662  4115  3301  661
+CONVEX 1583    GT_PK(2,2)      701  4115  661  4116  4110  700
+CONVEX 1584    GT_PK(2,2)      701  4117  740  4116  3269  700
+CONVEX 1585    GT_PK(2,2)      701  4117  740  4113  3268  741
+CONVEX 1586    GT_PK(2,2)      583  4118  584  4119  3290  623
+CONVEX 1587    GT_PK(2,2)      583  4120  622  4119  3299  623
+CONVEX 1588    GT_PK(2,2)      583  4118  584  4121  3292  544
+CONVEX 1589    GT_PK(2,2)      583  4121  544  4122  3284  543
+CONVEX 1590    GT_PK(2,2)      583  4122  543  4123  3281  582
+CONVEX 1591    GT_PK(2,2)      583  4120  622  4123  3303  582
+CONVEX 1592    GT_PK(2,2)      1091  4124  1054  4125  3322  1092
+CONVEX 1593    GT_PK(2,2)      1091  4126  1127  4127  4128  1090
+CONVEX 1594    GT_PK(2,2)      1053  4129  1014  4130  2783  1052
+CONVEX 1595    GT_PK(2,2)      1053  4131  1090  4130  3692  1052
+CONVEX 1596    GT_PK(2,2)      1053  4129  1014  4132  2787  1015
+CONVEX 1597    GT_PK(2,2)      1053  4133  1054  4132  3342  1015
+CONVEX 1598    GT_PK(2,2)      1053  4134  1091  4131  4127  1090
+CONVEX 1599    GT_PK(2,2)      1053  4134  1091  4133  4124  1054
+CONVEX 1600    GT_PK(2,2)      425  4135  388  4136  3358  387
+CONVEX 1601    GT_PK(2,2)      389  4137  427  4138  2508  390
+CONVEX 1602    GT_PK(2,2)      389  4139  388  4140  3356  352
+CONVEX 1603    GT_PK(2,2)      389  4141  353  4138  2518  390
+CONVEX 1604    GT_PK(2,2)      389  4141  353  4140  2516  352
+CONVEX 1605    GT_PK(2,2)      350  4142  314  4143  1701  315
+CONVEX 1606    GT_PK(2,2)      350  4144  351  4143  3354  315
+CONVEX 1607    GT_PK(2,2)      350  4145  349  4142  3744  314
+CONVEX 1608    GT_PK(2,2)      350  4144  351  4146  3357  387
+CONVEX 1609    GT_PK(2,2)      877  4147  838  4148  2520  878
+CONVEX 1610    GT_PK(2,2)      877  4149  837  4147  3362  838
+CONVEX 1611    GT_PK(2,2)      800  4150  799  4151  3365  839
+CONVEX 1612    GT_PK(2,2)      800  4152  761  4153  2668  801
+CONVEX 1613    GT_PK(2,2)      800  4152  761  4154  1919  760
+CONVEX 1614    GT_PK(2,2)      800  4150  799  4154  3368  760
+CONVEX 1615    GT_PK(2,2)      676  4155  637  4156  3370  636
+CONVEX 1616    GT_PK(2,2)      676  4156  636  4157  4158  675
+CONVEX 1617    GT_PK(2,2)      676  4159  715  4157  2538  675
+CONVEX 1618    GT_PK(2,2)      676  4159  715  4160  3517  716
+CONVEX 1619    GT_PK(2,2)      676  4161  677  4160  1888  716
+CONVEX 1620    GT_PK(2,2)      676  4155  637  4161  3373  677
+CONVEX 1621    GT_PK(2,2)      479  4162  518  4163  3374  517
+CONVEX 1622    GT_PK(2,2)      479  4163  517  4164  2528  478
+CONVEX 1623    GT_PK(2,2)      479  4165  440  4164  3037  478
+CONVEX 1624    GT_PK(2,2)      479  4162  518  4166  3910  480
+CONVEX 1625    GT_PK(2,2)      515  4167  516  4168  2526  477
+CONVEX 1626    GT_PK(2,2)      475  4169  436  4170  3035  437
+CONVEX 1627    GT_PK(2,2)      511  4171  472  4172  4173  510
+CONVEX 1628    GT_PK(2,2)      511  4171  472  4174  3865  473
+CONVEX 1629    GT_PK(2,2)      550  4175  549  4176  3859  589
+CONVEX 1630    GT_PK(2,2)      550  4175  549  4177  3003  510
+CONVEX 1631    GT_PK(2,2)      550  4178  511  4177  4172  510
+CONVEX 1632    GT_PK(2,2)      635  4179  636  4180  4158  675
+CONVEX 1633    GT_PK(2,2)      635  4181  596  4179  2534  636
+CONVEX 1634    GT_PK(2,2)      673  4182  713  4183  3432  712
+CONVEX 1635    GT_PK(2,2)      593  4184  592  4185  4186  632
+CONVEX 1636    GT_PK(2,2)      593  4184  592  4187  4188  553
+CONVEX 1637    GT_PK(2,2)      709  4189  749  4190  4191  710
+CONVEX 1638    GT_PK(2,2)      709  4189  749  4192  3411  708
+CONVEX 1639    GT_PK(2,2)      709  4190  710  4193  3379  670
+CONVEX 1640    GT_PK(2,2)      709  4192  708  4193  3395  670
+CONVEX 1641    GT_PK(2,2)      905  4194  865  4195  3403  904
+CONVEX 1642    GT_PK(2,2)      905  4196  943  4195  4197  904
+CONVEX 1643    GT_PK(2,2)      827  4198  787  4199  3407  788
+CONVEX 1644    GT_PK(2,2)      827  4198  787  4200  2546  826
+CONVEX 1645    GT_PK(2,2)      866  4201  867  4202  4203  906
+CONVEX 1646    GT_PK(2,2)      866  4204  905  4202  4205  906
+CONVEX 1647    GT_PK(2,2)      866  4204  905  4206  4194  865
+CONVEX 1648    GT_PK(2,2)      866  4207  827  4201  4208  867
+CONVEX 1649    GT_PK(2,2)      866  4206  865  4209  3402  826
+CONVEX 1650    GT_PK(2,2)      866  4207  827  4209  4200  826
+CONVEX 1651    GT_PK(2,2)      832  4210  831  4211  3439  792
+CONVEX 1652    GT_PK(2,2)      832  4211  792  4212  3387  793
+CONVEX 1653    GT_PK(2,2)      832  4213  833  4212  3507  793
+CONVEX 1654    GT_PK(2,2)      832  4213  833  4214  3504  872
+CONVEX 1655    GT_PK(2,2)      830  4215  831  4216  3440  791
+CONVEX 1656    GT_PK(2,2)      828  4217  867  4218  4219  868
+CONVEX 1657    GT_PK(2,2)      828  4220  789  4221  3442  788
+CONVEX 1658    GT_PK(2,2)      828  4222  827  4221  4199  788
+CONVEX 1659    GT_PK(2,2)      828  4222  827  4217  4208  867
+CONVEX 1660    GT_PK(2,2)      986  4223  1025  4224  3448  1024
+CONVEX 1661    GT_PK(2,2)      986  4225  985  4224  2602  1024
+CONVEX 1662    GT_PK(2,2)      986  4226  947  4227  3457  948
+CONVEX 1663    GT_PK(2,2)      986  4226  947  4225  4228  985
+CONVEX 1664    GT_PK(2,2)      907  4229  867  4230  4219  868
+CONVEX 1665    GT_PK(2,2)      907  4229  867  4231  4203  906
+CONVEX 1666    GT_PK(2,2)      907  4232  945  4231  4233  906
+CONVEX 1667    GT_PK(2,2)      990  4234  991  4235  3460  1029
+CONVEX 1668    GT_PK(2,2)      990  4235  1029  4236  3429  1028
+CONVEX 1669    GT_PK(2,2)      990  4237  989  4236  2619  1028
+CONVEX 1670    GT_PK(2,2)      990  4238  951  4237  3485  989
+CONVEX 1671    GT_PK(2,2)      990  4234  991  4239  3476  952
+CONVEX 1672    GT_PK(2,2)      990  4238  951  4239  3489  952
+CONVEX 1673    GT_PK(2,2)      1072  4240  1073  4241  4242  1035
+CONVEX 1674    GT_PK(2,2)      1072  4243  1109  4244  4012  1108
+CONVEX 1675    GT_PK(2,2)      1072  4243  1109  4240  4245  1073
+CONVEX 1676    GT_PK(2,2)      994  4246  993  4247  3471  1032
+CONVEX 1677    GT_PK(2,2)      994  4248  1033  4247  3463  1032
+CONVEX 1678    GT_PK(2,2)      994  4246  993  4249  4250  955
+CONVEX 1679    GT_PK(2,2)      994  4251  956  4249  4252  955
+CONVEX 1680    GT_PK(2,2)      954  4253  953  4254  3478  915
+CONVEX 1681    GT_PK(2,2)      954  4255  993  4256  4250  955
+CONVEX 1682    GT_PK(2,2)      954  4255  993  4257  3469  992
+CONVEX 1683    GT_PK(2,2)      954  4253  953  4257  3477  992
+CONVEX 1684    GT_PK(2,2)      954  4258  916  4256  4259  955
+CONVEX 1685    GT_PK(2,2)      954  4258  916  4254  4260  915
+CONVEX 1686    GT_PK(2,2)      1238  4261  1269  4262  2722  1237
+CONVEX 1687    GT_PK(2,2)      1238  4263  1205  4262  3491  1237
+CONVEX 1688    GT_PK(2,2)      1238  4261  1269  4264  2726  1270
+CONVEX 1689    GT_PK(2,2)      1238  4265  1239  4264  3613  1270
+CONVEX 1690    GT_PK(2,2)      1238  4263  1205  4266  3583  1206
+CONVEX 1691    GT_PK(2,2)      1238  4265  1239  4266  3609  1206
+CONVEX 1692    GT_PK(2,2)      1210  4267  1243  4268  2748  1211
+CONVEX 1693    GT_PK(2,2)      1210  4267  1243  4269  3617  1242
+CONVEX 1694    GT_PK(2,2)      795  4270  834  4271  3510  835
+CONVEX 1695    GT_PK(2,2)      795  4272  755  4273  3518  756
+CONVEX 1696    GT_PK(2,2)      795  4270  834  4274  3512  794
+CONVEX 1697    GT_PK(2,2)      795  4272  755  4274  3515  794
+CONVEX 1698    GT_PK(2,2)      795  4275  796  4273  1889  756
+CONVEX 1699    GT_PK(2,2)      795  4275  796  4271  1895  835
+CONVEX 1700    GT_PK(2,2)      1403  4276  1404  4277  2681  1422
+CONVEX 1701    GT_PK(2,2)      1403  4278  1402  4279  4280  1381
+CONVEX 1702    GT_PK(2,2)      1333  4281  1334  4282  3570  1306
+CONVEX 1703    GT_PK(2,2)      1333  4283  1305  4282  4284  1306
+CONVEX 1704    GT_PK(2,2)      1296  4285  1324  4286  4287  1297
+CONVEX 1705    GT_PK(2,2)      1296  4288  1267  4289  3596  1266
+CONVEX 1706    GT_PK(2,2)      1296  4288  1267  4286  2737  1297
+CONVEX 1707    GT_PK(2,2)      1325  4290  1324  4291  4292  1351
+CONVEX 1708    GT_PK(2,2)      1325  4293  1326  4294  3573  1298
+CONVEX 1709    GT_PK(2,2)      1325  4293  1326  4291  3577  1351
+CONVEX 1710    GT_PK(2,2)      1325  4294  1298  4295  2717  1297
+CONVEX 1711    GT_PK(2,2)      1325  4290  1324  4295  4287  1297
+CONVEX 1712    GT_PK(2,2)      1398  4296  1353  4297  4298  1376
+CONVEX 1713    GT_PK(2,2)      1146  4299  1147  4300  2708  1181
+CONVEX 1714    GT_PK(2,2)      1146  4301  1180  4300  3542  1181
+CONVEX 1715    GT_PK(2,2)      1146  4301  1180  4302  3544  1145
+CONVEX 1716    GT_PK(2,2)      1276  4303  1305  4304  4284  1306
+CONVEX 1717    GT_PK(2,2)      1276  4305  1277  4304  3568  1306
+CONVEX 1718    GT_PK(2,2)      1276  4305  1277  4306  3555  1245
+CONVEX 1719    GT_PK(2,2)      1276  4306  1245  4307  2701  1244
+CONVEX 1720    GT_PK(2,2)      1352  4308  1326  4309  3574  1327
+CONVEX 1721    GT_PK(2,2)      1352  4308  1326  4310  3576  1375
+CONVEX 1722    GT_PK(2,2)      1352  4311  1353  4309  4312  1327
+CONVEX 1723    GT_PK(2,2)      1352  4310  1375  4313  4314  1376
+CONVEX 1724    GT_PK(2,2)      1352  4311  1353  4313  4298  1376
+CONVEX 1725    GT_PK(2,2)      1202  4315  1203  4316  3607  1169
+CONVEX 1726    GT_PK(2,2)      1202  4316  1169  4317  2734  1168
+CONVEX 1727    GT_PK(2,2)      1202  4318  1235  4319  3599  1234
+CONVEX 1728    GT_PK(2,2)      1202  4318  1235  4315  3601  1203
+CONVEX 1729    GT_PK(2,2)      1202  4320  1201  4319  1863  1234
+CONVEX 1730    GT_PK(2,2)      1202  4320  1201  4317  2572  1168
+CONVEX 1731    GT_PK(2,2)      1275  4321  1274  4322  3620  1304
+CONVEX 1732    GT_PK(2,2)      1275  4321  1274  4323  3615  1243
+CONVEX 1733    GT_PK(2,2)      1275  4324  1305  4322  4325  1304
+CONVEX 1734    GT_PK(2,2)      1275  4326  1276  4324  4303  1305
+CONVEX 1735    GT_PK(2,2)      1275  4323  1243  4327  2747  1244
+CONVEX 1736    GT_PK(2,2)      1275  4326  1276  4327  4307  1244
+CONVEX 1737    GT_PK(2,2)      1118  4328  1082  4329  3647  1081
+CONVEX 1738    GT_PK(2,2)      1118  4330  1117  4329  3650  1081
+CONVEX 1739    GT_PK(2,2)      1118  4328  1082  4331  3638  1119
+CONVEX 1740    GT_PK(2,2)      1118  4330  1117  4332  3652  1153
+CONVEX 1741    GT_PK(2,2)      1118  4333  1154  4331  3239  1119
+CONVEX 1742    GT_PK(2,2)      1118  4333  1154  4332  2414  1153
+CONVEX 1743    GT_PK(2,2)      1086  4334  1123  4335  2792  1087
+CONVEX 1744    GT_PK(2,2)      1086  4336  1122  4334  3673  1123
+CONVEX 1745    GT_PK(2,2)      1086  4337  1049  4335  3681  1087
+CONVEX 1746    GT_PK(2,2)      1121  4338  1157  4339  4038  1156
+CONVEX 1747    GT_PK(2,2)      1121  4340  1122  4338  3676  1157
+CONVEX 1748    GT_PK(2,2)      1121  4341  1120  4339  4083  1156
+CONVEX 1749    GT_PK(2,2)      935  4342  973  4343  4344  974
+CONVEX 1750    GT_PK(2,2)      935  4345  895  4346  3328  896
+CONVEX 1751    GT_PK(2,2)      935  4347  936  4346  1797  896
+CONVEX 1752    GT_PK(2,2)      935  4343  974  4347  2778  936
+CONVEX 1753    GT_PK(2,2)      934  4348  895  4349  1959  894
+CONVEX 1754    GT_PK(2,2)      934  4350  973  4351  3677  972
+CONVEX 1755    GT_PK(2,2)      934  4352  935  4348  4345  895
+CONVEX 1756    GT_PK(2,2)      934  4352  935  4350  4342  973
+CONVEX 1757    GT_PK(2,2)      934  4349  894  4353  3838  933
+CONVEX 1758    GT_PK(2,2)      934  4351  972  4353  2750  933
+CONVEX 1759    GT_PK(2,2)      1012  4354  1051  4355  2788  1013
+CONVEX 1760    GT_PK(2,2)      1012  4356  974  4355  2780  1013
+CONVEX 1761    GT_PK(2,2)      1012  4357  973  4356  4344  974
+CONVEX 1762    GT_PK(2,2)      1012  4357  973  4358  3678  1011
+CONVEX 1763    GT_PK(2,2)      1012  4359  1050  4358  3682  1011
+CONVEX 1764    GT_PK(2,2)      1012  4359  1050  4354  4360  1051
+CONVEX 1765    GT_PK(2,2)      1159  4361  1160  4362  3683  1124
+CONVEX 1766    GT_PK(2,2)      1159  4363  1193  4364  1741  1158
+CONVEX 1767    GT_PK(2,2)      1159  4365  1194  4363  4366  1193
+CONVEX 1768    GT_PK(2,2)      1159  4361  1160  4365  3687  1194
+CONVEX 1769    GT_PK(2,2)      1159  4367  1123  4364  3675  1158
+CONVEX 1770    GT_PK(2,2)      1159  4362  1124  4367  2790  1123
+CONVEX 1771    GT_PK(2,2)      1088  4368  1124  4369  3685  1125
+CONVEX 1772    GT_PK(2,2)      1088  4370  1089  4369  4371  1125
+CONVEX 1773    GT_PK(2,2)      1088  4368  1124  4372  2791  1087
+CONVEX 1774    GT_PK(2,2)      1088  4370  1089  4373  3689  1051
+CONVEX 1775    GT_PK(2,2)      1088  4374  1050  4372  3680  1087
+CONVEX 1776    GT_PK(2,2)      1088  4374  1050  4373  4360  1051
+CONVEX 1777    GT_PK(2,2)      1128  4375  1127  4376  4377  1163
+CONVEX 1778    GT_PK(2,2)      1128  4378  1092  4379  3308  1129
+CONVEX 1779    GT_PK(2,2)      1128  4380  1091  4378  4125  1092
+CONVEX 1780    GT_PK(2,2)      1128  4380  1091  4375  4126  1127
+CONVEX 1781    GT_PK(2,2)      1128  4381  1164  4379  1542  1129
+CONVEX 1782    GT_PK(2,2)      1128  4376  1163  4381  2793  1164
+CONVEX 1783    GT_PK(2,2)      1161  4382  1160  4383  3684  1125
+CONVEX 1784    GT_PK(2,2)      1161  4384  1195  4385  3185  1196
+CONVEX 1785    GT_PK(2,2)      1161  4382  1160  4384  3686  1195
+CONVEX 1786    GT_PK(2,2)      1162  4386  1163  4387  2795  1197
+CONVEX 1787    GT_PK(2,2)      1162  4388  1127  4386  4377  1163
+CONVEX 1788    GT_PK(2,2)      1162  4387  1197  4389  1964  1196
+CONVEX 1789    GT_PK(2,2)      1162  4390  1161  4389  4385  1196
+CONVEX 1790    GT_PK(2,2)      271  4391  305  4392  2917  306
+CONVEX 1791    GT_PK(2,2)      271  4393  272  4392  3702  306
+CONVEX 1792    GT_PK(2,2)      240  4394  241  4395  1972  274
+CONVEX 1793    GT_PK(2,2)      273  4396  307  4397  2009  308
+CONVEX 1794    GT_PK(2,2)      273  4398  272  4396  3701  307
+CONVEX 1795    GT_PK(2,2)      273  4399  274  4397  2897  308
+CONVEX 1796    GT_PK(2,2)      273  4400  240  4399  4395  274
+CONVEX 1797    GT_PK(2,2)      67  4401  91  4402  3705  90
+CONVEX 1798    GT_PK(2,2)      67  4403  66  4402  2828  90
+CONVEX 1799    GT_PK(2,2)      67  4403  66  4404  1978  45
+CONVEX 1800    GT_PK(2,2)      67  4405  46  4404  3709  45
+CONVEX 1801    GT_PK(2,2)      47  4406  28  4407  2821  29
+CONVEX 1802    GT_PK(2,2)      47  4408  46  4406  3710  28
+CONVEX 1803    GT_PK(2,2)      47  4407  29  4409  2820  48
+CONVEX 1804    GT_PK(2,2)      47  4410  69  4409  4411  48
+CONVEX 1805    GT_PK(2,2)      567  4412  528  4413  2841  527
+CONVEX 1806    GT_PK(2,2)      567  4414  568  4412  3722  528
+CONVEX 1807    GT_PK(2,2)      607  4415  608  4416  2944  647
+CONVEX 1808    GT_PK(2,2)      607  4417  568  4415  3728  608
+CONVEX 1809    GT_PK(2,2)      607  4418  567  4417  4414  568
+CONVEX 1810    GT_PK(2,2)      607  4419  646  4416  3695  647
+CONVEX 1811    GT_PK(2,2)      607  4419  646  4420  2815  606
+CONVEX 1812    GT_PK(2,2)      607  4418  567  4420  4421  606
+CONVEX 1813    GT_PK(2,2)      386  4422  349  4423  3748  385
+CONVEX 1814    GT_PK(2,2)      386  4423  385  4424  2856  423
+CONVEX 1815    GT_PK(2,2)      386  4425  350  4426  4146  387
+CONVEX 1816    GT_PK(2,2)      386  4425  350  4422  4145  349
+CONVEX 1817    GT_PK(2,2)      496  4427  535  4428  3777  497
+CONVEX 1818    GT_PK(2,2)      496  4429  457  4430  2885  495
+CONVEX 1819    GT_PK(2,2)      496  4431  458  4428  3785  497
+CONVEX 1820    GT_PK(2,2)      496  4431  458  4429  3787  457
+CONVEX 1821    GT_PK(2,2)      534  4432  535  4433  3774  574
+CONVEX 1822    GT_PK(2,2)      534  4434  573  4435  3809  533
+CONVEX 1823    GT_PK(2,2)      534  4434  573  4433  3807  574
+CONVEX 1824    GT_PK(2,2)      534  4436  495  4435  2882  533
+CONVEX 1825    GT_PK(2,2)      534  4437  496  4436  4430  495
+CONVEX 1826    GT_PK(2,2)      534  4437  496  4432  4427  535
+CONVEX 1827    GT_PK(2,2)      803  4438  763  4439  3805  764
+CONVEX 1828    GT_PK(2,2)      803  4438  763  4440  3801  802
+CONVEX 1829    GT_PK(2,2)      804  4441  843  4442  3799  844
+CONVEX 1830    GT_PK(2,2)      804  4443  765  4444  2926  805
+CONVEX 1831    GT_PK(2,2)      804  4442  844  4444  2934  805
+CONVEX 1832    GT_PK(2,2)      804  4443  765  4445  2931  764
+CONVEX 1833    GT_PK(2,2)      804  4446  803  4445  4439  764
+CONVEX 1834    GT_PK(2,2)      804  4446  803  4441  4447  843
+CONVEX 1835    GT_PK(2,2)      693  4448  692  4449  4450  732
+CONVEX 1836    GT_PK(2,2)      693  4451  733  4449  4452  732
+CONVEX 1837    GT_PK(2,2)      693  4451  733  4453  4454  694
+CONVEX 1838    GT_PK(2,2)      693  4448  692  4455  3815  653
+CONVEX 1839    GT_PK(2,2)      731  4456  692  4457  4450  732
+CONVEX 1840    GT_PK(2,2)      731  4458  771  4457  4459  732
+CONVEX 1841    GT_PK(2,2)      731  4460  691  4461  2981  730
+CONVEX 1842    GT_PK(2,2)      731  4456  692  4460  3816  691
+CONVEX 1843    GT_PK(2,2)      731  4462  770  4461  3852  730
+CONVEX 1844    GT_PK(2,2)      731  4462  770  4458  4463  771
+CONVEX 1845    GT_PK(2,2)      892  4464  932  4465  1948  931
+CONVEX 1846    GT_PK(2,2)      892  4466  891  4465  2988  931
+CONVEX 1847    GT_PK(2,2)      892  4467  893  4464  3840  932
+CONVEX 1848    GT_PK(2,2)      892  4467  893  4468  3841  853
+CONVEX 1849    GT_PK(2,2)      816  4469  815  4470  3835  855
+CONVEX 1850    GT_PK(2,2)      816  4471  856  4470  3329  855
+CONVEX 1851    GT_PK(2,2)      816  4472  777  4473  3325  817
+CONVEX 1852    GT_PK(2,2)      816  4471  856  4473  3336  817
+CONVEX 1853    GT_PK(2,2)      814  4474  815  4475  3834  854
+CONVEX 1854    GT_PK(2,2)      814  4476  853  4475  3842  854
+CONVEX 1855    GT_PK(2,2)      814  4477  774  4478  2997  813
+CONVEX 1856    GT_PK(2,2)      814  4476  853  4478  4479  813
+CONVEX 1857    GT_PK(2,2)      772  4480  812  4481  3844  773
+CONVEX 1858    GT_PK(2,2)      772  4482  733  4481  4483  773
+CONVEX 1859    GT_PK(2,2)      772  4482  733  4484  4452  732
+CONVEX 1860    GT_PK(2,2)      772  4485  771  4484  4459  732
+CONVEX 1861    GT_PK(2,2)      849  4486  848  4487  3813  888
+CONVEX 1862    GT_PK(2,2)      849  4488  889  4487  3845  888
+CONVEX 1863    GT_PK(2,2)      734  4489  695  4490  3848  694
+CONVEX 1864    GT_PK(2,2)      734  4491  774  4492  2998  773
+CONVEX 1865    GT_PK(2,2)      734  4491  774  4493  4494  735
+CONVEX 1866    GT_PK(2,2)      734  4489  695  4493  4495  735
+CONVEX 1867    GT_PK(2,2)      734  4496  733  4492  4483  773
+CONVEX 1868    GT_PK(2,2)      734  4496  733  4490  4454  694
+CONVEX 1869    GT_PK(2,2)      471  4497  510  4498  3005  509
+CONVEX 1870    GT_PK(2,2)      471  4499  472  4497  4173  510
+CONVEX 1871    GT_PK(2,2)      435  4500  436  4501  3033  397
+CONVEX 1872    GT_PK(2,2)      435  4501  397  4502  2078  396
+CONVEX 1873    GT_PK(2,2)      435  4503  434  4502  3861  396
+CONVEX 1874    GT_PK(2,2)      435  4503  434  4504  3864  473
+CONVEX 1875    GT_PK(2,2)      604  4505  643  4506  3873  603
+CONVEX 1876    GT_PK(2,2)      604  4505  643  4507  3875  644
+CONVEX 1877    GT_PK(2,2)      487  4508  526  4509  3885  525
+CONVEX 1878    GT_PK(2,2)      487  4510  488  4508  3888  526
+CONVEX 1879    GT_PK(2,2)      487  4511  486  4509  3891  525
+CONVEX 1880    GT_PK(2,2)      485  4512  524  4513  3024  523
+CONVEX 1881    GT_PK(2,2)      485  4514  486  4512  3890  524
+CONVEX 1882    GT_PK(2,2)      485  4515  484  4513  3022  523
+CONVEX 1883    GT_PK(2,2)      485  4514  486  4516  4517  447
+CONVEX 1884    GT_PK(2,2)      481  4518  482  4519  3027  520
+CONVEX 1885    GT_PK(2,2)      481  4520  519  4519  3906  520
+CONVEX 1886    GT_PK(2,2)      481  4518  482  4521  3895  443
+CONVEX 1887    GT_PK(2,2)      481  4520  519  4522  3909  480
+CONVEX 1888    GT_PK(2,2)      481  4523  442  4521  3868  443
+CONVEX 1889    GT_PK(2,2)      481  4523  442  4522  4524  480
+CONVEX 1890    GT_PK(2,2)      324  4525  288  4526  3915  289
+CONVEX 1891    GT_PK(2,2)      324  4527  325  4526  2141  289
+CONVEX 1892    GT_PK(2,2)      324  4528  323  4529  3049  360
+CONVEX 1893    GT_PK(2,2)      324  4525  288  4528  3913  323
+CONVEX 1894    GT_PK(2,2)      324  4530  361  4529  2068  360
+CONVEX 1895    GT_PK(2,2)      324  4530  361  4527  2069  325
+CONVEX 1896    GT_PK(2,2)      179  4531  180  4532  3061  211
+CONVEX 1897    GT_PK(2,2)      179  4532  211  4533  4534  210
+CONVEX 1898    GT_PK(2,2)      179  4535  178  4533  4536  210
+CONVEX 1899    GT_PK(2,2)      179  4535  178  4537  4538  149
+CONVEX 1900    GT_PK(2,2)      179  4539  150  4537  3924  149
+CONVEX 1901    GT_PK(2,2)      179  4539  150  4531  3921  180
+CONVEX 1902    GT_PK(2,2)      243  4540  211  4541  4534  210
+CONVEX 1903    GT_PK(2,2)      243  4542  244  4540  3918  211
+CONVEX 1904    GT_PK(2,2)      243  4541  210  4543  4544  242
+CONVEX 1905    GT_PK(2,2)      243  4542  244  4545  3920  277
+CONVEX 1906    GT_PK(2,2)      243  4546  276  4543  1985  242
+CONVEX 1907    GT_PK(2,2)      243  4545  277  4546  3751  276
+CONVEX 1908    GT_PK(2,2)      123  4547  150  4548  3923  122
+CONVEX 1909    GT_PK(2,2)      123  4549  97  4548  3930  122
+CONVEX 1910    GT_PK(2,2)      123  4550  151  4551  2181  124
+CONVEX 1911    GT_PK(2,2)      123  4547  150  4550  3922  151
+CONVEX 1912    GT_PK(2,2)      123  4551  124  4552  1668  98
+CONVEX 1913    GT_PK(2,2)      123  4549  97  4552  3935  98
+CONVEX 1914    GT_PK(2,2)      95  4553  121  4554  4555  120
+CONVEX 1915    GT_PK(2,2)      95  4553  121  4556  3927  96
+CONVEX 1916    GT_PK(2,2)      70  4557  69  4558  4411  48
+CONVEX 1917    GT_PK(2,2)      70  4559  93  4557  3936  69
+CONVEX 1918    GT_PK(2,2)      50  4560  32  4561  4562  31
+CONVEX 1919    GT_PK(2,2)      50  4563  51  4560  3941  32
+CONVEX 1920    GT_PK(2,2)      368  4564  367  4565  3012  405
+CONVEX 1921    GT_PK(2,2)      368  4566  331  4564  3952  367
+CONVEX 1922    GT_PK(2,2)      446  4567  484  4568  3902  445
+CONVEX 1923    GT_PK(2,2)      446  4569  485  4570  4516  447
+CONVEX 1924    GT_PK(2,2)      446  4569  485  4567  4515  484
+CONVEX 1925    GT_PK(2,2)      267  4571  302  4572  2230  268
+CONVEX 1926    GT_PK(2,2)      267  4572  268  4573  2889  234
+CONVEX 1927    GT_PK(2,2)      267  4574  233  4573  2241  234
+CONVEX 1928    GT_PK(2,2)      264  4575  263  4576  4577  298
+CONVEX 1929    GT_PK(2,2)      133  4578  134  4579  3956  106
+CONVEX 1930    GT_PK(2,2)      133  4580  105  4581  2221  132
+CONVEX 1931    GT_PK(2,2)      133  4580  105  4579  2219  106
+CONVEX 1932    GT_PK(2,2)      133  4582  162  4581  2229  132
+CONVEX 1933    GT_PK(2,2)      133  4583  163  4582  4584  162
+CONVEX 1934    GT_PK(2,2)      133  4578  134  4583  3957  163
+CONVEX 1935    GT_PK(2,2)      135  4585  108  4586  3124  107
+CONVEX 1936    GT_PK(2,2)      135  4587  134  4586  3955  107
+CONVEX 1937    GT_PK(2,2)      135  4587  134  4588  3958  164
+CONVEX 1938    GT_PK(2,2)      135  4589  165  4588  3992  164
+CONVEX 1939    GT_PK(2,2)      194  4590  226  4591  3945  193
+CONVEX 1940    GT_PK(2,2)      194  4592  195  4593  3963  163
+CONVEX 1941    GT_PK(2,2)      194  4594  227  4590  4595  226
+CONVEX 1942    GT_PK(2,2)      194  4594  227  4592  4596  195
+CONVEX 1943    GT_PK(2,2)      194  4593  163  4597  4584  162
+CONVEX 1944    GT_PK(2,2)      194  4591  193  4597  3091  162
+CONVEX 1945    GT_PK(2,2)      375  4598  376  4599  2907  413
+CONVEX 1946    GT_PK(2,2)      375  4600  374  4601  4602  338
+CONVEX 1947    GT_PK(2,2)      375  4598  376  4603  2922  339
+CONVEX 1948    GT_PK(2,2)      375  4601  338  4603  3093  339
+CONVEX 1949    GT_PK(2,2)      199  4604  232  4605  3964  200
+CONVEX 1950    GT_PK(2,2)      199  4606  167  4607  4608  198
+CONVEX 1951    GT_PK(2,2)      199  4607  198  4609  4610  231
+CONVEX 1952    GT_PK(2,2)      199  4604  232  4609  4611  231
+CONVEX 1953    GT_PK(2,2)      199  4605  200  4612  3101  168
+CONVEX 1954    GT_PK(2,2)      199  4606  167  4612  4613  168
+CONVEX 1955    GT_PK(2,2)      138  4614  111  4615  3966  139
+CONVEX 1956    GT_PK(2,2)      138  4615  139  4616  2244  168
+CONVEX 1957    GT_PK(2,2)      138  4617  167  4618  4619  137
+CONVEX 1958    GT_PK(2,2)      138  4617  167  4616  4613  168
+CONVEX 1959    GT_PK(2,2)      110  4620  138  4621  4614  111
+CONVEX 1960    GT_PK(2,2)      110  4622  109  4623  4624  137
+CONVEX 1961    GT_PK(2,2)      110  4620  138  4623  4618  137
+CONVEX 1962    GT_PK(2,2)      85  4625  111  4626  3968  86
+CONVEX 1963    GT_PK(2,2)      85  4627  62  4628  3975  61
+CONVEX 1964    GT_PK(2,2)      85  4627  62  4626  3977  86
+CONVEX 1965    GT_PK(2,2)      85  4629  110  4625  4621  111
+CONVEX 1966    GT_PK(2,2)      60  4630  83  4631  3986  59
+CONVEX 1967    GT_PK(2,2)      60  4632  38  4633  3982  39
+CONVEX 1968    GT_PK(2,2)      60  4632  38  4631  3979  59
+CONVEX 1969    GT_PK(2,2)      60  4633  39  4634  3120  61
+CONVEX 1970    GT_PK(2,2)      136  4635  109  4636  4624  137
+CONVEX 1971    GT_PK(2,2)      136  4637  108  4635  3990  109
+CONVEX 1972    GT_PK(2,2)      136  4638  135  4637  4585  108
+CONVEX 1973    GT_PK(2,2)      136  4638  135  4639  4589  165
+CONVEX 1974    GT_PK(2,2)      197  4640  165  4641  3991  196
+CONVEX 1975    GT_PK(2,2)      1389  4642  1388  4643  4003  1365
+CONVEX 1976    GT_PK(2,2)      1389  4644  1411  4645  3190  1390
+CONVEX 1977    GT_PK(2,2)      1389  4644  1411  4646  3194  1410
+CONVEX 1978    GT_PK(2,2)      1389  4642  1388  4646  4002  1410
+CONVEX 1979    GT_PK(2,2)      1389  4647  1366  4645  3230  1390
+CONVEX 1980    GT_PK(2,2)      1389  4647  1366  4643  4074  1365
+CONVEX 1981    GT_PK(2,2)      1110  4648  1074  4649  4650  1073
+CONVEX 1982    GT_PK(2,2)      1110  4651  1109  4649  4245  1073
+CONVEX 1983    GT_PK(2,2)      1110  4651  1109  4652  4011  1145
+CONVEX 1984    GT_PK(2,2)      1110  4653  1146  4652  4302  1145
+CONVEX 1985    GT_PK(2,2)      840  4654  800  4655  4153  801
+CONVEX 1986    GT_PK(2,2)      840  4654  800  4656  4151  839
+CONVEX 1987    GT_PK(2,2)      842  4657  803  4658  4440  802
+CONVEX 1988    GT_PK(2,2)      842  4657  803  4659  4447  843
+CONVEX 1989    GT_PK(2,2)      999  4660  1038  4661  3135  1000
+CONVEX 1990    GT_PK(2,2)      999  4662  1037  4660  4014  1038
+CONVEX 1991    GT_PK(2,2)      1036  4663  1037  4664  4016  1074
+CONVEX 1992    GT_PK(2,2)      1036  4665  1073  4666  4242  1035
+CONVEX 1993    GT_PK(2,2)      1036  4664  1074  4665  4650  1073
+CONVEX 1994    GT_PK(2,2)      1225  4667  1226  4668  4044  1258
+CONVEX 1995    GT_PK(2,2)      1225  4669  1191  4670  4035  1192
+CONVEX 1996    GT_PK(2,2)      1225  4667  1226  4670  4047  1192
+CONVEX 1997    GT_PK(2,2)      1287  4671  1317  4672  2345  1316
+CONVEX 1998    GT_PK(2,2)      1287  4673  1286  4672  4080  1316
+CONVEX 1999    GT_PK(2,2)      1255  4674  1254  4675  3158  1286
+CONVEX 2000    GT_PK(2,2)      1255  4676  1287  4675  4673  1286
+CONVEX 2001    GT_PK(2,2)      1255  4676  1287  4677  4678  1256
+CONVEX 2002    GT_PK(2,2)      1255  4674  1254  4679  3162  1222
+CONVEX 2003    GT_PK(2,2)      1318  4680  1289  4681  4682  1319
+CONVEX 2004    GT_PK(2,2)      1318  4683  1317  4684  2346  1345
+CONVEX 2005    GT_PK(2,2)      1318  4684  1345  4685  2323  1346
+CONVEX 2006    GT_PK(2,2)      1318  4681  1319  4685  3175  1346
+CONVEX 2007    GT_PK(2,2)      1288  4686  1287  4687  4678  1256
+CONVEX 2008    GT_PK(2,2)      1288  4686  1287  4688  4671  1317
+CONVEX 2009    GT_PK(2,2)      1288  4689  1318  4688  4683  1317
+CONVEX 2010    GT_PK(2,2)      1288  4689  1318  4690  4680  1289
+CONVEX 2011    GT_PK(2,2)      1290  4691  1289  4692  4682  1319
+CONVEX 2012    GT_PK(2,2)      1290  4693  1291  4694  3173  1320
+CONVEX 2013    GT_PK(2,2)      1290  4692  1319  4694  3176  1320
+CONVEX 2014    GT_PK(2,2)      1290  4691  1289  4695  4696  1258
+CONVEX 2015    GT_PK(2,2)      1290  4697  1259  4693  4052  1291
+CONVEX 2016    GT_PK(2,2)      1290  4697  1259  4695  4045  1258
+CONVEX 2017    GT_PK(2,2)      1322  4698  1292  4699  4040  1293
+CONVEX 2018    GT_PK(2,2)      1322  4700  1349  4701  4032  1350
+CONVEX 2019    GT_PK(2,2)      1322  4700  1349  4702  4031  1321
+CONVEX 2020    GT_PK(2,2)      1322  4698  1292  4702  4041  1321
+CONVEX 2021    GT_PK(2,2)      1322  4701  1350  4703  4704  1323
+CONVEX 2022    GT_PK(2,2)      1322  4699  1293  4703  3167  1323
+CONVEX 2023    GT_PK(2,2)      1228  4705  1195  4706  3688  1194
+CONVEX 2024    GT_PK(2,2)      1228  4705  1195  4707  3186  1229
+CONVEX 2025    GT_PK(2,2)      1228  4708  1261  4707  3188  1229
+CONVEX 2026    GT_PK(2,2)      1228  4709  1260  4708  4049  1261
+CONVEX 2027    GT_PK(2,2)      1314  4710  1315  4711  4075  1342
+CONVEX 2028    GT_PK(2,2)      1314  4712  1313  4713  4063  1284
+CONVEX 2029    GT_PK(2,2)      1314  4713  1284  4714  2400  1285
+CONVEX 2030    GT_PK(2,2)      1314  4710  1315  4714  4078  1285
+CONVEX 2031    GT_PK(2,2)      1314  4712  1313  4715  4071  1341
+CONVEX 2032    GT_PK(2,2)      1314  4711  1342  4715  3236  1341
+CONVEX 2033    GT_PK(2,2)      461  4716  460  4717  3765  422
+CONVEX 2034    GT_PK(2,2)      461  4718  499  4716  4099  460
+CONVEX 2035    GT_PK(2,2)      461  4719  423  4717  2858  422
+CONVEX 2036    GT_PK(2,2)      620  4720  660  4721  4111  621
+CONVEX 2037    GT_PK(2,2)      620  4720  660  4722  4723  659
+CONVEX 2038    GT_PK(2,2)      620  4724  619  4722  4725  659
+CONVEX 2039    GT_PK(2,2)      699  4726  739  4727  3270  700
+CONVEX 2040    GT_PK(2,2)      699  4728  660  4727  4109  700
+CONVEX 2041    GT_PK(2,2)      699  4728  660  4729  4723  659
+CONVEX 2042    GT_PK(2,2)      699  4726  739  4730  2443  738
+CONVEX 2043    GT_PK(2,2)      698  4731  699  4732  4730  738
+CONVEX 2044    GT_PK(2,2)      698  4731  699  4733  4729  659
+CONVEX 2045    GT_PK(2,2)      776  4734  816  4735  4472  777
+CONVEX 2046    GT_PK(2,2)      776  4734  816  4736  4469  815
+CONVEX 2047    GT_PK(2,2)      464  4737  463  4738  4739  425
+CONVEX 2048    GT_PK(2,2)      464  4737  463  4740  4741  502
+CONVEX 2049    GT_PK(2,2)      464  4742  503  4743  4096  465
+CONVEX 2050    GT_PK(2,2)      464  4742  503  4740  4744  502
+CONVEX 2051    GT_PK(2,2)      426  4745  425  4746  4135  388
+CONVEX 2052    GT_PK(2,2)      426  4747  389  4748  4137  427
+CONVEX 2053    GT_PK(2,2)      426  4747  389  4746  4139  388
+CONVEX 2054    GT_PK(2,2)      426  4749  464  4745  4738  425
+CONVEX 2055    GT_PK(2,2)      426  4748  427  4750  4107  465
+CONVEX 2056    GT_PK(2,2)      426  4749  464  4750  4743  465
+CONVEX 2057    GT_PK(2,2)      917  4751  877  4752  4148  878
+CONVEX 2058    GT_PK(2,2)      917  4751  877  4753  4754  916
+CONVEX 2059    GT_PK(2,2)      917  4755  956  4756  4252  955
+CONVEX 2060    GT_PK(2,2)      917  4753  916  4756  4259  955
+CONVEX 2061    GT_PK(2,2)      876  4757  877  4758  4754  916
+CONVEX 2062    GT_PK(2,2)      876  4758  916  4759  4260  915
+CONVEX 2063    GT_PK(2,2)      876  4760  837  4761  3360  836
+CONVEX 2064    GT_PK(2,2)      876  4757  877  4760  4149  837
+CONVEX 2065    GT_PK(2,2)      876  4762  875  4761  2638  836
+CONVEX 2066    GT_PK(2,2)      876  4762  875  4759  2640  915
+CONVEX 2067    GT_PK(2,2)      441  4763  479  4764  4165  440
+CONVEX 2068    GT_PK(2,2)      441  4765  442  4766  3869  403
+CONVEX 2069    GT_PK(2,2)      441  4765  442  4767  4524  480
+CONVEX 2070    GT_PK(2,2)      441  4763  479  4767  4166  480
+CONVEX 2071    GT_PK(2,2)      441  4768  402  4766  2089  403
+CONVEX 2072    GT_PK(2,2)      441  4764  440  4768  3039  402
+CONVEX 2073    GT_PK(2,2)      555  4769  516  4770  2529  556
+CONVEX 2074    GT_PK(2,2)      555  4771  515  4769  4167  516
+CONVEX 2075    GT_PK(2,2)      476  4772  475  4773  4170  437
+CONVEX 2076    GT_PK(2,2)      476  4774  515  4775  4168  477
+CONVEX 2077    GT_PK(2,2)      476  4776  438  4775  2100  477
+CONVEX 2078    GT_PK(2,2)      476  4776  438  4773  2101  437
+CONVEX 2079    GT_PK(2,2)      512  4777  511  4778  4174  473
+CONVEX 2080    GT_PK(2,2)      631  4779  671  4780  4781  632
+CONVEX 2081    GT_PK(2,2)      631  4782  592  4780  4186  632
+CONVEX 2082    GT_PK(2,2)      631  4779  671  4783  3378  670
+CONVEX 2083    GT_PK(2,2)      674  4784  714  4785  2537  675
+CONVEX 2084    GT_PK(2,2)      674  4786  635  4785  4180  675
+CONVEX 2085    GT_PK(2,2)      674  4784  714  4787  3384  713
+CONVEX 2086    GT_PK(2,2)      674  4786  635  4788  4789  634
+CONVEX 2087    GT_PK(2,2)      674  4790  673  4787  4182  713
+CONVEX 2088    GT_PK(2,2)      674  4790  673  4788  4791  634
+CONVEX 2089    GT_PK(2,2)      672  4792  671  4793  3380  711
+CONVEX 2090    GT_PK(2,2)      672  4792  671  4794  4781  632
+CONVEX 2091    GT_PK(2,2)      672  4793  711  4795  2589  712
+CONVEX 2092    GT_PK(2,2)      672  4796  673  4795  4183  712
+CONVEX 2093    GT_PK(2,2)      633  4797  673  4798  4791  634
+CONVEX 2094    GT_PK(2,2)      633  4799  672  4797  4796  673
+CONVEX 2095    GT_PK(2,2)      633  4800  593  4801  4185  632
+CONVEX 2096    GT_PK(2,2)      633  4799  672  4801  4794  632
+CONVEX 2097    GT_PK(2,2)      944  4802  905  4803  4196  943
+CONVEX 2098    GT_PK(2,2)      944  4804  982  4805  2543  981
+CONVEX 2099    GT_PK(2,2)      944  4803  943  4805  4806  981
+CONVEX 2100    GT_PK(2,2)      944  4804  982  4807  2539  983
+CONVEX 2101    GT_PK(2,2)      944  4808  945  4807  3456  983
+CONVEX 2102    GT_PK(2,2)      944  4808  945  4809  4233  906
+CONVEX 2103    GT_PK(2,2)      944  4802  905  4809  4205  906
+CONVEX 2104    GT_PK(2,2)      871  4810  832  4811  4210  831
+CONVEX 2105    GT_PK(2,2)      871  4812  911  4813  2610  910
+CONVEX 2106    GT_PK(2,2)      871  4814  872  4812  2625  911
+CONVEX 2107    GT_PK(2,2)      871  4810  832  4814  4214  872
+CONVEX 2108    GT_PK(2,2)      870  4815  830  4816  4215  831
+CONVEX 2109    GT_PK(2,2)      870  4817  909  4818  1876  910
+CONVEX 2110    GT_PK(2,2)      870  4819  869  4817  4820  909
+CONVEX 2111    GT_PK(2,2)      870  4819  869  4815  4821  830
+CONVEX 2112    GT_PK(2,2)      870  4822  871  4818  4813  910
+CONVEX 2113    GT_PK(2,2)      870  4822  871  4816  4811  831
+CONVEX 2114    GT_PK(2,2)      790  4823  751  4824  3438  791
+CONVEX 2115    GT_PK(2,2)      790  4825  830  4824  4216  791
+CONVEX 2116    GT_PK(2,2)      987  4826  986  4827  4223  1025
+CONVEX 2117    GT_PK(2,2)      987  4828  949  4829  2605  988
+CONVEX 2118    GT_PK(2,2)      987  4828  949  4830  2611  948
+CONVEX 2119    GT_PK(2,2)      987  4826  986  4830  4227  948
+CONVEX 2120    GT_PK(2,2)      987  4831  1026  4829  3446  988
+CONVEX 2121    GT_PK(2,2)      987  4827  1025  4831  3450  1026
+CONVEX 2122    GT_PK(2,2)      908  4832  907  4833  4230  868
+CONVEX 2123    GT_PK(2,2)      908  4834  869  4833  4835  868
+CONVEX 2124    GT_PK(2,2)      908  4836  947  4837  3458  909
+CONVEX 2125    GT_PK(2,2)      908  4834  869  4837  4820  909
+CONVEX 2126    GT_PK(2,2)      1034  4838  1072  4839  4241  1035
+CONVEX 2127    GT_PK(2,2)      1071  4840  1033  4841  3464  1070
+CONVEX 2128    GT_PK(2,2)      1071  4842  1072  4843  4244  1108
+CONVEX 2129    GT_PK(2,2)      1071  4844  1034  4840  4845  1033
+CONVEX 2130    GT_PK(2,2)      1071  4844  1034  4842  4838  1072
+CONVEX 2131    GT_PK(2,2)      1142  4846  1106  4847  4848  1141
+CONVEX 2132    GT_PK(2,2)      1104  4849  1103  4850  3426  1067
+CONVEX 2133    GT_PK(2,2)      1104  4851  1139  4849  3497  1103
+CONVEX 2134    GT_PK(2,2)      1104  4851  1139  4852  3500  1140
+CONVEX 2135    GT_PK(2,2)      1209  4853  1210  4854  4269  1242
+CONVEX 2136    GT_PK(2,2)      1209  4855  1241  4856  3628  1208
+CONVEX 2137    GT_PK(2,2)      1209  4855  1241  4854  3629  1242
+CONVEX 2138    GT_PK(2,2)      1382  4857  1404  4858  2676  1383
+CONVEX 2139    GT_PK(2,2)      1382  4859  1403  4857  4276  1404
+CONVEX 2140    GT_PK(2,2)      1382  4859  1403  4860  4279  1381
+CONVEX 2141    GT_PK(2,2)      1421  4861  1403  4862  4277  1422
+CONVEX 2142    GT_PK(2,2)      1421  4863  1436  4864  4865  1435
+CONVEX 2143    GT_PK(2,2)      1421  4863  1436  4862  3536  1422
+CONVEX 2144    GT_PK(2,2)      1421  4866  1402  4864  4867  1435
+CONVEX 2145    GT_PK(2,2)      1421  4861  1403  4866  4278  1402
+CONVEX 2146    GT_PK(2,2)      1332  4868  1305  4869  4325  1304
+CONVEX 2147    GT_PK(2,2)      1332  4870  1333  4868  4283  1305
+CONVEX 2148    GT_PK(2,2)      1377  4871  1398  4872  4296  1353
+CONVEX 2149    GT_PK(2,2)      1328  4873  1353  4874  4312  1327
+CONVEX 2150    GT_PK(2,2)      1302  4875  1273  4876  3623  1303
+CONVEX 2151    GT_PK(2,2)      1302  4875  1273  4877  3627  1272
+CONVEX 2152    GT_PK(2,2)      1420  4878  1402  4879  4867  1435
+CONVEX 2153    GT_PK(2,2)      1048  4880  1086  4881  4337  1049
+CONVEX 2154    GT_PK(2,2)      1048  4882  1010  4883  2777  1009
+CONVEX 2155    GT_PK(2,2)      1048  4882  1010  4881  2771  1049
+CONVEX 2156    GT_PK(2,2)      1085  4884  1086  4885  4336  1122
+CONVEX 2157    GT_PK(2,2)      1085  4886  1121  4885  4340  1122
+CONVEX 2158    GT_PK(2,2)      1085  4887  1048  4884  4880  1086
+CONVEX 2159    GT_PK(2,2)      1126  4888  1127  4889  4128  1090
+CONVEX 2160    GT_PK(2,2)      1126  4890  1162  4888  4388  1127
+CONVEX 2161    GT_PK(2,2)      1126  4891  1089  4892  4371  1125
+CONVEX 2162    GT_PK(2,2)      1126  4891  1089  4889  3691  1090
+CONVEX 2163    GT_PK(2,2)      1126  4893  1161  4892  4383  1125
+CONVEX 2164    GT_PK(2,2)      1126  4890  1162  4893  4390  1161
+CONVEX 2165    GT_PK(2,2)      238  4894  271  4895  4393  272
+CONVEX 2166    GT_PK(2,2)      236  4896  235  4897  2891  203
+CONVEX 2167    GT_PK(2,2)      236  4898  204  4897  4899  203
+CONVEX 2168    GT_PK(2,2)      270  4900  305  4901  2925  304
+CONVEX 2169    GT_PK(2,2)      270  4902  271  4900  4391  305
+CONVEX 2170    GT_PK(2,2)      172  4903  204  4904  4899  203
+CONVEX 2171    GT_PK(2,2)      172  4903  204  4905  4906  173
+CONVEX 2172    GT_PK(2,2)      68  4907  47  4908  4410  69
+CONVEX 2173    GT_PK(2,2)      68  4909  91  4910  4911  92
+CONVEX 2174    GT_PK(2,2)      68  4908  69  4910  3938  92
+CONVEX 2175    GT_PK(2,2)      68  4912  67  4909  4401  91
+CONVEX 2176    GT_PK(2,2)      68  4912  67  4913  4405  46
+CONVEX 2177    GT_PK(2,2)      68  4907  47  4913  4408  46
+CONVEX 2178    GT_PK(2,2)      566  4914  567  4915  4421  606
+CONVEX 2179    GT_PK(2,2)      566  4916  565  4917  3883  526
+CONVEX 2180    GT_PK(2,2)      566  4917  526  4918  3889  527
+CONVEX 2181    GT_PK(2,2)      566  4914  567  4918  4413  527
+CONVEX 2182    GT_PK(2,2)      424  4919  425  4920  4136  387
+CONVEX 2183    GT_PK(2,2)      424  4921  386  4920  4426  387
+CONVEX 2184    GT_PK(2,2)      424  4921  386  4922  4424  423
+CONVEX 2185    GT_PK(2,2)      424  4923  463  4919  4739  425
+CONVEX 2186    GT_PK(2,2)      654  4924  693  4925  4453  694
+CONVEX 2187    GT_PK(2,2)      654  4925  694  4926  3850  655
+CONVEX 2188    GT_PK(2,2)      654  4927  615  4926  4928  655
+CONVEX 2189    GT_PK(2,2)      654  4927  615  4929  3853  614
+CONVEX 2190    GT_PK(2,2)      654  4929  614  4930  2995  653
+CONVEX 2191    GT_PK(2,2)      654  4924  693  4930  4455  653
+CONVEX 2192    GT_PK(2,2)      852  4931  892  4932  4466  891
+CONVEX 2193    GT_PK(2,2)      852  4933  812  4934  3843  813
+CONVEX 2194    GT_PK(2,2)      852  4935  853  4934  4479  813
+CONVEX 2195    GT_PK(2,2)      852  4931  892  4935  4468  853
+CONVEX 2196    GT_PK(2,2)      852  4936  851  4932  4937  891
+CONVEX 2197    GT_PK(2,2)      852  4936  851  4933  4938  812
+CONVEX 2198    GT_PK(2,2)      775  4939  814  4940  4474  815
+CONVEX 2199    GT_PK(2,2)      775  4941  776  4942  4943  736
+CONVEX 2200    GT_PK(2,2)      775  4941  776  4940  4736  815
+CONVEX 2201    GT_PK(2,2)      775  4944  735  4942  4945  736
+CONVEX 2202    GT_PK(2,2)      775  4946  774  4944  4494  735
+CONVEX 2203    GT_PK(2,2)      775  4939  814  4946  4477  774
+CONVEX 2204    GT_PK(2,2)      890  4947  851  4948  4937  891
+CONVEX 2205    GT_PK(2,2)      890  4949  889  4950  3847  929
+CONVEX 2206    GT_PK(2,2)      890  4950  929  4951  2764  930
+CONVEX 2207    GT_PK(2,2)      890  4948  891  4951  2987  930
+CONVEX 2208    GT_PK(2,2)      809  4952  770  4953  3851  769
+CONVEX 2209    GT_PK(2,2)      809  4954  808  4953  2963  769
+CONVEX 2210    GT_PK(2,2)      809  4955  848  4954  3810  808
+CONVEX 2211    GT_PK(2,2)      809  4956  849  4955  4486  848
+CONVEX 2212    GT_PK(2,2)      810  4957  809  4958  4956  849
+CONVEX 2213    GT_PK(2,2)      810  4959  770  4960  4463  771
+CONVEX 2214    GT_PK(2,2)      810  4957  809  4959  4952  770
+CONVEX 2215    GT_PK(2,2)      432  4961  472  4962  3866  433
+CONVEX 2216    GT_PK(2,2)      432  4963  471  4961  4499  472
+CONVEX 2217    GT_PK(2,2)      432  4962  433  4964  3007  394
+CONVEX 2218    GT_PK(2,2)      474  4965  475  4966  4169  436
+CONVEX 2219    GT_PK(2,2)      474  4967  435  4966  4500  436
+CONVEX 2220    GT_PK(2,2)      474  4967  435  4968  4504  473
+CONVEX 2221    GT_PK(2,2)      474  4969  512  4968  4778  473
+CONVEX 2222    GT_PK(2,2)      564  4970  603  4971  3882  563
+CONVEX 2223    GT_PK(2,2)      564  4972  604  4970  4506  603
+CONVEX 2224    GT_PK(2,2)      564  4972  604  4973  4974  565
+CONVEX 2225    GT_PK(2,2)      564  4975  524  4971  3025  563
+CONVEX 2226    GT_PK(2,2)      564  4975  524  4976  3892  525
+CONVEX 2227    GT_PK(2,2)      564  4973  565  4976  3884  525
+CONVEX 2228    GT_PK(2,2)      605  4977  604  4978  4974  565
+CONVEX 2229    GT_PK(2,2)      605  4979  606  4980  2816  645
+CONVEX 2230    GT_PK(2,2)      605  4981  644  4980  3019  645
+CONVEX 2231    GT_PK(2,2)      605  4977  604  4981  4507  644
+CONVEX 2232    GT_PK(2,2)      605  4982  566  4979  4915  606
+CONVEX 2233    GT_PK(2,2)      605  4982  566  4978  4916  565
+CONVEX 2234    GT_PK(2,2)      148  4983  177  4984  4985  178
+CONVEX 2235    GT_PK(2,2)      148  4984  178  4986  4538  149
+CONVEX 2236    GT_PK(2,2)      148  4987  121  4986  3929  149
+CONVEX 2237    GT_PK(2,2)      148  4987  121  4988  4555  120
+CONVEX 2238    GT_PK(2,2)      208  4989  240  4990  4394  241
+CONVEX 2239    GT_PK(2,2)      208  4989  240  4991  4992  207
+CONVEX 2240    GT_PK(2,2)      209  4993  178  4994  4536  210
+CONVEX 2241    GT_PK(2,2)      209  4995  177  4993  4985  178
+CONVEX 2242    GT_PK(2,2)      209  4994  210  4996  4544  242
+CONVEX 2243    GT_PK(2,2)      209  4997  208  4995  4998  177
+CONVEX 2244    GT_PK(2,2)      209  4999  241  4996  1970  242
+CONVEX 2245    GT_PK(2,2)      209  4997  208  4999  4990  241
+CONVEX 2246    GT_PK(2,2)      94  5000  95  5001  4554  120
+CONVEX 2247    GT_PK(2,2)      94  5000  95  5002  5003  71
+CONVEX 2248    GT_PK(2,2)      94  5004  70  5002  5005  71
+CONVEX 2249    GT_PK(2,2)      94  5004  70  5006  4559  93
+CONVEX 2250    GT_PK(2,2)      72  5007  95  5008  5003  71
+CONVEX 2251    GT_PK(2,2)      72  5009  50  5008  5010  71
+CONVEX 2252    GT_PK(2,2)      72  5009  50  5011  4563  51
+CONVEX 2253    GT_PK(2,2)      72  5007  95  5012  4556  96
+CONVEX 2254    GT_PK(2,2)      72  5013  73  5012  3933  96
+CONVEX 2255    GT_PK(2,2)      72  5011  51  5013  3939  73
+CONVEX 2256    GT_PK(2,2)      175  5014  207  5015  5016  206
+CONVEX 2257    GT_PK(2,2)      49  5017  70  5018  5005  71
+CONVEX 2258    GT_PK(2,2)      49  5019  50  5018  5010  71
+CONVEX 2259    GT_PK(2,2)      49  5020  30  5021  2819  48
+CONVEX 2260    GT_PK(2,2)      49  5017  70  5021  4558  48
+CONVEX 2261    GT_PK(2,2)      49  5019  50  5022  4561  31
+CONVEX 2262    GT_PK(2,2)      49  5023  16  5022  5024  31
+CONVEX 2263    GT_PK(2,2)      49  5023  16  5020  3706  30
+CONVEX 2264    GT_PK(2,2)      406  5025  368  5026  4565  405
+CONVEX 2265    GT_PK(2,2)      406  5027  444  5026  3896  405
+CONVEX 2266    GT_PK(2,2)      406  5027  444  5028  3904  445
+CONVEX 2267    GT_PK(2,2)      301  5029  267  5030  4571  302
+CONVEX 2268    GT_PK(2,2)      299  5031  264  5032  4576  298
+CONVEX 2269    GT_PK(2,2)      265  5033  299  5034  5035  300
+CONVEX 2270    GT_PK(2,2)      265  5033  299  5036  5031  264
+CONVEX 2271    GT_PK(2,2)      265  5037  232  5038  4611  231
+CONVEX 2272    GT_PK(2,2)      265  5036  264  5038  5039  231
+CONVEX 2273    GT_PK(2,2)      260  5040  226  5041  3944  259
+CONVEX 2274    GT_PK(2,2)      260  5042  227  5040  4595  226
+CONVEX 2275    GT_PK(2,2)      260  5043  261  5042  5044  227
+CONVEX 2276    GT_PK(2,2)      260  5045  294  5041  3946  259
+CONVEX 2277    GT_PK(2,2)      260  5045  294  5046  3950  295
+CONVEX 2278    GT_PK(2,2)      260  5043  261  5046  5047  295
+CONVEX 2279    GT_PK(2,2)      412  5048  451  5049  2844  413
+CONVEX 2280    GT_PK(2,2)      412  5050  375  5049  4599  413
+CONVEX 2281    GT_PK(2,2)      412  5050  375  5051  4600  374
+CONVEX 2282    GT_PK(2,2)      412  5052  411  5051  5053  374
+CONVEX 2283    GT_PK(2,2)      84  5054  83  5055  3989  109
+CONVEX 2284    GT_PK(2,2)      84  5056  110  5055  4622  109
+CONVEX 2285    GT_PK(2,2)      84  5057  60  5058  4634  61
+CONVEX 2286    GT_PK(2,2)      84  5057  60  5054  4630  83
+CONVEX 2287    GT_PK(2,2)      84  5059  85  5058  4628  61
+CONVEX 2288    GT_PK(2,2)      84  5059  85  5056  4629  110
+CONVEX 2289    GT_PK(2,2)      166  5060  167  5061  4619  137
+CONVEX 2290    GT_PK(2,2)      166  5062  136  5061  4636  137
+CONVEX 2291    GT_PK(2,2)      166  5060  167  5063  4608  198
+CONVEX 2292    GT_PK(2,2)      166  5064  197  5063  5065  198
+CONVEX 2293    GT_PK(2,2)      166  5062  136  5066  4639  165
+CONVEX 2294    GT_PK(2,2)      166  5064  197  5066  4640  165
+CONVEX 2295    GT_PK(2,2)      230  5067  264  5068  5039  231
+CONVEX 2296    GT_PK(2,2)      230  5067  264  5069  4575  263
+CONVEX 2297    GT_PK(2,2)      230  5070  198  5068  4610  231
+CONVEX 2298    GT_PK(2,2)      230  5071  197  5070  5065  198
+CONVEX 2299    GT_PK(2,2)      1111  5072  1110  5073  4648  1074
+CONVEX 2300    GT_PK(2,2)      1111  5074  1075  5075  2282  1112
+CONVEX 2301    GT_PK(2,2)      1111  5073  1074  5074  4017  1075
+CONVEX 2302    GT_PK(2,2)      1111  5072  1110  5076  4653  1146
+CONVEX 2303    GT_PK(2,2)      1111  5077  1147  5075  2705  1112
+CONVEX 2304    GT_PK(2,2)      1111  5076  1146  5077  4299  1147
+CONVEX 2305    GT_PK(2,2)      841  5078  840  5079  5080  880
+CONVEX 2306    GT_PK(2,2)      841  5081  842  5082  4658  802
+CONVEX 2307    GT_PK(2,2)      841  5082  802  5083  2937  801
+CONVEX 2308    GT_PK(2,2)      841  5078  840  5083  4655  801
+CONVEX 2309    GT_PK(2,2)      881  5084  920  5085  5086  880
+CONVEX 2310    GT_PK(2,2)      881  5087  841  5085  5079  880
+CONVEX 2311    GT_PK(2,2)      881  5087  841  5088  5081  842
+CONVEX 2312    GT_PK(2,2)      879  5089  840  5090  5080  880
+CONVEX 2313    GT_PK(2,2)      879  5091  839  5092  2521  878
+CONVEX 2314    GT_PK(2,2)      879  5089  840  5091  4656  839
+CONVEX 2315    GT_PK(2,2)      959  5093  920  5094  5095  958
+CONVEX 2316    GT_PK(2,2)      961  5096  962  5097  4018  1000
+CONVEX 2317    GT_PK(2,2)      961  5098  999  5097  4661  1000
+CONVEX 2318    GT_PK(2,2)      961  5096  962  5099  4022  923
+CONVEX 2319    GT_PK(2,2)      998  5100  999  5101  4662  1037
+CONVEX 2320    GT_PK(2,2)      998  5102  1036  5101  4663  1037
+CONVEX 2321    GT_PK(2,2)      1224  5103  1225  5104  4669  1191
+CONVEX 2322    GT_PK(2,2)      1224  5104  1191  5105  4036  1190
+CONVEX 2323    GT_PK(2,2)      1257  5106  1288  5107  4687  1256
+CONVEX 2324    GT_PK(2,2)      1257  5108  1225  5109  4668  1258
+CONVEX 2325    GT_PK(2,2)      1257  5110  1289  5109  4696  1258
+CONVEX 2326    GT_PK(2,2)      1257  5106  1288  5110  4690  1289
+CONVEX 2327    GT_PK(2,2)      1257  5111  1224  5107  5112  1256
+CONVEX 2328    GT_PK(2,2)      1257  5111  1224  5108  5103  1225
+CONVEX 2329    GT_PK(2,2)      1227  5113  1228  5114  4706  1194
+CONVEX 2330    GT_PK(2,2)      1227  5113  1228  5115  4709  1260
+CONVEX 2331    GT_PK(2,2)      1227  5115  1260  5116  4050  1259
+CONVEX 2332    GT_PK(2,2)      1227  5117  1226  5116  4043  1259
+CONVEX 2333    GT_PK(2,2)      1227  5114  1194  5118  4366  1193
+CONVEX 2334    GT_PK(2,2)      1227  5117  1226  5118  4046  1193
+CONVEX 2335    GT_PK(2,2)      541  5119  503  5120  4098  542
+CONVEX 2336    GT_PK(2,2)      541  5119  503  5121  4744  502
+CONVEX 2337    GT_PK(2,2)      658  5122  698  5123  5124  697
+CONVEX 2338    GT_PK(2,2)      658  5125  619  5126  4725  659
+CONVEX 2339    GT_PK(2,2)      658  5122  698  5126  4733  659
+CONVEX 2340    GT_PK(2,2)      737  5127  698  5128  5124  697
+CONVEX 2341    GT_PK(2,2)      737  5128  697  5129  5130  736
+CONVEX 2342    GT_PK(2,2)      737  5131  776  5129  4943  736
+CONVEX 2343    GT_PK(2,2)      737  5131  776  5132  4735  777
+CONVEX 2344    GT_PK(2,2)      737  5132  777  5133  3323  738
+CONVEX 2345    GT_PK(2,2)      737  5127  698  5133  4732  738
+CONVEX 2346    GT_PK(2,2)      616  5134  615  5135  4928  655
+CONVEX 2347    GT_PK(2,2)      696  5136  697  5137  5130  736
+CONVEX 2348    GT_PK(2,2)      696  5138  735  5137  4945  736
+CONVEX 2349    GT_PK(2,2)      696  5139  695  5138  4495  735
+CONVEX 2350    GT_PK(2,2)      918  5140  957  5141  5142  956
+CONVEX 2351    GT_PK(2,2)      918  5143  917  5141  4755  956
+CONVEX 2352    GT_PK(2,2)      918  5143  917  5144  4752  878
+CONVEX 2353    GT_PK(2,2)      918  5145  879  5144  5092  878
+CONVEX 2354    GT_PK(2,2)      595  5146  635  5147  4789  634
+CONVEX 2355    GT_PK(2,2)      595  5148  555  5149  4770  556
+CONVEX 2356    GT_PK(2,2)      595  5150  596  5149  2530  556
+CONVEX 2357    GT_PK(2,2)      595  5146  635  5150  4181  596
+CONVEX 2358    GT_PK(2,2)      554  5151  555  5152  4771  515
+CONVEX 2359    GT_PK(2,2)      554  5153  593  5154  4187  553
+CONVEX 2360    GT_PK(2,2)      551  5155  550  5156  4178  511
+CONVEX 2361    GT_PK(2,2)      551  5157  512  5156  4777  511
+CONVEX 2362    GT_PK(2,2)      630  5158  631  5159  4783  670
+CONVEX 2363    GT_PK(2,2)      630  5160  669  5161  3393  629
+CONVEX 2364    GT_PK(2,2)      630  5160  669  5159  3394  670
+CONVEX 2365    GT_PK(2,2)      750  5162  790  5163  4823  751
+CONVEX 2366    GT_PK(2,2)      750  5164  711  5165  3381  710
+CONVEX 2367    GT_PK(2,2)      750  5163  751  5164  2587  711
+CONVEX 2368    GT_PK(2,2)      750  5162  790  5166  5167  789
+CONVEX 2369    GT_PK(2,2)      750  5168  749  5165  4191  710
+CONVEX 2370    GT_PK(2,2)      750  5166  789  5168  3441  749
+CONVEX 2371    GT_PK(2,2)      829  5169  869  5170  4821  830
+CONVEX 2372    GT_PK(2,2)      829  5171  790  5170  4825  830
+CONVEX 2373    GT_PK(2,2)      829  5169  869  5172  4835  868
+CONVEX 2374    GT_PK(2,2)      829  5171  790  5173  5167  789
+CONVEX 2375    GT_PK(2,2)      829  5174  828  5172  4218  868
+CONVEX 2376    GT_PK(2,2)      829  5174  828  5173  4220  789
+CONVEX 2377    GT_PK(2,2)      946  5175  908  5176  4832  907
+CONVEX 2378    GT_PK(2,2)      946  5177  984  5178  3455  945
+CONVEX 2379    GT_PK(2,2)      946  5176  907  5178  4232  945
+CONVEX 2380    GT_PK(2,2)      946  5175  908  5179  4836  947
+CONVEX 2381    GT_PK(2,2)      946  5177  984  5180  3454  985
+CONVEX 2382    GT_PK(2,2)      946  5179  947  5180  4228  985
+CONVEX 2383    GT_PK(2,2)      995  5181  957  5182  5142  956
+CONVEX 2384    GT_PK(2,2)      995  5183  994  5182  4251  956
+CONVEX 2385    GT_PK(2,2)      995  5183  994  5184  4248  1033
+CONVEX 2386    GT_PK(2,2)      995  5185  1034  5184  4845  1033
+CONVEX 2387    GT_PK(2,2)      1176  5186  1142  5187  4847  1141
+CONVEX 2388    GT_PK(2,2)      1176  5188  1209  5189  4853  1210
+CONVEX 2389    GT_PK(2,2)      1107  5190  1142  5191  4846  1106
+CONVEX 2390    GT_PK(2,2)      1107  5191  1106  5192  5193  1070
+CONVEX 2391    GT_PK(2,2)      1107  5194  1071  5192  4841  1070
+CONVEX 2392    GT_PK(2,2)      1107  5194  1071  5195  4843  1108
+CONVEX 2393    GT_PK(2,2)      1143  5196  1144  5197  3548  1178
+CONVEX 2394    GT_PK(2,2)      1143  5198  1107  5199  5190  1142
+CONVEX 2395    GT_PK(2,2)      1143  5196  1144  5200  4013  1108
+CONVEX 2396    GT_PK(2,2)      1143  5198  1107  5200  5195  1108
+CONVEX 2397    GT_PK(2,2)      1068  5201  1104  5202  4850  1067
+CONVEX 2398    GT_PK(2,2)      1068  5203  1030  5202  2613  1067
+CONVEX 2399    GT_PK(2,2)      1068  5204  1031  5203  3466  1030
+CONVEX 2400    GT_PK(2,2)      1358  5205  1357  5206  5207  1381
+CONVEX 2401    GT_PK(2,2)      1358  5208  1382  5206  4860  1381
+CONVEX 2402    GT_PK(2,2)      1358  5209  1332  5205  5210  1357
+CONVEX 2403    GT_PK(2,2)      1358  5209  1332  5211  4870  1333
+CONVEX 2404    GT_PK(2,2)      1359  5212  1333  5213  4281  1334
+CONVEX 2405    GT_PK(2,2)      1359  5214  1360  5213  2687  1334
+CONVEX 2406    GT_PK(2,2)      1359  5215  1358  5212  5211  1333
+CONVEX 2407    GT_PK(2,2)      1359  5215  1358  5216  5208  1382
+CONVEX 2408    GT_PK(2,2)      1359  5214  1360  5217  2683  1383
+CONVEX 2409    GT_PK(2,2)      1359  5216  1382  5217  4858  1383
+CONVEX 2410    GT_PK(2,2)      1355  5218  1379  5219  5220  1378
+CONVEX 2411    GT_PK(2,2)      1355  5218  1379  5221  5222  1356
+CONVEX 2412    GT_PK(2,2)      1399  5223  1377  5224  4871  1398
+CONVEX 2413    GT_PK(2,2)      1399  5225  1418  5226  5227  1378
+CONVEX 2414    GT_PK(2,2)      1399  5223  1377  5226  5228  1378
+CONVEX 2415    GT_PK(2,2)      1301  5229  1328  5230  5231  1329
+CONVEX 2416    GT_PK(2,2)      1301  5232  1302  5230  5233  1329
+CONVEX 2417    GT_PK(2,2)      1301  5234  1271  5235  2745  1272
+CONVEX 2418    GT_PK(2,2)      1301  5232  1302  5235  4877  1272
+CONVEX 2419    GT_PK(2,2)      1330  5236  1302  5237  5233  1329
+CONVEX 2420    GT_PK(2,2)      1330  5238  1355  5237  5239  1329
+CONVEX 2421    GT_PK(2,2)      1330  5238  1355  5240  5221  1356
+CONVEX 2422    GT_PK(2,2)      1330  5236  1302  5241  4876  1303
+CONVEX 2423    GT_PK(2,2)      1331  5242  1304  5243  3622  1303
+CONVEX 2424    GT_PK(2,2)      1331  5244  1330  5243  5241  1303
+CONVEX 2425    GT_PK(2,2)      1331  5244  1330  5245  5240  1356
+CONVEX 2426    GT_PK(2,2)      1331  5246  1332  5242  4869  1304
+CONVEX 2427    GT_PK(2,2)      1331  5246  1332  5247  5210  1357
+CONVEX 2428    GT_PK(2,2)      1331  5245  1356  5247  5248  1357
+CONVEX 2429    GT_PK(2,2)      1401  5249  1420  5250  4878  1402
+CONVEX 2430    GT_PK(2,2)      1401  5249  1420  5251  5252  1419
+CONVEX 2431    GT_PK(2,2)      1380  5253  1402  5254  4280  1381
+CONVEX 2432    GT_PK(2,2)      1380  5255  1357  5254  5207  1381
+CONVEX 2433    GT_PK(2,2)      1380  5256  1401  5253  5250  1402
+CONVEX 2434    GT_PK(2,2)      1380  5256  1401  5257  5258  1379
+CONVEX 2435    GT_PK(2,2)      1380  5259  1356  5255  5248  1357
+CONVEX 2436    GT_PK(2,2)      1380  5257  1379  5259  5222  1356
+CONVEX 2437    GT_PK(2,2)      1047  5260  1085  5261  4887  1048
+CONVEX 2438    GT_PK(2,2)      1047  5261  1048  5262  4883  1009
+CONVEX 2439    GT_PK(2,2)      1047  5263  1008  5262  2768  1009
+CONVEX 2440    GT_PK(2,2)      1047  5263  1008  5264  3672  1046
+CONVEX 2441    GT_PK(2,2)      1084  5265  1121  5266  4341  1120
+CONVEX 2442    GT_PK(2,2)      1084  5267  1085  5265  4886  1121
+CONVEX 2443    GT_PK(2,2)      1084  5266  1120  5268  4084  1083
+CONVEX 2444    GT_PK(2,2)      1084  5269  1047  5267  5260  1085
+CONVEX 2445    GT_PK(2,2)      1084  5268  1083  5270  2751  1046
+CONVEX 2446    GT_PK(2,2)      1084  5269  1047  5270  5264  1046
+CONVEX 2447    GT_PK(2,2)      205  5271  204  5272  4906  173
+CONVEX 2448    GT_PK(2,2)      205  5273  238  5274  5275  206
+CONVEX 2449    GT_PK(2,2)      239  5276  273  5277  4400  240
+CONVEX 2450    GT_PK(2,2)      239  5277  240  5278  4992  207
+CONVEX 2451    GT_PK(2,2)      239  5276  273  5279  4398  272
+CONVEX 2452    GT_PK(2,2)      239  5280  238  5279  4895  272
+CONVEX 2453    GT_PK(2,2)      239  5278  207  5281  5016  206
+CONVEX 2454    GT_PK(2,2)      239  5280  238  5281  5275  206
+CONVEX 2455    GT_PK(2,2)      237  5282  270  5283  5284  236
+CONVEX 2456    GT_PK(2,2)      237  5285  205  5286  5273  238
+CONVEX 2457    GT_PK(2,2)      237  5286  238  5287  4894  271
+CONVEX 2458    GT_PK(2,2)      237  5282  270  5287  4902  271
+CONVEX 2459    GT_PK(2,2)      237  5283  236  5288  4898  204
+CONVEX 2460    GT_PK(2,2)      237  5285  205  5288  5271  204
+CONVEX 2461    GT_PK(2,2)      269  5289  304  5290  2016  303
+CONVEX 2462    GT_PK(2,2)      269  5291  270  5289  4901  304
+CONVEX 2463    GT_PK(2,2)      269  5292  268  5290  2232  303
+CONVEX 2464    GT_PK(2,2)      269  5291  270  5293  5284  236
+CONVEX 2465    GT_PK(2,2)      269  5294  235  5292  2887  268
+CONVEX 2466    GT_PK(2,2)      269  5293  236  5294  4896  235
+CONVEX 2467    GT_PK(2,2)      171  5295  172  5296  4904  203
+CONVEX 2468    GT_PK(2,2)      171  5296  203  5297  2892  202
+CONVEX 2469    GT_PK(2,2)      171  5298  170  5297  3712  202
+CONVEX 2470    GT_PK(2,2)      171  5298  170  5299  3720  141
+CONVEX 2471    GT_PK(2,2)      115  5300  116  5301  3704  90
+CONVEX 2472    GT_PK(2,2)      115  5302  89  5301  2827  90
+CONVEX 2473    GT_PK(2,2)      115  5302  89  5303  2829  114
+CONVEX 2474    GT_PK(2,2)      143  5304  172  5305  4905  173
+CONVEX 2475    GT_PK(2,2)      143  5306  115  5307  5300  116
+CONVEX 2476    GT_PK(2,2)      850  5308  890  5309  4947  851
+CONVEX 2477    GT_PK(2,2)      850  5310  810  5311  4958  849
+CONVEX 2478    GT_PK(2,2)      850  5311  849  5312  4488  889
+CONVEX 2479    GT_PK(2,2)      850  5308  890  5312  4949  889
+CONVEX 2480    GT_PK(2,2)      811  5313  851  5314  4938  812
+CONVEX 2481    GT_PK(2,2)      811  5315  810  5316  4960  771
+CONVEX 2482    GT_PK(2,2)      811  5317  850  5313  5309  851
+CONVEX 2483    GT_PK(2,2)      811  5317  850  5315  5310  810
+CONVEX 2484    GT_PK(2,2)      811  5318  772  5316  4485  771
+CONVEX 2485    GT_PK(2,2)      811  5318  772  5314  4480  812
+CONVEX 2486    GT_PK(2,2)      513  5319  474  5320  4969  512
+CONVEX 2487    GT_PK(2,2)      513  5319  474  5321  4965  475
+CONVEX 2488    GT_PK(2,2)      119  5322  94  5323  5006  93
+CONVEX 2489    GT_PK(2,2)      119  5322  94  5324  5001  120
+CONVEX 2490    GT_PK(2,2)      145  5325  175  5326  5327  146
+CONVEX 2491    GT_PK(2,2)      176  5328  208  5329  4998  177
+CONVEX 2492    GT_PK(2,2)      176  5330  175  5331  5327  146
+CONVEX 2493    GT_PK(2,2)      176  5328  208  5332  4991  207
+CONVEX 2494    GT_PK(2,2)      176  5330  175  5332  5014  207
+CONVEX 2495    GT_PK(2,2)      407  5333  446  5334  4568  445
+CONVEX 2496    GT_PK(2,2)      407  5335  406  5334  5028  445
+CONVEX 2497    GT_PK(2,2)      297  5336  263  5337  4577  298
+CONVEX 2498    GT_PK(2,2)      297  5338  333  5337  5339  298
+CONVEX 2499    GT_PK(2,2)      369  5340  406  5341  5025  368
+CONVEX 2500    GT_PK(2,2)      369  5342  407  5340  5335  406
+CONVEX 2501    GT_PK(2,2)      336  5343  301  5344  5345  300
+CONVEX 2502    GT_PK(2,2)      335  5346  336  5347  5348  372
+CONVEX 2503    GT_PK(2,2)      335  5349  299  5350  5035  300
+CONVEX 2504    GT_PK(2,2)      335  5346  336  5350  5344  300
+CONVEX 2505    GT_PK(2,2)      266  5351  265  5352  5037  232
+CONVEX 2506    GT_PK(2,2)      266  5352  232  5353  3965  233
+CONVEX 2507    GT_PK(2,2)      266  5354  267  5353  4574  233
+CONVEX 2508    GT_PK(2,2)      266  5355  301  5354  5029  267
+CONVEX 2509    GT_PK(2,2)      266  5355  301  5356  5345  300
+CONVEX 2510    GT_PK(2,2)      266  5351  265  5356  5034  300
+CONVEX 2511    GT_PK(2,2)      229  5357  230  5358  5069  263
+CONVEX 2512    GT_PK(2,2)      229  5359  197  5360  4641  196
+CONVEX 2513    GT_PK(2,2)      229  5357  230  5359  5071  197
+CONVEX 2514    GT_PK(2,2)      450  5361  412  5362  5048  451
+CONVEX 2515    GT_PK(2,2)      450  5361  412  5363  5052  411
+CONVEX 2516    GT_PK(2,2)      450  5364  489  5362  2836  451
+CONVEX 2517    GT_PK(2,2)      450  5365  488  5364  3886  489
+CONVEX 2518    GT_PK(2,2)      448  5366  486  5367  4517  447
+CONVEX 2519    GT_PK(2,2)      448  5368  487  5366  4511  486
+CONVEX 2520    GT_PK(2,2)      921  5369  881  5370  5084  920
+CONVEX 2521    GT_PK(2,2)      921  5371  959  5370  5093  920
+CONVEX 2522    GT_PK(2,2)      960  5372  961  5373  5098  999
+CONVEX 2523    GT_PK(2,2)      960  5374  998  5373  5100  999
+CONVEX 2524    GT_PK(2,2)      960  5374  998  5375  5376  959
+CONVEX 2525    GT_PK(2,2)      960  5377  921  5375  5371  959
+CONVEX 2526    GT_PK(2,2)      997  5378  1036  5379  4666  1035
+CONVEX 2527    GT_PK(2,2)      997  5380  998  5378  5102  1036
+CONVEX 2528    GT_PK(2,2)      997  5381  959  5382  5094  958
+CONVEX 2529    GT_PK(2,2)      997  5380  998  5381  5376  959
+CONVEX 2530    GT_PK(2,2)      1223  5383  1255  5384  4677  1256
+CONVEX 2531    GT_PK(2,2)      1223  5385  1224  5384  5112  1256
+CONVEX 2532    GT_PK(2,2)      1223  5383  1255  5386  4679  1222
+CONVEX 2533    GT_PK(2,2)      1223  5385  1224  5387  5105  1190
+CONVEX 2534    GT_PK(2,2)      1223  5386  1222  5388  2309  1189
+CONVEX 2535    GT_PK(2,2)      1223  5387  1190  5388  3242  1189
+CONVEX 2536    GT_PK(2,2)      581  5389  541  5390  5120  542
+CONVEX 2537    GT_PK(2,2)      581  5391  620  5392  4721  621
+CONVEX 2538    GT_PK(2,2)      581  5390  542  5393  3282  582
+CONVEX 2539    GT_PK(2,2)      581  5392  621  5393  3304  582
+CONVEX 2540    GT_PK(2,2)      657  5394  658  5395  5123  697
+CONVEX 2541    GT_PK(2,2)      657  5396  696  5395  5136  697
+CONVEX 2542    GT_PK(2,2)      618  5397  658  5398  5125  619
+CONVEX 2543    GT_PK(2,2)      618  5399  657  5400  5401  617
+CONVEX 2544    GT_PK(2,2)      618  5399  657  5397  5394  658
+CONVEX 2545    GT_PK(2,2)      576  5402  616  5403  5134  615
+CONVEX 2546    GT_PK(2,2)      576  5404  536  5405  3776  575
+CONVEX 2547    GT_PK(2,2)      576  5403  615  5405  3854  575
+CONVEX 2548    GT_PK(2,2)      656  5406  616  5407  5408  617
+CONVEX 2549    GT_PK(2,2)      656  5409  657  5407  5401  617
+CONVEX 2550    GT_PK(2,2)      656  5409  657  5410  5396  696
+CONVEX 2551    GT_PK(2,2)      656  5410  696  5411  5139  695
+CONVEX 2552    GT_PK(2,2)      656  5411  695  5412  3849  655
+CONVEX 2553    GT_PK(2,2)      656  5406  616  5412  5135  655
+CONVEX 2554    GT_PK(2,2)      540  5413  541  5414  5121  502
+CONVEX 2555    GT_PK(2,2)      462  5415  461  5416  4719  423
+CONVEX 2556    GT_PK(2,2)      462  5417  424  5416  4922  423
+CONVEX 2557    GT_PK(2,2)      462  5417  424  5418  4923  463
+CONVEX 2558    GT_PK(2,2)      919  5419  957  5420  5421  958
+CONVEX 2559    GT_PK(2,2)      919  5422  918  5419  5140  957
+CONVEX 2560    GT_PK(2,2)      919  5423  920  5420  5095  958
+CONVEX 2561    GT_PK(2,2)      919  5423  920  5424  5086  880
+CONVEX 2562    GT_PK(2,2)      919  5425  879  5424  5090  880
+CONVEX 2563    GT_PK(2,2)      919  5422  918  5425  5145  879
+CONVEX 2564    GT_PK(2,2)      594  5426  633  5427  4800  593
+CONVEX 2565    GT_PK(2,2)      594  5428  554  5427  5153  593
+CONVEX 2566    GT_PK(2,2)      594  5426  633  5429  4798  634
+CONVEX 2567    GT_PK(2,2)      594  5428  554  5430  5151  555
+CONVEX 2568    GT_PK(2,2)      594  5431  595  5429  5147  634
+CONVEX 2569    GT_PK(2,2)      594  5431  595  5430  5148  555
+CONVEX 2570    GT_PK(2,2)      514  5432  476  5433  4772  475
+CONVEX 2571    GT_PK(2,2)      514  5434  554  5435  5154  553
+CONVEX 2572    GT_PK(2,2)      514  5432  476  5436  4774  515
+CONVEX 2573    GT_PK(2,2)      514  5434  554  5436  5152  515
+CONVEX 2574    GT_PK(2,2)      514  5437  513  5435  5438  553
+CONVEX 2575    GT_PK(2,2)      514  5437  513  5433  5321  475
+CONVEX 2576    GT_PK(2,2)      591  5439  631  5440  4782  592
+CONVEX 2577    GT_PK(2,2)      591  5441  630  5439  5158  631
+CONVEX 2578    GT_PK(2,2)      590  5442  630  5443  5161  629
+CONVEX 2579    GT_PK(2,2)      590  5444  589  5443  2028  629
+CONVEX 2580    GT_PK(2,2)      590  5445  550  5444  4176  589
+CONVEX 2581    GT_PK(2,2)      590  5446  591  5442  5441  630
+CONVEX 2582    GT_PK(2,2)      590  5447  551  5445  5155  550
+CONVEX 2583    GT_PK(2,2)      590  5446  591  5447  5448  551
+CONVEX 2584    GT_PK(2,2)      1177  5449  1176  5450  5186  1142
+CONVEX 2585    GT_PK(2,2)      1177  5451  1143  5452  5197  1178
+CONVEX 2586    GT_PK(2,2)      1177  5451  1143  5450  5199  1142
+CONVEX 2587    GT_PK(2,2)      1177  5452  1178  5453  2692  1211
+CONVEX 2588    GT_PK(2,2)      1177  5454  1210  5453  4268  1211
+CONVEX 2589    GT_PK(2,2)      1177  5449  1176  5454  5189  1210
+CONVEX 2590    GT_PK(2,2)      1175  5455  1176  5456  5188  1209
+CONVEX 2591    GT_PK(2,2)      1175  5457  1174  5458  3495  1208
+CONVEX 2592    GT_PK(2,2)      1175  5456  1209  5458  4856  1208
+CONVEX 2593    GT_PK(2,2)      1175  5457  1174  5459  3501  1140
+CONVEX 2594    GT_PK(2,2)      1175  5460  1141  5459  5461  1140
+CONVEX 2595    GT_PK(2,2)      1175  5455  1176  5460  5187  1141
+CONVEX 2596    GT_PK(2,2)      1105  5462  1068  5463  5201  1104
+CONVEX 2597    GT_PK(2,2)      1105  5464  1106  5465  4848  1141
+CONVEX 2598    GT_PK(2,2)      1105  5465  1141  5466  5461  1140
+CONVEX 2599    GT_PK(2,2)      1105  5463  1104  5466  4852  1140
+CONVEX 2600    GT_PK(2,2)      1069  5467  1106  5468  5193  1070
+CONVEX 2601    GT_PK(2,2)      1069  5469  1068  5470  5204  1031
+CONVEX 2602    GT_PK(2,2)      1069  5471  1105  5467  5464  1106
+CONVEX 2603    GT_PK(2,2)      1069  5471  1105  5469  5462  1068
+CONVEX 2604    GT_PK(2,2)      1069  5472  1032  5468  3465  1070
+CONVEX 2605    GT_PK(2,2)      1069  5470  1031  5472  3470  1032
+CONVEX 2606    GT_PK(2,2)      1354  5473  1377  5474  4872  1353
+CONVEX 2607    GT_PK(2,2)      1354  5475  1328  5474  4873  1353
+CONVEX 2608    GT_PK(2,2)      1354  5473  1377  5476  5228  1378
+CONVEX 2609    GT_PK(2,2)      1354  5477  1355  5476  5219  1378
+CONVEX 2610    GT_PK(2,2)      1354  5475  1328  5478  5231  1329
+CONVEX 2611    GT_PK(2,2)      1354  5477  1355  5478  5239  1329
+CONVEX 2612    GT_PK(2,2)      1300  5479  1328  5480  4874  1327
+CONVEX 2613    GT_PK(2,2)      1300  5481  1301  5479  5229  1328
+CONVEX 2614    GT_PK(2,2)      1300  5482  1299  5483  2725  1270
+CONVEX 2615    GT_PK(2,2)      1300  5482  1299  5480  3575  1327
+CONVEX 2616    GT_PK(2,2)      1300  5484  1271  5483  3614  1270
+CONVEX 2617    GT_PK(2,2)      1300  5481  1301  5484  5234  1271
+CONVEX 2618    GT_PK(2,2)      1400  5485  1401  5486  5258  1379
+CONVEX 2619    GT_PK(2,2)      1400  5487  1418  5488  5227  1378
+CONVEX 2620    GT_PK(2,2)      1400  5486  1379  5488  5220  1378
+CONVEX 2621    GT_PK(2,2)      1400  5489  1419  5487  5490  1418
+CONVEX 2622    GT_PK(2,2)      1400  5485  1401  5489  5251  1419
+CONVEX 2623    GT_PK(2,2)      174  5491  205  5492  5272  173
+CONVEX 2624    GT_PK(2,2)      174  5493  145  5494  5325  175
+CONVEX 2625    GT_PK(2,2)      174  5494  175  5495  5015  206
+CONVEX 2626    GT_PK(2,2)      174  5491  205  5495  5274  206
+CONVEX 2627    GT_PK(2,2)      142  5496  171  5497  5295  172
+CONVEX 2628    GT_PK(2,2)      142  5498  143  5497  5304  172
+CONVEX 2629    GT_PK(2,2)      142  5496  171  5499  5299  141
+CONVEX 2630    GT_PK(2,2)      142  5498  143  5500  5306  115
+CONVEX 2631    GT_PK(2,2)      142  5499  141  5501  3113  114
+CONVEX 2632    GT_PK(2,2)      142  5500  115  5501  5303  114
+CONVEX 2633    GT_PK(2,2)      552  5502  513  5503  5320  512
+CONVEX 2634    GT_PK(2,2)      552  5504  551  5503  5157  512
+CONVEX 2635    GT_PK(2,2)      552  5505  592  5506  4188  553
+CONVEX 2636    GT_PK(2,2)      552  5502  513  5506  5438  553
+CONVEX 2637    GT_PK(2,2)      552  5507  591  5505  5440  592
+CONVEX 2638    GT_PK(2,2)      552  5507  591  5504  5448  551
+CONVEX 2639    GT_PK(2,2)      144  5508  143  5509  5305  173
+CONVEX 2640    GT_PK(2,2)      144  5510  174  5509  5492  173
+CONVEX 2641    GT_PK(2,2)      144  5510  174  5511  5493  145
+CONVEX 2642    GT_PK(2,2)      144  5508  143  5512  5307  116
+CONVEX 2643    GT_PK(2,2)      118  5513  119  5514  5515  146
+CONVEX 2644    GT_PK(2,2)      118  5516  145  5514  5326  146
+CONVEX 2645    GT_PK(2,2)      118  5513  119  5517  5323  93
+CONVEX 2646    GT_PK(2,2)      118  5517  93  5518  3937  92
+CONVEX 2647    GT_PK(2,2)      147  5519  176  5520  5329  177
+CONVEX 2648    GT_PK(2,2)      147  5521  148  5522  4988  120
+CONVEX 2649    GT_PK(2,2)      147  5521  148  5520  4983  177
+CONVEX 2650    GT_PK(2,2)      147  5519  176  5523  5331  146
+CONVEX 2651    GT_PK(2,2)      147  5524  119  5522  5324  120
+CONVEX 2652    GT_PK(2,2)      147  5524  119  5523  5515  146
+CONVEX 2653    GT_PK(2,2)      408  5525  446  5526  4570  447
+CONVEX 2654    GT_PK(2,2)      408  5527  407  5525  5333  446
+CONVEX 2655    GT_PK(2,2)      332  5528  297  5529  5338  333
+CONVEX 2656    GT_PK(2,2)      332  5530  368  5531  4566  331
+CONVEX 2657    GT_PK(2,2)      332  5532  369  5530  5341  368
+CONVEX 2658    GT_PK(2,2)      332  5532  369  5529  5533  333
+CONVEX 2659    GT_PK(2,2)      262  5534  297  5535  5336  263
+CONVEX 2660    GT_PK(2,2)      262  5536  229  5535  5358  263
+CONVEX 2661    GT_PK(2,2)      373  5537  336  5538  5348  372
+CONVEX 2662    GT_PK(2,2)      373  5539  410  5538  5540  372
+CONVEX 2663    GT_PK(2,2)      373  5541  411  5542  5053  374
+CONVEX 2664    GT_PK(2,2)      373  5539  410  5541  5543  411
+CONVEX 2665    GT_PK(2,2)      228  5544  261  5545  5044  227
+CONVEX 2666    GT_PK(2,2)      228  5546  229  5547  5360  196
+CONVEX 2667    GT_PK(2,2)      228  5548  262  5544  5549  261
+CONVEX 2668    GT_PK(2,2)      228  5548  262  5546  5536  229
+CONVEX 2669    GT_PK(2,2)      228  5550  195  5547  3960  196
+CONVEX 2670    GT_PK(2,2)      228  5545  227  5550  4596  195
+CONVEX 2671    GT_PK(2,2)      449  5551  448  5552  5368  487
+CONVEX 2672    GT_PK(2,2)      449  5552  487  5553  4510  488
+CONVEX 2673    GT_PK(2,2)      449  5554  450  5553  5365  488
+CONVEX 2674    GT_PK(2,2)      449  5554  450  5555  5363  411
+CONVEX 2675    GT_PK(2,2)      449  5556  410  5555  5543  411
+CONVEX 2676    GT_PK(2,2)      449  5551  448  5556  5557  410
+CONVEX 2677    GT_PK(2,2)      882  5558  921  5559  5369  881
+CONVEX 2678    GT_PK(2,2)      882  5560  843  5561  3800  883
+CONVEX 2679    GT_PK(2,2)      882  5562  842  5560  4659  843
+CONVEX 2680    GT_PK(2,2)      882  5559  881  5562  5088  842
+CONVEX 2681    GT_PK(2,2)      922  5563  960  5564  5377  921
+CONVEX 2682    GT_PK(2,2)      922  5565  883  5566  3797  923
+CONVEX 2683    GT_PK(2,2)      922  5567  961  5566  5099  923
+CONVEX 2684    GT_PK(2,2)      922  5563  960  5567  5372  961
+CONVEX 2685    GT_PK(2,2)      922  5568  882  5565  5561  883
+CONVEX 2686    GT_PK(2,2)      922  5568  882  5564  5558  921
+CONVEX 2687    GT_PK(2,2)      996  5569  995  5570  5181  957
+CONVEX 2688    GT_PK(2,2)      996  5570  957  5571  5421  958
+CONVEX 2689    GT_PK(2,2)      996  5572  997  5571  5382  958
+CONVEX 2690    GT_PK(2,2)      996  5572  997  5573  5379  1035
+CONVEX 2691    GT_PK(2,2)      996  5574  1034  5573  4839  1035
+CONVEX 2692    GT_PK(2,2)      996  5569  995  5574  5185  1034
+CONVEX 2693    GT_PK(2,2)      578  5575  618  5576  5400  617
+CONVEX 2694    GT_PK(2,2)      578  5577  538  5578  5579  539
+CONVEX 2695    GT_PK(2,2)      580  5580  540  5581  5413  541
+CONVEX 2696    GT_PK(2,2)      580  5582  620  5583  4724  619
+CONVEX 2697    GT_PK(2,2)      580  5584  581  5582  5391  620
+CONVEX 2698    GT_PK(2,2)      580  5584  581  5581  5389  541
+CONVEX 2699    GT_PK(2,2)      579  5585  540  5586  5587  539
+CONVEX 2700    GT_PK(2,2)      579  5588  578  5586  5578  539
+CONVEX 2701    GT_PK(2,2)      579  5588  578  5589  5575  618
+CONVEX 2702    GT_PK(2,2)      579  5589  618  5590  5398  619
+CONVEX 2703    GT_PK(2,2)      579  5591  580  5590  5583  619
+CONVEX 2704    GT_PK(2,2)      579  5591  580  5585  5580  540
+CONVEX 2705    GT_PK(2,2)      501  5592  540  5593  5587  539
+CONVEX 2706    GT_PK(2,2)      501  5594  462  5595  5418  463
+CONVEX 2707    GT_PK(2,2)      501  5595  463  5596  4741  502
+CONVEX 2708    GT_PK(2,2)      501  5592  540  5596  5414  502
+CONVEX 2709    GT_PK(2,2)      577  5597  576  5598  5402  616
+CONVEX 2710    GT_PK(2,2)      577  5598  616  5599  5408  617
+CONVEX 2711    GT_PK(2,2)      577  5600  578  5599  5576  617
+CONVEX 2712    GT_PK(2,2)      577  5600  578  5601  5577  538
+CONVEX 2713    GT_PK(2,2)      500  5602  462  5603  5415  461
+CONVEX 2714    GT_PK(2,2)      500  5604  538  5605  5579  539
+CONVEX 2715    GT_PK(2,2)      500  5606  501  5605  5593  539
+CONVEX 2716    GT_PK(2,2)      500  5606  501  5602  5594  462
+CONVEX 2717    GT_PK(2,2)      500  5603  461  5607  4718  499
+CONVEX 2718    GT_PK(2,2)      500  5604  538  5607  5608  499
+CONVEX 2719    GT_PK(2,2)      117  5609  118  5610  5518  92
+CONVEX 2720    GT_PK(2,2)      117  5611  144  5612  5512  116
+CONVEX 2721    GT_PK(2,2)      117  5611  144  5613  5511  145
+CONVEX 2722    GT_PK(2,2)      117  5609  118  5613  5516  145
+CONVEX 2723    GT_PK(2,2)      117  5614  91  5610  4911  92
+CONVEX 2724    GT_PK(2,2)      117  5612  116  5614  3703  91
+CONVEX 2725    GT_PK(2,2)      409  5615  410  5616  5540  372
+CONVEX 2726    GT_PK(2,2)      409  5617  408  5618  5526  447
+CONVEX 2727    GT_PK(2,2)      409  5619  448  5618  5367  447
+CONVEX 2728    GT_PK(2,2)      409  5619  448  5615  5557  410
+CONVEX 2729    GT_PK(2,2)      371  5620  335  5621  5347  372
+CONVEX 2730    GT_PK(2,2)      371  5622  409  5621  5616  372
+CONVEX 2731    GT_PK(2,2)      371  5622  409  5623  5617  408
+CONVEX 2732    GT_PK(2,2)      296  5624  262  5625  5534  297
+CONVEX 2733    GT_PK(2,2)      296  5626  331  5627  3954  295
+CONVEX 2734    GT_PK(2,2)      296  5628  261  5627  5047  295
+CONVEX 2735    GT_PK(2,2)      296  5624  262  5628  5549  261
+CONVEX 2736    GT_PK(2,2)      296  5629  332  5626  5531  331
+CONVEX 2737    GT_PK(2,2)      296  5629  332  5625  5528  297
+CONVEX 2738    GT_PK(2,2)      337  5630  373  5631  5537  336
+CONVEX 2739    GT_PK(2,2)      337  5631  336  5632  5343  301
+CONVEX 2740    GT_PK(2,2)      337  5633  374  5634  4602  338
+CONVEX 2741    GT_PK(2,2)      337  5630  373  5633  5542  374
+CONVEX 2742    GT_PK(2,2)      337  5634  338  5635  3095  302
+CONVEX 2743    GT_PK(2,2)      337  5632  301  5635  5030  302
+CONVEX 2744    GT_PK(2,2)      537  5636  577  5637  5597  576
+CONVEX 2745    GT_PK(2,2)      537  5638  536  5639  2990  498
+CONVEX 2746    GT_PK(2,2)      537  5637  576  5638  5404  536
+CONVEX 2747    GT_PK(2,2)      537  5640  499  5639  4100  498
+CONVEX 2748    GT_PK(2,2)      537  5641  538  5640  5608  499
+CONVEX 2749    GT_PK(2,2)      537  5636  577  5641  5601  538
+CONVEX 2750    GT_PK(2,2)      334  5642  371  5643  5620  335
+CONVEX 2751    GT_PK(2,2)      334  5643  335  5644  5349  299
+CONVEX 2752    GT_PK(2,2)      334  5645  333  5646  5339  298
+CONVEX 2753    GT_PK(2,2)      334  5644  299  5646  5032  298
+CONVEX 2754    GT_PK(2,2)      370  5647  408  5648  5527  407
+CONVEX 2755    GT_PK(2,2)      370  5649  371  5647  5623  408
+CONVEX 2756    GT_PK(2,2)      370  5650  369  5648  5342  407
+CONVEX 2757    GT_PK(2,2)      370  5651  334  5649  5642  371
+CONVEX 2758    GT_PK(2,2)      370  5650  369  5652  5533  333
+CONVEX 2759    GT_PK(2,2)      370  5651  334  5652  5645  333
 
 END MESH STRUCTURE DESCRIPTION
diff --git a/interface/src/scilab/demos/data/disc_P2_h2.mesh b/interface/src/scilab/demos/data/disc_P2_h2.mesh
index 8a11842..35b2731 100644
--- a/interface/src/scilab/demos/data/disc_P2_h2.mesh
+++ b/interface/src/scilab/demos/data/disc_P2_h2.mesh
@@ -10,312 +10,1392 @@ BEGIN POINTS LIST
   POINT  2  -20  20
   POINT  3  20  20
   POINT  4  0  40
-  POINT  5  -10.98978892636249  3.289986853546615
-  POINT  6  -7.455051935387742  1.441384732666446
-  POINT  7  -3.676797270081755  0.3408758629801169
-  POINT  8  3.676739140647854  0.3408649912656072
-  POINT  9  7.454956757891998  1.441346499866884
-  POINT  10  10.98967587538561  3.289912503101757
-  POINT  11  -14.0168269073075  5.73365626899654
-  POINT  12  -8.695621440244636  6.296208976859693
-  POINT  13  -4.394745255440499  5.015856566647908
-  POINT  14  -2.026216535175318e-05  4.385124114216329
-  POINT  15  4.394708091285465  5.015856253328598
-  POINT  16  8.695583210536949  6.296192236703892
-  POINT  17  14.01674847505161  5.733579208955796
-  POINT  18  -16.59751417751507  8.841033957952504
-  POINT  19  -11.67153666400569  9.560370517352128
-  POINT  20  -6.622536405170427  9.609178468908505
-  POINT  21  -2.162226938155009  8.907447576607822
-  POINT  22  2.162220418053965  8.907449303560238
-  POINT  23  6.62252892316614  9.609178885793535
-  POINT  24  11.67152235457562  9.560353456050622
-  POINT  25  16.59746793653143  8.840965180813091
-  POINT  26  -18.49296961576042  12.38356548043812
-  POINT  27  -14.03986978753954  13.21961891707463
-  POINT  28  -9.212447689054923  13.42718043490255
-  POINT  29  -4.546978357052273  13.23975192949301
-  POINT  30  5.760553932435131e-06  13.09029577543401
-  POINT  31  4.546984712272912  13.2397591385677
-  POINT  32  9.212451943525352  13.42717994917974
-  POINT  33  14.03987180658499  13.21960569166439
-  POINT  34  18.49294552140193  12.3835069787666
-  POINT  35  -19.60575567023449  16.04850096809653
-  POINT  36  -15.59452670078516  17.30489743540965
-  POINT  37  -11.19255363614599  17.32291243784231
-  POINT  38  -6.720002186738463  17.55851232809086
-  POINT  39  -2.521105171955536  17.0288301192291
-  POINT  40  2.521117530994832  17.02884382666544
-  POINT  41  6.720008173371727  17.55852412828754
-  POINT  42  11.19255813733148  17.32291152297285
-  POINT  43  15.59452813708109  17.30489873028883
-  POINT  44  19.60574841112116  16.04846495145881
-  POINT  45  -16.35730659116254  21.75725594233062
-  POINT  46  -12.54544836995473  21.48138724705098
-  POINT  47  -8.37129847568881  21.60726175061301
-  POINT  48  -4.053718777686841  21.85246502790269
-  POINT  49  -1.430589398276894e-05  24.01054233578156
-  POINT  50  4.05371501425693  21.85249206836341
-  POINT  51  8.371300119263841  21.60726988024046
-  POINT  52  12.54545081863551  21.48139080472586
-  POINT  53  16.35731330216852  21.75725990853536
-  POINT  54  -19.41056153872311  24.81976148284177
-  POINT  55  -14.80560392580181  26.07573876068267
-  POINT  56  -10.66746926752378  25.66425346686257
-  POINT  57  -6.065699906353569  25.80431103098134
-  POINT  58  -2.285109034351877  27.41452583361899
-  POINT  59  2.285117889708415  27.41450890210915
-  POINT  60  6.065725475366363  25.80433146618176
-  POINT  61  10.66748147994728  25.66426492608582
-  POINT  62  14.80560831647502  26.07574769863441
-  POINT  63  19.41055542162303  24.81978611809871
-  POINT  64  -17.79052993253167  29.13767173407599
-  POINT  65  -12.53266642765302  30.28076603601422
-  POINT  66  -8.408829224822554  29.44178330973553
-  POINT  67  -4.486611626819454  30.93433334096026
-  POINT  68  -3.455844492966306e-06  31.78686138258002
-  POINT  69  4.486608079340947  30.93433387532503
-  POINT  70  8.408846377235559  29.44180970477908
-  POINT  71  12.53266137297764  30.28079181313681
-  POINT  72  17.79050469035144  29.13772087902333
-  POINT  73  -15.42321743407593  32.73280660267888
-  POINT  74  -12.36825118230115  35.71707233206979
-  POINT  75  -8.654673025388929  33.6487632940044
-  POINT  76  -4.244918305693361  35.1578478808239
-  POINT  77  4.244868056856853  35.1578586139012
-  POINT  78  8.654638880706619  33.64878973380078
-  POINT  79  12.36818408598653  35.71712513202336
-  POINT  80  15.42316052899461  32.73287553137968
-  POINT  81  -8.358587775297027  38.16959026512966
-  POINT  82  -4.173840349470416  39.55962823616952
-  POINT  83  -3.315758252031564e-05  36.08253135745896
-  POINT  84  4.173782294307199  39.55964062450516
-  POINT  85  8.358512109833965  38.16962507345837
-  POINT  86  -15.31869198252731  11.03032643751357
-  POINT  87  -14.13452542076038  9.200702237652315
-  POINT  88  -12.85570322577262  11.38999471721338
-  POINT  89  14.81719997183304  15.26225221097661
-  POINT  90  12.61621497195824  15.27125860731862
-  POINT  91  13.39354313720629  17.31390512663084
-  POINT  92  16.26640866399346  12.80155633521549
-  POINT  93  15.31866987155821  11.03028543623874
-  POINT  94  17.63438934978107  10.56451880793851
-  POINT  95  17.04373682924151  14.84420285452771
-  POINT  96  -10.59366972652097  31.96476466500931
-  POINT  97  -10.47074782623779  29.86127467287488
-  POINT  98  -8.531751125105743  31.54527330186997
-  POINT  99  -12.45045880497709  32.99891918404201
-  POINT  100  -10.51146210384504  34.68291781303709
-  POINT  101  -8.506630400342978  35.90917677956703
-  POINT  102  -10.43571526797337  37.06153095754958
-  POINT  103  -17.63442337101413  10.56458323774599
-  POINT  104  -16.26641970164998  12.80159219875637
-  POINT  105  -15.3858183445685  7.22202811794831
-  POINT  106  -12.8441817856566  7.647013393174333
-  POINT  107  16.29805650341323  27.60673428882887
-  POINT  108  15.16158303166454  29.70925634608007
-  POINT  109  13.66913484472633  28.17826975588561
-  POINT  110  -1.142556245098185  29.6006936080995
-  POINT  111  4.427678269136592e-06  27.41451736786407
-  POINT  112  1.142557216931961  29.60068514234459
-  POINT  113  -17.04374815827279  14.84423145792389
-  POINT  114  -14.81719824416235  15.26225817624214
-  POINT  115  15.97592071962481  19.53107931941209
-  POINT  116  18.17865665108426  20.87862995426768
-  POINT  117  17.79726406854054  18.65244936514441
-  POINT  118  11.62616187505517  13.32339282042206
-  POINT  119  10.20250504042842  15.3750457360763
-  POINT  120  6.879718327899132  13.33346954387372
-  POINT  121  7.917490433345746  11.51817941748664
-  POINT  122  5.584756817719526  11.42446901218062
-  POINT  123  7.545654146317784  19.582897004264
-  POINT  124  8.956283155351606  17.4407178256302
-  POINT  125  9.781929128297662  19.46509070160666
-  POINT  126  7.96623005844854  15.49285203873364
-  POINT  127  5.633496442822319  15.39914163342762
-  POINT  128  12.8556970805803  11.3899795738575
-  POINT  129  14.13449514555352  9.200659318431857
-  POINT  130  10.44198714905048  11.49376670261518
-  POINT  131  9.147025638870879  9.584766170922078
-  POINT  132  -13.97794193086447  31.50678631934655
-  POINT  133  -13.97561719584198  34.30671603178849
-  POINT  134  -16.70387650845763  30.99911431489088
-  POINT  135  -15.16159818009234  29.7092188850451
-  POINT  136  -6.301753040495194  36.66371907297678
-  POINT  137  -6.449795665541145  34.40330558741415
-  POINT  138  -4.209379327581889  37.35873805849671
-  POINT  139  -6.304639255162508  38.98029279438281
-  POINT  140  4.209325175582026  37.35874961920318
-  POINT  141  6.301690083345409  36.66374184367979
-  POINT  142  6.304573775735958  38.98031527820729
-  POINT  143  -13.66913517672742  28.17825239834845
-  POINT  144  -16.29806692916674  27.60670524737933
-  POINT  145  -17.10808273226246  25.44775012176222
-  POINT  146  -18.72542076142402  27.02556955988556
-  POINT  147  10.51141148334658  34.68295743291207
-  POINT  148  8.506575495270292  35.90920740362957
-  POINT  149  10.4356453552653  37.06157496167121
-  POINT  150  6.449753468781736  34.40332417385099
-  POINT  151  10.59365012684213  31.96479077346879
-  POINT  152  8.531742628971088  31.54529971928993
-  POINT  153  10.4707538751066  29.86130075895795
-  POINT  154  12.45042272948209  32.99895847258009
-  POINT  155  17.60013827410112  16.67668184087382
-  POINT  156  19.90119304214559  18.01442401696686
-  POINT  157  19.13728303754552  14.18928652402979
-  POINT  158  13.97555586519206  34.30677709224583
-  POINT  159  13.97791095098612  31.50683367225824
-  POINT  160  16.70383744452203  30.99917471256351
-  POINT  161  -17.60014118550983  16.67669920175309
-  POINT  162  -19.90119484636033  18.01444229663801
-  POINT  163  -17.79726335039258  18.65244871770483
-  POINT  164  -19.13729740986643  14.18933437204147
-  POINT  165  14.45138206040202  21.61932535663061
-  POINT  166  13.67552956755527  23.77856925168013
-  POINT  167  15.58146080932177  23.91650380358488
-  POINT  168  10.45837546894968  21.54433034248316
-  POINT  169  11.8690044779835  19.40215116384935
-  POINT  170  14.0699894778583  19.39314476750734
-  POINT  171  18.7254069306502  27.02560730650771
-  POINT  172  17.10808186904902  25.44776690836656
-  POINT  173  17.88393436189578  23.28852301331703
-  POINT  174  19.85209195747333  22.42784944192063
-  POINT  175  8.366603477656822  25.73429819613379
-  POINT  176  9.53816392859142  27.55303731543246
-  POINT  177  7.237285926300961  27.62307058548042
-  POINT  178  11.60007142646246  27.97252836961132
-  POINT  179  12.73654489821115  25.87000631236012
-  POINT  180  9.519390799605562  23.63576740316314
-  POINT  181  7.218512797315102  23.70580067321111
-  POINT  182  11.6064661492914  23.57282786540584
-  POINT  183  5.059720244811647  23.82841176727259
-  POINT  184  6.212507566760386  21.72988097430193
-  POINT  185  5.386861593814329  19.70550809832548
-  POINT  186  3.169416451982673  24.63350048523628
-  POINT  187  4.175421682537388  26.60942018414546
-  POINT  188  12.84413541481362  7.64696633250321
-  POINT  189  15.38575758374665  7.221953946724504
-  POINT  190  6.545145650911207  5.656024245016244
-  POINT  191  7.659056066851544  7.952685561248713
-  POINT  192  5.508618507225803  7.312517569561066
-  POINT  193  10.18355278255628  7.928272846377257
-  POINT  194  11.35616584279428  6.014885722829844
-  POINT  195  9.84262954296128  4.793052369902824
-  POINT  196  12.5627706312312  4.437969385077269
-  POINT  197  5.924832424588732  3.228601376597741
-  POINT  198  5.59298116705137  0.7979540467762278
-  POINT  199  4.03572361596666  2.678360622297102
-  POINT  200  8.075269984214474  3.868769368285388
-  POINT  201  9.268518322543754  2.277286464498438
-  POINT  202  -3.385860330585666  29.17442958728963
-  POINT  203  -2.243307541331974  31.36059736177015
-  POINT  204  -4.365764966256407  33.04609061089208
-  POINT  205  -2.122460880768927  33.47235463170196
-  POINT  206  -5.276155766586511  28.3693221859708
-  POINT  207  -6.447720425821004  30.1880583253479
-  POINT  208  -7.237264565588061  27.62304717035844
-  POINT  209  -4.175404470352722  26.60941843230016
-  POINT  210  -6.570642326104192  32.29154831748234
-  POINT  211  -2.122475731637941  35.62018961914143
-  POINT  212  -1.830671350664097e-05  33.93469637001949
-  POINT  213  2.122417449637166  35.62019498568008
-  POINT  214  2.12243230050618  33.47235999824061
-  POINT  215  -2.086936753526468  37.82107979681424
-  POINT  216  -1.657879126015782e-05  38.04126567872948
-  POINT  217  -2.098502568614956  39.88960238033538
-  POINT  218  2.086874568362339  37.82108599098206
-  POINT  219  2.09847524707464  39.8896054946081
-  POINT  220  5.276166777353655  28.3693326707534
-  POINT  221  6.447727228288253  30.18807179005206
-  POINT  222  3.385862984524681  29.17442138871709
-  POINT  223  6.570623480023783  32.2915618045629
-  POINT  224  4.365738068098899  33.04609624461312
-  POINT  225  2.243302311748227  31.36059762895253
-  POINT  226  -15.97591664597385  19.53107668887014
-  POINT  227  -18.17865329558127  20.87862797116531
-  POINT  228  -17.88393406494282  23.2885087125862
-  POINT  229  -19.85209345422734  22.42783684408701
-  POINT  230  -15.58145525848218  23.91649735150665
-  POINT  231  1.260561645774382  15.05956980104973
-  POINT  232  3.534051121633872  15.13430148261657
-  POINT  233  2.273495236413422  13.16502745700086
-  POINT  234  4.62056285218328  17.29368397747649
-  POINT  235  3.287416272625881  19.44066794751443
-  POINT  236  1.260558765497416  18.51442191333272
-  POINT  237  2.026857507128465  20.92624603418171
-  POINT  238  -1.260549705700802  15.05956294733156
-  POINT  239  -3.534041764503905  15.13429102436105
-  POINT  240  -2.27348629824917  13.16502385246351
-  POINT  241  -4.620553679346999  17.29367122365998
-  POINT  242  -5.633490271895369  15.39913212879194
-  POINT  243  6.179519647986353e-06  17.02883697294727
-  POINT  244  -1.260552585977768  18.51441505961455
-  POINT  245  3.354602565163439  11.07360422106397
-  POINT  246  4.392374670610053  9.258314094676887
-  POINT  247  1.081113089303949  10.99887253949712
-  POINT  248  3.278464254669715  6.961652778444417
-  POINT  249  -8.956277911442228  17.44071238296659
-  POINT  250  -9.781926055917403  19.46508709422766
-  POINT  251  -7.545650331213636  19.58288703935193
-  POINT  252  -13.39354016846558  17.31390493662598
-  POINT  253  -12.61621171184277  15.27126567745847
-  POINT  254  -7.659078922707532  7.952693722884099
-  POINT  255  -10.18357905212516  7.928289747105911
-  POINT  256  -9.147036534588061  9.584774493130316
-  POINT  257  -11.35622417377607  6.014932622928116
-  POINT  258  -9.842705183303561  4.793097915203154
-  POINT  259  -12.5628648971392  4.438046414902402
-  POINT  260  -8.07533668781619  3.868796854763069
-  POINT  261  -9.268622145138828  2.27734158433505
-  POINT  262  1.081100077944307  6.646286708888283
-  POINT  263  2.197343914560057  4.700490183772463
-  POINT  264  1.838359439241251  2.362994552740968
-  POINT  265  -1.013108267587659e-05  2.192562057108165
-  POINT  266  1.846253788767268  0.0853985780217391
-  POINT  267  -1.081110588800538  10.99887167602092
-  POINT  268  -3.354602647603641  11.07359975305042
-  POINT  269  -4.392381671662718  9.258313022758163
-  POINT  270  -5.58475738111135  11.42446519920076
-  POINT  271  -3.260050521758373e-06  8.90744844008403
-  POINT  272  -1.08112360016018  6.646285845412075
-  POINT  273  -8.366584586938671  25.73428224892195
-  POINT  274  -9.519383871606294  23.63575760873779
-  POINT  275  -7.21849919102119  23.70578639079717
-  POINT  276  -9.538149246173166  27.55301838829905
-  POINT  277  -11.6000678475884  27.97250975143839
-  POINT  278  -12.73653659666279  25.86999611377262
-  POINT  279  -5.059709342020205  23.82838802944201
-  POINT  280  -6.212508626687826  21.72986338925784
-  POINT  281  -3.287411974821189  19.44064757356589
-  POINT  282  -2.026859388843421  20.92623251395134
-  POINT  283  -3.169413906019359  24.63349543076084
-  POINT  284  -5.386860482212652  19.70548867799678
-  POINT  285  -11.86900100305036  19.40214984244664
-  POINT  286  -10.45837342282177  21.54432449883199
-  POINT  287  -11.60645881873926  23.57282035695677
-  POINT  288  -14.45137748055864  21.6193215946908
-  POINT  289  -14.06998753536995  19.39314234123031
-  POINT  290  -13.67552614787827  23.77856300386682
-  POINT  291  -7.966224937896692  15.49284638149671
-  POINT  292  -6.879713023053598  13.33346618219778
-  POINT  293  -10.20250066260046  15.37504643637243
-  POINT  294  -7.917492047112675  11.51817945190553
-  POINT  295  -10.44199217653031  11.49377547612734
-  POINT  296  -11.62615873829723  13.32339967598859
-  POINT  297  -1.838408766123554  2.362999988598223
-  POINT  298  -1.846281530475226  0.08540130760665365
-  POINT  299  -3.278486096797754  6.961652071627865
-  POINT  300  -2.197382758802926  4.700490340432118
-  POINT  301  -6.545183347842568  5.6560327717538
-  POINT  302  -5.92489859541412  3.228620649657177
-  POINT  303  -5.508640830305463  7.312517517778206
-  POINT  304  -4.035771262761127  2.678366214814012
-  POINT  305  -5.593056997119752  0.797976657516179
-  POINT  306  -2.026866541790412  22.93150368184212
-  POINT  307  -7.152946991384468e-06  22.00527116789078
-  POINT  308  -1.14256167012293  25.71253408470027
-  POINT  309  1.142551791907216  25.71252561894535
-  POINT  310  2.026850354181474  22.93151720207248
+  POINT  5  -7.08999439411224  1.298877587388341
+  POINT  6  -5.282004223598042  0.7100950914239894
+  POINT  7  -3.47031521720064  0.3033781502190239
+  POINT  8  -1.689974063564663  0.07152821552843025
+  POINT  9  1.689960162663852  0.07152703670926773
+  POINT  10  3.470291113247503  0.3033739033986539
+  POINT  11  5.281972434142698  0.7100863867937268
+  POINT  12  7.089956578995546  1.298863250915369
+  POINT  13  -10.33788236531681  2.879013223504487
+  POINT  14  -8.728323343402396  2.005101511455367
+  POINT  15  -6.155723063676203  2.801434963065342
+  POINT  16  -4.091201195594828  2.459658715166061
+  POINT  17  -2.066659832781266  2.187655143712953
+  POINT  18  -4.444059962388502e-06  2.064287137447093
+  POINT  19  2.066650046418929  2.187657831466219
+  POINT  20  4.091191239691891  2.459658150301677
+  POINT  21  6.155715570419536  2.801429443148412
+  POINT  22  8.728292838334855  2.005086715177716
+  POINT  23  10.3378510065  2.878994288669519
+  POINT  24  -13.31700959313135  5.078295824654251
+  POINT  25  -11.8842697780299  3.913852796799773
+  POINT  26  -9.460448082417175  4.366488604800259
+  POINT  27  -7.512025315084293  4.126002865730436
+  POINT  28  -5.172892121816004  4.455275571417475
+  POINT  29  -3.057534701397881  4.267955770521298
+  POINT  30  -1.012355277947994  4.110780430542055
+  POINT  31  1.012349419089582  4.110782567666035
+  POINT  32  3.057529483199409  4.267957853121388
+  POINT  33  5.172886691584971  4.455272913530382
+  POINT  34  7.512016782430195  4.125998677146069
+  POINT  35  9.460436885249777  4.366480067235193
+  POINT  36  11.88424594459136  3.913835188943747
+  POINT  37  13.31698679929866  5.078275482126558
+  POINT  38  -14.7498830675396  6.492929647996144
+  POINT  39  -12.45509720824102  6.556537137387828
+  POINT  40  -10.6482491458674  5.948211070168938
+  POINT  41  -8.422109451390526  6.167912606077227
+  POINT  42  -6.353060403793894  6.112985632708121
+  POINT  43  -4.1407681774423  6.228053553808773
+  POINT  44  -2.044474263097546  6.130734213928414
+  POINT  45  -1.590000917432027e-06  6.079527809516725
+  POINT  46  2.044472146376001  6.130736081211611
+  POINT  47  4.140767470322072  6.22805374467435
+  POINT  48  6.353058937427791  6.112982734736828
+  POINT  49  8.422108492096564  6.167907314850485
+  POINT  50  10.64824854146091  5.948202934940974
+  POINT  51  12.45509688415863  6.556538659055924
+  POINT  52  14.74986960384593  6.492914945498344
+  POINT  53  -16.04355519086491  8.058294224118221
+  POINT  54  -13.74135223644284  8.192183278283656
+  POINT  55  -11.47752803375488  8.160729976898475
+  POINT  56  -9.493527168153337  7.92578225082361
+  POINT  57  -7.348476128284648  8.030483731407866
+  POINT  58  -5.251990097092846  8.021830105465815
+  POINT  59  -3.111403417400961  8.061569553457121
+  POINT  60  -1.03035566619991  8.025902010406856
+  POINT  61  1.030354767138576  8.025902400729668
+  POINT  62  3.111403710309801  8.061569941428463
+  POINT  63  5.251991017315566  8.021829123575905
+  POINT  64  7.348476568276788  8.030480163525478
+  POINT  65  9.49352663676625  7.92577656119784
+  POINT  66  11.47752506667806  8.160726192772536
+  POINT  67  13.74135116972482  8.192181839463158
+  POINT  68  16.04354708966182  8.058283340247721
+  POINT  69  -17.19580986241097  9.787060992258192
+  POINT  70  -14.93702314944201  9.823933424582281
+  POINT  71  -12.67351421081692  9.907845730886832
+  POINT  72  -10.48194789872941  9.921029402134767
+  POINT  73  -8.415247672061369  9.840575684874789
+  POINT  74  -6.293821461179366  9.890161035967978
+  POINT  75  -4.18979493172746  9.895564239362063
+  POINT  76  -2.081243704999238  9.916613908721169
+  POINT  77  5.730172508017217e-08  9.910960593168005
+  POINT  78  2.081244132593595  9.916613808527552
+  POINT  79  4.189795976700378  9.895563750716825
+  POINT  80  6.293822706796825  9.890159478467984
+  POINT  81  8.415248200245212  9.840572417227369
+  POINT  82  10.48194698614503  9.921026346494969
+  POINT  83  12.67351249301398  9.90784290415405
+  POINT  84  14.93702196401547  9.823930709655935
+  POINT  85  17.19580506925672  9.787052921897237
+  POINT  86  -18.1760415240729  11.65545001122227
+  POINT  87  -15.97553246064111  11.5448525408589
+  POINT  88  -13.78571642443011  11.61751913076442
+  POINT  89  -11.59628723826348  11.69602393958708
+  POINT  90  -9.442169657304916  11.7276271718398
+  POINT  91  -7.349624558628578  11.71151253389753
+  POINT  92  -5.24282073613147  11.73166174921223
+  POINT  93  -3.137905182843987  11.749161104766
+  POINT  94  -1.042556134226208  11.76547185321201
+  POINT  95  1.042556695466196  11.76547172930404
+  POINT  96  3.13790593838561  11.74916068398455
+  POINT  97  5.242821722657395  11.73166093775092
+  POINT  98  7.349625501825332  11.7115109952139
+  POINT  99  9.442169874348188  11.72762525690472
+  POINT  100  11.59628683371615  11.69602200942614
+  POINT  101  13.78571564810794  11.61751684765504
+  POINT  102  15.97553159279355  11.54484971825705
+  POINT  103  18.17603883633879  11.65544415682245
+  POINT  104  -18.9605397782243  13.63620150237337
+  POINT  105  -16.8378114819632  13.34701391345798
+  POINT  106  -14.74755920142683  13.39190264700377
+  POINT  107  -12.63015409928628  13.45515225576576
+  POINT  108  -10.4974158537763  13.51638952902862
+  POINT  109  -8.377087236386718  13.55137598391785
+  POINT  110  -6.285880485474346  13.5571522438029
+  POINT  111  -4.197964629953373  13.554499339371
+  POINT  112  -2.088214950681028  13.58585648886253
+  POINT  113  2.731150748891409e-07  13.59731244193799
+  POINT  114  2.088215540160786  13.58585624443037
+  POINT  115  4.197965288358211  13.55449885456938
+  POINT  116  6.285881219549023  13.55715142631005
+  POINT  117  8.377087797482492  13.5513749885778
+  POINT  118  10.49741609890272  13.51638838986579
+  POINT  119  12.63015411255437  13.45515089704564
+  POINT  120  14.74755900190871  13.3919008647022
+  POINT  121  16.83781104922592  13.34701152878708
+  POINT  122  18.96053842326367  13.63619746535554
+  POINT  123  -19.5357573624754  15.71582163367355
+  POINT  124  -17.53374306722162  15.20882267305824
+  POINT  125  -15.57069741754931  15.24451363995668
+  POINT  126  -13.55098734811856  15.27194090964616
+  POINT  127  -11.4874826074671  15.31182390849893
+  POINT  128  -9.398270307101383  15.3521915525082
+  POINT  129  -7.307964300837752  15.3807112166889
+  POINT  130  -5.231490199222396  15.39200882295255
+  POINT  131  -3.169152633696715  15.35291249391119
+  POINT  132  -1.041499472772248  15.40847695692984
+  POINT  133  1.041499922227459  15.40847686112553
+  POINT  134  3.169153095957357  15.35291225824823
+  POINT  135  5.231490717147384  15.39200836588829
+  POINT  136  7.307964797170775  15.38071066913708
+  POINT  137  9.398270745362067  15.35219096658757
+  POINT  138  11.48748296447435  15.31182320391143
+  POINT  139  13.55098760797554  15.27193995853761
+  POINT  140  15.57069756108526  15.24451232768288
+  POINT  141  17.5337430129703  15.20882089303506
+  POINT  142  19.53575681130713  15.71581912036011
+  POINT  143  -18.2269232082509  17.13021291903821
+  POINT  144  -16.40696619670878  17.17145148168169
+  POINT  145  -14.46503683750223  17.15281425943443
+  POINT  146  -12.45424174106675  17.15199836204197
+  POINT  147  -10.39981013664358  17.16515504075176
+  POINT  148  -8.328026293006795  17.18988295252257
+  POINT  149  -6.256758829896484  17.21190086556036
+  POINT  150  -4.196112455235621  17.22388615617422
+  POINT  151  -2.171217513306863  17.11254059462183
+  POINT  152  1.665915350806957e-07  17.22074676082319
+  POINT  153  2.171217828945217  17.1125405142267
+  POINT  154  4.19611284158213  17.22388591748381
+  POINT  155  6.256759233014987  17.21190057227975
+  POINT  156  8.32802671761999  17.18988265372117
+  POINT  157  10.39981059340922  17.16515474428726
+  POINT  158  12.45424219159261  17.15199799003971
+  POINT  159  14.46503723679426  17.15281363556374
+  POINT  160  16.40696659288819  17.17145057879611
+  POINT  161  18.22692352993353  17.13021164782587
+  POINT  162  -19.89780896458842  17.98079262859248
+  POINT  163  -17.84230000449807  19.0216744028301
+  POINT  164  -15.67627065513821  19.02313060013363
+  POINT  165  -13.55906626932976  19.0036025225671
+  POINT  166  -11.45548002657009  18.98870888881037
+  POINT  167  -9.365348057261556  18.99918972787285
+  POINT  168  -7.287998267664897  19.0218085635537
+  POINT  169  -5.225476971032742  19.04419029905378
+  POINT  170  -3.181207515747626  19.06061320124515
+  POINT  171  -1.234450813224698  18.81027364364246
+  POINT  172  1.234451001429794  18.8102736784703
+  POINT  173  3.181207777678578  19.06061305006857
+  POINT  174  5.225477302694968  19.04419014960234
+  POINT  175  7.287998656796332  19.02180842950959
+  POINT  176  9.365348511226138  18.99918964629332
+  POINT  177  11.45548052731511  18.98870888549819
+  POINT  178  13.55906673221513  19.00360248933783
+  POINT  179  15.6762709640833  19.02313030096059
+  POINT  180  17.84230024444024  19.02167396477342
+  POINT  181  19.89780885181004  17.98079151724459
+  POINT  182  -18.34809671121251  20.89054860233434
+  POINT  183  -16.5148528869666  20.87800710044906
+  POINT  184  -14.52694695679922  20.85426661015416
+  POINT  185  -12.45599638977427  20.8108810324845
+  POINT  186  -10.37011211347385  20.80605366101868
+  POINT  187  -8.288100923056527  20.82387931457176
+  POINT  188  -6.210897946834899  20.84807602452601
+  POINT  189  -4.130583790032196  20.86687448767059
+  POINT  190  -2.030932593701857  20.87063865748742
+  POINT  191  9.744431586633517e-08  21.64935021861394
+  POINT  192  2.030932751362846  20.87063857502341
+  POINT  193  4.130584013659444  20.86687431844705
+  POINT  194  6.210898346296974  20.84807594605767
+  POINT  195  8.288101445193462  20.82387932992417
+  POINT  196  10.37011274159265  20.80605382218947
+  POINT  197  12.45599711658471  20.8108813744629
+  POINT  198  14.52694762208812  20.85426702370534
+  POINT  199  16.51485331119099  20.87800725634424
+  POINT  200  18.348097009919  20.89054895986076
+  POINT  201  -19.88382274553589  22.15257822717576
+  POINT  202  -17.85872906553023  22.79187608979278
+  POINT  203  -15.75836820209814  22.71857538973881
+  POINT  204  -13.57945048306569  22.62787433244293
+  POINT  205  -11.43502337227142  22.60571660119635
+  POINT  206  -9.32896785495339  22.62172230713452
+  POINT  207  -7.252191943285577  22.65010775210676
+  POINT  208  -5.19352107545026  22.67271964550248
+  POINT  209  -3.145718127729072  22.67904520073677
+  POINT  210  -1.19802941618547  22.93488185752093
+  POINT  211  1.198029575535804  22.93488182516196
+  POINT  212  3.145718298303114  22.67904507452085
+  POINT  213  5.193521324838902  22.67271937177574
+  POINT  214  7.252192530636423  22.65010772431655
+  POINT  215  9.328968618053137  22.62172251326393
+  POINT  216  11.43502432491394  22.60571702295378
+  POINT  217  13.57945157268804  22.62787513308746
+  POINT  218  15.75836910518877  22.71857642015902
+  POINT  219  17.85872913941462  22.7918771500154
+  POINT  220  19.88382260621709  22.15257951409296
+  POINT  221  -19.56496589012501  24.14874796995999
+  POINT  222  -17.12378015908613  24.49263729810405
+  POINT  223  -14.75261366404331  24.36653106466741
+  POINT  224  -12.51545015644557  24.36405857012063
+  POINT  225  -10.36487612468117  24.40059700241373
+  POINT  226  -8.270782662155399  24.44922254990688
+  POINT  227  -6.207288303035652  24.48752518657241
+  POINT  228  -4.152672439085122  24.50430982838724
+  POINT  229  -2.144764510838116  24.6392641397031
+  POINT  230  6.736184551131563e-08  24.56637229685156
+  POINT  231  2.144764639428793  24.6392640566236
+  POINT  232  4.152672593221236  24.5043096033403
+  POINT  233  6.207288592802848  24.48752465778632
+  POINT  234  8.270783499471428  24.44922265688236
+  POINT  235  10.36487726829784  24.4005974184117
+  POINT  236  12.51545141239867  24.36405943508291
+  POINT  237  14.75261493047371  24.36653271363972
+  POINT  238  17.12378075459493  24.4926401834798
+  POINT  239  19.56496529523762  24.14875077537231
+  POINT  240  -19.08648829040304  25.9754468234863
+  POINT  241  -17.2845615037453  26.31014844212238
+  POINT  242  -15.41261905344529  26.10941999036963
+  POINT  243  -13.37179093546351  26.11632995430249
+  POINT  244  -11.29591265365937  26.16877399507631
+  POINT  245  -9.236109783161917  26.24563353410026
+  POINT  246  -7.197506282144635  26.30683884552605
+  POINT  247  -5.148124747507762  26.32635712487787
+  POINT  248  -3.122954853611116  26.40463970225008
+  POINT  249  -1.028840474391874  26.37582534616704
+  POINT  250  1.028840597301122  26.37582532979795
+  POINT  251  3.122954923639289  26.40463955141999
+  POINT  252  5.148124848876652  26.32635667877105
+  POINT  253  7.197506356103443  26.30683804371632
+  POINT  254  9.236111124219747  26.24563372506302
+  POINT  255  11.29591412227338  26.16877501716782
+  POINT  256  13.3717921011747  26.11633170886203
+  POINT  257  15.41261961645513  26.1094231779272
+  POINT  258  17.28456075910474  26.31015378144565
+  POINT  259  19.08648669351269  25.97545192419629
+  POINT  260  -18.31673994912508  28.03100477126815
+  POINT  261  -16.29279631468638  28.07734896422777
+  POINT  262  -14.29108105178232  27.93826211324394
+  POINT  263  -12.23205698562959  27.95454691920996
+  POINT  264  -10.1921242779246  28.04641052160824
+  POINT  265  -8.184908522052318  28.14581978804722
+  POINT  266  -6.142892720399755  28.15468429908139
+  POINT  267  -4.115765842832939  28.20978375998045
+  POINT  268  -2.044953225702631  28.19763670818671
+  POINT  269  1.215817429928157e-07  28.20528019734085
+  POINT  270  2.044953387448034  28.19763672758267
+  POINT  271  4.115765884875199  28.20978350344839
+  POINT  272  6.142892053295159  28.15468405294527
+  POINT  273  8.184908802060571  28.1458177672969
+  POINT  274  10.1921266003412  28.04641156253142
+  POINT  275  12.23205881411247  27.95454935528251
+  POINT  276  14.2910815778731  27.93826589300298
+  POINT  277  16.29279479603289  28.07735539177588
+  POINT  278  18.31673641698378  28.0310128272082
+  POINT  279  -17.36678064292307  29.91942186322351
+  POINT  280  -15.30701199611502  29.80163024565981
+  POINT  281  -13.1975126296105  29.73273604910611
+  POINT  282  -11.14232609374812  29.83834011557202
+  POINT  283  -9.18383040196667  30.00598319236085
+  POINT  284  -7.135586668146636  29.99761305864382
+  POINT  285  -5.123286168201119  30.04271988926355
+  POINT  286  -3.053121112865554  30.02630175178171
+  POINT  287  -1.015876570824747  30.05156154994286
+  POINT  288  1.015877381461083  30.05156170293002
+  POINT  289  3.053121697974701  30.02630185030043
+  POINT  290  5.123284228587577  30.0427213293883
+  POINT  291  7.135586245905698  29.99761060242232
+  POINT  292  9.183831168146963  30.00598031130402
+  POINT  293  11.14232972160493  29.83834373724195
+  POINT  294  13.19751369866922  29.73274161644041
+  POINT  295  15.30700948964564  29.80163858123015
+  POINT  296  17.36677404971316  29.91943340651388
+  POINT  297  -16.21450019303935  31.70854318392894
+  POINT  298  -14.18134842576247  31.46072633556853
+  POINT  299  -12.05433474215738  31.57807989769072
+  POINT  300  -10.18803390533311  31.90895778516169
+  POINT  301  -8.127827538982091  31.83562093362241
+  POINT  302  -6.132870312528693  31.91947084481104
+  POINT  303  -4.060514707104238  31.84886116654844
+  POINT  304  -2.023054298900899  31.90620457141977
+  POINT  305  1.779731685490338e-06  31.92616315841029
+  POINT  306  2.023057639192921  31.90620515692421
+  POINT  307  4.060510421402324  31.84886697474238
+  POINT  308  6.132869669181516  31.91946778705557
+  POINT  309  8.127827628663475  31.83561745950141
+  POINT  310  10.18803390203203  31.90895591912609
+  POINT  311  12.05433729770214  31.5780897141657
+  POINT  312  14.18134461110469  31.46073802168817
+  POINT  313  16.21448882325949  31.70855892928177
+  POINT  314  -14.85855987098478  33.38742688347396
+  POINT  315  -12.97622115412793  33.15231979037343
+  POINT  316  -11.24542238667929  33.84152597332419
+  POINT  317  -9.096796145803623  33.67355592311518
+  POINT  318  -7.169110863793735  33.81460869617811
+  POINT  319  -5.025802643706024  33.69074033624606
+  POINT  320  -3.036012504986613  33.74897677262599
+  POINT  321  -1.006001725651425  33.81394161048243
+  POINT  322  1.006017505359627  33.81394238106373
+  POINT  323  3.03600454008222  33.7489957057666
+  POINT  324  5.025801824829388  33.69073476359576
+  POINT  325  7.169110502599582  33.81460511144136
+  POINT  326  9.09679356939724  33.67355436459209
+  POINT  327  11.24541326548703  33.84153193558982
+  POINT  328  12.97621626240949  33.15233833055714
+  POINT  329  14.85854134665239  33.38744744340443
+  POINT  330  -13.24234864752243  34.98800194480442
+  POINT  331  -10.03539086910046  35.3828070140792
+  POINT  332  -8.191323309688949  35.8082238544771
+  POINT  333  -5.969442595277822  35.42728838548917
+  POINT  334  -3.964572821971675  35.68073227615353
+  POINT  335  -2.062446042804255  35.66361537576937
+  POINT  336  3.401394552337428e-05  35.7433135846511
+  POINT  337  2.062435708551036  35.66367717807774
+  POINT  338  3.96457676799794  35.68072163899399
+  POINT  339  5.969444351238414  35.42728363799607
+  POINT  340  8.19131937738778  35.80822453891639
+  POINT  341  10.03538306356879  35.38281277249126
+  POINT  342  13.2423188856883  34.98802824022632
+  POINT  343  -11.71964489363993  36.20647782730662
+  POINT  344  -9.885418518050601  37.38615830834937
+  POINT  345  -6.769213566269587  37.09871131951007
+  POINT  346  -4.834310082657146  37.45809613171494
+  POINT  347  -2.966207997229898  37.80957975457357
+  POINT  348  -1.228951401026502  37.50853541118494
+  POINT  349  1.228967413584314  37.50873516084056
+  POINT  350  2.966244431714553  37.80956888117363
+  POINT  351  4.834322604660215  37.45809313826081
+  POINT  352  6.769215951806145  37.09871058669637
+  POINT  353  9.885380262406448  37.38618005968161
+  POINT  354  11.71961051109886  36.20650269083999
+  POINT  355  -8.160801736293346  38.25928024378061
+  POINT  356  -6.108721403629119  39.04425169999729
+  POINT  357  -4.094025391529261  39.57648988183318
+  POINT  358  -2.032918826278168  39.89641276827972
+  POINT  359  -0.000114943787747096  38.55954134616952
+  POINT  360  2.032857647557499  39.89641901912924
+  POINT  361  4.093978133093873  39.57649976491602
+  POINT  362  6.108678764431183  39.04426537708952
+  POINT  363  8.16076002653128  38.25929888548312
+  POINT  364  19.74927974328947  16.84311090331085
+  POINT  365  19.06236619087178  17.55550158253523
+  POINT  366  18.88134017062033  16.42301538409299
+  POINT  367  18.87005454812514  18.50123274100901
+  POINT  368  18.92115012222012  19.51083698238671
+  POINT  369  19.97443587516672  18.98910375220634
+  POINT  370  18.03461188718688  18.07594280629964
+  POINT  371  -1.016516885032958  39.22797705722462
+  POINT  372  -1.017777998289471  39.97408640454459
+  POINT  373  -5.747189387354801e-05  39.27977067308476
+  POINT  374  1.016371351884876  39.22798018264938
+  POINT  375  1.017747548306818  39.9740879692846
+  POINT  376  2.499551039636026  38.85299395015144
+  POINT  377  3.530111282404213  38.69303432304483
+  POINT  378  3.067591411714378  39.76334698055007
+  POINT  379  -10.9924492306217  14.41410671876377
+  POINT  380  -10.44287645728424  15.33200773050357
+  POINT  381  -9.947843080438842  14.43429054076841
+  POINT  382  -12.05881835337669  14.38348808213234
+  POINT  383  -11.56378497653129  13.48577089239719
+  POINT  384  -19.1159597283742  21.52156341475505
+  POINT  385  -19.17404835560626  20.44527430116717
+  POINT  386  -19.97093456597552  21.07785567562136
+  POINT  387  18.53474991213871  15.46232000669758
+  POINT  388  18.24714071811698  14.4225091791953
+  POINT  389  19.27621315646036  14.66824556999596
+  POINT  390  17.88033327145191  16.16951627043046
+  POINT  391  -1.878316948172965  1.129591679620692
+  POINT  392  -2.768487524990953  1.245516646965989
+  POINT  393  -2.582747461702293  0.167465745146943
+  POINT  394  7.648469065631529  32.82511128547139
+  POINT  395  8.132952035998411  33.74407973801672
+  POINT  396  8.612310599030359  32.75458591204675
+  POINT  397  10.87749678733383  35.79465773166562
+  POINT  398  10.81858671612841  36.82136097977488
+  POINT  399  9.960381662987619  36.38449641608644
+  POINT  400  -11.96631262099795  7.358633557143151
+  POINT  401  -11.55167317705421  6.252374103778383
+  POINT  402  -11.06288858981114  7.054470523533706
+  POINT  403  -12.16968349313546  5.2351949670938
+  POINT  404  -11.26625946194865  4.931031933484356
+  POINT  405  -12.0755211222859  9.034287853892653
+  POINT  406  -11.57773105477317  9.914437566510799
+  POINT  407  -10.97973796624214  9.040879689516622
+  POINT  408  -10.17110926624146  33.75754094821968
+  POINT  409  -10.64040662788987  34.61216649370169
+  POINT  410  -9.566093507452038  34.52818146859719
+  POINT  411  -5.471515743143133  38.25117391585611
+  POINT  412  -5.108309760920813  39.33662769024022
+  POINT  413  -4.464167737093204  38.51729300677406
+  POINT  414  -17.075786992357  11.60015127604059
+  POINT  415  -16.58567116152604  10.66595676655855
+  POINT  416  -17.71058118590639  10.70832033698396
+  POINT  417  -11.04685154601989  12.60620673430785
+  POINT  418  -12.11322066877488  12.57558809767642
+  POINT  419  -12.1349007245402  10.80193483523696
+  POINT  420  -11.03911756849645  10.80852667086092
+  POINT  421  -9.437251545081509  13.53388275647323
+  POINT  422  -8.887678771744049  14.45178376821303
+  POINT  423  -12.51923497779283  15.29188240907255
+  POINT  424  -13.09057072370242  14.36354658270596
+  POINT  425  -18.87005448454325  18.50123351571129
+  POINT  426  -18.03461160637449  18.07594366093415
+  POINT  427  -19.06236608641966  17.55550277381534
+  POINT  428  -18.92115000224904  19.51083720141505
+  POINT  429  -19.97443590274372  18.98910431002001
+  POINT  430  -18.09519835785529  19.95611150258222
+  POINT  431  0.5990148364900598  22.29211602188795
+  POINT  432  -0.599014659370577  22.29211603806743
+  POINT  433  7.967516690854382e-08  22.93488184134145
+  POINT  434  -1.01546624812877  21.25999443805068
+  POINT  435  4.872215793316759e-08  20.82467510930697
+  POINT  436  -1.015466296850928  20.43531932874371
+  POINT  437  -1.614481004943663  21.90276025750417
+  POINT  438  6.782362015092881  16.29630562070841
+  POINT  439  6.26972775715908  15.38635951751268
+  POINT  440  5.744124975081186  16.30195446908402
+  POINT  441  -5.74412451455944  16.30195484425646
+  POINT  442  -5.226435642566052  17.21789351086729
+  POINT  443  -4.713801327229008  16.30794748956339
+  POINT  444  -4.200321416459555  15.37246065843187
+  POINT  445  -3.682632544466168  16.2883993250427
+  POINT  446  -5.718863643637123  1.755765027244666
+  POINT  447  -6.622858728894221  2.050156275226842
+  POINT  448  -6.1930002735872  0.9829879862466689
+  POINT  449  -1.033332138420614  2.125971140580023
+  POINT  450  -0.5061798610039783  3.087533783994574
+  POINT  451  -1.53950755536463  3.149217787127504
+  POINT  452  0.8449778593019447  1.06790708707818
+  POINT  453  -2.222029981194251e-06  1.032143568723546
+  POINT  454  0.8457366719362006  0.01788976042541284
+  POINT  455  -0.8449892538123129  1.067907676487761
+  POINT  456  -0.8457434623547605  0.01789005539397318
+  POINT  457  7.14550668849857  38.67998224759658
+  POINT  458  7.464987989168712  37.67900473608974
+  POINT  459  6.438947358118664  38.07148798189294
+  POINT  460  5.471500684545699  38.25117925767516
+  POINT  461  5.801769278233181  37.27840186247859
+  POINT  462  4.399449686329078  36.5694073886274
+  POINT  463  3.900283518187385  37.63383100971722
+  POINT  464  3.465410599856247  36.74514526008381
+  POINT  465  4.464150368877045  38.51729645158841
+  POINT  466  5.108265028519643  39.33663957465164
+  POINT  467  6.569277426918998  34.62094437471872
+  POINT  468  5.497623088033901  34.55900920079591
+  POINT  469  6.097456163714485  33.75266993751856
+  POINT  470  4.967010559618177  35.55400263849503
+  POINT  471  4.495189296413664  34.68572820129488
+  POINT  472  5.401883477949315  36.44268838812844
+  POINT  473  6.369330151522279  36.26299711234622
+  POINT  474  9.113351220478284  35.59551865570383
+  POINT  475  9.038349819897114  36.597202299299
+  POINT  476  7.080381864313097  35.61775408845623
+  POINT  477  7.480267664596962  36.45346756280638
+  POINT  478  7.680214939993681  34.81141482517887
+  POINT  479  8.64405647339251  34.74088945175424
+  POINT  480  9.566088316483015  34.52818356854168
+  POINT  481  8.17603970195953  37.03376171219976
+  POINT  482  9.033624999701651  37.84358769694784
+  POINT  483  18.72983203648753  27.01380028490616
+  POINT  484  17.80064858804426  27.17058330432692
+  POINT  485  18.18552372630872  26.14280285282097
+  POINT  486  14.85185059716412  27.02384453546509
+  POINT  487  13.8314368395239  27.02729880093251
+  POINT  488  14.39220585881491  26.11287744339462
+  POINT  489  -2.499563411754033  38.85299626142665
+  POINT  490  -3.530116694379579  38.69303481820337
+  POINT  491  -3.067645385176077  39.76333856162318
+  POINT  492  -3.900259039943522  37.63383794314426
+  POINT  493  3.013506238274488  35.67219940853586
+  POINT  494  2.514340070132794  36.73662302962569
+  POINT  495  6.650990085890549  32.86703644924846
+  POINT  496  5.579335747005452  32.80510127532567
+  POINT  497  7.130348648922496  31.87754262327849
+  POINT  498  7.631706937284587  30.91661403096186
+  POINT  499  8.159708707026331  30.00179545686317
+  POINT  500  8.655829398405219  30.92079888540271
+  POINT  501  6.634227957543607  30.95853919473894
+  POINT  502  6.129435237246637  30.02016596590531
+  POINT  503  5.628076948884546  30.98109455822193
+  POINT  504  11.94551072074933  21.70829919870834
+  POINT  505  11.41305492908868  20.80846759832619
+  POINT  506  10.9025685332533  21.70588542257163
+  POINT  507  13.00753192439992  19.90724193190037
+  POINT  508  13.49147236933642  20.83257419908412
+  POINT  509  14.04300717715163  19.92893475652158
+  POINT  510  -1.632691703463277  19.84045615056494
+  POINT  511  -0.617225406612349  19.40513682182123
+  POINT  512  7.881862384261  8.935526290376423
+  POINT  513  6.821149637536807  8.96031982099673
+  POINT  514  7.354535453521018  9.865365947847677
+  POINT  515  1.878305104541391  1.129592434087743
+  POINT  516  2.768470579833216  1.245515867432436
+  POINT  517  2.582728607973412  0.1674632640394325
+  POINT  518  1.033322801179483  2.125972484456656
+  POINT  519  -12.88605340068618  5.81741648102104
+  POINT  520  -14.05126013257847  5.767569248488341
+  POINT  521  -13.60249013789031  6.524733392691986
+  POINT  522  -12.61408342909388  4.479532986874619
+  POINT  523  -13.09822472234193  7.374360207835742
+  POINT  524  -12.60944013509886  8.176456627591065
+  POINT  525  -13.20743322362988  9.050014504585244
+  POINT  526  -14.24561765199122  7.3425564631399
+  POINT  527  -14.89245371365388  8.125238751200939
+  POINT  528  -15.41659981616689  7.259181873308678
+  POINT  529  -12.11082177040361  33.4969228818488
+  POINT  530  -12.51527794814265  32.36519984403208
+  POINT  531  -11.64987856441833  32.70980293550745
+  POINT  532  -10.81862285529724  36.82133760142749
+  POINT  533  -10.87751788137019  35.79464242069291
+  POINT  534  -9.960404693575528  36.38448266121428
+  POINT  535  -11.48253364015961  35.0240019003154
+  POINT  536  -10.7167281460062  32.87524187924294
+  POINT  537  -11.12118432374524  31.74351884142621
+  POINT  538  -9.642415025568365  32.79125685413843
+  POINT  539  -18.53475021484851  15.4623221533659
+  POINT  540  -19.27621404631537  14.6682488620726
+  POINT  541  -18.24714142272296  14.42251208771581
+  POINT  542  -18.88134028536315  16.42301727635588
+  POINT  543  -17.88033313773626  16.16951779604823
+  POINT  544  -19.74928002630716  16.84311272522837
+  POINT  545  -15.49028917015346  8.94111382435025
+  POINT  546  -16.06641650592649  9.805497208420237
+  POINT  547  -16.64214543071471  8.907705737630335
+  POINT  548  -15.45627780504156  10.68439298272059
+  POINT  549  -14.33918769294243  9.008058351432968
+  POINT  550  -13.80526868012947  9.865889577734556
+  POINT  551  -14.1492732747727  14.33192177832496
+  POINT  552  -15.15912830948807  14.31820814348022
+  POINT  553  -14.56084238283394  15.25822727480142
+  POINT  554  -13.68885665035655  13.42352745138476
+  POINT  555  -17.50692650301805  12.50123196234012
+  POINT  556  -17.89917563009375  13.49160770791567
+  POINT  557  -18.59468367857226  12.63537262535845
+  POINT  558  -16.40667197130215  12.44593322715844
+  POINT  559  -17.18577727459241  14.27791829325811
+  POINT  560  -15.79268534169501  13.36945828023087
+  POINT  561  -15.36154583103397  12.46837759393134
+  POINT  562  -16.20425444975626  14.29576377670733
+  POINT  563  -16.55222024238547  15.22666815650746
+  POINT  564  14.61766884814922  19.01336639514921
+  POINT  565  15.10160929308571  19.93869866233297
+  POINT  566  -8.954387420107352  8.883178967849199
+  POINT  567  -8.421001648218994  7.978132991115737
+  POINT  568  -7.881861900173009  8.935529708141328
+  POINT  569  -10.48552760095411  8.043256113861043
+  POINT  570  -10.07088815701037  6.936996660496273
+  POINT  571  -9.987737533441372  8.923405826479188
+  POINT  572  -9.448597785395389  9.880802543504778
+  POINT  573  -8.909628446845817  12.63950157787882
+  POINT  574  -9.96979275554061  12.62200835043421
+  POINT  575  -10.5192284477842  11.71182555571344
+  POINT  576  -9.962058778017163  10.82432828698728
+  POINT  577  -8.928708664683143  10.78410142835729
+  POINT  578  -8.826724490159041  19.9115345212223
+  POINT  579  -7.788049595360713  19.92284393906273
+  POINT  580  -8.326673162463226  19.01049914571327
+  POINT  581  6.796923008359899  14.46893104772356
+  POINT  582  5.758685968348203  14.47457989609917
+  POINT  583  7.331484508515757  13.55426320744392
+  POINT  584  7.842526297326634  14.46604282885744
+  POINT  585  3.183665335263674  17.16821321585526
+  POINT  586  3.688660309630354  18.14224948377619
+  POINT  587  2.676212803311897  18.08657678214764
+  POINT  588  5.226436037298559  17.21789324488178
+  POINT  589  4.713801779364758  16.30794714168605
+  POINT  590  1.702834415187505  17.9614070963485
+  POINT  591  2.207829389554186  18.93544336426943
+  POINT  592  9.410254775410465e-08  18.81027366105638
+  POINT  593  0.6172255007148968  19.40513683923515
+  POINT  594  -9.714117030543257  27.14602202785425
+  POINT  595  -10.74401846579198  27.10759225834228
+  POINT  596  -10.26601121841064  26.20720376458829
+  POINT  597  -15.19792430940091  31.58463475974873
+  POINT  598  -14.51995414837362  32.42407660952124
+  POINT  599  -15.55919105425835  32.56628720680114
+  POINT  600  -13.5787847899452  32.30652306297098
+  POINT  601  -13.91739051255635  33.26987333692369
+  POINT  602  -13.68943052768649  30.59673119233732
+  POINT  603  -13.11784158395992  31.51940311662963
+  POINT  604  -12.62592368588394  30.65540797339841
+  POINT  605  -18.10341288837137  21.84121234606356
+  POINT  606  -18.87127590553306  22.47222715848427
+  POINT  607  -17.12463310060343  18.09656294225589
+  POINT  608  -17.31694470247984  17.15083220035995
+  POINT  609  -16.9703546319652  16.19013707736997
+  POINT  610  -15.98883180712904  16.20798256081918
+  POINT  611  10.38199647148354  22.61371976810885
+  POINT  612  9.849540679822894  21.7138881677267
+  POINT  613  8.8085350316233  21.72280092159405
+  POINT  614  9.329107093393057  20.81496657605682
+  POINT  615  8.9287090372967  10.78409883706605
+  POINT  616  9.962058430246611  10.82432580169985
+  POINT  617  9.448597593195121  9.88079938186117
+  POINT  618  9.969792986625455  12.62200682338526
+  POINT  619  8.90962883591534  12.63950012274126
+  POINT  620  9.437251948192607  13.5338816892218
+  POINT  621  10.67234141492057  4.14015762808947
+  POINT  622  9.899143945874886  3.622737177952356
+  POINT  623  11.12308967028839  3.378421352424517
+  POINT  624  10.05434271335534  5.157341501088084
+  POINT  625  11.26624724302613  4.931019061942361
+  POINT  626  11.04685146630943  12.60620519964597
+  POINT  627  12.11322047313526  12.57558645323589
+  POINT  628  11.56378510572855  13.48576964345572
+  POINT  629  10.51922835403217  11.71182363316543
+  POINT  630  11.03911690993059  10.80852417796056
+  POINT  631  8.353117771266421  15.36645081786232
+  POINT  632  8.887679271422279  14.45178297758268
+  POINT  633  9.947843422132394  14.43428967822668
+  POINT  634  -7.354534566620368  9.865368360421384
+  POINT  635  -6.821148794732007  8.960322383687922
+  POINT  636  -5.241808196453412  9.89286263766502
+  POINT  637  -5.768321098655418  10.8109113925901
+  POINT  638  -4.716307833929465  10.81361299428714
+  POINT  639  -8.846687175134175  18.09453634019771
+  POINT  640  -7.808012280335847  18.10584575803814
+  POINT  641  -7.292392561451639  17.20089190904147
+  POINT  642  -6.77237854878069  18.11685471455703
+  POINT  643  -3.663850057285723  10.82236267206403
+  POINT  644  -2.609574443921612  10.83288750674358
+  POINT  645  -3.135519318363349  9.906089074041617
+  POINT  646  -4.190362959487728  11.74041142698911
+  POINT  647  1.022235278187542  6.105131945364167
+  POINT  648  1.537413456757289  7.078319240970639
+  POINT  649  0.5151765885688294  7.052715105123196
+  POINT  650  2.577937928342901  7.096153011320037
+  POINT  651  2.070879238724189  8.043736171079065
+  POINT  652  3.092619808349037  6.17939491294298
+  POINT  653  3.626085590315936  7.144811843051406
+  POINT  654  11.48251188829295  35.02401731321491
+  POINT  655  10.64039816452791  34.61217235404054
+  POINT  656  10.17110341744214  33.75754315009095
+  POINT  657  14.6689103389384  22.67322577662324
+  POINT  658  14.05319959738808  21.7410710783964
+  POINT  659  15.14265836363845  21.78642172193218
+  POINT  660  13.01772434463638  21.71937825377518
+  POINT  661  12.50723794880099  22.61679607802062
+  POINT  662  18.09519862717962  19.95611146231709
+  POINT  663  19.1740485049595  20.44527447993038
+  POINT  664  19.11595980806804  21.52156423697686
+  POINT  665  19.97093453194041  21.0778563218991
+  POINT  666  16.26820018552503  25.3010316807035
+  POINT  667  17.20417075684983  25.40139698246272
+  POINT  668  16.34859018777993  26.20978847968642
+  POINT  669  18.10513372405381  25.23404605383805
+  POINT  670  18.34437302491627  24.32069547942606
+  POINT  671  19.34729683337535  25.06775162939346
+  POINT  672  15.85270720624401  27.09338928485154
+  POINT  673  16.78867777756881  27.19375458661076
+  POINT  674  15.291938186953  28.00781064238943
+  POINT  675  17.30476560650833  28.05418410949204
+  POINT  676  16.82978442287303  28.99839439914488
+  POINT  677  17.8667222480114  28.98778277049785
+  POINT  678  11.90568276733603  25.26641722612537
+  POINT  679  12.94362175678668  25.24019557197247
+  POINT  680  12.33385311172404  26.14255336301493
+  POINT  681  13.04745149254336  23.49596728408519
+  POINT  682  11.97523786865631  23.48488822901835
+  POINT  683  13.26157019599279  27.94640762414275
+  POINT  684  12.80192545764358  27.03544053207227
+  POINT  685  11.76398646819293  27.06166218622517
+  POINT  686  12.71478625639084  28.84364548586147
+  POINT  687  13.74429763827116  28.8355037547217
+  POINT  688  11.6871942678587  28.89644654626223
+  POINT  689  12.16992171013707  29.78554267684118
+  POINT  690  -2.645241319283594  23.65915467021994
+  POINT  691  -2.171873771957271  22.80696352912885
+  POINT  692  -1.671396963511793  23.78707299861202
+  POINT  693  -3.638150958880634  21.77295984420368
+  POINT  694  -4.169619601589666  22.67588242311962
+  POINT  695  -4.662052432741228  21.76979706658653
+  POINT  696  -2.588325360715464  21.77484192911209
+  POINT  697  -3.080758191867026  20.868756572579
+  POINT  698  -3.465390409600786  36.74515601536355
+  POINT  699  -4.39944145231441  36.56941420393424
+  POINT  700  -6.438967484949353  38.07148150975368
+  POINT  701  -5.801761824463367  37.27840372561251
+  POINT  702  -7.465007651281466  37.67899578164534
+  POINT  703  -7.145548671869747  38.67996608706892
+  POINT  704  1.645701561067675  36.58620616945915
+  POINT  705  2.097605922649433  37.6591520210071
+  POINT  706  1.630912530570906  38.7025770899849
+  POINT  707  0.6144262348982835  38.03413825350503
+  POINT  708  0.6145007137649187  36.62602437274583
+  POINT  709  1.03123486124828  35.70349538136442
+  POINT  710  3.50029065404008  34.71485867238029
+  POINT  711  4.030903182455804  33.71986523468118
+  POINT  712  2.549220124316628  34.70633644192217
+  POINT  713  5.09669004529192  31.88416738089897
+  POINT  714  4.59189732499495  30.94579415206534
+  POINT  715  4.543156123115856  32.76980086916907
+  POINT  716  3.548257480742272  32.79893134025448
+  POINT  717  3.041784030297622  31.8775360658333
+  POINT  718  2.529531089637571  32.8276004313454
+  POINT  719  6.639239149600429  29.07614732768379
+  POINT  720  5.633088140941368  29.09870269116678
+  POINT  721  -5.741117900464612  18.12804558230707
+  POINT  722  -4.710794713134181  18.134038227614
+  POINT  723  -6.25673761934882  19.03299943130374
+  POINT  724  9.094364861792316  3.185783391206454
+  POINT  725  8.120154810382525  3.065542696161892
+  POINT  726  8.486226833839986  4.246239372190631
+  POINT  727  9.543080762382589  2.423606448705923
+  POINT  728  4.181697363812684  8.041699532502184
+  POINT  729  4.69637924381882  7.124941434125128
+  POINT  730  4.720893497007972  8.958696437146365
+  POINT  731  3.650599843505089  8.978566846072644
+  POINT  732  5.772906862056196  8.955994301021946
+  POINT  733  5.241809341748601  9.892861614592405
+  POINT  734  6.300233792796178  8.026154643550692
+  POINT  735  6.622836074707541  2.05014634703189
+  POINT  736  5.718844002281117  1.755757914971069
+  POINT  737  6.192965581434661  0.9829766219365916
+  POINT  738  5.664301131002254  3.628351178339397
+  POINT  739  6.833866176424866  3.46371406014724
+  POINT  740  6.342451737007583  4.290635795338225
+  POINT  741  7.442004204377196  2.403258079163064
+  POINT  742  7.917003402974732  1.633697762640239
+  POINT  743  8.94127268867317  5.267193691042839
+  POINT  744  7.96706263726338  5.146952995998276
+  POINT  745  9.535178516778736  6.058055124895729
+  POINT  746  -13.10928490082518  34.07016086758892
+  POINT  747  -12.24388551710086  34.4147639590643
+  POINT  748  -12.49585729120814  35.61581090418589
+  POINT  749  -14.07322716081642  34.21070994911054
+  POINT  750  -14.36136978693606  10.72072627767335
+  POINT  751  -14.88062444253561  11.58118583581166
+  POINT  752  -14.26663781292847  12.50471088888409
+  POINT  753  -13.22961531762352  10.76268243082563
+  POINT  754  -13.2079352618582  12.53633569326509
+  POINT  755  -12.6910018313468  11.65677153517575
+  POINT  756  15.07065410043878  18.08797196826217
+  POINT  757  14.01205198450469  18.07820806245078
+  POINT  758  -6.796922393156049  14.4689317302459
+  POINT  759  -6.269727250030074  15.38636001982073
+  POINT  760  -5.758685342348371  14.47458053337772
+  POINT  761  -7.817995296922273  16.28529708460574
+  POINT  762  -8.353117303969567  15.36645138459855
+  POINT  763  -8.863148300054089  16.27103725251539
+  POINT  764  -7.842525768612235  14.46604360030338
+  POINT  765  -7.331483860930532  13.55426411386037
+  POINT  766  -6.782361565367118  16.29630604112463
+  POINT  767  -3.683558631825044  14.45370591664109
+  POINT  768  -4.714727414587884  14.47325408116177
+  POINT  769  -5.24192255771386  13.55582579158695
+  POINT  770  -4.720392683042421  12.64308054429161
+  POINT  771  -5.764350610802907  12.64440699650756
+  POINT  772  -3.667934906398679  12.6518302220685
+  POINT  773  -8.395897107966746  11.71956985286866
+  POINT  774  -7.863355897507648  12.63144425890769
+  POINT  775  -6.817752522051462  12.63433238885021
+  POINT  776  -6.296222647380024  11.72158714155488
+  POINT  777  -6.821723009903972  10.80083678493275
+  POINT  778  -7.882436115344974  10.77604410938616
+  POINT  779  4.716308849678887  10.81361234423387
+  POINT  780  5.76832221472711  10.81091020810945
+  POINT  781  4.190363830521503  11.74041081086773
+  POINT  782  3.663850957542993  10.82236221735069
+  POINT  783  1.564857731194123  14.49716655277795
+  POINT  784  1.04410790663793  13.59158434318418
+  POINT  785  0.5207500976712671  14.50289465153176
+  POINT  786  1.565386117813491  12.67566398686721
+  POINT  787  0.5212784842906355  12.68139208562102
+  POINT  788  2.613060739273198  12.66750846420746
+  POINT  789  2.090231316925903  11.7573162066443
+  POINT  790  2.247276054134772e-07  15.40847690902769
+  POINT  791  -0.5207495998285867  14.50289469943392
+  POINT  792  -11.21209063177709  28.0004787204091
+  POINT  793  -11.76398481964448  27.06166045714313
+  POINT  794  -13.26156901870596  27.94640451622695
+  POINT  795  -12.71478480762005  28.84364148415803
+  POINT  796  -13.74429684069641  28.83549908117502
+  POINT  797  -12.16991936167931  29.78553808233906
+  POINT  798  -11.59833041795275  30.70821000663137
+  POINT  799  -10.66722518583636  28.94237531859013
+  POINT  800  -10.16307824785739  29.92216165396643
+  POINT  801  -9.687977339945633  29.02619685698455
+  POINT  802  -11.68719153968886  28.89644351739098
+  POINT  803  -10.66517999954061  30.87364895036685
+  POINT  804  -9.685932153649887  30.95747048876127
+  POINT  805  -16.82978847880473  28.99838541372564
+  POINT  806  -17.30476813190573  28.05417686774796
+  POINT  807  -17.86672715494531  28.98777290369169
+  POINT  808  -12.80192396054655  27.03543843675622
+  POINT  809  -12.33385179456144  26.1425519746894
+  POINT  810  -13.83143599362291  27.02729603377322
+  POINT  811  -18.71184747782762  23.47031202987638
+  POINT  812  -19.74963048996175  23.15469430712368
+  POINT  813  -19.34729785953139  25.06774765708812
+  POINT  814  -18.34437302460557  24.32069263403202
+  POINT  815  -18.10513422474459  25.23404206079518
+  POINT  816  -17.49125461230818  23.64225669394841
+  POINT  817  7.817995757395382  16.28529666142913
+  POINT  818  7.292392975317489  17.20089161300046
+  POINT  819  7.80801268720816  18.10584554161538
+  POINT  820  6.772378944905659  18.11685450089467
+  POINT  821  8.863148731491028  16.27103681015437
+  POINT  822  1.015466424403581  21.25999439681868
+  POINT  823  1.614481163449325  21.90276020009269
+  POINT  824  1.015466375681423  20.43531928751171
+  POINT  825  1.63269187639632  19.84045612674685
+  POINT  826  2.606070264520712  19.96562581254599
+  POINT  827  4.710795072138549  18.13403803354307
+  POINT  828  4.203342540186773  19.05240159983545
+  POINT  829  5.741118267854977  18.12804536094104
+  POINT  830  6.25673797974565  19.03299928955596
+  POINT  831  8.29058057434478  22.63591511879024
+  POINT  832  7.770146987914942  21.73699352712036
+  POINT  833  7.761488015053925  23.54966519059946
+  POINT  834  8.799876058762283  23.53547258507314
+  POINT  835  7.882436851035273  10.77604170622064
+  POINT  836  6.821724104311079  10.80083523684094
+  POINT  837  8.395897688086761  11.71956812605931
+  POINT  838  6.296223612241364  11.72158596648241
+  POINT  839  7.863356649653912  12.63144299189585
+  POINT  840  6.817753360687178  12.63433121076197
+  POINT  841  5.764351471103209  12.64440618203048
+  POINT  842  15.41658924936081  7.259168960497591
+  POINT  843  14.24561038678537  7.342548392480751
+  POINT  844  14.89244912969332  8.12523258985544
+  POINT  845  12.07551877984602  9.034284548463294
+  POINT  846  13.2074318313694  9.050012371808604
+  POINT  847  12.60943811820144  8.176454016117848
+  POINT  848  12.13489966336506  10.8019324567901
+  POINT  849  11.57772973957951  9.91443462532451
+  POINT  850  10.97973602641154  9.040876269633753
+  POINT  851  11.96631097541835  7.35863242591423
+  POINT  852  11.55167271280977  6.252370796998449
+  POINT  853  11.06288680406948  7.054464563856754
+  POINT  854  12.169671414375  5.235186923999835
+  POINT  855  12.88604184172865  5.817407070591241
+  POINT  856  12.61406020569684  4.479514007912766
+  POINT  857  13.09822402694172  7.374360249259541
+  POINT  858  13.60248324400228  6.524726802277135
+  POINT  859  14.05124229732068  5.767551513356759
+  POINT  860  17.07578521456617  11.60014693753975
+  POINT  861  17.71057756929273  10.70831332876806
+  POINT  862  16.58566833102513  10.66595132007714
+  POINT  863  16.40667132100974  12.44593062352206
+  POINT  864  15.79268502556732  13.36945619674464
+  POINT  865  15.36154529735113  12.46837529147962
+  POINT  866  17.18577703109811  14.27791621091107
+  POINT  867  17.8991747362448  13.49160449707131
+  POINT  868  17.50692494278236  12.50122784280477
+  POINT  869  18.59468174703889  12.63536765117651
+  POINT  870  -5.772905779136106  8.955995570716897
+  POINT  871  -6.300233112688748  8.02615691843684
+  POINT  872  -4.720892514410153  8.958697172413938
+  POINT  873  -2.562097267089574  3.227805457117126
+  POINT  874  -2.034944989672938  4.189368100531676
+  POINT  875  -0.5151786281004135  7.052714909961791
+  POINT  876  -4.495306666907339e-07  8.025902205568261
+  POINT  877  -0.5151778044490922  8.96843130178743
+  POINT  878  -1.555799685599574  8.971257959564014
+  POINT  879  -1.040621823848756  9.913787250944587
+  POINT  880  0.5151774122201507  8.968431496948837
+  POINT  881  2.806199940197374e-07  11.76547179125803
+  POINT  882  -0.5212779305555666  12.681392147575
+  POINT  883  -2.090230658535098  11.75731647898901
+  POINT  884  -1.561899919612723  10.84104288096659
+  POINT  885  -0.5212780384622415  10.83821622319001
+  POINT  886  0.5212783763839607  10.83821616123602
+  POINT  887  -8.95781830977193  7.046847428450418
+  POINT  888  -9.535179298628961  6.058061838123082
+  POINT  889  -7.885292789837587  7.099198168742546
+  POINT  890  -6.342458718450149  4.290639218573956
+  POINT  891  -5.664307592746104  3.628355267241409
+  POINT  892  -6.833874189380248  3.463718914397889
+  POINT  893  -4.115213411606943  4.361615670969387
+  POINT  894  -4.656830149629152  5.341664562613124
+  POINT  895  -3.599151439420091  5.248004662165036
+  POINT  896  -7.4420232035393  2.403268237260354
+  POINT  897  -7.917037371317474  1.633712477540171
+  POINT  898  -8.120174329243344  3.065552188592901
+  POINT  899  0.5061739145443324  5.095155188591381
+  POINT  900  -2.929429205988932e-06  4.110781499104045
+  POINT  901  -0.5061784339744557  5.09515412002939
+  POINT  902  1.528410782732792  5.120759324438823
+  POINT  903  0.5061724875148098  3.087534852556564
+  POINT  904  1.539499732754256  3.149220199566127
+  POINT  905  11.64987528159459  32.70981082487776
+  POINT  906  12.51527678005581  32.36521402236142
+  POINT  907  12.11081476394826  33.49693513307348
+  POINT  908  12.62592549818568  30.65541566530306
+  POINT  909  11.59833350965353  30.70821672570382
+  POINT  910  14.07320338353421  34.21073365839178
+  POINT  911  13.10926757404889  34.07018328539174
+  POINT  912  13.91737880453094  33.26989288698078
+  POINT  913  12.24386607558766  34.41478008790807
+  POINT  914  12.49582536742833  35.61583656588377
+  POINT  915  14.16603325158087  23.49720392336359
+  POINT  916  15.25549201783124  23.54255456689937
+  POINT  917  15.93819784253432  24.42958644855976
+  POINT  918  15.08261727346442  25.23797794578346
+  POINT  919  16.44107492989185  23.60560830181941
+  POINT  920  13.63403317143619  24.36529607436132
+  POINT  921  14.0622035158242  25.24143221125088
+  POINT  922  16.13661120818988  21.79829183825163
+  POINT  923  15.52090046663956  20.86613714002479
+  POINT  924  16.09556213763715  19.95056877865242
+  POINT  925  17.17857677781561  19.94984061055883
+  POINT  926  16.75928560426177  19.02240213286701
+  POINT  927  17.431475160555  20.8842781081025
+  POINT  928  18.71184721732612  23.47031396269385
+  POINT  929  18.87127587281586  22.47222833205418
+  POINT  930  19.74963016806416  23.15469636218577
+  POINT  931  17.49125494700478  23.6422586667476
+  POINT  932  18.10341307466681  21.84121305493807
+  POINT  933  16.8085491223017  22.75522678508721
+  POINT  934  17.18679122530281  21.83494220317982
+  POINT  935  14.51994297887854  32.4240927325463
+  POINT  936  13.57878043675709  32.30653817612266
+  POINT  937  13.11784095440342  31.51941386792693
+  POINT  938  13.68942915488696  30.59673981906429
+  POINT  939  11.44016434034826  24.38232842674731
+  POINT  940  10.89995079660589  23.50315722068274
+  POINT  941  10.83039569528561  25.28468621778976
+  POINT  942  9.846922943175489  23.51115996583782
+  POINT  943  9.317830383884633  24.42491003764703
+  POINT  944  9.800494196258793  25.32311557173736
+  POINT  945  8.753447311845587  25.34742819097269
+  POINT  946  10.26601262324656  26.20720437111542
+  POINT  947  -9.188516399988456  28.09611515482773
+  POINT  948  -8.684369462009494  29.07590149020404
+  POINT  949  -8.710509152607116  27.19572666107374
+  POINT  950  -4.967007708624748  35.55401033082136
+  POINT  951  -5.401876338967484  36.44269225860205
+  POINT  952  -6.369328080773704  36.26299985249962
+  POINT  953  -8.644059727746285  34.74088988879614
+  POINT  954  -9.113357089394702  35.59551543427815
+  POINT  955  -7.680217086741342  34.8114162753276
+  POINT  956  -8.132953504798678  33.74408230964664
+  POINT  957  -9.038370913869775  36.59719108141323
+  POINT  958  -7.080382952483385  35.61775611998313
+  POINT  959  -6.569276729535778  34.62094854083364
+  POINT  960  -7.480268437979268  36.45346758699358
+  POINT  961  -8.176062522991147  37.03375204912885
+  POINT  962  -9.033664824607252  37.8435674405669
+  POINT  963  -3.013509432387965  35.67217382596145
+  POINT  964  -2.514327020017076  36.73659756517147
+  POINT  965  -1.031206014429366  35.70346448021024
+  POINT  966  -1.53422388422784  34.73877849312591
+  POINT  967  -0.5029838558529507  34.77862759756677
+  POINT  968  2.021011022720923  33.78146904341516
+  POINT  969  1.514537572276274  32.86007376899397
+  POINT  970  1.534226606955332  34.73880977957074
+  POINT  971  0.5030257596525753  34.77862798285742
+  POINT  972  7.889854101383875e-06  33.81394199577308
+  POINT  973  1.536896992374578  27.28673102869031
+  POINT  974  2.075897760470205  26.39023244060897
+  POINT  975  2.583954155543661  27.30113813950133
+  POINT  976  3.556816059688512  30.9375844125214
+  POINT  977  4.088202963281139  30.03451158984436
+  POINT  978  2.538089668583811  30.96625350361232
+  POINT  979  0.5030096425456565  32.87005276973701
+  POINT  980  -0.5029999729598695  32.87005238444636
+  POINT  981  1.011529709462303  31.91618415766725
+  POINT  982  11.21209270722683  28.00048045890696
+  POINT  983  10.74402036130729  27.10759328984962
+  POINT  984  9.714118862280475  27.14602264379722
+  POINT  985  10.66722816097306  28.94237764988668
+  POINT  986  9.687978884244082  29.02619593691772
+  POINT  987  10.16308044487594  29.92216202427299
+  POINT  988  7.660247523983134  29.07171418485961
+  POINT  989  8.684369985103768  29.07589903930046
+  POINT  990  7.163900427677865  28.15025091012108
+  POINT  991  9.188517701200887  28.09611466491416
+  POINT  992  8.710509963140158  27.19572574617996
+  POINT  993  -4.203342243390184  19.05240175014947
+  POINT  994  -3.688659985491623  18.14224967870969
+  POINT  995  -3.655895652889911  19.96374384445787
+  POINT  996  -4.678030380532469  19.95553239336218
+  POINT  997  -2.207829164486162  18.93544342244381
+  POINT  998  -2.606070054724741  19.96562592936628
+  POINT  999  -5.170740868433548  20.8574752560983
+  POINT  1000  -5.702209511142579  21.76039783501424
+  POINT  1001  -5.71818745893382  19.94613316178989
+  POINT  1002  -6.731544945060238  21.74909188831638
+  POINT  1003  -6.222856509367919  22.66141369880462
+  POINT  1004  -7.249499434945713  20.83597766954888
+  POINT  1005  -7.770146433171051  21.73699353333926
+  POINT  1006  -6.749448107249898  19.93494229403985
+  POINT  1007  5.802524977371679  7.067405929156367
+  POINT  1008  6.85076775285229  7.071731449131153
+  POINT  1009  7.387583714762178  6.140445024793657
+  POINT  1010  7.885292530186677  7.099193739187982
+  POINT  1011  5.762972814506381  5.284127824133605
+  POINT  1012  5.246913203874932  6.170518239705588
+  POINT  1013  4.656827080953521  5.341663329102365
+  POINT  1014  6.932537859928994  5.119490705941448
+  POINT  1015  5.123453405055713  2.630543796725044
+  POINT  1016  4.686581836917295  1.584872268547702
+  POINT  1017  3.780741176469697  1.381516026850165
+  POINT  1018  4.380854250247183  0.4856945617800922
+  POINT  1019  3.07892064305541  2.323657990883948
+  POINT  1020  4.632038965638431  3.457465531916029
+  POINT  1021  8.957817564431407  7.046841938024162
+  POINT  1022  8.421001602521519  7.978128362361659
+  POINT  1023  8.954387418505732  8.883174489212605
+  POINT  1024  10.48552585172216  8.043251376985188
+  POINT  1025  10.07088758911358  6.936989748069407
+  POINT  1026  9.98773681145564  8.923401453846404
+  POINT  1027  14.14927330494213  14.3319204116199
+  POINT  1028  13.09057086026495  14.36354542779163
+  POINT  1029  13.68885655723154  13.42352588087392
+  POINT  1030  14.5608425845304  15.25822614311025
+  POINT  1031  15.01786739893976  16.19866298162331
+  POINT  1032  14.0080124223849  16.21237679705068
+  POINT  1033  15.15912828149698  14.31820659619254
+  POINT  1034  16.20425430515559  14.29576192823498
+  POINT  1035  16.55222028702778  15.22666661035897
+  POINT  1036  15.43600191484122  17.16213210717993
+  POINT  1037  16.04161877848574  18.09729043987835
+  POINT  1038  17.12463341866421  18.09656227178477
+  POINT  1039  17.31694506141086  17.15083111331099
+  POINT  1040  15.98883207698672  16.2079814532395
+  POINT  1041  16.97035480292924  16.19013573591558
+  POINT  1042  -9.329106518265187  20.81496648779522
+  POINT  1043  -9.8677300853677  19.90262169444576
+  POINT  1044  -16.0416184259235  18.09729104090766
+  POINT  1045  -16.75928532981814  19.02240250148187
+  POINT  1046  -10.94364637205534  16.23848947462534
+  POINT  1047  -9.899040221872481  16.25867329662998
+  POINT  1048  -9.363918214825187  17.17751899663717
+  POINT  1049  -9.882579096952568  18.0821723843123
+  POINT  1050  1.561900414029895  10.8410427689158
+  POINT  1051  2.609575035489602  10.83288724625605
+  POINT  1052  1.04062209494766  9.913787200847779
+  POINT  1053  3.135520054646986  9.906088779622188
+  POINT  1054  2.596323921451698  8.989091874978008
+  POINT  1055  1.555799449866085  8.97125810462861
+  POINT  1056  5.241923253953617  13.55582514043971
+  POINT  1057  4.714728002752798  14.47325361022883
+  POINT  1058  3.143090414259499  13.57017754949987
+  POINT  1059  3.667935613371911  12.65182976927697
+  POINT  1060  4.720393505507803  12.64307989616015
+  POINT  1061  2.105326509092408  15.38069455968688
+  POINT  1062  2.670185462451287  16.23272638623747
+  POINT  1063  1.606358875586338  16.26050868767612
+  POINT  1064  2.628684318059071  14.4693842513393
+  POINT  1065  3.683559192157784  14.45370555640881
+  POINT  1066  4.200321906552371  15.37246031206826
+  POINT  1067  3.682632968769743  16.28839908786602
+  POINT  1068  -1.606358493039556  16.26050877577584
+  POINT  1069  -2.670185073501789  16.23272654426651
+  POINT  1070  -2.105326053234482  15.38069472542052
+  POINT  1071  -3.183664984271242  17.16821337539803
+  POINT  1072  -2.676212514527244  18.08657689793349
+  POINT  1073  -1.70283416326578  17.96140711913215
+  POINT  1074  0.6172255840106643  18.01551021964674
+  POINT  1075  -0.6172253233165815  18.01551020223283
+  POINT  1076  -1.085608673357664  17.16664367772251
+  POINT  1077  -0.5207496530903567  16.31461185887652
+  POINT  1078  0.5207500444094971  16.31461181097436
+  POINT  1079  1.085608997768376  17.16664363752495
+  POINT  1080  -16.26819960626571  25.30102864423684
+  POINT  1081  -15.0826163587443  25.23797552751852
+  POINT  1082  -15.93819691156472  24.42958418138574
+  POINT  1083  -15.85270768406584  27.0933844772987
+  POINT  1084  -14.85185005261381  27.02384105180678
+  POINT  1085  -15.29193868323435  28.00780553873586
+  POINT  1086  -14.3922049944544  26.11287497233606
+  POINT  1087  -14.06220229975341  25.24143050948495
+  POINT  1088  -15.7999041554007  28.93948960494379
+  POINT  1089  -16.33689631951905  29.86052605444166
+  POINT  1090  -14.74418021093874  30.63117829061417
+  POINT  1091  -15.76075609457718  30.75508671479437
+  POINT  1092  -16.81445339648837  30.82931935765637
+  POINT  1093  -14.25226231286276  29.76718314738296
+  POINT  1094  -14.79904652394867  28.86994617945188
+  POINT  1095  8.846687614423065  18.09453615000725
+  POINT  1096  8.326673584011235  19.01049903790145
+  POINT  1097  8.8267249782098  19.91153448810875
+  POINT  1098  9.867730626409395  19.90262173424139
+  POINT  1099  7.788050050994897  19.92284387971688
+  POINT  1100  4.650398721048944  25.41533314105567
+  POINT  1101  4.13553988625797  26.36549811509552
+  POINT  1102  3.637813758430262  25.45447457738014
+  POINT  1103  3.148718616325014  24.57178682998195
+  POINT  1104  2.633859781534041  25.52195180402179
+  POINT  1105  1.586802618364957  25.50754469321078
+  POINT  1106  3.649195445762174  23.59167733893057
+  POINT  1107  4.169619811571008  22.67588222314829
+  POINT  1108  4.673096959030069  23.58851448755802
+  POINT  1109  2.58832552483298  21.77484182477213
+  POINT  1110  2.171873936919459  22.8069634498414
+  POINT  1111  2.645241468865954  23.65915456557222
+  POINT  1112  1.671397107482298  23.78707294089278
+  POINT  1113  4.678030658177207  19.95553223402469
+  POINT  1114  3.655895895669011  19.96374368425781
+  POINT  1115  3.638151155981279  21.77295969648394
+  POINT  1116  4.662052669249173  21.76979684511139
+  POINT  1117  3.080758382511145  20.86875644673523
+  POINT  1118  6.731545438466698  21.74909183518711
+  POINT  1119  7.249499895745219  20.83597763799092
+  POINT  1120  6.749448501546653  19.93494218778363
+  POINT  1121  5.718187824495971  19.94613304783
+  POINT  1122  5.702209835567938  21.7603976589167
+  POINT  1123  6.222856927737663  22.66141354804614
+  POINT  1124  5.17074117997821  20.85747513225235
+  POINT  1125  14.88062362045075  11.58118328295605
+  POINT  1126  14.26663732500833  12.50470885617862
+  POINT  1127  13.20793488033116  12.53633387235034
+  POINT  1128  12.69100124091205  11.65676942854059
+  POINT  1129  13.22961407056096  10.76267987590455
+  POINT  1130  -4.181696757246904  8.041699829461468
+  POINT  1131  -3.650599174564211  8.978566896409593
+  POINT  1132  -3.626085797421631  7.144811553632946
+  POINT  1133  -4.696379137267573  7.124941829637294
+  POINT  1134  -2.5963235612001  8.989091731089145
+  POINT  1135  -2.070879541800435  8.043735781931989
+  POINT  1136  -3.574367948496355  3.363807242843679
+  POINT  1137  -3.078930514188047  2.323656929439507
+  POINT  1138  -5.123462129635516  2.630546839115701
+  POINT  1139  -4.686602709596436  1.584876903295025
+  POINT  1140  -4.632046658705416  3.457467143291768
+  POINT  1141  -3.780758206397734  1.381518432692542
+  POINT  1142  -4.380882064820396  0.4857008521467929
+  POINT  1143  -1.537414964648728  7.078318112167635
+  POINT  1144  -1.022237926549232  6.10513101172257
+  POINT  1145  -2.551004482247714  5.199344992224856
+  POINT  1146  -3.092621220269923  6.179393883868594
+  POINT  1147  -2.577938840249254  7.096151883692768
+  POINT  1148  -1.52841477052277  5.120757322235234
+  POINT  1149  -1.565385542453618  12.67566417103727
+  POINT  1150  -1.044107338782977  13.59158446540026
+  POINT  1151  -1.564857211726638  14.49716672289619
+  POINT  1152  -2.628683792188871  14.46938449138686
+  POINT  1153  -2.613060066762507  12.66750879681426
+  POINT  1154  -3.143089790317201  13.57017791411676
+  POINT  1155  -8.941278766903849  5.267200605438743
+  POINT  1156  -8.486236698750734  4.246245735265347
+  POINT  1157  -7.96706738323741  5.146957735903831
+  POINT  1158  -9.094385712909785  3.185795058127813
+  POINT  1159  -9.899165223866994  3.622750914152373
+  POINT  1160  -9.543111594457244  2.423623277029117
+  POINT  1161  -10.05434861414229  5.157349837484599
+  POINT  1162  -10.67235893022354  4.140170700800017
+  POINT  1163  -11.12311705597741  3.378439779022869
+  POINT  1164  -7.38758492759221  6.140449119392674
+  POINT  1165  -6.932542859439094  5.119494249219278
+  POINT  1166  -5.762976262804949  5.284130602062798
+  POINT  1167  -6.850768266039271  7.071734682057993
+  POINT  1168  -5.80252525044337  7.067407869086968
+  POINT  1169  -5.246914290618097  6.170519593258447
+  POINT  1170  10.71672358375953  32.87524392735796
+  POINT  1171  9.642413735714634  32.79125514185909
+  POINT  1172  11.12118559986708  31.74352281664589
+  POINT  1173  9.15793076534775  31.87228668931375
+  POINT  1174  9.685932535089496  30.95746811521505
+  POINT  1175  10.66518181181848  30.87364982818402
+  POINT  1176  15.19791671718209  31.58464847548497
+  POINT  1177  15.55917637400988  32.56630552600364
+  POINT  1178  15.79990214283926  28.93949698650302
+  POINT  1179  16.3368917696794  29.86053599387202
+  POINT  1180  15.76074915645257  30.75509875525596
+  POINT  1181  16.81444462265249  30.82933310971594
+  POINT  1182  14.74417705037517  30.63118830145916
+  POINT  1183  14.25226159415743  29.76719009883528
+  POINT  1184  14.79904553375937  28.86995223711657
+  POINT  1185  -7.660247595099477  29.07171642334552
+  POINT  1186  -8.159708535056653  30.00179812550234
+  POINT  1187  -6.639239694273195  29.0761486788626
+  POINT  1188  -7.163900621226036  28.1502520435643
+  POINT  1189  -5.497622619491922  34.55901436086761
+  POINT  1190  -4.49518773283885  34.6857363061998
+  POINT  1191  -5.579336478117359  32.80510559052856
+  POINT  1192  -6.09745675374988  33.75267451621208
+  POINT  1193  -6.650990588161214  32.86703977049458
+  POINT  1194  -5.700404689242956  23.58012241603744
+  POINT  1195  -6.729740123160614  23.56881646933958
+  POINT  1196  -7.239035482595526  24.46837386823964
+  POINT  1197  -7.761487302720488  23.54966515100682
+  POINT  1198  -7.691207402098477  27.22632931678663
+  POINT  1199  -6.670199501272196  27.23076157230372
+  POINT  1200  -6.172815514826199  26.31659798520196
+  POINT  1201  -5.645508733953759  27.24052071197963
+  POINT  1202  -8.216808032653276  26.27623618981316
+  POINT  1203  -6.702397292590144  25.39718201604923
+  POINT  1204  -5.677706525271708  25.40694115572514
+  POINT  1205  -7.734144472150017  25.37803069771646
+  POINT  1206  -8.753446222658658  25.34742804200357
+  POINT  1207  -1.645698721915378  36.58607539347716
+  POINT  1208  -2.0975796991282  37.65905758287926
+  POINT  1209  -1.630935113652335  38.70247408973233
+  POINT  1210  -0.6145331724071246  38.03403837867723
+  POINT  1211  -0.6144586935404894  36.62592449791802
+  POINT  1212  8.00627890595873e-06  37.50863528601275
+  POINT  1213  0.5990148214488246  23.75062706100676
+  POINT  1214  -0.5990146744118122  23.75062707718625
+  POINT  1215  -1.072382221738135  24.60281821827733
+  POINT  1216  1.072382353395319  24.60281817673758
+  POINT  1217  0.5144203323314835  25.47109881332476
+  POINT  1218  3.58444379142495  29.11804267687441
+  POINT  1219  3.080359636161616  28.20371011551553
+  POINT  1220  2.549037542711368  29.11196928894155
+  POINT  1221  3.619360404257244  27.30721152743419
+  POINT  1222  5.129328969085179  28.18223377819683
+  POINT  1223  4.619525056731388  29.12625241641835
+  POINT  1224  4.631945366875925  27.26807009110972
+  POINT  1225  5.645508451085906  27.24052036585816
+  POINT  1226  2.034499539717892  30.03893177661523
+  POINT  1227  1.530415384454558  29.12459921525634
+  POINT  1228  1.519467510327002  30.97888342992712
+  POINT  1229  0.5079395805963843  30.98886243067015
+  POINT  1230  3.57436036144565  3.363808001711532
+  POINT  1231  4.115208087392189  4.361615383325885
+  POINT  1232  2.034939451144496  4.189370210393712
+  POINT  1233  2.551000814787705  5.199346967166499
+  POINT  1234  2.562089764809169  3.227807842293803
+  POINT  1235  3.599148476760741  5.248005798897869
+  POINT  1236  -8.808534389004958  21.72280081085314
+  POINT  1237  -8.290579899119484  22.63591502962064
+  POINT  1238  -9.849539984213617  21.7138879840766
+  POINT  1239  -8.799875258554394  23.5354724285207
+  POINT  1240  -14.05319871993245  21.74107047129854
+  POINT  1241  -13.49147167328674  20.83257382131933
+  POINT  1242  -13.01772343641998  21.71937768246372
+  POINT  1243  -15.07065374632022  18.08797242978403
+  POINT  1244  -15.4360015171055  17.16213287055806
+  POINT  1245  -14.0080120928104  16.21237758454029
+  POINT  1246  -15.01786712752577  16.19866394969555
+  POINT  1247  -17.17857644573234  19.94984075163958
+  POINT  1248  -17.43147479908956  20.8842778513917
+  POINT  1249  -16.09556177105241  19.95056885029135
+  POINT  1250  -15.52089992188291  20.86613685530161
+  POINT  1251  -15.10160880596872  19.93869860514389
+  POINT  1252  -17.18679097624842  21.83494159512092
+  POINT  1253  -18.18552489707417  26.14279763280435
+  POINT  1254  -17.20417083141572  25.40139287011322
+  POINT  1255  -16.3485902785953  26.20978421624601
+  POINT  1256  -16.78867890921584  27.19374870317508
+  POINT  1257  -17.80065072643519  27.17057660669527
+  POINT  1258  -18.72983447894121  27.01379366339507
+  POINT  1259  11.95573882194991  19.89979512998055
+  POINT  1260  10.91279663445388  19.89738135384383
+  POINT  1261  10.41041451927062  18.99394926589576
+  POINT  1262  12.50727362976512  18.99615568741801
+  POINT  1263  5.677706720839749  25.40694066827868
+  POINT  1264  5.179980593012042  24.49591713056331
+  POINT  1265  5.700404958820875  23.58012201478103
+  POINT  1266  6.729740561719636  23.56881619105143
+  POINT  1267  7.239036046137137  24.46837365733434
+  POINT  1268  7.691207579082008  27.22632790550661
+  POINT  1269  6.670199204699301  27.23076104833079
+  POINT  1270  6.172815602490047  26.31659736124369
+  POINT  1271  8.216808740161595  26.27623588438967
+  POINT  1272  6.702397474453146  25.39718135075132
+  POINT  1273  7.734144927787435  25.37803035029934
+  POINT  1274  14.36136880606171  10.72072377865549
+  POINT  1275  15.45627677840451  10.68439021395649
+  POINT  1276  15.49028452683864  8.941107024951828
+  POINT  1277  14.33918656687014  9.008056274559546
+  POINT  1278  13.80526722851472  9.865886806904992
+  POINT  1279  16.06641351663609  9.805491815776586
+  POINT  1280  16.64213914845493  8.907696187396814
+  POINT  1281  -7.631707103564363  30.91661699613311
+  POINT  1282  -8.655828970474381  30.92080206299163
+  POINT  1283  -7.130348925755392  31.87754588921673
+  POINT  1284  -6.634228490337664  30.95854195172743
+  POINT  1285  -9.157930722157598  31.87228935939205
+  POINT  1286  -8.612311842392856  32.75458842836879
+  POINT  1287  -7.648469201387913  32.82511481490026
+  POINT  1288  -2.549229273895434  34.70629607419768
+  POINT  1289  -2.021007115319019  33.78145919155421
+  POINT  1290  -3.500292663479144  34.71485452438976
+  POINT  1291  -4.030907574346319  33.71985855443602
+  POINT  1292  -5.179980371060386  24.49591750747982
+  POINT  1293  -4.650398593296442  25.41533347663255
+  POINT  1294  -3.649195283407097  23.591677514562
+  POINT  1295  -3.148718474961619  24.57178698404517
+  POINT  1296  -4.673096757267691  23.58851473694486
+  POINT  1297  0.5144203594414323  27.2905527635694
+  POINT  1298  1.022476754514889  28.20145846246176
+  POINT  1299  0.507938751521413  29.12842095013544
+  POINT  1300  -9.846921989817281  23.51115965477413
+  POINT  1301  -9.317829393418286  24.42490977616031
+  POINT  1302  -9.800492953921545  25.323115268257
+  POINT  1303  -10.83039438917027  25.28468549874502
+  POINT  1304  -10.92764508160684  18.07693196478106
+  POINT  1305  -10.41041404191582  18.99394930834161
+  POINT  1306  -10.91279607002197  19.89738127491452
+  POINT  1307  -11.95573820817218  19.89979496064743
+  POINT  1308  -11.41305425162406  20.80846734675159
+  POINT  1309  -15.14265757944868  21.78642099994649
+  POINT  1310  -14.66890934258192  22.67322486109087
+  POINT  1311  -16.13661054453237  21.79829124509394
+  POINT  1312  -15.25549093307073  23.54255322720311
+  POINT  1313  -14.1660320735545  23.49720269855517
+  POINT  1314  -16.80854863381419  22.75522573976579
+  POINT  1315  -16.44107418059214  23.60560634392143
+  POINT  1316  10.44287685491821  15.3320070852495
+  POINT  1317  10.99244953168854  14.41410579688861
+  POINT  1318  12.05881853851436  14.38348705047854
+  POINT  1319  12.51923528622494  15.29188158122452
+  POINT  1320  9.882579552317679  18.08217219529029
+  POINT  1321  9.363918655514606  17.17751869900422
+  POINT  1322  10.92764556036217  18.07693181489272
+  POINT  1323  9.899040669385645  16.25867285543741
+  POINT  1324  10.94364677894179  16.23848897409934
+  POINT  1325  -0.5144201764050657  27.29055277175395
+  POINT  1326  6.145462372320054e-08  26.3758253379825
+  POINT  1327  -0.5144202035150144  25.4710988215093
+  POINT  1328  -1.586802492614995  25.50754474293507
+  POINT  1329  4.053181679175566e-07  30.05156162643644
+  POINT  1330  -0.5079373955465308  30.98886235417658
+  POINT  1331  -0.5079382246215022  29.12842087364186
+  POINT  1332  -12.94362054595454  25.24019426221156
+  POINT  1333  -13.63403191024444  24.36529481739402
+  POINT  1334  -13.04745031975563  23.49596645128178
+  POINT  1335  -11.90568140505247  25.26641628259847
+  POINT  1336  -11.44016314056337  24.38232778626718
+  POINT  1337  -10.38199561361241  22.61371945416543
+  POINT  1338  -10.90256774287263  21.70588513110751
+  POINT  1339  -10.8999497484763  23.50315680180504
+  POINT  1340  -11.94550988102284  21.70829881684042
+  POINT  1341  -11.9752367643585  23.48488758565849
+  POINT  1342  -12.50723692766855  22.61679546681964
+  POINT  1343  -11.95486088381842  18.07035362542616
+  POINT  1344  -11.42702593885517  17.15857670139686
+  POINT  1345  -11.97086217426693  16.23191113527045
+  POINT  1346  -13.00261454459266  16.21196963584406
+  POINT  1347  -13.45963928928449  17.15240631073819
+  POINT  1348  -14.04300661306449  19.92893456636063
+  POINT  1349  -14.61766846223399  19.01336656135037
+  POINT  1350  -14.012051553416  18.07820839100076
+  POINT  1351  -13.00753132955202  19.9072417775258
+  POINT  1352  -12.50727314794993  18.99615570568874
+  POINT  1353  -13.00665400519826  18.07780044230454
+  POINT  1354  11.42702639250091  17.15857636716348
+  POINT  1355  11.95486135945386  18.07035343776895
+  POINT  1356  13.45963971419343  17.15240581280172
+  POINT  1357  13.00665446190387  18.07780023968877
+  POINT  1358  11.97086257803348  16.23191059697557
+  POINT  1359  13.00261489978407  16.21196897428866
+  POINT  1360  -4.63194529517035  27.26807044242916
+  POINT  1361  -5.129329281616346  28.18223402953092
+  POINT  1362  -2.075897664001495  26.39023252420856
+  POINT  1363  -2.633859682224616  25.52195192097659
+  POINT  1364  -3.619360348222028  27.30721173111527
+  POINT  1365  -4.135539800559439  26.36549841356398
+  POINT  1366  -3.637813646348119  25.45447476531866
+  POINT  1367  -1.530414898263689  29.12459912906478
+  POINT  1368  -1.022476552060444  28.20145845276378
+  POINT  1369  -2.583954039656873  27.30113820521839
+  POINT  1370  -3.080359534267785  28.20371023408358
+  POINT  1371  -1.536896850047253  27.28673102717688
+  POINT  1372  -4.543158675405131  32.76980075139725
+  POINT  1373  -5.096692509816465  31.88416600567974
+  POINT  1374  -3.548263606045425  32.79891896958721
+  POINT  1375  -2.549037169284093  29.11196922998421
+  POINT  1376  -2.034498841845151  30.03893165086228
+  POINT  1377  -3.584443477849247  29.11804275588108
+  POINT  1378  -1.519465434862823  30.97888306068132
+  POINT  1379  -1.011526259584607  31.91618386491503
+  POINT  1380  -3.041784503002568  31.8775328689841
+  POINT  1381  -2.529533401943756  32.82759067202288
+  POINT  1382  -2.538087705883227  30.96625316160074
+  POINT  1383  -3.556817909984896  30.93758145916507
+  POINT  1384  -1.514528012276162  32.8600730909511
+  POINT  1385  -4.088203640533337  30.03451082052263
+  POINT  1386  -4.591900437652678  30.94579052790599
+  POINT  1387  -6.129436418173878  30.02016647395368
+  POINT  1388  -5.628078240364906  30.9810953670373
+  POINT  1389  -4.619526005517029  29.126251824622
+  POINT  1390  -5.633089444300436  29.09870209417247
 
 END POINTS LIST
 
@@ -323,145 +1403,669 @@ END POINTS LIST
 
 BEGIN MESH STRUCTURE DESCRIPTION
 
-CONVEX 0    'GT_PK(2,2)'      18  86  27  87  88  19
-CONVEX 1    'GT_PK(2,2)'      33  89  43  90  91  42
-CONVEX 2    'GT_PK(2,2)'      33  92  34  93  94  25
-CONVEX 3    'GT_PK(2,2)'      33  89  43  92  95  34
-CONVEX 4    'GT_PK(2,2)'      65  96  75  97  98  66
-CONVEX 5    'GT_PK(2,2)'      65  96  75  99  100  74
-CONVEX 6    'GT_PK(2,2)'      81  101  75  102  100  74
-CONVEX 7    'GT_PK(2,2)'      26  103  18  104  86  27
-CONVEX 8    'GT_PK(2,2)'      11  105  18  106  87  19
-CONVEX 9    'GT_PK(2,2)'      72  107  62  108  109  71
-CONVEX 10    'GT_PK(2,2)'      58  110  68  111  112  59
-CONVEX 11    'GT_PK(2,2)'      36  113  26  114  104  27
-CONVEX 12    'GT_PK(2,2)'      53  115  43  116  117  3
-CONVEX 13    'GT_PK(2,2)'      32  118  33  119  90  42
-CONVEX 14    'GT_PK(2,2)'      32  120  31  121  122  23
-CONVEX 15    'GT_PK(2,2)'      41  123  51  124  125  42
-CONVEX 16    'GT_PK(2,2)'      41  126  32  124  119  42
-CONVEX 17    'GT_PK(2,2)'      41  126  32  127  120  31
-CONVEX 18    'GT_PK(2,2)'      24  128  33  129  93  25
-CONVEX 19    'GT_PK(2,2)'      24  130  32  131  121  23
-CONVEX 20    'GT_PK(2,2)'      24  130  32  128  118  33
-CONVEX 21    'GT_PK(2,2)'      73  132  65  133  99  74
-CONVEX 22    'GT_PK(2,2)'      73  132  65  134  135  64
-CONVEX 23    'GT_PK(2,2)'      76  136  81  137  101  75
-CONVEX 24    'GT_PK(2,2)'      76  138  82  136  139  81
-CONVEX 25    'GT_PK(2,2)'      77  140  84  141  142  85
-CONVEX 26    'GT_PK(2,2)'      55  143  65  144  135  64
-CONVEX 27    'GT_PK(2,2)'      55  145  54  144  146  64
-CONVEX 28    'GT_PK(2,2)'      78  147  79  148  149  85
-CONVEX 29    'GT_PK(2,2)'      78  150  77  148  141  85
-CONVEX 30    'GT_PK(2,2)'      78  151  71  152  153  70
-CONVEX 31    'GT_PK(2,2)'      78  147  79  151  154  71
-CONVEX 32    'GT_PK(2,2)'      44  155  43  156  117  3
-CONVEX 33    'GT_PK(2,2)'      44  155  43  157  95  34
-CONVEX 34    'GT_PK(2,2)'      80  158  79  159  154  71
-CONVEX 35    'GT_PK(2,2)'      80  160  72  159  108  71
-CONVEX 36    'GT_PK(2,2)'      35  161  36  162  163  2
-CONVEX 37    'GT_PK(2,2)'      35  161  36  164  113  26
-CONVEX 38    'GT_PK(2,2)'      52  165  53  166  167  62
-CONVEX 39    'GT_PK(2,2)'      52  168  51  169  125  42
-CONVEX 40    'GT_PK(2,2)'      52  170  43  169  91  42
-CONVEX 41    'GT_PK(2,2)'      52  165  53  170  115  43
-CONVEX 42    'GT_PK(2,2)'      63  171  72  172  107  62
-CONVEX 43    'GT_PK(2,2)'      63  173  53  172  167  62
-CONVEX 44    'GT_PK(2,2)'      63  173  53  174  116  3
-CONVEX 45    'GT_PK(2,2)'      61  175  60  176  177  70
-CONVEX 46    'GT_PK(2,2)'      61  178  71  176  153  70
-CONVEX 47    'GT_PK(2,2)'      61  179  62  178  109  71
-CONVEX 48    'GT_PK(2,2)'      61  175  60  180  181  51
-CONVEX 49    'GT_PK(2,2)'      61  182  52  179  166  62
-CONVEX 50    'GT_PK(2,2)'      61  182  52  180  168  51
-CONVEX 51    'GT_PK(2,2)'      50  183  60  184  181  51
-CONVEX 52    'GT_PK(2,2)'      50  185  41  184  123  51
-CONVEX 53    'GT_PK(2,2)'      50  183  60  186  187  59
-CONVEX 54    'GT_PK(2,2)'      17  188  24  189  129  25
-CONVEX 55    'GT_PK(2,2)'      16  190  15  191  192  23
-CONVEX 56    'GT_PK(2,2)'      16  193  24  191  131  23
-CONVEX 57    'GT_PK(2,2)'      16  194  17  195  196  10
-CONVEX 58    'GT_PK(2,2)'      16  194  17  193  188  24
-CONVEX 59    'GT_PK(2,2)'      9  197  15  198  199  8
-CONVEX 60    'GT_PK(2,2)'      9  200  16  201  195  10
-CONVEX 61    'GT_PK(2,2)'      9  200  16  197  190  15
-CONVEX 62    'GT_PK(2,2)'      67  202  58  203  110  68
-CONVEX 63    'GT_PK(2,2)'      67  204  76  203  205  68
-CONVEX 64    'GT_PK(2,2)'      67  206  57  207  208  66
-CONVEX 65    'GT_PK(2,2)'      67  206  57  202  209  58
-CONVEX 66    'GT_PK(2,2)'      67  210  75  207  98  66
-CONVEX 67    'GT_PK(2,2)'      67  204  76  210  137  75
-CONVEX 68    'GT_PK(2,2)'      83  211  76  212  205  68
-CONVEX 69    'GT_PK(2,2)'      83  213  77  212  214  68
-CONVEX 70    'GT_PK(2,2)'      83  215  82  216  217  4
-CONVEX 71    'GT_PK(2,2)'      83  211  76  215  138  82
-CONVEX 72    'GT_PK(2,2)'      83  218  84  216  219  4
-CONVEX 73    'GT_PK(2,2)'      83  213  77  218  140  84
-CONVEX 74    'GT_PK(2,2)'      69  220  60  221  177  70
-CONVEX 75    'GT_PK(2,2)'      69  220  60  222  187  59
-CONVEX 76    'GT_PK(2,2)'      69  223  78  221  152  70
-CONVEX 77    'GT_PK(2,2)'      69  223  78  224  150  77
-CONVEX 78    'GT_PK(2,2)'      69  225  68  222  112  59
-CONVEX 79    'GT_PK(2,2)'      69  224  77  225  214  68
-CONVEX 80    'GT_PK(2,2)'      45  226  36  227  163  2
-CONVEX 81    'GT_PK(2,2)'      45  228  54  227  229  2
-CONVEX 82    'GT_PK(2,2)'      45  230  55  228  145  54
-CONVEX 83    'GT_PK(2,2)'      40  231  30  232  233  31
-CONVEX 84    'GT_PK(2,2)'      40  234  41  232  127  31
-CONVEX 85    'GT_PK(2,2)'      40  235  50  236  237  1
-CONVEX 86    'GT_PK(2,2)'      40  235  50  234  185  41
-CONVEX 87    'GT_PK(2,2)'      39  238  30  239  240  29
-CONVEX 88    'GT_PK(2,2)'      39  241  38  239  242  29
-CONVEX 89    'GT_PK(2,2)'      39  243  40  244  236  1
-CONVEX 90    'GT_PK(2,2)'      39  243  40  238  231  30
-CONVEX 91    'GT_PK(2,2)'      22  245  31  246  122  23
-CONVEX 92    'GT_PK(2,2)'      22  247  30  245  233  31
-CONVEX 93    'GT_PK(2,2)'      22  248  15  246  192  23
-CONVEX 94    'GT_PK(2,2)'      37  249  38  250  251  47
-CONVEX 95    'GT_PK(2,2)'      37  252  36  253  114  27
-CONVEX 96    'GT_PK(2,2)'      12  254  20  255  256  19
-CONVEX 97    'GT_PK(2,2)'      12  257  11  255  106  19
-CONVEX 98    'GT_PK(2,2)'      12  257  11  258  259  5
-CONVEX 99    'GT_PK(2,2)'      12  260  6  258  261  5
-CONVEX 100    'GT_PK(2,2)'      14  262  22  263  248  15
-CONVEX 101    'GT_PK(2,2)'      14  264  8  265  266  0
-CONVEX 102    'GT_PK(2,2)'      14  263  15  264  199  8
-CONVEX 103    'GT_PK(2,2)'      21  267  30  268  240  29
-CONVEX 104    'GT_PK(2,2)'      21  269  20  268  270  29
-CONVEX 105    'GT_PK(2,2)'      21  271  22  267  247  30
-CONVEX 106    'GT_PK(2,2)'      21  272  14  271  262  22
-CONVEX 107    'GT_PK(2,2)'      56  273  57  274  275  47
-CONVEX 108    'GT_PK(2,2)'      56  273  57  276  208  66
-CONVEX 109    'GT_PK(2,2)'      56  277  65  276  97  66
-CONVEX 110    'GT_PK(2,2)'      56  278  55  277  143  65
-CONVEX 111    'GT_PK(2,2)'      48  279  57  280  275  47
-CONVEX 112    'GT_PK(2,2)'      48  281  39  282  244  1
-CONVEX 113    'GT_PK(2,2)'      48  279  57  283  209  58
-CONVEX 114    'GT_PK(2,2)'      48  284  38  280  251  47
-CONVEX 115    'GT_PK(2,2)'      48  281  39  284  241  38
-CONVEX 116    'GT_PK(2,2)'      46  285  37  286  250  47
-CONVEX 117    'GT_PK(2,2)'      46  287  56  286  274  47
-CONVEX 118    'GT_PK(2,2)'      46  288  45  289  226  36
-CONVEX 119    'GT_PK(2,2)'      46  285  37  289  252  36
-CONVEX 120    'GT_PK(2,2)'      46  288  45  290  230  55
-CONVEX 121    'GT_PK(2,2)'      46  287  56  290  278  55
-CONVEX 122    'GT_PK(2,2)'      28  291  38  292  242  29
-CONVEX 123    'GT_PK(2,2)'      28  293  37  291  249  38
-CONVEX 124    'GT_PK(2,2)'      28  294  20  292  270  29
-CONVEX 125    'GT_PK(2,2)'      28  294  20  295  256  19
-CONVEX 126    'GT_PK(2,2)'      28  296  27  295  88  19
-CONVEX 127    'GT_PK(2,2)'      28  293  37  296  253  27
-CONVEX 128    'GT_PK(2,2)'      7  297  14  298  265  0
-CONVEX 129    'GT_PK(2,2)'      13  299  21  300  272  14
-CONVEX 130    'GT_PK(2,2)'      13  301  12  302  260  6
-CONVEX 131    'GT_PK(2,2)'      13  301  12  303  254  20
-CONVEX 132    'GT_PK(2,2)'      13  299  21  303  269  20
-CONVEX 133    'GT_PK(2,2)'      13  304  7  302  305  6
-CONVEX 134    'GT_PK(2,2)'      13  304  7  300  297  14
-CONVEX 135    'GT_PK(2,2)'      49  306  48  307  282  1
-CONVEX 136    'GT_PK(2,2)'      49  306  48  308  283  58
-CONVEX 137    'GT_PK(2,2)'      49  308  58  309  111  59
-CONVEX 138    'GT_PK(2,2)'      49  310  50  307  237  1
-CONVEX 139    'GT_PK(2,2)'      49  310  50  309  186  59
+CONVEX 0    'GT_PK(2,2)'      181  364  142  365  366  161
+CONVEX 1    'GT_PK(2,2)'      180  367  181  368  369  3
+CONVEX 2    'GT_PK(2,2)'      180  367  181  370  365  161
+CONVEX 3    'GT_PK(2,2)'      358  371  359  372  373  4
+CONVEX 4    'GT_PK(2,2)'      360  374  359  375  373  4
+CONVEX 5    'GT_PK(2,2)'      350  376  360  377  378  361
+CONVEX 6    'GT_PK(2,2)'      127  379  108  380  381  128
+CONVEX 7    'GT_PK(2,2)'      127  379  108  382  383  107
+CONVEX 8    'GT_PK(2,2)'      182  384  201  385  386  2
+CONVEX 9    'GT_PK(2,2)'      141  387  142  388  389  122
+CONVEX 10    'GT_PK(2,2)'      141  387  142  390  366  161
+CONVEX 11    'GT_PK(2,2)'      17  391  8  392  393  7
+CONVEX 12    'GT_PK(2,2)'      325  394  309  395  396  326
+CONVEX 13    'GT_PK(2,2)'      354  397  341  398  399  353
+CONVEX 14    'GT_PK(2,2)'      39  400  55  401  402  40
+CONVEX 15    'GT_PK(2,2)'      39  403  25  401  404  40
+CONVEX 16    'GT_PK(2,2)'      71  405  55  406  407  72
+CONVEX 17    'GT_PK(2,2)'      316  408  317  409  410  331
+CONVEX 18    'GT_PK(2,2)'      356  411  346  412  413  357
+CONVEX 19    'GT_PK(2,2)'      87  414  86  415  416  69
+CONVEX 20    'GT_PK(2,2)'      89  417  108  418  383  107
+CONVEX 21    'GT_PK(2,2)'      89  419  71  420  406  72
+CONVEX 22    'GT_PK(2,2)'      109  421  108  422  381  128
+CONVEX 23    'GT_PK(2,2)'      126  423  127  424  382  107
+CONVEX 24    'GT_PK(2,2)'      163  425  162  426  427  143
+CONVEX 25    'GT_PK(2,2)'      163  425  162  428  429  2
+CONVEX 26    'GT_PK(2,2)'      163  430  182  428  385  2
+CONVEX 27    'GT_PK(2,2)'      191  431  211  432  433  210
+CONVEX 28    'GT_PK(2,2)'      191  434  190  435  436  1
+CONVEX 29    'GT_PK(2,2)'      191  434  190  432  437  210
+CONVEX 30    'GT_PK(2,2)'      136  438  155  439  440  135
+CONVEX 31    'GT_PK(2,2)'      149  441  130  442  443  150
+CONVEX 32    'GT_PK(2,2)'      131  444  130  445  443  150
+CONVEX 33    'GT_PK(2,2)'      15  446  6  447  448  5
+CONVEX 34    'GT_PK(2,2)'      18  449  17  450  451  30
+CONVEX 35    'GT_PK(2,2)'      18  452  9  453  454  0
+CONVEX 36    'GT_PK(2,2)'      18  455  8  453  456  0
+CONVEX 37    'GT_PK(2,2)'      18  449  17  455  391  8
+CONVEX 38    'GT_PK(2,2)'      363  457  362  458  459  352
+CONVEX 39    'GT_PK(2,2)'      351  460  362  461  459  352
+CONVEX 40    'GT_PK(2,2)'      351  462  338  463  464  350
+CONVEX 41    'GT_PK(2,2)'      351  463  350  465  377  361
+CONVEX 42    'GT_PK(2,2)'      351  460  362  465  466  361
+CONVEX 43    'GT_PK(2,2)'      339  467  325  468  469  324
+CONVEX 44    'GT_PK(2,2)'      339  470  338  468  471  324
+CONVEX 45    'GT_PK(2,2)'      339  472  351  473  461  352
+CONVEX 46    'GT_PK(2,2)'      339  472  351  470  462  338
+CONVEX 47    'GT_PK(2,2)'      340  474  341  475  399  353
+CONVEX 48    'GT_PK(2,2)'      340  476  339  477  473  352
+CONVEX 49    'GT_PK(2,2)'      340  476  339  478  467  325
+CONVEX 50    'GT_PK(2,2)'      340  474  341  479  480  326
+CONVEX 51    'GT_PK(2,2)'      340  478  325  479  395  326
+CONVEX 52    'GT_PK(2,2)'      340  481  363  475  482  353
+CONVEX 53    'GT_PK(2,2)'      340  481  363  477  458  352
+CONVEX 54    'GT_PK(2,2)'      278  483  259  484  485  258
+CONVEX 55    'GT_PK(2,2)'      276  486  257  487  488  256
+CONVEX 56    'GT_PK(2,2)'      347  489  358  490  491  357
+CONVEX 57    'GT_PK(2,2)'      347  492  346  490  413  357
+CONVEX 58    'GT_PK(2,2)'      337  493  338  494  464  350
+CONVEX 59    'GT_PK(2,2)'      308  495  325  496  469  324
+CONVEX 60    'GT_PK(2,2)'      308  495  325  497  394  309
+CONVEX 61    'GT_PK(2,2)'      291  498  309  499  500  292
+CONVEX 62    'GT_PK(2,2)'      291  501  308  498  497  309
+CONVEX 63    'GT_PK(2,2)'      291  501  308  502  503  290
+CONVEX 64    'GT_PK(2,2)'      197  504  216  505  506  196
+CONVEX 65    'GT_PK(2,2)'      197  507  178  508  509  198
+CONVEX 66    'GT_PK(2,2)'      171  510  190  511  436  1
+CONVEX 67    'GT_PK(2,2)'      64  512  81  513  514  80
+CONVEX 68    'GT_PK(2,2)'      19  515  9  516  517  10
+CONVEX 69    'GT_PK(2,2)'      19  518  18  515  452  9
+CONVEX 70    'GT_PK(2,2)'      24  519  39  520  521  38
+CONVEX 71    'GT_PK(2,2)'      24  519  39  522  403  25
+CONVEX 72    'GT_PK(2,2)'      54  523  39  524  400  55
+CONVEX 73    'GT_PK(2,2)'      54  525  71  524  405  55
+CONVEX 74    'GT_PK(2,2)'      54  523  39  526  521  38
+CONVEX 75    'GT_PK(2,2)'      54  527  53  526  528  38
+CONVEX 76    'GT_PK(2,2)'      315  529  316  530  531  299
+CONVEX 77    'GT_PK(2,2)'      343  532  344  533  534  331
+CONVEX 78    'GT_PK(2,2)'      343  535  316  533  409  331
+CONVEX 79    'GT_PK(2,2)'      300  536  316  537  531  299
+CONVEX 80    'GT_PK(2,2)'      300  536  316  538  408  317
+CONVEX 81    'GT_PK(2,2)'      123  539  124  540  541  104
+CONVEX 82    'GT_PK(2,2)'      123  539  124  542  543  143
+CONVEX 83    'GT_PK(2,2)'      123  544  162  542  427  143
+CONVEX 84    'GT_PK(2,2)'      70  545  53  546  547  69
+CONVEX 85    'GT_PK(2,2)'      70  548  87  546  415  69
+CONVEX 86    'GT_PK(2,2)'      70  549  54  545  527  53
+CONVEX 87    'GT_PK(2,2)'      70  549  54  550  525  71
+CONVEX 88    'GT_PK(2,2)'      106  551  126  552  553  125
+CONVEX 89    'GT_PK(2,2)'      106  551  126  554  424  107
+CONVEX 90    'GT_PK(2,2)'      105  555  86  556  557  104
+CONVEX 91    'GT_PK(2,2)'      105  558  87  555  414  86
+CONVEX 92    'GT_PK(2,2)'      105  559  124  556  541  104
+CONVEX 93    'GT_PK(2,2)'      105  560  106  558  561  87
+CONVEX 94    'GT_PK(2,2)'      105  559  124  562  563  125
+CONVEX 95    'GT_PK(2,2)'      105  560  106  562  552  125
+CONVEX 96    'GT_PK(2,2)'      179  564  178  565  509  198
+CONVEX 97    'GT_PK(2,2)'      56  566  73  567  568  57
+CONVEX 98    'GT_PK(2,2)'      56  569  55  570  402  40
+CONVEX 99    'GT_PK(2,2)'      56  569  55  571  407  72
+CONVEX 100    'GT_PK(2,2)'      56  566  73  571  572  72
+CONVEX 101    'GT_PK(2,2)'      90  573  109  574  421  108
+CONVEX 102    'GT_PK(2,2)'      90  575  89  576  420  72
+CONVEX 103    'GT_PK(2,2)'      90  575  89  574  417  108
+CONVEX 104    'GT_PK(2,2)'      90  577  73  576  572  72
+CONVEX 105    'GT_PK(2,2)'      187  578  167  579  580  168
+CONVEX 106    'GT_PK(2,2)'      116  581  136  582  439  135
+CONVEX 107    'GT_PK(2,2)'      116  581  136  583  584  117
+CONVEX 108    'GT_PK(2,2)'      154  585  153  586  587  173
+CONVEX 109    'GT_PK(2,2)'      154  588  155  589  440  135
+CONVEX 110    'GT_PK(2,2)'      172  590  153  591  587  173
+CONVEX 111    'GT_PK(2,2)'      172  592  171  593  511  1
+CONVEX 112    'GT_PK(2,2)'      264  594  245  595  596  244
+CONVEX 113    'GT_PK(2,2)'      298  597  297  598  599  314
+CONVEX 114    'GT_PK(2,2)'      298  600  315  598  601  314
+CONVEX 115    'GT_PK(2,2)'      298  602  281  603  604  299
+CONVEX 116    'GT_PK(2,2)'      298  600  315  603  530  299
+CONVEX 117    'GT_PK(2,2)'      202  605  182  606  384  201
+CONVEX 118    'GT_PK(2,2)'      144  607  163  608  426  143
+CONVEX 119    'GT_PK(2,2)'      144  609  124  610  563  125
+CONVEX 120    'GT_PK(2,2)'      144  609  124  608  543  143
+CONVEX 121    'GT_PK(2,2)'      215  611  216  612  506  196
+CONVEX 122    'GT_PK(2,2)'      215  613  195  612  614  196
+CONVEX 123    'GT_PK(2,2)'      99  615  81  616  617  82
+CONVEX 124    'GT_PK(2,2)'      99  618  118  619  620  117
+CONVEX 125    'GT_PK(2,2)'      35  621  36  622  623  23
+CONVEX 126    'GT_PK(2,2)'      35  621  36  624  625  50
+CONVEX 127    'GT_PK(2,2)'      100  626  118  627  628  119
+CONVEX 128    'GT_PK(2,2)'      100  629  99  630  616  82
+CONVEX 129    'GT_PK(2,2)'      100  629  99  626  618  118
+CONVEX 130    'GT_PK(2,2)'      137  631  136  632  584  117
+CONVEX 131    'GT_PK(2,2)'      137  633  118  632  620  117
+CONVEX 132    'GT_PK(2,2)'      74  634  73  635  568  57
+CONVEX 133    'GT_PK(2,2)'      74  636  75  637  638  92
+CONVEX 134    'GT_PK(2,2)'      148  639  167  640  580  168
+CONVEX 135    'GT_PK(2,2)'      148  641  149  640  642  168
+CONVEX 136    'GT_PK(2,2)'      93  643  75  644  645  76
+CONVEX 137    'GT_PK(2,2)'      93  643  75  646  638  92
+CONVEX 138    'GT_PK(2,2)'      46  647  45  648  649  61
+CONVEX 139    'GT_PK(2,2)'      46  650  62  648  651  61
+CONVEX 140    'GT_PK(2,2)'      46  650  62  652  653  47
+CONVEX 141    'GT_PK(2,2)'      327  654  354  655  397  341
+CONVEX 142    'GT_PK(2,2)'      327  655  341  656  480  326
+CONVEX 143    'GT_PK(2,2)'      217  657  218  658  659  198
+CONVEX 144    'GT_PK(2,2)'      217  660  197  658  508  198
+CONVEX 145    'GT_PK(2,2)'      217  660  197  661  504  216
+CONVEX 146    'GT_PK(2,2)'      200  662  180  663  368  3
+CONVEX 147    'GT_PK(2,2)'      200  664  220  663  665  3
+CONVEX 148    'GT_PK(2,2)'      238  666  257  667  668  258
+CONVEX 149    'GT_PK(2,2)'      238  669  259  667  485  258
+CONVEX 150    'GT_PK(2,2)'      238  670  239  669  671  259
+CONVEX 151    'GT_PK(2,2)'      277  672  257  673  668  258
+CONVEX 152    'GT_PK(2,2)'      277  674  276  672  486  257
+CONVEX 153    'GT_PK(2,2)'      277  675  278  673  484  258
+CONVEX 154    'GT_PK(2,2)'      277  675  278  676  677  296
+CONVEX 155    'GT_PK(2,2)'      236  678  255  679  680  256
+CONVEX 156    'GT_PK(2,2)'      236  681  217  682  661  216
+CONVEX 157    'GT_PK(2,2)'      275  683  276  684  487  256
+CONVEX 158    'GT_PK(2,2)'      275  685  255  684  680  256
+CONVEX 159    'GT_PK(2,2)'      275  686  294  683  687  276
+CONVEX 160    'GT_PK(2,2)'      275  686  294  688  689  293
+CONVEX 161    'GT_PK(2,2)'      209  690  229  691  692  210
+CONVEX 162    'GT_PK(2,2)'      209  693  189  694  695  208
+CONVEX 163    'GT_PK(2,2)'      209  696  190  691  437  210
+CONVEX 164    'GT_PK(2,2)'      209  693  189  696  697  190
+CONVEX 165    'GT_PK(2,2)'      334  698  347  699  492  346
+CONVEX 166    'GT_PK(2,2)'      345  700  356  701  411  346
+CONVEX 167    'GT_PK(2,2)'      345  702  355  700  703  356
+CONVEX 168    'GT_PK(2,2)'      349  704  337  705  494  350
+CONVEX 169    'GT_PK(2,2)'      349  706  360  707  374  359
+CONVEX 170    'GT_PK(2,2)'      349  705  350  706  376  360
+CONVEX 171    'GT_PK(2,2)'      349  708  336  704  709  337
+CONVEX 172    'GT_PK(2,2)'      323  710  338  711  471  324
+CONVEX 173    'GT_PK(2,2)'      323  712  337  710  493  338
+CONVEX 174    'GT_PK(2,2)'      307  713  308  714  503  290
+CONVEX 175    'GT_PK(2,2)'      307  713  308  715  496  324
+CONVEX 176    'GT_PK(2,2)'      307  716  323  715  711  324
+CONVEX 177    'GT_PK(2,2)'      307  716  323  717  718  306
+CONVEX 178    'GT_PK(2,2)'      272  719  291  720  502  290
+CONVEX 179    'GT_PK(2,2)'      169  721  149  722  442  150
+CONVEX 180    'GT_PK(2,2)'      169  721  149  723  642  168
+CONVEX 181    'GT_PK(2,2)'      22  724  35  725  726  34
+CONVEX 182    'GT_PK(2,2)'      22  724  35  727  622  23
+CONVEX 183    'GT_PK(2,2)'      63  728  62  729  653  47
+CONVEX 184    'GT_PK(2,2)'      63  728  62  730  731  79
+CONVEX 185    'GT_PK(2,2)'      63  730  79  732  733  80
+CONVEX 186    'GT_PK(2,2)'      63  734  64  732  513  80
+CONVEX 187    'GT_PK(2,2)'      21  735  12  736  737  11
+CONVEX 188    'GT_PK(2,2)'      21  738  33  739  740  34
+CONVEX 189    'GT_PK(2,2)'      21  741  22  739  725  34
+CONVEX 190    'GT_PK(2,2)'      21  741  22  735  742  12
+CONVEX 191    'GT_PK(2,2)'      49  743  35  744  726  34
+CONVEX 192    'GT_PK(2,2)'      49  743  35  745  624  50
+CONVEX 193    'GT_PK(2,2)'      330  746  315  747  529  316
+CONVEX 194    'GT_PK(2,2)'      330  748  343  747  535  316
+CONVEX 195    'GT_PK(2,2)'      330  746  315  749  601  314
+CONVEX 196    'GT_PK(2,2)'      88  750  70  751  548  87
+CONVEX 197    'GT_PK(2,2)'      88  752  106  751  561  87
+CONVEX 198    'GT_PK(2,2)'      88  750  70  753  550  71
+CONVEX 199    'GT_PK(2,2)'      88  752  106  754  554  107
+CONVEX 200    'GT_PK(2,2)'      88  755  89  754  418  107
+CONVEX 201    'GT_PK(2,2)'      88  755  89  753  419  71
+CONVEX 202    'GT_PK(2,2)'      159  756  179  757  564  178
+CONVEX 203    'GT_PK(2,2)'      129  758  110  759  760  130
+CONVEX 204    'GT_PK(2,2)'      129  761  148  762  763  128
+CONVEX 205    'GT_PK(2,2)'      129  764  109  762  422  128
+CONVEX 206    'GT_PK(2,2)'      129  758  110  764  765  109
+CONVEX 207    'GT_PK(2,2)'      129  766  149  759  441  130
+CONVEX 208    'GT_PK(2,2)'      129  761  148  766  641  149
+CONVEX 209    'GT_PK(2,2)'      111  767  131  768  444  130
+CONVEX 210    'GT_PK(2,2)'      111  769  110  768  760  130
+CONVEX 211    'GT_PK(2,2)'      111  769  110  770  771  92
+CONVEX 212    'GT_PK(2,2)'      111  772  93  770  646  92
+CONVEX 213    'GT_PK(2,2)'      91  773  90  774  573  109
+CONVEX 214    'GT_PK(2,2)'      91  775  110  776  771  92
+CONVEX 215    'GT_PK(2,2)'      91  775  110  774  765  109
+CONVEX 216    'GT_PK(2,2)'      91  777  74  776  637  92
+CONVEX 217    'GT_PK(2,2)'      91  773  90  778  577  73
+CONVEX 218    'GT_PK(2,2)'      91  777  74  778  634  73
+CONVEX 219    'GT_PK(2,2)'      97  779  79  780  733  80
+CONVEX 220    'GT_PK(2,2)'      97  781  96  779  782  79
+CONVEX 221    'GT_PK(2,2)'      114  783  133  784  785  113
+CONVEX 222    'GT_PK(2,2)'      114  786  95  784  787  113
+CONVEX 223    'GT_PK(2,2)'      114  786  95  788  789  96
+CONVEX 224    'GT_PK(2,2)'      132  790  133  791  785  113
+CONVEX 225    'GT_PK(2,2)'      263  792  264  793  595  244
+CONVEX 226    'GT_PK(2,2)'      263  794  262  795  796  281
+CONVEX 227    'GT_PK(2,2)'      282  797  281  798  604  299
+CONVEX 228    'GT_PK(2,2)'      282  799  264  800  801  283
+CONVEX 229    'GT_PK(2,2)'      282  802  263  797  795  281
+CONVEX 230    'GT_PK(2,2)'      282  802  263  799  792  264
+CONVEX 231    'GT_PK(2,2)'      282  803  300  800  804  283
+CONVEX 232    'GT_PK(2,2)'      282  803  300  798  537  299
+CONVEX 233    'GT_PK(2,2)'      261  805  279  806  807  260
+CONVEX 234    'GT_PK(2,2)'      243  808  263  809  793  244
+CONVEX 235    'GT_PK(2,2)'      243  808  263  810  794  262
+CONVEX 236    'GT_PK(2,2)'      221  811  202  812  606  201
+CONVEX 237    'GT_PK(2,2)'      221  813  240  814  815  222
+CONVEX 238    'GT_PK(2,2)'      221  811  202  814  816  222
+CONVEX 239    'GT_PK(2,2)'      156  817  136  818  438  155
+CONVEX 240    'GT_PK(2,2)'      156  819  175  818  820  155
+CONVEX 241    'GT_PK(2,2)'      156  821  137  817  631  136
+CONVEX 242    'GT_PK(2,2)'      192  822  191  823  431  211
+CONVEX 243    'GT_PK(2,2)'      192  822  191  824  435  1
+CONVEX 244    'GT_PK(2,2)'      192  825  172  824  593  1
+CONVEX 245    'GT_PK(2,2)'      192  825  172  826  591  173
+CONVEX 246    'GT_PK(2,2)'      174  827  154  828  586  173
+CONVEX 247    'GT_PK(2,2)'      174  827  154  829  588  155
+CONVEX 248    'GT_PK(2,2)'      174  830  175  829  820  155
+CONVEX 249    'GT_PK(2,2)'      214  831  215  832  613  195
+CONVEX 250    'GT_PK(2,2)'      214  831  215  833  834  234
+CONVEX 251    'GT_PK(2,2)'      98  835  81  836  514  80
+CONVEX 252    'GT_PK(2,2)'      98  837  99  835  615  81
+CONVEX 253    'GT_PK(2,2)'      98  838  97  836  780  80
+CONVEX 254    'GT_PK(2,2)'      98  837  99  839  619  117
+CONVEX 255    'GT_PK(2,2)'      98  840  116  839  583  117
+CONVEX 256    'GT_PK(2,2)'      98  838  97  840  841  116
+CONVEX 257    'GT_PK(2,2)'      52  842  68  843  844  67
+CONVEX 258    'GT_PK(2,2)'      83  845  66  846  847  67
+CONVEX 259    'GT_PK(2,2)'      83  848  100  849  630  82
+CONVEX 260    'GT_PK(2,2)'      83  845  66  849  850  82
+CONVEX 261    'GT_PK(2,2)'      51  851  66  852  853  50
+CONVEX 262    'GT_PK(2,2)'      51  854  36  855  856  37
+CONVEX 263    'GT_PK(2,2)'      51  854  36  852  625  50
+CONVEX 264    'GT_PK(2,2)'      51  851  66  857  847  67
+CONVEX 265    'GT_PK(2,2)'      51  858  52  855  859  37
+CONVEX 266    'GT_PK(2,2)'      51  858  52  857  843  67
+CONVEX 267    'GT_PK(2,2)'      103  860  102  861  862  85
+CONVEX 268    'GT_PK(2,2)'      121  863  102  864  865  120
+CONVEX 269    'GT_PK(2,2)'      121  866  141  867  388  122
+CONVEX 270    'GT_PK(2,2)'      121  868  103  867  869  122
+CONVEX 271    'GT_PK(2,2)'      121  868  103  863  860  102
+CONVEX 272    'GT_PK(2,2)'      58  870  74  871  635  57
+CONVEX 273    'GT_PK(2,2)'      58  870  74  872  636  75
+CONVEX 274    'GT_PK(2,2)'      29  873  17  874  451  30
+CONVEX 275    'GT_PK(2,2)'      60  875  45  876  649  61
+CONVEX 276    'GT_PK(2,2)'      60  877  77  878  879  76
+CONVEX 277    'GT_PK(2,2)'      60  877  77  876  880  61
+CONVEX 278    'GT_PK(2,2)'      94  881  95  882  787  113
+CONVEX 279    'GT_PK(2,2)'      94  883  93  884  644  76
+CONVEX 280    'GT_PK(2,2)'      94  885  77  884  879  76
+CONVEX 281    'GT_PK(2,2)'      94  885  77  881  886  95
+CONVEX 282    'GT_PK(2,2)'      41  887  56  888  570  40
+CONVEX 283    'GT_PK(2,2)'      41  887  56  889  567  57
+CONVEX 284    'GT_PK(2,2)'      28  890  27  891  892  15
+CONVEX 285    'GT_PK(2,2)'      28  893  29  894  895  43
+CONVEX 286    'GT_PK(2,2)'      14  896  15  897  447  5
+CONVEX 287    'GT_PK(2,2)'      14  898  27  896  892  15
+CONVEX 288    'GT_PK(2,2)'      31  899  45  900  901  30
+CONVEX 289    'GT_PK(2,2)'      31  902  46  899  647  45
+CONVEX 290    'GT_PK(2,2)'      31  903  18  900  450  30
+CONVEX 291    'GT_PK(2,2)'      31  904  19  903  518  18
+CONVEX 292    'GT_PK(2,2)'      311  905  327  906  907  328
+CONVEX 293    'GT_PK(2,2)'      311  908  294  909  689  293
+CONVEX 294    'GT_PK(2,2)'      342  910  329  911  912  328
+CONVEX 295    'GT_PK(2,2)'      342  913  327  914  654  354
+CONVEX 296    'GT_PK(2,2)'      342  913  327  911  907  328
+CONVEX 297    'GT_PK(2,2)'      237  915  217  916  657  218
+CONVEX 298    'GT_PK(2,2)'      237  917  238  918  666  257
+CONVEX 299    'GT_PK(2,2)'      237  917  238  916  919  218
+CONVEX 300    'GT_PK(2,2)'      237  920  236  915  681  217
+CONVEX 301    'GT_PK(2,2)'      237  918  257  921  488  256
+CONVEX 302    'GT_PK(2,2)'      237  920  236  921  679  256
+CONVEX 303    'GT_PK(2,2)'      199  922  218  923  659  198
+CONVEX 304    'GT_PK(2,2)'      199  924  179  923  565  198
+CONVEX 305    'GT_PK(2,2)'      199  924  179  925  926  180
+CONVEX 306    'GT_PK(2,2)'      199  927  200  925  662  180
+CONVEX 307    'GT_PK(2,2)'      219  928  239  929  930  220
+CONVEX 308    'GT_PK(2,2)'      219  931  238  928  670  239
+CONVEX 309    'GT_PK(2,2)'      219  932  200  929  664  220
+CONVEX 310    'GT_PK(2,2)'      219  931  238  933  919  218
+CONVEX 311    'GT_PK(2,2)'      219  934  199  933  922  218
+CONVEX 312    'GT_PK(2,2)'      219  934  199  932  927  200
+CONVEX 313    'GT_PK(2,2)'      312  935  329  936  912  328
+CONVEX 314    'GT_PK(2,2)'      312  937  311  936  906  328
+CONVEX 315    'GT_PK(2,2)'      312  937  311  938  908  294
+CONVEX 316    'GT_PK(2,2)'      235  939  236  940  682  216
+CONVEX 317    'GT_PK(2,2)'      235  939  236  941  678  255
+CONVEX 318    'GT_PK(2,2)'      235  942  215  940  611  216
+CONVEX 319    'GT_PK(2,2)'      235  942  215  943  834  234
+CONVEX 320    'GT_PK(2,2)'      235  944  254  943  945  234
+CONVEX 321    'GT_PK(2,2)'      235  944  254  941  946  255
+CONVEX 322    'GT_PK(2,2)'      265  947  264  948  801  283
+CONVEX 323    'GT_PK(2,2)'      265  947  264  949  594  245
+CONVEX 324    'GT_PK(2,2)'      333  950  334  951  699  346
+CONVEX 325    'GT_PK(2,2)'      333  952  345  951  701  346
+CONVEX 326    'GT_PK(2,2)'      332  953  317  954  410  331
+CONVEX 327    'GT_PK(2,2)'      332  955  318  953  956  317
+CONVEX 328    'GT_PK(2,2)'      332  957  344  954  534  331
+CONVEX 329    'GT_PK(2,2)'      332  958  333  955  959  318
+CONVEX 330    'GT_PK(2,2)'      332  958  333  960  952  345
+CONVEX 331    'GT_PK(2,2)'      332  961  355  957  962  344
+CONVEX 332    'GT_PK(2,2)'      332  960  345  961  702  355
+CONVEX 333    'GT_PK(2,2)'      335  963  334  964  698  347
+CONVEX 334    'GT_PK(2,2)'      335  965  336  966  967  321
+CONVEX 335    'GT_PK(2,2)'      322  968  323  969  718  306
+CONVEX 336    'GT_PK(2,2)'      322  968  323  970  712  337
+CONVEX 337    'GT_PK(2,2)'      322  971  336  972  967  321
+CONVEX 338    'GT_PK(2,2)'      322  971  336  970  709  337
+CONVEX 339    'GT_PK(2,2)'      250  973  270  974  975  251
+CONVEX 340    'GT_PK(2,2)'      289  976  307  977  714  290
+CONVEX 341    'GT_PK(2,2)'      289  976  307  978  717  306
+CONVEX 342    'GT_PK(2,2)'      305  979  322  980  972  321
+CONVEX 343    'GT_PK(2,2)'      305  979  322  981  969  306
+CONVEX 344    'GT_PK(2,2)'      274  982  275  983  685  255
+CONVEX 345    'GT_PK(2,2)'      274  984  254  983  946  255
+CONVEX 346    'GT_PK(2,2)'      274  982  275  985  688  293
+CONVEX 347    'GT_PK(2,2)'      274  985  293  986  987  292
+CONVEX 348    'GT_PK(2,2)'      273  988  291  989  499  292
+CONVEX 349    'GT_PK(2,2)'      273  990  272  988  719  291
+CONVEX 350    'GT_PK(2,2)'      273  991  274  989  986  292
+CONVEX 351    'GT_PK(2,2)'      273  991  274  992  984  254
+CONVEX 352    'GT_PK(2,2)'      170  993  169  994  722  150
+CONVEX 353    'GT_PK(2,2)'      170  993  169  995  996  189
+CONVEX 354    'GT_PK(2,2)'      170  997  171  998  510  190
+CONVEX 355    'GT_PK(2,2)'      170  995  189  998  697  190
+CONVEX 356    'GT_PK(2,2)'      188  999  189  1000  695  208
+CONVEX 357    'GT_PK(2,2)'      188  1001  169  999  996  189
+CONVEX 358    'GT_PK(2,2)'      188  1000  208  1002  1003  207
+CONVEX 359    'GT_PK(2,2)'      188  1004  187  1002  1005  207
+CONVEX 360    'GT_PK(2,2)'      188  1004  187  1006  579  168
+CONVEX 361    'GT_PK(2,2)'      188  1001  169  1006  723  168
+CONVEX 362    'GT_PK(2,2)'      48  1007  63  1008  734  64
+CONVEX 363    'GT_PK(2,2)'      48  1009  49  1008  1010  64
+CONVEX 364    'GT_PK(2,2)'      48  1011  33  1012  1013  47
+CONVEX 365    'GT_PK(2,2)'      48  1007  63  1012  729  47
+CONVEX 366    'GT_PK(2,2)'      48  1011  33  1014  740  34
+CONVEX 367    'GT_PK(2,2)'      48  1009  49  1014  744  34
+CONVEX 368    'GT_PK(2,2)'      20  1015  21  1016  736  11
+CONVEX 369    'GT_PK(2,2)'      20  1017  10  1016  1018  11
+CONVEX 370    'GT_PK(2,2)'      20  1019  19  1017  516  10
+CONVEX 371    'GT_PK(2,2)'      20  1015  21  1020  738  33
+CONVEX 372    'GT_PK(2,2)'      65  1021  49  1022  1010  64
+CONVEX 373    'GT_PK(2,2)'      65  1022  64  1023  512  81
+CONVEX 374    'GT_PK(2,2)'      65  1024  66  1025  853  50
+CONVEX 375    'GT_PK(2,2)'      65  1021  49  1025  745  50
+CONVEX 376    'GT_PK(2,2)'      65  1023  81  1026  617  82
+CONVEX 377    'GT_PK(2,2)'      65  1024  66  1026  850  82
+CONVEX 378    'GT_PK(2,2)'      139  1027  120  1028  1029  119
+CONVEX 379    'GT_PK(2,2)'      140  1030  139  1031  1032  159
+CONVEX 380    'GT_PK(2,2)'      140  1030  139  1033  1027  120
+CONVEX 381    'GT_PK(2,2)'      140  1034  121  1035  866  141
+CONVEX 382    'GT_PK(2,2)'      140  1034  121  1033  864  120
+CONVEX 383    'GT_PK(2,2)'      160  1036  159  1037  756  179
+CONVEX 384    'GT_PK(2,2)'      160  1038  180  1039  370  161
+CONVEX 385    'GT_PK(2,2)'      160  1037  179  1038  926  180
+CONVEX 386    'GT_PK(2,2)'      160  1040  140  1036  1031  159
+CONVEX 387    'GT_PK(2,2)'      160  1041  141  1039  390  161
+CONVEX 388    'GT_PK(2,2)'      160  1040  140  1041  1035  141
+CONVEX 389    'GT_PK(2,2)'      186  1042  187  1043  578  167
+CONVEX 390    'GT_PK(2,2)'      164  1044  144  1045  607  163
+CONVEX 391    'GT_PK(2,2)'      147  1046  127  1047  380  128
+CONVEX 392    'GT_PK(2,2)'      147  1048  148  1047  763  128
+CONVEX 393    'GT_PK(2,2)'      147  1048  148  1049  639  167
+CONVEX 394    'GT_PK(2,2)'      78  1050  95  1051  789  96
+CONVEX 395    'GT_PK(2,2)'      78  1052  77  1050  886  95
+CONVEX 396    'GT_PK(2,2)'      78  1051  96  1053  782  79
+CONVEX 397    'GT_PK(2,2)'      78  1054  62  1053  731  79
+CONVEX 398    'GT_PK(2,2)'      78  1054  62  1055  651  61
+CONVEX 399    'GT_PK(2,2)'      78  1052  77  1055  880  61
+CONVEX 400    'GT_PK(2,2)'      115  1056  116  1057  582  135
+CONVEX 401    'GT_PK(2,2)'      115  1058  114  1059  788  96
+CONVEX 402    'GT_PK(2,2)'      115  1060  97  1059  781  96
+CONVEX 403    'GT_PK(2,2)'      115  1060  97  1056  841  116
+CONVEX 404    'GT_PK(2,2)'      134  1061  133  1062  1063  153
+CONVEX 405    'GT_PK(2,2)'      134  1064  114  1061  783  133
+CONVEX 406    'GT_PK(2,2)'      134  1065  115  1064  1058  114
+CONVEX 407    'GT_PK(2,2)'      134  1065  115  1066  1057  135
+CONVEX 408    'GT_PK(2,2)'      134  1067  154  1066  589  135
+CONVEX 409    'GT_PK(2,2)'      134  1067  154  1062  585  153
+CONVEX 410    'GT_PK(2,2)'      151  1068  132  1069  1070  131
+CONVEX 411    'GT_PK(2,2)'      151  1069  131  1071  445  150
+CONVEX 412    'GT_PK(2,2)'      151  1072  170  1071  994  150
+CONVEX 413    'GT_PK(2,2)'      151  1072  170  1073  997  171
+CONVEX 414    'GT_PK(2,2)'      152  1074  172  1075  592  171
+CONVEX 415    'GT_PK(2,2)'      152  1076  151  1075  1073  171
+CONVEX 416    'GT_PK(2,2)'      152  1076  151  1077  1068  132
+CONVEX 417    'GT_PK(2,2)'      152  1077  132  1078  790  133
+CONVEX 418    'GT_PK(2,2)'      152  1078  133  1079  1063  153
+CONVEX 419    'GT_PK(2,2)'      152  1074  172  1079  590  153
+CONVEX 420    'GT_PK(2,2)'      242  1080  222  1081  1082  223
+CONVEX 421    'GT_PK(2,2)'      242  1083  261  1084  1085  262
+CONVEX 422    'GT_PK(2,2)'      242  1086  243  1081  1087  223
+CONVEX 423    'GT_PK(2,2)'      242  1086  243  1084  810  262
+CONVEX 424    'GT_PK(2,2)'      280  1088  261  1089  805  279
+CONVEX 425    'GT_PK(2,2)'      280  1090  298  1091  597  297
+CONVEX 426    'GT_PK(2,2)'      280  1089  279  1091  1092  297
+CONVEX 427    'GT_PK(2,2)'      280  1090  298  1093  602  281
+CONVEX 428    'GT_PK(2,2)'      280  1094  262  1093  796  281
+CONVEX 429    'GT_PK(2,2)'      280  1088  261  1094  1085  262
+CONVEX 430    'GT_PK(2,2)'      176  1095  156  1096  819  175
+CONVEX 431    'GT_PK(2,2)'      176  1097  195  1098  614  196
+CONVEX 432    'GT_PK(2,2)'      176  1096  175  1097  1099  195
+CONVEX 433    'GT_PK(2,2)'      252  1100  232  1101  1102  251
+CONVEX 434    'GT_PK(2,2)'      231  1103  232  1104  1102  251
+CONVEX 435    'GT_PK(2,2)'      231  1105  250  1104  974  251
+CONVEX 436    'GT_PK(2,2)'      212  1106  232  1107  1108  213
+CONVEX 437    'GT_PK(2,2)'      212  1109  192  1110  823  211
+CONVEX 438    'GT_PK(2,2)'      212  1111  231  1110  1112  211
+CONVEX 439    'GT_PK(2,2)'      212  1111  231  1106  1103  232
+CONVEX 440    'GT_PK(2,2)'      193  1113  174  1114  828  173
+CONVEX 441    'GT_PK(2,2)'      193  1115  212  1116  1107  213
+CONVEX 442    'GT_PK(2,2)'      193  1117  192  1114  826  173
+CONVEX 443    'GT_PK(2,2)'      193  1115  212  1117  1109  192
+CONVEX 444    'GT_PK(2,2)'      194  1118  214  1119  832  195
+CONVEX 445    'GT_PK(2,2)'      194  1120  175  1119  1099  195
+CONVEX 446    'GT_PK(2,2)'      194  1121  174  1120  830  175
+CONVEX 447    'GT_PK(2,2)'      194  1118  214  1122  1123  213
+CONVEX 448    'GT_PK(2,2)'      194  1124  193  1122  1116  213
+CONVEX 449    'GT_PK(2,2)'      194  1124  193  1121  1113  174
+CONVEX 450    'GT_PK(2,2)'      101  1125  102  1126  865  120
+CONVEX 451    'GT_PK(2,2)'      101  1126  120  1127  1029  119
+CONVEX 452    'GT_PK(2,2)'      101  1128  100  1127  627  119
+CONVEX 453    'GT_PK(2,2)'      101  1129  83  1128  848  100
+CONVEX 454    'GT_PK(2,2)'      59  1130  58  1131  872  75
+CONVEX 455    'GT_PK(2,2)'      59  1130  58  1132  1133  43
+CONVEX 456    'GT_PK(2,2)'      59  1131  75  1134  645  76
+CONVEX 457    'GT_PK(2,2)'      59  1135  60  1134  878  76
+CONVEX 458    'GT_PK(2,2)'      16  1136  29  1137  873  17
+CONVEX 459    'GT_PK(2,2)'      16  1138  15  1139  446  6
+CONVEX 460    'GT_PK(2,2)'      16  1140  28  1138  891  15
+CONVEX 461    'GT_PK(2,2)'      16  1140  28  1136  893  29
+CONVEX 462    'GT_PK(2,2)'      16  1137  17  1141  392  7
+CONVEX 463    'GT_PK(2,2)'      16  1139  6  1141  1142  7
+CONVEX 464    'GT_PK(2,2)'      44  1143  60  1144  875  45
+CONVEX 465    'GT_PK(2,2)'      44  1145  29  1146  895  43
+CONVEX 466    'GT_PK(2,2)'      44  1147  59  1146  1132  43
+CONVEX 467    'GT_PK(2,2)'      44  1147  59  1143  1135  60
+CONVEX 468    'GT_PK(2,2)'      44  1144  45  1148  901  30
+CONVEX 469    'GT_PK(2,2)'      44  1145  29  1148  874  30
+CONVEX 470    'GT_PK(2,2)'      112  1149  94  1150  882  113
+CONVEX 471    'GT_PK(2,2)'      112  1151  132  1150  791  113
+CONVEX 472    'GT_PK(2,2)'      112  1151  132  1152  1070  131
+CONVEX 473    'GT_PK(2,2)'      112  1149  94  1153  883  93
+CONVEX 474    'GT_PK(2,2)'      112  1154  111  1152  767  131
+CONVEX 475    'GT_PK(2,2)'      112  1154  111  1153  772  93
+CONVEX 476    'GT_PK(2,2)'      26  1155  41  1156  1157  27
+CONVEX 477    'GT_PK(2,2)'      26  1158  14  1159  1160  13
+CONVEX 478    'GT_PK(2,2)'      26  1158  14  1156  898  27
+CONVEX 479    'GT_PK(2,2)'      26  1155  41  1161  888  40
+CONVEX 480    'GT_PK(2,2)'      26  1162  25  1161  404  40
+CONVEX 481    'GT_PK(2,2)'      26  1159  13  1162  1163  25
+CONVEX 482    'GT_PK(2,2)'      42  1164  41  1165  1157  27
+CONVEX 483    'GT_PK(2,2)'      42  1166  28  1165  890  27
+CONVEX 484    'GT_PK(2,2)'      42  1164  41  1167  889  57
+CONVEX 485    'GT_PK(2,2)'      42  1168  58  1167  871  57
+CONVEX 486    'GT_PK(2,2)'      42  1168  58  1169  1133  43
+CONVEX 487    'GT_PK(2,2)'      42  1166  28  1169  894  43
+CONVEX 488    'GT_PK(2,2)'      310  1170  327  1171  656  326
+CONVEX 489    'GT_PK(2,2)'      310  1172  311  1170  905  327
+CONVEX 490    'GT_PK(2,2)'      310  1173  309  1171  396  326
+CONVEX 491    'GT_PK(2,2)'      310  1173  309  1174  500  292
+CONVEX 492    'GT_PK(2,2)'      310  1175  293  1174  987  292
+CONVEX 493    'GT_PK(2,2)'      310  1172  311  1175  909  293
+CONVEX 494    'GT_PK(2,2)'      313  1176  312  1177  935  329
+CONVEX 495    'GT_PK(2,2)'      295  1178  277  1179  676  296
+CONVEX 496    'GT_PK(2,2)'      295  1180  313  1179  1181  296
+CONVEX 497    'GT_PK(2,2)'      295  1180  313  1182  1176  312
+CONVEX 498    'GT_PK(2,2)'      295  1182  312  1183  938  294
+CONVEX 499    'GT_PK(2,2)'      295  1183  294  1184  687  276
+CONVEX 500    'GT_PK(2,2)'      295  1178  277  1184  674  276
+CONVEX 501    'GT_PK(2,2)'      284  1185  265  1186  948  283
+CONVEX 502    'GT_PK(2,2)'      284  1185  265  1187  1188  266
+CONVEX 503    'GT_PK(2,2)'      319  1189  333  1190  950  334
+CONVEX 504    'GT_PK(2,2)'      319  1191  302  1192  1193  318
+CONVEX 505    'GT_PK(2,2)'      319  1189  333  1192  959  318
+CONVEX 506    'GT_PK(2,2)'      227  1194  208  1195  1003  207
+CONVEX 507    'GT_PK(2,2)'      227  1196  226  1195  1197  207
+CONVEX 508    'GT_PK(2,2)'      246  1198  265  1199  1188  266
+CONVEX 509    'GT_PK(2,2)'      246  1200  247  1199  1201  266
+CONVEX 510    'GT_PK(2,2)'      246  1198  265  1202  949  245
+CONVEX 511    'GT_PK(2,2)'      246  1203  227  1200  1204  247
+CONVEX 512    'GT_PK(2,2)'      246  1205  226  1202  1206  245
+CONVEX 513    'GT_PK(2,2)'      246  1203  227  1205  1196  226
+CONVEX 514    'GT_PK(2,2)'      348  1207  335  1208  964  347
+CONVEX 515    'GT_PK(2,2)'      348  1209  358  1210  371  359
+CONVEX 516    'GT_PK(2,2)'      348  1208  347  1209  489  358
+CONVEX 517    'GT_PK(2,2)'      348  1207  335  1211  965  336
+CONVEX 518    'GT_PK(2,2)'      348  1212  349  1210  707  359
+CONVEX 519    'GT_PK(2,2)'      348  1212  349  1211  708  336
+CONVEX 520    'GT_PK(2,2)'      230  1213  211  1214  433  210
+CONVEX 521    'GT_PK(2,2)'      230  1215  229  1214  692  210
+CONVEX 522    'GT_PK(2,2)'      230  1216  231  1213  1112  211
+CONVEX 523    'GT_PK(2,2)'      230  1216  231  1217  1105  250
+CONVEX 524    'GT_PK(2,2)'      271  1218  289  1219  1220  270
+CONVEX 525    'GT_PK(2,2)'      271  1219  270  1221  975  251
+CONVEX 526    'GT_PK(2,2)'      271  1222  272  1223  720  290
+CONVEX 527    'GT_PK(2,2)'      271  1218  289  1223  977  290
+CONVEX 528    'GT_PK(2,2)'      271  1224  252  1221  1101  251
+CONVEX 529    'GT_PK(2,2)'      271  1224  252  1222  1225  272
+CONVEX 530    'GT_PK(2,2)'      288  1226  289  1227  1220  270
+CONVEX 531    'GT_PK(2,2)'      288  1226  289  1228  978  306
+CONVEX 532    'GT_PK(2,2)'      288  1229  305  1228  981  306
+CONVEX 533    'GT_PK(2,2)'      32  1230  20  1231  1020  33
+CONVEX 534    'GT_PK(2,2)'      32  1232  31  1233  902  46
+CONVEX 535    'GT_PK(2,2)'      32  1232  31  1234  904  19
+CONVEX 536    'GT_PK(2,2)'      32  1230  20  1234  1019  19
+CONVEX 537    'GT_PK(2,2)'      32  1231  33  1235  1013  47
+CONVEX 538    'GT_PK(2,2)'      32  1233  46  1235  652  47
+CONVEX 539    'GT_PK(2,2)'      206  1236  187  1237  1005  207
+CONVEX 540    'GT_PK(2,2)'      206  1238  186  1236  1042  187
+CONVEX 541    'GT_PK(2,2)'      206  1239  226  1237  1197  207
+CONVEX 542    'GT_PK(2,2)'      184  1240  204  1241  1242  185
+CONVEX 543    'GT_PK(2,2)'      145  1243  164  1244  1044  144
+CONVEX 544    'GT_PK(2,2)'      145  1245  126  1246  553  125
+CONVEX 545    'GT_PK(2,2)'      145  1244  144  1246  610  125
+CONVEX 546    'GT_PK(2,2)'      183  1247  163  1248  430  182
+CONVEX 547    'GT_PK(2,2)'      183  1249  164  1247  1045  163
+CONVEX 548    'GT_PK(2,2)'      183  1250  184  1249  1251  164
+CONVEX 549    'GT_PK(2,2)'      183  1252  202  1248  605  182
+CONVEX 550    'GT_PK(2,2)'      241  1253  240  1254  815  222
+CONVEX 551    'GT_PK(2,2)'      241  1255  242  1254  1080  222
+CONVEX 552    'GT_PK(2,2)'      241  1255  242  1256  1083  261
+CONVEX 553    'GT_PK(2,2)'      241  1253  240  1257  1258  260
+CONVEX 554    'GT_PK(2,2)'      241  1256  261  1257  806  260
+CONVEX 555    'GT_PK(2,2)'      177  1259  197  1260  505  196
+CONVEX 556    'GT_PK(2,2)'      177  1261  176  1260  1098  196
+CONVEX 557    'GT_PK(2,2)'      177  1259  197  1262  507  178
+CONVEX 558    'GT_PK(2,2)'      233  1263  252  1264  1100  232
+CONVEX 559    'GT_PK(2,2)'      233  1264  232  1265  1108  213
+CONVEX 560    'GT_PK(2,2)'      233  1266  214  1267  833  234
+CONVEX 561    'GT_PK(2,2)'      233  1266  214  1265  1123  213
+CONVEX 562    'GT_PK(2,2)'      253  1268  273  1269  990  272
+CONVEX 563    'GT_PK(2,2)'      253  1270  252  1269  1225  272
+CONVEX 564    'GT_PK(2,2)'      253  1268  273  1271  992  254
+CONVEX 565    'GT_PK(2,2)'      253  1272  233  1270  1263  252
+CONVEX 566    'GT_PK(2,2)'      253  1271  254  1273  945  234
+CONVEX 567    'GT_PK(2,2)'      253  1272  233  1273  1267  234
+CONVEX 568    'GT_PK(2,2)'      84  1274  101  1275  1125  102
+CONVEX 569    'GT_PK(2,2)'      84  1276  68  1277  844  67
+CONVEX 570    'GT_PK(2,2)'      84  1278  83  1277  846  67
+CONVEX 571    'GT_PK(2,2)'      84  1274  101  1278  1129  83
+CONVEX 572    'GT_PK(2,2)'      84  1276  68  1279  1280  85
+CONVEX 573    'GT_PK(2,2)'      84  1275  102  1279  862  85
+CONVEX 574    'GT_PK(2,2)'      301  1281  284  1282  1186  283
+CONVEX 575    'GT_PK(2,2)'      301  1281  284  1283  1284  302
+CONVEX 576    'GT_PK(2,2)'      301  1285  300  1282  804  283
+CONVEX 577    'GT_PK(2,2)'      301  1285  300  1286  538  317
+CONVEX 578    'GT_PK(2,2)'      301  1287  318  1286  956  317
+CONVEX 579    'GT_PK(2,2)'      301  1283  302  1287  1193  318
+CONVEX 580    'GT_PK(2,2)'      320  1288  335  1289  966  321
+CONVEX 581    'GT_PK(2,2)'      320  1288  335  1290  963  334
+CONVEX 582    'GT_PK(2,2)'      320  1291  319  1290  1190  334
+CONVEX 583    'GT_PK(2,2)'      228  1292  227  1293  1204  247
+CONVEX 584    'GT_PK(2,2)'      228  1294  209  1295  690  229
+CONVEX 585    'GT_PK(2,2)'      228  1294  209  1296  694  208
+CONVEX 586    'GT_PK(2,2)'      228  1292  227  1296  1194  208
+CONVEX 587    'GT_PK(2,2)'      269  1297  250  1298  973  270
+CONVEX 588    'GT_PK(2,2)'      269  1299  288  1298  1227  270
+CONVEX 589    'GT_PK(2,2)'      225  1300  206  1301  1239  226
+CONVEX 590    'GT_PK(2,2)'      225  1302  245  1303  596  244
+CONVEX 591    'GT_PK(2,2)'      225  1301  226  1302  1206  245
+CONVEX 592    'GT_PK(2,2)'      166  1304  147  1305  1049  167
+CONVEX 593    'GT_PK(2,2)'      166  1306  186  1305  1043  167
+CONVEX 594    'GT_PK(2,2)'      166  1306  186  1307  1308  185
+CONVEX 595    'GT_PK(2,2)'      203  1309  184  1310  1240  204
+CONVEX 596    'GT_PK(2,2)'      203  1311  183  1309  1250  184
+CONVEX 597    'GT_PK(2,2)'      203  1310  204  1312  1313  223
+CONVEX 598    'GT_PK(2,2)'      203  1311  183  1314  1252  202
+CONVEX 599    'GT_PK(2,2)'      203  1315  222  1312  1082  223
+CONVEX 600    'GT_PK(2,2)'      203  1314  202  1315  816  222
+CONVEX 601    'GT_PK(2,2)'      138  1316  137  1317  633  118
+CONVEX 602    'GT_PK(2,2)'      138  1317  118  1318  628  119
+CONVEX 603    'GT_PK(2,2)'      138  1319  139  1318  1028  119
+CONVEX 604    'GT_PK(2,2)'      157  1320  176  1321  1095  156
+CONVEX 605    'GT_PK(2,2)'      157  1322  177  1320  1261  176
+CONVEX 606    'GT_PK(2,2)'      157  1321  156  1323  821  137
+CONVEX 607    'GT_PK(2,2)'      157  1324  138  1323  1316  137
+CONVEX 608    'GT_PK(2,2)'      249  1325  269  1326  1297  250
+CONVEX 609    'GT_PK(2,2)'      249  1327  230  1328  1215  229
+CONVEX 610    'GT_PK(2,2)'      249  1327  230  1326  1217  250
+CONVEX 611    'GT_PK(2,2)'      287  1329  288  1330  1229  305
+CONVEX 612    'GT_PK(2,2)'      287  1331  269  1329  1299  288
+CONVEX 613    'GT_PK(2,2)'      224  1332  243  1333  1087  223
+CONVEX 614    'GT_PK(2,2)'      224  1334  204  1333  1313  223
+CONVEX 615    'GT_PK(2,2)'      224  1332  243  1335  809  244
+CONVEX 616    'GT_PK(2,2)'      224  1336  225  1335  1303  244
+CONVEX 617    'GT_PK(2,2)'      205  1337  206  1338  1238  186
+CONVEX 618    'GT_PK(2,2)'      205  1339  225  1337  1300  206
+CONVEX 619    'GT_PK(2,2)'      205  1338  186  1340  1308  185
+CONVEX 620    'GT_PK(2,2)'      205  1341  224  1339  1336  225
+CONVEX 621    'GT_PK(2,2)'      205  1342  204  1340  1242  185
+CONVEX 622    'GT_PK(2,2)'      205  1341  224  1342  1334  204
+CONVEX 623    'GT_PK(2,2)'      146  1343  166  1344  1304  147
+CONVEX 624    'GT_PK(2,2)'      146  1344  147  1345  1046  127
+CONVEX 625    'GT_PK(2,2)'      146  1346  126  1345  423  127
+CONVEX 626    'GT_PK(2,2)'      146  1347  145  1346  1245  126
+CONVEX 627    'GT_PK(2,2)'      165  1348  184  1349  1251  164
+CONVEX 628    'GT_PK(2,2)'      165  1350  145  1349  1243  164
+CONVEX 629    'GT_PK(2,2)'      165  1348  184  1351  1241  185
+CONVEX 630    'GT_PK(2,2)'      165  1352  166  1351  1307  185
+CONVEX 631    'GT_PK(2,2)'      165  1353  146  1350  1347  145
+CONVEX 632    'GT_PK(2,2)'      165  1353  146  1352  1343  166
+CONVEX 633    'GT_PK(2,2)'      158  1354  157  1355  1322  177
+CONVEX 634    'GT_PK(2,2)'      158  1356  159  1357  757  178
+CONVEX 635    'GT_PK(2,2)'      158  1355  177  1357  1262  178
+CONVEX 636    'GT_PK(2,2)'      158  1354  157  1358  1324  138
+CONVEX 637    'GT_PK(2,2)'      158  1359  139  1356  1032  159
+CONVEX 638    'GT_PK(2,2)'      158  1358  138  1359  1319  139
+CONVEX 639    'GT_PK(2,2)'      267  1360  247  1361  1201  266
+CONVEX 640    'GT_PK(2,2)'      248  1362  249  1363  1328  229
+CONVEX 641    'GT_PK(2,2)'      248  1364  267  1365  1360  247
+CONVEX 642    'GT_PK(2,2)'      248  1366  228  1363  1295  229
+CONVEX 643    'GT_PK(2,2)'      248  1366  228  1365  1293  247
+CONVEX 644    'GT_PK(2,2)'      268  1367  287  1368  1331  269
+CONVEX 645    'GT_PK(2,2)'      268  1369  248  1370  1364  267
+CONVEX 646    'GT_PK(2,2)'      268  1371  249  1368  1325  269
+CONVEX 647    'GT_PK(2,2)'      268  1369  248  1371  1362  249
+CONVEX 648    'GT_PK(2,2)'      303  1372  319  1373  1191  302
+CONVEX 649    'GT_PK(2,2)'      303  1374  320  1372  1291  319
+CONVEX 650    'GT_PK(2,2)'      286  1375  268  1376  1367  287
+CONVEX 651    'GT_PK(2,2)'      286  1375  268  1377  1370  267
+CONVEX 652    'GT_PK(2,2)'      304  1378  287  1379  1330  305
+CONVEX 653    'GT_PK(2,2)'      304  1380  303  1381  1374  320
+CONVEX 654    'GT_PK(2,2)'      304  1382  286  1378  1376  287
+CONVEX 655    'GT_PK(2,2)'      304  1382  286  1380  1383  303
+CONVEX 656    'GT_PK(2,2)'      304  1379  305  1384  980  321
+CONVEX 657    'GT_PK(2,2)'      304  1381  320  1384  1289  321
+CONVEX 658    'GT_PK(2,2)'      285  1385  286  1386  1383  303
+CONVEX 659    'GT_PK(2,2)'      285  1387  284  1388  1284  302
+CONVEX 660    'GT_PK(2,2)'      285  1386  303  1388  1373  302
+CONVEX 661    'GT_PK(2,2)'      285  1385  286  1389  1377  267
+CONVEX 662    'GT_PK(2,2)'      285  1387  284  1390  1187  266
+CONVEX 663    'GT_PK(2,2)'      285  1389  267  1390  1361  266
 
 END MESH STRUCTURE DESCRIPTION
diff --git a/interface/src/scilab/demos/demo_bilaplacian.sce b/interface/src/scilab/demos/demo_bilaplacian.sce
index 6c0601d..8503e45 100644
--- a/interface/src/scilab/demos/demo_bilaplacian.sce
+++ b/interface/src/scilab/demos/demo_bilaplacian.sce
@@ -1,18 +1,28 @@
 lines(0);
 stacksize('max');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 printf("demo bilaplacian started\n");
 
 N  = 2;
 NX = 10;
-NY = 10;
+NY = 14;
+
+m=gf_mesh('regular simplices',0:0.4/NX:0.4, 0:1.2/NY:1.2);
+// m=gf_mesh('cartesian',0:1/NX:1, 0:1/NY:1);
+// m=gf_mesh('cartesian',0:0.4/NX:0.4, 0:1.2/NY:1.2);
 
-//m = gf_mesh('regular simplices',0:1/NX:1, 0:1/NY:1);
-m = gf_mesh('cartesian',0:1/NX:1, 0:1/NY:1);
 
-useKL = 0; // use the Kirchhoff-Love plate model, or just a pure
+useKL = 1; // use the Kirchhoff-Love plate model, or just a pure
            // bilaplacian problem
 
 D = 1.0;   // Flexion modulus
@@ -24,13 +34,13 @@ mim = gf_mesh_im(m);
 mfu = gf_mesh_fem(m); 
 mfd = gf_mesh_fem(m);
 
-//gf_mesh_im_set(mim, 'integ',gf_integ('IM_TRIANGLE(13)'));
-//gf_mesh_fem_set(mfu, 'fem',gf_fem('FEM_ARGYRIS'));
-//gf_mesh_fem_set(mfd, 'fem',gf_fem('FEM_PK(2,5)'));
+gf_mesh_im_set(mim, 'integ',gf_integ('IM_TRIANGLE(13)'));
+gf_mesh_fem_set(mfu, 'fem',gf_fem('FEM_ARGYRIS'));
+gf_mesh_fem_set(mfd, 'fem',gf_fem('FEM_PK(2,5)'));
 
-gf_mesh_im_set(mim, 'integ',gf_integ('IM_GAUSS_PARALLELEPIPED(2,10)'));
-gf_mesh_fem_set(mfu, 'fem',gf_fem('FEM_REDUCED_QUADC1_COMPOSITE'));
-gf_mesh_fem_set(mfd, 'fem',gf_fem('FEM_QK(2,3)'));
+//gf_mesh_im_set(mim, 'integ',gf_integ('IM_GAUSS_PARALLELEPIPED(2,10)'));
+//gf_mesh_fem_set(mfu, 'fem',gf_fem('FEM_REDUCED_QUADC1_COMPOSITE'));
+//gf_mesh_fem_set(mfd, 'fem',gf_fem('FEM_QK(2,3)'));
 
 flst = gf_mesh_get(m, 'outer_faces');
 n    = gf_mesh_get(m, 'normal of faces', flst);
@@ -46,13 +56,13 @@ SIMPLE_SUPPORT_BOUNDARY = 3;
 CLAMPED_BOUNDARY        = 4;
 
 gf_mesh_set(m, 'region', FORCE_BOUNDARY, fright);
-gf_mesh_set(m, 'region', SIMPLE_SUPPORT_BOUNDARY, [ftop fbottom fleft]);
-gf_mesh_set(m, 'region', CLAMPED_BOUNDARY, [fleft fright]);
+gf_mesh_set(m, 'region', SIMPLE_SUPPORT_BOUNDARY, [fleft ftop fbottom]);
+gf_mesh_set(m, 'region', CLAMPED_BOUNDARY, [fleft ftop fbottom]);
 gf_mesh_set(m, 'region', MOMENTUM_BOUNDARY, [ftop fbottom]);
 
-FT = 10.;
+FT = 2.;
 sol_u = gf_mesh_fem_get_eval(mfd,list(list(sprintf('sin(%g*(x+y))',FT))));
-sol_f = sol_u*FT*FT*FT*FT*N*N;
+sol_f = sol_u*FT*FT*FT*FT*N*N*D;
 sol_lapl_u = -FT*FT*sol_u*N;
 
 if (newbricks) then // uses new bricks
@@ -61,7 +71,7 @@ if (newbricks) then // uses new bricks
 
   if useKL
     gf_model_set(md, 'add initialized data', 'D', [D]);
-    gf_model_set(md, 'add initialized data', 'nu', [nu]);
+    gf_model_set(md, 'add initialized data', 'nu', [NU]);
     gf_model_set(md, 'add Kirchhoff-Love plate brick', mim, 'u', 'D', 'nu');
     M = zeros(N,N, gf_mesh_fem_get(mfd,'nbdof'));
   else
@@ -84,7 +94,7 @@ if (newbricks) then // uses new bricks
     gf_model_set(md, 'add initialized fem data', 'H', mfd, H);
     gf_model_set(md, 'add initialized fem data', 'F', mfd, F);
     gf_model_set(md, 'add Kirchhoff-Love Neumann term brick', mim, 'u', ...
-		 H, F, FORCE_BOUNDARY);
+		 'H', 'F', FORCE_BOUNDARY);
   else
     F = zeros(1, N, gf_mesh_fem_get(mfd, 'nbdof'));
     gf_model_set(md, 'add initialized fem data', 'F', mfd, F);
@@ -108,7 +118,7 @@ else // uses old bricks
     b0 = gf_mdbrick('bilaplacian', mim, mfu, 'Kirchhoff-Love')
     gf_mdbrick_set(b0, 'param','D', D);
     gf_mdbrick_set(b0, 'param','nu', NU);
-    M = zeros(N,N, gf_mesh_fem_get(mfd,'nbdof'));
+    M = zeros(1, gf_mesh_fem_get(mfd,'nbdof'));
   else
     b0 = gf_mdbrick('bilaplacian', mim, mfu);
     gf_mdbrick_set(b0, 'param','D', D);
@@ -122,7 +132,7 @@ else // uses old bricks
   gf_mdbrick_set(b2, 'param', 'source_term', mfd,M);
 
   if (useKL) then
-    H = zeros(N, N, gf_mesh_fem_get(mfd, 'nbdof'));
+    H = zeros(N*N, gf_mesh_fem_get(mfd, 'nbdof'));
     F = zeros(N, gf_mesh_fem_get(mfd, 'nbdof'));
     b3 = gf_mdbrick('neumann Kirchhoff-Love source term',b2,FORCE_BOUNDARY);
     gf_mdbrick_set(b3, 'param', 'M', mfd, H);
diff --git a/interface/src/scilab/demos/demo_continuation.sce b/interface/src/scilab/demos/demo_continuation.sce
new file mode 100644
index 0000000..ac52b13
--- /dev/null
+++ b/interface/src/scilab/demos/demo_continuation.sce
@@ -0,0 +1,151 @@
+// Scilab GetFEM++ interface
+// Copyright (C) 2011-2011 Tomas Ligursky, Yves Renard.
+//
+// This file is a part of GetFEM++
+//
+// GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+// under  the  terms  of the  GNU  Lesser General Public License as published
+// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
+// License for more details.
+// You  should  have received a copy of the GNU Lesser General Public License
+// along  with  this program;  if not, write to the Free Software Foundation,
+// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+//
+// Simple example of the bifurcation problem: -Delta(u) + u = lambda exp(u)
+//
+// This program is used to check that scilab-getfem is working. This is also
+// a good example of use of GetFEM++.
+//
+
+lines(0);
+stacksize('max');
+
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
+gf_workspace('clear all');
+lambda = 0;
+direction = 1;
+nbstep = 80;
+
+maxit = 5;
+thrit = 4;
+minang = 0.993;
+maxres_solve = 1.e-7;
+noisy = 'very_noisy';
+
+h_init = 1e-3;
+h_max = 2e-1;
+h_min = 1e-5;
+
+// create a simple cartesian mesh
+m = gf_mesh('cartesian', [0:.1:1]);
+
+// create a mesh_fem for a field of dimension 1 (i.e. a scalar field)
+mf = gf_mesh_fem(m, 1);
+// assign the Q1 fem to all convexes of the mesh_fem,
+gf_mesh_fem_set(mf, 'classical fem', 1);
+
+// integration which will be used
+mim = gf_mesh_im(m, 4);
+
+// define the model
+md = gf_model('real');
+gf_model_set(md, 'add fem variable', 'u', mf);
+gf_model_set(md, 'add Laplacian brick', mim, 'u');
+gf_model_set(md, 'add initialized data', 'lambda', [lambda]);
+gf_model_set(md, 'add basic nonlinear brick', mim, 'u', 'u-lambda*exp(u)', '1-lambda*exp(u)', 'lambda');
+
+// initialise the continuation
+scfac = 1 / gf_mesh_fem_get(mf, 'nbdof');
+S = gf_cont_struct(md, 'lambda', scfac, 'max_iter', maxit, 'thr_iter', thrit, 'min_ang', minang, 'h_init', h_init, 'h_max', h_max, 'h_min', h_min, noisy);
+
+// compute an initial point
+if (~isempty(noisy)) then
+    printf('computing an initial point\n');
+end
+gf_model_get(md, 'solve', noisy, 'max_iter', 100, 'max_res', maxres_solve);
+[T_U, T_lambda, h] = gf_cont_struct_get(S, 'init Moore-Penrose continuation', direction);
+
+U = gf_model_get(md, 'variable', 'u');
+tau = gf_cont_struct_get(S, 'test function');
+//printf('U = '); disp(U); printf('lambda = %e\n', lambda);
+//printf('lambda - U(1) * exp(-U(1)) = %e\n', lambda - U(1) * exp(-U(1)));
+
+U_hist = zeros(1, nbstep + 1); lambda_hist = zeros(1, nbstep + 1);
+U_hist(1) = U(1); lambda_hist(1) = lambda;
+
+scf(0); drawlater; clf();
+subplot(2,1,1);
+plot(lambda_hist(1), U_hist(1), 'k.');
+xtitle('', 'lambda', 'u(0)');
+subplot(2,1,2)
+gf_plot_1D(mf, U, 'style', 'k.-');
+xtitle('', 'x', 'u');
+drawnow;
+
+scf(1); drawlater; clf();
+plot(0, tau, 'k.');
+xtitle('', 'iteration', 'tau');
+drawnow;
+
+// continue from the initial point
+for step = 1:nbstep
+  //sleep(1000);
+  printf('\nbeginning of step %d\n', step);
+  [T_U, T_lambda, h] = gf_cont_struct_get(S, 'Moore-Penrose continuation', T_U, T_lambda, h);
+  if (h == 0) then
+    printf('Continuation has failed');
+    break;
+  end
+  
+  U = gf_model_get(md, 'variable', 'u');
+  lambda = gf_model_get(md, 'variable', 'lambda');
+  tau = gf_cont_struct_get(S, 'test function');
+  U_hist(step+1) = U(1); lambda_hist(step+1) = lambda;
+//  printf('U = '); disp(U); printf('lambda = %e\n', lambda);
+//  printf('lambda - U(1) * exp(-U(1)) = %e\n', lambda - U(1) * exp(-U(1)));
+
+
+  scf(0); drawlater; clf();
+  subplot(2,1,1);
+  plot(lambda_hist(1:step+1), U_hist(1:step+1), 'k-');
+  plot(lambda_hist(1:step), U_hist(1:step), 'ko');
+  plot(lambda_hist(step+1), U_hist(step+1), 'k.');
+  xtitle('', 'lambda', 'u(0)');
+  subplot(2,1,2)
+  gf_plot_1D(mf, U, 'style', 'k.-');
+  xtitle('', 'x', 'u');
+  drawnow;
+
+  scf(1); drawlater;
+  plot(step, tau, 'k.');
+  drawnow;
+  
+  // calculate the determinant of the augmented Jacobian directly
+//  lambda = lambda + 1e-8; gf_model_set(md, 'variable', 'lambda', [lambda]);
+//  gf_model_get(md, 'assembly', 'build_rhs');
+//  F1 = gf_model_get(md, 'rhs');
+//  lambda = lambda - 1e-8; gf_model_set(md, 'variable', 'lambda', [lambda]);
+//  gf_model_get(md, 'assembly', 'build_all');
+//  F0 = gf_model_get(md, 'rhs');
+//  J(1:11,1:11) = gf_model_get(md, 'tangent_matrix');
+//  J(1:11,12) = ((1 / 1e-8) * (F0 - F1))';
+//  J(12,1:11) = T_U; J(12,12) = T_lambda; detJ = det(J);
+//  printf('J = '); disp(J); printf('det(J) = %e\n', detJ);
+//  scf(2); drawlater;
+//  plot(step, detJ, 'k.');
+//  xtitle('', 'iteration', 'tau');
+//  drawnow;
+  
+  printf('end of step n° %d', step); printf(' / %d\n', nbstep);
+end
\ No newline at end of file
diff --git a/interface/src/scilab/demos/demo_convection_rotating_cavity.sce b/interface/src/scilab/demos/demo_convection_rotating_cavity.sce
index 673ce73..9375955 100644
--- a/interface/src/scilab/demos/demo_convection_rotating_cavity.sce
+++ b/interface/src/scilab/demos/demo_convection_rotating_cavity.sce
@@ -20,6 +20,14 @@
 // The transport equation into the unit square (rotating cavity)
 //
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 K0 = 2;  // degree for u
diff --git a/interface/src/scilab/demos/demo_crack.sce b/interface/src/scilab/demos/demo_crack.sce
index c151ba3..ccf1c66 100644
--- a/interface/src/scilab/demos/demo_crack.sce
+++ b/interface/src/scilab/demos/demo_crack.sce
@@ -19,6 +19,15 @@
 // A good example of use of GetFEM++.
 
 lines(0);
+
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 path = get_absolute_file_path('demo_crack.sce');
diff --git a/interface/src/scilab/demos/demo_fictitious_domains.sce b/interface/src/scilab/demos/demo_fictitious_domains.sce
index c74220d..95e6f1d 100644
--- a/interface/src/scilab/demos/demo_fictitious_domains.sce
+++ b/interface/src/scilab/demos/demo_fictitious_domains.sce
@@ -8,6 +8,14 @@ printf('demo fictitious domains started\n');
 disp('This demo use levelset to impose (weakly) a Dirichlet condition on an');
 disp('implicit boundary defined by the zero of the levelset');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 NX = 40;
diff --git a/interface/src/scilab/demos/demo_finallaplacian.sce b/interface/src/scilab/demos/demo_finallaplacian.sce
index e7b45e3..9f3f668 100644
--- a/interface/src/scilab/demos/demo_finallaplacian.sce
+++ b/interface/src/scilab/demos/demo_finallaplacian.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_finallaplacian.sce');
 
 printf('demo finallaplacian started\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 // boundary names
 up    = 101; // m.region(101)
 down  = 102; // m.region(102)
diff --git a/interface/src/scilab/demos/demo_laplacian.sce b/interface/src/scilab/demos/demo_laplacian.sce
index 3b8196b..5ac8383 100644
--- a/interface/src/scilab/demos/demo_laplacian.sce
+++ b/interface/src/scilab/demos/demo_laplacian.sce
@@ -7,6 +7,14 @@ printf('demo laplacian started\n');
 
 // trace on;
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 m = gf_mesh('cartesian',[0:.1:1],[0:.1:1]);
diff --git a/interface/src/scilab/demos/demo_laplacian1D.sce b/interface/src/scilab/demos/demo_laplacian1D.sce
index 2ff06ac..5e84f32 100644
--- a/interface/src/scilab/demos/demo_laplacian1D.sce
+++ b/interface/src/scilab/demos/demo_laplacian1D.sce
@@ -3,6 +3,14 @@ path = get_absolute_file_path('demo_laplacian1D.sce');
 
 printf('demo laplacian1D started\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 // clears every getfem object 
 
 gf_workspace('clear all');
diff --git a/interface/src/scilab/demos/demo_mesh_generation.sce b/interface/src/scilab/demos/demo_mesh_generation.sce
new file mode 100644
index 0000000..8de0ece
--- /dev/null
+++ b/interface/src/scilab/demos/demo_mesh_generation.sce
@@ -0,0 +1,84 @@
+// Scilab GetFEM++ interface
+//
+// Copyright (C) 2011-2011 Yves Renard, Yann Collette.
+//
+// This file is a part of GetFEM++
+//
+// GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+// under  the  terms  of the  GNU  Lesser General Public License as published
+// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
+// License for more details.
+// You  should  have received a copy of the GNU Lesser General Public License
+// along  with  this program;  if not, write to the Free Software Foundation,
+// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+//
+// Mesh generation with the experimental meshing procedure of Getfem which
+// uses simple primitives to describe the mesh geometry. 
+//
+// This program is used to check that matlab-getfem is working. This is also
+// a good example of use of GetFEM++.
+//
+
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
+gf_workspace('clear all'); clear all;
+
+N = 3;   // dimension of the mesh
+K = 2;   // degree of the mesh (for curved boundaries)
+if (N == 1) then
+  mo = gf_mesher_object('ball', [0], 2);
+  fixed_vertices = [0];
+  h = 0.5;
+elseif (N == 2) then
+  mo = gf_mesher_object('ball', [0 4], 2);
+  fixed_vertices = [0; 4];
+  h = 0.5;
+elseif (N == 3) then
+  if (0) then
+    mo1 = gf_mesher_object('ball', [0 0 1], 2);
+    mo2 = gf_mesher_object('ball', [0 0 -1], 2);
+    mo3 = gf_mesher_object('intersect', mo1, mo2);
+    mo4 = gf_mesher_object('ball', [0 0 0], 1.3);
+    mo5 = gf_mesher_object('union', mo4, mo3);
+    mo6 = gf_mesher_object('ball', [-1 0 0], 1);
+    mo  = gf_mesher_object('set minus', mo5, mo6);
+    fixed_vertices = []; h = 0.3; 
+  else
+    alpha = %pi/5;
+    L   = 20;
+    R   = L * tan(alpha) * 0.7;
+    mo1 = gf_mesher_object('cone', [0 0 0], [0 0 1], L, alpha);
+    mo2 = gf_mesher_object('cylinder', [0 0 L], [0, 0, 1], L, R);
+    mo  = gf_mesher_object('union', mo1, mo2);
+    fixed_vertices = []; h = 2;
+  end
+elseif (N == 4) then
+  mo = gf_mesher_object('ball', [0 0 0 4], 2);
+  fixed_vertices = [0; 0; 0; 4];
+  h = 1;
+else
+  error('It is not very reasonable to build a mesh in dimension greater than 4 !');
+end
+ 
+m = gf_mesh('generate', mo, h, K, fixed_vertices);
+ 
+if (N <= 2) then
+  gf_plot_mesh(m);
+elseif (N == 3) then
+  mf = gf_mesh_fem(m, 1);
+  gf_mesh_fem_set(mf, 'classical fem', K);
+  VAL = gf_mesh_fem_get_eval(mf, list('x+y+z'));
+  gf_plot(mf, VAL, 'mesh', 'on', 'cvlst', gf_mesh_get(mf,'outer faces'), 'refine', 4);
+  // axis on; camlight;
+  gf_colormap('chouette');
+end
diff --git a/interface/src/scilab/demos/demo_mortar.sce b/interface/src/scilab/demos/demo_mortar.sce
index 6afa814..d9c5bda 100644
--- a/interface/src/scilab/demos/demo_mortar.sce
+++ b/interface/src/scilab/demos/demo_mortar.sce
@@ -7,6 +7,14 @@ stacksize('max');
 
 path = get_absolute_file_path('demo_mortar.sce');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all'); 
 
 NX     = 9;
diff --git a/interface/src/scilab/demos/demo_nonlinear_elasticity.sce b/interface/src/scilab/demos/demo_nonlinear_elasticity.sce
index a21f378..34a5d95 100644
--- a/interface/src/scilab/demos/demo_nonlinear_elasticity.sce
+++ b/interface/src/scilab/demos/demo_nonlinear_elasticity.sce
@@ -10,6 +10,14 @@ path = get_absolute_file_path('demo_nonlinear_elasticity.sce');
 // Load the axrot_matrix macro
 exec(path + 'axrot_matrix.sci');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 // set a custom colormap
diff --git a/interface/src/scilab/demos/demo_nonlinear_elasticity_anim.sce b/interface/src/scilab/demos/demo_nonlinear_elasticity_anim.sce
index 6dc164f..61bf42f 100644
--- a/interface/src/scilab/demos/demo_nonlinear_elasticity_anim.sce
+++ b/interface/src/scilab/demos/demo_nonlinear_elasticity_anim.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_nonlinear_elasticity_anim.sce');
 
 printf('demo nonlinear_elasticity_anim\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 // replay all the computations of demo_nonlinear_elasticity.sci
 
 load(path + '/demo_nonlinear_elasticity_U.mat');
diff --git a/interface/src/scilab/demos/demo_plasticity.sce b/interface/src/scilab/demos/demo_plasticity.sce
index c0a7b03..275ce82 100644
--- a/interface/src/scilab/demos/demo_plasticity.sce
+++ b/interface/src/scilab/demos/demo_plasticity.sce
@@ -3,6 +3,14 @@ stacksize('max');
 
 path = get_absolute_file_path('demo_plasticity.sce');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 L = 100;
 H = 20;
 
diff --git a/interface/src/scilab/demos/demo_plate.sce b/interface/src/scilab/demos/demo_plate.sce
index e787372..c7b10bd 100644
--- a/interface/src/scilab/demos/demo_plate.sce
+++ b/interface/src/scilab/demos/demo_plate.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_plate.sce');
 
 printf('demo plate started\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 // Plate problem test.
 
 NX        = 10.0;
diff --git a/interface/src/scilab/demos/demo_refine.sce b/interface/src/scilab/demos/demo_refine.sce
index 1f6645a..6d0a827 100644
--- a/interface/src/scilab/demos/demo_refine.sce
+++ b/interface/src/scilab/demos/demo_refine.sce
@@ -9,6 +9,14 @@ path = get_absolute_file_path('demo_refine.sce');
 
 printf('demo refine started\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 //clear all; clf;
diff --git a/interface/src/scilab/demos/demo_static_contact.sce b/interface/src/scilab/demos/demo_static_contact.sce
index 9a499e8..d2431e1 100644
--- a/interface/src/scilab/demos/demo_static_contact.sce
+++ b/interface/src/scilab/demos/demo_static_contact.sce
@@ -1,5 +1,6 @@
-// Copyright (C) 2009 Yves Renard.
-// Copyright (C) 2009-2010 Yann Collette.
+// Matlab GetFEM++ interface
+//
+// Copyright (C) 2009-2011 Yves Renard.
 //
 // This file is a part of GetFEM++
 //
@@ -15,122 +16,198 @@
 // along  with  this program;  if not, write to the Free Software Foundation,
 // Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
 //
-// Static equilibrium of an elastic solid in contact with a rigid foundation
+// Static equilibrium of an elastic solid in contact with a rigid foundation.
+// Tests the different contact/friction formulations of Getfem.
 //
 // This program is used to check that matlab-getfem is working. This is also
 // a good example of use of GetFEM++.
 //
 
-lines(0);
-stacksize('max');
-
+gf_workspace('clear all');
+clear all;
 path = get_absolute_file_path('demo_static_contact.sce');
 
-printf('demo static_contact started\n');
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
 
-gf_workspace('clear all');
+// Import the mesh : disc
+// m = gf_mesh('load', path + 'data/disc_P2_h2.mesh');
+// m = gf_mesh('load', path + 'data/disc_P2_h1.mesh');
+// m = gf_mesh('load', path + 'data/disc_P2_h0.5.mesh');
+// m = gf_mesh('load', path + 'data/disc_P2_h0.25.mesh');
+// m = gf_mesh('load', path + 'data/disc_P2_h0.15.mesh');
+
+// Import the mesh : sphere
+// m = gf_mesh('load', path + 'data/sphere_with_quadratic_tetra_8_elts.mesh');
+m = gf_mesh('load', path + 'data/sphere_with_quadratic_tetra_80_elts.mesh');
+// m = gf_mesh('load', path + 'data/sphere_with_quadratic_tetra_400_elts.mesh');
+// m = gf_mesh('load', path + 'data/sphere_with_quadratic_tetra_2000_elts.mesh');
+// m = gf_mesh('load', path + 'data/sphere_with_quadratic_tetra_16000_elts.mesh');
+
+d = gf_mesh_get(m, 'dim'); // Mesh dimension
+
+// Parameters of the model
+clambda = 1;           // Lame coefficient
+cmu     = 1;           // Lame coefficient
+friction_coeff = 0.4;  // coefficient of friction
+vertical_force = 0.05; // Volumic load in the vertical direction
+r = 10;                // Augmentation parameter
+condition_type = 0;    // 0 = Explicitely kill horizontal rigid displacements
+                       // 1 = Kill rigid displacements using a global penalization
+                       // 2 = Add a Dirichlet condition on the top of the structure
+penalty_parameter = 1E-6; // Penalization coefficient for the global penalization
 
-// Import the mesh
-//m = gf_mesh('load', path + '/data/disc_P2_h1.mesh');
-m = gf_mesh('load', path + '/data/disc_P2_h2.mesh');
-//m = gf_mesh('load', path + '/data/disc_P2_h0.5.mesh');
-
-d = gf_mesh_get(m, 'dim');
-
-// parameters of the model
-lambda         = 1;   // Lame coefficient
-mu             = 1;   // Lame coefficient
-friction_coeff = 0.2; // coefficient of friction
-r              = 5;   // Augmentation parameter
-version        = 4;   // 1 : frictionless contact and the basic contact brick
-                      // 2 : contact with 'static' friction and the basic contact brick
-                      // 3 : frictionless contact and the contact with a
-                      //     rigid obstacle brick
-                      // 4 : contact with 'static' friction and the contact with a
-                      //     rigid obstacle brick
 if (d == 2) then
-  obstacle = 'y';  // Signed distance representing the obstacle
+    cpoints = [0, 0];   // constraigned points for 2d
+    cunitv  = [1, 0];   // corresponding constraigned directions for 2d
 else
-  obstacle = 'z';  // Signed distance representing the obstacle
+    cpoints = [0, 0, 0,   0, 0, 0,   5, 0, 5];  // constraigned points for 3d
+    cunitv  = [1, 0, 0,   0, 1, 0,   0, 1, 0];  // corresponding constraigned directions for 3d
 end
 
-// set a custom colormap
-h = scf();
-h.color_map = jetcolormap(255);
-
-//r = [0.7 .7 .7];
-//l = r($,:); s=63; s1=20; s2=25; s3=48; s4=55; 
-//for i=1:s
-//  c1 = max(min((i-s1)/(s2-s1),1),0);
-//  c2 = max(min((i-s3)/(s4-s3),1),0); 
-//  r($+1,:)=(1-c2)*((1-c1)*l + c1*[1 0 0]) + c2*[1 .8 .2]; 
-//end
-//h.color_map = r;
-
-d = gf_mesh_get(m, 'dim');
-
-// Selection of the contact boundary
-border  = gf_mesh_get(m, 'outer faces');
+niter     = 100;   // Maximum number of iterations for Newton's algorithm.
+plot_mesh = %t;
+version = 13; // 1 : frictionless contact and the basic contact brick
+              // 2 : contact with 'static' Coulomb friction and basic contact brick
+              // 3 : frictionless contact and the contact with a
+              //     rigid obstacle brick
+              // 4 : contact with 'static' Coulomb friction and the contact with a
+              //     rigid obstacle brick
+              // 5 : frictionless contact and the integral brick
+              //     Newton and Alart-Curnier augmented lagrangian,
+              //     unsymmetric version
+              // 6 : frictionless contact and the integral brick
+              //     Newton and Alart-Curnier augmented lagrangian, symmetric
+              //     version.
+              // 7 : frictionless contact and the integral brick
+              //     Newton and Alart-Curnier augmented lagrangian,
+              //     unsymmetric version with an additional augmentation.
+              // 8 : frictionless contact and the integral brick
+              //     New unsymmetric method.
+              // 9 : frictionless contact and the integral brick : Uzawa
+              //     on the Lagrangian augmented by the penalization term.
+              // 10 : contact with 'static' Coulomb friction and the integral brick
+              //     Newton and Alart-Curnier augmented lagrangian,
+              //     unsymmetric version.
+              // 11 : contact with 'static' Coulomb friction and the integral brick
+              //     Newton and Alart-Curnier augmented lagrangian,
+              //     nearly symmetric version.
+              // 12 : contact with 'static' Coulomb friction and the integral brick
+              //     Newton and Alart-Curnier augmented lagrangian,
+              //     unsymmetric version with an additional augmentation.
+              // 13 : contact with 'static' Coulomb friction and the integral brick
+              //     New unsymmetric method.
+              // 14 : contact with 'static' Coulomb friction and the integral brick : Uzawa
+              //     on the Lagrangian augmented by the penalization term.
+              // 15 : penalized contact with 'static' Coulomb friction (r is the penalization
+              //     coefficient).
+ // Signed distance representing the obstacle
+if (d == 2) then obstacle = 'y'; else obstacle = 'z'; end;
+
+// Selection of the contact and Dirichlet boundaries
+GAMMAC = 1; GAMMAD = 2;
+
+border  = gf_mesh_get(m,'outer faces');
 normals = gf_mesh_get(m, 'normal of faces', border);
-contact_boundary = border(:,find(normals(d, :) < 0));
-GAMMAC = 1;
+contact_boundary = border(:, find(normals(d, :) < -0.01));
 gf_mesh_set(m, 'region', GAMMAC, contact_boundary);
-
-// Plot the mesh
-drawlater;
-gf_plot_mesh(m, 'regions', [GAMMAC]);
-title('Mesh and contact boundary (in blue)');
-drawnow;
-sleep(100);
+contact_boundary = border(:, find(normals(d, :) > 0.01));
+gf_mesh_set(m, 'region', GAMMAD, contact_boundary);
 
 // Finite element methods
+u_degree      = 2;
+lambda_degree = 2;
+
 mfu = gf_mesh_fem(m, d);
-gf_mesh_fem_set(mfu, 'classical fem', 2);
+gf_mesh_fem_set(mfu, 'classical fem', u_degree);
 mfd = gf_mesh_fem(m, 1);
-gf_mesh_fem_set(mfd, 'classical fem', 1);
+gf_mesh_fem_set(mfd, 'classical fem', u_degree);
+mflambda = gf_mesh_fem(m, 1); // used only by versions 5 to 13
+gf_mesh_fem_set(mflambda, 'classical fem', lambda_degree);
 mfvm = gf_mesh_fem(m, 1);
-gf_mesh_fem_set(mfvm, 'classical discontinuous fem', 1);
+gf_mesh_fem_set(mfvm, 'classical discontinuous fem', u_degree-1);
+
+// Integration method
 mim = gf_mesh_im(m, 4);
+if (d == 2) then
+  mim_friction = gf_mesh_im(m, ...
+      gf_integ('IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(4),4)'));
+else
+   mim_friction = gf_mesh_im(m, ...
+      gf_integ('IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(5),4)')); 
+end
+
+// Plot the mesh
+if (plot_mesh) then
+  scf(1);
+  gf_plot_mesh(m, 'regions', [GAMMAC]);
+  title('Mesh and contact boundary (in red)');
+  sleep(100);
+end
 
 // Volumic density of force
 nbdofd = gf_mesh_fem_get(mfd, 'nbdof');
 nbdofu = gf_mesh_fem_get(mfu, 'nbdof');
 F = zeros(nbdofd*d, 1);
-F(d:d:nbdofd*d) = -0.02;
+F(d:d:nbdofd*d) = -vertical_force;
 
 // Elasticity model
 md = gf_model('real');
 gf_model_set(md, 'add fem variable', 'u', mfu);
-gf_model_set(md, 'add initialized data', 'mu', [mu]);
-gf_model_set(md, 'add initialized data', 'lambda', [lambda]);
-gf_model_set(md, 'add isotropic linearized elasticity brick', mim, 'u', 'lambda', 'mu');
+gf_model_set(md, 'add initialized data', 'cmu', [cmu]);
+gf_model_set(md, 'add initialized data', 'clambda', [clambda]);
+gf_model_set(md, 'add isotropic linearized elasticity brick', mim, 'u', ...
+                 'clambda', 'cmu');
 gf_model_set(md, 'add initialized fem data', 'volumicload', mfd, F);
 gf_model_set(md, 'add source term brick', mim, 'u', 'volumicload');
 
-// Small penalty term to avoid rigid motion (should be replaced by an explicit
-// treatment of the rigid motion with a constraint matrix)
-gf_model_set(md, 'add initialized data', 'penalty_param', [1E-8]);          
-gf_model_set(md, 'add mass brick', mim, 'u', 'penalty_param');
+if (condition_type == 2) then
+  Ddata = zeros(1, d); Ddata(d) = -5;
+  gf_model_set(md, 'add initialized data', 'Ddata', Ddata);
+  gf_model_set(md, 'add Dirichlet condition with multipliers', mim, 'u', u_degree, GAMMAD, 'Ddata');
+elseif (condition_type == 0) then
+  gf_model_set(md, 'add initialized data', 'cpoints', cpoints);
+  gf_model_set(md, 'add initialized data', 'cunitv', cunitv);
+  gf_model_set(md, 'add pointwise constraints with multipliers', 'u', 'cpoints', 'cunitv');
+elseif (condition_type == 1) then
+  // Small penalty term to avoid rigid motion (should be replaced by an
+  // explicit treatment of the rigid motion with a constraint matrix)
+  gf_model_set(md, 'add initialized data', 'penalty_param', ...
+              [penalty_parameter]);          
+  gf_model_set(md, 'add mass brick', mim, 'u', 'penalty_param');
+end
 
 // The contact condition
 
 cdof = gf_mesh_fem_get(mfu, 'dof on region', GAMMAC);
-nbc = size(cdof, 2) / d;
+nbc  = size(cdof, 2) / d;
 
+if (nbc <= 0) then
+    disp('No contact zone');
+    return;
+end
+
+solved = %f;
 if (version == 1 | version == 2) then // defining the matrices BN and BT by hand
-  contact_dof = cdof(d:d:nbc*d);
+  contact_dof   = cdof(d:d:nbc*d);
   contact_nodes = gf_mesh_fem_get(mfu, 'basic dof nodes', contact_dof);
-  BN = spzeros(nbc, nbdofu);
+  BN   = spzeros(nbc, nbdofu);
+  ngap = zeros(nbc, 1);
   for i = 1:nbc
     BN(i, contact_dof(i)) = -1.0;
-    gap(i) = contact_nodes(d, i);
+    ngap(i) = contact_nodes(d, i);
   end
+
   if (version == 2) then
     BT = spzeros(nbc*(d-1), nbdofu);
     for i = 1:nbc
-      BT(i*(d-1), contact_dof(i)-d+1) = 1.0;
-      if (d > 2) then
-        BT(i*(d-1)+1, contact_dof(i)-d+2) = 1.0;
+      for j = 1:d-1
+        BT(j+(i-1)*(d-1), contact_dof(i)-d+j) = 1.0;
       end
     end
   end
@@ -139,53 +216,184 @@ if (version == 1 | version == 2) then // defining the matrices BN and BT by hand
   gf_model_set(md, 'add initialized data', 'r', [r]);
   if (version == 2) then
     gf_model_set(md, 'add variable', 'lambda_t', nbc * (d-1));
-    gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
+    gf_model_set(md, 'add initialized data', 'friction_coeff', ...
+                 [friction_coeff]);
   end
-  gf_model_set(md, 'add initialized data', 'gap', gap);
+  gf_model_set(md, 'add initialized data', 'ngap', ngap);
   gf_model_set(md, 'add initialized data', 'alpha', ones(nbc, 1));
   if (version == 1) then
-    gf_model_set(md, 'add basic contact brick', 'u', 'lambda_n', 'r', BN, 'gap', 'alpha', 0);
+    gf_model_set(md, 'add basic contact brick', 'u', 'lambda_n', 'r', ...
+        BN, 'ngap', 'alpha', 1);
   else
-    gf_model_set(md, 'add basic contact brick', 'u', 'lambda_n', 'lambda_t', 'r', BN, BT, 'friction_coeff', 'gap', 'alpha', 0);
+    gf_model_set(md, 'add basic contact brick', 'u', 'lambda_n', ...
+		 'lambda_t', 'r', BN, BT, 'friction_coeff', 'ngap', 'alpha', 1);
   end
-elseif (version == 3 | version == 4) then // BN and BT defined by the contact brick
+elseif (version == 3 | version == 4) then // BN and BT defined by contact brick
+
   gf_model_set(md, 'add variable', 'lambda_n', nbc);
   gf_model_set(md, 'add initialized data', 'r', [r]);
   if (version == 3) then
-    gf_model_set(md, 'add contact with rigid obstacle brick', mim, 'u', 'lambda_n', 'r', GAMMAC, obstacle, 0);
+    gf_model_set(md, 'add nodal contact with rigid obstacle brick', mim, 'u', ...
+	         'lambda_n', 'r', GAMMAC, obstacle, 1);
   else
     gf_model_set(md, 'add variable', 'lambda_t', nbc * (d-1));
-    gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
-    gf_model_set(md, 'add contact with rigid obstacle brick', mim, 'u', ...
-	         'lambda_n', 'lambda_t', 'r', 'friction_coeff', GAMMAC, obstacle, 0);
+    gf_model_set(md, 'add initialized data', 'friction_coeff', ...
+		 [friction_coeff]);
+    gf_model_set(md, 'add nodal contact with rigid obstacle brick', mim, 'u', ...
+	         'lambda_n', 'lambda_t', 'r', 'friction_coeff', GAMMAC, ...
+		 obstacle, 1);
+  end
+
+elseif (version >= 5 & version <= 8) then // The integral version, Newton
+ 
+  ldof = gf_mesh_fem_get(mflambda, 'dof on region', GAMMAC);
+  mflambda_partial = gf_mesh_fem('partial', mflambda, ldof);
+  gf_model_set(md, 'add fem variable', 'lambda_n', mflambda_partial);
+  gf_model_set(md, 'add initialized data', 'r', [r]);
+  OBS = gf_mesh_fem_get_eval(mfd, list(obstacle));
+  gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+  gf_model_set(md, 'add integral contact with rigid obstacle brick', ...
+      mim_friction, 'u', 'lambda_n', 'obstacle', 'r', GAMMAC, version-4);
+          
+elseif (version == 9) then // The integral version, Uzawa on the augmented Lagrangian
+    
+  ldof = gf_mesh_fem_get(mflambda, 'dof on region', GAMMAC);
+  mflambda_partial = gf_mesh_fem('partial', mflambda, ldof);
+  nbc = gf_mesh_fem_get(mflambda_partial, 'nbdof');
+  OBS = gf_mesh_fem_get_eval(mfd, list(obstacle));
+  M = gf_asm('mass matrix', mim, mflambda_partial, mflambda_partial, GAMMAC);
+  lambda_n = zeros(1, nbc);
+  gf_model_set(md, 'add initialized fem data', 'lambda_n', mflambda_partial, lambda_n);
+  gf_model_set(md, 'add initialized data', 'r', [r]);
+  OBS = gf_mesh_fem_get_eval(mfd, list(obstacle));
+  gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+  gf_model_set(md, 'add penalized contact with rigid obstacle brick', mim_friction, 'u', ...
+	         'obstacle', 'r', GAMMAC, 'lambda_n', 2);
+  
+  for ii=1:100
+      printf('iteration %d\n', ii);
+      gf_model_get(md, 'solve', 'max_res', 1E-9, 'max_iter', niter); // , 'very noisy');
+      U = gf_model_get(md, 'variable', 'u');
+      lambda_n_old = lambda_n;
+      lambda_n = (M\ gf_asm('integral contact Uzawa projection', GAMMAC, mim_friction, mfu, U, mflambda_partial, lambda_n, mfd, OBS, r))';
+      gf_model_set(md, 'variable', 'lambda_n', lambda_n);
+      difff = max(abs(lambda_n-lambda_n_old));
+      printf('diff : %g\n', difff/max(abs(lambda_n)));
+      // pause;
+      if (difff/max(abs(lambda_n)) < penalty_parameter) then break; end;
+  end
+  
+  solved = %t;
+  
+elseif (version >= 10 & version <= 13) then // The integral version with friction, Newton
+ 
+  gf_mesh_fem_set(mflambda, 'qdim', d);
+  ldof = gf_mesh_fem_get(mflambda, 'dof on region', GAMMAC);
+  mflambda_partial = gf_mesh_fem('partial', mflambda, ldof);
+  gf_model_set(md, 'add fem variable', 'lambda', mflambda_partial);
+  gf_model_set(md, 'add initialized data', 'r', [r]);
+  gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
+  OBS = gf_mesh_fem_get_eval(mfd, list(obstacle));
+  gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+  gf_model_set(md, 'add integral contact with rigid obstacle brick', mim_friction, 'u', ...
+	         'lambda', 'obstacle', 'r', 'friction_coeff', GAMMAC, version-9);
+
+elseif (version == 14) then // The integral version, Uzawa on the augmented Lagrangian with friction
+  
+  gf_mesh_fem_set(mflambda, 'qdim', d);
+  ldof = gf_mesh_fem_get(mflambda, 'dof on region', GAMMAC);
+  mflambda_partial = gf_mesh_fem('partial', mflambda, ldof);
+  nbc = gf_mesh_fem_get(mflambda_partial, 'nbdof');
+  gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
+  OBS = gf_mesh_fem_get_eval(mfd, list(obstacle));
+  M = gf_asm('mass matrix', mim, mflambda_partial, mflambda_partial, GAMMAC);
+  lambda = zeros(1, nbc);
+  gf_model_set(md, 'add initialized fem data', 'lambda', mflambda_partial, lambda);
+  gf_model_set(md, 'add initialized data', 'r', [r]);
+  OBS = gf_mesh_fem_get_eval(mfd, list(obstacle));
+  gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+  gf_model_set(md, 'add penalized contact with rigid obstacle brick', mim_friction, 'u', ...
+	         'obstacle', 'r', 'friction_coeff', GAMMAC, 2, 'lambda');
+  
+  for ii=1:100
+      printf('iteration %d\n', ii);
+      gf_model_get(md, 'solve', 'max_res', 1E-9, 'max_iter', niter); // , 'very noisy');
+      U = gf_model_get(md, 'variable', 'u');
+      lambda_old = lambda;
+      lambda = (M\ gf_asm('integral contact Uzawa projection', GAMMAC, mim_friction, mfu, U, mflambda_partial, lambda, mfd, OBS, r, friction_coeff))';
+      gf_model_set(md, 'variable', 'lambda', lambda);
+      difff = max(abs(lambda-lambda_old));
+      printf('diff : %g\n', difff/max(abs(lambda)));
+      // pause;
+      if (difff/max(abs(lambda)) < penalty_parameter) then break; end;
   end
+  
+  solved = %t;
+
+elseif (version == 15) then
+ 
+  gf_model_set(md, 'add initialized data', 'r', [r]);
+  gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
+  OBS = gf_mesh_fem_get_eval(mfd, list(obstacle));
+  gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+  gf_model_set(md, 'add penalized contact with rigid obstacle brick', mim_friction, 'u', ...
+	         'obstacle', 'r', 'friction_coeff', GAMMAC);
+    
 else
-  error('Unexistent version');
+  error('Inexistent version');
 end
 
 // Solve the problem
-
-gf_model_get(md, 'solve', 'max_res', 1E-7, 'very noisy', 'max_iter', 100);
+if (~solved) then
+  gf_model_get(md, 'solve', 'max_res', 1E-9, 'very noisy', 'max_iter', niter); // ,  'lsearch', 'simplest'); // , 'with pseudo potential');
+end
 
 U = gf_model_get(md, 'variable', 'u');
-lambda_n = gf_model_get(md, 'variable', 'lambda_n');
-VM = gf_model_get(md, 'compute_isotropic_linearized_Von_Mises_or_Tresca', 'u', 'lambda', 'mu', mfvm);
+// lambda_n = gf_model_get(md, 'variable', 'lambda_n');
+VM = gf_model_get(md, 'compute_isotropic_linearized_Von_Mises_or_Tresca', ...
+		  'u', 'clambda', 'cmu', mfvm);
+    
+
+// set a custom colormap
+// r=[0.7 .7 .7]; l = r($,:); s=63; s1=20; s2=25; s3=48;s4=55; for i=1:s, c1 = max(min((i-s1)/(s2-s1),1),0);c2 = max(min((i-s3)/(s4-s3),1),0); r($+1,:)=(1-c2)*((1-c1)*l + c1*[1 0 0]) + c2*[1 .8 .2]; end; colormap(r);
+
+scf(2);
 
-h = scf();
-drawlater;
-h.color_map = jetcolormap(255);
 if (d == 3) then
-  gf_plot(mfvm, VM, 'mesh', 'off', 'cvlst', ...
-          gf_mesh_get(mfdu,'outer faces'), 'deformation', U, ...
-          'deformation_mf', mfu, 'deformation_scale', 1, 'refine', 8);
+  c = [0.1;0;20]; 
+  x = [1;0;0]; 
+  y = [0;1;0];
+  z = [0;0;1];
+  // Whole boundary
+  // sl2 = gf_slice(list('boundary',list('none')), m, 5);
+  // Slice, 3 planes
+  // sl2 = gf_slice(list('boundary',list('union',list('planar',+1,c,x),list('planar',+1,c,y),list('planar',+1,c,z))),m,5);
+  // Slice, 2 planes
+  // sl2 = gf_slice(list('boundary',list('union',list('planar',+1,c,x),list('planar',+1,c,y))),m,5);
+  // Slice, 1 plane
+  sl2 = gf_slice(list('boundary',list('planar',+1,c,x)), m, 5);
+
+  P = gf_slice_get(sl2,'pts'); dP = gf_compute(mfu,U,'interpolate on',sl2);
+  gf_slice_set(sl2, 'pts', P+dP);
+  VMsl = gf_compute(mfvm,VM,'interpolate on',sl2);
+  //set(gcf,'renderer','zbuffer');
+  h = gf_plot_slice(sl2,'mesh','on','mesh_slice_edges','off','data',VMsl);
+  //view(-80,-15); axis on; camlight;
+  gf_colormap('chouette');
+  // map=[1:-1/10:0]'*[1 1 1]; colormap(map); // for NB
+    
+  // gf_plot(mfvm, VM, 'mesh', 'off', 'cvlst', ...
+  //        gf_mesh_get(mfu,'outer faces'), 'deformation', U, ...
+  //        'deformation_mf', mfu, 'deformation_scale', 1, 'refine', 8);
+  // view(-5,-10); camlight; colormap(map);
+  xlabel('x'); ylabel('y'); zlabel('z');
+  title('Sliced deformed configuration (not really a small deformation of course ...)');
 else
   gf_plot(mfvm, VM, 'deformed_mesh', 'on', 'deformation', U, ...
           'deformation_mf', mfu, 'deformation_scale', 1, 'refine', 8);
+  xlabel('x'); ylabel('y');
+  title('Deformed configuration (not really a small deformation of course ...)');
 end
 
-title('Deformed configuration (not really a small deformation of course ...)');
-colorbar(min(VM),max(VM));
-drawnow;
+//colorbar;
 sleep(100);
-
-printf('demo static_contact terminated\n');
diff --git a/interface/src/scilab/demos/demo_step_by_step.sce b/interface/src/scilab/demos/demo_step_by_step.sce
index 4bcad4d..6afc11c 100644
--- a/interface/src/scilab/demos/demo_step_by_step.sce
+++ b/interface/src/scilab/demos/demo_step_by_step.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_step_by_step.sce');
 
 printf('demo step_by_step started\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 // creation of a simple cartesian mesh
diff --git a/interface/src/scilab/demos/demo_stokes_2D_poiseuille.sce b/interface/src/scilab/demos/demo_stokes_2D_poiseuille.sce
index 80d0d84..35b80cc 100644
--- a/interface/src/scilab/demos/demo_stokes_2D_poiseuille.sce
+++ b/interface/src/scilab/demos/demo_stokes_2D_poiseuille.sce
@@ -7,6 +7,14 @@ path = get_absolute_file_path('demo_stokes_2D_poiseuille.sce');
 
 printf('demo stokes_2D_poiseuille started\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 disp('validation for 2D stokes with rectangular elements : Poiseuille flow with cartesian mesh');
diff --git a/interface/src/scilab/demos/demo_stokes_2D_poiseuille_arc.sce b/interface/src/scilab/demos/demo_stokes_2D_poiseuille_arc.sce
index 938968f..1e10ef9 100644
--- a/interface/src/scilab/demos/demo_stokes_2D_poiseuille_arc.sce
+++ b/interface/src/scilab/demos/demo_stokes_2D_poiseuille_arc.sce
@@ -7,6 +7,14 @@ path = get_absolute_file_path('demo_stokes_2D_poiseuille_arc.sce');
 
 printf('demo stokes_2D_poiseuille_arc started\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 disp('2D stokes demonstration on a quadratic mesh');
@@ -68,7 +76,7 @@ pde('mf_p') = gf_mesh_fem(m,1);
 pde('mf_d') = gf_mesh_fem(m,1);
 pde('mim')  = gf_mesh_im(m, gf_integ('IM_GAUSS_PARALLELEPIPED(2,10)'));
 
-// this is a good example of the usefullness of the cubic bubble
+// this is a good example of the usefulness of the cubic bubble
 // -> if not used, the pression has strange values
 gf_mesh_fem_set(pde('mf_u'),'fem',fem_u);
 gf_mesh_fem_set(pde('mf_p'),'fem',fem_u);
diff --git a/interface/src/scilab/demos/demo_stokes_2D_tube.sce b/interface/src/scilab/demos/demo_stokes_2D_tube.sce
index 62d5f3b..d40d980 100644
--- a/interface/src/scilab/demos/demo_stokes_2D_tube.sce
+++ b/interface/src/scilab/demos/demo_stokes_2D_tube.sce
@@ -4,6 +4,14 @@
 lines(0);
 stacksize('max');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 path = get_absolute_file_path('demo_stokes_2D_tube.sce');
@@ -47,7 +55,7 @@ pde('mf_p') = gf_mesh_fem(m,1);
 pde('mf_d') = gf_mesh_fem(m,1);
 pde('mim')  = gf_mesh_im(m,gf_integ('IM_TRIANGLE(5)'));
 
-// this is a good example of the usefullness of the cubic bubble
+// this is a good example of the usefulness of the cubic bubble
 // -> if not used, the pressure has strange values
 gf_mesh_fem_set(pde('mf_u'),'fem',gf_fem('FEM_PK_WITH_CUBIC_BUBBLE(2,2)'));
 gf_mesh_fem_set(pde('mf_d'),'fem',gf_fem('FEM_PK(2,2)'));
diff --git a/interface/src/scilab/demos/demo_stokes_3D_tank.sce b/interface/src/scilab/demos/demo_stokes_3D_tank.sce
index e8f5af5..3d9bc6d 100644
--- a/interface/src/scilab/demos/demo_stokes_3D_tank.sce
+++ b/interface/src/scilab/demos/demo_stokes_3D_tank.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_stokes_3D_tank.sce');
 
 printf('demo stokes_3D_tank started\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 disp('3D stokes demonstration on a quadratic mesh');
diff --git a/interface/src/scilab/demos/demo_stokes_3D_tank_alt.sce b/interface/src/scilab/demos/demo_stokes_3D_tank_alt.sce
index 5525f25..1e2addc 100644
--- a/interface/src/scilab/demos/demo_stokes_3D_tank_alt.sce
+++ b/interface/src/scilab/demos/demo_stokes_3D_tank_alt.sce
@@ -6,6 +6,14 @@ stacksize('max');
 
 path = get_absolute_file_path('demo_stokes_3D_tank_alt.sce');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 printf('demo stokes_3D_tank_alt started\n');
@@ -54,7 +62,7 @@ pde('mf_p') = gf_mesh_fem(m,1);
 pde('mf_d') = gf_mesh_fem(m,1);
 pde('mim')  = gf_mesh_im(m, gf_integ('IM_TETRAHEDRON(5)'));
 
-// this is a good example of the usefullness of the cubic bubble
+// this is a good example of the usefulness of the cubic bubble
 // -> if not used, the pression has strange values
 //gf_mesh_fem_set(pde('mf_u'),'fem',gf_fem('FEM_PK_WITH_CUBIC_BUBBLE(3,2)')
 gf_mesh_fem_set(pde('mf_u'),'fem',gf_fem('FEM_PK(3,2)'));
diff --git a/interface/src/scilab/demos/demo_stokes_3D_tank_draw.sce b/interface/src/scilab/demos/demo_stokes_3D_tank_draw.sce
index 2103152..cc1d225 100644
--- a/interface/src/scilab/demos/demo_stokes_3D_tank_draw.sce
+++ b/interface/src/scilab/demos/demo_stokes_3D_tank_draw.sce
@@ -3,6 +3,14 @@ stacksize('max');
 
 path = get_absolute_file_path('demo_stokes_3D_tank_draw.sce');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 if (exists('U')~=1 | exists('P') ~= 1) then
   error('run demo_stokes_3D_tank2 first');
 end
diff --git a/interface/src/scilab/demos/demo_structural_optimization.sce b/interface/src/scilab/demos/demo_structural_optimization.sce
index 95417e6..6c22beb 100644
--- a/interface/src/scilab/demos/demo_structural_optimization.sce
+++ b/interface/src/scilab/demos/demo_structural_optimization.sce
@@ -29,6 +29,14 @@ path = get_absolute_file_path('demo_structural_optimization.sce');
 
 printf('demo structural_optimization started\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 Do_Plot = %T;
@@ -73,11 +81,11 @@ if (N == 2) then
   NBDRAW = 20;            // Draw solution each NBDRAW iterations
 else
   NY = 30;
-  level_set_rate = 0.03 / NY;
-  reinitialisation_time = 0.0045;
+  level_set_rate = 0.025 / NY;
+  reinitialisation_time = 0.003;
   threshold_shape = 15;
   if (TEST_CASE == 3) then
-    threshold_topo = 2.6;
+    threshold_topo = 30;
   else
     threshold_topo = 0;
   end
@@ -91,7 +99,7 @@ cg_eps          = 1e-8;
 cg_iter         = 100000;
 
 if (N == 2) then
-  CF = k*NY/40.; // Correction factor. Usefull ?
+  CF = k*NY/40.; // Correction factor. Useful ?
 else
   CF = k*NY/8;
 end
diff --git a/interface/src/scilab/demos/demo_topological_optimization.sce b/interface/src/scilab/demos/demo_topological_optimization.sce
index 44c6002..0bf1180 100644
--- a/interface/src/scilab/demos/demo_topological_optimization.sce
+++ b/interface/src/scilab/demos/demo_topological_optimization.sce
@@ -29,6 +29,14 @@ path = get_absolute_file_path('demo_topological_optimization.sce');
 
 printf('demo topological_optimization started\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 // parameters
diff --git a/interface/src/scilab/demos/demo_tripod.sce b/interface/src/scilab/demos/demo_tripod.sce
index dc0c882..2ead070 100644
--- a/interface/src/scilab/demos/demo_tripod.sce
+++ b/interface/src/scilab/demos/demo_tripod.sce
@@ -12,6 +12,14 @@ disp('compressible/incompressible elasticity!')
 linear = 1;
 incompressible = 0;
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 // import the mesh
diff --git a/interface/src/scilab/demos/demo_tripod_alt.sce b/interface/src/scilab/demos/demo_tripod_alt.sce
index ad16fca..2e3d2c5 100644
--- a/interface/src/scilab/demos/demo_tripod_alt.sce
+++ b/interface/src/scilab/demos/demo_tripod_alt.sce
@@ -8,6 +8,14 @@ stacksize('max');
 
 path = get_absolute_file_path('demo_tripod_alt.sce');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 printf('demo tripod_alt started\n');
diff --git a/interface/src/scilab/demos/demo_tripod_anim.sce b/interface/src/scilab/demos/demo_tripod_anim.sce
index 2b4f7ff..3b17cea 100644
--- a/interface/src/scilab/demos/demo_tripod_anim.sce
+++ b/interface/src/scilab/demos/demo_tripod_anim.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_tripod_anim.sce');
 
 printf('demo tripod_anim started\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 // You should run demo_tripod first ...
 //m    = gf_mesh('import','gid', path + '/data/tripod.GiD.msh');
 //mfu  = gf_mesh_fem('from string', smfu, m);
diff --git a/interface/src/scilab/demos/demo_tripod_slice_anim.sce b/interface/src/scilab/demos/demo_tripod_slice_anim.sce
index cafe3f6..d75dbce 100644
--- a/interface/src/scilab/demos/demo_tripod_slice_anim.sce
+++ b/interface/src/scilab/demos/demo_tripod_slice_anim.sce
@@ -7,6 +7,14 @@ printf('demo tripod_slice_anim started\n');
 
 disp('this file should be launched after demo_tripod.sce as it assumes the tripod mesh and solutions are in memory')
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 //m    = gf_mesh('from string',sm);
 //mfu  = gf_mesh_fem('from string',smfu,m);
 //mfdu = gf_mesh_fem('from string',smfdu,m);
diff --git a/interface/src/scilab/demos/demo_wave2D.sce b/interface/src/scilab/demos/demo_wave2D.sce
index 216f6d7..60de2ef 100644
--- a/interface/src/scilab/demos/demo_wave2D.sce
+++ b/interface/src/scilab/demos/demo_wave2D.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_wave2D.sce');
 
 printf('demo wave2D started\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 disp('2D scalar wave equation (helmholtz) demonstration');
diff --git a/interface/src/scilab/demos/demo_wave2D_alt.sce b/interface/src/scilab/demos/demo_wave2D_alt.sce
index bdef68e..26f74e7 100644
--- a/interface/src/scilab/demos/demo_wave2D_alt.sce
+++ b/interface/src/scilab/demos/demo_wave2D_alt.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_wave2D_alt.sce');
 
 printf('demo wave2D_alt\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 disp('2D scalar wave equation (helmholtz) demonstration');
diff --git a/interface/src/scilab/demos/demo_wave2D_animate.sce b/interface/src/scilab/demos/demo_wave2D_animate.sce
index 8c566f0..cc42fa0 100644
--- a/interface/src/scilab/demos/demo_wave2D_animate.sce
+++ b/interface/src/scilab/demos/demo_wave2D_animate.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_wave2D_animate.sce');
 
 printf('demo wave2D_animate started\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 dt = 2*%pi/20;
 t  = 0:dt:2*%pi-dt/2;
 
diff --git a/interface/src/scilab/demos/demo_wave_equation.sce b/interface/src/scilab/demos/demo_wave_equation.sce
index 4ade4a9..dbe4776 100644
--- a/interface/src/scilab/demos/demo_wave_equation.sce
+++ b/interface/src/scilab/demos/demo_wave_equation.sce
@@ -8,6 +8,14 @@ path = get_absolute_file_path('demo_wave_equation.sce');
 
 printf('demo wave_equation started\n');
 
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 gf_workspace('clear all');
 
 m = gf_mesh('cartesian',[0:.2:1],[0:.2:1]);
diff --git a/interface/src/scilab/demos/sci_getfem.dem.gateway.sce b/interface/src/scilab/demos/sci_getfem.dem.gateway.sce
index a15bab8..0081277 100644
--- a/interface/src/scilab/demos/sci_getfem.dem.gateway.sce
+++ b/interface/src/scilab/demos/sci_getfem.dem.gateway.sce
@@ -5,29 +5,33 @@
 // ====================================================================
 demopath = get_absolute_file_path("sci_getfem.dem.gateway.sce");
 
-subdemolist = ["Bilaplacian",              "demo_bilaplacian.sce"; ..
-               "Crack",                    "demo_crack.sce"; ..
-	       "Fictitious domains",       "demo_fictitious_domains.sce"; ..
-	       "Final Laplacian",          "demo_finallaplacian.sce"; ..
-	       "Laplacian 1D",             "demo_laplacian1D.sce"; ..
-	       "Laplacian",                "demo_laplacian.sce"; ..
-	       "Mortar",                   "demo_mortar.sce"; ..
-	       "Nonlinear Elasticity",     "demo_nonlinear_elasticity.sce"; ..
-	       "Plasticity",               "demo_plasticity.sce"; ..
-	       "Plate",                    "demo_plate.sce"; ..
-	       "Refine",                   "demo_refine.sce"; ..
-	       "Static Contact",           "demo_static_contact.sce"; ..
-	       "Step by Step",             "demo_step_by_step.sce"; ..
-	       "Stokes 2D Poiseuille Arc", "demo_stokes_2D_poiseuille_arc.sce"; ..
-	       "Stokes 2D Poiseuille",     "demo_stokes_2D_poiseuille.sce"; ..
-	       "Stokes 2D tube",           "demo_stokes_2D_tube.sce"; ..
-	       "Stokes 3D tank",           "demo_stokes_3D_tank.sce"; ..
-	       "Structural optimization",  "demo_structural_optimization.sce"; ..
-	       "topological optimization", "demo_topological_optimization.sce"; ..
-	       "Tripod",                   "demo_tripod.sce"; ..
-	       "Wave 2D",                  "demo_wave2D.sce"; ..
-	       "Wave equation",            "demo_wave_equation.sce"];
+subdemolist = ["Bilaplacian",                     "demo_bilaplacian.sce"; ..
+               "Crack",                           "demo_crack.sce"; ..
+	       "Continuation method",             "demo_continuation.sce"; ..
+	       "Convection in a rotating cavity", "demo_convection_rotating_cavity.sce"; ..
+	       "Fictitious domains",              "demo_fictitious_domains.sce"; ..
+	       "Final Laplacian",                 "demo_finallaplacian.sce"; ..
+	       "Laplacian 1D",                    "demo_laplacian1D.sce"; ..
+	       "Laplacian",                       "demo_laplacian.sce"; ..
+	       "Mesh generation",                 "demo_mesh_generation.sce"; ..
+	       "Mortar",                          "demo_mortar.sce"; ..
+	       "Navier-Stokes",                   "demo_Navier_Stokes.sce"; ..
+	       "Nonlinear Elasticity",            "demo_nonlinear_elasticity.sce"; ..
+	       "Plasticity",                      "demo_plasticity.sce"; ..
+	       "Plate",                           "demo_plate.sce"; ..
+	       "Refine",                          "demo_refine.sce"; ..
+	       "Slice",                           "demo_slices.sce"; ..
+	       "Static Contact",                  "demo_static_contact.sce"; ..
+	       "Step by Step",                    "demo_step_by_step.sce"; ..
+	       "Stokes 2D Poiseuille Arc",        "demo_stokes_2D_poiseuille_arc.sce"; ..
+	       "Stokes 2D Poiseuille",            "demo_stokes_2D_poiseuille.sce"; ..
+	       "Stokes 2D tube",                  "demo_stokes_2D_tube.sce"; ..
+	       "Stokes 3D tank",                  "demo_stokes_3D_tank.sce"; ..
+	       "Structural optimization",         "demo_structural_optimization.sce"; ..
+	       "topological optimization",        "demo_topological_optimization.sce"; ..
+	       "Tripod",                          "demo_tripod.sce"; ..
+	       "Wave 2D",                         "demo_wave2D.sce"; ..
+	       "Wave equation",                   "demo_wave_equation.sce"];
 
 subdemolist(:,2) = demopath + subdemolist(:,2);
 // ====================================================================
-
diff --git a/interface/src/scilab/demos/test_plasticity_new_brick.sce b/interface/src/scilab/demos/test_plasticity_new_brick.sce
deleted file mode 100644
index 6f14114..0000000
--- a/interface/src/scilab/demos/test_plasticity_new_brick.sce
+++ /dev/null
@@ -1,157 +0,0 @@
-gf_workspace('clear all');
-
-//
-
-// We try to compute a plasticity problem with a Von Mises crierion
-// For convenience we consider an homogenous Dirichlet condition on the left
-// of the domain and an easy computed Neumann Condition on the right
-
-//
-
-// Initialize used data
-L      = 100;
-H      = 20;
-lambda = 121150;
-mu     = 80769;
-von_mises_threshold = 8000;
-f = [0 -330]';
-t = [0 0.9032 1 1.1 1.3 1.5 1.7 1.74 1.7 1.5 1.3 1.1 1 0.9032 0.7 0.5 0.3 0.1 0];
-
-// Create the mesh
-m = gf_mesh('triangles grid', [0:4:L], [0:2:H]);
-
-// Plotting
-h_graph = scf();
-h_graph.color_map = jetcolormap(256);
-drawlater;
-gf_plot_mesh(m, 'vertices', 'on', 'convexes', 'on');
-drawnow;
-
-// Define used MeshIm
-mim = gf_mesh_im(m);  gf_mesh_im_set(mim, 'integ', gf_integ('IM_TRIANGLE(6)')); // Gauss methods on triangles
-
-// Define used MeshFem
-mf_u     = gf_mesh_fem(m,2); gf_mesh_fem_set(mf_u,     'fem', gf_fem('FEM_PK(2,2)'));
-mf_data  = gf_mesh_fem(m);   gf_mesh_fem_set(mf_data,  'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,0)'));
-mf_sigma = gf_mesh_fem(m,4); gf_mesh_fem_set(mf_sigma, 'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,1)'));
-mf_err   = gf_mesh_fem(m);   gf_mesh_fem_set(mf_err,   'fem', gf_fem('FEM_PK(2,0)'));
-mf_vm    = gf_mesh_fem(m);   gf_mesh_fem_set(mf_vm,    'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,1)'));
-mf_pl    = gf_mesh_fem(m);   gf_mesh_fem_set(mf_pl,    'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,1)'));
-
-// Find the border of the domain
-P = gf_mesh_get(m, 'pts');
-pidleft  = find(abs(P(1,:))<1e-6); // Retrieve index of points which x near to 0
-pidright = find(abs(P(1,:) - L)<1e-6); // Retrieve index of points which x near to L
-fleft    = gf_mesh_get(m, 'faces from pid', pidleft); 
-fright   = gf_mesh_get(m, 'faces from pid', pidright);
-
-// Decomposed the mesh into 2 regions with different values of Lamé coeff
-CV       = gf_mesh_get(m, 'cvid');
-CVbottom = find(CV <= 250); // Retrieve index of convex located at the bottom
-CVtop    = find(CV > 250);  // Retrieve index of convex located at the top
-
-// Definition of Lame coeff
-lambda(CVbottom) = 121150; // Stell
-lambda(CVtop)    = 84605;  // Iron
-//lambda(CV) = 84605;
-mu(CVbottom) = 80769; // Stell
-mu(CVtop)    = 77839; // Iron
-//mu(CV) = 77839;
-von_mises_threshold(CVbottom) = 7000;
-von_mises_threshold(CVtop)    = 8000;
-
-// Assign boundary numbers
-gf_mesh_set(m,'boundary',1,fleft);  // for Dirichlet condition
-gf_mesh_set(m,'boundary',2,fright); // for Neumann condition
-
-// Create the model
-md = gf_model('real');
-
-// Declare that u is the unknown of the system on mf_u
-// 2 is the number of version of the data stored, for the time integration scheme 
-gf_model_set(md, 'add fem variable', 'u', mf_u, 2); 
-
-// Declare that lambda is a data of the system on mf_data
-gf_model_set(md, 'add initialized fem data', 'lambda', mf_data, lambda);
-
-// Declare that mu is a data of the system on mf_data
-gf_model_set(md, 'add initialized fem data', 'mu', mf_data, mu);
-
-// Declare that von_mises_threshold is a data of the system on mf_data
-gf_model_set(md, 'add initialized fem data', 'von_mises_threshold', mf_data, von_mises_threshold);
-
-// Declare that sigma is a data of the system on mf_sigma
-// 2 is the number of version of the data stored, for the time integration scheme
-gf_model_set(md, 'add fem data', 'sigma', mf_sigma);
-
-// Add plasticity brick on u
-gf_model_set(md, 'add elastoplasticity brick', mim, 'VM', 'u', 'lambda', 'mu', 'von_mises_threshold', 'sigma');
-
-// Add homogeneous Dirichlet condition to u on the the left hand side of the domain
-gf_model_set(md, 'add Dirichlet condition with multipliers', mim, 'u', mf_u, 1);
-
-// Add a source term to the system
-gf_model_set(md,'add initialized fem data', 'VolumicData', mf_data, gf_mesh_fem_get_eval(mf_data, list(list(f(1,1)),list(f(2,1)*t(1)))));
-gf_model_set(md, 'add source term brick', mim, 'u', 'VolumicData', 2);
-
-VM = zeros(1,gf_mesh_fem_get(mf_vm, 'nbdof'));
-
-nbstep = size(t,2);
-
-dd = gf_mesh_fem_get(mf_err, 'basic dof from cvid');
-
-h_graph_2 = scf();
-h_graph_2.color_map = jetcolormap(256);
-
-h_graph_3 = scf();
-h_graph_3.color_map = jetcolormap(256);
-
-for step=1:nbstep,
-  if step > 1 then
-    gf_model_set(md, 'variable', 'VolumicData', gf_mesh_fem_get_eval(mf_data, list(list(f(1,1)),list(f(2,1)*t(step)))));
-  end
-
-  // Solve the system
-  gf_model_get(md, 'solve','lsolver', 'superlu', 'lsearch', 'simplest',  'alpha min', 0.8, 'very noisy', 'max_iter', 100, 'max_res', 1e-6);
-
-  // Retrieve the solution U
-  U = gf_model_get(md, 'variable', 'u', 0);
-    
-  // Compute new plasticity constraints used to compute 
-  // the Von Mises or Tresca stress
-  gf_model_get(md, 'elastoplasticity next iter', mim, 'u', 'VM', 'lambda', 'mu', 'von_mises_threshold', 'sigma');
-  plast = gf_model_get(md, 'compute plastic part', mim, mf_pl, 'u', 'VM', 'lambda', 'mu', 'von_mises_threshold', 'sigma');
-      
-  // Compute Von Mises or Tresca stress
-  VM = gf_model_get(md, 'compute elastoplasticity Von Mises or Tresca', 'sigma', mf_vm, 'Von Mises');
-  
-  scf(h_graph_2);
-  drawlater;
-  clf(h_graph_2);
-  subplot(2,1,1);
-  gf_plot(mf_vm,VM,'deformed_mesh', 'on', 'deformation', U, 'deformation_mf', mf_u, 'refine', 4, 'deformation_scale',1); 
-  colorbar(min(VM),max(VM));
-
-  n = t(step);
-  title(['Von Mises criterion for t = ', string(n)]);
-  
-  ERR = gf_compute(mf_u, U, 'error estimate', mim);
-  E = ERR; E(dd) = ERR;
-
-  subplot(2,1,2);
-  gf_plot(mf_err, E, 'mesh','on', 'refine', 1); 
-  colorbar(min(E),max(E));
-  title('Error estimate');
-  drawnow;
-
-  scf(h_graph_3);
-  drawlater;
-  clf(h_graph_3);
-  gf_plot(mf_pl,plast,'deformed_mesh','on', 'deformation',U,'deformation_mf',mf_u,'refine', 4, 'deformation_scale',1); 
-  colorbar(min(plast),max(plast));
-  n = t(step);
-  title(['Plastification for t = ', string(n)]);
-  drawnow;
-
-  sleep(1000);
-end
diff --git a/interface/src/scilab/demos/tutorial1.sce b/interface/src/scilab/demos/tutorial1.sce
index 7ad6482..b743827 100644
--- a/interface/src/scilab/demos/tutorial1.sce
+++ b/interface/src/scilab/demos/tutorial1.sce
@@ -1,3 +1,11 @@
+if getos()=='Windows' then
+  // Under Windows, all the trace messages are available in the dos console
+  // Under Linuxs, all the trace messages are redirected to the Scilab console
+  consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
 m  = gf_mesh('cartesian',[0:.1:1],[0:.1:1]);
 mf = gf_mesh_fem(m,1); // create a meshfem of for a field of dimension 1 (i.e. a scalar field)
 gf_mesh_fem_set(mf,'fem',gf_fem('FEM_QK(2,2)'));
diff --git a/interface/src/scilab/help/builder_help.sce b/interface/src/scilab/help/builder_help.sce
index 11c5122..019718b 100644
--- a/interface/src/scilab/help/builder_help.sce
+++ b/interface/src/scilab/help/builder_help.sce
@@ -6,6 +6,6 @@
 
 help_dir = get_absolute_file_path('builder_help.sce');
 tbx_builder_help_lang("en_US", help_dir);
-tbx_builder_help_lang("fr_FR", help_dir);
+//tbx_builder_help_lang("fr_FR", help_dir);
 
 clear help_dir;
diff --git a/interface/src/scilab/help/en_US/examples/avoiding_bricks.xml b/interface/src/scilab/help/en_US/examples/avoiding_bricks.xml
index 94bb512..0d54d75 100644
--- a/interface/src/scilab/help/en_US/examples/avoiding_bricks.xml
+++ b/interface/src/scilab/help/en_US/examples/avoiding_bricks.xml
@@ -24,7 +24,7 @@
     demonstration demo_tripod_alt.m is very similar to the demo_tripod.sce
     except that the assembly is explicit:</para>
 
-    <programlisting role="example"> 
+    <programlisting role="example"><![CDATA[
 nbd = gf_mesh_fem_get(mfd, 'nbdof');
 F = gf_asm('boundary_source', 1, mim, mfu, mfd, repmat([0;-10;0],1,nbd));
 K = gf_asm('linear_elasticity', mim, mfu, mfd, lambda*ones(1,nbd),mu*ones(1,nbd));
@@ -53,19 +53,13 @@ end
 disp(sprintf('linear system solved in %.2f sec', timer()-t0));
 
 U = (N*UU).' + U0;
- </programlisting>
+ ]]></programlisting>
 
     <para>In getfem-interface, the assembly of vectors, and matrices is done
     via the gf_asm function. The Dirichlet condition u(x) = r(x) is handled in
     the weak form</para>
 
-    <para><inlineequation>
-        <inlinemediaobject>
-          <imageobject>
-            <imagedata align="center" fileref="../../mml/avoiding_eq1.mml" />
-          </imageobject>
-        </inlinemediaobject>
-      </inlineequation></para>
+    <para><latex style="center"><![CDATA[\int\left(h\left(x\right)u\left(x\right)\right)\cdot\nu\left(x\right)=\int r\left(x\right)\cdot\nu\left(x\right)\,\forall\nu]]></latex></para>
 
     <para>(where h(x) is a 3×3 matrix field - here it is constant and equal to
     the identity). The reduced system KK * UU = FF is then built via the
diff --git a/interface/src/scilab/help/en_US/examples/step_by_step_example.xml b/interface/src/scilab/help/en_US/examples/step_by_step_example.xml
index 6c42224..d91a5e7 100644
--- a/interface/src/scilab/help/en_US/examples/step_by_step_example.xml
+++ b/interface/src/scilab/help/en_US/examples/step_by_step_example.xml
@@ -26,13 +26,13 @@
     consider a regular mesh whose nodes are
     {xi=0...10,j=0..10=(i/10,j/10)}.</para>
 
-    <programlisting role="example"> 
+    <programlisting role="example"><![CDATA[ 
 // creation of a simple cartesian mesh
---> m = gf_mesh('cartesian',[0:.1:1],[0:.1:1])
+--> m = gf_mesh('cartesian',[0:.1:1],[0:.1:1])
 m =
      id: 0
     cid: 0
- </programlisting>
+ ]]></programlisting>
 
     <para>If you try to look at the value of m, you'll notice that it appears
     to be a structure containing two integers. The first one is its
@@ -45,10 +45,10 @@ m =
     <para>Now we can try to have a look at the mesh, with its vertices
     numbering and the convexes numbering:</para>
 
-    <programlisting role="example"> 
+    <programlisting role="example"><![CDATA[
 // we enable vertices and convexes labels
---> gf_plot_mesh(m, 'vertices', 'on', 'convexes', 'on');
- </programlisting>
+--> gf_plot_mesh(m, 'vertices', 'on', 'convexes', 'on');
+ ]]></programlisting>
 
     <para>As you can see, the mesh is regular, and the numbering of its nodes
     and convexes is also regular (this is guaranteed for cartesian meshes, but
@@ -57,10 +57,10 @@ m =
     <para>The next step is to create a mesh_fem object. This one links a mesh
     with a set of FEM.</para>
 
-    <programlisting role="example"> 
---> mf = gf_mesh_fem(m,1);    // create a mesh_fem of for a field of dimension 1 (i.e. a scalar field)
---> gf_mesh_fem_set(mf,'fem',gf_fem('FEM_QK(2,2)'));
- </programlisting>
+    <programlisting role="example"><![CDATA[
+--> mf = gf_mesh_fem(m,1);    // create a mesh_fem of for a field of dimension 1 (i.e. a scalar field)
+--> gf_mesh_fem_set(mf,'fem',gf_fem('FEM_QK(2,2)'));
+ ]]></programlisting>
 
     <para>The first instruction builds a new mesh_fem object, the second
     argument specifies that this object will be used to interpolate scalar
@@ -70,8 +70,8 @@ m =
     polynomials of degree 2k). As Q2 is a polynomial FEM, you can view the
     expression of its basis functions on the reference convex:</para>
 
-    <programlisting role="example"> 
---> gf_fem_get(gf_fem('FEM_QK(2,2)'), 'poly_str')
+    <programlisting role="example"><![CDATA[
+--> gf_fem_get(gf_fem('FEM_QK(2,2)'), 'poly_str')
 ans =
     '1 - 3*x - 3*y + 2*x^2 + 9*x*y + 2*y^2 - 6*x^2*y - 6*x*y^2 + 4*x^2*y^2'
     '4*x - 4*x^2 - 12*x*y + 12*x^2*y + 8*x*y^2 - 8*x^2*y^2'
@@ -82,15 +82,15 @@ ans =
     '-y + 3*x*y + 2*y^2 - 2*x^2*y - 6*x*y^2 + 4*x^2*y^2'
     '-4*x*y + 4*x^2*y + 8*x*y^2 - 8*x^2*y^2'
     'x*y - 2*x^2*y - 2*x*y^2 + 4*x^2*y^2'
- </programlisting>
+ ]]></programlisting>
 
     <para>Now, in order to perform numerical integrations on mf, we need to
     build a mesh_im object:</para>
 
-    <programlisting role="example"> 
+    <programlisting role="example"><![CDATA[
 // assign the same integration method on all convexes 
---> mim=gf_mesh_im(m, gf_integ('IM_EXACT_PARALLELEPIPED(2)'));
-  </programlisting>
+--> mim=gf_mesh_im(m, gf_integ('IM_EXACT_PARALLELEPIPED(2)'));
+  ]]></programlisting>
 
     <para>The integration method will be used to compute the various integrals
     on each element: here we choose to perform exact computations (no
@@ -111,11 +111,11 @@ ans =
     and convex faces. These sets (called "regions") are accessed via an
     integer #id:</para>
 
-    <programlisting role="example"> 
---> border = gf_mesh_get(m,'outer faces');
---> gf_mesh_set(m, 'region', 42, border); // create the region #42
---> gf_plot_mesh(m, 'regions', [42]); // the boundary edges appears in red
-  </programlisting>
+    <programlisting role="example"><![CDATA[
+--> border = gf_mesh_get(m,'outer faces');
+--> gf_mesh_set(m, 'region', 42, border); // create the region #42
+--> gf_plot_mesh(m, 'regions', [42]); // the boundary edges appears in red
+  ]]></programlisting>
 
     <para>Here we find the faces of the convexes which are on the boundary of
     the mesh (i.e. the faces which are not shared by two convexes). remark: we
@@ -137,63 +137,41 @@ ans =
     matrix and its right hand side are stored in a "model state" structure,
     created with the gf_mdstate constructor.</para>
 
-    <para>Let us build a problem with an easy solution: <inlineequation>
-        <inlinemediaobject>
-          <imageobject>
-            <imagedata fileref="../../mml/step_by_step_eq1.mml" />
-          </imageobject>
-        </inlinemediaobject>
-      </inlineequation>, then we have <inlineequation>
-        <inlinemediaobject>
-          <imageobject>
-            <imagedata fileref="../../mml/step_by_step_eq2.mml" />
-          </imageobject>
-        </inlinemediaobject>
-      </inlineequation> (the FEM won't be able to catch the exact solution
-    since we use a Q2 method).</para>
+    <para>Let us build a problem with an easy solution: 
+    <latex style="text"><![CDATA[u=x\left(x-1\right)y\left(y-1\right)+x^{5}]]></latex>, then we have 
+    <latex style="text"><![CDATA[\Delta u=2\left(x^{2}+y^{2}\right)-2\left(x+y\right)+20y^{3}]]></latex>
+    (the FEM won't be able to catch the exact solution since we use a Q2 method).</para>
 
     <para>We start with a "generic elliptic" brick, which handles
-    <inlineequation>
-        <inlinemediaobject>
-          <imageobject>
-            <imagedata fileref="../../mml/step_by_step_eq3.mml" />
-          </imageobject>
-        </inlinemediaobject>
-      </inlineequation> problems, where A can be a scalar field, a matrix
-    field, or an order 4 tensor field. By default, A=1.</para>
-
-    <programlisting role="example"> 
---> b0=gf_mdbrick('generic elliptic',mim,mf)
-  </programlisting>
+    <latex style="text"><![CDATA[-\text{div}\left(A\nabla u\right)=\cdots]]></latex>
+    problems, where A can be a scalar field, a matrix field, or an order 4 tensor field. By default, A=1.</para>
+
+    <programlisting role="example"><![CDATA[ 
+--> b0=gf_mdbrick('generic elliptic',mim,mf)
+  ]]></programlisting>
 
     <para>Each brick embeds a number of parameter fields. In the case of the
     generic elliptic brick, there is only one parameter field, the A(x)
-    coefficient in <inlineequation>
-        <inlinemediaobject>
-          <imageobject>
-            <imagedata fileref="../../mml/step_by_step_eq3.mml" />
-          </imageobject>
-        </inlinemediaobject>
-      </inlineequation>. It is possible to view the list of parameters of the
-    brick with</para>
-
-    <programlisting role="example"> 
---> gf_mdbrick_get(b0, 'param list')
+    coefficient in <latex style="text"><![CDATA[-\text{div}\left(A\nabla u\right)=\cdots]]></latex>.
+    It is possible to view the list of parameters of the brick with</para>
+
+    <programlisting role="example"><![CDATA[ 
+--> gf_mdbrick_get(b0, 'param list')
 ans =
 
     'A'
---> gf_mdbrick_get(b0, 'param', 'A')
+--> gf_mdbrick_get(b0, 'param', 'A')
 
 ans =
 
      1
- </programlisting>
+ ]]></programlisting>
 
     <para>Next we add a Dirichlet condition on the domain boundary:</para>
 
-    <programlisting role="example"> 
---> b1=gf_mdbrick('dirichlet',b0,42,mf,'penalized')
-  </programlisting>
+    <programlisting role="example"><![CDATA[
+--> b1=gf_mdbrick('dirichlet',b0,42,mf,'penalized')
+  ]]></programlisting>
 
     <para>Here the number 42 is the region number to which the dirichlet
     condition is applied. The 'penalized' says that the Dirichlet condition
@@ -201,30 +179,18 @@ ans =
     (augmented system, direct elimination). A mesh fem argument is also
     required, as the Dirichlet condition u=r is imposed in a weak form </para>
 
-    <para><inlineequation>
-        <inlinemediaobject>
-          <imageobject>
-            <imagedata fileref="../../mml/step_by_step_eq4.mml" />
-          </imageobject>
-        </inlinemediaobject>
-      </inlineequation> </para>
+    <para><latex align="center"><![CDATA[\int u\left(x\right)\nu\left(x\right)=\int r\left(x\right)\nu\left(x\right)\,\forall\nu]]></latex></para>
 
     <para>where v is taken in the space of multipliers given by here by
     mf.</para>
 
     <para>By default, the Dirichlet brick imposes u=0 on the specified
-    boundary. We change this to <inlineequation>
-        <inlinemediaobject>
-          <imageobject>
-            <imagedata fileref="../../mml/step_by_step_eq5.mml" />
-          </imageobject>
-        </inlinemediaobject>
-      </inlineequation>:</para>
-
-    <programlisting role="example"> 
---> R=gf_mesh_fem_get(mf, 'eval', list('(x-.5).^2 + (y-.5).^2 + x/5 - y/3'));
---> gf_mdbrick_set(b1, 'param', 'R', mf, R); 
-  </programlisting>
+    boundary. We change this to <latex style="text"><![CDATA[u=\left(x-0.5\right)^{2}+\left(y-0.5\right)^{2}+x/5-y/3]]></latex>:</para>
+
+    <programlisting role="example"><![CDATA[ 
+--> R=gf_mesh_fem_get(mf, 'eval', list('(x-.5).^2 + (y-.5).^2 + x/5 - y/3'));
+--> gf_mdbrick_set(b1, 'param', 'R', mf, R); 
+  ]]></programlisting>
 
     <para>Remark: the polynomial expression was interpolated on mf. It is
     possible only if mf is of Lagrange type. In this first example we use the
@@ -236,19 +202,19 @@ ans =
     <para>A "model state" variable is created, and the solver is
     launched:</para>
 
-    <programlisting role="example"> 
---> mds=gf_mdstate('real')
---> gf_mdbrick_get(b1, 'solve', mds)
- </programlisting>
+    <programlisting role="example"><![CDATA[
+--> mds=gf_mdstate('real')
+--> gf_mdbrick_get(b1, 'solve', mds)
+ ]]></programlisting>
 
     <para>The model state now contains the solution (as well as other things,
     such as the linear system which was solved). It is extracted, a display
     into a matlab figure.</para>
 
-    <programlisting role="example"> 
---> U=gf_mdstate_get(mds, 'state');
---> gf_plot(mf, U, 'mesh','on');
- </programlisting>
+    <programlisting role="example"><![CDATA[
+--> U=gf_mdstate_get(mds, 'state');
+--> gf_plot(mf, U, 'mesh','on');
+ ]]></programlisting>
   </refsection>
 
   <refsection>
diff --git a/interface/src/scilab/help/en_US/gf_asm.xml b/interface/src/scilab/help/en_US/gf_asm.xml
index 06f90db..6a56215 100644
--- a/interface/src/scilab/help/en_US/gf_asm.xml
+++ b/interface/src/scilab/help/en_US/gf_asm.xml
@@ -9,312 +9,389 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_asm</refname>
-
-    <refpurpose>General assembly function.</refpurpose>
+    <refpurpose>
+  General assembly function.
+
+  Many of the functions below use more than one mesh_fem: the main
+  mesh_fem (mf_u) used for the main unknown, and data mesh_fem (mf_d)
+  used for the data. It is always assumed that the Qdim of mf_d is
+  equal to 1: if mf_d is used to describe vector or tensor data, you
+  just have to "stack" (in fortran ordering) as many scalar fields as
+  necessary.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-vec F = gf_asm('volumic source', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec F)
-vec F = gf_asm('boundary source',int boundary_num, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d,vec G)
-spmat M = gf_asm('mass matrix', mesh_im mim, mesh_fem mf1[, mesh_fem mf2])
-spmat M = gf_asm('laplacian', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec A)
-spmat K = gf_asm('linear elasticity', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec lambda_d, vec mu_d)
-[spmat K,B] = gf_asm('stokes', mesh_im mim, mesh_fem mf_u, mesh_fem mf_p, mesh_fem mf_d, vec visc)
-[spmat H,vec R] = gf_asm('dirichlet', int boundary_num, mesh_im mim, mesh_fem mf_u, 
-mesh_fem mf_d, mat Hd, vec Rd)
-M = gf_asm('boundary qu term', int boundary_num, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat Q)
-[spmat Q, vec G,spmat H,vec R,vec F]=gf_asm('pdetool boundary conditions',
-mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat b, mat e[, string f_expr])
-[...] = gf_asm('volumic'[, CVLST], string expr, mesh_im mim.., [mesh_fem mf1[, mf2,..]][,mat data...])
-[...] = gf_asm('boundary', int bnum, string expr, mesh_im mim.., [mesh_fem mf1[, mf2,..]][,mat data...])
-M = gf_asm('interpolation matrix', mesh_fem mf1, mesh_fem mf2)
-M = gf_asm('extrapolation matrix', mesh_fem mf1, mesh_fem mf2)
-    </synopsis>
+    <synopsis>M = gf_asm('mass matrix', mesh_im mim, mesh_fem mf1[, mesh_fem mf2[, boundary_num]])</synopsis>
+    <synopsis>M = gf_asm('lsneuman matrix', mesh_im mim, mesh_fem mf1, mesh_fem mf2, levelset ls)</synopsis>
+    <synopsis>M = gf_asm('nlsgrad matrix', mesh_im mim, mesh_fem mf1, mesh_fem mf2, levelset ls)</synopsis>
+    <synopsis>M = gf_asm('stabilization patch matrix', @tm mesh, mesh_fem mf,  mesh_im mim, real ratio, real h)</synopsis>
+    <synopsis>L = gf_asm('laplacian', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a)</synopsis>
+    <synopsis>Le = gf_asm('linear elasticity', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec lambda_d, vec mu_d)</synopsis>
+    <synopsis>TRHS = gf_asm('nonlinear elasticity', mesh_im mim, mesh_fem mf_u, vec U, string law, mesh_fem mf_d, mat params, {'tangent matrix'|'rhs'|'incompressible tangent matrix', mesh_fem mf_p, vec P|'incompressible rhs', mesh_fem mf_p, vec P})</synopsis>
+    <synopsis>{K, B} = gf_asm('stokes', mesh_im mim, mesh_fem mf_u, mesh_fem mf_p, mesh_fem mf_d, vec nu)</synopsis>
+    <synopsis>A = gf_asm('helmholtz', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec k)</synopsis>
+    <synopsis>A = gf_asm('bilaplacian', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a)</synopsis>
+    <synopsis>A = gf_asm('bilaplacian KL', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a, vec nu)</synopsis>
+    <synopsis>V = gf_asm('volumic source', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec fd)</synopsis>
+    <synopsis>B = gf_asm('boundary source', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec G)</synopsis>
+    <synopsis>{HH, RR} = gf_asm('dirichlet', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat H, vec R [, threshold])</synopsis>
+    <synopsis>Q = gf_asm('boundary qu term',int boundary_num, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat q)</synopsis>
+    <synopsis>{...} = gf_asm('volumic' [,CVLST], expr [, mesh_ims, mesh_fems, data...])</synopsis>
+    <synopsis>{...} = gf_asm('boundary', int bnum, string expr [, mesh_im mim, mesh_fem mf, data...])</synopsis>
+    <synopsis>Mi = gf_asm('interpolation matrix', mesh_fem mf, mesh_fem mfi)</synopsis>
+    <synopsis>Me = gf_asm('extrapolation matrix',mesh_fem mf, mesh_fem mfe)</synopsis>
+    <synopsis>B = gf_asm('integral contact Uzawa projection', int bnum, mesh_im mim, mesh_fem mf_u, vec U, mesh_fem mf_lambda, vec vec_lambda, mesh_fem mf_obstacle, vec obstacle, scalar r [, {scalar coeff | mesh_fem mf_coeff, vec coeff} [, int option[, scalar alpha, vec W]]])</synopsis>
+    <synopsis>B = gf_asm('level set normal source term', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_lambda, vec vec_lambda, mesh_fem mf_levelset, vec levelset)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>
+  General assembly function.
+
+  Many of the functions below use more than one mesh_fem: the main
+  mesh_fem (mf_u) used for the main unknown, and data mesh_fem (mf_d)
+  used for the data. It is always assumed that the Qdim of mf_d is
+  equal to 1: if mf_d is used to describe vector or tensor data, you
+  just have to "stack" (in fortran ordering) as many scalar fields as
+  necessary.
+</para>
+  </refsection>
 
-    <para>Many of the functions below use more than one mesh_fem: the main
-    mesh_fem (mf_u) used for the main unknow, and data mesh_fem (mf_d) used
-    for the data. It is always assumed that the Qdim of mf_d is equal to 1: if
-    mf_d is used to describe vector or tensor data, you just have to "stack"
-    (in fortran ordering) as many scalar fields as necessary.</para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>V = gf_asm('volumic_source',MeshIm mim, MeshFem mf_u, MeshFem
-        mf_d, vec fd) Assembly of a volumic source term. Output a vector `V`,
-        assembled on the MeshFem `mf_u`, using the data vector `fd` defined on
-        the data MeshFem `mf_d`. `fd` may be real or complex-valued.</para>
-
-        <para>Return a vec object.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_asm('boundary_source',int bnum, MeshIm mim, MeshFem mf_u,
-        MeshFem mf_d, vec G) Assembly of a boundary source term. `G` should be
-        a [Qdim x N] matrix, where N is the number of dof of `mf_d`, and Qdim
-        is the dimension of the unkown u (that is set when creating the
-        MeshFem).</para>
-
-        <para>Return a vec object.</para>
-      </listitem>
-
-      <listitem>
-        <para>M = gf_asm('mass_matrix',MeshIm mim, MeshFem mf1[, MeshFem mf2])
-        Assembly of a mass matrix.</para>
-
-        <para>Return a Spmat object.</para>
-      </listitem>
-
-      <listitem>
-        <para>L = gf_asm('laplacian',MeshIm mim, MeshFem mf_u, MeshFem mf_d,
-        vec a) Assembly of the matrix for the Laplacian problem.
-        <inlineequation>
-            <inlinemediaobject>
-              <imageobject>
-                <imagedata fileref="../mml/gf_asm_eq1.mml" />
-              </imageobject>
-            </inlinemediaobject>
-          </inlineequation> with <literal>a</literal> scalar. Return a Spmat
-        object.</para>
-      </listitem>
-
-      <listitem>
-        <para>Le = gf_asm('linear_elasticity',MeshIm mim, MeshFem mf_u,
-        MeshFem mf_d, vec lambda_d, vec mu_d) Assembles of the matrix for the
-        linear (isotropic) elasticity problem. <inlineequation>
-            <inlinemediaobject>
-              <imageobject>
-                <imagedata fileref="../mml/gf_asm_eq2.mml" />
-              </imageobject>
-            </inlinemediaobject>
-          </inlineequation> with <literal>C</literal> defined via
-        <literal>lambda_d</literal> and <literal>mu_d</literal>.</para>
-
-        <para>Return a Spmat object.</para>
-      </listitem>
-
-      <listitem>
-        <para>TRHS = gf_asm('nonlinear_elasticity',MeshIm mim, MeshFem mf_u,
-        vec U, string law, MeshFem mf_d, mat params, list('tangent
-        matrix'|'rhs'|'incompressible tangent matrix', MeshFem mf_p, vec
-        P|'incompressible rhs', MeshFem mf_p, vec P)) Assembles terms (tangent
-        matrix and right hand side) for nonlinear elasticity. The solution
-        <literal>U</literal> is required at the current time-step. The
-        <emphasis>law</emphasis> may be choosen among:</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>'SaintVenant Kirchhoff': Linearized law, should be avoided).
-            This law has the two usual Lame coefficients as parameters, called
-            lambda and mu.</para>
-          </listitem>
-
-          <listitem>
-            <para>'Mooney Rivlin': Only for incompressibility. This law has
-            two parameters, called C1 and C2.</para>
-          </listitem>
-
-          <listitem>
-            <para>'Ciarlet Geymonat': This law has 3 parameters, called
-            lambda, mu and gamma, with gamma chosen such that gamma is in
-            ]-lambda/2-mu, -mu[.</para>
-          </listitem>
-        </itemizedlist>
-
-        <para>The parameters of the material law are described on the MeshFem
-        <literal>mf_d</literal>. The matrix <literal>params</literal> should
-        have <literal>nbdof(mf_d)</literal> columns, each row correspounds to
-        a parameter. The last argument selects what is to be built: either the
-        tangent matrix, or the right hand side. If the incompressibility is
-        considered, it should be followed by a MeshFem
-        <literal>mf_p</literal>, for the pression.</para>
-
-        <para>Return a Spmat object (tangent matrix), vec object (right hand
-        side), tuple of Spmat objects (incompressible tangent matrix), or
-        tuple of vec objects (incompressible right hand side).</para>
-      </listitem>
-
-      <listitem>
-        <para>list(K, B) = gf_asm('stokes',MeshIm mim, MeshFem mf_u, MeshFem
-        mf_p, MeshFem mf_d, vec nu) Assembly of matrices for the Stokes
-        problem.</para>
-
-        <para><inlineequation>
-            <inlinemediaobject>
-              <imageobject>
-                <imagedata fileref="../mml/gf_asm_eq3.mml" />
-              </imageobject>
-            </inlinemediaobject>
-          </inlineequation></para>
-
-        <para><inlineequation>
-            <inlinemediaobject>
-              <imageobject>
-                <imagedata fileref="../mml/gf_asm_eq4.mml" />
-              </imageobject>
-            </inlinemediaobject>
-          </inlineequation> with <emphasis>nu</emphasis>, the fluid's dynamic
-        viscosity. </para>
-
-        <para>On output, <literal>K</literal> is the usual linear elasticity
-        stiffness matrix with <emphasis>lambda = 0</emphasis> and
-        <literal>2.mu = nu</literal>. <literal>B</literal> is a matrix
-        corresponding to <emphasis>\int p\nabla\cdot\phi</emphasis>.
-        <literal>K</literal> and <literal>B</literal> are Spmat
-        object's.</para>
-      </listitem>
-
-      <listitem>
-        <para>A = gf_asm('helmholtz',MeshIm mim, MeshFem mf_u, MeshFem mf_d,
-        vec k) Assembly of the matrix for the Helmholtz problem. </para>
-
-        <para><inlineequation>
-            <inlinemediaobject>
-              <imageobject>
-                <imagedata fileref="../mml/gf_asm_eq5.mml" />
-              </imageobject>
-            </inlinemediaobject>
-          </inlineequation> with <literal>k</literal> complex scalar.</para>
-
-        <para>Return a Spmat object.</para>
-      </listitem>
-
-      <listitem>
-        <para>A = gf_asm('bilaplacian',MeshIm mim, MeshFem mf_u, MeshFem mf_d,
-        vec a) Assembly of the matrix for the Bilaplacian problem.</para>
-
-        <para><inlineequation>
-            <inlinemediaobject>
-              <imageobject>
-                <imagedata fileref="../mml/gf_asm_eq6.mml" />
-              </imageobject>
-            </inlinemediaobject>
-          </inlineequation> with <literal>a</literal> scalar.</para>
-
-        <para>Return a Spmat object.</para>
-      </listitem>
-
-      <listitem>
-        <para>list(HH, RR) = gf_asm('dirichlet',int bnum, MeshIm mim, MeshFem
-        mf_u, MeshFem mf_d, mat H, vec R [, threshold]) Assembly of Dirichlet
-        conditions of type <emphasis>h.u = r</emphasis>. Handle <emphasis>h.u
-        = r</emphasis> where <literal>h</literal> is a square matrix (of any
-        rank) whose size is equal to the dimension of the unkown
-        <literal>u</literal>. This matrix is stored in <literal>H</literal>,
-        one column per dof in <emphasis>mf_d</emphasis>, each column
-        containing the values of the matrix <literal>h</literal> stored in
-        fortran order: <emphasis>H(:,j) = [h11(x_j) h21(x_j) h12(x_j)
-        h22(x_j)]</emphasis> if <literal>u</literal> is a 2D vector field. Of
-        course, if the unknown is a scalar field, you just have to set
-        <literal>H = ones(1, N)</literal>, where <literal>N</literal> is the
-        number of dof of <literal>mf_d</literal>. This is basically the same
-        than calling <emphasis>gf_asm('boundary_qu_term')</emphasis> for
-        <literal>H</literal> and calling
-        <emphasis>gf_asm('neumann')</emphasis> for <literal>R</literal>,
-        except that this function tries to produce a 'better' (more diagonal)
-        constraints matrix (when possible). See also
-        <emphasis>gf_spmat_get(M,('Dirichlet_nullspace')</emphasis>.</para>
-      </listitem>
-
-      <listitem>
-        <para>Q = gf_asm('boundary_qu_term',int boundary_num, MeshIm mim,
-        MeshFem mf_u, MeshFem mf_d, mat q) Assembly of a boundary qu term.
-        <literal>q</literal> should be be a <emphasis>[Qdim x Qdim x
-        N]</emphasis> array, where <literal>N</literal> is the number of dof
-        of <literal>mf_d</literal>, and <literal>Qdim</literal> is the
-        dimension of the unkown <literal>u</literal> (that is set when
-        creating the MeshFem).</para>
-
-        <para>Return a Spmat object.</para>
-      </listitem>
-
-      <listitem>
-        <para>list(Q, G, H, R, F) = gf_asm('pdetool_boundary_conditions',mf_u,
-        mf_d, b, e[, f_expr]) Assembly of pdetool boundary conditions. `B` is
-        the boundary matrix exported by pdetool, and `E` is the edges array.
-        `f_expr` is an optionnal expression (or vector) for the volumic term.
-        On return `Q, G, H, R, F` contain the assembled boundary conditions
-        (`Q` and `H` are matrices), similar to the ones returned by the
-        function ASSEMB from PDETOOL.</para>
-      </listitem>
-
-      <listitem>
-        <para>list(...) = gf_asm('volumic' [,CVLST], expr [, mesh_ims,
-        mesh_fems, data...]) Generic assembly procedure for volumic assembly.
-        The expression <emphasis>expr</emphasis> is evaluated over the
-        MeshFem's listed in the arguments (with optional data) and assigned to
-        the output arguments. For details about the syntax of assembly
-        expressions, please refer to the getfem user manual (or look at the
-        file getfem_assembling.h in the getfem++ sources). For example, the L2
-        norm of a field can be computed with <emphasis>gf_compute(MF, U,('L2
-        norm')</emphasis> or with:</para>
-
-        <para><emphasis>gf_asm('volumic','u=data(#1);
-        V()+=u(i).u(j).comp(Base(#1).Base(#1))(i,j)',mim,mf,U)
-        </emphasis></para>
-
-        <para>The Laplacian stiffness matrix can be evaluated with
-        <emphasis>gf_asm('laplacian',mim, mf, A)</emphasis> or equivalently
-        with:</para>
-
-        <para><emphasis>gf_asm('volumic','a=data(#2);M(#1,#1)+=sym(comp(Grad(#1).Grad(#1).Base(#2))(
-        :,i,:,i,j).a(j))', mim,mf, A);</emphasis></para>
-      </listitem>
-
-      <listitem>
-        <para>list(...) = gf_asm('boundary',int bnum, string expr [, MeshIm
-        mim, MeshFem mf, data...]) Generic boundary assembly. See the help for
-        <emphasis>gf_asm('volumic')</emphasis>.</para>
-      </listitem>
-
-      <listitem>
-        <para>Mi = gf_asm('interpolation_matrix',MeshFem mf, MeshFem mfi)
-        Build the interpolation matrix from a MeshFem onto another
-        MeshFem.</para>
-
-        <para>Return a matrix <literal>Mi</literal>, such that <emphasis>V =
-        Mi.U</emphasis> is equal to <emphasis>gf_compute(MF,
-        U,('interpolate_on',mfi)</emphasis>. Useful for repeated
-        interpolations. Note that this is just interpolation, no elementary
-        integrations are involved here, and <literal>mfi</literal> has to be
-        lagrangian. In the more general case, you would have to do a L2
-        projection via the mass matrix. <literal>Mi</literal> is a Spmat
-        object.</para>
-      </listitem>
-
-      <listitem>
-        <para>Me = gf_asm('extrapolation_matrix',MeshFem mf, MeshFem mfe)
-        Build the extrapolation matrix from a MeshFem onto another
-        MeshFem.</para>
-
-        <para>Return a matrix <literal>Me</literal>, such that <emphasis>V =
-        Me.U</emphasis> is equal to <emphasis>gf_compute(MF,
-        U,('extrapolate_on',mfe)</emphasis>. Useful for repeated
-        extrapolations. <literal>Me</literal> is a Spmat object.</para>
-      </listitem>
+    <listitem>
+    <para><literal>M = gf_asm('mass matrix', mesh_im mim, mesh_fem mf1[, mesh_fem mf2[, boundary_num]])</literal></para>
+
+    <para>       Assembly of a mass matrix.
+    
+    Return a spmat object.
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_asm('lsneuman matrix', mesh_im mim, mesh_fem mf1, mesh_fem mf2, levelset ls)</literal></para>
+
+    <para>         Assembly of a level set Neuman  matrix.
+      
+      Return a spmat object.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_asm('nlsgrad matrix', mesh_im mim, mesh_fem mf1, mesh_fem mf2, levelset ls)</literal></para>
+
+    <para>         Assembly of a nlsgrad matrix.
+      
+      Return a spmat object.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_asm('stabilization patch matrix', @tm mesh, mesh_fem mf,  mesh_im mim, real ratio, real h)</literal></para>
+
+    <para>         Assembly of stabilization patch matrix .
+      
+      Return a spmat object.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>L = gf_asm('laplacian', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a)</literal></para>
+
+    <para>         Assembly of the matrix for the Laplacian problem.
+      
+      <latex style="text"><![CDATA[\nabla\cdot(a(x)\nabla u)]]></latex>  with <literal>a</literal> a scalar.
+      
+      Return a spmat object.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Le = gf_asm('linear elasticity', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec lambda_d, vec mu_d)</literal></para>
+
+    <para>       Assembles of the matrix for the linear (isotropic) elasticity problem.
+
+    <latex style="text"><![CDATA[\nabla\cdot(C(x):\nabla u)]]></latex>
+    with <latex style="text"><![CDATA[C]]></latex> defined via <literal>lambda_d</literal> and <literal>mu_d</literal>.
+    
+    Return a spmat object.
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>TRHS = gf_asm('nonlinear elasticity', mesh_im mim, mesh_fem mf_u, vec U, string law, mesh_fem mf_d, mat params, {'tangent matrix'|'rhs'|'incompressible tangent matrix', mesh_fem mf_p, vec P|'incompressible rhs', mesh_fem mf_p, vec P})</literal></para>
+
+    <para>         Assembles terms (tangent matrix and right hand side) for nonlinear elasticity.
+      
+      The solution <literal>U</literal> is required at the current time-step. The <literal>law</literal>
+      may be choosen among:
+      
+      - 'SaintVenant Kirchhoff':
+      Linearized law, should be avoided). This law has the two usual
+      Lame coefficients as parameters, called lambda and mu.
+      - 'Mooney Rivlin':
+      Only for incompressibility. This law has two parameters,
+      called C1 and C2.
+      - 'Ciarlet Geymonat':
+      This law has 3 parameters, called lambda, mu and gamma, with
+      gamma chosen such that gamma is in ]-lambda/2-mu, -mu[.
+      
+    The parameters of the material law are described on the mesh_fem <literal>mf_d</literal>.
+    The matrix <literal>params</literal> should have <literal>nbdof(mf_d)</literal> columns, each row
+    correspounds to a parameter.
+
+    The last argument selects what is to be built: either the tangent
+    matrix, or the right hand side. If the incompressibility is
+    considered, it should be followed by a mesh_fem <literal>mf_p</literal>, for the
+    pression.
+
+    Return a spmat object (tangent matrix), vec object (right hand
+    side), tuple of spmat objects (incompressible tangent matrix), or
+    tuple of vec objects (incompressible right hand side).
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{K, B} = gf_asm('stokes', mesh_im mim, mesh_fem mf_u, mesh_fem mf_p, mesh_fem mf_d, vec nu)</literal></para>
+
+    <para>       Assembly of matrices for the Stokes problem.
+
+    <latex style="text"><![CDATA[-\nu(x)\Delta u + \nabla p = 0]]></latex>
+    <latex style="text"><![CDATA[\nabla\cdot u  = 0]]></latex>
+    with <latex style="text"><![CDATA[\nu]]></latex> (<literal>nu</literal>), the fluid's dynamic viscosity.
+
+    On output, <literal>K</literal> is the usual linear elasticity stiffness matrix with
+    <latex style="text"><![CDATA[\lambda = 0]]></latex> and
+    <latex style="text"><![CDATA[2\mu = \nu]]></latex>. <literal>B</literal> is a matrix
+    corresponding to <latex style="text"><![CDATA[\int p\nabla\cdot\phi]]></latex>.
+
+    <literal>K</literal> and <literal>B</literal> are spmat object's.
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>A = gf_asm('helmholtz', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec k)</literal></para>
+
+    <para>       Assembly of the matrix for the Helmholtz problem.
+
+    <latex style="text"><![CDATA[\Delta u + k^2 u]]></latex> = 0,  with <literal>k</literal> complex scalar.
+
+    Return a spmat object.
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>A = gf_asm('bilaplacian', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a)</literal></para>
+
+    <para>         Assembly of the matrix for the Bilaplacian problem.
+
+      <latex style="text"><![CDATA[\Delta(a(x)\Delta u) = 0]]></latex>   with <literal>a</literal> scalar.
+
+      Return a spmat object.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>A = gf_asm('bilaplacian KL', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a, vec nu)</literal></para>
+
+    <para>         Assembly of the matrix for the Bilaplacian problem with Kirchoff-Love formulation.
+
+      <latex style="text"><![CDATA[\Delta(a(x)\Delta u) = 0]]></latex>   with <literal>a</literal> scalar.
+
+      Return a spmat object.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>V = gf_asm('volumic source', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec fd)</literal></para>
+
+    <para>       Assembly of a volumic source term.
+
+    Output a vector <literal>V</literal>, assembled on the mesh_fem <literal>mf_u</literal>, using the data
+    vector <literal>fd</literal> defined on the data mesh_fem <literal>mf_d</literal>. <literal>fd</literal> may be real or
+    complex-valued.
+
+    Return a vec object.
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_asm('boundary source', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec G)</literal></para>
+
+    <para>       Assembly of a boundary source term.
+
+    <literal>G</literal> should be a [Qdim x N] matrix, where N is the number of dof
+    of <literal>mf_d</literal>, and Qdim is the dimension of the unkown u (that is set
+    when creating the mesh_fem).
+
+    Return a vec object.
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{HH, RR} = gf_asm('dirichlet', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat H, vec R [, threshold])</literal></para>
+
+    <para>       Assembly of Dirichlet conditions of type <literal>h.u = r</literal>.
+
+    Handle <literal>h.u = r</literal> where h is a square matrix (of any rank) whose
+    size is equal to the dimension of the unkown u. This matrix is
+    stored in <literal>H</literal>, one column per dof in <literal>mf_d</literal>, each column containing
+    the values of the matrix h stored in fortran order:
+
+    .. math::
+
+      <literal>H(:,j) = [h11(x_j) h21(x_j) h12(x_j) h22(x_j)]</literal>
+
+    if u is a 2D vector field.
+
+    Of course, if the unknown is a scalar field, you just have to set
+    <literal>H = ones(1, N)</literal>, where N is the number of dof of <literal>mf_d</literal>.
+
+    This is basically the same than calling gf_asm('boundary qu term')
+    for <literal>H</literal> and calling gf_asm('neumann') for <literal>R</literal>, except that this
+    function tries to produce a 'better' (more diagonal) constraints
+    matrix (when possible).
+
+    See also gf_spmat_get(spmat S, 'Dirichlet_nullspace').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Q = gf_asm('boundary qu term',int boundary_num, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat q)</literal></para>
+
+    <para>       Assembly of a boundary qu term.
+
+    <literal>q</literal> should be be a [Qdim x Qdim x N] array, where N is the number
+    of dof of <literal>mf_d</literal>, and Qdim is the dimension of the unkown u (that
+    is set when creating the mesh_fem).
+
+    Return a spmat object.
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{...} = gf_asm('volumic' [,CVLST], expr [, mesh_ims, mesh_fems, data...])</literal></para>
+
+    <para>         Generic assembly procedure for volumic assembly.
+
+      The expression <literal>expr</literal> is evaluated over the mesh_fem's listed in the
+      arguments (with optional data) and assigned to the output arguments.
+      For details about the syntax of assembly expressions, please refer
+      to the getfem user manual (or look at the file getfem_assembling.h
+      in the getfem++ sources).
+
+      For example, the L2 norm of a field can be computed with::
+
+        gf_compute('L2 norm') or with:
+
+        gf_asm('volumic','u=data(#1); V()+=u(i).u(j).comp(Base(#1).Base(#1))(i,j)',mim,mf,U)
+
+      The Laplacian stiffness matrix can be evaluated with::
+
+        gf_asm('laplacian',mim, mf, A) or equivalently with:
+
+        gf_asm('volumic','a=data(#2);M(#1,#1)+=sym(comp(Grad(#1).Grad(#1).Base(#2))(:,i,:,i,j).a(j))', mim,mf, A);
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{...} = gf_asm('boundary', int bnum, string expr [, mesh_im mim, mesh_fem mf, data...])</literal></para>
+
+    <para>         Generic boundary assembly.
+
+      See the help for gf_asm('volumic').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Mi = gf_asm('interpolation matrix', mesh_fem mf, mesh_fem mfi)</literal></para>
+
+    <para>       Build the interpolation matrix from a mesh_fem onto another mesh_fem.
+
+    Return a matrix <literal>Mi</literal>, such that <literal>V = Mi.U</literal> is equal to
+    gf_compute('interpolate_on',mfi). Useful for repeated interpolations.
+    Note that this is just interpolation, no elementary integrations
+    are involved here, and <literal>mfi</literal> has to be lagrangian. In the more
+    general case, you would have to do a L2 projection via the mass
+    matrix.
+
+    <literal>Mi</literal> is a spmat object.
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Me = gf_asm('extrapolation matrix',mesh_fem mf, mesh_fem mfe)</literal></para>
+
+    <para>       Build the extrapolation matrix from a mesh_fem onto another mesh_fem.
+
+    Return a matrix <literal>Me</literal>, such that <literal>V = Me.U</literal> is equal to
+    gf_compute('extrapolate_on',mfe). Useful for repeated
+    extrapolations.
+
+    <literal>Me</literal> is a spmat object.
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_asm('contact with friction Uzawa projection', int bnum, mesh_im mim, mesh_fem mf_u, vec U, mesh_fem mf_lambda, vec vec_lambda, mesh_fem mf_obstacle, vec obstacle, scalar r [, {scalar coeff | mesh_fem mf_coeff, vec coeff} [, int option[, scalar alpha, vec W]]])</literal></para>
+
+    <para>       Specific assembly procedure for the use of an Uzawa algorithm to solve
+      contact problems. Projects the term $-(\lambda - r (u_N-g))_-$ on the
+      finite element space of $\lambda$.
+
+    Return a vec object.
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_asm('level set normal source term', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_lambda, vec vec_lambda, mesh_fem mf_levelset, vec levelset)</literal></para>
+
+    <para>       Performs an assembly of the source term represented by <literal>vec_lambda</literal>
+    on <literal>mf_lambda</literal> considered to be a component in the direction of the
+    gradient of a levelset function (normal to the levelset) of a vector
+    field defined on <literal>mf_u</literal> on the boundary <literal>bnum</literal>.
+
+    Return a vec object.
+    
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_solve">gf_solve</link></member>
-
-      <member><link linkend="gf_compute">gf_compute('interpolate
-      on')</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_compute.xml b/interface/src/scilab/help/en_US/gf_compute.xml
index f28f68b..1be3830 100644
--- a/interface/src/scilab/help/en_US/gf_compute.xml
+++ b/interface/src/scilab/help/en_US/gf_compute.xml
@@ -9,236 +9,234 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_compute</refname>
-
-    <refpurpose>Various computations involving the solution U of the finite
-    element problem.</refpurpose>
+    <refpurpose>  
+  Various computations involving the solution U to a finite element problem.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-N = gf_compute(mf, U, 'L2 norm', mesh_im MIM [,ivec CVLST])
-N = gf_compute(mf, U, 'H1 semi norm', mesh_im MIM [,CVLST])
-N = gf_compute(mf, U, 'H1 norm', mesh_im MIM [,ivec CVLST])
-N = gf_compute(mf, U, 'H2 semi norm', mesh_im MIM [,CVLST])
-N = gf_compute(mf, U, 'H2 norm', mesh_im MIM [,ivec CVLST])
-DU = gf_compute(mf, U, 'gradient', mesh_fem mfgrad)
-D2U = gf_compute(mf, U, 'hessian', mesh_fem mfhess)
-U2 = gf_compute(mf, U, 'interpolate on', mesh_fem mf2)
-U2 = gf_compute(mf, U, 'interpolate on', mesh_slice sl)
-[U2[,mf2,[,X[,Y[,Z]]]]] = gf_compute(mf,U,'interpolate on Q1 grid', 
-      {'regular h', hxyz | 'regular N',Nxyz | X[,Y[,Z]]})
-U2 = gf_compute(mf, U, 'extrapolate on', mesh_fem mf2)
-E = gf_compute(mf, U, 'error estimate',  mesh_im MIM) 
-gf_compute(mf, U, 'convect', mesh_fem mf_v, vec V, scalar dt, int nt[, string option]) 
-  </synopsis>
+    <synopsis>n = gf_compute(mesh_fem MF, vec U, 'L2 norm', mesh_im mim[, mat CVids])</synopsis>
+    <synopsis>n = gf_compute(mesh_fem MF, vec U, 'L2 dist', mesh_im mim, mesh_fem mf2, vec U2[, mat CVids])</synopsis>
+    <synopsis>n = gf_compute(mesh_fem MF, vec U, 'H1 semi norm', mesh_im mim[, mat CVids])</synopsis>
+    <synopsis>n = gf_compute(mesh_fem MF, vec U, 'H1 semi dist', mesh_im mim, mesh_fem mf2, vec U2[, mat CVids])</synopsis>
+    <synopsis>n = gf_compute(mesh_fem MF, vec U, 'H1 norm', mesh_im mim[, mat CVids])</synopsis>
+    <synopsis>n = gf_compute(mesh_fem MF, vec U, 'H2 semi norm', mesh_im mim[, mat CVids])</synopsis>
+    <synopsis>n = gf_compute(mesh_fem MF, vec U, 'H2 norm', mesh_im mim[, mat CVids])</synopsis>
+    <synopsis>DU = gf_compute(mesh_fem MF, vec U, 'gradient', mesh_fem mf_du)</synopsis>
+    <synopsis>HU = gf_compute(mesh_fem MF, vec U, 'hessian', mesh_fem mf_h)</synopsis>
+    <synopsis>UP = gf_compute(mesh_fem MF, vec U, 'eval on triangulated surface', int Nrefine, [vec CVLIST])</synopsis>
+    <synopsis>Ui = gf_compute(mesh_fem MF, vec U, 'interpolate on', {mesh_fem mfi | slice sli | vec pts})</synopsis>
+    <synopsis>Ue = gf_compute(mesh_fem MF, vec U, 'extrapolate on', mesh_fem mfe)</synopsis>
+    <synopsis>E = gf_compute(mesh_fem MF, vec U, 'error estimate', mesh_im mim)</synopsis>
+    <synopsis>E = gf_compute(mesh_fem MF, vec U, 'convect', mesh_fem mf_v, vec V, scalar dt, int nt[, string option])</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  
+  Various computations involving the solution U to a finite element problem.
+</para>
+  </refsection>
 
-    <para>The first two arguments of this function are always mf and U, where U is a field defined on the mesh_fem mf.</para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>n = gf_compute(MF, U,('L2 norm',MeshIm mim[, mat CVids]) Compute
-        the L2 norm of the (real or complex) field <literal>U</literal>. If
-        <literal>CVids</literal> is given, the norm will be computed only on
-        the listed convexes.</para>
-      </listitem>
-
-      <listitem>
-        <para>n = gf_compute(MF, U,('H1 semi norm',MeshIm mim[, mat CVids])
-        Compute the L2 norm of grad(<literal>U</literal>). If
-        <literal>CVids</literal> is given, the norm will be computed only on
-        the listed convexes.</para>
-      </listitem>
-
-      <listitem>
-        <para>n = gf_compute(MF, U,('H1 norm',MeshIm mim[, mat CVids]) Compute
-        the H1 norm of <literal>U</literal>. If <literal>CVids</literal> is
-        given, the norm will be computed only on the listed convexes.</para>
-      </listitem>
-
-      <listitem>
-        <para>n = gf_compute(MF, U,('H2 semi norm',MeshIm mim[, mat CVids])
-        Compute the L2 norm of D^2(<literal>U</literal>). If
-        <literal>CVids</literal> is given, the norm will be computed only on
-        the listed convexes.</para>
-      </listitem>
-
-      <listitem>
-        <para>n = gf_compute(MF, U,('H2 norm',MeshIm mim[, mat CVids]) Compute
-        the H2 norm of <literal>U</literal>. If <literal>CVids</literal> is
-        given, the norm will be computed only on the listed convexes.</para>
-      </listitem>
-
-      <listitem>
-        <para>DU = gf_compute(MF, U,('gradient',MeshFem mf_du) Compute the
-        gradient of the field <literal>U</literal> defined on MeshFem
-        <literal>mf_du</literal>. The gradient is interpolated on the MeshFem
-        <literal>mf_du</literal>, and returned in <literal>DU</literal>. For
-        example, if <literal>U</literal> is defined on a P2 MeshFem,
-        <literal>DU</literal> should be evaluated on a P1-discontinuous
-        MeshFem. <literal>mf</literal> and <literal>mf_du</literal> should
-        share the same mesh. <literal>U</literal> may have any number of
-        dimensions (i.e. this function is not restricted to the gradient of
-        scalar fields, but may also be used for tensor fields). However the
-        last dimension of <literal>U</literal> has to be equal to the number
-        of dof of <literal>mf</literal>. For example, if <literal>U</literal>
-        is a <emphasis>[3x3xNmf]</emphasis> array (where
-        <literal>Nmf</literal> is the number of dof of <literal>mf</literal>),
-        <literal>DU</literal> will be a <literal>[Nx3x3[xQ]xNmf_du]</literal>
-        array, where <literal>N</literal> is the dimension of the mesh,
-        <literal>Nmf_du</literal> is the number of dof of
-        <literal>mf_du</literal>, and the optional <literal>Q</literal>
-        dimension is inserted if <emphasis>Qdim_mf != Qdim_mf_du</emphasis>,
-        where <literal>Qdim_mf</literal> is the Qdim of <literal>mf</literal>
-        and <literal>Qdim_mf_du</literal> is the Qdim of
-        <literal>mf_du</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>HU = gf_compute(MF, U,('hessian',MeshFem mf_h) Compute the
-        hessian of the field <literal>U</literal> defined on MeshFem
-        <literal>mf_h</literal>. See also <emphasis>gf_compute(MF,
-        U,('gradient', MeshFem mf_du)</emphasis>.</para>
-      </listitem>
-
-      <listitem>
-        <para>Ui = gf_compute(MF, U,('interpolate_on',list(MeshFem mfi | Slice
-        sli)) Interpolate a field on another MeshFem or a Slice.</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>Interpolation on another MeshFem <literal>mfi</literal>:
-            <literal>mfi</literal> has to be Lagrangian. If
-            <literal>mf</literal> and <literal>mfi</literal> share the same
-            mesh object, the interpolation will be much faster.</para>
-          </listitem>
-
-          <listitem>
-            <para>Interpolation on a Slice <phrase>sli</phrase>: this is
-            similar to interpolation on a refined P1-discontinuous mesh, but
-            it is much faster.</para>
-          </listitem>
-        </itemizedlist>
-
-        <para>This can also be used with
-        <emphasis>gf_slice('points')</emphasis> to obtain field values at a
-        given set of points. See also
-        <emphasis>gf_asm('interpolation_matrix')</emphasis></para>
-      </listitem>
-
-      <listitem>
-        <para>Ue = gf_compute(MF, U,('extrapolate_on',MeshFem mfe) Extrapolate
-        a field on another MeshFem. If the mesh of <literal>mfe</literal> is
-        stricly included in the mesh of <literal>mf</literal>, this function
-        does stricly the same job as <emphasis>gf_compute(MF,
-        U,('interpolate_on')</emphasis>. However, if the mesh of
-        <literal>mfe</literal> is not exactly included in
-        <literal>mf</literal> (imagine interpolation between a curved refined
-        mesh and a coarse mesh), then values which are slightly outside
-        <literal>mf</literal> will be extrapolated. See also
-        <emphasis>gf_asm('extrapolation_matrix')</emphasis></para>
-      </listitem>
-
-      <listitem>
-        <para>E = gf_compute(MF, U,('error_estimate',MeshIm mim) Compute an a
-        posteriori error estimation. Currently there is only one which is
-        available:</para>
-
-        <para>for each convex, the jump of the normal derivative is integrated
-        on its faces.</para>
-      </listitem>
-
-      <listitem>
-        <para>[U2[,MF2,[,X[,Y[,Z]]]]] = gf_compute(MF,U,'interpolate on Q1
-        grid',{'regular h', hxyz | 'regular N',Nxyz |X[,Y[,Z]]} Creates a
-        cartesian Q1 mesh fem and interpolates U on it. The returned field U2
-        is organized in a matrix such that in can be drawn via the MATLAB
-        command 'pcolor'. The first dimension is the Qdim of
-        <literal>MF</literal> (i.e. 1 if U is a scalar field). Example
-        (<literal>mf_u</literal> is a 2D mesh_fem):</para>
-
-        <programlisting role="example"><![CDATA[  
-Uq = gf_compute(mf_u, U, 'interpolate on Q1 grid', 'regular h', [.05, .05]);
-pcolor(squeeze(Uq(1,:,:)));
- ]]></programlisting>
-      </listitem>
-
-      <listitem>
-        <para>E = gf_compute(MF, U, 'mesh edges deformation', N [,vec or mat
-        CVLIST]) [OBSOLETE FUNCTION! will be removed in a future
-        release]</para>
-
-        <para>Evaluates the deformation of the mesh caused by the field
-        <literal>U</literal> (for a 2D mesh, <literal>U</literal> must be a
-        <emphasis>[2 x nb_dof]</emphasis> matrix). <literal>N</literal> is the
-        refinment level (N>=2) of the edges. <literal>CVLIST</literal> can
-        be used to restrict the computation to the edges of the listed
-        convexes (if <literal>CVLIST</literal> is a row vector), or to
-        restrict the computations to certain faces of certain convexes when
-        <literal>CVLIST</literal> is a two-rows matrix, the first row
-        containing convex numbers and the second face numbers.</para>
-      </listitem>
-
-      <listitem>
-        <para>UP = gf_compute(MF, U, 'eval on triangulated surface', int
-        Nrefine,[vec CVLIST]) [OBSOLETE FUNCTION! will be removed in a future
-        release]</para>
-
-        <para>Utility function designed for 2D triangular meshes: returns a
-        list of triangles coordinates with interpolated <literal>U</literal>
-        values. This can be used for the accurate visualization of data
-        defined on a discontinous high order element.</para>
-
-        <para>On output, the six first rows of <literal>UP</literal> contains
-        the triangle coordinates, and the others rows contain the interpolated
-        values of <literal>U</literal> (one for each triangle vertex)
-        <literal>CVLIST</literal> may indicate the list of convex number that
-        should be consider, if not used then all the mesh convexes will be
-        used. <literal>U</literal> should be a row vector.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_compute(mf, U, 'convect', mesh_fem mf_v, vec V,
-	  scalar dt, int nt, string option]) Compute a convection
-	  of <literal>U</literal> with regards to a steady state
-	  velocity field <literal>V</literal> with a Characteristic-Galerkin method. This
-	  method is restricted to pure Lagrange fems for U. <literal>mf_v</literal> should represent
-	  a continuous finite element method. <literal>dt</literal> is the integration time and <literal>nt</literal>
-	  is the number of integration step on the caracteristics. <literal>option</literal> is an
-	  option for the part of the boundary where there is a re-entrant convection.
-	  <literal>option = 'extrapolation'</literal> for an extrapolation on the nearest element
-	  or <literal>option = 'unchanged'</literal> for a constant value on that boundary.
-	  This method is rather dissipative, but stable.</para>
-      </listitem>
-    </itemizedlist>
-  </refsection>
+    <listitem>
+    <para><literal>n = gf_compute(mesh_fem MF, vec U, 'L2 norm', mesh_im mim[, mat CVids])</literal></para>
 
-  <refsection>
-    <title>Examples</title>
+    <para>       Compute the L2 norm of the (real or complex) field <literal>U</literal>.
+
+    If <literal>CVids</literal> is given, the norm will be computed only on the listed
+    convexes.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>n = gf_compute(mesh_fem MF, vec U, 'L2 dist', mesh_im mim, mesh_fem mf2, vec U2[, mat CVids])</literal></para>
+
+    <para>       Compute the L2 distance between <literal>U</literal> and <literal>U2</literal>.
+
+    If <literal>CVids</literal> is given, the norm will be computed only on the listed
+    convexes.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>n = gf_compute(mesh_fem MF, vec U, 'H1 semi norm', mesh_im mim[, mat CVids])</literal></para>
+
+    <para>       Compute the L2 norm of grad(<literal>U</literal>).
+
+    If <literal>CVids</literal> is given, the norm will be computed only on the listed
+    convexes.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>n = gf_compute(mesh_fem MF, vec U, 'H1 semi dist', mesh_im mim, mesh_fem mf2, vec U2[, mat CVids])</literal></para>
 
-    <para>Using the error estimate to refine the worst convexes: </para>
-    <programlisting role="example"><![CDATA[  
-E = gf_compute(mf, U, 'error_estimate', mim);
-gf_mesh_set(m, 'refine', find(E < 1e-3));  
- ]]></programlisting>
+    <para>       Compute the semi H1 distance between <literal>U</literal> and <literal>U2</literal>.
+
+    If <literal>CVids</literal> is given, the norm will be computed only on the listed
+    convexes.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>n = gf_compute(mesh_fem MF, vec U, 'H1 norm', mesh_im mim[, mat CVids])</literal></para>
+
+    <para>       Compute the H1 norm of <literal>U</literal>.
+
+    If <literal>CVids</literal> is given, the norm will be computed only on the listed
+    convexes.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>n = gf_compute(mesh_fem MF, vec U, 'H2 semi norm', mesh_im mim[, mat CVids])</literal></para>
+
+    <para>       Compute the L2 norm of D^2(<literal>U</literal>).
+
+    If <literal>CVids</literal> is given, the norm will be computed only on the listed
+    convexes.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>n = gf_compute(mesh_fem MF, vec U, 'H2 norm', mesh_im mim[, mat CVids])</literal></para>
+
+    <para>       Compute the H2 norm of <literal>U</literal>.
+
+    If <literal>CVids</literal> is given, the norm will be computed only on the listed
+    convexes.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>DU = gf_compute(mesh_fem MF, vec U, 'gradient', mesh_fem mf_du)</literal></para>
+
+    <para>       Compute the gradient of the field <literal>U</literal> defined on mesh_fem <literal>mf_du</literal>.
+
+    The gradient is interpolated on the mesh_fem <literal>mf_du</literal>, and returned in
+    <literal>DU</literal>. For example, if <literal>U</literal> is defined on a P2 mesh_fem, <literal>DU</literal> should be
+    evaluated on a P1-discontinuous mesh_fem. <literal>mf</literal> and <literal>mf_du</literal> should
+    share the same mesh.
+
+    <literal>U</literal> may have any number of dimensions (i.e. this function is not
+    restricted to the gradient of scalar fields, but may also be used
+    for tensor fields). However the last dimension of <literal>U</literal> has to be
+    equal to the number of dof of <literal>mf</literal>. For example, if <literal>U</literal> is a
+    [3x3xNmf] array (where Nmf is the number of dof of <literal>mf</literal>), <literal>DU</literal> will
+    be a [Nx3x3[xQ]xNmf_du] array, where N is the dimension of the mesh,
+    Nmf_du is the number of dof of <literal>mf_du</literal>, and the optional Q dimension
+    is inserted if <literal>Qdim_mf != Qdim_mf_du</literal>, where Qdim_mf is the Qdim of
+    <literal>mf</literal> and Qdim_mf_du is the Qdim of <literal>mf_du</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>HU = gf_compute(mesh_fem MF, vec U, 'hessian', mesh_fem mf_h)</literal></para>
+
+    <para>       Compute the hessian of the field <literal>U</literal> defined on mesh_fem <literal>mf_h</literal>.
+
+    See also gf_compute('gradient', mesh_fem mf_du).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>UP = gf_compute(mesh_fem MF, vec U, 'eval on triangulated surface', int Nrefine, [vec CVLIST])</literal></para>
+
+    <para>       [OBSOLETE FUNCTION! will be removed in a future release]
+    Utility function designed for 2D triangular meshes : returns a list
+    of triangles coordinates with interpolated U values. This can be
+    used for the accurate visualization of data defined on a
+    discontinous high order element. On output, the six first rows of UP
+    contains the triangle coordinates, and the others rows contain the
+    interpolated values of U (one for each triangle vertex) CVLIST may
+    indicate the list of convex number that should be consider, if not
+    used then all the mesh convexes will be used. U should be a row
+    vector.
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Ui = gf_compute(mesh_fem MF, vec U, 'interpolate on', {mesh_fem mfi | slice sli | vec pts})</literal></para>
+
+    <para>       Interpolate a field on another mesh_fem or a slice or a list of points.
+
+    - Interpolation on another mesh_fem <literal>mfi</literal>:
+       <literal>mfi</literal> has to be Lagrangian. If <literal>mf</literal> and <literal>mfi</literal> share the same
+       mesh object, the interpolation will be much faster.
+    - Interpolation on a slice <literal>sli</literal>:
+       this is similar to interpolation on a refined P1-discontinuous
+       mesh, but it is much faster. This can also be used with
+       gf_slice('points') to obtain field values at a given set of
+       points.
+    - Interpolation on a set of points <literal>pts</literal>
+
+    See also gf_asm('interpolation matrix')
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Ue = gf_compute(mesh_fem MF, vec U, 'extrapolate on', mesh_fem mfe)</literal></para>
+
+    <para>       Extrapolate a field on another mesh_fem.
+
+    If the mesh of <literal>mfe</literal> is stricly included in the mesh of <literal>mf</literal>, this
+    function does stricly the same job as gf_compute('interpolate_on').
+    However, if the mesh of <literal>mfe</literal> is not exactly included in <literal>mf</literal>
+    (imagine interpolation between a curved refined mesh and a coarse
+    mesh), then values which are outside <literal>mf</literal> will be
+    extrapolated.
+
+    See also gf_asm('extrapolation matrix')
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>E = gf_compute(mesh_fem MF, vec U, 'error estimate', mesh_im mim)</literal></para>
+
+    <para>       Compute an a posteriori error estimate.
+
+    Currently there is only one which is available: for each convex,
+    the jump of the normal derivative is integrated on its faces.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>E = gf_compute(mesh_fem MF, vec U, 'convect', mesh_fem mf_v, vec V, scalar dt, int nt[, string option])</literal></para>
+
+    <para>       Compute a convection of <literal>U</literal> with regards to a steady state velocity
+    field <literal>V</literal> with a Characteristic-Galerkin method. This
+    method is restricted to pure Lagrange fems for U. <literal>mf_v</literal> should represent
+    a continuous finite element method. <literal>dt</literal> is the integration time and <literal>nt</literal>
+    is the number of integration step on the caracteristics. <literal>option</literal> is an
+    option for the part of the boundary where there is a re-entrant convection.
+    <literal>option = 'extrapolation'</literal> for an extrapolation on the nearest element
+    or <literal>option = 'unchanged'</literal> for a constant value on that boundary.
+    This method is rather dissipative, but stable.
+    
+    </para>
+    </listitem>
+
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mesh">gf_mesh</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_cvstruct_get.xml b/interface/src/scilab/help/en_US/gf_cvstruct_get.xml
index 86aa6bf..0943602 100644
--- a/interface/src/scilab/help/en_US/gf_cvstruct_get.xml
+++ b/interface/src/scilab/help/en_US/gf_cvstruct_get.xml
@@ -9,54 +9,105 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_cvstruct_get</refname>
+    <refpurpose>  General function for querying information about convex_structure objects.
 
-    <refpurpose>General function for querying information about
-    convex_structure objects.</refpurpose>
+  The convex structures are internal structures of getfem++. They do not
+  contain points positions. These structures are recursive, since the faces
+  of a convex structures are convex structures.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-int I=gf_cvstruct_get(cvstruct cs, 'nbpts')
-int I=gf_cvstruct_get(cvstruct cs, 'dim')
-cvstruct cs=gf_cvstruct_get(cvstruct cs, 'basic structure') 
-cvstruct cs=gf_cvstruct_get(cvstruct cs, 'face', int F)
-ivec I=gf_cvstruct_get(cvstruct cs, 'facepts', int F)
-</synopsis>
+    <synopsis>n = gf_cvstruct_get(cvstruct CVS, 'nbpts')</synopsis>
+    <synopsis>d = gf_cvstruct_get(cvstruct CVS, 'dim')</synopsis>
+    <synopsis>cs = gf_cvstruct_get(cvstruct CVS, 'basic structure')</synopsis>
+    <synopsis>cs = gf_cvstruct_get(cvstruct CVS, 'face', int F)</synopsis>
+    <synopsis>I = gf_cvstruct_get(cvstruct CVS, 'facepts', int F)</synopsis>
+    <synopsis>s = gf_cvstruct_get(cvstruct CVS, 'char')</synopsis>
+    <synopsis>gf_cvstruct_get(cvstruct CVS, 'display')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  General function for querying information about convex_structure objects.
 
-    <para>The convex structures are internal structures of getfem++. They do not contain points positions. These structures are recursive, 
-      since the faces of a convex structures are convex structures. The dimension is returned by gf_cvstruct_get(cs, 'dim'), 
-      and the number of points is given by gf_cvstruct_get(cs, 'nbpts'). </para>
-    <para>Note that a triangle structure may have 6 points, if it is a structure associated to a 'GT_PK(2,2)' geometric transformation. 
-      But the canonical 3-noded triangle structure would be returned by gf_cvstruct_get(cs, 'basic structure'). 
-      The structure of the ith face can be obtained with gf_cvstruct_get(cs, 'face', i), and the indices of its points 
-      are returned by gf_cvstruct_get(cs, 'facepts', i).</para>
+  The convex structures are internal structures of getfem++. They do not
+  contain points positions. These structures are recursive, since the faces
+  of a convex structures are convex structures.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
+
+    <itemizedlist>
+    <listitem>
+    <para><literal>n = gf_cvstruct_get(cvstruct CVS, 'nbpts')</literal></para>
+
+    <para>         Get the number of points of the convex structure.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>d = gf_cvstruct_get(cvstruct CVS, 'dim')</literal></para>
+
+    <para>         Get the dimension of the convex structure.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>cs = gf_cvstruct_get(cvstruct CVS, 'basic structure')</literal></para>
+
+    <para>       Get the simplest convex structure.
+
+    For example, the 'basic structure' of the 6-node triangle, is the
+    canonical 3-noded triangle.
+    </para>
+    </listitem>
 
-    <para>n = gf_cvstruct_get(cs,'nbpts'): Get the number of points of the
-    convex structure.</para>
+    <listitem>
+    <para><literal>cs = gf_cvstruct_get(cvstruct CVS, 'face', int F)</literal></para>
 
-    <para>d = gf_cvstruct_get(cs,'dim'): Get the dimension of the convex
-    structure</para>
+    <para>         Return the convex structure of the face <literal>F</literal>.
+    </para>
+    </listitem>
 
-    <para>cs = gf_cvstruct_get(cs,'basic structure'): Get the simplest convex
-    structure. For example, the 'basic structure' of the 6-node triangle, is
-    the canonical 3-noded triangle.</para>
+    <listitem>
+    <para><literal>I = gf_cvstruct_get(cvstruct CVS, 'facepts', int F)</literal></para>
 
-    <para>I = gf_cvstruct_get(cs,'facepts',int F): Return the list of point
-    indices for the face `F`.</para>
+    <para>         Return the list of point indices for the face <literal>F</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>s = gf_cvstruct_get(cvstruct CVS, 'char')</literal></para>
+
+    <para>         Output a string description of the cvstruct.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_cvstruct_get(cvstruct CVS, 'display')</literal></para>
+
+    <para>         displays a short summary for a cvstruct object.
+    </para>
+    </listitem>
+
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_geotrans">gf_geotrans</link></member>
-      <member><link linkend="gf_mesh_get">gf_mesh_get(M,'cvstruct')</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
+
+  <refsection>
+    <title>Authors</title>
+    <para>Y. Collette</para>
+  </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_delete.xml b/interface/src/scilab/help/en_US/gf_delete.xml
index 69f57f9..962007e 100644
--- a/interface/src/scilab/help/en_US/gf_delete.xml
+++ b/interface/src/scilab/help/en_US/gf_delete.xml
@@ -9,41 +9,64 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_delete</refname>
+    <refpurpose>  Delete an existing getfem object from memory (mesh, mesh_fem, etc.).
 
-    <refpurpose>Delete an existing getfem object from memory</refpurpose>
+  SEE ALSO:
+    gf_workspace, gf_mesh, gf_mesh_fem.
+ </refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-gf_delete(hobj I,[hobj J,hobj K,...])
-    </synopsis>
+    <synopsis>gf_delete(I[, J, K,...])</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  Delete an existing getfem object from memory (mesh, mesh_fem, etc.).
 
-    <para>gf_delete(hobj I,[hobj J, hobj K,...]) : delete an existing getfem object from memory. I should be a descriptor given by gf_mesh(), gf_mesh_im(), gf_slice() etc.</para>
-    <para>Note that if another object uses I, then object I will be deleted only when both have been asked for deletion.</para>
-    <para>Only objects listed in the output of gf_workspace('stats') can be deleted (for example gf_fem objects cannot be destroyed).</para>
-    <para>You may also use gf_workspace('clear all') to erase everything at once.</para>
-    <para>remark: instead of passing a list of handles, you may pass an array of object handles. </para>
+  SEE ALSO:
+    gf_workspace, gf_mesh, gf_mesh_fem.
+ </para>
   </refsection>
 
   <refsection>
-    <title>See Also</title>
+    <title>Command list</title>
+
+    <itemizedlist>
+    <listitem>
+    <para><literal>gf_delete(I[, J, K,...])</literal></para>
+
+    <para>         
+      I should be a descriptor given by gf_mesh(),
+      gf_mesh_im(), gf_slice() etc.
+      
+      Note that if another object uses I, then object I will be deleted only
+      when both have been asked for deletion.
+      
+      Only objects listed in the output of gf_workspace('stats') can be
+      deleted (for example gf_fem objects cannot be destroyed).
+      
+      You may also use gf_workspace('clear all') to erase everything at
+      once.
+      
+    </para>
+    </listitem>
+
+    </itemizedlist>
+  </refsection>
 
+  <refsection>
+    <title>See Also</title>
     <simplelist type="inline">
-      <member><link linkend="gf_workspace">gf_workspace</link></member>
-      <member><link linkend="gf_mesh">gf_mesh</link></member>
-      <member><link linkend="gf_mesh_fem">gf_mesh_fem</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_eltm.xml b/interface/src/scilab/help/en_US/gf_eltm.xml
index ccfd837..e5c537d 100644
--- a/interface/src/scilab/help/en_US/gf_eltm.xml
+++ b/interface/src/scilab/help/en_US/gf_eltm.xml
@@ -9,83 +9,114 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_eltm</refname>
-
-    <refpurpose>get a descriptor</refpurpose>
+    <refpurpose>
+  This object represents a type of elementary matrix. In order to obtain a
+  numerical value of these matrices, see gf_mesh_im_get(mesh_im MI, 'eltm').
+
+  If you have very particular assembling needs, or if you just want to check
+  the content of an elementary matrix, this function might be useful. But
+  the generic assembly abilities of gf_asm(...) should suit most needs.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>ELTM = gf_eltm(elt_matrix_type, args..)</synopsis>
+    <synopsis>E = gf_eltm('base', fem FEM)</synopsis>
+    <synopsis>E = gf_eltm('grad', fem FEM)</synopsis>
+    <synopsis>E = gf_eltm('hessian', fem FEM)</synopsis>
+    <synopsis>E = gf_eltm('normal')</synopsis>
+    <synopsis>E = gf_eltm('grad_geotrans')</synopsis>
+    <synopsis>E = gf_eltm('grad_geotrans_inv')</synopsis>
+    <synopsis>E = gf_eltm('product', eltm A, eltm B)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for eltm objects.</para>
 
-    <itemizedlist>
-      <listitem>
-        <para>gf_eltm('base', Fem FEM) return a descriptor for the integration
-        of shape functions on elements, using the Fem <literal>FEM</literal>.
-        </para>
-      </listitem>
-
-      <listitem>
-        <para>gf_eltm('grad', Fem FEM) return a descriptor for the integration
-        of the gradient of shape functions on elements, using the Fem
-        <literal>FEM</literal>. </para>
-      </listitem>
-
-      <listitem>
-        <para>gf_eltm('hessian', Fem FEM) return a descriptor for the
-        integration of the hessian of shape functions on elements, using the
-        Fem <literal>FEM</literal>. </para>
-      </listitem>
-
-      <listitem>
-        <para>gf_eltm('normal') return a descriptor for the unit normal of
-        convex faces. </para>
-      </listitem>
-
-      <listitem>
-        <para>gf_eltm('grad_geotrans') return a descriptor to the gradient
-        matrix of the geometric transformation. </para>
-      </listitem>
-
-      <listitem>
-        <para>gf_eltm('grad_geotrans_inv') return a descriptor to the inverse
-        of the gradient matrix of the geometric transformation (this is rarely
-        used). </para>
-      </listitem>
-
-      <listitem>
-        <para>gf_eltm('product', Eltm A, Eltm B) return a descriptor for the
-        integration of the tensorial product of elementary matrices
-        <literal>A</literal> and <literal>B</literal>. In order to obtain a
-        numerical value of theses matrices, see
-        <emphasis>gf_mesh_im_get(MIM,('eltm').</emphasis></para>
-      </listitem>
-    </itemizedlist>
+    <para>
+  This object represents a type of elementary matrix. In order to obtain a
+  numerical value of these matrices, see gf_mesh_im_get(mesh_im MI, 'eltm').
+
+  If you have very particular assembling needs, or if you just want to check
+  the content of an elementary matrix, this function might be useful. But
+  the generic assembly abilities of gf_asm(...) should suit most needs.
+</para>
   </refsection>
 
   <refsection>
-    <title>Examples</title>
+    <title>Command list</title>
+
+    <itemizedlist>
+    <listitem>
+    <para><literal>E = gf_eltm('base', fem FEM)</literal></para>
+
+    <para>         return a descriptor for the integration of shape functions on
+      elements, using the fem <literal>FEM</literal>. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>E = gf_eltm('grad', fem FEM)</literal></para>
+
+    <para>         return a descriptor for the integration of the gradient of shape
+      functions on elements, using the fem <literal>FEM</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>E = gf_eltm('hessian', fem FEM)</literal></para>
+
+    <para>         return a descriptor for the integration of the hessian of shape
+      functions on elements, using the fem <literal>FEM</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>E = gf_eltm('normal')</literal></para>
 
-    <programlisting role="example"> 
-  Add an example here
- </programlisting>
+    <para>         return a descriptor for the unit normal of convex faces.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>E = gf_eltm('grad_geotrans')</literal></para>
+
+    <para>         return a descriptor to the gradient matrix of the geometric
+      transformation.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>E = gf_eltm('grad_geotrans_inv')</literal></para>
+
+    <para>         return a descriptor to the inverse of the gradient matrix of the
+      geometric transformation (this is rarely used).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>E = gf_eltm('product', eltm A, eltm B)</literal></para>
+
+    <para>         return a descriptor for the integration of the tensorial product of
+      elementary matrices <literal>A</literal> and <literal>B</literal>.
+    </para>
+    </listitem>
+
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mesh_im_get">gf_mesh_im_get</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_fem.xml b/interface/src/scilab/help/en_US/gf_fem.xml
index a20e225..694a933 100644
--- a/interface/src/scilab/help/en_US/gf_fem.xml
+++ b/interface/src/scilab/help/en_US/gf_fem.xml
@@ -9,204 +9,126 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_fem</refname>
-
-    <refpurpose>Returns a handle F to one of the various Finite Elements
-    Method defined in Getfem.</refpurpose>
+    <refpurpose>    This object represents a finite element method on a reference element.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>F=gf_fem(string FEM_NAME)  </synopsis>
+    <synopsis>F = gf_fem('interpolated_fem', mesh_fem mf, mesh_im mim, [ivec blocked_dof])</synopsis>
+    <synopsis>F = gf_fem(string fem_name)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for fem objects.</para>
 
-    <para>The fem_name should contain a description of the finite element method. Please refer to the getfem++ manual 
-      (especially <link linkend="http://www-gmm.insa-toulouse.fr/getfem/doc">the description of finite element and integration methods</link>) 
-      for a complete reference. </para>
-
-    <para>Here is a list of some of them:</para>
-
-    <itemizedlist>
-      <listitem>
-        <para>FEM_PK(n,k) classical Lagrange element Pk on a simplex of
-        dimension <literal>n</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_PK_DISCONTINUOUS(N,K[,alpha]) discontinuous Lagrange element
-        Pk on a simplex of dimension <literal>n</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_QK(n,k) classical Lagrange element Qk on quadrangles,
-        hexahedrons etc.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_QK_DISCONTINUOUS(n,k[,alpha]) discontinuous Lagrange element
-        Qk on quadrangles, hexahedrons etc.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_Q2_INCOMPLETE incomplete 2D Q2 element with 8 dof
-        (serendipity Quad 8 element).</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_PK_PRISM(n,k) classical Lagrange element Pk on a
-        prism.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_PK_PRISM_DISCONTINUOUS(n,k[,alpha]) classical discontinuous
-        Lagrange element Pk on a prism.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_PK_WITH_CUBIC_BUBBLE(n,k) classical Lagrange element Pk on a
-        simplex with an additional volumic bubble function.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_P1_NONCONFORMING non-conforming P1 method on a
-        triangle.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_P1_BUBBLE_FACE(n) P1 method on a simplex with an additional
-        bubble function on face 0.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_P1_BUBBLE_FACE_LAG P1 method on a simplex with an additional
-        lagrange dof on face 0.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_PK_HIERARCHICAL(n,k) PK element with a hierarchical
-        basis.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_QK_HIERARCHICAL(n,k) QK element with a hierarchical
-        basis</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_PK_PRISM_HIERARCHICAL(n,k) PK element on a prism with a
-        hierarchical basis.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_STRUCTURED_COMPOSITE(FEM,k) Composite fem on a grid with
-        <literal>k</literal> divisions.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_PK_HIERARCHICAL_COMPOSITE(n,k,s) Pk composite element on a
-        grid with <literal>s</literal> subdivisions and with a hierarchical
-        basis.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_PK_FULL_HIERARCHICAL_COMPOSITE(n,k,s) Pk composite element
-        with <literal>s</literal> subdivisions and a hierarchical basis on
-        both degree and subdivision.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_PRODUCT(FEM1,FEM2) tensorial product of two polynomial
-        elements.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_HERMITE(n) Hermite element P3 on a simplex of dimension `n =
-        1, 2, 3`.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_ARGYRIS Argyris element P5 on the triangle.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_HCT_TRIANGLE Hsieh-Clough-Tocher element on the triangle
-        (composite P3 element which is C^1), should be used with
-        IM_HCT_COMPOSITE() integration method.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_QUADC1_COMPOSITE Quadrilateral element, composite P3 element
-        and C^1 (16 dof).</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_REDUCED_QUADC1_COMPOSITE Quadrilateral element, composite P3
-        element and C^1 (12 dof).</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_RT0(n) Raviart-Thomas element of order 0 on a simplex of
-        dimension <literal>n</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>FEM_NEDELEC(n) Nedelec edge element of order 0 on a simplex of
-        dimension <literal>n</literal>.</para>
-      </listitem>
-    </itemizedlist>
-
-    <para>Of course, you have to ensure that the selected fem is compatible
-    with the geometric transformation: a Pk fem has no meaning on a
-    quadrangle.</para>
-
-    <itemizedlist>
-      <listitem>
-        <para>Fem = gf_fem('interpolated_fem', MeshFem mf, MeshIm mim, [ivec
-        blocked_dof]) Build a special Fem which is interpolated from another
-        MeshFem. Using this special finite element, it is possible to
-        interpolate a given MeshFem <literal>mf</literal> on another mesh,
-        given the integration method <literal>mim</literal> that will be used
-        on this mesh. Note that this finite element may be quite slow, and
-        eats much memory.</para>
-      </listitem>
-    </itemizedlist>
+    <para>    This object represents a finite element method on a reference element.
+</para>
   </refsection>
 
   <refsection>
-    <title>Examples</title>
-
-    <para>To get a fem of degree 2 on a quadrangle: </para>
+    <title>Command list</title>
 
-    <programlisting role="example"><![CDATA[ 
-fem = gf_fem('FEM_QK(2,2)');
-or
-fem = gf_fem('FEM_PRODUCT(FEM_PK(1,1),FEM_PK(1,1))');  
- ]]></programlisting>
+    <itemizedlist>
+    <listitem>
+    <para><literal>F = gf_fem('interpolated_fem', mesh_fem mf, mesh_im mim, [ivec blocked_dof])</literal></para>
+
+    <para>       Build a special fem which is interpolated from another mesh_fem.
+
+    Using this special finite element, it is possible to interpolate a given
+    mesh_fem <literal>mf</literal> on another mesh, given the integration method <literal>mim</literal> that will
+    be used on this mesh.
+
+    Note that this finite element may be quite slow, and eats much
+    memory.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>F = gf_fem(string fem_name)</literal></para>
+
+    <para>         The <literal>fem_name</literal> should contain a description of the finite element
+      method. Please refer to the getfem++ manual (especially the
+      description of finite element and integration methods) for a complete
+      reference. Here is a list of some of them:
+
+      - FEM_PK(n,k) :
+        classical Lagrange element Pk on a simplex of dimension <literal>n</literal>.
+      - FEM_PK_DISCONTINUOUS(n,k[,alpha]) :
+        discontinuous Lagrange element Pk on a simplex of dimension <literal>n</literal>.
+      - FEM_QK(n,k) :
+        classical Lagrange element Qk on quadrangles, hexahedrons etc.
+      - FEM_QK_DISCONTINUOUS(n,k[,alpha]) :
+        discontinuous Lagrange element Qk on quadrangles, hexahedrons etc.
+      - FEM_Q2_INCOMPLETE :
+        incomplete 2D Q2 element with 8 dof (serendipity Quad 8 element).
+      - FEM_PK_PRISM(n,k) :
+        classical Lagrange element Pk on a prism of dimension <literal>n</literal>.
+      - FEM_PK_PRISM_DISCONTINUOUS(n,k[,alpha]) :
+        classical discontinuous Lagrange element Pk on a prism.
+      - FEM_PK_WITH_CUBIC_BUBBLE(n,k) :
+        classical Lagrange element Pk on a simplex with an additional
+        volumic bubble function.
+      - FEM_P1_NONCONFORMING :
+        non-conforming P1 method on a triangle.
+      - FEM_P1_BUBBLE_FACE(n) :
+        P1 method on a simplex with an additional bubble function on face 0.
+      - FEM_P1_BUBBLE_FACE_LAG :
+        P1 method on a simplex with an additional lagrange dof on face 0.
+      - FEM_PK_HIERARCHICAL(n,k) :
+        PK element with a hierarchical basis.
+      - FEM_QK_HIERARCHICAL(n,k) :
+        QK element with a hierarchical basis
+      - FEM_PK_PRISM_HIERARCHICAL(n,k) :
+        PK element on a prism with a hierarchical basis.
+      - FEM_STRUCTURED_COMPOSITE(fem f,k) :
+        Composite fem <literal>f</literal> on a grid with <literal>k</literal> divisions.
+      - FEM_PK_HIERARCHICAL_COMPOSITE(n,k,s) :
+        Pk composite element on a grid with <literal>s</literal> subdivisions and with a
+        hierarchical basis.
+      - FEM_PK_FULL_HIERARCHICAL_COMPOSITE(n,k,s) :
+        Pk composite element with <literal>s</literal> subdivisions and a hierarchical basis
+        on both degree and subdivision.
+      - FEM_PRODUCT(A,B) :
+        tensorial product of two polynomial elements.
+      - FEM_HERMITE(n) :
+        Hermite element P3 on a simplex of dimension <literal>n = 1, 2, 3</literal>.
+      - FEM_ARGYRIS :
+        Argyris element P5 on the triangle.
+      - FEM_HCT_TRIANGLE :
+        Hsieh-Clough-Tocher element on the triangle (composite P3 element
+        which is C1), should be used with IM_HCT_COMPOSITE() integration
+        method.
+      - FEM_QUADC1_COMPOSITE :
+        Quadrilateral element, composite P3 element and C1 (16 dof).
+      - FEM_REDUCED_QUADC1_COMPOSITE :
+        Quadrilateral element, composite P3 element and C1 (12 dof).
+      - FEM_RT0(n) :
+        Raviart-Thomas element of order 0 on a simplex of dimension <literal>n</literal>.
+      - FEM_NEDELEC(n) :
+        Nedelec edge element of order 0 on a simplex of dimension <literal>n</literal>.
+
+      Of course, you have to ensure that the selected fem is compatible with
+      the geometric transformation: a Pk fem has no meaning on a quadrangle.
+      
+    </para>
+    </listitem>
 
-    <para>The scilab function sprintf might be useful if you need to build the PK fem with k and n as arguments: </para>
-    
-    <programlisting role="example"><![CDATA[ 
-fem = gf_fem(sprintf('FEM_PK(%d,%d)', k, n));  
- ]]></programlisting>
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_fem_get">gf_fem_get</link></member>
-      <member><link linkend="gf_integ">gf_integ</link></member>
-      <member><link linkend="gf_mesh_fem_set">gf_mesh_fem_set(mesh_fem, 'fem', fem)</link></member>
-      <member><link linkend="gf_mesh_fem_get">gf_mesh_fem_get('fem')</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_fem_get.xml b/interface/src/scilab/help/en_US/gf_fem_get.xml
index 89c854d..16b1c27 100644
--- a/interface/src/scilab/help/en_US/gf_fem_get.xml
+++ b/interface/src/scilab/help/en_US/gf_fem_get.xml
@@ -9,166 +9,178 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_fem_get</refname>
-
-    <refpurpose> General function for querying information about FEM
-    objects.</refpurpose>
+    <refpurpose>  General function for querying information about FEM objects.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-int I = gf_fem_get(fem F,'nbdof')
-int I = gf_fem_get(fem F,'dim')
-int I = gf_fem_get(fem F,'target_dim')
-mat P = gf_fem_get(fem F,'pts')
-int I = gf_fem_get(fem F,'is_equivalent')
-int I = gf_fem_get(fem F,'is_lagrange')
-int I = gf_fem_get(fem F,'is_polynomial')
-int I = gf_fem_get(fem F,'estimated_degree')
-mat V = gf_fem_get(fem F,'base_value', vec X)
-mat V = gf_fem_get(fem F,'grad_base_value', vec X)
-mat V = gf_fem_get(fem F,'hess_base_value', vec X)
-string S = gf_fem_get(fem F,'poly_str')
-string S = gf_fem_get(fem F,'char')
-    </synopsis>
+    <synopsis>n = gf_fem_get(fem F, 'nbdof'[, int cv])</synopsis>
+    <synopsis>d = gf_fem_get(fem F, 'dim')</synopsis>
+    <synopsis>td = gf_fem_get(fem F, 'target_dim')</synopsis>
+    <synopsis>P = gf_fem_get(fem F, 'pts'[, int cv])</synopsis>
+    <synopsis>b = gf_fem_get(fem F, 'is_equivalent')</synopsis>
+    <synopsis>b = gf_fem_get(fem F, 'is_lagrange')</synopsis>
+    <synopsis>b = gf_fem_get(fem F, 'is_polynomial')</synopsis>
+    <synopsis>d = gf_fem_get(fem F, 'estimated_degree')</synopsis>
+    <synopsis>E = gf_fem_get(fem F, 'base_value',mat p)</synopsis>
+    <synopsis>ED = gf_fem_get(fem F, 'grad_base_value',mat p)</synopsis>
+    <synopsis>EH = gf_fem_get(fem F, 'hess_base_value',mat p)</synopsis>
+    <synopsis>gf_fem_get(fem F, 'poly_str')</synopsis>
+    <synopsis>string = gf_fem_get(fem F, 'char')</synopsis>
+    <synopsis>gf_fem_get(fem F, 'display')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  General function for querying information about FEM objects.
+</para>
+  </refsection>
 
-    <para>The number of degrees of freedom of a specific fem F are returned by gf_fem_get(F,'nbdof'), 
-      while its dimension (i.e. the dimension of the reference convex) is given by gf_fem_get(F,'dim').</para>
-    <para>The target dimension, i.e. the dimension of the target space (denoted Q in the introduction to the finite element kernel) 
-      is returned by gf_fem_get(F,'target dim') (it is always 1 except for vector FEM).</para>
-    <para>The geometrical nodes (on the reference convex) associated with each degree of freedom of the fem is given in the columns of 
-      gf_fem_get(F,'pts').</para>
-    <para>gf_fem_get(F,'is equivalent'), gf_fem_get(F,'is lagrange'), or gf_fem_get(F,'is polynomial') gives some important properties of 
-      a FEM (a polynomial fem is a necessary condition for an exact integration method, and a interpolation a function of a Lagrangian fem is easy).</para>
-    <para>gf_fem_get(F,'estimated_degree') : return an estimation of the polynomial degree of a fem (this is an estimation for fem which 
-      are not polynomials).</para>
-    <para>gf_fem_get(F,'base_value',X) evaluate the values of all basis functions of the FEM at point X (X is supposed to be in the reference convex!). 
-      gf_fem_get(F,'grad_base_value',X) and gf_fem_get(F,'hess_base_value',X) evaluate respectively the first 
-      and second derivative of the basis functions.</para>
-    <para>gf_fem_get(F, 'char') return the canonical name of the FEM in getfem, and gf_fem_get(F, 'poly_str') return the polynomial expression of its basis functions in the reference convex (of course this will fail on non-polynomial FEMs). </para>
-
-    <para></para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>n = gf_fem_get(fem,'nbdof'[, int cv]) Return the number of dof for the
-        Fem. Some specific Fem (for example 'interpolated_fem') may require a
-        convex number <literal>cv</literal> to give their result. In most of
-        the case, you can omit this convex number.</para>
-      </listitem>
-
-      <listitem>
-        <para>d = gf_fem_get(fem,'dim') Return the dimension (dimension of the
-        reference convex) of the Fem.</para>
-      </listitem>
-
-      <listitem>
-        <para>td = gf_fem_get(fem,'target_dim') Return the dimension of the target
-        space. The target space dimension is usually 1, except for vector Fem
-        (none of them has been implemented in getfem++ for now).</para>
-      </listitem>
-
-      <listitem>
-        <para>P = gf_fem_get(fem,'pts'[, int cv]) Get the location of the dof on the
-        reference element. Some specific Fem may require a convex number
-        <literal>cv</literal> to give their result (for example
-        'interpolated_fem'). In most of the case, you can omit this convex
-        number.</para>
-      </listitem>
-
-      <listitem>
-        <para>b = gf_fem_get(fem,'is_equivalent') Return 0 if the Fem is not
-        equivalent. Equivalent Fem are evaluated on the reference convex. This
-        is the case of most classical Fem's.</para>
-      </listitem>
-
-      <listitem>
-        <para>b = gf_fem_get(fem,'is_lagrange') Return 0 if the Fem is not of
-        Lagrange type.</para>
-      </listitem>
-
-      <listitem>
-        <para>b = gf_fem_get(fem,'is_polynomial') Return 0 if the basis functions are
-        not polynomials.</para>
-      </listitem>
-
-      <listitem>
-        <para>d = gf_fem_get(fem,'estimated_degree') Return an estimation of the
-        polynomial degree of the Fem. This is an estimation for fem which are
-        not polynomials.</para>
-      </listitem>
-
-      <listitem>
-        <para>E = gf_fem_get(fem,'base_value',mat p) Evaluate all basis functions of
-        the FEM at point <literal>p</literal>. <literal>p</literal> is
-        supposed to be in the reference convex!</para>
-      </listitem>
-
-      <listitem>
-        <para>EH = gf_fem_get(fem,'hess_base_value',mat p) Evaluate the Hessian of
-        all base functions of the Fem at point <literal>p</literal>.
-        <literal>p</literal> is supposed to be in the reference
-        convex!.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_fem_get(fem,'poly_str') Return the polynomial expressions of its
-        basis functions in the reference convex. The result is expressed as a
-        list of strings. Of course this will fail on non-polynomial
-        Fem's.</para>
-      </listitem>
-
-      <listitem>
-        <para>str = gf_fem_get(fem,'char') Ouput a (unique) string representation of
-        the Fem. This can be used to perform comparisons between two different
-        Fem objects.</para>
-      </listitem>
-    </itemizedlist>
+    <listitem>
+    <para><literal>n = gf_fem_get(fem F, 'nbdof'[, int cv])</literal></para>
 
-    <para></para>
-  </refsection>
+    <para>       Return the number of dof for the fem.
 
-  <refsection>
-    <title>Examples</title>
+    Some specific fem (for example 'interpolated_fem') may require a
+    convex number <literal>cv</literal> to give their result. In most of the case, you
+    can omit this convex number.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>d = gf_fem_get(fem F, 'dim')</literal></para>
+
+    <para>         Return the dimension (dimension of the reference convex) of the fem.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>td = gf_fem_get(fem F, 'target_dim')</literal></para>
+
+    <para>       Return the dimension of the target space.
+
+    The target space dimension is usually 1, except for vector fem. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>P = gf_fem_get(fem F, 'pts'[, int cv])</literal></para>
+
+    <para>         Get the location of the dof on the reference element.
+      
+      Some specific fem may require a convex number <literal>cv</literal> to give their
+      result (for example 'interpolated_fem'). In most of the case, you
+      can omit this convex number. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>b = gf_fem_get(fem F, 'is_equivalent')</literal></para>
+
+    <para>         Return 0 if the fem is not equivalent.
+      
+      Equivalent fem are evaluated on the reference convex. This is
+      the case of most classical fem's.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>b = gf_fem_get(fem F, 'is_lagrange')</literal></para>
+
+    <para>         Return 0 if the fem is not of Lagrange type.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>b = gf_fem_get(fem F, 'is_polynomial')</literal></para>
+
+    <para>         Return 0 if the basis functions are not polynomials.
+    </para>
+    </listitem>
 
-    <para>Plotting the basis functions of the P5 fem on a segment:</para>
+    <listitem>
+    <para><literal>d = gf_fem_get(fem F, 'estimated_degree')</literal></para>
 
-    <programlisting role="example"><![CDATA[ 
-f = gf_fem('FEM_PK(1,5)');
-n = 100;
-M = zeros(gf_fem_get(f,'nbdof'),n);
-for i=1:n, 
-  M(:,i)=gf_fem_get(f,'base_value',(i-1)/(n-1)); 
-end
-plot((0:n-1)/n,M); 
- ]]></programlisting>
+    <para>       Return an estimation of the polynomial degree of the fem.
 
-    <para><imagedata fileref="../fig/gf_fem_get_fig_1.png" /></para>
+    This is an estimation for fem which are not polynomials.
+    </para>
+    </listitem>
 
-    <para>Viewing the basis function of the Argyris FEM: </para>
+    <listitem>
+    <para><literal>E = gf_fem_get(fem F, 'base_value',mat p)</literal></para>
 
-    <programlisting role="example"><![CDATA[ 
-f=gf_fem('FEM_ARGYRIS');
-gf_fem_get(f, 'poly_str')
- ]]></programlisting>
+    <para>         Evaluate all basis functions of the FEM at point <literal>p</literal>.
+      
+      <literal>p</literal> is supposed to be in the reference convex!
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ED = gf_fem_get(fem F, 'grad_base_value',mat p)</literal></para>
+
+    <para>       Evaluate the gradient of all base functions of the fem at point <literal>p</literal>.
+
+    <literal>p</literal> is supposed to be in the reference convex!
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>EH = gf_fem_get(fem F, 'hess_base_value',mat p)</literal></para>
+
+    <para>       Evaluate the Hessian of all base functions of the fem at point <literal>p</literal>.
+
+    <literal>p</literal> is supposed to be in the reference convex!.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_fem_get(fem F, 'poly_str')</literal></para>
+
+    <para>         Return the polynomial expressions of its basis functions in
+      the reference convex.
+
+      The result is expressed as a cell array of
+      strings. Of course this will fail on non-polynomial fem's. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>string = gf_fem_get(fem F, 'char')</literal></para>
+
+    <para>       Ouput a (unique) string representation of the fem.
+
+    This can be used to perform comparisons between two different fem
+    objects.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_fem_get(fem F, 'display')</literal></para>
+
+    <para>       displays a short summary for a fem object.
+    </para>
+    </listitem>
+
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_fem">gf_fem</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_geotrans.xml b/interface/src/scilab/help/en_US/gf_geotrans.xml
index 7629f76..73f1810 100644
--- a/interface/src/scilab/help/en_US/gf_geotrans.xml
+++ b/interface/src/scilab/help/en_US/gf_geotrans.xml
@@ -9,93 +9,66 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_geotrans</refname>
-
-    <refpurpose>Return the handle of a geometric transformation object</refpurpose>
+    <refpurpose>   The geometric transformation must be used when you are building a custom
+   mesh convex by convex (see the add_convex() function of mesh): it also
+   defines the kind of convex (triangle, hexahedron, prism, etc..)
+  </refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>I = gf_geotrans(name)  </synopsis>
+    <synopsis>GT = gf_geotrans(string name)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for geotrans objects.</para>
 
-    <para>The geometric transformation must be used when you are building a custom mesh convex by convex 
-      (see the 'add convex' sub-command of gf_mesh_set): it also defines the kind of convex (triangle, hexahedron, prism, etc..).</para>
-    <para>The name argument contains the specification of the geometric transformation as a string, which may be:</para>
-
-    <itemizedlist>
-      <listitem>
-        <para>GT_PK(n,k) Transformation on simplexes, dim
-        <literal>n</literal>, degree <literal>k</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>GT_QK(n,k) Transformation on parallelepipeds, dim
-        <literal>n</literal>, degree <literal>k</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>GT_PRISM(n,k) Transformation on prisms, dim
-        <literal>n</literal>, degree <literal>k</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>GT_PRODUCT(A,B) Tensorial product of two transformations.</para>
-      </listitem>
-
-      <listitem>
-        <para>GT_LINEAR_PRODUCT(A,B) Linear tensorial product of two
-        transformations</para>
-      </listitem>
-    </itemizedlist>
-
-    <para>Geometric transformations of an existing mesh can be obtained with gf_mesh_get(M,'geotrans').</para>
+    <para>   The geometric transformation must be used when you are building a custom
+   mesh convex by convex (see the add_convex() function of mesh): it also
+   defines the kind of convex (triangle, hexahedron, prism, etc..)
+  </para>
   </refsection>
 
   <refsection>
-    <title>Examples</title>
-
-    <para>In order to get the geometric transformation for a prism of dimension 3, you could use</para>
+    <title>Command list</title>
 
-    <programlisting role="example"><![CDATA[ 
-gt = gf_geotrans('GT_PRISM(3,1)')
-or
-gt = gf_geotrans('GT_PRODUCT(GT_PK(2,1),GT_PK(1,1))')
- ]]></programlisting>
-
-    <para>If you want the geometric transformation for a curved triangle, you might choose </para>
-
-    <programlisting role="example"><![CDATA[ 
-gt = gf_geotrans('GT_PK(2,2)') // 6-noded triangle
- ]]></programlisting>
-
-    <para>If you want to use a cartesian mesh, then it is preferable to use</para>
-
-    <programlisting role="example"><![CDATA[ 
-gt = gf_geotrans('GT_LINEAR_PRODUCT(GT_PK(1,1), GT_PK(1,1))')
-instead of gf_geotrans('GT_QK(2,1)') 
-or gf_geotrans('GT_PRODUCT(GT_PK(1,1), GT_PK(1,1))'),
- ]]></programlisting>
+    <itemizedlist>
+    <listitem>
+    <para><literal>GT = gf_geotrans(string name)</literal></para>
+
+    <para>   
+The name argument contains the specification of the geometric transformation
+as a string, which may be:
+
+  - GT_PK(n,k) :
+    Transformation on simplexes, dim <literal>n</literal>, degree <literal>k</literal>.
+  - GT_QK(n,k) :
+    Transformation on parallelepipeds, dim <literal>n</literal>, degree <literal>k</literal>.
+  - GT_PRISM(n,k) :
+    Transformation on prisms, dim <literal>n</literal>, degree <literal>k</literal>.
+  - GT_PRODUCT(A,B) :
+    Tensorial product of two transformations.
+  - GT_LINEAR_PRODUCT(geotrans gt1,geotrans gt2) :
+    Linear tensorial product of two transformations
+
+    </para>
+    </listitem>
 
-    <para>since the geometric transformation for parallelepipeds is linear, and getfem++ can take advantage of it 
-      (exact integration method, direct inversion of the geometrical transformation,...).</para>
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mesh_set">gf_mesh_set(M,'add convex')</link></member>
-      <member><link linkend="gf_mesh_get">gf_mesh_get(M,'geotrans')</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_geotrans_get.xml b/interface/src/scilab/help/en_US/gf_geotrans_get.xml
index 1d8ba4b..6171906 100644
--- a/interface/src/scilab/help/en_US/gf_geotrans_get.xml
+++ b/interface/src/scilab/help/en_US/gf_geotrans_get.xml
@@ -9,110 +9,118 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_geotrans_get</refname>
-
-    <refpurpose>General function for querying information about geometric
-    transformations objects.</refpurpose>
+    <refpurpose>    General function for querying information about geometric transformations
+    objects.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-int I = gf_geotrans_get(geotrans GT, 'dim')
-int I = gf_geotrans_get(geotrans GT, 'is_linear')
-int n = gf_geotrans_get(geotrans GT, 'nbpts')
-mat P = gf_geotrans_get(geotrans GT, 'pts')
-mat N = gf_geotrans_get(geotrans GT, 'normals')
-mat Pts2 = gf_geotrans_get(geotrans GT, 'transform', G, Pts)
-string s = gf_geotrans_get(geotrans GT, 'char')
-</synopsis>
+    <synopsis>d = gf_geotrans_get(geotrans GT, 'dim')</synopsis>
+    <synopsis>b = gf_geotrans_get(geotrans GT, 'is_linear')</synopsis>
+    <synopsis>n = gf_geotrans_get(geotrans GT, 'nbpts')</synopsis>
+    <synopsis>P = gf_geotrans_get(geotrans GT, 'pts')</synopsis>
+    <synopsis>N = gf_geotrans_get(geotrans GT, 'normals')</synopsis>
+    <synopsis>Pt = gf_geotrans_get(geotrans GT, 'transform',mat G, mat Pr)</synopsis>
+    <synopsis>s = gf_geotrans_get(geotrans GT, 'char')</synopsis>
+    <synopsis>gf_geotrans_get(geotrans GT, 'display')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
-
-    <itemizedlist>
-      <listitem>
-        <para>d = gf_geotrans_get(GT,'dim'): Get the dimension of the GeoTrans.
-        This is the dimension of the source space, i.e. the dimension of the
-        reference convex.</para>
-      </listitem>
-
-      <listitem>
-        <para>b = gf_geotrans_get(GT,'is_linear'): Return 0 if the GeoTrans is
-        not linear.</para>
-      </listitem>
-
-      <listitem>
-        <para>n = gf_geotrans_get(GT,'nbpts'): Return the number of points of
-        the GeoTrans.</para>
-      </listitem>
-
-      <listitem>
-        <para>P = gf_geotrans_get(GT,'pts'): Return the reference convex points
-        of the GeoTrans. The points are stored in the columns of the output
-        matrix.</para>
-      </listitem>
-
-      <listitem>
-        <para>N = gf_geotrans_get(GT,'normals'): Get the normals for each face
-        of the reference convex of the GeoTrans. The normals are stored in the
-        columns of the output matrix.</para>
-      </listitem>
-
-      <listitem>
-        <para>Po = gf_geotrans_get(GT,'poly_str'): Return the GeoTrans
-        expressed as polynomials The result is expressed as a list of
-        strings.</para>
-      </listitem>
-
-      <listitem>
-        <para>Pt = gf_geotrans_get(GT,'transform',mat G, mat Pr): Apply the
-        GeoTrans to a set of points. <literal>G</literal> is the set of
-        vertices of the real convex, <literal>Pr</literal> is the set of
-        points (in the reference convex) that are to be transformed. The
-        corresponding set of points in the real convex is returned.</para>
-      </listitem>
-
-      <listitem>
-        <para>s = gf_geotrans_get(GT,'char'): Output a (unique) string
-        representation of the GeoTrans. This can be used to perform
-        comparisons between two different GeoTrans objects.</para>
-      </listitem>
-    </itemizedlist>
+    <para>    General function for querying information about geometric transformations
+    objects.
+</para>
   </refsection>
 
   <refsection>
-    <title>Examples</title>
-
-    <programlisting role="example"><![CDATA[ 
---> gt=gf_geotrans('GT_PK(2,1)'); gf_geotrans_get(gt,'pts')
-ans =
-     0     1     0
-     0     0     1
---> gt=gf_geotrans('GT_QK(2,2)'); gf_geotrans_get(gt,'pts')
-ans =
-     0     0.5   1     0     0.5   1     0     0.5   1
-     0     0     0     0.5   0.5   0.5   1     1     1
---> gf_geotrans_get(gt,'char')
-ans =
-GT_QK(2,2)
- ]]></programlisting>
+    <title>Command list</title>
+
+    <itemizedlist>
+    <listitem>
+    <para><literal>d = gf_geotrans_get(geotrans GT, 'dim')</literal></para>
+
+    <para>         Get the dimension of the geotrans.
+      
+      This is the dimension of the source space, i.e. the dimension of
+      the reference convex.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>b = gf_geotrans_get(geotrans GT, 'is_linear')</literal></para>
+
+    <para>         Return 0 if the geotrans is not linear.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>n = gf_geotrans_get(geotrans GT, 'nbpts')</literal></para>
+
+    <para>         Return the number of points of the geotrans.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>P = gf_geotrans_get(geotrans GT, 'pts')</literal></para>
+
+    <para>         Return the reference convex points of the geotrans.
+
+      The points are stored in the columns of the output matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>N = gf_geotrans_get(geotrans GT, 'normals')</literal></para>
+
+    <para>         Get the normals for each face of the reference convex of the geotrans.
+
+      The normals are stored in the columns of the output matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Pt = gf_geotrans_get(geotrans GT, 'transform',mat G, mat Pr)</literal></para>
+
+    <para>         Apply the geotrans to a set of points.
+      
+      <literal>G</literal> is the set of vertices of the real convex, <literal>Pr</literal> is the set
+      of points (in the reference convex) that are to be transformed.
+      The corresponding set of points in the real convex is returned.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>s = gf_geotrans_get(geotrans GT, 'char')</literal></para>
+
+    <para>         Output a (unique) string representation of the geotrans.
+
+      This can be used to perform comparisons between two
+      different geotrans objects. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_geotrans_get(geotrans GT, 'display')</literal></para>
+
+    <para>       displays a short summary for a geotrans object.
+    </para>
+    </listitem>
+
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_geotrans">gf_geotrans</link></member>
-      <member><link linkend="gf_mesh_set">gf_mesh_set(M,'add convex')</link></member>
-      <member><link linkend="gf_mesh_get">gf_mesh_get(M,'geotrans')</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_global_function.xml b/interface/src/scilab/help/en_US/gf_global_function.xml
index 8f5680c..f735967 100644
--- a/interface/src/scilab/help/en_US/gf_global_function.xml
+++ b/interface/src/scilab/help/en_US/gf_global_function.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<refentry version="5.0-subset Scilab" xml:id="gf_global_function"
-          xml:lang="en" xmlns="http://docbook.org/ns/docbook"
+<refentry version="5.0-subset Scilab" xml:id="gf_global_function" xml:lang="en"
+          xmlns="http://docbook.org/ns/docbook"
           xmlns:xlink="http://www.w3.org/1999/xlink"
           xmlns:xi="http://www.w3.org/2001/XInclude"
           xmlns:svg="http://www.w3.org/2000/svg"
@@ -9,89 +9,94 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_global_function</refname>
+    <refpurpose>  Global function object is represented by three functions:
 
-    <refpurpose>General constructor for global function object.</refpurpose>
+   * The function <literal>val</literal>.
+   * The function gradient <literal>grad</literal>.
+   * The function Hessian <literal>hess</literal>.
+
+  this type of function is used as local and global enrichment function. The
+  global function Hessian is an optional parameter (only for fourth order
+  derivative problems). </refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-      gf = gf_global_function('cut_off', int fn, scal r, scal r1, scal r0)
-      gf = gf_global_function('crack', int fn)
-      gf = gf_global_function('parser', string val[, string grad[, string hess]])
-      gf = gf_global_function('product', gl f1, gl f2)
-      gf = gf_global_function('add', gl f1, gl f2)
-    </synopsis>
+    <synopsis>GF = gf_global_function('cutoff', int fn, scalar r, scalar r1, scalar r0)</synopsis>
+    <synopsis>GF = gf_global_function('crack', int fn)</synopsis>
+    <synopsis>GF = gf_global_function('parser', string val[, string grad[, string hess]])</synopsis>
+    <synopsis>GF = gf_global_function('product', global_function F, global_function G)</synopsis>
+    <synopsis>GF = gf_global_function('add', global_function gf1, global_function gf2)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for global_function objects.</para>
+
+    <para>  Global function object is represented by three functions:
+
+   * The function <literal>val</literal>.
+   * The function gradient <literal>grad</literal>.
+   * The function Hessian <literal>hess</literal>.
+
+  this type of function is used as local and global enrichment function. The
+  global function Hessian is an optional parameter (only for fourth order
+  derivative problems). </para>
+  </refsection>
 
-    <para>Global function object is represented by three functions:</para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>The global function <emphasis>val</emphasis>.</para>
-      </listitem>
+    <listitem>
+    <para><literal>GF = gf_global_function('cutoff', int fn, scalar r, scalar r1, scalar r0)</literal></para>
 
-      <listitem>
-        <para>The global function gradient <emphasis>grad</emphasis>.</para>
-      </listitem>
+    <para>         Create a cutoff global function.
+    </para>
+    </listitem>
 
-      <listitem>
-        <para>The global function Hessian <emphasis>hess</emphasis>.</para>
-      </listitem>
-    </itemizedlist>
+    <listitem>
+    <para><literal>GF = gf_global_function('crack', int fn)</literal></para>
 
-    <para>this type of function is used as local and global enrichment
-    function. The global function Hessian is an optional parameter (only for
-    fourth order derivative problems).</para>
+    <para>         Create a near-tip asymptotic global function for modelling cracks.
+    </para>
+    </listitem>
 
-    <para>General constructor for global function object. Returns a getfem
-    handle to the newly created global function object.</para>
+    <listitem>
+    <para><literal>GF = gf_global_function('parser', string val[, string grad[, string hess]])</literal></para>
 
-    <itemizedlist>
-      <listitem>
-        <para>GF = gf_global_function('cutoff', int fn, scalar r, scalar r1,
-        scalar r0) Create a cutoff global function.</para>
-      </listitem>
-
-      <listitem>
-        <para>GF = gf_global_function('crack', int fn) Create a near-tip
-        asymptotic global function for modelling cracks.</para>
-      </listitem>
-
-      <listitem>
-        <para>GF = gf_global_function('parser', string val[, string grad[,
-        string hess]]) Create a global function from strings
-        <emphasis>val</emphasis>, <emphasis>grad</emphasis> and
-        <emphasis>hess</emphasis>.</para>
-      </listitem>
-
-      <listitem>
-        <para>GF = gf_global_function('product', globalfunction F,
-        globalfunction G) Create a product of two global functions.</para>
-      </listitem>
-
-      <listitem>
-	<para>GF = gf_global_function('add', gl f1, gl f2) Create a add of two global functions.</para>
-      </listitem>
+    <para>         Create a global function from strings <literal>val</literal>, <literal>grad</literal> and <literal>hess</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>GF = gf_global_function('product', global_function F, global_function G)</literal></para>
+
+    <para>         Create a product of two global functions.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>GF = gf_global_function('add', global_function gf1, global_function gf2)</literal></para>
+
+    <para>         Create a add of two global functions.
+    </para>
+    </listitem>
 
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_global_function_get">gf_global_function_get</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_global_function_get.xml b/interface/src/scilab/help/en_US/gf_global_function_get.xml
index ca0f6c2..a241ee6 100644
--- a/interface/src/scilab/help/en_US/gf_global_function_get.xml
+++ b/interface/src/scilab/help/en_US/gf_global_function_get.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<refentry version="5.0-subset Scilab" xml:id="gf_global_function_get"
-          xml:lang="en" xmlns="http://docbook.org/ns/docbook"
+<refentry version="5.0-subset Scilab" xml:id="gf_global_function_get" xml:lang="en"
+          xmlns="http://docbook.org/ns/docbook"
           xmlns:xlink="http://www.w3.org/1999/xlink"
           xmlns:xi="http://www.w3.org/2001/XInclude"
           xmlns:svg="http://www.w3.org/2000/svg"
@@ -9,51 +9,89 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_global_function_get</refname>
-
-    <refpurpose> General function for querying information about global_function objects.</refpurpose>
+    <refpurpose>    General function for querying information about global_function objects.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-      mat VALs = gf_global_function('val', mat PTs)
-      mat GRADs = gf_global_function('grad', mat PTs)
-      mat HESSs = gf_global_function('hess', mat PTs)
-    </synopsis>
+    <synopsis>VALs = gf_global_function_get(global_function GF, 'val',mat PTs)</synopsis>
+    <synopsis>GRADs = gf_global_function_get(global_function GF, 'grad',mat PTs)</synopsis>
+    <synopsis>HESSs = gf_global_function_get(global_function GF, 'hess',mat PTs)</synopsis>
+    <synopsis>s = gf_global_function_get(global_function GF, 'char')</synopsis>
+    <synopsis>gf_global_function_get(global_function GF, 'display')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>    General function for querying information about global_function objects.
+</para>
+  </refsection>
 
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-	<para>mat VALs = gf_global_function('val', mat PTs)  Return `val`
-	  function evaluation in `PTs` (column points).</para>
-      </listitem>
-      <listitem>
-	<para>mat GRADs = gf_global_function('grad', mat PTs)  Return
-	`val` function evaluation in `PTs` (column points).</para>
-      </listitem>
-      <listitem>
-	<para>mat HESSs = gf_global_function('hess', mat PTs) Return
-	`val` function evaluation in `PTs` (column points).</para>
-      </listitem>
+    <listitem>
+    <para><literal>VALs = gf_global_function_get(global_function GF, 'val',mat PTs)</literal></para>
+
+    <para>         Return <literal>val</literal> function evaluation in <literal>PTs</literal> (column points).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>GRADs = gf_global_function_get(global_function GF, 'grad',mat PTs)</literal></para>
+
+    <para>       Return <literal>grad</literal> function evaluation in <literal>PTs</literal> (column points).
+
+    On return, each column of <literal>GRADs</literal> is of the
+    form [Gx,Gy].
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>HESSs = gf_global_function_get(global_function GF, 'hess',mat PTs)</literal></para>
+
+    <para>       Return <literal>hess</literal> function evaluation in <literal>PTs</literal> (column points).
+
+    On return, each column of <literal>HESSs</literal> is of the
+    form [Hxx,Hxy,Hyx,Hyy].
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>s = gf_global_function_get(global_function GF, 'char')</literal></para>
+
+    <para>         Output a (unique) string representation of the global_function.
+
+      This can be used to perform comparisons between two
+      different global_function objects.
+      This function is to be completed.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_global_function_get(global_function GF, 'display')</literal></para>
+
+    <para>         displays a short summary for a global_function object.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_global_function">gf_global_function</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_integ.xml b/interface/src/scilab/help/en_US/gf_integ.xml
index 6e3c59a..074ff61 100644
--- a/interface/src/scilab/help/en_US/gf_integ.xml
+++ b/interface/src/scilab/help/en_US/gf_integ.xml
@@ -9,130 +9,97 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_integ</refname>
-
-    <refpurpose>General function for obtaining handles to various integrations methods on convexes 
-      (used when the elementary matrices are built).</refpurpose>
+    <refpurpose>  General object for obtaining handles to various integrations methods on
+  convexes (used when the elementary matrices are built).
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>gf_integ(integ_name)</synopsis>
+    <synopsis>I = gf_integ(string method)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for integ objects.</para>
 
-    <para>Here is a list of some integration methods defined in getfem++ (see
-      the <link linkend = "http://www-gmm.insa-toulouse.fr/getfem/doc">description of finite element and integration methods</link> for a complete
-      reference):</para>
-    
-    <itemizedlist>
-      <listitem>
-        <para>IM_EXACT_SIMPLEX(n) Exact integration on simplices (works only
-        with linear geometric transformations and PK Fem's).</para>
-      </listitem>
-
-      <listitem>
-        <para>IM_PRODUCT(A,B) Product of two integration methods.</para>
-      </listitem>
-
-      <listitem>
-        <para>IM_EXACT_PARALLELEPIPED(n) Exact integration on
-        parallelepipeds.</para>
-      </listitem>
-
-      <listitem>
-        <para>IM_EXACT_PRISM(n) Exact integration on prisms.</para>
-      </listitem>
-
-      <listitem>
-        <para>IM_GAUSS1D(k) Gauss method on the segment, order
-        `k=1,3,...99`.</para>
-      </listitem>
-
-      <listitem>
-        <para>IM_NC(n,k) Newton-Cotes approximative integration on simplexes,
-        order `k`.</para>
-      </listitem>
-
-      <listitem>
-        <para>IM_NC_PARALLELEPIPED(n,k) Product of Newton-Cotes integration on
-        parallelepipeds.</para>
-      </listitem>
-
-      <listitem>
-        <para>IM_NC_PRISM(n,k) Product of Newton-Cotes integration on
-        prisms.</para>
-      </listitem>
-
-      <listitem>
-        <para>IM_GAUSS_PARALLELEPIPED(n,k) Product of Gauss1D integration on
-        parallelepipeds.</para>
-      </listitem>
-
-      <listitem>
-        <para>IM_TRIANGLE(k) Gauss methods on triangles
-        `k=1,3,5,6,7,8,9,10,13,17,19`.</para>
-      </listitem>
-
-      <listitem>
-        <para>IM_QUAD(k) Gauss methods on quadrilaterons `k=2, 3, 5, .. 17`.
-        Note that IM_GAUSS_PARALLELEPIPED should be prefered for QK
-        Fem's.</para>
-      </listitem>
-
-      <listitem>
-        <para>IM_TETRAHEDRON(k) Gauss methods on tetrahedrons `k=1, 2, 3, 5, 6
-        or 8`.</para>
-      </listitem>
-
-      <listitem>
-        <para>IM_SIMPLEX4D(3) Gauss method on a 4-dimensional simplex.</para>
-      </listitem>
-
-      <listitem>
-        <para>IM_STRUCTURED_COMPOSITE(im,k) Composite method on a grid with
-        `k` divisions.</para>
-      </listitem>
-
-      <listitem>
-        <para>IM_HCT_COMPOSITE(im) Composite integration suited to the HCT
-        composite finite element.</para>
-      </listitem>
-    </itemizedlist>
+    <para>  General object for obtaining handles to various integrations methods on
+  convexes (used when the elementary matrices are built).
+</para>
+  </refsection>
 
-    <para>Example:</para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_integ('IM_PRODUCT(IM_GAUSS1D(5),IM_GAUSS1D(5))') is the same
-        as:</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_integ('IM_GAUSS_PARALLELEPIPED(2,5)')</para>
-      </listitem>
-    </itemizedlist>
+    <listitem>
+    <para><literal>I = gf_integ(string method)</literal></para>
+
+    <para>       Here is a list of some integration methods defined in getfem++ (see the
+    description of finite element and integration methods for a complete
+    reference):
+
+     - IM_EXACT_SIMPLEX(n) :
+       Exact integration on simplices (works only with linear geometric
+       transformations and PK fem's).
+     - IM_PRODUCT(A,B) :
+       Product of two integration methods.
+     - IM_EXACT_PARALLELEPIPED(n) :
+       Exact integration on parallelepipeds.
+     - IM_EXACT_PRISM(n) :
+       Exact integration on prisms.
+     - IM_GAUSS1D(k) :
+       Gauss method on the segment, order <literal>k=1,3,...,99</literal>.
+     - IM_NC(n,k) :
+       Newton-Cotes approximative integration on simplexes, order <literal>k</literal>.
+     - IM_NC_PARALLELEPIPED(n,k) :
+       Product of Newton-Cotes integration on parallelepipeds.
+     - IM_NC_PRISM(n,k) :
+       Product of Newton-Cotes integration on prisms.
+     - IM_GAUSS_PARALLELEPIPED(n,k) :
+       Product of Gauss1D integration on parallelepipeds.
+     - IM_TRIANGLE(k) :
+       Gauss methods on triangles <literal>k=1,3,5,6,7,8,9,10,13,17,19</literal>.
+     - IM_QUAD(k) :
+       Gauss methods on quadrilaterons <literal>k=2,3,5, ...,17</literal>. Note that
+       IM_GAUSS_PARALLELEPIPED should be prefered for QK fem's.
+     - IM_TETRAHEDRON(k) :
+       Gauss methods on tetrahedrons <literal>k=1,2,3,5,6 or 8</literal>.
+     - IM_SIMPLEX4D(3) :
+       Gauss method on a 4-dimensional simplex.
+     - IM_STRUCTURED_COMPOSITE(im,k) :
+       Composite method on a grid with <literal>k</literal> divisions.
+     - IM_HCT_COMPOSITE(im) :
+       Composite integration suited to the HCT composite finite element.
+
+    Example:
+
+     - I = gf_integ('IM_PRODUCT(IM_GAUSS1D(5),IM_GAUSS1D(5))')
+
+    is the same as:
+
+     - I = gf_integ('IM_GAUSS_PARALLELEPIPED(2,5)')
+
+    Note that 'exact integration' should be avoided in general, since they
+    only apply to linear geometric transformations, are quite slow, and
+    subject to numerical stability problems for high degree fem's. 
+    </para>
+    </listitem>
 
-    <para>Note that 'exact integration' should be avoided in general, since
-    they only apply to linear geometric transformations, are quite slow, and
-    subject to numerical stability problems for high degree Fem's.</para>
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_integ_get">gf_integ_get</link></member>
-      <member><link linkend="gf_fem">gf_fem</link></member>
-      <member><link linkend="gf_mesh_im">gf_mesh_im</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_integ_get.xml b/interface/src/scilab/help/en_US/gf_integ_get.xml
index ed882f0..172a025 100644
--- a/interface/src/scilab/help/en_US/gf_integ_get.xml
+++ b/interface/src/scilab/help/en_US/gf_integ_get.xml
@@ -9,91 +9,132 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_integ_get</refname>
-
-    <refpurpose>Gives access to various internal informations of an Integration Method handle IM.</refpurpose>
+    <refpurpose>  General function for querying information about integration method objects.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-int I = gf_integ_get(IM,'is_exact')
-int I = gf_integ_get(IM,'dim')
-int I = gf_integ_get(IM,'nbpts')
-mat gf_integ_get(IM,'pts')
-vec gf_integ_get(IM,'coeffs')
-mat gf_integ_get(IM,'face_pts', int F)
-vec gf_integ_get(IM,'face_coeffs',int F)
-string S=gf_integ_get(IM,'char')
-    </synopsis>
+    <synopsis>b = gf_integ_get(integ I, 'is_exact')</synopsis>
+    <synopsis>d = gf_integ_get(integ I, 'dim')</synopsis>
+    <synopsis>n = gf_integ_get(integ I, 'nbpts')</synopsis>
+    <synopsis>Pp = gf_integ_get(integ I, 'pts')</synopsis>
+    <synopsis>Pf = gf_integ_get(integ I, 'face_pts',F)</synopsis>
+    <synopsis>Cp = gf_integ_get(integ I, 'coeffs')</synopsis>
+    <synopsis>Cf = gf_integ_get(integ I, 'face_coeffs',F)</synopsis>
+    <synopsis>s = gf_integ_get(integ I, 'char')</synopsis>
+    <synopsis>gf_integ_get(integ I, 'display')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  General function for querying information about integration method objects.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>b = gf_integ_get(im,'is_exact') Return 0 if the integration is an
-        approximate one.</para>
-      </listitem>
-
-      <listitem>
-        <para>d = gf_integ_get(im,'dim') Return the dimension of the reference
-        convex of the method.</para>
-      </listitem>
-
-      <listitem>
-        <para>n = gf_integ_get(im,'nbpts') Return the total number of integration
-        points. Count the points for the volume integration, and points for
-        surface integration on each face of the reference convex.</para>
-
-        <para>Only for approximate methods, this has no meaning for exact
-        integration methods!</para>
-      </listitem>
-
-      <listitem>
-        <para>Pf = gf_integ_get(im,'face_pts',F) Return the list of integration
-        points for a face.</para>
-
-        <para>Only for approximate methods, this has no meaning for exact
-        integration methods!</para>
-      </listitem>
-
-      <listitem>
-        <para>Cp = gf_integ_get(im,'coeffs') Returns the coefficients associated to
-        each integration point.</para>
-
-        <para>Only for approximate methods, this has no meaning for exact
-        integration methods!</para>
-      </listitem>
-
-      <listitem>
-        <para>Cf = gf_integ_get(im,'face_coeffs',F) Returns the coefficients
-        associated to each integration of a face.</para>
-
-        <para>Only for approximate methods, this has no meaning for exact
-        integration methods!</para>
-      </listitem>
-
-      <listitem>
-        <para>s = gf_integ_get(im,'char') Ouput a (unique) string representation of
-        the integration method. This can be used to comparisons between two
-        different Integ objects.</para>
-      </listitem>
+    <listitem>
+    <para><literal>b = gf_integ_get(integ I, 'is_exact')</literal></para>
+
+    <para>       Return 0 if the integration is an approximate one.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>d = gf_integ_get(integ I, 'dim')</literal></para>
+
+    <para>       Return the dimension of the reference convex of
+    the method.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>n = gf_integ_get(integ I, 'nbpts')</literal></para>
+
+    <para>       Return the total number of integration points.
+
+    Count the points for the volume integration, and points for
+    surface integration on each face of the reference convex.
+
+    Only for approximate methods, this has no meaning for exact
+    integration methods!
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Pp = gf_integ_get(integ I, 'pts')</literal></para>
+
+    <para>         Return the list of integration points
+      
+      Only for approximate methods, this has no meaning for exact
+      integration methods!
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Pf = gf_integ_get(integ I, 'face_pts',F)</literal></para>
+
+    <para>         Return the list of integration points for a face.
+      
+      Only for approximate methods, this has no meaning for exact
+      integration methods!
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Cp = gf_integ_get(integ I, 'coeffs')</literal></para>
+
+    <para>       Returns the coefficients associated to each integration point.
+
+    Only for approximate methods, this has no meaning for exact
+    integration methods!
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Cf = gf_integ_get(integ I, 'face_coeffs',F)</literal></para>
+
+    <para>       Returns the coefficients associated to each integration of a face.
+
+    Only for approximate methods, this has no meaning for exact
+    integration methods!
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>s = gf_integ_get(integ I, 'char')</literal></para>
+
+    <para>       Ouput a (unique) string representation of the integration method.
+
+    This can be used to  comparisons between two different integ
+    objects.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_integ_get(integ I, 'display')</literal></para>
+
+    <para>       displays a short summary for a integ object.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_integ">gf_integ</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_levelset.xml b/interface/src/scilab/help/en_US/gf_levelset.xml
index 7ac4725..c769512 100644
--- a/interface/src/scilab/help/en_US/gf_levelset.xml
+++ b/interface/src/scilab/help/en_US/gf_levelset.xml
@@ -9,68 +9,80 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_levelset</refname>
+    <refpurpose>
+   The level-set object is represented by a primary level-set and optionally
+   a secondary level-set used to represent fractures (if p(x) is the primary
+   level-set function and s(x) is the secondary level-set, the crack is
+   defined by <latex style="text"><![CDATA[p(x)=0]]></latex> and <latex style="text"><![CDATA[s(x)\leq0]]></latex> : the role of the secondary is to determine
+   the crack front/tip).
 
-    <refpurpose></refpurpose>
+   note:
+
+      All tools listed below need the package qhull installed on your
+      system. This package is widely available. It computes convex hull and
+      delaunay triangulations in arbitrary dimension.
+
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>LevelSet = gf_levelset(...)</synopsis>
+    <synopsis>LS = gf_levelset(mesh m, int d[, string 'ws'| string f1[, string f2 | string 'ws']])</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for levelset objects.</para>
+
+    <para>
+   The level-set object is represented by a primary level-set and optionally
+   a secondary level-set used to represent fractures (if p(x) is the primary
+   level-set function and s(x) is the secondary level-set, the crack is
+   defined by <latex style="text"><![CDATA[p(x)=0]]></latex> and <latex style="text"><![CDATA[s(x)\leq0]]></latex> : the role of the secondary is to determine
+   the crack front/tip).
+
+   note:
 
-    <para>The level-set object is represented by a primary level-set and
-    optionally a secondary level-set used to represent fractures (if p(x) is
-    the primary level-set function and s(x) is the secondary level-set, the
-    crack is defined by p(x)=0 and s(x)<=0: the role of the secondary is
-    stop the crack).</para>
+      All tools listed below need the package qhull installed on your
+      system. This package is widely available. It computes convex hull and
+      delaunay triangulations in arbitrary dimension.
+
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_levelset(Mesh m, int d) Create a LevelSet object on a Mesh m
-        represented by a primary function defined on a lagrange Fem of degree
-        d.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_levelset(Mesh m, int d, string poly1) Create a LevelSet
-        object on a Mesh m represented by a primary function defined by the
-        polynomial expression poly1 on a lagrange Fem of degree d.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_levelset(Mesh m, int d, 'with_secondary' [, string poly2])
-        Create a LevelSet object on a Mesh m represented by a primary function
-        defined by the polynomial expression poly1 and a secondary function,
-        both on a lagrange Fem of degree d.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_levelset(Mesh m, int d, string poly1, string poly2) Create a
-        LevelSet object on a Mesh m represented by a primary function defined
-        by the polynomial expression poly1 and a secondary function defined by
-        the polynomial expression poly2, both on a lagrange Fem of degree
-        d.</para>
-      </listitem>
+    <listitem>
+    <para><literal>LS = gf_levelset(mesh m, int d[, string 'ws'| string f1[, string f2 | string 'ws']])</literal></para>
+
+    <para>         Create a levelset object on a mesh represented by a primary function
+      (and optional secondary function, both) defined on a lagrange mesh_fem of
+      degree <literal>d</literal>.
+
+      If <literal>ws</literal> (with secondary) is set; this levelset is represented by a
+      primary function and a secondary function. If <literal>f1</literal> is set; the primary
+      function is defined by that expression. If <literal>f2</literal> is set; this levelset
+      is represented by a primary function and a secondary function defined
+      by these expressions. 
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_levelset_set">gf_levelset_set</link></member>
-
-      <member><link linkend="gf_levelset_get">gf_levelset_get</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_levelset_get.xml b/interface/src/scilab/help/en_US/gf_levelset_get.xml
index 537b0df..3394492 100644
--- a/interface/src/scilab/help/en_US/gf_levelset_get.xml
+++ b/interface/src/scilab/help/en_US/gf_levelset_get.xml
@@ -9,64 +9,95 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_levelset_get</refname>
-
-    <refpurpose>General function for querying information about LEVELSET
-    objects.</refpurpose>
+    <refpurpose>    General function for querying information about LEVELSET objects.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>I = gf_levelset_get(LS, ...)</synopsis>
+    <synopsis>V = gf_levelset_get(levelset LS, 'values', int nls)</synopsis>
+    <synopsis>d = gf_levelset_get(levelset LS, 'degree')</synopsis>
+    <synopsis>mf = gf_levelset_get(levelset LS, 'mf')</synopsis>
+    <synopsis>z = gf_levelset_get(levelset LS, 'memsize')</synopsis>
+    <synopsis>s = gf_levelset_get(levelset LS, 'char')</synopsis>
+    <synopsis>gf_levelset_get(levelset LS, 'display')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>    General function for querying information about LEVELSET objects.
+</para>
+  </refsection>
 
-    <para>General function for querying information about LEVELSET
-    objects.</para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>V = gf_levelset_get(LS,'values',int nls) Return the vector of
-        dof for <literal>nls</literal> funtion. If <literal>nls</literal> is
-        0, the method return the vector of dof for the primary level-set
-        funtion. If <literal>nls</literal> is 1, the method return the vector
-        of dof for the secondary level-set function (if any).</para>
-      </listitem>
-
-      <listitem>
-        <para>V = gf_levelset_get(LS,'values',int nls) Return the vector of
-        dof for <literal>nls</literal> funtion. If <literal>nls</literal> is
-        0, the method return the vector of dof for the primary level-set
-        funtion. If <literal>nls</literal> is 1, the method return the vector
-        of dof for the secondary level-set function (if any).</para>
-      </listitem>
-
-      <listitem>
-        <para>mf = gf_levelset_get(LS,'mf') Return a reference on the MeshFem
-        object.</para>
-      </listitem>
-
-      <listitem>
-        <para>z = gf_levelset_get(LS,'memsize') Return the amount of memory
-        (in bytes) used by the level-set.</para>
-      </listitem>
+    <listitem>
+    <para><literal>V = gf_levelset_get(levelset LS, 'values', int nls)</literal></para>
+
+    <para>       Return the vector of dof for <literal>nls</literal> funtion.
+
+    If <literal>nls</literal> is 0, the method return the vector of dof for the primary
+    level-set funtion. If <literal>nls</literal> is 1, the method return the vector of
+    dof for the secondary level-set function (if any).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>d = gf_levelset_get(levelset LS, 'degree')</literal></para>
+
+    <para>         Return the degree of lagrange representation.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>mf = gf_levelset_get(levelset LS, 'mf')</literal></para>
+
+    <para>       Return a reference on the mesh_fem object.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>z = gf_levelset_get(levelset LS, 'memsize')</literal></para>
+
+    <para>         Return the amount of memory (in bytes) used by the level-set.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>s = gf_levelset_get(levelset LS, 'char')</literal></para>
+
+    <para>         Output a (unique) string representation of the levelset.
+
+      This can be used to perform comparisons between two
+      different levelset objects.
+      This function is to be completed.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_levelset_get(levelset LS, 'display')</literal></para>
+
+    <para>         displays a short summary for a levelset.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_levelset">gf_levelset</link></member>
-      <member><link linkend="gf_levelset_set">gf_levelset_set</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_levelset_set.xml b/interface/src/scilab/help/en_US/gf_levelset_set.xml
index 6b7552b..dc363f7 100644
--- a/interface/src/scilab/help/en_US/gf_levelset_set.xml
+++ b/interface/src/scilab/help/en_US/gf_levelset_set.xml
@@ -9,47 +9,58 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_levelset_set</refname>
-
-    <refpurpose>General function for modification of LEVELSET
-    objects.</refpurpose>
+    <refpurpose>  General function for modification of LEVELSET objects.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>I = gf_levelset_set(LS, ...)  </synopsis>
+    <synopsis>gf_levelset_set(levelset LS, 'values', {mat v1|string func_1}[, mat v2|string func_2])</synopsis>
+    <synopsis>gf_levelset_set(levelset LS, 'simplify'[, scalar eps=0.01])</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  General function for modification of LEVELSET objects.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
+
+    <itemizedlist>
+    <listitem>
+    <para><literal>gf_levelset_set(levelset LS, 'values', {mat v1|string func_1}[, mat v2|string func_2])</literal></para>
+
+    <para>       Set values of the vector of dof for the level-set functions.
 
-    <para>General function for modification of LEVELSET objects.</para>
+    Set the primary function with the vector of dof <literal>v1</literal> (or the expression
+    <literal>func_1</literal>) and the secondary function (if any) with  the vector of dof
+    <literal>v2</literal> (or the expression <literal>func_2</literal>)
+    </para>
+    </listitem>
 
-    <para>gf_levelset_set(LS,'values',list(mat v1|string poly1)[, list(mat
-    v2|string poly2)]) Set values of the vector of dof for the level-set
-    functions. Set the primary function with the vector of dof
-    <literal>v1</literal> (or the polynomial expression
-    <literal>poly1</literal>) and the secondary function (if any) with the
-    vector of dof <literal>v2</literal> (or the polynomial expression
-    poly2).</para>
+    <listitem>
+    <para><literal>gf_levelset_set(levelset LS, 'simplify'[, scalar eps=0.01])</literal></para>
 
-    <para>gf_levelset_set(LS,'simplify'[scalar eps=0.01]) Simplify dof of
-    level-set optionally with the parameter <literal>eps</literal>.</para>
+    <para>       Simplify dof of level-set optionally with the parameter <literal>eps</literal>.
+    </para>
+    </listitem>
+
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_levelset">gf_levelset</link></member>
-
-      <member><link linkend="gf_levelset_get">gf_levelset_get</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_linsolve.xml b/interface/src/scilab/help/en_US/gf_linsolve.xml
index 172b2ec..85bfaec 100644
--- a/interface/src/scilab/help/en_US/gf_linsolve.xml
+++ b/interface/src/scilab/help/en_US/gf_linsolve.xml
@@ -9,71 +9,87 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_linsolve</refname>
-
-    <refpurpose>The linear solver</refpurpose>
+    <refpurpose>  Various linear system solvers.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-gf_linsolve('gmres', spmat M, vec b [, int restart=50][, precond P][, 'noisy'][,'res', r][,'maxiter', n])
-gf_linsolve('cg', spmat M, vec b [, precond P][, 'noisy'][,'res', r][,'maxiter', n])
-gf_linsolve('bicgstab', spmat M, vec b [, precond P][, 'noisy'][,'res', r][,'maxiter', n])[U,cond] = gf_linsolve('lu'|'superlu', spmat M, vec b [, precond P])
-</synopsis>
+    <synopsis>X = gf_linsolve('gmres', spmat M, vec b[, int restart][, precond P][,'noisy'][,'res', r][,'maxiter', n])</synopsis>
+    <synopsis>X = gf_linsolve('cg', spmat M, vec b [, precond P][,'noisy'][,'res', r][,'maxiter', n])</synopsis>
+    <synopsis>X = gf_linsolve('bicgstab', spmat M, vec b [, precond P][,'noisy'][,'res', r][,'maxiter', n])</synopsis>
+    <synopsis>{U, cond} = gf_linsolve('lu', spmat M, vec b)</synopsis>
+    <synopsis>{U, cond} = gf_linsolve('superlu', spmat M, vec b)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  Various linear system solvers.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>X = gf_linsolve('gmres',Spmat M, vec b[, int restart][, Precond
-        P][,'noisy'][,'res', r][,'maxiter', n]) Solve <emphasis>M.X =
-        b</emphasis> with the generalized minimum residuals method. Optionally
-        using <literal>P</literal> as preconditioner. The default value of the
-        restart parameter is 50.</para>
-      </listitem>
-
-      <listitem>
-        <para>X = gf_linsolve('cg',Spmat M, vec b [, Precond
-        P][,'noisy'][,'res', r][,'maxiter', n]) Solve <emphasis>M.X =
-        b</emphasis> with the conjugated gradient method. Optionally using
-        <literal>P</literal> as preconditioner.</para>
-      </listitem>
-
-      <listitem>
-        <para>X = gf_linsolve('bicgstab',Spmat M, vec b [, Precond
-        P][,'noisy'][,'res', r][,'maxiter', n]) Solve <emphasis>M.X =
-        b</emphasis> with the bi-conjugated gradient stabilized method.
-        Optionally using <literal>P</literal> as a preconditioner.</para>
-      </listitem>
-
-      <listitem>
-        <para>list(U, cond) = gf_linsolve('lu',Spmat M, vec b) Alias for
-        gf_linsolve('superlu',...)</para>
-      </listitem>
-
-      <listitem>
-        <para>list(U, cond) = gf_linsolve('superlu',Spmat M, vec b) Solve
-        <emphasis>M.U = b</emphasis> apply the <link linkend="http://crd.lbl.gov/~xiaoye/SuperLU/">SuperLU</link> solver (sparse LU
-        factorization). The condition number estimate <literal>cond</literal> is returned with the solution <literal>U</literal>.</para>
-      </listitem>
+    <listitem>
+    <para><literal>X = gf_linsolve('gmres', spmat M, vec b[, int restart][, precond P][,'noisy'][,'res', r][,'maxiter', n])</literal></para>
+
+    <para>       Solve <literal>M.X = b</literal> with the generalized minimum residuals method.
+
+    Optionally using <literal>P</literal> as preconditioner. The default value of the
+    restart parameter is 50.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>X = gf_linsolve('cg', spmat M, vec b [, precond P][,'noisy'][,'res', r][,'maxiter', n])</literal></para>
+
+    <para>       Solve <literal>M.X = b</literal> with the conjugated gradient method.
+
+    Optionally using <literal>P</literal> as preconditioner.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>X = gf_linsolve('bicgstab', spmat M, vec b [, precond P][,'noisy'][,'res', r][,'maxiter', n])</literal></para>
+
+    <para>       Solve <literal>M.X = b</literal> with the bi-conjugated gradient stabilized method.
+
+    Optionally using <literal>P</literal> as a preconditioner.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{U, cond} = gf_linsolve('lu', spmat M, vec b)</literal></para>
+
+    <para>         Alias for gf_linsolve('superlu',...)
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{U, cond} = gf_linsolve('superlu', spmat M, vec b)</literal></para>
+
+    <para>       Solve <literal>M.U = b</literal> apply the SuperLU solver (sparse LU factorization).
+
+    The condition number estimate <literal>cond</literal> is returned with the solution <literal>U</literal>.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_precond_get">gf_precond_get</link></member>
-      <member><link linkend="gf_precond">gf_precond</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mdbrick.xml b/interface/src/scilab/help/en_US/gf_mdbrick.xml
index 55dadb3..cc479fa 100644
--- a/interface/src/scilab/help/en_US/gf_mdbrick.xml
+++ b/interface/src/scilab/help/en_US/gf_mdbrick.xml
@@ -9,312 +9,359 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mdbrick</refname>
-
-    <refpurpose>General constructor for mdbrick object. Returns a getfem
-    handle to the newly created object.</refpurpose>
+    <refpurpose></refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-gf_mdbrick('constraint', mdbrick parent, string CTYPE [, int numfem])
-gf_mdbrick('dirichlet', mdbrick parent, int BNUM, mesh_fem MFMULT, string CTYPE [, int numfem])
-gf_mdbrick('dirichlet on normal component', mdbrick parent, int BNUM, mesh_fem MFMULT, string CTYPE [, int numfem])
-gf_mdbrick('dirichlet on normal derivative', mdbrick parent, int BNUM, mesh_fem MFMULT, string CTYPE [, int numfem])
-gf_mdbrick('generalized dirichlet', mdbrick parent, int BNUM [, int numfem])
-gf_mdbrick('source term', mdbrick parent, [, int BNUM=-1[, int numfem]])
-gf_mdbrick('normal source term', mdbrick parent, int BNUM [, int numfem])
-gf_mdbrick('normal derivative source term', mdbrick parent, int BNUM [, int numfem])
-gf_mdbrick('neumann KirchhoffLove source term', mdbrick parent, int BNUM [, int numfem])
-gf_mdbrick('qu term', mdbrick parent, [, int BNUM [, int numfem]])
-gf_mdbrick('mass matrix', mesh_im mim, mesh_fem mf_u [,'real'|'complex'])
-gf_mdbrick('generic elliptic', mesh_im MIM, mesh_fem mfu [,'scalar'|'matrix'|'tensor'][,'real'|'complex'])
-gf_mdbrick('helmholtz', mesh_im MIM, mesh_fem mfu [,'real'|'complex'])
-gf_mdbrick('isotropic linearized elasticity', mesh_im MIM, mesh_fem mfu)
-gf_mdbrick('linear incompressibility term', mdbrick parent, mesh_fem mf_p [, int numfem])
-gf_mdbrick('nonlinear elasticity', mesh_im MIM, mesh_fem mfu, string lawname)
-gf_mdbrick('nonlinear elasticity incompressibility term', mdbrick parent, mesh_fem mf_p [, int numfem])
-gf_mdbrick('small deformations plasticity', mesh_im MIM, mesh_fem mfu, scalar THRESHOLD)
-gf_mdbrick('bilaplacian', mesh_im MIM, mesh_fem mfu, ['Kirchhoff-Love'])
-gf_mdbrick('isotropic_linearized_plate', mesh_im MIM, mesh_im MIMSUB, mesh_fem MF_UT, mesh_fem MF_U3, mesh_fem MF_THETA, scalar EPSILON)
-gf_mdbrick('mixed_isotropic_linearized_plate', mesh_im MIM, mesh_fem MF_UT, mesh_fem MF_U3, mesh_fem MF_THETA, scalar EPSILON)
-gf_mdbrick('plate_source_term', mdbrick parent, [, int BNUM=-1[, int numfem]])
-gf_mdbrick('plate_simple_support', mdbrick parent, int BNUM, string CTYPE [, int numfem])
-gf_mdbrick('plate_clamped_support', mdbrick parent, int BNUM, string CTYPE[, int numfem])
-gf_mdbrick('plate_closing', mdbrick parent [, int numfem])
-    </synopsis>
+    <synopsis>B = gf_mdbrick('constraint', mdbrick pb, string CTYPE[, int nfem])</synopsis>
+    <synopsis>B = gf_mdbrick('dirichlet', mdbrick pb, int bnum, mesh_fem mf_m, string CTYPE[, int nfem])</synopsis>
+    <synopsis>B = gf_mdbrick('dirichlet on normal component', mdbrick pb, int bnum, mesh_fem mf_m, string CTYPE[, int nfem])</synopsis>
+    <synopsis>B = gf_mdbrick('dirichlet on normal derivative', mdbrick pb, int bnum, mesh_fem mf_m, string CTYPE[, int nfem])</synopsis>
+    <synopsis>B = gf_mdbrick('generalized dirichlet', mdbrick pb, int bnum[, int nfem])</synopsis>
+    <synopsis>B = gf_mdbrick('source term', mdbrick pb[, int bnum=-1[, int nfem]])</synopsis>
+    <synopsis>B = gf_mdbrick('normal source term', mdbrick pb, int bnum[, int nfem])</synopsis>
+    <synopsis>B = gf_mdbrick('normal derivative source term', mdbrick parent, int bnum[, int nfem])</synopsis>
+    <synopsis>B = gf_mdbrick('neumann KirchhoffLove source term', mdbrick pb, int bnum[, int nfem])</synopsis>
+    <synopsis>B = gf_mdbrick('qu term', mdbrick pb[, int bnum[, int nfem]])</synopsis>
+    <synopsis>B = gf_mdbrick('mass matrix', mesh_im mim, mesh_fem mf_u[, 'real'|'complex'])</synopsis>
+    <synopsis>B = gf_mdbrick('generic elliptic', mesh_im mim, mesh_fem mfu[, 'scalar'|'matrix'|'tensor'][, 'real'|'complex'])</synopsis>
+    <synopsis>B = gf_mdbrick('helmholtz', mesh_im mim, mesh_fem mfu[, 'real'|'complex'])</synopsis>
+    <synopsis>B = gf_mdbrick('isotropic linearized elasticity', mesh_im mim, mesh_fem mfu)</synopsis>
+    <synopsis>B = gf_mdbrick('linear incompressibility term', mdbrick pb, mesh_fem mfp[, int nfem])</synopsis>
+    <synopsis>B = gf_mdbrick('nonlinear elasticity', mesh_im mim, mesh_fem mfu, string law)</synopsis>
+    <synopsis>B = gf_mdbrick('nonlinear elasticity incompressibility term', mdbrick pb, mesh_fem mfp[, int nfem])</synopsis>
+    <synopsis>B = gf_mdbrick('small deformations plasticity', mesh_im mim, mesh_fem mfu, scalar THRESHOLD)</synopsis>
+    <synopsis>B = gf_mdbrick('dynamic', mdbrick pb, scalar rho[, int numfem])</synopsis>
+    <synopsis>B = gf_mdbrick('bilaplacian', mesh_im mim, mesh_fem mfu[, 'Kirchhoff-Love'])</synopsis>
+    <synopsis>B = gf_mdbrick('navier stokes', mesh_im mim, mesh_fem mfu, mesh_fem mfp)</synopsis>
+    <synopsis>B = gf_mdbrick('isotropic_linearized_plate', mesh_im mim, mesh_im mims, mesh_fem mfut, mesh_fem mfu3, mesh_fem mftheta, scalar eps)</synopsis>
+    <synopsis>B = gf_mdbrick('mixed_isotropic_linearized_plate', mesh_im mim, mesh_fem mfut, mesh_fem mfu3, mesh_fem mftheta, scalar eps)</synopsis>
+    <synopsis>B = gf_mdbrick('plate_source_term', mdbrick pb[, int bnum=-1[, int nfem]])</synopsis>
+    <synopsis>B = gf_mdbrick('plate_simple_support', mdbrick pb, int bnum, string CTYPE[, int nfem])</synopsis>
+    <synopsis>B = gf_mdbrick('plate_clamped_support', mdbrick pb, int bnum, string CTYPE[, int nfem])</synopsis>
+    <synopsis>B = gf_mdbrick('plate_closing', mdbrick pb[, int nfem])</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for mdbrick objects.</para>
 
-    <para>Many of the bricks take a "numfem" optional parameter, which is the
-    meshfem number in the stack of parent bricks (by default numfem=0, i.e. it
-    refers to the first meshfem in the stack of bricks).</para>
+    <para></para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>B = gf_mdbrick('constraint', MdBrick pb, string CTYPE[, int
-        nfem]) Build a generic constraint brick. It may be useful in some
-        situations, such as the Stokes problem where the pressure is defined
-        modulo a constant. In such a situation, this brick can be used to add
-        an additional constraint on the pressure value.</para>
-
-        <para><literal>CTYPE</literal> has to be chosen among 'augmented',
-        'penalized', and 'eliminated'. The constraint can be specified with
-        gf_mdbrick_set(b,constraints'). Note that Dirichlet bricks (except the
-        'generalized Dirichlet' one) are also specializations of the
-        'constraint' brick.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('dirichlet', MdBrick pb, int bnum, MeshFem mf_m,
-        string CTYPE[, int nfem]) Build a Dirichlet condition brick which
-        impose the value of a field along a mesh boundary. The
-        <literal>bnum</literal> parameter selects on which mesh region the
-        Dirichlet condition is imposed. <literal>CTYPE</literal> has to be
-        chosen among 'augmented', 'penalized', and 'eliminated'. The
-        <literal>mf_m</literal> may generally be taken as the MeshFem of the
-        unknown, but for 'augmented' Dirichlet conditions, you may have to
-        respect the Inf-Sup condition and choose an adequate MeshFem.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('dirichlet on normal component', MdBrick pb, int
-        bnum, MeshFem mf_m, string CTYPE[, int nfem]) Build a Dirichlet
-        condition brick which imposes the value of the normal component of a
-        vector field.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('dirichlet on normal derivative', MdBrick pb, int
-        bnum, MeshFem mf_m, string CTYPE[, int nfem]) Build a Dirichlet
-        condition brick which imposes the value of the normal derivative of
-        the unknown.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('generalized dirichlet', MdBrick pb, int bnum[,
-        int nfem]) This is the "old" Dirichlet brick of getfem. This brick can
-        be used to impose general Dirichlet conditions <emphasis>h(x)u(x) =
-        r(x)</emphasis>, however it may have some issues with elaborated Fem's
-        (such as Argyris, etc). It should be avoided when possible.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('source term', MdBrick pb[, int bnum=-1[, int
-        nfem]]) Add a boundary or volumic source term ( \int B.v ). If
-        <literal>bnum</literal> is omitted (or set to -1) , the brick adds a
-        volumic source term on the whole mesh. For <literal>bnum</literal>
-        >= 0, the source term is imposed on the mesh region
-        <literal>bnum</literal>. Use gf_mdbrick_set(b,'param','source
-        term',mf,B) to set the source term field. The source term is expected
-        as a vector field of size <literal>Q</literal> (with <emphasis>Q =
-        qdim</emphasis>).</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('normal source term', MdBrick pb, int bnum[, int
-        nfem]) Add a boundary source term ( \int (Bn).v ). The source term is
-        imposed on the mesh region <literal>bnum</literal> (which of course is
-        not allowed to be a volumic region, only boundary regions are
-        allowed). Use gf_mdbrick_set(b,'param','source term',mf,B) to set the
-        source term field. The source term <literal>B</literal> is expected as
-        tensor field of size <emphasis>QxN</emphasis> (with <emphasis>Q =
-        qdim, N = mesh dim</emphasis>). </para>
-
-        <para>For example, if you consider an elasticity problem, this brick
-        may be used to impose a force on the boundary with
-        <literal>B</literal> as the stress tensor.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('normal derivative source term', MdBrick parent,
-        int bnum[, int nfem]) Add a boundary source term ( \int (\partial_n
-        B).v ). The source term is imposed on the mesh region
-        <literal>bnum</literal>. Use gf_mdbrick_set(b,'param','source
-        term',mf,B) to set the source term field, which is expected as a
-        vector field of size <literal>Q</literal> (with <emphasis>Q =
-        qdim</emphasis>).</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('neumann KirchhoffLove source term', MdBrick pb,
-        int bnum[, int nfem]) Add a boundary source term for neumann
-        Kirchhoff-Love plate problems. Should be used with the Kirchhoff-Love
-        flavour of the bilaplacian brick.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('qu term', MdBrick pb[, int bnum[, int nfem]])
-        Update the tangent matrix with a \int (Qu).v term. The
-        <emphasis>Q(x)</emphasis> parameter is a matrix field of size qdim x
-        qdim. An example of use is for the "iku" part of Robin boundary
-        conditions \partial_n u + iku = ...</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('mass matrix', MeshIm mim, MeshFem mf_u[,
-        'real'|'complex']) Build a mass-matrix brick.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('generic elliptic', MeshIm mim, MeshFem mfu[,
-        'scalar'|'matrix'|'tensor'][, 'real'|'complex']) Setup a generic
-        elliptic problem. <emphasis></emphasis></para>
-
-        <para><emphasis>a(x)*grad(U).grad(V)</emphasis></para>
-
-        <para>The brick parameter <literal>a</literal> may be a scalar field,
-        a matrix field, or a tensor field (default is scalar).</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('helmholtz', MeshIm mim, MeshFem mfu[,
-        'real'|'complex']) Setup a Helmholtz problem. The brick has one
-        parameter, 'wave_number'.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('isotropic linearized elasticity', MeshIm mim,
-        MeshFem mfu) Setup a linear elasticity problem. The brick has two
-        scalar parameter, 'lambda' and 'mu' (the Lame coefficients).</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('linear incompressibility term', MdBrick pb,
-        MeshFem mfp[, int nfem]) Add an incompressibily constraint (div u =
-        0).</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('nonlinear elasticity', MeshIm mim, MeshFem mfu,
-        string law) Setup a nonlinear elasticity (large deformations)
-        problem.</para>
-
-        <para>The material <literal>law</literal> can be chosen among:</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>'SaintVenant Kirchhoff'<par> Linearized material
-            law.</para>
-          </listitem>
-
-          <listitem>
-            <para>'Mooney Rivlin' To be used with the nonlinear
-            incompressibily term.</para>
-          </listitem>
-
-          <listitem>
-            <para>'Ciarlet Geymonat'</para>
-          </listitem>
-        </itemizedlist>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('nonlinear elasticity incompressibility term',
-        MdBrick pb, MeshFem mfp[, int nfem]) Add an incompressibily constraint
-        to a large strain elasticity problem.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('small deformations plasticity', MeshIm mim,
-        MeshFem mfu, scalar THRESHOLD) Setup a plasticity problem (with small
-        deformations). The <literal>THRESHOLD</literal> parameter is the
-        maximum value of the Von Mises stress before 'plastification' of the
-        material.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('dynamic', MdBrick pb, scalar rho[, int numfem])
-        Dynamic brick. This brick is not ready.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('bilaplacian', MeshIm mim, MeshFem mfu[,
-        'Kirchhoff-Love']) Setup a bilaplacian problem. If the
-        'Kirchhoff-Love' option is specified, the Kirchhoff-Love plate model
-        is used.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('navier stokes', MeshIm mim, MeshFem mfu, MeshFem
-        mfp) Setup a Navier-Stokes problem (this brick is not ready, do not
-        use it).</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('isotropic_linearized_plate', MeshIm mim, MeshIm
-        mims, MeshFem mfut, MeshFem mfu3, MeshFem mftheta, scalar eps) Setup a
-        linear plate model brick. For moderately thick plates, using the
-        Reissner-Mindlin model. <literal>eps</literal> is the plate thinkness,
-        the MeshFem <literal>mfut</literal> and <literal>mfu3</literal> are
-        used respectively for the membrane displacement and the transverse
-        displacement of the plate. The MeshFem <literal>mftheta</literal> is
-        the rotation of the normal ("section rotations"). The second
-        integration method <literal>mims</literal> can be chosen equal to
-        <literal>mim</literal>, or different if you want to perform
-        sub-integration on the transverse shear term (mitc4 projection). This
-        brick has two parameters "lambda" and "mu" (the Lame
-        coefficients)</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('mixed_isotropic_linearized_plate', MeshIm mim,
-        MeshFem mfut, MeshFem mfu3, MeshFem mftheta, scalar eps) Setup a mixed
-        linear plate model brick. For thin plates, using Kirchhoff-Love model.
-        For a non-mixed version, use the bilaplacian brick.</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('plate_source_term', MdBrick pb[, int bnum=-1[,
-        int nfem]]) Add a boundary or a volumic source term to a plate
-        problem. This brick has two parameters: "B" is the displacement (ut
-        and u3) source term, "M" is the moment source term (i.e. the source
-        term on the rotation of the normal).</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('plate_simple_support', MdBrick pb, int bnum,
-        string CTYPE[, int nfem]) Add a "simple support" boundary condition to
-        a plate problem. Homogeneous Dirichlet condition on the displacement,
-        free rotation. <literal>CTYPE</literal> specifies how the constraint
-        is enforced ('penalized', 'augmented' or 'eliminated').</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('plate_clamped_support', MdBrick pb, int bnum,
-        string CTYPE[, int nfem]) Add a "clamped support" boundary condition
-        to a plate problem. Homogeneous Dirichlet condition on the
-        displacement and on the rotation. <literal>CTYPE</literal> specifies
-        how the constraint is enforced ('penalized', 'augmented' or
-        'eliminated').</para>
-      </listitem>
-
-      <listitem>
-        <para>B = gf_mdbrick('plate_closing', MdBrick pb[, int nfem]) Add a
-        free edges condition for the mixed plate model brick. This brick is
-        required when the mixed linearized plate brick is used. It must be
-        inserted after all other boundary conditions (the reason is that the
-        brick has to inspect all other boundary conditions to determine the
-        number of disconnected boundary parts which are free edges).</para>
-      </listitem>
+    <listitem>
+    <para><literal>B = gf_mdbrick('constraint', mdbrick pb, string CTYPE[, int nfem])</literal></para>
+
+    <para>       Build a generic constraint brick.
+
+    It may be useful in some situations, such as the Stokes problem
+    where the pressure is defined modulo a constant. In such a
+    situation, this brick can be used to add an additional constraint
+    on the pressure value.
+    <literal>CTYPE</literal> has to be chosen among 'augmented', 'penalized', and
+    'eliminated'. The constraint can be specified with
+    gf_mdbrick_set(mdbrick MDB, 'constraints'). Note that Dirichlet bricks (except
+    the 'generalized Dirichlet' one) are also specializations of
+    the 'constraint' brick.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('dirichlet', mdbrick pb, int bnum, mesh_fem mf_m, string CTYPE[, int nfem])</literal></para>
+
+    <para>       Build a Dirichlet condition brick which impose the value of a field along a mesh boundary.
+
+    The <literal>bnum</literal> parameter selects on which mesh region the Dirichlet
+    condition is imposed. <literal>CTYPE</literal> has to be chosen among 'augmented',
+    'penalized', and 'eliminated'. The <literal>mf_m</literal> may generally be taken
+    as the mesh_fem of the unknown, but for 'augmented' Dirichlet
+    conditions, you may have to respect the Inf-Sup condition and
+    choose an adequate mesh_fem.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('dirichlet on normal component', mdbrick pb, int bnum, mesh_fem mf_m, string CTYPE[, int nfem])</literal></para>
+
+    <para>       Build a Dirichlet condition brick which imposes the value of the normal component of a vector field.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('dirichlet on normal derivative', mdbrick pb, int bnum, mesh_fem mf_m, string CTYPE[, int nfem])</literal></para>
+
+    <para>       Build a Dirichlet condition brick which imposes the value of the normal derivative of the unknown.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('generalized dirichlet', mdbrick pb, int bnum[, int nfem])</literal></para>
+
+    <para>       This is the "old" Dirichlet brick of getfem.
+
+    This brick can be used to impose general Dirichlet conditions
+    <literal>h(x)u(x) = r(x)</literal>, however it may have some issues with elaborated
+    fem's (such as Argyris, etc). It should be avoided when possible.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('source term', mdbrick pb[, int bnum=-1[, int nfem]])</literal></para>
+
+    <para>       Add a boundary or volumic source term ( \int B.v ).
+
+    If <literal>bnum</literal> is omitted (or set to -1) , the brick adds a volumic
+    source term on the whole mesh. For <literal>bnum</literal> >= 0, the source term is
+    imposed on the mesh region <literal>bnum</literal>. Use gf_mdbrick_set(mdbrick MDB, 'param','source
+    term',mf,B) to set the source term field. The source term is
+    expected as a vector field of size Q (with Q = qdim).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('normal source term', mdbrick pb, int bnum[, int nfem])</literal></para>
+
+    <para>       Add a boundary source term ( \int (Bn).v ).
+
+    The source term is imposed on the mesh region <literal>bnum</literal> (which of course
+    is not allowed to be a volumic region, only boundary regions are
+    allowed). Use gf_mdbrick_set(mdbrick MDB, 'param','source term',mf,B) to set the
+    source term field. The source term B is expected as tensor field
+    of size QxN (with Q = qdim, N = mesh dim). For example, if you
+    consider an elasticity problem, this brick may be used to impose
+    a force on the boundary with B as the stress tensor.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('normal derivative source term', mdbrick parent, int bnum[, int nfem])</literal></para>
+
+    <para>       Add a boundary source term ( \int (\partial_n B).v ).
+
+    The source term is imposed on the mesh region <literal>bnum</literal>. Use
+    gf_mdbrick_set(mdbrick MDB, 'param','source term',mf,B) to set the source term
+    field, which is expected as a vector field of size Q (with Q =
+    qdim).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('neumann KirchhoffLove source term', mdbrick pb, int bnum[, int nfem])</literal></para>
+
+    <para>       Add a boundary source term for neumann Kirchhoff-Love plate problems.
+
+    Should be used with the Kirchhoff-Love flavour of the bilaplacian
+    brick.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('qu term', mdbrick pb[, int bnum[, int nfem]])</literal></para>
+
+    <para>       Update the tangent matrix with a \int (Qu).v term.
+
+    The Q(x) parameter is a matrix field of size qdim x qdim. An example
+    of use is for the "iku" part of Robin boundary conditions
+    \partial_n u + iku = ...
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('mass matrix', mesh_im mim, mesh_fem mf_u[, 'real'|'complex'])</literal></para>
+
+    <para>       Build a mass-matrix brick.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('generic elliptic', mesh_im mim, mesh_fem mfu[, 'scalar'|'matrix'|'tensor'][, 'real'|'complex'])</literal></para>
+
+    <para>       Setup a generic elliptic problem.
+
+    a(x)*grad(U).grad(V)
+
+    The brick parameter <literal>a</literal> may be a scalar field, a matrix field, or
+    a tensor field (default is scalar).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('helmholtz', mesh_im mim, mesh_fem mfu[, 'real'|'complex'])</literal></para>
+
+    <para>       Setup a Helmholtz problem.
+
+    The brick has one parameter, 'wave_number'.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('isotropic linearized elasticity', mesh_im mim, mesh_fem mfu)</literal></para>
+
+    <para>       Setup a linear elasticity problem.
+
+    The brick has two scalar parameter, 'lambda' and 'mu' (the Lame
+    coefficients).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('linear incompressibility term', mdbrick pb, mesh_fem mfp[, int nfem])</literal></para>
+
+    <para>       Add an incompressibily constraint (div u = 0).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('nonlinear elasticity', mesh_im mim, mesh_fem mfu, string law)</literal></para>
+
+    <para>       Setup a nonlinear elasticity (large deformations) problem.
+
+    The material <literal>law</literal> can be chosen among:
+
+    - 'SaintVenant Kirchhoff' :
+      Linearized material law.
+    - 'Mooney Rivlin' :
+      To be used with the nonlinear incompressibily term.
+    - 'Ciarlet Geymonat'
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('nonlinear elasticity incompressibility term', mdbrick pb, mesh_fem mfp[, int nfem])</literal></para>
+
+    <para>       Add an incompressibily constraint to a large strain elasticity problem.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('small deformations plasticity', mesh_im mim, mesh_fem mfu, scalar THRESHOLD)</literal></para>
+
+    <para>       Setup a plasticity problem (with small deformations).
+
+    The <literal>THRESHOLD</literal> parameter is the maximum value of the Von Mises
+    stress before 'plastification' of the material.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('dynamic', mdbrick pb, scalar rho[, int numfem])</literal></para>
+
+    <para>       Dynamic brick. This brick is not fully working.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('bilaplacian', mesh_im mim, mesh_fem mfu[, 'Kirchhoff-Love'])</literal></para>
+
+    <para>       Setup a bilaplacian problem.
+
+    If the 'Kirchhoff-Love' option is specified, the Kirchhoff-Love
+    plate model is used.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('navier stokes', mesh_im mim, mesh_fem mfu, mesh_fem mfp)</literal></para>
+
+    <para>       Setup a Navier-Stokes problem (this brick is not ready, do not use it).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('isotropic_linearized_plate', mesh_im mim, mesh_im mims, mesh_fem mfut, mesh_fem mfu3, mesh_fem mftheta, scalar eps)</literal></para>
+
+    <para>       Setup a linear plate model brick.
+
+    For moderately thick plates, using the Reissner-Mindlin model.
+    <literal>eps</literal> is the plate thinkness, the mesh_fem <literal>mfut</literal> and <literal>mfu3</literal> are used
+    respectively for the membrane displacement and the transverse
+    displacement of the plate. The mesh_fem <literal>mftheta</literal> is the rotation of
+    the normal ("section rotations").
+
+    The second integration method <literal>mims</literal> can be chosen equal to
+    <literal>mim</literal>, or different if you want to perform sub-integration on
+    the transverse shear term (mitc4 projection).
+
+    This brick has two parameters "lambda" and "mu" (the Lame
+    coefficients)
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('mixed_isotropic_linearized_plate', mesh_im mim, mesh_fem mfut, mesh_fem mfu3, mesh_fem mftheta, scalar eps)</literal></para>
+
+    <para>       Setup a mixed linear plate model brick.
+
+    For thin plates, using Kirchhoff-Love model. For a non-mixed version,
+    use the bilaplacian brick.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('plate_source_term', mdbrick pb[, int bnum=-1[, int nfem]])</literal></para>
+
+    <para>       Add a boundary or a volumic source term to a plate problem.
+
+    This brick has two parameters: "B" is the displacement (ut and u3)
+    source term, "M" is the moment source term (i.e. the source term
+    on the rotation of the normal).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('plate_simple_support', mdbrick pb, int bnum, string CTYPE[, int nfem])</literal></para>
+
+    <para>       Add a "simple support" boundary condition to a plate problem.
+
+    Homogeneous Dirichlet condition on the displacement, free rotation.
+    <literal>CTYPE</literal> specifies how the constraint is enforced ('penalized',
+    'augmented' or 'eliminated').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('plate_clamped_support', mdbrick pb, int bnum, string CTYPE[, int nfem])</literal></para>
+
+    <para>       Add a "clamped support" boundary condition to a plate problem.
+
+    Homogeneous Dirichlet condition on the displacement and on the
+    rotation. <literal>CTYPE</literal> specifies how the constraint is enforced
+    ('penalized', 'augmented' or 'eliminated').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>B = gf_mdbrick('plate_closing', mdbrick pb[, int nfem])</literal></para>
+
+    <para>       Add a free edges condition for the mixed plate model brick.
+
+    This brick is required when the mixed linearized plate brick is
+    used. It must be inserted after all other boundary conditions
+    (the reason is that the brick has to inspect all other boundary
+    conditions to determine the number of disconnected boundary parts
+    which are free edges). 
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mdbrick_set">gf_mdbrick_set</link></member>
-      <member><link linkend="gf_mdbrick_get">gf_mdbrick_get</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mdbrick_get.xml b/interface/src/scilab/help/en_US/gf_mdbrick_get.xml
index 5a3b2c7..42a386f 100644
--- a/interface/src/scilab/help/en_US/gf_mdbrick_get.xml
+++ b/interface/src/scilab/help/en_US/gf_mdbrick_get.xml
@@ -9,170 +9,225 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mdbrick_get</refname>
-
-    <refpurpose>Get information from a brick, or launch the
-    solver.</refpurpose>
+    <refpurpose>  Get information from a brick, or launch the solver.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-int n = gf_mdbrick_get(b,'nbdof')
-int n = gf_mdbrick_get(b, 'dim')
-int gf_mdbrick_get(b, 'is_linear')
-int gf_mdbrick_get(b, 'is_symmetric')
-int gf_mdbrick_get(b, 'is_coercive')
-int gf_mdbrick_get(b, 'is_complex')
-ivec I=gf_mdbrick_get(b, 'mixed_variables')
-string gf_mdbrick_get(b, 'subclass')
-LST=gf_mdbrick_get(b, 'param_list')
-vec gf_mdbrick_get(b,'param', string parameter_name)
-gf_mdbrick_get(b,'solve', mdstate mds [,...])
-vec VM=gf_mdbrick_get(b, 'von_mises', mdstate mds, mesh_fem MFVM)
-vec VM=gf_mdbrick_get(b, 'tresca', mdstate mds, mesh_fem MFVM)
-    </synopsis>
+    <synopsis>n = gf_mdbrick_get(mdbrick MDB, 'nbdof')</synopsis>
+    <synopsis>d = gf_mdbrick_get(mdbrick MDB, 'dim')</synopsis>
+    <synopsis>n = gf_mdbrick_get(mdbrick MDB, 'nb_constraints')</synopsis>
+    <synopsis>b = gf_mdbrick_get(mdbrick MDB, 'is_linear')</synopsis>
+    <synopsis>b = gf_mdbrick_get(mdbrick MDB, 'is_symmetric')</synopsis>
+    <synopsis>b = gf_mdbrick_get(mdbrick MDB, 'is_coercive')</synopsis>
+    <synopsis>b = gf_mdbrick_get(mdbrick MDB, 'is_complex')</synopsis>
+    <synopsis>I = gf_mdbrick_get(mdbrick MDB, 'mixed_variables')</synopsis>
+    <synopsis>gf_mdbrick_get(mdbrick MDB, 'subclass')</synopsis>
+    <synopsis>gf_mdbrick_get(mdbrick MDB, 'param_list')</synopsis>
+    <synopsis>gf_mdbrick_get(mdbrick MDB, 'param', string parameter_name)</synopsis>
+    <synopsis>gf_mdbrick_get(mdbrick MDB, 'solve',mdstate mds[,...])</synopsis>
+    <synopsis>VM = gf_mdbrick_get(mdbrick MDB, 'von mises', mdstate mds, mesh_fem mfvm)</synopsis>
+    <synopsis>T = gf_mdbrick_get(mdbrick MDB, 'tresca', mdstate mds, mesh_fem mft)</synopsis>
+    <synopsis>z = gf_mdbrick_get(mdbrick MDB, 'memsize')</synopsis>
+    <synopsis>s = gf_mdbrick_get(mdbrick MDB, 'char')</synopsis>
+    <synopsis>gf_mdbrick_get(mdbrick MDB, 'display')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  Get information from a brick, or launch the solver.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>n = gf_mdbrick_get(b,'nbdof') : Get the total number of dof of the
-        current problem. This is the sum of the brick specific dof plus the
-        dof of the parent bricks.</para>
-      </listitem>
-
-      <listitem>
-        <para>d = gf_mdbrick_get(b,'dim') : Get the dimension of the main mesh
-        (2 for a 2D mesh, etc).</para>
-      </listitem>
-
-      <listitem>
-        <para>n = gf_mdbrick_get(b,'nb_constraints') : Get the total number of
-        dof constraints of the current problem. This is the sum of the brick
-        specific dof constraints plus the dof constraints of the parent
-        bricks.</para>
-      </listitem>
-
-      <listitem>
-        <para>b = gf_mdbrick_get(b,'is_linear') : Return true if the problem is
-        linear.</para>
-      </listitem>
-
-      <listitem>
-        <para>b = gf_mdbrick_get(b,'is_symmetric') : Return true if the problem
-        is symmetric.</para>
-      </listitem>
-
-      <listitem>
-        <para>b = gf_mdbrick_get(b,'is_coercive') : Return true if the problem
-        is coercive.</para>
-      </listitem>
-
-      <listitem>
-        <para>b = gf_mdbrick_get(b,'is_complex') : Return true if the problem
-        uses complex numbers.</para>
-      </listitem>
-
-      <listitem>
-        <para>I = gf_mdbrick_get(b,'mixed_variables') : Identify the indices of
-        mixed variables (typically the pressure, etc.) in the tangent
-        matrix.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdbrick_get(b,'subclass') : Get the typename of the
-        brick.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdbrick_get(b,'param_list') : Get the list of parameters names.
-        Each brick embeds a number of parameters (the Lame coefficients for
-        the linearized elasticity brick, the wave number for the Helmholtz
-        brick,...), described as a (scalar, or vector, tensor etc) field on a
-        mesh_fem. You can read/change the parameter values with
-        gf_mdbrick_get(b,'param') and gf_mdbrick_set(b,'param').</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdbrick_get(b,'param',string parameter_name) : Get the
-        parameter value. When the parameter has been assigned a specific
-        MeshFem, it is returned as a large array (the last dimension being the
-        MeshFem dof). When no MeshFem has been assigned, the parameter is
-        considered to be constant over the mesh.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdbrick_get(b,'solve',MdState mds[,...]) : Run the standard
-        getfem solver. Note that you should be able to use your own solver if
-        you want (it is possible to obtain the tangent matrix and its right
-        hand side with the gf_mdstate_get(mds,'tangent matrix') etc.).</para>
-
-        <para>Various options can be specified:</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>'noisy' or 'very noisy' the solver will display some
-            information showing the progress (residual values etc.).</para>
-          </listitem>
-
-          <listitem>
-            <para>'max_iter', <literal>NIT</literal> set the maximum
-            iterations numbers.</para>
-          </listitem>
-
-          <listitem>
-            <para>'max_res', <literal>RES</literal> set the target residual
-            value.</para>
-          </listitem>
-
-          <listitem>
-            <para>'lsolver', <literal>SOLVERNAME</literal> select explicitely
-            the solver used for the linear systems (the default value is
-            'auto', which lets getfem choose itself). Possible values are
-            'superlu', 'mumps' (if supported), 'cg/ildlt', 'gmres/ilu' and
-            'gmres/ilut'.</para>
-          </listitem>
-        </itemizedlist>
-      </listitem>
-
-      <listitem>
-        <para>VM = gf_mdbrick_get(b,'von mises',MdState mds, MeshFem mfvm) :
-        Compute the Von Mises stress on the MeshFem <literal>mfvm</literal>.
-        Only available on bricks where it has a meaning: linearized
-        elasticity, plasticity, nonlinear elasticity. Note that in 2D it is
-        not the "real" Von Mises (which should take into account the 'plane
-        stress' or 'plane strain' aspect), but a pure 2D Von Mises. </para>
-      </listitem>
-
-      <listitem>
-        <para>T = gf_mdbrick_get(b,'tresca',MdState mds, MeshFem mft) : Compute
-        the Tresca stress criterion on the MeshFem <literal>mft</literal>.
-        Only available on bricks where it has a meaning: linearized
-        elasticity, plasticity, nonlinear elasticity.</para>
-      </listitem>
-
-      <listitem>
-        <para>z = gf_mdbrick_get(b,'memsize') : Return the amount of memory (in
-        bytes) used by the model brick.</para>
-      </listitem>
+    <listitem>
+    <para><literal>n = gf_mdbrick_get(mdbrick MDB, 'nbdof')</literal></para>
+
+    <para>       Get the total number of dof of the current problem.
+
+    This is the sum of the brick specific dof plus the dof of the
+    parent bricks.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>d = gf_mdbrick_get(mdbrick MDB, 'dim')</literal></para>
+
+    <para>       Get the dimension of the main mesh (2 for a 2D mesh, etc).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>n = gf_mdbrick_get(mdbrick MDB, 'nb_constraints')</literal></para>
+
+    <para>       Get the total number of dof constraints of the current problem.
+
+    This is the sum of the brick specific dof constraints plus the
+    dof constraints of the parent bricks.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>b = gf_mdbrick_get(mdbrick MDB, 'is_linear')</literal></para>
+
+    <para>       Return true if the problem is linear.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>b = gf_mdbrick_get(mdbrick MDB, 'is_symmetric')</literal></para>
+
+    <para>       Return true if the problem is symmetric.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>b = gf_mdbrick_get(mdbrick MDB, 'is_coercive')</literal></para>
+
+    <para>       Return true if the problem is coercive.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>b = gf_mdbrick_get(mdbrick MDB, 'is_complex')</literal></para>
+
+    <para>       Return true if the problem uses complex numbers.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>I = gf_mdbrick_get(mdbrick MDB, 'mixed_variables')</literal></para>
+
+    <para>       Identify the indices of mixed variables (typically the pressure,
+    etc.) in the tangent matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdbrick_get(mdbrick MDB, 'subclass')</literal></para>
+
+    <para>       Get the typename of the brick.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdbrick_get(mdbrick MDB, 'param_list')</literal></para>
+
+    <para>       Get the list of parameters names.
+
+    Each brick embeds a number of parameters (the Lame coefficients
+    for the linearized elasticity brick, the wave number for the
+    Helmholtz brick,...), described as a (scalar, or vector, tensor
+    etc) field on a mesh_fem. You can read/change the parameter values
+    with gf_mdbrick_get(mdbrick MDB, 'param') and gf_mdbrick_set(mdbrick MDB, 'param').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdbrick_get(mdbrick MDB, 'param', string parameter_name)</literal></para>
+
+    <para>       Get the parameter value.
+
+    When the parameter has been assigned a specific mesh_fem, it is returned
+    as a large array (the last dimension being the mesh_fem dof). When no
+    mesh_fem has been assigned, the parameter is considered to be constant
+    over the mesh.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdbrick_get(mdbrick MDB, 'solve',mdstate mds[,...])</literal></para>
+
+    <para>       Run the standard getfem solver.
+
+    Note that you should be able to use your own solver if you want
+    (it is possible to obtain the tangent matrix and its right hand
+    side with the gf_mdstate_get(mdstate MDS, 'tangent matrix') etc.).
+
+    Various options can be specified:
+
+    - 'noisy' or 'very noisy'
+       the solver will display some information showing the progress
+       (residual values etc.).
+    - 'max_iter', NIT
+       set the maximum iterations numbers.
+    - 'max_res', RES
+       set the target residual value.
+    - 'lsolver', SOLVERNAME
+       select explicitely the solver used for the linear systems (the
+       default value is 'auto', which lets getfem choose itself).
+       Possible values are 'superlu', 'mumps' (if supported),
+       'cg/ildlt', 'gmres/ilu' and 'gmres/ilut'.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>VM = gf_mdbrick_get(mdbrick MDB, 'von mises', mdstate mds, mesh_fem mfvm)</literal></para>
+
+    <para>       Compute the Von Mises stress on the mesh_fem <literal>mfvm</literal>.
+
+    Only available on bricks where it has a meaning: linearized
+    elasticity, plasticity, nonlinear elasticity. Note that in 2D
+    it is not the "real" Von Mises (which should take into account
+    the 'plane stress' or 'plane strain' aspect), but a pure 2D Von
+    Mises.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>T = gf_mdbrick_get(mdbrick MDB, 'tresca', mdstate mds, mesh_fem mft)</literal></para>
+
+    <para>       Compute the Tresca stress criterion on the mesh_fem <literal>mft</literal>.
+
+    Only available on bricks where it has a meaning: linearized
+    elasticity, plasticity, nonlinear elasticity.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>z = gf_mdbrick_get(mdbrick MDB, 'memsize')</literal></para>
+
+    <para>       Return the amount of memory (in bytes) used by the model brick.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>s = gf_mdbrick_get(mdbrick MDB, 'char')</literal></para>
+
+    <para>         Output a (unique) string representation of the mdbrick.
+
+      This can be used to perform comparisons between two
+      different mdbrick objects.
+      This function is to be completed.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdbrick_get(mdbrick MDB, 'display')</literal></para>
+
+    <para>         displays a short summary for a mdbrick.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mdbrick_get">gf_mdbrick_set</link></member>
-      <member><link linkend="gf_mdbrick">gf_mdbrick</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mdbrick_set.xml b/interface/src/scilab/help/en_US/gf_mdbrick_set.xml
index f02ad64..aa2c625 100644
--- a/interface/src/scilab/help/en_US/gf_mdbrick_set.xml
+++ b/interface/src/scilab/help/en_US/gf_mdbrick_set.xml
@@ -9,73 +9,88 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mdbrick_set</refname>
-
-    <refpurpose>Modify a model brick object.</refpurpose>
+    <refpurpose>  Modify a model brick object.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-gf_mdbrick_set(b,'param', string name, mesh_fem MF,V | V)
-gf_mdbrick_set(b,'constraints', spmat H, vec R)
-gf_mdbrick_set(b,'constraints_rhs', spmat H, vec R)
-gf_mdbrick_set(b,'penalization_coef', scalar eps)
-    </synopsis>
+    <synopsis>gf_mdbrick_set(mdbrick MDB, 'param', string name, {mesh_fem mf,V | V})</synopsis>
+    <synopsis>gf_mdbrick_set(mdbrick MDB, 'penalization_epsilon', scalar eps)</synopsis>
+    <synopsis>gf_mdbrick_set(mdbrick MDB, 'constraints', mat H, vec R)</synopsis>
+    <synopsis>gf_mdbrick_set(mdbrick MDB, 'constraints_rhs', mat H, vec R)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  Modify a model brick object.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_mdbrick_set(b,'param',string name,list(MeshFem mf,V | V)) :
-        Change the value of a brick parameter. <literal>name</literal> is the
-        name of the parameter. <literal>V</literal> should contain the new
-        parameter value (vector or float). If a MeshFem is given,
-        <literal>V</literal> should hold the field values over that MeshFem
-        (i.e. its last dimension should be gf_meshfem_get(mf,'nbdof') or 1 for
-        constant field).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdbrick_set(b,'penalization_epsilon',scalar eps) : Change the
-        penalization coefficient of a constraint brick. This is only
-        applicable to the bricks which inherit from the constraint brick, such
-        as the Dirichlet ones. And of course it is not effective when the
-        constraint is enforced via direct elimination or via Lagrange
-        multipliers. The default value of <literal>eps</literal> is
-        1e-9.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdbrick_set(b,'constraints',mat H, vec R) : Set the constraints
-        imposed by a constraint brick. This is only applicable to the bricks
-        which inherit from the constraint brick, such as the Dirichlet ones.
-        Imposes <emphasis>H.U=R</emphasis>.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdbrick_set(b,'constraints_rhs',mat H, vec R) : Set the right
-        hand side of the constraints imposed by a constraint brick. This is
-        only applicable to the bricks which inherit from the constraint brick,
-        such as the Dirichlet ones.</para>
-      </listitem>
+    <listitem>
+    <para><literal>gf_mdbrick_set(mdbrick MDB, 'param', string name, {mesh_fem mf,V | V})</literal></para>
+
+    <para>       Change the value of a brick parameter.
+
+    <literal>name</literal> is the name of the parameter. <literal>V</literal> should contain the
+    new parameter value (vector or float). If a mesh_fem is given,
+    <literal>V</literal> should hold the field values over that mesh_fem (i.e. its
+    last dimension should be gf_mesh_fem_get(mesh_fem MF, 'nbdof') or 1 for
+    constant field).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdbrick_set(mdbrick MDB, 'penalization_epsilon', scalar eps)</literal></para>
+
+    <para>       Change the penalization coefficient of a constraint brick.
+
+    This is only applicable to the bricks which inherit from the
+    constraint brick, such as the Dirichlet ones. And of course it
+    is not effective when the constraint is enforced via direct
+    elimination or via Lagrange multipliers. The default value of
+    <literal>eps</literal> is 1e-9.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdbrick_set(mdbrick MDB, 'constraints', mat H, vec R)</literal></para>
+
+    <para>       Set the constraints imposed by a constraint brick.
+
+    This is only applicable to the bricks which inherit from the
+    constraint brick, such as the Dirichlet ones. Imposes <literal>H.U=R</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdbrick_set(mdbrick MDB, 'constraints_rhs', mat H, vec R)</literal></para>
+
+    <para>       Set the right hand side of the constraints imposed by a constraint brick.
+
+    This is only applicable to the bricks which inherit from the
+    constraint brick, such as the Dirichlet ones.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mdbrick_get">gf_mdbrick_get</link></member>
-      <member><link linkend="gf_mdbrick">gf_mdbrick</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mdstate.xml b/interface/src/scilab/help/en_US/gf_mdstate.xml
index 5a8c29a..234f249 100644
--- a/interface/src/scilab/help/en_US/gf_mdstate.xml
+++ b/interface/src/scilab/help/en_US/gf_mdstate.xml
@@ -9,56 +9,80 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mdstate</refname>
+    <refpurpose>  A model state is an object which store the state data for a chain of model
+  bricks. This includes the global tangent matrix, the right hand side and
+  the constraints.
 
-    <refpurpose>General constructor for mdstate objects. Return a getfem
-    handle to the newly created object.</refpurpose>
+  This object is now deprecated and replaced by the model object.
+
+  There are two sorts of model states, the <literal>real</literal> and the <literal>complex</literal> models
+  states.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>M = gf_mdstate('complex' | 'real')</synopsis>
+    <synopsis>MDS = gf_mdstate('real')</synopsis>
+    <synopsis>MDS = gf_mdstate('complex')</synopsis>
+    <synopsis>MDS = gf_mdstate(mdbrick B)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for mdstate objects.</para>
+
+    <para>  A model state is an object which store the state data for a chain of model
+  bricks. This includes the global tangent matrix, the right hand side and
+  the constraints.
+
+  This object is now deprecated and replaced by the model object.
+
+  There are two sorts of model states, the <literal>real</literal> and the <literal>complex</literal> models
+  states.
+</para>
+  </refsection>
 
-    <para> "Model State" variables store the state data for a set of model
-    bricks. This includes the global tangent matrix, the right hand side and
-    the constraints. There are two sorts of model states, the "real" and the
-    "complex" models states.</para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>MDS = gf_mdstate('real') Build a model state for real
-        unknowns.</para>
-      </listitem>
-
-      <listitem>
-        <para>MDS = gf_mdstate('complex') Build a model state for complex
-        unknowns.</para>
-      </listitem>
-
-      <listitem>
-        <para>MDS = gf_mdstate('.mdbrick',MdBrick B) Build a modelstate for
-        the brick <literal>B</literal>. Selects the real or complex state from
-        the complexity of <literal>B</literal>.</para>
-      </listitem>
+    <listitem>
+    <para><literal>MDS = gf_mdstate('real')</literal></para>
+
+    <para>           Build a model state for real unknowns.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MDS = gf_mdstate('complex')</literal></para>
+
+    <para>           Build a model state for complex unknowns.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MDS = gf_mdstate(mdbrick B)</literal></para>
+
+    <para>         Build a modelstate for the brick <literal>B</literal>.
+
+      Selects the real or complex state from the complexity of <literal>B</literal>.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mdstate_get">gf_mdstate_get</link></member>
-      <member><link linkend="gf_mdstate_set">gf_mdstate_set</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mdstate_get.xml b/interface/src/scilab/help/en_US/gf_mdstate_get.xml
index a016143..5462e59 100644
--- a/interface/src/scilab/help/en_US/gf_mdstate_get.xml
+++ b/interface/src/scilab/help/en_US/gf_mdstate_get.xml
@@ -9,95 +9,140 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mdstate_get</refname>
-
-    <refpurpose>Get information from a model state object.</refpurpose>
+    <refpurpose>  Get information from a model state object.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-gf_mdstate_get(mds,'is_complex')
-gf_mdstate_get(mds,'tangent_matrix')
-gf_mdstate_get(mds,'constraints_matrix')
-gf_mdstate_get(mds,'reduced_tangent_matrix')
-gf_mdstate_get(mds,'constraints_nullspace')
-gf_mdstate_get(mds,'state')
-gf_mdstate_get(mds,'residual')
-gf_mdstate_get(mds,'reduced_residual')
-gf_mdstate_get(mds,'unreduce', vec U)
-gf_mdstate_get(mds,'memsize')
-    </synopsis>
+    <synopsis>b = gf_mdstate_get(mdstate MDS, 'is_complex')</synopsis>
+    <synopsis>T = gf_mdstate_get(mdstate MDS, 'tangent_matrix')</synopsis>
+    <synopsis>C = gf_mdstate_get(mdstate MDS, 'constraints_matrix')</synopsis>
+    <synopsis>A = gf_mdstate_get(mdstate MDS, 'reduced_tangent_matrix')</synopsis>
+    <synopsis>gf_mdstate_get(mdstate MDS, 'constraints_nullspace')</synopsis>
+    <synopsis>gf_mdstate_get(mdstate MDS, 'state')</synopsis>
+    <synopsis>gf_mdstate_get(mdstate MDS, 'residual')</synopsis>
+    <synopsis>gf_mdstate_get(mdstate MDS, 'reduced_residual')</synopsis>
+    <synopsis>gf_mdstate_get(mdstate MDS, 'unreduce', vec U)</synopsis>
+    <synopsis>z = gf_mdstate_get(mdstate MDS, 'memsize')</synopsis>
+    <synopsis>s = gf_mdstate_get(mdstate MDS, 'char')</synopsis>
+    <synopsis>gf_mdstate_get(mdstate MDS, 'display')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  Get information from a model state object.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>b = gf_mdstate_get(mds,'is_complex') : Return 0 is the model state
-        is real, 1 if it is complex.</para>
-      </listitem>
-
-      <listitem>
-        <para>T = gf_mdstate_get(mds,tangent_matrix') : Return the tangent
-        matrix stored in the model state.</para>
-      </listitem>
-
-      <listitem>
-        <para>C = gf_mdstate_get(mds,'constraints_matrix') : Return the
-        constraints matrix stored in the model state.</para>
-      </listitem>
-
-      <listitem>
-        <para>A = gf_mdstate_get(mds,'reduced_tangent_matrix') : Return the
-        reduced tangent matrix (i.e. the tangent matrix after elimination of
-        the constraints).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdstate_get(mds,'constraints_nullspace') : Return the nullspace
-        of the constraints matrix.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdstate_get(mds,'state') : Return the vector of unknowns, which
-        contains the solution after gf_mdbrick_get(mdb,'solve').</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdstate_get(mds,'residual') : Return the residual.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdstate_get(mds,'reduced_residual') : Return the residual on
-        the reduced system.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdstate_get(mds,'unreduce',vec U) : Reinsert the constraint
-        eliminated from the system.</para>
-      </listitem>
-
-      <listitem>
-        <para>z = gf_mdstate_get(mds,'memsize') : Return the amount of memory
-        (in bytes) used by the model state.</para>
-      </listitem>
+    <listitem>
+    <para><literal>b = gf_mdstate_get(mdstate MDS, 'is_complex')</literal></para>
+
+    <para>       Return 0 is the model state is real, 1 if it is complex.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>T = gf_mdstate_get(mdstate MDS, 'tangent_matrix')</literal></para>
+
+    <para>       Return the tangent matrix stored in the model state.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>C = gf_mdstate_get(mdstate MDS, 'constraints_matrix')</literal></para>
+
+    <para>       Return the constraints matrix stored in the model state.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>A = gf_mdstate_get(mdstate MDS, 'reduced_tangent_matrix')</literal></para>
+
+    <para>       Return the reduced tangent matrix (i.e. the tangent matrix after
+    elimination of the constraints).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdstate_get(mdstate MDS, 'constraints_nullspace')</literal></para>
+
+    <para>       Return the nullspace of the constraints matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdstate_get(mdstate MDS, 'state')</literal></para>
+
+    <para>       Return the vector of unknowns, which contains the solution after gf_mdbrick_get(mdbrick MDB, 'solve').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdstate_get(mdstate MDS, 'residual')</literal></para>
+
+    <para>       Return the residual.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdstate_get(mdstate MDS, 'reduced_residual')</literal></para>
+
+    <para>       Return the residual on the reduced system.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdstate_get(mdstate MDS, 'unreduce', vec U)</literal></para>
+
+    <para>       Reinsert the constraint eliminated from the system.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>z = gf_mdstate_get(mdstate MDS, 'memsize')</literal></para>
+
+    <para>       Return the amount of memory (in bytes) used by the model state.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>s = gf_mdstate_get(mdstate MDS, 'char')</literal></para>
+
+    <para>         Output a (unique) string representation of the mdstate.
+
+      This can be used to perform comparisons between two
+      different mdstate objects.
+      This function is to be completed.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdstate_get(mdstate MDS, 'display')</literal></para>
+
+    <para>         displays a short summary for a mdstate.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mdstate_set">gf_mdstate_set</link></member>
-      <member><link linkend="gf_mdstate">gf_mdstate</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mdstate_set.xml b/interface/src/scilab/help/en_US/gf_mdstate_set.xml
index 8f30801..75ab81b 100644
--- a/interface/src/scilab/help/en_US/gf_mdstate_set.xml
+++ b/interface/src/scilab/help/en_US/gf_mdstate_set.xml
@@ -9,70 +9,86 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mdstate_set</refname>
-
-    <refpurpose>Modify a model state object.</refpurpose>
+    <refpurpose>  Modify a model state object.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-gf_mdstate_set(mds,'compute_reduced_system')
-gf_mdstate_set(mds,'compute_reduced_residual')
-gf_mdstate_set(mds,'compute_residual', mdbrick B)
-gf_mdstate_set(mds,'compute_tangent_matrix', mdbrick B)
-gf_mdstate_set(mds,'state', vec U)
-gf_mdstate_set(mds,'clear')
-    </synopsis>
+    <synopsis>gf_mdstate_set(mdstate MDS, 'compute_reduced_system')</synopsis>
+    <synopsis>gf_mdstate_set(mdstate MDS, 'compute_reduced_residual')</synopsis>
+    <synopsis>gf_mdstate_set(mdstate MDS, 'compute_residual', mdbrick B)</synopsis>
+    <synopsis>gf_mdstate_set(mdstate MDS, 'compute_tangent_matrix', mdbrick B)</synopsis>
+    <synopsis>gf_mdstate_set(mdstate MDS, 'state', vec U)</synopsis>
+    <synopsis>gf_mdstate_set(mdstate MDS, 'clear')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  Modify a model state object.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_mdstate_set(mds,'compute_reduced_system') Compute the reduced
-        system from the tangent matrix and constraints.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdstate_set(mds,'compute_reduced_residual') Compute the
-        reduced residual from the residual and constraints.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdstate_set(mds,'compute_residual',MdBrick B) Compute the
-        residual for the brick <literal>B</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdstate_set(mds,'compute_tangent_matrix',MdBrick B) Update
-        the tangent matrix from the brick <literal>B</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdstate_set(mds,'state',vec U) Update the internal state with
-        the vector <literal>U</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mdstate_set(mds,'clear') Clear the model state.</para>
-      </listitem>
+    <listitem>
+    <para><literal>gf_mdstate_set(mdstate MDS, 'compute_reduced_system')</literal></para>
+
+    <para>       Compute the reduced system from the tangent matrix and constraints.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdstate_set(mdstate MDS, 'compute_reduced_residual')</literal></para>
+
+    <para>       Compute the reduced residual from the residual and constraints.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdstate_set(mdstate MDS, 'compute_residual', mdbrick B)</literal></para>
+
+    <para>       Compute the residual for the brick <literal>B</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdstate_set(mdstate MDS, 'compute_tangent_matrix', mdbrick B)</literal></para>
+
+    <para>       Update the tangent matrix from the brick <literal>B</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdstate_set(mdstate MDS, 'state', vec U)</literal></para>
+
+    <para>       Update the internal state with the vector <literal>U</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mdstate_set(mdstate MDS, 'clear')</literal></para>
+
+    <para>       Clear the model state.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mdstate_get">gf_mdstate_get</link></member>
-      <member><link linkend="gf_mdstate">gf_mdstate</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh.xml b/interface/src/scilab/help/en_US/gf_mesh.xml
index 6a9d7fe..05023a7 100644
--- a/interface/src/scilab/help/en_US/gf_mesh.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh.xml
@@ -9,144 +9,211 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mesh</refname>
+    <refpurpose>  This object is able to store any element in any dimension even if you mix
+  elements with different dimensions.
 
-    <refpurpose>General constructor for mesh object.</refpurpose>
+  
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-M = gf_mesh('empty', int dim) 
-M = gf_mesh('cartesian', vec X[, vec Y[, vec Z,..]])
-M = gf_mesh('triangles grid', vec X, vec Y)
-M = gf_mesh('regular simplices', vec X[, vec Y[, vec Z,.., ]][, 'degree', int K]['noised'])
-M = gf_mesh('curved', const_mesh M0, vec F)
-M = gf_mesh('prismatic', const_mesh M0, int K)
-M = gf_mesh('pt2D', mat p, imat t[, int n])
-M = gf_mesh('ptND', mat p, imat t)
-M = gf_mesh('load', string filename)
-M = gf_mesh('from string', string s)
-M = gf_mesh('import', string format, string filename)
-M = gf_mesh('clone', const_mesh M0)
-    </synopsis>
+    <synopsis>M = gf_mesh('empty', int dim)</synopsis>
+    <synopsis>M = gf_mesh('cartesian', vec X[, vec Y[, vec Z,..]])</synopsis>
+    <synopsis>M = gf_mesh('cartesian Q1', vec X, vec Y[, vec Z,..])</synopsis>
+    <synopsis>M = gf_mesh('triangles grid', vec X, vec Y)</synopsis>
+    <synopsis>M = gf_mesh('regular simplices', vec X[, vec Y[, vec Z,...]]['degree', int k]['noised'])</synopsis>
+    <synopsis>M = gf_mesh('curved', mesh m, vec F)</synopsis>
+    <synopsis>M = gf_mesh('prismatic', mesh m, int nl)</synopsis>
+    <synopsis>M = gf_mesh('pt2D', mat P, imat T[, int n])</synopsis>
+    <synopsis>M = gf_mesh('ptND', mat P, imat T)</synopsis>
+    <synopsis>M = gf_mesh('load', string filename)</synopsis>
+    <synopsis>M = gf_mesh('from string', string s)</synopsis>
+    <synopsis>M = gf_mesh('import', string format, string filename)</synopsis>
+    <synopsis>M = gf_mesh('clone', mesh m2)</synopsis>
+    <synopsis>M = gf_mesh('generate', mesher_object mo, scalar h[, int K = 1[, mat vertices]])</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for mesh objects.</para>
 
-    <para>The function gf_mesh creates a new mesh object. The gf_mesh version returns a matlab structure, which can be manipulated with 
-      gf_mesh_get(M,...) and gf_mesh_set(M,...).</para>
-    <para>The first argument specifies the kind of operation which will create the mesh. The returned value, M, is an identifier (of type uint32)
-      to the new object.</para>
+    <para>  This object is able to store any element in any dimension even if you mix
+  elements with different dimensions.
 
-    <itemizedlist>
-      <listitem>
-	<para>gf_mesh('empty', dim) : return a new empty mesh, whose nodes have dim coordinates. 
-	  This mesh can be later populated with e.g. gf_mesh_set('add convex',...).</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh('cartesian', X[, Y,...]) : can be used to build quickly a cartesian mesh (with a linear geometric transformation, 
-	see gf_geotrans. The vectors X,Y,...contain the vertices coordinates along each axis. The regular numbering of points 
-	and convexes is guaranteed by this functions</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh('triangles grid', X, Y) : create a regular 2D mesh, similar to a cartesian grid where each rectangle is split in two triangles.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh('regular simplices', X, ...) : is a generalization to arbitrary dimensions of the triangles grid. 
-	  For example, gf_mesh('regular simplices',0:10, 0:10, 'degree', 2, 'noised') will build a mesh of quadratic triangles (of irregular shape).</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh('curved', M0, F) : build a curved (n+1)-dimensions mesh from a n-dimensions mesh M0: the new mesh has one additional dimension. 
-	  The additional coordinate is given by the vector F. This can be used to obtain meshes for shells.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh('prismatic', M0, K) : extrude a prismatic mesh M from a mesh M0. In the additional dimension there are K layers of elements 
-	stacked in the range [0..1].</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh('pt2D', p, t[, n]) : build quickly a planar mesh from a points array p and a triangulation t. This can be used to convert 
-	  a pdetool mesh exported in variables p and t into a getfem++ mesh M. n is optional and is a zone number. If n is specified only triangle
-	  belonging to the zone number n are created in the mesh. The points array p is assumed to be a 2×npoints matrix, and the triangles 
-	  array should be a 3×nbtri matrix, or a 4×nbtri if a zone number is used.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh('ptND', p, t[, n]) : this is a more general form of 'pt2d'. It builds a simplex mesh from a given triangulation. 
-	  The dimension of the mesh will be the number of rows of p, and the dimension of the simplexes will be the number of rows of t.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh('load', filename) : load a mesh from a getfem++ mesh file (which may have been created by gf_mesh_get(M,'save',filename). 
-	  gf_mesh('from string', s) is very similar, but the mesh is loaded from a string instead of a file. 
-	  The content of this string may be set by s=gf_mesh_get(M,'char').</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh('import', format, filename) import a mesh from a file. For the moment, only three formats are supported:</para>
-	<itemizedlist>
-	  <listitem>
-	    <para> mesh objects created with gmsh (GPL meshing/post processing tool) : gf_mesh('import', 'gmsh', filename). 
-	      Note that gmsh meshes always use 3D points, even for planar meshes. 
-	      However, you can remove the z-component of the planar mesh with 
-	      gf_mesh_set(m, 'transform', [1 0 0; 0 1 0]). 
-	      Use gf_mesh('import', 'gmshv2', filename) for gmsh file-format version 2.0.</para>
-	  </listitem>
-	  <listitem>
-	    <para> mesh objects created with GiD (only limited version is free, but it is able to generate quadratic elements) : 
-	      gf_mesh('import', 'gid', filename).</para>
-	  </listitem>
-	  <listitem>
-	    <para> 2D triangular meshes from emc2, saved with the am_fmt format : gf_mesh('import', 'am_fmt', filename). </para>
-	  </listitem>
-	</itemizedlist>
-	<para>Support for other file-formats should be quickly available.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh('clone', M0) : return a copy of the mesh M0. Note that m = gf_mesh('clone', m0) is different from doing m = m0 
-	  since in the latter case, m and m0 still refer the same getfem mesh object! </para>
-      </listitem>
-    </itemizedlist>
+  
+</para>
   </refsection>
 
   <refsection>
-    <title>Examples</title>
+    <title>Command list</title>
+
+    <itemizedlist>
+    <listitem>
+    <para><literal>M = gf_mesh('empty', int dim)</literal></para>
+
+    <para>         Create a new empty mesh.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_mesh('cartesian', vec X[, vec Y[, vec Z,..]])</literal></para>
+
+    <para>         Build quickly a regular mesh of quadrangles, cubes, etc.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_mesh('cartesian Q1', vec X, vec Y[, vec Z,..])</literal></para>
+
+    <para>         Build quickly a regular mesh of quadrangles, cubes, etc. with
+      Q1 elements.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_mesh('triangles grid', vec X, vec Y)</literal></para>
+
+    <para>         Build quickly a regular mesh of triangles.
+
+      This is a very limited and somehow deprecated function (See also
+      <literal></literal>gf_mesh('ptND')<literal></literal>, <literal></literal>gf_mesh('regular simplices')<literal></literal> and
+      <literal></literal>gf_mesh('cartesian')<literal></literal>).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_mesh('regular simplices', vec X[, vec Y[, vec Z,...]]['degree', int k]['noised'])</literal></para>
+
+    <para>         Mesh a n-dimensionnal parallelepipeded with simplices (triangles,
+      tetrahedrons etc) .
+
+      The optional degree may be used to build meshes with non linear
+      geometric transformations.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_mesh('curved', mesh m, vec F)</literal></para>
+
+    <para>         Build a curved (n+1)-dimensions mesh from a n-dimensions mesh <literal>m</literal>.
+
+      The points of the new mesh have one additional coordinate, given by
+      the vector <literal>F</literal>. This can be used to obtain meshes for shells. <literal>m</literal> may
+      be a mesh_fem object, in that case its linked mesh will be used.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_mesh('prismatic', mesh m, int nl)</literal></para>
+
+    <para>         Extrude a prismatic mesh <literal>M</literal> from a mesh <literal>m</literal>.
+
+      In the additional dimension there are <literal>nl</literal> layers of elements built
+      from <literal></literal>0<literal></literal> to <literal></literal>1<literal></literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_mesh('pt2D', mat P, imat T[, int n])</literal></para>
 
-    <para>Building a small 5×3 cartesian mesh: </para>
+    <para>         Build a mesh from a 2D triangulation.
 
-    <programlisting role="example"><![CDATA[ 
-m = gf_mesh('cartesian',[0:.2:1], [0:3])
- ]]></programlisting>
+      Each column of <literal>P</literal> contains a point coordinate, and each column of <literal>T</literal>
+      contains the point indices of a triangle. <literal>n</literal> is optional and is a
+      zone number. If <literal>n</literal> is specified then only the zone number <literal>n</literal> is
+      converted (in that case, <literal>T</literal> is expected to have 4 rows, the fourth
+      containing these zone numbers).
 
-    <para>Making a curved mesh with z=x^2+y^2: </para>
+      
+    </para>
+    </listitem>
 
-    <programlisting role="example"><![CDATA[ 
-pts = gf_mesh_get(m, 'pts coords');
-V = pts(1,:).^2 + pts(2,:)^2;
-m2 = gf_mesh('curved', m, V);
- ]]></programlisting>
+    <listitem>
+    <para><literal>M = gf_mesh('ptND', mat P, imat T)</literal></para>
+
+    <para>         Build a mesh from a n-dimensional "triangulation".
+
+      Similar function to 'pt2D', for building simplexes meshes from a
+      triangulation given in <literal>T</literal>, and a list of points given in <literal>P</literal>. The
+      dimension of the mesh will be the number of rows of <literal>P</literal>, and the
+      dimension of the simplexes will be the number of rows of <literal>T</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_mesh('load', string filename)</literal></para>
+
+    <para>         Load a mesh from a getfem++ ascii mesh file.
+
+      See also <literal></literal>gf_mesh_get(mesh M, 'save', string filename)<literal></literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_mesh('from string', string s)</literal></para>
+
+    <para>         Load a mesh from a string description.
+
+      For example, a string returned by <literal></literal>gf_mesh_get(mesh M, 'char')<literal></literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_mesh('import', string format, string filename)</literal></para>
+
+    <para>         Import a mesh.
+
+      <literal>format</literal> may be:
+
+      - 'gmsh' for a mesh created with <literal>Gmsh</literal>
+      - 'gid' for a mesh created with <literal>GiD</literal>
+      - 'am_fmt' for a mesh created with <literal>EMC2</literal>
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_mesh('clone', mesh m2)</literal></para>
+
+    <para>         Create a copy of a mesh.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_mesh('generate', mesher_object mo, scalar h[, int K = 1[, mat vertices]])</literal></para>
+
+    <para>         Call the (very) experimental mesher of Getfem on the geometry
+      represented by <literal>mo</literal>. please control the conformity of the produced mesh.
+      You can add the mesher by adding a priori vertices in the array
+      <literal>vertices</literal> which should be of size <literal></literal>n x m<literal></literal> where <literal></literal>n<literal></literal> n is the
+      dimension of the mesh and <literal></literal>m<literal></literal> the number of points. <literal>h</literal> is
+      approximate diameter of the elements. <literal>K</literal> is the degree of the
+      mesh ( > 1 for curved boundaries).  The mesher try to optimize the
+      quality of the elements. This operation may be time consuming.
+      Note that if the mesh generation fails, because of some random
+      procedure used, it will not give necessarily the same result due
+      to random procedures used.
+      The messages send to the console by the mesh generation can be
+      desactivated using <literal>gf_util('trace level', 2)</literal>. More information
+      can be obtained by <literal>gf_util('trace level', 4)</literal>.
+      
+    </para>
+    </listitem>
+
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mesh_get">gf_mesh_get</link></member>
-      <member><link linkend="gf_mesh_set">gf_mesh_set</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_fem.xml b/interface/src/scilab/help/en_US/gf_mesh_fem.xml
index f5c63e2..20f7062 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_fem.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_fem.xml
@@ -9,114 +9,125 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mesh_fem</refname>
-
-    <refpurpose>General constructor for mesh_fem objects (Finite Element basis
-    functions on a mesh).</refpurpose>
+    <refpurpose>  This object represents a finite element method defined on a whole mesh.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-mesh_fem MF = gf_mesh_fem(mesh M [, int Qdim=1])
-mesh_fem MF[,M] = gf_mesh_fem('load', string filename[,mesh M])
-mesh_fem MF[,M] = gf_mesh_fem('from string', string S [,mesh M])
-mesh_fem MF = gf_mesh_fem('clone', mesh_fem MF0)
-mesh_fem MF = gf_mesh_fem('partial', mesh_fem mf, vec DOFs[, vec RCVs])
-mesh_fem MF = gf_mesh_fem('global function', mesh m, level_set ls, [gl F1,...][, int Qdim_m])
-    </synopsis>
+    <synopsis>MF = gf_mesh_fem('load', string fname[, mesh m])</synopsis>
+    <synopsis>MF = gf_mesh_fem('from string', string s[, mesh m])</synopsis>
+    <synopsis>MF = gf_mesh_fem('clone', mesh_fem mf)</synopsis>
+    <synopsis>MF = gf_mesh_fem('sum', mesh_fem mf1, mesh_fem mf2[, mesh_fem mf3[, ...]])</synopsis>
+    <synopsis>MF = gf_mesh_fem('levelset', mesh_levelset mls, mesh_fem mf)</synopsis>
+    <synopsis>MF = gf_mesh_fem('global function', mesh m, levelset ls, {global_function GF1,...}[, int Qdim_m])</synopsis>
+    <synopsis>MF = gf_mesh_fem('partial', mesh_fem mf, ivec DOFs[, ivec RCVs])</synopsis>
+    <synopsis>MF = gf_mesh_fem(mesh m[, int Qdim_m=1[, int Qdim_n=1]])</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for mesh_fem objects.</para>
+
+    <para>  This object represents a finite element method defined on a whole mesh.
+</para>
+  </refsection>
 
-    <para>This function creates a mesh_fem object. These objects hold the finite element basis functions on a mesh : 
-      a finite element is assigned to each convex of the mesh, and the mesh_fem takes care of connecting them across the convexes 
-      and enumerating the degrees of freedom.</para>
-    <para>gf_mesh_fem(M,Qdim) creates a new mesh_fem object linked to the mesh M. mesh_fem objects can be used everywhere a const_mesh object 
-      is required (its linked mesh is automatically used). The argument Qdim specifies the dimension of the unknown on this mesh. 
-      If the unknown is a scalar field, then Qdim=1, if it is a 2D vector field then Qdim=2 etc...: 
-      this is independent of the mesh dimension.</para>
-    <para>The load command can restore a previously saved mesh_fem object. If you don't specify the mesh argument, it is assumed that the mesh 
-      was saved in the same file that the mesh_fem (with gf_mesh_fem_get(mf, 'save with mesh')). The 'from string' command is very similar, 
-      but loads the object from a string instead of a file.</para>
-    <para>And finally, it is possible to build a copy of a mesh_fem object with the gf_mesh_fem('clone', MF0) command 
-      (see also the gf_mesh('clone') command).</para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_mesh_fem('load', string fname[, Mesh m]) Load a MeshFem from
-        a file. If the mesh <literal>m</literal> is not supplied (this kind of
-        file does not store the mesh), then it is read from the file
-        <literal>fname</literal> and its descriptor is returned as the second
-        output argument.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem('from string', string [, mesh M]) Create a MeshFem
-        object from its string description. See also
-        gf_mesh_fem_get(mf,'char')</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem('clone', MeshFem mf2) Create a copy of a
-        MeshFem.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem('sum', MeshFem mf1, MeshFem mf2[, MeshFem mf3[,
-        ...]]) Create a MeshFem that combines two (or more) MeshFem's. All
-        MeshFem must share the same mesh (see gf_fem('interpolated_fem') to
-        map a MeshFem onto another). After that, you should not modify the FEM
-        of <literal>mf1</literal>, <literal>mf2</literal> etc.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem('levelset', MeshFem mf, LevelSet ls) Create a
-        MeshFem that is conformal to implicit surfaces defined by
-        LevelSet's.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem('partial', MeshFem mf, vec DOFs[,vec RCVs]) Build a
-        restricted MeshFem by keeping only a subset of the degrees of freedom
-        of <literal>mf</literal>. If <literal>RCVs</literal> is given, no FEM
-        will be put on the convexes listed in <literal>RCVs</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem('.mesh', Mesh m[, int Qdim=1]) Build a new MeshFem
-        object. The <literal>Qdim</literal> parameter is optional.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_fem('partial', mesh_fem mf, vec DOFs[, vec
-	RCVs]) creates a special restricted mesh_fem by keeping only a
-	subset of the degrees of freedom of a pre-existing mesh_fem
-	`mf`.</para>
-	<para>If `RCVs` is given, no FEM will be put on the convexes
-	listed in `RCVs`.</para>
-      </listitem>
-      <listitem>
-	<para>gf_mesh_fem('global function', mesh m, level_set ls, [gl
-	  F1,...][, int Qdim_m]) Create a mesh_fem whose base functions are
-	  global function given by the user.</para>
-      </listitem>
+    <listitem>
+    <para><literal>MF = gf_mesh_fem('load', string fname[, mesh m])</literal></para>
+
+    <para>         Load a mesh_fem from a file.
+
+      If the mesh <literal>m</literal> is not supplied (this kind of file does not store the
+      mesh), then it is read from the file <literal>fname</literal> and its descriptor is
+      returned as the second output argument.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MF = gf_mesh_fem('from string', string s[, mesh m])</literal></para>
+
+    <para>         Create a mesh_fem object from its string description.
+
+      See also <literal></literal>gf_mesh_fem_get(mesh_fem MF, 'char')<literal></literal>
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MF = gf_mesh_fem('clone', mesh_fem mf)</literal></para>
+
+    <para>         Create a copy of a mesh_fem.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MF = gf_mesh_fem('sum', mesh_fem mf1, mesh_fem mf2[, mesh_fem mf3[, ...]])</literal></para>
+
+    <para>         Create a mesh_fem that combines two (or more) mesh_fem's.
+
+      All mesh_fem must share the same mesh (see
+      <literal></literal>gf_fem('interpolated_fem')<literal></literal> to map a mesh_fem onto another).
+
+      After that, you should not modify the FEM of <literal>mf1</literal>, <literal>mf2</literal> etc.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MF = gf_mesh_fem('levelset', mesh_levelset mls, mesh_fem mf)</literal></para>
+
+    <para>         Create a mesh_fem that is conformal to implicit surfaces defined in
+      mesh_levelset.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MF = gf_mesh_fem('global function', mesh m, levelset ls, {global_function GF1,...}[, int Qdim_m])</literal></para>
+
+    <para>         Create a mesh_fem whose base functions are global function given by the
+      user in the system of coordinate defined by the iso-values of the two
+      level-set function of <literal>ls</literal>. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MF = gf_mesh_fem('partial', mesh_fem mf, ivec DOFs[, ivec RCVs])</literal></para>
+
+    <para>           Build a restricted mesh_fem by keeping only a subset of the degrees of
+        freedom of <literal>mf</literal>.
+
+        If <literal>RCVs</literal> is given, no FEM will be put on the convexes listed in
+        <literal>RCVs</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MF = gf_mesh_fem(mesh m[, int Qdim_m=1[, int Qdim_n=1]])</literal></para>
+
+    <para>         Build a new mesh_fem object.
+
+      <literal>Qdim_m</literal> and <literal>Qdim_n</literal> parameters are optionals. Returns the handle of
+      the created object. 
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
-  
+
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mesh_fem_set">gf_mesh_fem_set</link></member>
-      <member><link linkend="gf_mesh_fem_get">gf_mesh_fem_get</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_fem_get.xml b/interface/src/scilab/help/en_US/gf_mesh_fem_get.xml
index 79e977b..b423d91 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_fem_get.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_fem_get.xml
@@ -9,348 +9,446 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mesh_fem_get</refname>
-
-    <refpurpose>General function for inquiry about mesh_fem
-    objects.</refpurpose>
+    <refpurpose>  General function for inquiry about mesh_fem objects.
+  </refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-int N = gf_mesh_fem_get(MF, 'nbdof')
-int N = gf_mesh_fem_get(MF, 'nb basic dof')
-ivec DOF = gf_mesh_fem_get(MF, 'basic dof from cv', ivec CVLST)
-ivec [DOF,CV2DOF] = gf_mesh_fem_get(MF, 'basic dof from cvid', [ivec CVLST])
-ivec DOF = gf_mesh_fem_get(MF, 'non conformal basic dof' [, ivec CVLST])
-fem FEMLST[, ivec CV2F] = gf_mesh_fem_get(MF, 'fem' [, ivec CVLST])
-ivec CVLST = gf_mesh_fem_get(MF, 'convex_index')
-int N = gf_mesh_fem_get(MF, 'qdim')
-ivec I = gf_mesh_fem_get(MF, {'is_lagrangian' | 'is_equivalent' | 'is_polynomial'} 
-      [, ivec CVLST])
-int N = gf_mesh_fem_get(MF, 'is_reduced')
-spmat R = gf_mesh_fem_get(MF, 'reduction_matrix')
-spmat R = gf_mesh_fem_get(MF, 'extension_matrix')
-ivec DOFLST = gf_mesh_fem_get(MF, 'basic dof on region', ivec rlist)
-ivec DOFLST = gf_mesh_fem_get(MF, 'dof on region', ivec rlist)
-mat DOF_XY = gf_mesh_fem_get(MF, 'basic dof nodes'[, ivec DOFLST])
-ivec DOFP = gf_mesh_fem_get(MF, 'dof partition')
-vec U = gf_mesh_fem_get(MF, 'interpolate convex data', vec Ucv)
-gf_mesh_fem_get(MF, 'save', string filename, ['with mesh'])
-gf_mesh_fem_get(MF,'export_to_vtk', filename, ... ['ascii'], U, 'name'...)
-gf_mesh_fem_get(MF,'export_to_dx', filename, ... ['as', mesh_name][,'edges']['serie',serie_name][,'ascii'][,'append'], U, 'name'...)
-string S=gf_mesh_fem_get(M, 'char' [,'with mesh'])
-mesh M=gf_mesh_fem_get(MF, 'linked mesh')
-vec U=gf_mesh_fem_get(MF, 'eval', expr [,ivec DOFLST])
-M=gf_mesh_fem_get(MF, 'memsize')
-    </synopsis>
+    <synopsis>n = gf_mesh_fem_get(mesh_fem MF, 'nbdof')</synopsis>
+    <synopsis>n = gf_mesh_fem_get(mesh_fem MF, 'nb basic dof')</synopsis>
+    <synopsis>DOF = gf_mesh_fem_get(mesh_fem MF, 'dof from cv',mat CVids)</synopsis>
+    <synopsis>DOF = gf_mesh_fem_get(mesh_fem MF, 'basic dof from cv',mat CVids)</synopsis>
+    <synopsis>{DOFs, IDx} = gf_mesh_fem_get(mesh_fem MF, 'dof from cvid'[, mat CVids])</synopsis>
+    <synopsis>{DOFs, IDx} = gf_mesh_fem_get(mesh_fem MF, 'basic dof from cvid'[, mat CVids])</synopsis>
+    <synopsis>gf_mesh_fem_get(mesh_fem MF, 'non conformal dof'[, mat CVids])</synopsis>
+    <synopsis>gf_mesh_fem_get(mesh_fem MF, 'non conformal basic dof'[, mat CVids])</synopsis>
+    <synopsis>gf_mesh_fem_get(mesh_fem MF, 'qdim')</synopsis>
+    <synopsis>{FEMs, CV2F} = gf_mesh_fem_get(mesh_fem MF, 'fem'[, mat CVids])</synopsis>
+    <synopsis>CVs = gf_mesh_fem_get(mesh_fem MF, 'convex_index')</synopsis>
+    <synopsis>bB = gf_mesh_fem_get(mesh_fem MF, 'is_lagrangian'[, mat CVids])</synopsis>
+    <synopsis>bB = gf_mesh_fem_get(mesh_fem MF, 'is_equivalent'[, mat CVids])</synopsis>
+    <synopsis>bB = gf_mesh_fem_get(mesh_fem MF, 'is_polynomial'[, mat CVids])</synopsis>
+    <synopsis>bB = gf_mesh_fem_get(mesh_fem MF, 'is_reduced')</synopsis>
+    <synopsis>bB = gf_mesh_fem_get(mesh_fem MF, 'reduction matrix')</synopsis>
+    <synopsis>bB = gf_mesh_fem_get(mesh_fem MF, 'extension matrix')</synopsis>
+    <synopsis>DOFs = gf_mesh_fem_get(mesh_fem MF, 'basic dof on region',mat Rs)</synopsis>
+    <synopsis>DOFs = gf_mesh_fem_get(mesh_fem MF, 'dof on region',mat Rs)</synopsis>
+    <synopsis>DOFpts = gf_mesh_fem_get(mesh_fem MF, 'dof nodes'[, mat DOFids])</synopsis>
+    <synopsis>DOFpts = gf_mesh_fem_get(mesh_fem MF, 'basic dof nodes'[, mat DOFids])</synopsis>
+    <synopsis>DOFP = gf_mesh_fem_get(mesh_fem MF, 'dof partition')</synopsis>
+    <synopsis>gf_mesh_fem_get(mesh_fem MF, 'save',string filename[, string opt])</synopsis>
+    <synopsis>gf_mesh_fem_get(mesh_fem MF, 'char'[, string opt])</synopsis>
+    <synopsis>gf_mesh_fem_get(mesh_fem MF, 'display')</synopsis>
+    <synopsis>m = gf_mesh_fem_get(mesh_fem MF, 'linked mesh')</synopsis>
+    <synopsis>m = gf_mesh_fem_get(mesh_fem MF, 'mesh')</synopsis>
+    <synopsis>gf_mesh_fem_get(mesh_fem MF, 'export to vtk',string filename, ... ['ascii'], U, 'name'...)</synopsis>
+    <synopsis>gf_mesh_fem_get(mesh_fem MF, 'export to dx',string filename, ...['as', string mesh_name][,'edges']['serie',string serie_name][,'ascii'][,'append'], U, 'name'...)</synopsis>
+    <synopsis>gf_mesh_fem_get(mesh_fem MF, 'export to pos',string filename[, string name][[,mesh_fem mf1], mat U1, string nameU1[[,mesh_fem mf2], mat U2, string nameU2,...]])</synopsis>
+    <synopsis>gf_mesh_fem_get(mesh_fem MF, 'dof_from_im',mesh_im mim[, int p])</synopsis>
+    <synopsis>U = gf_mesh_fem_get(mesh_fem MF, 'interpolate_convex_data',mat Ucv)</synopsis>
+    <synopsis>z = gf_mesh_fem_get(mesh_fem MF, 'memsize')</synopsis>
+    <synopsis>gf_mesh_fem_get(mesh_fem MF, 'has_linked_mesh_levelset')</synopsis>
+    <synopsis>gf_mesh_fem_get(mesh_fem MF, 'linked_mesh_levelset')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
-
-    <itemizedlist>
-      <listitem>
-        <para>n = gf_mesh_fem_get(MF,'nbdof') Return the number of degrees of
-        freedom (dof) of the MeshFem.</para>
-      </listitem>
-
-      <listitem>
-        <para>n = gf_mesh_fem_get(MF,'nb basic dof') Return the number of
-        basic degrees of freedom (dof) of the MeshFem.</para>
-      </listitem>
-
-      <listitem>
-        <para>DOF = gf_mesh_fem_get(MF,'dof from cv',mat CVids) Deprecated
-        function. Use gf_mesh_fem_get(MF,'basic dof from cv') instead.</para>
-      </listitem>
-
-      <listitem>
-        <para>DOF = gf_mesh_fem_get(MF,'basic dof from cv',mat CVids) Return
-        the dof of the convexes listed in <literal>CVids</literal>. </para>
-
-        <para>WARNING: the Degree of Freedom might be returned in ANY order,
-        do not use this function in your assembly routines. Use 'basic dof
-        from cvid' instead, if you want to be able to map a convex number with
-        its associated degrees of freedom. One can also get the list of basic
-        dof on a set on convex faces, by indicating on the second row of
-        <literal>CVids</literal> the faces numbers (with respect to the convex
-        number on the first row).</para>
-      </listitem>
-
-      <listitem>
-        <para>DOF = gf_mesh_fem_get(MF,'dof from cvid'[, mat CVids])
-        Deprecated function. Use gf_mesh_fem_get(MF,'basic dof from cvid')
-        instead.</para>
-      </listitem>
-
-      <listitem>
-        <para>list(DOFs, IDx) = gf_mesh_fem_get(MF,'basic dof from cvid'[, mat
-        CVids]) Return the degrees of freedom attached to each convex of the
-        mesh. If <literal>CVids</literal> is omitted, all the convexes will be
-        considered (equivalent to <emphasis>CVids = 1 ... gf_mesh_get(M,'max
-        cvid')</emphasis>). <literal>IDx</literal> is a Scilab row vector,
-        <emphasis>length(IDx) = length(CVids)+1</emphasis>.
-        <literal>DOFs</literal> is a Scilab row vector containing the
-        concatenated list of dof of each convex in <literal>CVids</literal>.
-        Each entry of <literal>IDx</literal> is the position of the
-        corresponding convex point list in <literal>DOFs</literal>. Hence, for
-        example, the list of points of the second convex is
-        <emphasis>DOFs(IDx(2):IDx(3)-1)</emphasis>. If
-        <literal>CVids</literal> contains convex #id which do not exist in the
-        mesh, their point list will be empty.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_get(MF,'non conformal dof'[, mat CVids]) Deprecated
-        function. Use gf_mesh_fem_get(MF,'non conformal basic dof')
-        instead.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_get(MF,'non conformal basic dof'[, mat CVids])
-        Return partially linked degrees of freedom. Return the basic dof
-        located on the border of a convex and which belong to only one convex,
-        except the ones which are located on the border of the mesh. For
-        example, if the convex 'a' and 'b' share a common face, 'a' has a P1
-        FEM, and 'b' has a P2 FEM, then the basic dof on the middle of the
-        face will be returned by this function (this can be useful when
-        searching the interfaces between classical FEM and hierarchical
-        FEM).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_get(MF,'qdim') Return the dimension Q of the field
-        interpolated by the MeshFem. By default, Q=1 (scalar field). This has
-        an impact on the dof numbering.</para>
-      </listitem>
-
-      <listitem>
-        <para>list(FEMs, CV2F) = gf_mesh_fem_get(MF,'fem'[, mat CVids]) Return
-        a list of FEM used by the MeshFem. <literal>FEMs</literal> is an array
-        of all Fem objects found in the convexes given in
-        <literal>CVids</literal>. If <literal>CV2F</literal> was supplied as
-        an output argument, it contains, for each convex listed in
-        <literal>CVids</literal>, the index of its correspounding FEM in
-        <literal>FEMs</literal>. Convexes which are not part of the mesh, or
-        convexes which do not have any FEM have their correspounding entry in
-        <literal>CV2F</literal> set to -1.</para>
-      </listitem>
-
-      <listitem>
-        <para>CVs = gf_mesh_fem_get(MF,'convex_index') Return the list of
-        convexes who have a FEM.</para>
-      </listitem>
-
-      <listitem>
-        <para>bB = gf_mesh_fem_get(MF,'is_lagrangian'[, mat CVids]) Test if
-        the MeshFem is Lagrangian. Lagrangian means that each base function
-        <emphasis>Phi[i]</emphasis> is such that <emphasis>Phi[i](P[j]) =
-        delta(i,j)</emphasis>, where <emphasis>P[j]</emphasis> is the dof
-        location of the jth base function, and <emphasis>delta(i,j) = 1 if
-        i==j, else 0</emphasis>.</para>
-
-        <para>If <literal>CVids</literal> is omitted, it returns 1 if all
-        convexes in the mesh are Lagrangian. If <literal>CVids</literal> is
-        used, it returns the convex indices (with respect to
-        <literal>CVids</literal>) which are Lagrangian.</para>
-      </listitem>
-
-      <listitem>
-        <para>bB = gf_mesh_fem_get(MF,'is_equivalent'[, mat CVids]) Test if
-        the MeshFem is equivalent. See
-        gf_mesh_fem_get(MF,'is_lagrangian')</para>
-      </listitem>
-
-      <listitem>
-        <para>bB = gf_mesh_fem_get(MF,'is_polynomial'[, mat CVids]) Test if
-        all base functions are polynomials. See
-        gf_mesh_fem_get(MF,'is_lagrangian')</para>
-      </listitem>
-
-      <listitem>
-        <para>bB = gf_mesh_fem_get(MF,'is_reduced') Return 1 if the optional
-        reduction matrix is applied to the dofs.</para>
-      </listitem>
-
-      <listitem>
-        <para>bB = gf_mesh_fem_get(MF,'reduction matrix') Return the optional
-        reduction matrix.</para>
-      </listitem>
-
-      <listitem>
-        <para>bB = gf_mesh_fem_get(MF,'extension matrix') Return the optional
-        extension matrix.</para>
-      </listitem>
-
-      <listitem>
-        <para>DOFs = gf_mesh_fem_get(MF,'basic dof on region',mat Rs) Return
-        the list of basic dof (before the optional reduction) lying on one of
-        the mesh regions listed in <literal>Rs</literal>. More precisely, this
-        function returns the basic dof whose support is non-null on one of
-        regions whose #ids are listed in <literal>Rs</literal> (note that for
-        boundary regions, some dof nodes may not lie exactly on the boundary,
-        for example the dof of Pk(n,0) lies on the center of the convex, but
-        the base function in not null on the convex border).</para>
-      </listitem>
-
-      <listitem>
-        <para>DOFs = gf_mesh_fem_get(MF,'dof on region',mat Rs) Return the
-        list of dof (after the optional reduction) lying on one of the mesh
-        regions listed in <literal>Rs</literal>. More precisely, this function
-        returns the basic dof whose support is non-null on one of regions
-        whose #ids are listed in `Rs` (note that for boundary regions, some
-        dof nodes may not lie exactly on the boundary, for example the dof of
-        Pk(n,0) lies on the center of the convex, but the base function in not
-        null on the convex border). For a reduced mesh_fem a dof is lying on a
-        region if its potential corresponding shape function is nonzero on
-        this region. The extension matrix is used to make the correspondance
-        between basic and reduced dofs.</para>
-      </listitem>
-
-      <listitem>
-        <para>DOFpts = gf_mesh_fem_get(MF,'dof nodes'[, mat DOFids])
-        Deprecated function. Use gf_mesh_fem_get(MF,'basic dof nodes')
-        instead.</para>
-      </listitem>
-
-      <listitem>
-        <para>DOFpts = gf_mesh_fem_get(MF,'basic dof nodes'[, mat DOFids]) Get
-        location of basic degrees of freedom. Return the list of interpolation
-        points for the specified dof #IDs in `DOFids` (if `DOFids` is omitted,
-        all basic dof are considered).</para>
-      </listitem>
-
-      <listitem>
-        <para>DOFP = gf_mesh_fem_get(MF,'dof partition') Get the
-        'dof_partition' array. Return the array which associates an integer
-        (the partition number) to each convex of the MeshFem. By default, it
-        is an all-zero array. The degrees of freedom of each convex of the
-        MeshFem are connected only to the dof of neighbouring convexes which
-        have the same partition number, hence it is possible to create
-        partially discontinuous MeshFem very easily.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_get(MF,'save',string filename[, string opt]) Save a
-        MeshFem in a text file (and optionaly its linked mesh object if
-        <literal>opt</literal> is the string 'with_mesh').</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_get(MF,'char'[, string opt]) Output a string
-        description of the MeshFem. By default, it does not include the
-        description of the linked mesh object, except if
-        <literal>opt</literal> is 'with_mesh'.</para>
-      </listitem>
-
-      <listitem>
-        <para>m = gf_mesh_fem_get(MF,'linked mesh') Return a reference to the
-        Mesh object linked to `mf`.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_get(MF,'export to vtk',string filename, ...
-        ['ascii'], U, 'name'...) Export a MeshFem and some fields to a vtk
-        file. The FEM and geometric transformations will be mapped to order 1
-        or 2 isoparametric Pk (or Qk) FEMs (as VTK does not handle higher
-        order elements). If you need to represent high-order FEMs or
-        high-order geometric transformations, you should consider
-        gf_slice_get(sl,'export to vtk').</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_get(MF,'export to dx',string filename, ...['as',
-        string mesh_name][,'edges']['serie',string
-        serie_name][,'ascii'][,'append'], U, 'name'...) Export a MeshFem and
-        some fields to an OpenDX file. This function will fail if the MeshFem
-        mixes different convex types (i.e. quads and triangles), or if OpenDX
-        does not handle a specific element type (i.e. prism connections are
-        not known by OpenDX). The FEM will be mapped to order 1 Pk (or Qk)
-        FEMs. If you need to represent high-order FEMs or high-order geometric
-        transformations, you should consider gf_slice_get(sl,'export to
-        dx').</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_get(MF,'export to pos',string filename[, mat U1,
-        string nameU1[, mat U2, string nameU2,...]) Export a MeshFem and some
-        fields to a pos file. The FEM and geometric transformations will be
-        mapped to order 1 isoparametric Pk (or Qk) FEMs (as GMSH does not
-        handle higher order elements).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_get(MF,'dof_from_im',MeshIm mim[, int p]) Return a
-        selection of dof who contribute significantly to the mass-matrix that
-        would be computed with <literal>mf</literal> and the integration
-        method <literal>mim</literal>. <literal>p</literal> represents the
-        dimension on what the integration method operates (default <emphasis>p
-        = mesh dimension</emphasis>). </para>
-
-        <para>IMPORTANT: you still have to set a valid integration method on
-        the convexes which are not crosses by the levelset!</para>
-      </listitem>
-
-      <listitem>
-        <para>U = gf_mesh_fem_get(MF,'interpolate_convex_data',mat Ucv)
-        Interpolate data given on each convex of the mesh to the MeshFem dof.
-        The MeshFem has to be lagrangian, and should be discontinuous
-        (typically a FEM_PK(N,0) or FEM_QK(N,0) should be used). The last
-        dimension of the input vector Ucv should have gf_mesh_get(M,'max
-        cvid') elements. </para>
-
-        <para>Example of use: gf_mesh_fem_get(MF,'interpolate_convex_data',
-        gf_mesh_get(M,'quality'))</para>
-      </listitem>
-
-      <listitem>
-        <para>z = gf_mesh_fem_get(MF,'memsize') Return the amount of memory
-        (in bytes) used by the mesh_fem object. The result does not take into
-        account the linked mesh object.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_get(MF,'has_linked_mesh_levelset') ???.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_get(MF,'linked_mesh_levelset') ???</para>
-      </listitem>
-    </itemizedlist>
+    <para>  General function for inquiry about mesh_fem objects.
+  </para>
   </refsection>
 
   <refsection>
-    <title>Examples</title>
-
-    <programlisting role="example"> 
-cvid=gf_mesh_get(mf,'cvid');
-[f,c2f]=gf_mesh_fem_get(mf, 'fem');
-sf = list()
-for i=1:size(f), sf(i)=gf_fem_get('char',f(i)); end;
-for i=1:size(c2f),
-  disp(sprintf('the fem of convex %d is %s', cvid(i),sf(i)));
-end
-
-U1=gf_mesh_fem_get_eval(mf,1)
-U2=gf_mesh_fem_get_eval(mf,[1;0]) // output has two rows
-U3=gf_mesh_fem_get_eval(mf,[1 0]) // output has one row, only valid if qdim(mf)==2
-U4=gf_mesh_fem_get_eval(mf,list('x';'y.*z';4;myfunctionofxyz))
- </programlisting>
+    <title>Command list</title>
+
+    <itemizedlist>
+    <listitem>
+    <para><literal>n = gf_mesh_fem_get(mesh_fem MF, 'nbdof')</literal></para>
+
+    <para>       Return the number of degrees of freedom (dof) of the mesh_fem.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>n = gf_mesh_fem_get(mesh_fem MF, 'nb basic dof')</literal></para>
+
+    <para>       Return the number of basic degrees of freedom (dof) of the mesh_fem.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>DOF = gf_mesh_fem_get(mesh_fem MF, 'dof from cv',mat CVids)</literal></para>
+
+    <para>       Deprecated function. Use gf_mesh_fem_get(mesh_fem MF, 'basic dof from cv') instead. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>DOF = gf_mesh_fem_get(mesh_fem MF, 'basic dof from cv',mat CVids)</literal></para>
+
+    <para>       Return the dof of the convexes listed in <literal>CVids</literal>.
+
+    WARNING: the Degree of Freedom might be returned in ANY order, do
+    not use this function in your assembly routines. Use 'basic dof from cvid'
+    instead, if you want to be able to map a convex number with its
+    associated degrees of freedom.
+
+    One can also get the list of basic dof on a set on convex faces, by
+    indicating on the second row of <literal>CVids</literal> the faces numbers (with
+    respect to the convex number on the first row).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{DOFs, IDx} = gf_mesh_fem_get(mesh_fem MF, 'dof from cvid'[, mat CVids])</literal></para>
+
+    <para>         Deprecated function. Use gf_mesh_fem_get(mesh_fem MF, 'basic dof from cvid') instead.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{DOFs, IDx} = gf_mesh_fem_get(mesh_fem MF, 'basic dof from cvid'[, mat CVids])</literal></para>
+
+    <para>       Return the degrees of freedom attached to each convex of the mesh.
+
+    If <literal>CVids</literal> is omitted, all the convexes will be considered (equivalent
+    to <literal>CVids = 1 ... gf_mesh_get(mesh M, 'max cvid')</literal>).
+
+    <literal>IDx</literal> is a vector, <literal>length(IDx) = length(CVids)+1</literal>.
+    <literal>DOFs</literal> is a vector containing the concatenated list
+    of dof of each convex in <literal>CVids</literal>. Each entry of <literal>IDx</literal> is the position
+    of the corresponding convex point list in <literal>DOFs</literal>. Hence, for example,
+    the list of points of the second convex is DOFs(IDx(2):IDx(3)-1).
+
+    If <literal>CVids</literal> contains convex #id which do not exist in the mesh, their
+    point list will be empty.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_get(mesh_fem MF, 'non conformal dof'[, mat CVids])</literal></para>
+
+    <para>         Deprecated function. Use gf_mesh_fem_get(mesh_fem MF, 'non conformal basic dof') instead.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_get(mesh_fem MF, 'non conformal basic dof'[, mat CVids])</literal></para>
+
+    <para>       Return partially linked degrees of freedom.
+
+    Return the basic dof located on the border of a convex and which belong
+    to only one convex, except the ones which are located on the border
+    of the mesh.  For example, if the convex 'a' and 'b' share a common
+    face, 'a' has a P1 FEM, and 'b' has a P2 FEM, then the basic dof on the
+    middle of the face will be returned by this function (this can be
+    useful when searching the interfaces between classical FEM and
+    hierarchical FEM).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_get(mesh_fem MF, 'qdim')</literal></para>
+
+    <para>       Return the dimension Q of the field interpolated by the mesh_fem.
+
+    By default, Q=1 (scalar field). This has an impact on the dof numbering.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{FEMs, CV2F} = gf_mesh_fem_get(mesh_fem MF, 'fem'[, mat CVids])</literal></para>
+
+    <para>         Return a list of FEM used by the mesh_fem.
+      
+      <literal>FEMs</literal> is an array of all fem objects found in the convexes
+      given in <literal>CVids</literal>. If <literal>CV2F</literal> was supplied as an output argument,
+      it contains, for each convex listed in <literal>CVids</literal>, the index of its
+      correspounding FEM in <literal>FEMs</literal>.
+      
+      Convexes which are not part of the mesh, or convexes which do not
+      have any FEM have their correspounding entry in <literal>CV2F</literal> set to -1.
+      
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>CVs = gf_mesh_fem_get(mesh_fem MF, 'convex_index')</literal></para>
+
+    <para>       Return the list of convexes who have a FEM.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>bB = gf_mesh_fem_get(mesh_fem MF, 'is_lagrangian'[, mat CVids])</literal></para>
+
+    <para>       Test if the mesh_fem is Lagrangian.
+
+    Lagrangian means that each base function Phi[i] is such that
+    Phi[i](P[j]) = delta(i,j), where P[j] is the dof location of
+    the jth base function, and delta(i,j) = 1 if i==j, else 0.
+
+    If <literal>CVids</literal> is omitted, it returns 1 if all convexes in the mesh
+    are Lagrangian. If <literal>CVids</literal> is used, it returns the convex indices
+    (with respect to <literal>CVids</literal>) which are Lagrangian.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>bB = gf_mesh_fem_get(mesh_fem MF, 'is_equivalent'[, mat CVids])</literal></para>
+
+    <para>       Test if the mesh_fem is equivalent.
+
+    See gf_mesh_fem_get(mesh_fem MF, 'is_lagrangian')
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>bB = gf_mesh_fem_get(mesh_fem MF, 'is_polynomial'[, mat CVids])</literal></para>
+
+    <para>         Test if all base functions are polynomials.
+      
+      See gf_mesh_fem_get(mesh_fem MF, 'is_lagrangian')
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>bB = gf_mesh_fem_get(mesh_fem MF, 'is_reduced')</literal></para>
+
+    <para>       Return 1 if the optional reduction matrix is applied to the dofs.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>bB = gf_mesh_fem_get(mesh_fem MF, 'reduction matrix')</literal></para>
+
+    <para>       Return the optional reduction matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>bB = gf_mesh_fem_get(mesh_fem MF, 'extension matrix')</literal></para>
+
+    <para>       Return the optional extension matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>DOFs = gf_mesh_fem_get(mesh_fem MF, 'basic dof on region',mat Rs)</literal></para>
+
+    <para>       Return the list of basic dof (before the optional reduction) lying on one
+    of the mesh regions listed in <literal>Rs</literal>.
+
+    More precisely, this function returns the basic dof whose support is
+    non-null on one of regions whose #ids are listed in <literal>Rs</literal> (note
+    that for boundary regions, some dof nodes may not lie exactly
+    on the boundary, for example the dof of Pk(n,0) lies on the center
+    of the convex, but the base function in not null on the convex
+    border).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>DOFs = gf_mesh_fem_get(mesh_fem MF, 'dof on region',mat Rs)</literal></para>
+
+    <para>       Return the list of dof (after the optional reduction) lying on one
+    of the mesh regions listed in <literal>Rs</literal>.
+
+    More precisely, this function returns the basic dof whose support is
+    non-null on one of regions whose #ids are listed in <literal>Rs</literal> (note
+    that for boundary regions, some dof nodes may not lie exactly
+    on the boundary, for example the dof of Pk(n,0) lies on the center
+    of the convex, but the base function in not null on the convex
+    border).
+
+    For a reduced mesh_fem
+    a dof is lying on a region if its potential corresponding shape
+    function is nonzero on this region. The extension matrix is used
+    to make the correspondance between basic and reduced dofs.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>DOFpts = gf_mesh_fem_get(mesh_fem MF, 'dof nodes'[, mat DOFids])</literal></para>
+
+    <para>       Deprecated function. Use gf_mesh_fem_get(mesh_fem MF, 'basic dof nodes') instead. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>DOFpts = gf_mesh_fem_get(mesh_fem MF, 'basic dof nodes'[, mat DOFids])</literal></para>
+
+    <para>       Get location of basic degrees of freedom.
+
+    Return the list of interpolation points for the specified
+    dof #IDs in <literal>DOFids</literal> (if <literal>DOFids</literal> is omitted, all basic dof are
+    considered).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>DOFP = gf_mesh_fem_get(mesh_fem MF, 'dof partition')</literal></para>
+
+    <para>       Get the 'dof_partition' array.
+
+    Return the array which associates an integer (the partition number)
+    to each convex of the mesh_fem. By default, it is an all-zero array.
+    The degrees of freedom of each convex of the mesh_fem are connected
+    only to the dof of neighbouring convexes which have the same
+    partition number, hence it is possible to create partially
+    discontinuous mesh_fem very easily.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_get(mesh_fem MF, 'save',string filename[, string opt])</literal></para>
+
+    <para>       Save a mesh_fem in a text file (and optionaly its linked mesh object
+    if <literal>opt</literal> is the string 'with_mesh').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_get(mesh_fem MF, 'char'[, string opt])</literal></para>
+
+    <para>         Output a string description of the mesh_fem.
+      
+      By default, it does not include the description of the linked mesh
+      object, except if <literal>opt</literal> is 'with_mesh'.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_get(mesh_fem MF, 'display')</literal></para>
+
+    <para>         displays a short summary for a mesh_fem object.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>m = gf_mesh_fem_get(mesh_fem MF, 'linked mesh')</literal></para>
+
+    <para>         Return a reference to the mesh object linked to <literal>mf</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>m = gf_mesh_fem_get(mesh_fem MF, 'mesh')</literal></para>
+
+    <para>         Return a reference to the mesh object linked to <literal>mf</literal>.
+      (identical to gf_mesh_get(mesh M, 'linked mesh'))
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_get(mesh_fem MF, 'export to vtk',string filename, ... ['ascii'], U, 'name'...)</literal></para>
+
+    <para>       Export a mesh_fem and some fields to a vtk file.
+
+    The FEM and geometric transformations will be mapped to order 1
+    or 2 isoparametric Pk (or Qk) FEMs (as VTK does not handle higher
+    order elements). If you need to represent high-order FEMs or
+    high-order geometric transformations, you should consider
+    gf_slice_get(slice S, 'export to vtk').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_get(mesh_fem MF, 'export to dx',string filename, ...['as', string mesh_name][,'edges']['serie',string serie_name][,'ascii'][,'append'], U, 'name'...)</literal></para>
+
+    <para>       Export a mesh_fem and some fields to an OpenDX file.
+
+    This function will fail if the mesh_fem mixes different convex types
+    (i.e. quads and triangles), or if OpenDX does not handle a specific
+    element type (i.e. prism connections are not known by OpenDX).
+
+    The FEM will be mapped to order 1 Pk (or Qk) FEMs. If you need to
+    represent high-order FEMs or high-order geometric transformations,
+    you should consider gf_slice_get(slice S, 'export to dx').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_get(mesh_fem MF, 'export to pos',string filename[, string name][[,mesh_fem mf1], mat U1, string nameU1[[,mesh_fem mf2], mat U2, string nameU2,...]])</literal></para>
+
+    <para>       Export a mesh_fem and some fields to a pos file.
+
+    The FEM and geometric transformations will be mapped to order 1
+    isoparametric Pk (or Qk) FEMs (as GMSH does not handle higher
+    order elements).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_get(mesh_fem MF, 'dof_from_im',mesh_im mim[, int p])</literal></para>
+
+    <para>       Return a selection of dof who contribute significantly to the
+    mass-matrix that would be computed with <literal>mf</literal> and the integration
+    method <literal>mim</literal>.
+
+    <literal>p</literal> represents the dimension on what the integration method
+    operates (default <literal>p = mesh dimension</literal>).
+
+    IMPORTANT: you still have to set a valid integration method on
+    the convexes which are not crosses by the levelset!
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>U = gf_mesh_fem_get(mesh_fem MF, 'interpolate_convex_data',mat Ucv)</literal></para>
+
+    <para>   
+    Interpolate data given on each convex of the mesh to the mesh_fem dof.
+    The mesh_fem has to be lagrangian, and should be discontinuous (typically
+    a FEM_PK(N,0) or FEM_QK(N,0) should be used).
+
+    The last dimension of the input vector Ucv should have
+    gf_mesh_get(mesh M, 'max cvid') elements.
+
+    Example of use: gf_mesh_fem_get(mesh_fem MF, 'interpolate_convex_data', gf_mesh_get(mesh M, 'quality'))
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>z = gf_mesh_fem_get(mesh_fem MF, 'memsize')</literal></para>
+
+    <para>       Return the amount of memory (in bytes) used by the mesh_fem object.
+
+    The result does not take into account the linked mesh object.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_get(mesh_fem MF, 'has_linked_mesh_levelset')</literal></para>
+
+    <para>          Is a mesh_fem_level_set or not. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_get(mesh_fem MF, 'linked_mesh_levelset')</literal></para>
+
+    <para>         if it is a mesh_fem_level_set gives the linked mesh_level_set. 
+    </para>
+    </listitem>
+
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mesh_get">gf_mesh_get</link></member>
-      <member><link linkend="gf_mesh_set">gf_mesh_set</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_fem_set.xml b/interface/src/scilab/help/en_US/gf_mesh_fem_set.xml
index 4aa9e69..556be91 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_fem_set.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_fem_set.xml
@@ -9,113 +9,137 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mesh_fem_set</refname>
-
-    <refpurpose>General function for modifying mesh_fem objects.</refpurpose>
+    <refpurpose>  General function for modifying mesh_fem objects.
+  </refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-gf_mesh_fem_set(MF, 'fem', fem fem [, ivec CVIDX])
-gf_mesh_fem_set(MF, 'classical fem', fem fem, int K [, ivec CVIDX])
-gf_mesh_fem_set(MF, 'classical discontinuous fem', fem fem, int K [, ivec CVIDX])
-gf_mesh_fem_set(MF, 'qdim', int Qdim)
-gf_mesh_fem_set(MF, 'reduction', int s)
-gf_mesh_fem_set(MF, 'reduction matrices', spmat R, spmat E)
-gf_mesh_fem_set(MF, 'dof partition', ivec DOFP)
-gf_mesh_fem_set(MF, 'set partial', ivec DOFs[, ivec RCVs])
-    </synopsis>
+    <synopsis>gf_mesh_fem_set(mesh_fem MF, 'fem', fem f[, ivec CVids])</synopsis>
+    <synopsis>gf_mesh_fem_set(mesh_fem MF, 'classical fem', int k[, ivec CVids])</synopsis>
+    <synopsis>gf_mesh_fem_set(mesh_fem MF, 'classical discontinuous fem', int K[, @tscalar alpha[, ivec CVIDX]])</synopsis>
+    <synopsis>gf_mesh_fem_set(mesh_fem MF, 'qdim', int Q)</synopsis>
+    <synopsis>gf_mesh_fem_set(mesh_fem MF, 'reduction matrices', mat R, mat E)</synopsis>
+    <synopsis>gf_mesh_fem_set(mesh_fem MF, 'reduction', int s)</synopsis>
+    <synopsis>gf_mesh_fem_set(mesh_fem MF, 'reduce meshfem', mat RM)</synopsis>
+    <synopsis>gf_mesh_fem_set(mesh_fem MF, 'dof partition', ivec DOFP)</synopsis>
+    <synopsis>gf_mesh_fem_set(mesh_fem MF, 'set partial', ivec DOFs[, ivec RCVs])</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  General function for modifying mesh_fem objects.
+  </para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_mesh_fem_set(MF,'fem',Fem f[, vec CVids]) Set the Finite
-        Element Method. Assign a FEM <literal>f</literal> to all convexes
-        whose #ids are listed in <literal>CVids</literal>. If
-        <literal>CVids</literal> is not given, the integration is assigned to
-        all convexes. See the help of gf_fem to obtain a list of available FEM
-        methods.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_set(MF,'classical fem',int k[, vec CVids]) Assign a
-        classical (Lagrange polynomial) fem of order <literal>k</literal> to
-        the MeshFem. Uses FEM_PK for simplexes, FEM_QK for parallelepipeds
-        etc.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_set(MF,'classical discontinuous fem',int K, [int
-        IM_DEGREE [,vec CVIDX]]) Assigns a classical (Lagrange polynomial)
-        discontinuous fem or order K. Similar to gf_mesh_fem_set(MF,'classical
-        fem') except that FEM_PK_DISCONTINUOUS is used.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_set(MF,'qdim',int Q) Change the <literal>Q</literal>
-        dimension of the field that is interpolated by the MeshFem.
-        <emphasis>Q = 1</emphasis> means that the MeshFem describes a scalar
-        field, <emphasis>Q = N</emphasis> means that the MeshFem describes a
-        vector field of dimension N.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_set(MF,'reduction matrices',mat R,mat E) Set the
-        reduction and extension matrices and valid their use.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_set(MF,'reduction',int s) Set or unset the use of
-        the reduction/extension matrices.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_fem_set(MF,'dof partition',vec DOFP) Change the
-        'dof_partition' array. <literal>DOFP</literal> is a vector holding a
-        integer value for each convex of the MeshFem. See
-        gf_mesh_fem_get(MF,'dof partition') for a description of "dof
-        partition".</para>
-      </listitem>
+    <listitem>
+    <para><literal>gf_mesh_fem_set(mesh_fem MF, 'fem', fem f[, ivec CVids])</literal></para>
+
+    <para>         Set the Finite Element Method.
       
-      <listitem>
-	<para>gf_mesh_fem_set(MF, 'set partial', ivec DOFs[, ivec
-	  RCVs]) Can only be applied to a partial mesh_fem. 
-	  Change the subset of the degrees of freedom of `mf`.</para>
-	<para>If `RCVs` is given, no FEM will be put on the convexes
-	  listed in `RCVs`.</para>
-      </listitem>
+      Assign a FEM <literal>f</literal> to all convexes whose #ids are listed in <literal>CVids</literal>.
+      If <literal>CVids</literal> is not given, the integration is assigned to all convexes.
+      
+      See the help of gf_fem to obtain a list of available FEM methods.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_set(mesh_fem MF, 'classical fem', int k[, ivec CVids])</literal></para>
+
+    <para>       Assign a classical (Lagrange polynomial) fem of order <literal>k</literal> to the mesh_fem.
+
+    Uses FEM_PK for simplexes, FEM_QK for parallelepipeds etc.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_set(mesh_fem MF, 'classical discontinuous fem', int K[, @tscalar alpha[, ivec CVIDX]])</literal></para>
+
+    <para>       Assigns a classical (Lagrange polynomial) discontinuous fem or order K.
+
+    Similar to gf_mesh_fem_set(mesh_fem MF, 'classical fem') except that
+    FEM_PK_DISCONTINUOUS is used. Param <literal>alpha</literal> the node inset,
+    <latex style="text"><![CDATA[0 \leq alpha < 1]]></latex>, where 0 implies usual dof nodes, greater values
+    move the nodes toward the center of gravity, and 1 means that all
+    degrees of freedom collapse on the center of gravity.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_set(mesh_fem MF, 'qdim', int Q)</literal></para>
+
+    <para>         Change the <literal>Q</literal> dimension of the field that is interpolated by the mesh_fem.
+      
+      <literal>Q = 1</literal> means that the mesh_fem describes a scalar field, <literal>Q = N</literal> means
+      that the mesh_fem describes a vector field of dimension N.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_set(mesh_fem MF, 'reduction matrices', mat R, mat E)</literal></para>
+
+    <para>         Set the reduction and extension matrices and valid their use.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_set(mesh_fem MF, 'reduction', int s)</literal></para>
+
+    <para>         Set or unset the use of the reduction/extension matrices.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_set(mesh_fem MF, 'reduce meshfem', mat RM)</literal></para>
+
+    <para>         Set reduction mesh fem
+      This function selects the degrees of freedom of the finite element
+      method by selecting a set of independent vectors of the matrix RM.
+      The numer of columns of RM should corresponds to the number of degrees
+      of fredoom of the finite element method.  
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_set(mesh_fem MF, 'dof partition', ivec DOFP)</literal></para>
+
+    <para>         Change the 'dof_partition' array.
+      
+      <literal>DOFP</literal> is a vector holding a integer value for each convex of the mesh_fem.
+      See gf_mesh_fem_get(mesh_fem MF, 'dof partition') for a description of "dof partition".
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_fem_set(mesh_fem MF, 'set partial', ivec DOFs[, ivec RCVs])</literal></para>
+
+    <para>         Can only be applied to a partial mesh_fem. Change the subset of the
+      degrees of freedom of <literal>mf</literal>.
+
+      If <literal>RCVs</literal> is given, no FEM will be put on the convexes listed
+      in <literal>RCVs</literal>.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
-  
-  <refsection>
-    <title>Examples</title>
-
-    <para>Building a discontinuous mesh_fem mfdu to compute the gradient DU of a field U defined on a mesh_fem mf: </para>
-    <programlisting role="example"><![CDATA[ 
-mfdu = gf_mesh_fem(m);
-// use polynomials of degree 2, and no integration method
-gf_mesh_fem_set(mfdu,'classical discontinuous fem',2); 
-DU = gf_compute(mf,U,'gradient',mfdu);
- ]]></programlisting>
-  </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mesh_fem_get">gf_mesh_fem_get</link></member>
-      <member><link linkend="gf_mesh_fem">gf_mesh_fem</link></member>
-      <member><link linkend="gf_fem">gf_fem</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_get.xml b/interface/src/scilab/help/en_US/gf_mesh_get.xml
index cf83eaa..9c0919f 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_get.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_get.xml
@@ -9,229 +9,495 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mesh_get</refname>
-
-    <refpurpose>General mesh inquiry function. As this function does not modify the mesh object, a mesh_fem object handle can be used instead of a mesh handle.</refpurpose>
+    <refpurpose>  General mesh inquiry function. All these functions accept also a
+  mesh_fem argument instead of a mesh M (in that case, the mesh_fem
+  linked mesh will be used). 
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-int I = gf_mesh_get(M, 'dim')
-int N = gf_mesh_get(M, 'nbpts')
-int N = gf_mesh_get(M, 'nbcvs')
-mat PT = gf_mesh_get(M, 'pts'[, ivec PIDLST])
-ivec PTID = gf_mesh_get(M, 'pid')
-ivec CVID = gf_mesh_get(M, 'cvid')
-int I = gf_mesh_get(M, 'max pid')
-int I = gf_mesh_get(M, 'max cvid')
-[ivec PID,ivec IDX] = gf_mesh_get(M, 'pid from cvid'[,ivec CVLST])
-ivec V = gf_mesh_get(M, 'pid from coords', mat PT)
-ivec V = gf_mesh_get(M, 'cvid from pid', ivec PTID)
-ivec V = gf_mesh_get(M, 'orphaned pid')
-ivec V = gf_mesh_get(M, 'faces from pid', ivec PTID)
-imat CVFACELST = gf_mesh_get(M, 'faces from cvid', ivec CVLST[, 'merge'])
-imat CVFACELST = gf_mesh_get(M, 'outer faces' [, ivec CVLST])
-ivec BLST = gf_mesh_get(M, 'regions')
-imat CVFLST = gf_mesh_get(M, 'region', int rnum)
-mat E[,vec C] = gf_mesh_get(M, 'edges' [, ivec CVLST][,'merge'])
-mat E[,vec C] = gf_mesh_get(M, 'curved edges', int N, [, ivec CVLST])
-mat T = gf_mesh_get(M, 'triangulated surface', int N, [, ivec CVLST])
-mat N = gf_mesh_get(M, 'normal of face', int CV, int F[, int FPTNUM])
-mat N = gf_mesh_get(M, 'normal of faces', imat CVFLST)
-vec Q = gf_mesh_get(M, 'quality',[CVLST])
-vec A = gf_mesh_get(M, 'convex area',[CVLST])
-cvstruct CVS[, CV2STRUC] = gf_mesh_get(M, 'cvstruct',[CVLST])
-geotrans GT[, GT2STRUC] = gf_mesh_get(M, 'geotrans',[CVLST])
-gf_mesh_get(M, 'save', string FILENAME)
-string s = gf_mesh_get(M, 'char')
-gf_mesh_get(M,'export_to_vtk', filename, ... [,'ascii'][,'quality'])
-gf_mesh_get(M,'export_to_dx', filename, ...[,'ascii'][,'append'][,'as', name,[,'serie', serie_name]][,'edges'])
-int m = gf_mesh_get(M, 'memsize')
-</synopsis>
+    <synopsis>d = gf_mesh_get(mesh M, 'dim')</synopsis>
+    <synopsis>np = gf_mesh_get(mesh M, 'nbpts')</synopsis>
+    <synopsis>nc = gf_mesh_get(mesh M, 'nbcvs')</synopsis>
+    <synopsis>P = gf_mesh_get(mesh M, 'pts'[, ivec PIDs])</synopsis>
+    <synopsis>Pid = gf_mesh_get(mesh M, 'pid')</synopsis>
+    <synopsis>PIDs = gf_mesh_get(mesh M, 'pid in faces', imat CVFIDs)</synopsis>
+    <synopsis>PIDs = gf_mesh_get(mesh M, 'pid in cvids', imat CVIDs)</synopsis>
+    <synopsis>PIDs = gf_mesh_get(mesh M, 'pid in regions', imat RIDs)</synopsis>
+    <synopsis>PIDs = gf_mesh_get(mesh M, 'pid from coords', mat PTS[, scalar radius=0])</synopsis>
+    <synopsis>{Pid, IDx} = gf_mesh_get(mesh M, 'pid from cvid'[, imat CVIDs])</synopsis>
+    <synopsis>{Pts, IDx} = gf_mesh_get(mesh M, 'pts from cvid'[, imat CVIDs])</synopsis>
+    <synopsis>CVid = gf_mesh_get(mesh M, 'cvid')</synopsis>
+    <synopsis>m = gf_mesh_get(mesh M, 'max pid')</synopsis>
+    <synopsis>m = gf_mesh_get(mesh M, 'max cvid')</synopsis>
+    <synopsis>[E,C] = gf_mesh_get(mesh M, 'edges' [, CVLST][, 'merge'])</synopsis>
+    <synopsis>[E,C] = gf_mesh_get(mesh M, 'curved edges', int N [, CVLST])</synopsis>
+    <synopsis>PIDs = gf_mesh_get(mesh M, 'orphaned pid')</synopsis>
+    <synopsis>CVIDs = gf_mesh_get(mesh M, 'cvid from pid', ivec PIDs[, bool share=False])</synopsis>
+    <synopsis>CVFIDs = gf_mesh_get(mesh M, 'faces from pid', ivec PIDs)</synopsis>
+    <synopsis>CVFIDs = gf_mesh_get(mesh M, 'outer faces'[, CVIDs])</synopsis>
+    <synopsis>CVFIDs = gf_mesh_get(mesh M, 'faces from cvid'[, ivec CVIDs][, 'merge'])</synopsis>
+    <synopsis>[mat T] = gf_mesh_get(mesh M, 'triangulated surface', int Nrefine [,CVLIST])</synopsis>
+    <synopsis>N = gf_mesh_get(mesh M, 'normal of face', int cv, int f[, int nfpt])</synopsis>
+    <synopsis>N = gf_mesh_get(mesh M, 'normal of faces', imat CVFIDs)</synopsis>
+    <synopsis>Q = gf_mesh_get(mesh M, 'quality'[, ivec CVIDs])</synopsis>
+    <synopsis>A = gf_mesh_get(mesh M, 'convex area'[, ivec CVIDs])</synopsis>
+    <synopsis>A = gf_mesh_get(mesh M, 'convex radius'[, ivec CVIDs])</synopsis>
+    <synopsis>{S, CV2S} = gf_mesh_get(mesh M, 'cvstruct'[, ivec CVIDs])</synopsis>
+    <synopsis>{GT, CV2GT} = gf_mesh_get(mesh M, 'geotrans'[, ivec CVIDs])</synopsis>
+    <synopsis>RIDs = gf_mesh_get(mesh M, 'boundaries')</synopsis>
+    <synopsis>RIDs = gf_mesh_get(mesh M, 'regions')</synopsis>
+    <synopsis>RIDs = gf_mesh_get(mesh M, 'boundary')</synopsis>
+    <synopsis>CVFIDs = gf_mesh_get(mesh M, 'region', ivec RIDs)</synopsis>
+    <synopsis>gf_mesh_get(mesh M, 'save', string filename)</synopsis>
+    <synopsis>s = gf_mesh_get(mesh M, 'char')</synopsis>
+    <synopsis>gf_mesh_get(mesh M, 'export to vtk', string filename, ... [,'ascii'][,'quality'])</synopsis>
+    <synopsis>gf_mesh_get(mesh M, 'export to dx', string filename, ... [,'ascii'][,'append'][,'as',string name,[,'serie',string serie_name]][,'edges'])</synopsis>
+    <synopsis>gf_mesh_get(mesh M, 'export to pos', string filename[, string name])</synopsis>
+    <synopsis>z = gf_mesh_get(mesh M, 'memsize')</synopsis>
+    <synopsis>gf_mesh_get(mesh M, 'display')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  General mesh inquiry function. All these functions accept also a
+  mesh_fem argument instead of a mesh M (in that case, the mesh_fem
+  linked mesh will be used). 
+</para>
+  </refsection>
 
-    <para>General mesh inquiry function. All these functions accept also a
-    mesh_fem argument instead of a mesh M (in that case, the mesh_fem linked
-    mesh will be used). </para>
-
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-	<para>gf_mesh_get(M, 'dim') : return the dimension of the mesh (2 for a planar mesh, etc...).</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'nbpts') : return the number of points of the mesh. Please note that these points might not be numbered from 1 to N.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'nbcvs') : return the number of convexes of the mesh. Please note that these convexes might not be numbered from 1 to N.</para>
-      </listitem>
-
-      <listitem>
-	<para>PT = gf_mesh_get(M, 'pts' [, PIDLST]) : return the list of point coordinates of the mesh M, each point being stored in a column of PT. 
-	  If PIDLST is specified, only those points are listed. Otherwise, PT will have gf_mesh_get(M, 'max pid') rows, which might be greater 
-	  than gf_mesh_get(M, 'nbpts') (if you destroyed some convexes or points in the mesh for example). 
-	  The columns corresponding to inexistent points will be filled with NaN. You can use gf_mesh_get(M, 'pid') to filter such invalid points.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'pid') : return the list of point numbers stored in M (their numbering is not supposed to be contiguous 
-	  from 1 to gf_mesh_get(M,'nbpts'), especially if you destroyed some convexes) in a row vector.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'cvid') : return the list of convex numbers composing M (their numbering is not supposed to be contiguous 
-	  from 1 to gf_mesh_get('nbcvs'), especially if you destroyed some convexes) in a row vector.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'max pid') : return the highest point ID in the mesh (this is the same value as MAX(gf_mesh_get(M, 'pts id')), 
-	  but it won't be equal to gf_mesh_get(M, 'nbpts') if some points have been destroyed and the mesh was not "repacked" 
-	  with gf_mesh_set(M, 'optimize structure')).</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'max cvid') : return the maximum ID of all convexes in the mesh (see 'max pid').</para>
-      </listitem>
-
-      <listitem>
-	<para>[PID,IDX]=gf_mesh_get(M, 'pid from cvid'[, CVLST]) : can be used in order to find the points of the convexes listed in CVLST 
-	  (if not used, then the points of all convexes will be returned, which is equivalent to CVLST=1:gf_mesh_get(M,'max cvid')). 
-	  Since the convexes might have different number of points, the result is stored as an indirect sparse array: IDX is a row vector, 
-	  which length is equal to length(CVLST)+1, and PID is a row vector containing the concatenated list of points of each convex in cvlst. 
-	  Each entry of IDX is the position of the corresponding convex point list in PID. 
-	  For example, the list of points of the second convex is PID(IDX(2):IDX(3)-1).</para>
-	<para>If you specified convex numbers which do not exist in CVLST, their point list will be empty.</para>
-      </listitem>
-
-      <listitem>
-	<para>V=gf_mesh_get(M, 'pid from coords', PT) : can be used to retrieve the point indices from their coordinates. 
-	  PT is an array containing a list of these point coordinates. On return, V is a row vector containing the id of the points which 
-	  are part of the mesh, and -1 for those which where not found in the mesh (a small error of about 1e-6 is allowed 
-	  in the coordinates - this might be important if your mesh is very small!).</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'cvid from pid', PTID) : return the list of convexes that share the points numbers given in PTID in a row vector 
-	  (possibly empty).</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'faces from pid', PTID) : return the list of convexes faces of which every vertex is in PTID. 
-	  On return, the first row of V contains the convex number, and the second row contains the face number.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'faces from cvid', CVLST,[ 'merge']) : return the list of convex faces from a list of convex numbers, 
-	  and optionally merges the common faces of two convexes from CVLST.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'outer faces' [, CVLST]) : return the list of faces which are not shared by two convexes 
-	  (i.e. the faces on the boundary of the mesh). The search can be restricted to the optional argument CVLST.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'regions') : return the list of valid regions (created with gf_mesh_set(M,'region')). 
-	  Regions are sets of convexes and/or convexes faces, stored in the mesh, and refered by a simple region number. 
-	  They are typically used for the application of boundary conditions.</para>
-      </listitem>
-
-      <listitem>
-	<para>CVFLST=gf_mesh_get(M, 'region', rnum) : return the list of faces on the boundary rnum. On output, the first row of CVFLST 
-	  contains the convex numbers, and the second row contains the face numbers (0 when the whole convex is is the region). 
-	  See also gf_mesh_fem_get(MF, 'basic dof on region').</para>
-      </listitem>
-
-      <listitem>
-	<para>E=gf_mesh_get(M, 'edges' [, CVLST][, 'merge']) : warning This function has been obsoleted by mesh slice objects </para>
-      </listitem>
-
-      <listitem>
-	<para>E=gf_mesh_get(M, 'curved edges', N, [, CVLST]) : warning This function has been obsoleted by mesh slice objects</para>
-      </listitem>
-
-      <listitem>
-	<para>T=gf_mesh_get(M, 'triangulated surface', N, [, CVLST]) : warning This function has been obsoleted by mesh slice objects</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'normal of face', CV, F[, FPTNUM]) and</para>
-	<para>gf_mesh_get(M, 'normal of faces', CVFLST) : evaluates the normal of convex faces. The first form returns the normal of convex 
-	  CV for its face F, evaluated at the FPTNUMth point of the face. If FPTNUM is not specified, then the normal is evaluated at each 
-	  geometrical node of the face. The second form returns the normal for a set of faces of convex, each normal being computed at the 
-	  center of the face (CVFLST is supposed to contain convex numbers at its first row and convex face number in its second row).</para>
-      </listitem>
-      
-      <listitem>
-	<para>gf_mesh_get(M, 'quality',[CVLST]) : return an estimate of the convex quality (in a finite element sense).</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'convex area',[CVLST]) : return an estimate the convex areas.</para>
-      </listitem>
-
-      <listitem>
-	<para>[CVS,CV2STRUC]=gf_mesh_get(M, 'cvstruct',[CVLST]) : return an array of all the convex structure used in the mesh 
-	  (optionally restricted to the convexes of CVLST), and a second optional output vector CV2STRUCT which maps the convexes indices 
-	  in CVLST to the indice of its structure in CVS.</para>
-      </listitem>
-
-      <listitem>
-	<para>[GT,GT2STRUCT]=gf_mesh_get(M, 'geotrans',[CVLST]) : return an array of the geometric transformations 
-	  (similar to gf_mesh_get(M, 'cvstruct').</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'save', filename) : save the mesh object to an ASCII file. This mesh can be restored later with 
-	  gf_mesh('load', filename). You may also use gf_mesh_get(M, 'char') to obtain a string description of the mesh M, that 
-	  can be saved to files, or restored with gf_mesh('from string').</para>
-      </listitem>
+    <listitem>
+    <para><literal>d = gf_mesh_get(mesh M, 'dim')</literal></para>
+
+    <para>       Get the dimension of the mesh (2 for a 2D mesh, etc).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>np = gf_mesh_get(mesh M, 'nbpts')</literal></para>
+
+    <para>       Get the number of points of the mesh.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>nc = gf_mesh_get(mesh M, 'nbcvs')</literal></para>
+
+    <para>         Get the number of convexes of the mesh.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>P = gf_mesh_get(mesh M, 'pts'[, ivec PIDs])</literal></para>
+
+    <para>       Return the list of point coordinates of the mesh.
+
+    Each column of the returned matrix contains the coordinates of one
+    point. If the optional argument <literal>PIDs</literal> was given, only the points
+    whose #id is listed in this vector are returned. Otherwise, the
+    returned matrix will have gf_mesh_get(mesh M, 'max_pid') columns, which might
+    be greater than gf_mesh_get(mesh M, 'nbpts') (if some points of the mesh have
+    been destroyed and no call to gf_mesh_set(mesh M, 'optimize structure') have
+    been issued). The columns corresponding to deleted points will be
+    filled with NaN. You can use gf_mesh_get(mesh M, 'pid') to filter such invalid
+    points.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Pid = gf_mesh_get(mesh M, 'pid')</literal></para>
+
+    <para>       Return the list of points #id of the mesh.
+
+    Note that their numbering is not supposed to be contiguous from
+    1 to gf_mesh_get(mesh M, 'nbpts'),
+    especially if some points have been removed from the mesh. You
+    can use gf_mesh_set(mesh M, 'optimize_structure') to enforce a contiguous
+    numbering. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>PIDs = gf_mesh_get(mesh M, 'pid in faces', imat CVFIDs)</literal></para>
+
+    <para>       Search point #id listed in <literal>CVFIDs</literal>.
+
+    <literal>CVFIDs</literal> is a two-rows matrix, the first row lists convex #ids,
+    and the second lists face numbers. On return, <literal>PIDs</literal> is a
+    vector containing points #id.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>PIDs = gf_mesh_get(mesh M, 'pid in cvids', imat CVIDs)</literal></para>
+
+    <para>         Search point #id listed in <literal>CVIDs</literal>.
       
-      <listitem>
-	<para>gf_mesh_get(M,'export_to_vtk', filename, ... [,'ascii'][,'quality']) : export a mesh to a VTK file. 
-	  If 'quality' is specified, an estimation of the quality of each convex will be written to the file 
-	  (see gf_slice_get('export_to_vtk') for more details).</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M,'export_to_dx', filename, ...[,'ascii'] [,'append'] [,'as', name,[,'serie', serie_name]][,'edges']) : export a mesh 
-	  to an OpenDX file (see gf_slice_get('export_to_dx') for more details).</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_mesh_get(M, 'memsize') : return the amount of memory (in bytes) used by the mesh object.</para>
-      </listitem>
-    </itemizedlist>
+      <literal>PIDs</literal> is a vector containing points #id.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>PIDs = gf_mesh_get(mesh M, 'pid in regions', imat RIDs)</literal></para>
+
+    <para>       Search point #id listed in <literal>RIDs</literal>.
+
+    <literal>PIDs</literal> is a vector containing points #id.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>PIDs = gf_mesh_get(mesh M, 'pid from coords', mat PTS[, scalar radius=0])</literal></para>
+
+    <para>       Search point #id whose coordinates are listed in <literal>PTS</literal>.
+
+    <literal>PTS</literal> is an array containing a list of point coordinates. On
+    return, <literal>PIDs</literal> is a vector containing points
+    #id for each point found in <literal>eps</literal> range, and -1 for those
+    which where not found in the mesh.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{Pid, IDx} = gf_mesh_get(mesh M, 'pid from cvid'[, imat CVIDs])</literal></para>
+
+    <para>       Return the points attached to each convex of the mesh.
+
+    If <literal>CVIDs</literal> is omitted, all the convexes will be considered
+    (equivalent to <literal>CVIDs = gf_mesh_get(mesh M, 'max cvid')</literal>). <literal>IDx</literal> is a
+    vector, length(IDx) = length(CVIDs)+1. <literal>Pid</literal> is a
+    vector containing the concatenated list of #id of
+    points of each convex in <literal>CVIDs</literal>. Each entry of <literal>IDx</literal> is the
+    position of the corresponding convex point list in <literal>Pid</literal>. Hence,
+    for example, the list of #id of points of the second convex is
+    Pid(IDx(2):IDx(3)-1).
+
+    If <literal>CVIDs</literal> contains convex #id which do not exist in the mesh,
+    their point list will be empty.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{Pts, IDx} = gf_mesh_get(mesh M, 'pts from cvid'[, imat CVIDs])</literal></para>
+
+    <para>       Search point listed in <literal>CVID</literal>.
+
+    If <literal>CVIDs</literal> is omitted, all the convexes will be considered
+    (equivalent to <literal>CVIDs = gf_mesh_get(mesh M, 'max cvid')</literal>). <literal>IDx</literal> is a
+    vector, length(IDx) = length(CVIDs)+1. <literal>Pts</literal> is a
+    vector containing the concatenated list of points
+    of each convex in <literal>CVIDs</literal>. Each entry of <literal>IDx</literal> is the position
+    of the corresponding convex point list in <literal>Pts</literal>. Hence, for
+    example, the list of points of the second convex is
+    Pts(:,IDx(2):IDx(3)-1).
+
+    If <literal>CVIDs</literal> contains convex #id which do not exist in the mesh,
+    their point list will be empty.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>CVid = gf_mesh_get(mesh M, 'cvid')</literal></para>
+
+    <para>       Return the list of all convex #id.
+
+    Note that their numbering is not supposed to be contiguous from
+    1 to gf_mesh_get(mesh M, 'nbcvs'),
+    especially if some points have been removed from the mesh. You
+    can use gf_mesh_set(mesh M, 'optimize_structure') to enforce a contiguous
+    numbering. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>m = gf_mesh_get(mesh M, 'max pid')</literal></para>
+
+    <para>         Return the maximum #id of all points in the mesh (see 'max cvid').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>m = gf_mesh_get(mesh M, 'max cvid')</literal></para>
+
+    <para>         Return the maximum #id of all convexes in the mesh (see 'max pid').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>[E,C] = gf_mesh_get(mesh M, 'edges' [, CVLST][, 'merge'])</literal></para>
+
+    <para>       [OBSOLETE FUNCTION! will be removed in a future release]
+
+    Return the list of edges of mesh M for the convexes listed in the
+    row vector CVLST. E is a 2 x nb_edges matrix containing point
+    indices. If CVLST is omitted, then the edges of all convexes are
+    returned. If CVLST has two rows then the first row is supposed to
+    contain convex numbers, and the second face numbers, of which the
+    edges will be returned.  If 'merge' is indicated, all common
+    edges of convexes are merged in a single edge.  If the optional
+    output argument C is specified, it will contain the convex number
+    associated with each edge.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>[E,C] = gf_mesh_get(mesh M, 'curved edges', int N [, CVLST])</literal></para>
+
+    <para>       [OBSOLETE FUNCTION! will be removed in a future release]
+
+    More sophisticated version of gf_mesh_get(mesh M, 'edges') designed for
+    curved elements. This one will return N (N>=2) points of the
+    (curved) edges. With N==2, this is equivalent to
+    gf_mesh_get(mesh M, 'edges'). Since the points are no more always part of
+    the mesh, their coordinates are returned instead of points
+    number, in the array E which is a [ mesh_dim x 2 x nb_edges ]
+    array.  If the optional output argument C is specified, it will
+    contain the convex number associated with each edge.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>PIDs = gf_mesh_get(mesh M, 'orphaned pid')</literal></para>
+
+    <para>         Search point #id which are not linked to a convex.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>CVIDs = gf_mesh_get(mesh M, 'cvid from pid', ivec PIDs[, bool share=False])</literal></para>
+
+    <para>       Search convex #ids related with the point #ids given in <literal>PIDs</literal>.
+    
+    If <literal>share=False</literal>, search convex whose vertex #ids are in <literal>PIDs</literal>.
+    If <literal>share=True</literal>, search convex #ids that share the point #ids
+    given in <literal>PIDs</literal>. <literal>CVIDs</literal> is a  vector (possibly
+    empty).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>CVFIDs = gf_mesh_get(mesh M, 'faces from pid', ivec PIDs)</literal></para>
+
+    <para>       Return the convex faces whose vertex #ids are in <literal>PIDs</literal>.
+
+    <literal>CVFIDs</literal> is a two-rows matrix, the first row lists convex #ids,
+    and the second lists face numbers (local number in the convex).
+    For a convex face to be returned, EACH of its points have to be
+    listed in <literal>PIDs</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>CVFIDs = gf_mesh_get(mesh M, 'outer faces'[, CVIDs])</literal></para>
 
-  </refsection>
+    <para>       Return the faces which are not shared by two convexes.
+
+    <literal>CVFIDs</literal> is a two-rows matrix, the first row lists convex #ids,
+    and the second lists face numbers (local number in the convex).
+    If <literal>CVIDs</literal> is not given, all convexes are considered, and it
+    basically returns the mesh boundary. If <literal>CVIDs</literal> is given, it
+    returns the boundary of the convex set whose #ids are listed
+    in <literal>CVIDs</literal>.
+    </para>
+    </listitem>
 
-  <refsection>
-    <title>Examples</title>
+    <listitem>
+    <para><literal>CVFIDs = gf_mesh_get(mesh M, 'faces from cvid'[, ivec CVIDs][, 'merge'])</literal></para>
+
+    <para>       Return a list of convexes faces from a list of convex #id.
+
+    <literal>CVFIDs</literal> is a two-rows matrix, the first row lists convex #ids,
+    and the second lists face numbers (local number in the convex).
+    If <literal>CVIDs</literal> is not given, all convexes are considered. The optional
+    argument 'merge' merges faces shared by the convex of <literal>CVIDs</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>[mat T] = gf_mesh_get(mesh M, 'triangulated surface', int Nrefine [,CVLIST])</literal></para>
+
+    <para>       [DEPRECATED FUNCTION! will be removed in a future release]
+
+    Similar function to gf_mesh_get(mesh M, 'curved edges') : split (if
+    necessary, i.e. if the geometric transformation if non-linear)
+    each face into sub-triangles and return their coordinates in T
+    (see also gf_compute('eval on P1 tri mesh'))
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>N = gf_mesh_get(mesh M, 'normal of face', int cv, int f[, int nfpt])</literal></para>
+
+    <para>       Evaluates the normal of convex <literal>cv</literal>, face <literal>f</literal> at the <literal>nfpt</literal> point of the face.
+
+    If <literal>nfpt</literal> is not specified, then the normal is evaluated at each
+    geometrical node of the face.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>N = gf_mesh_get(mesh M, 'normal of faces', imat CVFIDs)</literal></para>
+
+    <para>       Evaluates (at face centers) the normals of convexes.
+
+    <literal>CVFIDs</literal> is supposed a two-rows matrix, the first row lists convex
+    #ids, and the second lists face numbers (local number in the convex).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Q = gf_mesh_get(mesh M, 'quality'[, ivec CVIDs])</literal></para>
+
+    <para>       Return an estimation of the quality of each convex (<latex style="text"><![CDATA[0 \leq Q \leq 1]]></latex>).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>A = gf_mesh_get(mesh M, 'convex area'[, ivec CVIDs])</literal></para>
+
+    <para>       Return an estimate of the area of each convex.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>A = gf_mesh_get(mesh M, 'convex radius'[, ivec CVIDs])</literal></para>
 
-    <programlisting role="example"> 
-  Add an example here
- </programlisting>
+    <para>       Return an estimate of the radius of each convex.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{S, CV2S} = gf_mesh_get(mesh M, 'cvstruct'[, ivec CVIDs])</literal></para>
+
+    <para>       Return an array of the convex structures.
+
+    If <literal>CVIDs</literal> is not given, all convexes are considered. Each convex
+    structure is listed once in <literal>S</literal>, and <literal>CV2S</literal> maps the convexes
+    indice in <literal>CVIDs</literal> to the indice of its structure in <literal>S</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{GT, CV2GT} = gf_mesh_get(mesh M, 'geotrans'[, ivec CVIDs])</literal></para>
+
+    <para>       Returns an array of the geometric transformations.
+
+    See also gf_mesh_get(mesh M, 'cvstruct').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>RIDs = gf_mesh_get(mesh M, 'boundaries')</literal></para>
+
+    <para>       DEPRECATED FUNCTION. Use 'regions' instead. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>RIDs = gf_mesh_get(mesh M, 'regions')</literal></para>
+
+    <para>       Return the list of valid regions stored in the mesh.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>RIDs = gf_mesh_get(mesh M, 'boundary')</literal></para>
+
+    <para>       DEPRECATED FUNCTION. Use 'region' instead. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>CVFIDs = gf_mesh_get(mesh M, 'region', ivec RIDs)</literal></para>
+
+    <para>       Return the list of convexes/faces on the regions <literal>RIDs</literal>.
+
+    <literal>CVFIDs</literal> is a two-rows matrix, the first row lists convex #ids,
+    and the second lists face numbers (local number in the convex).
+    (and 0 when the whole convex is in the
+    regions).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_get(mesh M, 'save', string filename)</literal></para>
+
+    <para>       Save the mesh object to an ascii file.
+
+    This mesh can be restored with gf_mesh('load', filename).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>s = gf_mesh_get(mesh M, 'char')</literal></para>
+
+    <para>       Output a string description of the mesh.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_get(mesh M, 'export to vtk', string filename, ... [,'ascii'][,'quality'])</literal></para>
+
+    <para>       Exports a mesh to a VTK file .
+
+    If 'quality' is specified, an estimation of the quality of each
+    convex will be written to the file.
+
+    See also gf_mesh_fem_get(mesh_fem MF, 'export to vtk'), gf_slice_get(slice S, 'export to vtk').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_get(mesh M, 'export to dx', string filename, ... [,'ascii'][,'append'][,'as',string name,[,'serie',string serie_name]][,'edges'])</literal></para>
+
+    <para>       Exports a mesh to an OpenDX file.
+
+    See also gf_mesh_fem_get(mesh_fem MF, 'export to dx'), gf_slice_get(slice S, 'export to dx').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_get(mesh M, 'export to pos', string filename[, string name])</literal></para>
+
+    <para>       Exports a mesh to a POS file .
+
+    See also gf_mesh_fem_get(mesh_fem MF, 'export to pos'), gf_slice_get(slice S, 'export to pos').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>z = gf_mesh_get(mesh M, 'memsize')</literal></para>
+
+    <para>         Return the amount of memory (in bytes) used by the mesh.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_get(mesh M, 'display')</literal></para>
+
+    <para>         displays a short summary for a mesh object.
+    </para>
+    </listitem>
+
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mesh_set">gf_mesh_set</link></member>
-      <member><link linkend="gf_mesh">gf_mesh</link></member>
-      <member><link linkend="gf_plot_mesh">gf_plot_mesh</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_im.xml b/interface/src/scilab/help/en_US/gf_mesh_im.xml
index 0003b10..9664bcf 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_im.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_im.xml
@@ -9,81 +9,103 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mesh_im</refname>
-
-    <refpurpose>General constructor for MeshIm object (integration methods on
-    a mesh).</refpurpose>
+    <refpurpose>  This object represents an integration method defined on a whole mesh (an 
+  potentialy on its boundaries).
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-mesh_im MIM = gf_mesh_im(mesh M [, { integ | int }])
-mesh_im MIM[,M] = gf_mesh_im('load', string filename[,mesh M])
-mesh_im MIM[,M] = gf_mesh_im('from string', string S [,mesh M])
-mesh_im MIM = gf_mesh_im('clone', mesh_im MIM0)
-    </synopsis>
+    <synopsis>MIM = gf_mesh_im('load', string fname[, mesh m])</synopsis>
+    <synopsis>MIM = gf_mesh_im('from string', string s[, mesh m])</synopsis>
+    <synopsis>MIM = gf_mesh_im('clone', mesh_im mim)</synopsis>
+    <synopsis>MIM = gf_mesh_im('levelset', mesh_levelset mls, string where, integ im[, integ im_tip[, integ im_set]])</synopsis>
+    <synopsis>MIM = gf_mesh_im(mesh m, [{integ im|int im_degree}])</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for mesh_im objects.</para>
+
+    <para>  This object represents an integration method defined on a whole mesh (an 
+  potentialy on its boundaries).
+</para>
+  </refsection>
 
-    <para>General constructor for MeshIm object (integration methods on a
-    mesh). </para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_mesh_im(mesh m[list(integ im|int im_degree)]) : Return a getfem handle to the newly created MeshIm object. For
-	  convenience, optional arguments ('im' or 'im_degree') can be provided, in that case a call to gf_mesh_im_set(mim, 'integ', ..) 
-	  is issued with these arguments.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_im('load', string fname[, Mesh m]) : Load a MeshIm from a
-        file. If the mesh <literal>m</literal> is not supplied (this kind of
-        file does not store the mesh), then it is read from the file and its
-        descriptor is returned as the second output argument.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_im('from string', string s[, mesh M]) : Create a MeshIm
-        object from its string description. See also
-        gf_mesh_im_get(mim,'char')</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_im('clone', MeshIm mim2) : Create a copy of a
-        MeshIm.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_im('levelset', LevelSet ls, string where, Integ im[, Integ im_tip]) : Build an integration method conformal to a partition
-        defined implicitely by a levelset. The <literal>where</literal> argument define the domain of integration with respect to the
-        levelset, it has to be chosen among 'ALL', 'INSIDE', 'OUTSIDE' and 'BOUNDARY'.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_im('.mesh',Mesh m, [list(Integ im|int im_degree)]) : Build
-        a new MeshIm object. For convenience, optional arguments
-        (<literal>im</literal> or <literal>im_degree</literal>) can be
-        provided, in that case a call to MeshIm.integ() is issued with these
-        arguments.</para>
-      </listitem>
+    <listitem>
+    <para><literal>MIM = gf_mesh_im('load', string fname[, mesh m])</literal></para>
+
+    <para>         Load a mesh_im from a file.
+
+      If the mesh <literal>m</literal> is not supplied (this kind of file does not store the
+      mesh), then it is read from the file and its descriptor is returned as
+      the second output argument.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MIM = gf_mesh_im('from string', string s[, mesh m])</literal></para>
+
+    <para>         Create a mesh_im object from its string description.
+
+      See also <literal></literal>gf_mesh_im_get(mesh_im MI, 'char')<literal></literal>
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MIM = gf_mesh_im('clone', mesh_im mim)</literal></para>
+
+    <para>         Create a copy of a mesh_im.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MIM = gf_mesh_im('levelset', mesh_levelset mls, string where, integ im[, integ im_tip[, integ im_set]])</literal></para>
+
+    <para>         Build an integration method conformal to a partition defined
+      implicitely by a levelset.
+
+      The <literal>where</literal> argument define the domain of integration with respect to
+      the levelset, it has to be chosen among 'ALL', 'INSIDE', 'OUTSIDE' and
+      'BOUNDARY'.
+
+      CAUTION: this integration method will be defined only on the element
+      cut by the level-set. For the 'ALL', 'INSIDE' and 'OUTSIDE' options
+      it is mandatory to use the method <literal></literal>gf_mesh_im_set(mesh_im MI, 'integ')<literal></literal> to define
+      the integration method on the remaining elements.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MIM = gf_mesh_im(mesh m, [{integ im|int im_degree}])</literal></para>
+
+    <para>         Build a new mesh_im object.
+
+      For convenience, optional arguments (<literal>im</literal> or <literal>im_degree</literal>) can be
+      provided, in that case a call to <literal></literal>gf_mesh_im_get(mesh_im MI, 'integ')<literal></literal> is issued
+      with these arguments.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mesh_im_set">gf_mesh_im_set</link></member>
-      <member><link linkend="gf_mesh_im_get">gf_mesh_im_get</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_im_get.xml b/interface/src/scilab/help/en_US/gf_mesh_im_get.xml
index c7c7668..fa6eada 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_im_get.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_im_get.xml
@@ -9,117 +9,145 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mesh_im_get</refname>
-
-    <refpurpose>General function extracting information from mesh_im
-    objects.</refpurpose>
+    <refpurpose>  General function extracting information from mesh_im objects.
+  </refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-string IMLST[, ivec CV2IM] = gf_mesh_im_get(MIM, 'integ' [, ivec CVLST])
-ivec CVLST = gf_mesh_im_get(MIM, 'convex_index')
-mat M = gf_mesh_fem_get(MIM, 'eltm', eltm MET, int CV [, int FACE])
-gf_mesh_im_get(MIM, 'save', string filename, ['with mesh'])
-string S=gf_mesh_im_get(M, 'char' [,'with mesh'])
-mesh M=gf_mesh_im_get(MIM, 'linked mesh')
-M=gf_mesh_im_get(MIM, 'memsize')
-    </synopsis>
+    <synopsis>{I, CV2I} = gf_mesh_im_get(mesh_im MI, 'integ'[, mat CVids])</synopsis>
+    <synopsis>CVids = gf_mesh_im_get(mesh_im MI, 'convex_index')</synopsis>
+    <synopsis>M = gf_mesh_im_get(mesh_im MI, 'eltm', eltm em, int cv [, int f])</synopsis>
+    <synopsis>Ip = gf_mesh_im_get(mesh_im MI, 'im_nodes'[, mat CVids])</synopsis>
+    <synopsis>gf_mesh_im_get(mesh_im MI, 'save',string filename[, 'with mesh'])</synopsis>
+    <synopsis>gf_mesh_im_get(mesh_im MI, 'char'[,'with mesh'])</synopsis>
+    <synopsis>gf_mesh_im_get(mesh_im MI, 'display')</synopsis>
+    <synopsis>m = gf_mesh_im_get(mesh_im MI, 'linked mesh')</synopsis>
+    <synopsis>z = gf_mesh_im_get(mesh_im MI, 'memsize')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
-
-    <itemizedlist>
-      <listitem>
-        <para>list(I, CV2I) = gf_mesh_im_get(mim,'integ'[, mat CVids]) Return
-        a list of integration methods used by the MeshIm. <literal>I</literal>
-        is an array of all Integ objects found in the convexes given in
-        <literal>CVids</literal>. If <literal>CV2I</literal> was supplied as
-        an output argument, it contains, for each convex listed in
-        <literal>CVids</literal>, the index of its correspounding integration
-        method in <literal>I</literal>. Convexes which are not part of the
-        mesh, or convexes which do not have any integration method have their
-        correspounding entry in <literal>CV2I</literal> set to -1.</para>
-      </listitem>
-
-      <listitem>
-        <para>CVids = gf_mesh_im_get(mim,'convex_index') Return the list of
-        convexes who have a integration method. Convexes who have the dummy
-        IM_NONE method are not listed.</para>
-      </listitem>
-
-      <listitem>
-        <para>M = gf_mesh_im_get(mim,'eltm',Eltm em, int cv [int f]) Return
-        the elementary matrix (or tensor) integrated on the convex
-        <literal>cv</literal>. </para>
-
-        <para>**WARNING** Be sure that the fem used for the construction of
-        <literal>em</literal> is compatible with the fem assigned to element
-        <literal>cv</literal> ! This is not checked by the function ! If the
-        argument <literal>f</literal> is given, then the elementary tensor is
-        integrated on the face <literal>f</literal> of <literal>cv</literal>
-        instead of the whole convex.</para>
-      </listitem>
-
-      <listitem>
-        <para>Ip = gf_mesh_im_get(mim,'im_nodes'[, mat CVids]) Return the
-        coordinates of the integration points, with their weights.
-        <literal>CVids</literal> may be a list of convexes, or a list of
-        convex faces, such as returned by gf_mesh_get(M,'region')</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_im_get(mim,'save',string filename[, 'with mesh']) Saves
-        a MeshIm in a text file (and optionaly its linked mesh object).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_im_get(mim,'char'[,'with mesh']) Output a string
-        description of the MeshIm. By default, it does not include the
-        description of the linked Mesh object.</para>
-      </listitem>
-
-      <listitem>
-        <para>m = gf_mesh_im_get(mim,'linked mesh') Returns a reference to the
-        Mesh object linked to <literal>mim</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>z = gf_mesh_im_get(mim,'memsize') Return the amount of memory
-        (in bytes) used by the MeshIm object. The result does not take into
-        account the linked Mesh object.</para>
-      </listitem>
-    </itemizedlist>
+    <para>  General function extracting information from mesh_im objects.
+  </para>
   </refsection>
 
   <refsection>
-    <title>Examples</title>
-
-    <programlisting role="example"><![CDATA[ 
-cvid = gf_mesh_get(mim,'cvid');
-[f,c2f] = gf_mesh_im_get(mim, 'integ');
-sf = list();
-for i=1:size(f), sf(i)=gf_integ_get('char',f(i)); end;
-for i=1:size(c2f)
-  disp(sprintf('the integration of convex %d is %s', cvid(i),sf(i)));
-end
- ]]></programlisting>
+    <title>Command list</title>
+
+    <itemizedlist>
+    <listitem>
+    <para><literal>{I, CV2I} = gf_mesh_im_get(mesh_im MI, 'integ'[, mat CVids])</literal></para>
+
+    <para>       Return a list of integration methods used by the mesh_im.
+
+    <literal>I</literal> is an array of all integ objects found in the convexes
+    given in <literal>CVids</literal>. If <literal>CV2I</literal> was supplied as an output argument, it
+    contains, for each convex listed in <literal>CVids</literal>, the index of its
+    correspounding integration method in <literal>I</literal>.
+
+    Convexes which are not part of the mesh, or convexes which do
+    not have any integration method have their correspounding entry
+    in <literal>CV2I</literal> set to -1.
+    
+
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>CVids = gf_mesh_im_get(mesh_im MI, 'convex_index')</literal></para>
+
+    <para>       Return the list of convexes who have a integration method.
+
+    Convexes who have the dummy IM_NONE method are not listed.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_mesh_im_get(mesh_im MI, 'eltm', eltm em, int cv [, int f])</literal></para>
+
+    <para>       Return the elementary matrix (or tensor) integrated on the convex <literal>cv</literal>.
+
+    **WARNING**
+
+    Be sure that the fem used for the construction of <literal>em</literal> is compatible
+    with the fem assigned to element <literal>cv</literal> ! This is not checked by the
+    function ! If the argument <literal>f</literal> is given, then the elementary tensor
+    is integrated on the face <literal>f</literal> of <literal>cv</literal> instead of the whole convex.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Ip = gf_mesh_im_get(mesh_im MI, 'im_nodes'[, mat CVids])</literal></para>
+
+    <para>       Return the coordinates of the integration points, with their weights.
+
+    <literal>CVids</literal> may be a list of convexes, or a list of convex faces, such
+    as returned by gf_mesh_get(mesh M, 'region')
+
+    **WARNING**
+
+    Convexes which are not part of the mesh, or convexes which
+    do not have an approximate integration method don't have
+    their correspounding entry (this has no meaning for exact
+    integration methods!).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_im_get(mesh_im MI, 'save',string filename[, 'with mesh'])</literal></para>
+
+    <para>         Saves a mesh_im in a text file (and optionaly its linked mesh object).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_im_get(mesh_im MI, 'char'[,'with mesh'])</literal></para>
+
+    <para>         Output a string description of the mesh_im.
+      
+      By default, it does not include the description of the linked
+      mesh object.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_im_get(mesh_im MI, 'display')</literal></para>
+
+    <para>         displays a short summary for a mesh_im object.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>m = gf_mesh_im_get(mesh_im MI, 'linked mesh')</literal></para>
+
+    <para>       Returns a reference to the mesh object linked to <literal>mim</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>z = gf_mesh_im_get(mesh_im MI, 'memsize')</literal></para>
+
+    <para>       Return the amount of memory (in bytes) used by the mesh_im object.
+
+    The result does not take into account the linked mesh object.
+    </para>
+    </listitem>
+
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mesh_im_set">gf_mesh_im_set</link></member>
-      <member><link linkend="gf_mesh_im">gf_mesh_im</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_im_set.xml b/interface/src/scilab/help/en_US/gf_mesh_im_set.xml
index a9bc19d..da922e5 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_im_set.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_im_set.xml
@@ -9,66 +9,65 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mesh_im_set</refname>
-
-    <refpurpose>General function for modifying mesh_im objects</refpurpose>
+    <refpurpose>  General function for modifying mesh_im objects
+  </refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-gf_mesh_im_set(MIM, 'integ', { integ im | int IMDEGREE }, [, ivec CVIDX])
-gf_mesh_im_set(MIM, 'adapt')
-    </synopsis>
+    <synopsis>gf_mesh_im_set(mesh_im MI, 'integ',{integ im|int im_degree}[, ivec CVids])</synopsis>
+    <synopsis>gf_mesh_im_set(mesh_im MI, 'adapt')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  General function for modifying mesh_im objects
+  </para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-	<para>gf_mesh_im_set(MIM, 'integ', im [, CVIDX]) : set im as the integration method for all the convexes listed in CVIDX in the 
-	  mesh linked to MF. If CVIDX is not used, the im is assigned to all convexes.</para>
-      </listitem>
+    <listitem>
+    <para><literal>gf_mesh_im_set(mesh_im MI, 'integ',{integ im|int im_degree}[, ivec CVids])</literal></para>
 
-      <listitem>
-	<para>gf_mesh_im_set(MIM, 'integ', IM_DEGREE [, CVIDX]) :
-	  assign a classical approximate integration method 
-	  of order at least IM_DEGREE on the listed convexes. 
-	  If IM_DEGREE=-1, then the dummy integration method 'IM_NONE' is used. </para>
-      </listitem>
+    <para>       Set the integration method.
 
-      <listitem>
-	<para>gf_mesh_im_set(MIM, 'adapt') For a mesh_im levelset object only. Adapt the integration methods to a
-	  change of the levelset function.</para>
-      </listitem>
-    </itemizedlist>
-  </refsection>
+    Assign an integration method to all convexes whose #ids are
+    listed in <literal>CVids</literal>. If <literal>CVids</literal> is not given, the integration is
+    assigned to all convexes. It is possible to assign a specific
+    integration method with an integration method handle <literal>im</literal> obtained
+    via gf_integ('IM_SOMETHING'), or to let getfem choose a suitable
+    integration method with <literal>im_degree</literal> (choosen such that polynomials
+    of <latex style="text"><![CDATA[\text{degree} \leq \text{im\_degree}]]></latex> are exactly integrated.
+    If <literal>im_degree=-1</literal>, then the dummy integration method IM_NONE will 
+    be used.)
+    </para>
+    </listitem>
 
-  <refsection>
-    <title>Examples</title>
+    <listitem>
+    <para><literal>gf_mesh_im_set(mesh_im MI, 'adapt')</literal></para>
+
+    <para>       For a mesh_im levelset object only. Adapt the integration methods to a
+    change of the levelset function.
+    </para>
+    </listitem>
 
-    <programlisting role="example"><![CDATA[ 
-mim = gf_mesh_im(m);
-// set an integration method of order 5 on all convexes
-gf_mesh_im_set(mim,'integ',5); 
-// change the integration for convexes 5 6 9
-gf_mesh_im_set(mim,'integ',gf_integ('IM_TRIANGLE(13)'),[6 5 9]);
- ]]></programlisting>
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mesh_im_get">gf_mesh_im_get</link></member>
-      <member><link linkend="gf_mesh_im">gf_mesh_im</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_levelset.xml b/interface/src/scilab/help/en_US/gf_mesh_levelset.xml
index 1100fb8..7b4f3f3 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_levelset.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_levelset.xml
@@ -9,42 +9,54 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mesh_levelset</refname>
-
-    <refpurpose>Manage level sets.</refpurpose>
+    <refpurpose>  General constructor for mesh_levelset objects. The role of this object is
+  to provide a mesh cut by a certain number of level_set. This object is
+  used to build conformal integration method (object mim and enriched finite
+  element methods (Xfem)).
+  </refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>gf_mesh_levelset('.mesh', Mesh m)</synopsis>
+    <synopsis>MLS = gf_mesh_levelset(mesh m)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for mesh_levelset objects.</para>
+
+    <para>  General constructor for mesh_levelset objects. The role of this object is
+  to provide a mesh cut by a certain number of level_set. This object is
+  used to build conformal integration method (object mim and enriched finite
+  element methods (Xfem)).
+  </para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para> gf_mesh_levelset('.mesh', Mesh m) Build a new MeshLevelSet
-        object from a Mesh object.</para>
-      </listitem>
+    <listitem>
+    <para><literal>MLS = gf_mesh_levelset(mesh m)</literal></para>
+
+    <para>         Build a new mesh_levelset object from a mesh and returns its handle. 
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link
-      linkend="gf_mesh_levelset_get">gf_mesh_levelset_get</link></member>
-
-      <member><link
-      linkend="gf_mesh_levelset_set">gf_mesh_levelset_set</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_levelset_get.xml b/interface/src/scilab/help/en_US/gf_mesh_levelset_get.xml
index 0311a2c..37628a2 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_levelset_get.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_levelset_get.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<refentry version="5.0-subset Scilab" xml:id="gf_mesh_levelset_get"
-          xml:lang="en" xmlns="http://docbook.org/ns/docbook"
+<refentry version="5.0-subset Scilab" xml:id="gf_mesh_levelset_get" xml:lang="en"
+          xmlns="http://docbook.org/ns/docbook"
           xmlns:xlink="http://www.w3.org/1999/xlink"
           xmlns:xi="http://www.w3.org/2001/XInclude"
           xmlns:svg="http://www.w3.org/2000/svg"
@@ -9,59 +9,108 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mesh_levelset_get</refname>
-
-    <refpurpose>General function for querying information about MESHLEVELSET
-    objects.</refpurpose>
+    <refpurpose>  General function for querying information about mesh_levelset objects.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>I = gf_mesh_levelset_get(MLS, ...)</synopsis>
+    <synopsis>M = gf_mesh_levelset_get(mesh_levelset MLS, 'cut_mesh')</synopsis>
+    <synopsis>LM = gf_mesh_levelset_get(mesh_levelset MLS, 'linked_mesh')</synopsis>
+    <synopsis>nbls = gf_mesh_levelset_get(mesh_levelset MLS, 'nb_ls')</synopsis>
+    <synopsis>LS = gf_mesh_levelset_get(mesh_levelset MLS, 'levelsets')</synopsis>
+    <synopsis>CVIDs = gf_mesh_levelset_get(mesh_levelset MLS, 'crack_tip_convexes')</synopsis>
+    <synopsis>SIZE = gf_mesh_levelset_get(mesh_levelset MLS, 'memsize')</synopsis>
+    <synopsis>s = gf_mesh_levelset_get(mesh_levelset MLS, 'char')</synopsis>
+    <synopsis>gf_mesh_levelset_get(mesh_levelset MLS, 'display')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  General function for querying information about mesh_levelset objects.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>M = gf_mesh_levelset_get(MLS,'cut_mesh')</para>
-      </listitem>
-
-      <listitem>
-        <para>LM = gf_mesh_levelset_get(MLS,'linked_mesh')</para>
-      </listitem>
-
-      <listitem>
-        <para>LS = gf_mesh_levelset_get(MLS,'levelsets')</para>
-      </listitem>
-
-      <listitem>
-        <para>CC = gf_mesh_levelset_get(MLS,'crack_tip_convexes')</para>
-      </listitem>
-
-      <listitem>
-        <para>CC = gf_mesh_levelset_get(MLS,'memsize') Return the amount of
-        memory (in bytes) used by the mesh-level-set.</para>
-      </listitem>
+    <listitem>
+    <para><literal>M = gf_mesh_levelset_get(mesh_levelset MLS, 'cut_mesh')</literal></para>
+
+    <para>         Return a mesh cut by the linked levelset's.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>LM = gf_mesh_levelset_get(mesh_levelset MLS, 'linked_mesh')</literal></para>
+
+    <para>         Return a reference to the linked mesh.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>nbls = gf_mesh_levelset_get(mesh_levelset MLS, 'nb_ls')</literal></para>
+
+    <para>         Return the number of linked levelset's.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>LS = gf_mesh_levelset_get(mesh_levelset MLS, 'levelsets')</literal></para>
+
+    <para>         Return a list of references to the linked levelset's.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>CVIDs = gf_mesh_levelset_get(mesh_levelset MLS, 'crack_tip_convexes')</literal></para>
+
+    <para>         Return the list of convex #id's of the linked mesh on
+      which have a tip of any linked levelset's.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>SIZE = gf_mesh_levelset_get(mesh_levelset MLS, 'memsize')</literal></para>
+
+    <para>         Return the amount of memory (in bytes) used by the mesh_levelset.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>s = gf_mesh_levelset_get(mesh_levelset MLS, 'char')</literal></para>
+
+    <para>         Output a (unique) string representation of the mesh_levelsetn.
+
+      This can be used to perform comparisons between two
+      different mesh_levelset objects.
+      This function is to be completed.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_levelset_get(mesh_levelset MLS, 'display')</literal></para>
+
+    <para>         displays a short summary for a mesh_levelset object.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link
-      linkend="gf_mesh_levelset">gf_mesh_levelset</link></member>
-
-      <member><link
-      linkend="gf_mesh_levelset_set">gf_mesh_levelset_set</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_levelset_set.xml b/interface/src/scilab/help/en_US/gf_mesh_levelset_set.xml
index c756257..0c7ad9a 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_levelset_set.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_levelset_set.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<refentry version="5.0-subset Scilab" xml:id="gf_mesh_levelset_set"
-          xml:lang="en" xmlns="http://docbook.org/ns/docbook"
+<refentry version="5.0-subset Scilab" xml:id="gf_mesh_levelset_set" xml:lang="en"
+          xmlns="http://docbook.org/ns/docbook"
           xmlns:xlink="http://www.w3.org/1999/xlink"
           xmlns:xi="http://www.w3.org/2001/XInclude"
           xmlns:svg="http://www.w3.org/2000/svg"
@@ -9,50 +9,75 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mesh_levelset_set</refname>
-
-    <refpurpose>General function for modification of MESHLEVELSET
-    objects.</refpurpose>
+    <refpurpose>  General function for modification of mesh_levelset objects.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>gf_mesh_levelset_set(MLS, ...)</synopsis>
+    <synopsis>gf_mesh_levelset_set(mesh_levelset MLS, 'add', levelset ls)</synopsis>
+    <synopsis>gf_mesh_levelset_set(mesh_levelset MLS, 'sup', levelset ls)</synopsis>
+    <synopsis>gf_mesh_levelset_set(mesh_levelset MLS, 'adapt')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  General function for modification of mesh_levelset objects.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_mesh_levelset_set(MLS,'add',arg1)</para>
-      </listitem>
+    <listitem>
+    <para><literal>gf_mesh_levelset_set(mesh_levelset MLS, 'add', levelset ls)</literal></para>
+
+    <para>       Add a link to the levelset <literal>ls</literal>.
+
+    Only a reference is kept, no copy is done. In order to indicate
+    that the linked mesh is cut by a levelset one has to call this
+    method, where <literal>ls</literal> is an levelset object. An arbitrary number of
+    levelset can be added.
+
+    **WARNING**
+
+    The mesh of <literal>ls</literal> and the linked mesh must be the same.
+    </para>
+    </listitem>
 
-      <listitem>
-        <para>gf_mesh_levelset_set(MLS,'delete',arg1)</para>
-      </listitem>
+    <listitem>
+    <para><literal>gf_mesh_levelset_set(mesh_levelset MLS, 'sup', levelset ls)</literal></para>
+
+    <para>       Remove a link to the levelset <literal>ls</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_levelset_set(mesh_levelset MLS, 'adapt')</literal></para>
+
+    <para>       Do all the work (cut the convexes with the levelsets).
+
+    To initialice the mesh_levelset object or to actualize it when the
+    value of any levelset function is modified, one has to call
+    this method.
+    </para>
+    </listitem>
 
-      <listitem>
-        <para>gf_mesh_levelset_set(MLS,'adapt')</para>
-      </listitem>
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link
-      linkend="gf_mesh_levelset_get">gf_mesh_levelset_get</link></member>
-
-      <member><link
-      linkend="gf_mesh_levelset">gf_mesh_levelset</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_set.xml b/interface/src/scilab/help/en_US/gf_mesh_set.xml
index 738293f..b8ef093 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_set.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_set.xml
@@ -9,169 +9,234 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_mesh_set</refname>
-
-    <refpurpose>General function for modification of a mesh
-    object.</refpurpose>
+    <refpurpose>  General function for modification of a mesh object.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-ivec IDX = gf_mesh_set(M, 'add point', mat  PT)
-gf_mesh_set(M, 'del point', ivec  IDX)
-vec IDX = gf_mesh_set(M, 'add convex', geotrans  GT,mat  CVPTS)
-gf_mesh_set(M, 'del convex', ivec  IDX)
-gf_mesh_set(M, 'del convex of dim', ivec  DIM)
-gf_mesh_set(M, 'region', int bnum, imat CVFLST)
-gf_mesh_set(M, 'region intersect', int R1, int R2)
-gf_mesh_set(M, 'region merge', int R1, int R2)
-gf_mesh_set(M, 'region substract', int R1, int R2)
-gf_mesh_set(M, 'delete region', ivec blst)
-gf_mesh_set(M, 'translate', vec  V)
-gf_mesh_set(M, 'transform', mat  T)
-gf_mesh_set(M, 'merge', const_mesh  M2)
-gf_mesh_set(M, 'optimize structure')
-gf_mesh_set(M  'refine' [, mat CVLST])
-</synopsis>
+    <synopsis>PIDs = gf_mesh_set(mesh M, 'pts', mat PTS)</synopsis>
+    <synopsis>PIDs = gf_mesh_set(mesh M, 'add point', mat PTS)</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'del point', ivec PIDs)</synopsis>
+    <synopsis>CVIDs = gf_mesh_set(mesh M, 'add convex', geotrans GT, mat PTS)</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'del convex', mat CVIDs)</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'del convex of dim', ivec DIMs)</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'translate', vec V)</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'transform', mat T)</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'boundary', int rnum, mat CVFIDs)</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'region', int rnum, mat CVFIDs)</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'region intersect', int r1, int r2)</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'region merge', int r1, int r2)</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'region substract', int r1, int r2)</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'delete boundary', int rnum, mat CVFIDs)</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'delete region', ivec RIDs)</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'merge', mesh m2)</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'optimize structure')</synopsis>
+    <synopsis>gf_mesh_set(mesh M, 'refine'[, ivec CVIDs])</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  General function for modification of a mesh object.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>PIDs = gf_mesh_set(M,'pts',mat PTS) Replace the coordinates of
-        the mesh points with those given in <literal>PTS</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>PIDs = gf_mesh_set(M,'add point',mat PTS) Insert new points in
-        the mesh and return their #ids. <literal>PTS</literal> should be an n
-        x m matrix , where <literal>n</literal> is the mesh dimension, and
-        <literal>m</literal> is the number of points that will be added to the
-        mesh. On output, <literal>PIDs</literal> contains the point #ids of
-        these new points.</para>
-
-        <para>Remark: if some points are already part of the mesh (with a
-        small tolerance of approximately 1e-8), they won't be inserted again,
-        and <literal>PIDs</literal> will contain the previously assigned #ids
-        of these points.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_set(M,'del point',vec PIDs) Removes one or more points
-        from the mesh. <literal>PIDs</literal> should contain the point #ids,
-        such as the one returned by the 'add point' command.</para>
-      </listitem>
-
-      <listitem>
-        <para>CVIDs = gf_mesh_set(M,'add convex',GeoTrans GT, mat PTS) Add a
-        new convex into the mesh. The convex structure (triangle, prism,...)
-        is given by <phrase>GT</phrase> (obtained with gf_geotrans('...')),
-        and its points are given by the columns of <literal>PTS</literal>. On
-        return, <literal>CVIDs</literal> contains the convex #ids.
-        <literal>PTS</literal> might be a 3-dimensional array in order to
-        insert more than one convex (or a two dimensional array correctly
-        shaped according to Fortran ordering).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_set(M,'del convex',mat CVIDs) Remove one or more
-        convexes from the mesh. <literal>CVIDs</literal> should contain the
-        convexes #ids, such as the ones returned by the 'add convex'
-        command.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_set(M,'del convex of dim',vec DIMs) Remove all convexes
-        of dimension listed in <literal>DIMs</literal>. </para>
-
-        <para>For example; gf_mesh_set(M,'del convex of dim', [1,2]) remove
-        all line segments, triangles and quadrangles.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_set(M,'translate',vec V) Translates each point of the
-        mesh from <literal>V</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_set(M,'transform',mat T) Applies the matrix
-        <literal>T</literal> to each point of the mesh. Note that
-        <literal>T</literal> is not required to be a N x N matrix (with
-        <emphasis>N = gf_mesh_get(M,'dim')</emphasis>). Hence it is possible
-        to transform a 2D mesh into a 3D one (and reciprocally).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_set(M,'region',int rnum, mat CVFIDs) Assigns the region
-        number <literal>rnum</literal> to the convex faces stored in each
-        column of the matrix <literal>CVFIDs</literal>. The first row of
-        <literal>CVFIDs</literal> contains a convex #ids, and the second row
-        contains a face number in the convex (or 0 for the whole convex
-        (regions are usually used to store a list of convex faces, but you may
-        also use them to store a list of convexes).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_set(M,'region intersect',int r1, int r2) Replace the
-        region number <literal>r1</literal> with its intersection with region
-        number <literal>r2</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_set(M,'region merge',int r1, int r2) Merge region number
-        <literal>r2</literal> into region number <literal>r1</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_set(M,'region substract',int r1, int r2) Replace the
-        region number <literal>r1</literal> with its difference with region
-        number <literal>r2</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_set(M,'delete region',vec RIDs) Remove the regions whose
-        #ids are listed in <literal>RIDs</literal></para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_set(M,'merge',Mesh m2) Merge with the Mesh
-        <literal>m2</literal>. Overlapping points won't be duplicated. If
-        <literal>m2</literal> is a MeshFem object, its linked mesh will be
-        used.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_set(M,'optimize structure') Reset point and convex
-        numbering. After optimisation, the points (resp. convexes) will be
-        consecutively numbered from 1 to gf_mesh_get(M,'max pid') (resp.
-        gf_mesh_get(M,'max cvid')).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_mesh_set(M,'refine'[, vec CVIDs]) Use a Bank strategy for
-        mesh refinement. If <literal>CVIDs</literal> is not given, the whole
-        mesh is refined. Note that the regions, and the finite element methods
-        and integration methods of the MeshFem and MeshIm objects linked to
-        this mesh will be automagically refined.</para>
-      </listitem>
+    <listitem>
+    <para><literal>PIDs = gf_mesh_set(mesh M, 'pts', mat PTS)</literal></para>
+
+    <para>       Replace the coordinates of the mesh points with those given in <literal>PTS</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>PIDs = gf_mesh_set(mesh M, 'add point', mat PTS)</literal></para>
+
+    <para>       Insert new points in the mesh and return their #ids.
+
+    <literal>PTS</literal> should be an <literal></literal>nxm<literal></literal> matrix , where <literal></literal>n<literal></literal> is the mesh
+    dimension, and <literal></literal>m<literal></literal> is the number of points that will be
+    added to the mesh. On output, <literal>PIDs</literal> contains the point #ids
+    of these new points.
+
+    Remark: if some points are already part of the mesh (with a small
+    tolerance of approximately <literal></literal>1e-8<literal></literal>), they won't be inserted again,
+    and <literal>PIDs</literal> will contain the previously assigned #ids of these
+    points.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'del point', ivec PIDs)</literal></para>
+
+    <para>       Removes one or more points from the mesh.
+
+    <literal>PIDs</literal> should contain the point #ids, such as the one returned by
+    the 'add point' command.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>CVIDs = gf_mesh_set(mesh M, 'add convex', geotrans GT, mat PTS)</literal></para>
+
+    <para>       Add a new convex into the mesh.
+
+    The convex structure (triangle, prism,...) is given by <literal>GT</literal>
+    (obtained with gf_geotrans('...')), and its points are given by
+    the columns of <literal>PTS</literal>. On return, <literal>CVIDs</literal> contains the convex #ids.
+    <literal>PTS</literal> might be a 3-dimensional array in order to insert more than
+    one convex (or a two dimensional array correctly shaped according
+    to Fortran ordering).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'del convex', mat CVIDs)</literal></para>
+
+    <para>       Remove one or more convexes from the mesh.
+
+    <literal>CVIDs</literal> should contain the convexes #ids, such as the ones
+    returned by the 'add convex' command.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'del convex of dim', ivec DIMs)</literal></para>
+
+    <para>       Remove all convexes of dimension listed in <literal>DIMs</literal>.
+
+    For example; <literal></literal>gf_mesh_set(mesh M, 'del convex of dim', [1,2])<literal></literal> remove
+    all line segments, triangles and quadrangles.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'translate', vec V)</literal></para>
+
+    <para>         Translates each point of the mesh from <literal>V</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'transform', mat T)</literal></para>
+
+    <para>       Applies the matrix <literal>T</literal> to each point of the mesh.
+
+    Note that <literal>T</literal> is not required to be a <literal></literal>NxN<literal></literal> matrix (with
+    <literal></literal>N = gf_mesh_get(mesh M, 'dim')<literal></literal>). Hence it is possible to transform
+    a 2D mesh into a 3D one (and reciprocally).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'boundary', int rnum, mat CVFIDs)</literal></para>
+
+    <para>       DEPRECATED FUNCTION. Use 'region' instead.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'region', int rnum, mat CVFIDs)</literal></para>
+
+    <para>       Assigns the region number <literal>rnum</literal> to the convex faces (or convexes)
+    stored in each column of the matrix <literal>CVFIDs</literal>.
+
+    The first row of <literal>CVFIDs</literal> contains a convex #ids, and the second row
+    contains a face number in the convex (or 0
+    for the whole convex (regions are usually used to store a list of
+    convex faces, but you may also use them to store a list of convexes).
+
+    If a vector is provided (or a one row matrix) the region will represent
+    the corresponding set of convex.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'region intersect', int r1, int r2)</literal></para>
+
+    <para>       Replace the region number <literal>r1</literal> with its intersection with region number <literal>r2</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'region merge', int r1, int r2)</literal></para>
+
+    <para>       Merge region number <literal>r2</literal> into region number <literal>r1</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'region substract', int r1, int r2)</literal></para>
+
+    <para>       Replace the region number <literal>r1</literal> with its difference with region
+    number <literal>r2</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'delete boundary', int rnum, mat CVFIDs)</literal></para>
+
+    <para>       DEPRECATED FUNCTION. Use 'delete region' instead.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'delete region', ivec RIDs)</literal></para>
+
+    <para>         Remove the regions whose #ids are listed in <literal>RIDs</literal>
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'merge', mesh m2)</literal></para>
+
+    <para>         Merge with the mesh <literal>m2</literal>.
+      
+      Overlapping points won't be duplicated. If <literal>m2</literal> is a mesh_fem object,
+      its linked mesh will be used.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'optimize structure')</literal></para>
+
+    <para>       Reset point and convex numbering.
+
+    After optimisation, the points (resp. convexes) will
+    be consecutively numbered from 1 to gf_mesh_get(mesh M, 'max pid')
+    (resp. gf_mesh_get(mesh M, 'max cvid')).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_mesh_set(mesh M, 'refine'[, ivec CVIDs])</literal></para>
+
+    <para>       Use a Bank strategy for mesh refinement.
+
+    If <literal>CVIDs</literal> is not given, the whole mesh is refined. Note
+    that the regions, and the finite element methods and
+    integration methods of the mesh_fem and mesh_im objects linked
+    to this mesh will be automagically refined.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_mesh_get">gf_mesh_get</link></member>
-      <member><link linkend="gf_mesh">gf_mesh</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_model.xml b/interface/src/scilab/help/en_US/gf_model.xml
index 8e735ac..a549f89 100644
--- a/interface/src/scilab/help/en_US/gf_model.xml
+++ b/interface/src/scilab/help/en_US/gf_model.xml
@@ -9,58 +9,66 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_model</refname>
+    <refpurpose>  model variables store the variables and the state data and the
+  description of a model. This includes the global tangent matrix, the right
+  hand side and the constraints. There are two kinds of models, the <literal>real</literal>
+  and the <literal>complex</literal> models.
 
-    <refpurpose>General constructor for model objects. Return a getfem handle
-    to the newly created object.</refpurpose>
+  model object is the evolution for getfem++ 4.0 of the mdstate object.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-mds=gf_model('real')
-mds=gf_model('complex')
-    </synopsis>
+    <synopsis>MD = gf_model('real')</synopsis>
+    <synopsis>MD = gf_model('complex')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for model objects.</para>
 
-    <para>General constructor for model objects. Return a getfem handle to the
-    newly created object.</para>
+    <para>  model variables store the variables and the state data and the
+  description of a model. This includes the global tangent matrix, the right
+  hand side and the constraints. There are two kinds of models, the <literal>real</literal>
+  and the <literal>complex</literal> models.
 
-    <para>"Model" variables store the variables and the state data and the
-    description of a model. This includes the global tangent matrix, the right
-    hand side and the constraints. </para>
+  model object is the evolution for getfem++ 4.0 of the mdstate object.
+</para>
+  </refsection>
 
-    <para>There are two kinds of models, the "real" and the "complex" models.
-    "Model" object is the evolution for Getfem++ 4.0 of the "MdState" object.
-    </para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>MDS = gf_model('real') Build a model for real unknowns.</para>
-      </listitem>
+    <listitem>
+    <para><literal>MD = gf_model('real')</literal></para>
+
+    <para>         Build a model for real unknowns.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MD = gf_model('complex')</literal></para>
+
+    <para>         Build a model for complex unknowns.
+    </para>
+    </listitem>
 
-      <listitem>
-        <para>MDS = gf_model('complex') Build a model for complex
-        unknowns.</para>
-      </listitem>
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_model_set">gf_model_set</link></member>
-      <member><link linkend="gf_model_get">gf_model_get</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_model_get.xml b/interface/src/scilab/help/en_US/gf_model_get.xml
index 62e9537..46395dc 100644
--- a/interface/src/scilab/help/en_US/gf_model_get.xml
+++ b/interface/src/scilab/help/en_US/gf_model_get.xml
@@ -9,145 +9,335 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_model_get</refname>
-
-    <refpurpose>Get information from a model object.</refpurpose>
+    <refpurpose>  Get information from a model object.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-b=gf_model_get(md,'is_complex')
-M=gf_model_get(md,'tangent_matrix')
-V=gf_model_get(md,'rhs')
-gf_model_get(md,'listvar')
-gf_model_get(md,'listbricks')
-size=gf_model_get(md,'memsize')
-V=gf_model_get(md,'variable', string name[, int niter])
-name=gf_model_get(md,'mult varname Dirichlet', int ind_brick)
-V=gf_model_get(md,'from variables')
-gf_model_get(md,'assembly'[, string option])
-gf_model_get(md,'solve' [,...])
-V = gf_model_get(md,'compute isotropic linearized Von Mises or Tresca', string varname, string dataname_lambda, string dataname_mu, mesh_fem mf_vm[, string version])
-    </synopsis>
+    <synopsis>b = gf_model_get(model M, 'is_complex')</synopsis>
+    <synopsis>T = gf_model_get(model M, 'nbdof')</synopsis>
+    <synopsis>T = gf_model_get(model M, 'tangent_matrix')</synopsis>
+    <synopsis>gf_model_get(model M, 'rhs')</synopsis>
+    <synopsis>gf_model_get(model M, 'brick term rhs', int ind_brick[, int ind_term, int sym, int ind_iter])</synopsis>
+    <synopsis>z = gf_model_get(model M, 'memsize')</synopsis>
+    <synopsis>gf_model_get(model M, 'listvar')</synopsis>
+    <synopsis>gf_model_get(model M, 'listbricks')</synopsis>
+    <synopsis>V = gf_model_get(model M, 'variable', string name[, int niter])</synopsis>
+    <synopsis>V = gf_model_get(model M, 'mesh fem of variable', string name)</synopsis>
+    <synopsis>name = gf_model_get(model M, 'mult varname Dirichlet', int ind_brick)</synopsis>
+    <synopsis>I = gf_model_get(model M, 'interval of variable', string varname)</synopsis>
+    <synopsis>V = gf_model_get(model M, 'from variables')</synopsis>
+    <synopsis>gf_model_get(model M, 'assembly'[, string option])</synopsis>
+    <synopsis>{nbit, converged} = gf_model_get(model M, 'solve'[, ...])</synopsis>
+    <synopsis>gf_model_get(model M, 'test tangent matrix'[, scalar EPS[, int NB[, scalar scale]]])</synopsis>
+    <synopsis>V = gf_model_get(model M, 'compute isotropic linearized Von Mises or Tresca', string varname, string dataname_lambda, string dataname_mu, mesh_fem mf_vm[, string version])</synopsis>
+    <synopsis>V = gf_model_get(model M, 'compute Von Mises or Tresca', string varname, string lawname, string dataname, mesh_fem mf_vm[, string version])</synopsis>
+    <synopsis>V = gf_model_get(model M, 'compute second Piola Kirchhoff tensor', string varname, string lawname, string dataname, mesh_fem mf_sigma)</synopsis>
+    <synopsis>V = gf_model_get(model M, 'compute plasticity Von Mises or Tresca', string datasigma, mesh_fem mf_vm[, string version])</synopsis>
+    <synopsis>gf_model_get(model M, 'compute plasticity constraints', mesh_im mim, string varname, string projname, string datalambda, string datamu, string datathreshold, string datasigma)</synopsis>
+    <synopsis>V = gf_model_get(model M, 'compute plastic part', mesh_im mim, mesh_fem mf_pl, string varname, string projname, string datalambda, string datamu, string datathreshold, string datasigma)</synopsis>
+    <synopsis>M = gf_model_get(model M, 'matrix term', int ind_brick, int ind_term)</synopsis>
+    <synopsis>s = gf_model_get(model M, 'char')</synopsis>
+    <synopsis>gf_model_get(model M, 'display')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  Get information from a model object.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>b = gf_model_get(mds,'is_complex') Return 0 is the model is
-        real, 1 if it is complex.</para>
-      </listitem>
-
-      <listitem>
-        <para>T = gf_model_get(mds,'tangent_matrix') Return the tangent matrix
-        stored in the model .</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_get(mds,'rhs') Return the right hand side of the
-        tangent problem.</para>
-      </listitem>
-
-      <listitem>
-        <para>z = gf_model_get(mds,'memsize') Return a rough approximation of
-        the amount of memory (in bytes) used by the model.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_get(mds,'listvar') print to the output the list of
-        variables and constants of the model.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_get(mds,'listbricks') print to the output the list of
-        bricks of the model.</para>
-      </listitem>
-
-      <listitem>
-        <para>V = gf_model_get(mds,'variable', string name[, int niter]) Gives
-        the value of a variable or data.</para>
-      </listitem>
-
-      <listitem>
-        <para>name = gf_model_get(mds,'mult varname Dirichlet', int ind_brick)
-        Gives the name of the multiplier variable for a Dirichlet brick. If
-        the brick is not a Dirichlet condition with multiplier brick, this
-        function has an undefined behavior</para>
-      </listitem>
-
-      <listitem>
-        <para>V = gf_model_get(mds,'from variables') Return the vector of all
-        the degrees of freedom of the model consisting of the concatenation of
-        the variables of the model (usefull to solve your problem with you own
-        solver).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_get(mds,'assembly'[, string option]) Assembly of the
-        tangent system taking into account the terms from all bricks.
-        <literal>option</literal>, if specified, should be 'build all', 'build
-        rhs' or 'build matrix'. The default is to build the whole tangent
-        linear system (matrix and rhs). This function is usefull to solve your
-        problem with you own solver.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_get(mds,'solve'[,...]) Run the standard getfem solver.
-        Note that you should be able to use your own solver if you want (it is
-        possible to obtain the tangent matrix and its right hand side with the
-        gf_model_get(mds,'tangent matrix') etc.).</para>
-
-        <para>Various options can be specified: </para>
-
-        <itemizedlist>
-          <listitem>
-            <para>'noisy' or 'very noisy' the solver will display some
-            information showing the progress (residual values etc.).</para>
-          </listitem>
-
-          <listitem>
-            <para>'max_iter', NIT set the maximum iterations numbers.</para>
-          </listitem>
-
-          <listitem>
-            <para>'max_res', RES set the target residual value.</para>
-          </listitem>
-
-          <listitem>
-            <para>- 'lsolver', SOLVERNAME select explicitely the solver used
-            for the linear systems (the default value is 'auto', which lets
-            getfem choose itself). Possible values are 'superlu', 'mumps' (if
-            supported), 'cg/ildlt', 'gmres/ilu' and 'gmres/ilut'.</para>
-          </listitem>
-        </itemizedlist>
-      </listitem>
-
-      <listitem>
-        <para>V = gf_model_get(mds,'compute isotropic linearized Von Mises or
-        Tresca', string varname, string dataname_lambda, string dataname_mu,
-        MeshFem mf_vm[, string version]) Compute the Von-Mises stress or the
-        Tresca stress of a field (only valid for isotropic linearized
-        elasticity in 3D). `version` should be 'Von Mises' or 'Tresca' ('Von
-        Mises' is the default).</para>
-      </listitem>
+    <listitem>
+    <para><literal>b = gf_model_get(model M, 'is_complex')</literal></para>
+
+    <para>         Return 0 is the model is real, 1 if it is complex.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>T = gf_model_get(model M, 'nbdof')</literal></para>
+
+    <para>         Return the total number of degrees of freedom of the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>T = gf_model_get(model M, 'tangent_matrix')</literal></para>
+
+    <para>         Return the tangent matrix stored in the model .
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_get(model M, 'rhs')</literal></para>
+
+    <para>         Return the right hand side of the tangent problem.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_get(model M, 'brick term rhs', int ind_brick[, int ind_term, int sym, int ind_iter])</literal></para>
+
+    <para>         Gives the access to the part of the right hand side of a term
+      of a particular nonlinear brick. Does not account of the eventual
+      time dispatcher. An assembly of the rhs has to be done first.
+      <literal>ind_brick</literal> is the brick index. <literal>ind_term</literal> is the index of the
+      term inside the brick (default value : 1).
+      <literal>sym</literal> is to access to the second right hand side of for symmetric
+      terms acting on two different variables (default is 0).
+      <literal>ind_iter</literal> is the iteration number when time dispatchers are
+      used (default is 1).
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>z = gf_model_get(model M, 'memsize')</literal></para>
+
+    <para>         Return a rough approximation of the amount of memory (in bytes) used by
+      the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_get(model M, 'listvar')</literal></para>
+
+    <para>         print to the output the list of variables and constants of the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_get(model M, 'listbricks')</literal></para>
+
+    <para>         print to the output the list of bricks of the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>V = gf_model_get(model M, 'variable', string name[, int niter])</literal></para>
+
+    <para>         Gives the value of a variable or data.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>V = gf_model_get(model M, 'mesh fem of variable', string name)</literal></para>
+
+    <para>         Gives access to the <literal>mesh_fem</literal> of a variable or data.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>name = gf_model_get(model M, 'mult varname Dirichlet', int ind_brick)</literal></para>
+
+    <para>         Gives the name of the multiplier variable for a Dirichlet brick.
+      If the brick is not a Dirichlet condition with multiplier brick,
+      this function has an undefined behavior
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>I = gf_model_get(model M, 'interval of variable', string varname)</literal></para>
+
+    <para>         Gives the interval of the variable <literal>varname</literal> in the linear system of
+      the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>V = gf_model_get(model M, 'from variables')</literal></para>
+
+    <para>         Return the vector of all the degrees of freedom of the model consisting
+      of the concatenation of the variables of the model (useful
+      to solve your problem with you own solver). 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_get(model M, 'assembly'[, string option])</literal></para>
+
+    <para>         Assembly of the tangent system taking into account the terms
+      from all bricks. <literal>option</literal>, if specified, should be 'build_all',
+      'build_rhs', 'build_matrix' or 'pseudo_potential' (in that case,
+      the pseudo_potential is returned).
+      The default is to build the whole
+      tangent linear system (matrix and rhs). This function is useful
+      to solve your problem with you own solver. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{nbit, converged} = gf_model_get(model M, 'solve'[, ...])</literal></para>
+
+    <para>       Run the standard getfem solver.
+
+    Note that you should be able to use your own solver if you want
+    (it is possible to obtain the tangent matrix and its right hand
+    side with the gf_model_get(model M, 'tangent matrix') etc.).
+
+    Various options can be specified:
+
+    - 'noisy' or 'very_noisy'
+       the solver will display some information showing the progress
+       (residual values etc.).
+    - 'max_iter', int NIT
+       set the maximum iterations numbers.
+    - 'max_res', @float RES
+       set the target residual value.
+    - 'diverged_res', @float RES
+       set the threshold value of the residual beyond which the iterative
+       method is considered to diverge (default is 1e200).
+    - 'lsolver', string SOLVER_NAME
+       select explicitely the solver used for the linear systems (the
+       default value is 'auto', which lets getfem choose itself).
+       Possible values are 'superlu', 'mumps' (if supported),
+       'cg/ildlt', 'gmres/ilu' and 'gmres/ilut'.
+    - 'lsearch', string LINE_SEARCH_NAME
+       select explicitely the line search method used for the linear systems (the
+       default value is 'default').
+       Possible values are 'simplest', 'systematic', 'quadratic' or 'basic'.
+    - 'with pseudo potential'
+      for nonlinear problems, the criterion of the line search will
+      be a pseudo potential instead of the residual. Still experimental since
+      not all bricks define a pseudo potential.
+
+      Return the number of iterations, if a iterative method is used.
+      
+      Note that it is possible to disable some variables
+      (see gf_model_set(model M, 'disable variable') ) in order to
+      solve the problem only with respect to a subset of variables (the
+      disabled variables are the considered as data) for instance to
+      replace the global Newton strategy with a fixed point one.
+
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_get(model M, 'test tangent matrix'[, scalar EPS[, int NB[, scalar scale]]])</literal></para>
+
+    <para>         Test the consistency of the tangent matrix in some random positions
+      and random directions (useful to test newly created bricks).
+      <literal>EPS</literal> is the value of the small parameter for the finite difference
+      computation of the derivative is the random direction (default is 1E-6).
+      <literal>NN</literal> is the number of tests (default is 100). <literal>scale</literal> is a parameter
+      for the random position (default is 1). Each dof od the random
+      position is chosen in the range [-scale, scale].
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>V = gf_model_get(model M, 'compute isotropic linearized Von Mises or Tresca', string varname, string dataname_lambda, string dataname_mu, mesh_fem mf_vm[, string version])</literal></para>
+
+    <para>         Compute the Von-Mises stress or the Tresca stress of a field (only
+      valid for isotropic linearized elasticity in 3D). <literal>version</literal> should
+      be  'Von_Mises' or 'Tresca' ('Von_Mises' is the default). 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>V = gf_model_get(model M, 'compute Von Mises or Tresca', string varname, string lawname, string dataname, mesh_fem mf_vm[, string version])</literal></para>
+
+    <para>         Compute on <literal>mf_vm</literal> the Von-Mises stress or the Tresca stress of a field
+      for nonlinear elasticity in 3D. <literal>lawname</literal> is the constitutive law which
+      could be 'SaintVenant Kirchhoff', 'Mooney Rivlin' or 'Ciarlet Geymonat'.
+      <literal>dataname</literal> is a vector of parameters for the constitutive law. Its length
+      depends on the law. It could be a short vector of constant values or a
+      vector field described on a finite element method for variable coefficients.
+      <literal>version</literal> should be  'Von_Mises' or 'Tresca' ('Von_Mises' is the default). 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>V = gf_model_get(model M, 'compute second Piola Kirchhoff tensor', string varname, string lawname, string dataname, mesh_fem mf_sigma)</literal></para>
+
+    <para>         Compute on <literal>mf_sigma</literal> the second Piola Kirchhoff stress tensor of a field
+      for nonlinear elasticity in 3D. <literal>lawname</literal> is the constitutive law which
+      could be 'SaintVenant Kirchhoff', 'Mooney Rivlin' or 'Ciarlet Geymonat'.
+      <literal>dataname</literal> is a vector of parameters for the constitutive law. Its length
+      depends on the law. It could be a short vector of constant values or a
+      vector field described on a finite element method for variable
+      coefficients.
+     
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>V = gf_model_get(model M, 'compute plasticity Von Mises or Tresca', string datasigma, mesh_fem mf_vm[, string version])</literal></para>
+
+    <para>         Compute on <literal>mf_vm</literal> the Von-Mises or the Tresca stress of a field for plasticity and return it into the vector V.
+      <literal>datasigma</literal> is a vector which contains the stress constraints values supported by the mesh.
+      <literal>version</literal> should be  'Von_Mises' or 'Tresca' ('Von_Mises' is the default).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_get(model M, 'compute plasticity constraints', mesh_im mim, string varname, string projname, string datalambda, string datamu, string datathreshold, string datasigma)</literal></para>
+
+    <para>         Compute and save the stress constraints sigma for other hypothetical iterations.
+      'mim' is the integration method to use for the computation.
+      'varname' is the main variable of the problem.
+      'projname' is the type of projection to use. For the moment it could only be 'Von Mises' or 'VM'.
+      'datalambda' and 'datamu' are the Lame coefficients of the material.
+      'datasigma' is a vector which will contains the new stress constraints values.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>V = gf_model_get(model M, 'compute plastic part', mesh_im mim, mesh_fem mf_pl, string varname, string projname, string datalambda, string datamu, string datathreshold, string datasigma)</literal></para>
+
+    <para>         Compute on <literal>mf_pl</literal> the plastic part and return it into the vector V.
+      <literal>datasigma</literal> is a vector which contains the stress constraints values supported by the mesh.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>M = gf_model_get(model M, 'matrix term', int ind_brick, int ind_term)</literal></para>
+
+    <para>         Gives the matrix term ind_term of the brick ind_brick if it exists
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>s = gf_model_get(model M, 'char')</literal></para>
+
+    <para>         Output a (unique) string representation of the model.
+
+      This can be used to perform comparisons between two
+      different model objects.
+      This function is to be completed.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_get(model M, 'display')</literal></para>
+
+    <para>         displays a short summary for a model object.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_model">gf_model</link></member>
-      <member><link linkend="gf_model_set">gf_model_set</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_model_set.xml b/interface/src/scilab/help/en_US/gf_model_set.xml
index 8a23b40..560c618 100644
--- a/interface/src/scilab/help/en_US/gf_model_set.xml
+++ b/interface/src/scilab/help/en_US/gf_model_set.xml
@@ -9,600 +9,1129 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_model_set</refname>
-
-    <refpurpose>Modify a model object.</refpurpose>
+    <refpurpose>  Modifies a model object.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-gf_model_set(md,'variable', vec U[, int niter])
-gf_model_set(md,'clear')
-gf_model_set(md,'add fem variable', string name, mesh_fem mf[, int niter])
-gf_model_set(md,'add variable' string name, int size[, int niter])
-gf_model_set(md,'resize variable' string name, int size)
-gf_model_set(md,'add fem data', string name, mesh_fem mf[, int niter])
-gf_model_set(md,'add initialized fem data', string name, mesh_fem mf, vec V)
-gf_model_set(md,'add data', string name, mesh_fem mf, vec V)
-gf_model_set(md,'add initialized data', string name, vec V)
-gf_model_set(md,'add multiplier', string name, mesh_fem mf, mesh_im mim, string primalname, int region[, int niter])
-gf_model_set(md,'to variables', vec V)
-ind_brick=gf_model_set(md,'add Laplacian brick', mesh_im mim, string varname[, int region])
-ind_brick=gf_model_set(md,'add generic elliptic brick', mesh_im mim, string varname[, int region])
-ind_brick=gf_model_set(md,'add source term brick', mesh_im mim, string varname, string dataname[, int region[, string directdataname ]])
-ind_brick=gf_model_set(md,'add normal source term brick', mesh_im mim, string varname, string dataname, int region)
-ind_brick=gf_model_set(md,'add Dirichlet condition with multiplier', mesh_im mim, string varname, mult_description, int region[, string dataname ])
-ind_brick=gf_model_set(md,'add Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region[, string dataname ])
-ind_brick=gf_model_set(md,'add generalized Dirichlet condition with multiplier', mesh_im mim, string varname, mult_description, int region, string dataname, string Hname)
-ind_brick=gf_model_set(md,'add generalized Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region, string dataname, string Hname)
-gf_model_set(md,'change penalization coeff', int ind_brick, scalar coeff)
-ind_brick=gf_model_set(md,'add Helmholtz brick', mesh_im mim, string varname, string dataname[, int region])
-ind_brick=gf_model_set(md,'add Fourier Robin brick', mesh_im mim, string varname[, string dataname, int region)
-ind_brick=gf_model_set(md,'add constraint with penalization',  string varname, scalar coeff, mat B, vec L)
-ind_brick=gf_model_set(md,'add constraint with multipliers,  string varname, string multname, mat B, vec L)
-ind_brick=gf_model_set(md,'add explicit matrix', string varname1, string varname2, mat B[, int issymmetric[, int iscoercive]])
-ind_brick=gf_model_set(md,'add explicit rhs', string varname, vec L)
-gf_model_set(md,'set private matrix',  int indbrick, mat B)
-gf_model_set(md,'set private rhs',  int indbrick, vec L)
-gf_model_set(md,'disable bricks',  ivec indbricks)
-gf_model_set(md,'unable bricks',  ivec indbricks)
-ind_brick=gf_model_set(md,'add isotropic linearized elasticity brick', mesh_im mim, string varname, string dataname_lambda, string dataname_mu[, int region])
-ind_brick=gf_model_set(md,'add linear incompressibility brick', mesh_im mim, string varname, string multname_pressure[, int region[, string dataname_coeff]])
-ind_brick=gf_model_set(md,'add mass brick', mesh_im mim, string varname[, string dataname_rho[, int region]])
-ind_brick=gf_model_set(md,'add basic d on dt brick', mesh_im mim, string varnameU,  string dataname_dt[, string dataname_rho[, int region]])
-ind_brick=gf_model_set(md,'add basic d2 on dt2 brick', mesh_im mim, string varnameU,  string varnameV, string dataname_dt, string dataname_alpha[, string dataname_rho[, int region]])
-gf_model_set(md,'add theta method dispatcher', ivec bricks_indices, string theta)
-gf_model_set(md,'add midpoint dispatcher', ivec bricks_indices)
-gf_model_set(md,'velocity update for order two theta method',  string varnameU,  string datanameV, string dataname_dt, string dataname_theta)
-gf_model_set(md,'velocity update for Newmark scheme',  int id2dt2_brick, string varnameU,  string datanameV, string dataname_dt, string dataname_twobeta,  string dataname_gamma)
-gf_model_set(md,'first iter')
-gf_model_set(md,'next iter')
-ind_brick=gf_model_set(md,'add basic contact brick', string varname_u, string multname_n[, string multname_t], string dataname_r, mat BN[, mat BT, string dataname_friction_coeff][, string dataname_gap[, string dataname_alpha[, int symmetrized]]])
-gf_model_set(md,'contact brick set BN', int indbrick, mat BN)
-gf_model_set(md,'contact brick set BT', int indbrick, mat BT)
-ind_brick=gf_model_set(md, 'add contact with rigid obstacle brick', mesh_im mim, string varname_u, string multname_n[, string multname_t], string dataname_r[, string dataname_friction_coeff], int region, string obstacle, [,  int symmetrized])
-    </synopsis>
+    <synopsis>gf_model_set(model M, 'clear')</synopsis>
+    <synopsis>gf_model_set(model M, 'add fem variable', string name, mesh_fem mf[, int niter])</synopsis>
+    <synopsis>gf_model_set(model M, 'add variable', string name, int size[, int niter])</synopsis>
+    <synopsis>gf_model_set(model M, 'resize variable', string name, int size)</synopsis>
+    <synopsis>gf_model_set(model M, 'add multiplier', string name, mesh_fem mf, string primalname[, int niter])</synopsis>
+    <synopsis>gf_model_set(model M, 'add fem data', string name, mesh_fem mf[, int qdim[, int niter]])</synopsis>
+    <synopsis>gf_model_set(model M, 'add initialized fem data', string name, mesh_fem mf, vec V)</synopsis>
+    <synopsis>gf_model_set(model M, 'add data', string name, int size[, int niter])</synopsis>
+    <synopsis>gf_model_set(model M, 'add initialized data', string name, vec V)</synopsis>
+    <synopsis>gf_model_set(model M, 'variable', string name, vec V[, int niter])</synopsis>
+    <synopsis>gf_model_set(model M, 'to variables', vec V)</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add Laplacian brick', mesh_im mim, string varname[, int region])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add generic elliptic brick', mesh_im mim, string varname, string dataname[, int region])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add source term brick', mesh_im mim, string varname, string dataname[, int region[, string directdataname]])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add normal source term brick', mesh_im mim, string varname, string dataname, int region)</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region[, string dataname])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region[, string dataname, mesh_fem mf_mult])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add normal Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region[, string dataname])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add normal Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region[, string dataname, mesh_fem mf_mult])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add generalized Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region, string dataname, string Hname)</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add generalized Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region, string dataname, string Hname[, mesh_fem mf_mult])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add pointwise constraints with multipliers', string varname, string dataname_pt[, string dataname_unitv] [, string dataname_val])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add pointwise constraints with given multipliers', string varname, string multname, string dataname_pt[, string dataname_unitv] [, string dataname_val])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add pointwise constraints with penalization', string varname, scalar coeff, string dataname_pt[, string dataname_unitv] [, string dataname_val])</synopsis>
+    <synopsis>gf_model_set(model M, 'change penalization coeff', int ind_brick, scalar coeff)</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add Helmholtz brick', mesh_im mim, string varname, string dataname[, int region])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add Fourier Robin brick', mesh_im mim, string varname, string dataname, int region)</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add basic nonlinear brick', mesh_im mim, string varname, string f, string dfdu[, string dataname, int region])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add constraint with multipliers', string varname, string multname, spmat B, vec L)</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add constraint with penalization', string varname, scalar coeff, spmat B, vec L)</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add explicit matrix', string varname1, string varname2, spmat B[, int issymmetric[, int iscoercive]])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add explicit rhs', string varname, vec L)</synopsis>
+    <synopsis>gf_model_set(model M, 'set private matrix', int indbrick, spmat B)</synopsis>
+    <synopsis>gf_model_set(model M, 'set private rhs', int indbrick, vec B)</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add isotropic linearized elasticity brick', mesh_im mim, string varname, string dataname_lambda, string dataname_mu[, int region])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add linear incompressibility brick', mesh_im mim, string varname, string multname_pressure[, int region[, string dataname_coeff]])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add nonlinear elasticity brick', mesh_im mim, string varname, string constitutive_law, string dataname[, int region])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add elastoplasticity brick', mesh_im mim ,string projname, string varname, string datalambda, string datamu, string datathreshold, string datasigma[, int region])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add nonlinear incompressibility brick', mesh_im mim, string varname, string multname_pressure[, int region])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add bilaplacian brick', mesh_im mim, string varname, string dataname [, int region])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add Kirchhoff-Love plate brick', mesh_im mim, string varname, string dataname_D, string dataname_nu [, int region])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add normal derivative source term brick', mesh_im mim, string varname, string dataname, int region)</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add Kirchhoff-Love Neumann term brick', mesh_im mim, string varname, string dataname_M, string dataname_divM, int region)</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add normal derivative Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region [, string dataname, int R_must_be_derivated])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add normal derivative Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region [, string dataname, int R_must_be_derivated])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add mass brick', mesh_im mim, string varname[, string dataname_rho[, int region]])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add basic d on dt brick', mesh_im mim, string varnameU, string dataname_dt[, string dataname_rho[, int region]])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add basic d2 on dt2 brick', mesh_im mim, string varnameU,  string datanameV, string dataname_dt, string dataname_alpha,[, string dataname_rho[, int region]])</synopsis>
+    <synopsis>gf_model_set(model M, 'add theta method dispatcher', ivec bricks_indices, string theta)</synopsis>
+    <synopsis>gf_model_set(model M, 'add midpoint dispatcher', ivec bricks_indices)</synopsis>
+    <synopsis>gf_model_set(model M, 'velocity update for order two theta method', string varnameU,  string datanameV, string dataname_dt, string dataname_theta)</synopsis>
+    <synopsis>gf_model_set(model M, 'velocity update for Newmark scheme', int id2dt2_brick, string varnameU,  string datanameV, string dataname_dt, string dataname_twobeta, string dataname_alpha)</synopsis>
+    <synopsis>gf_model_set(model M, 'disable bricks', ivec bricks_indices)</synopsis>
+    <synopsis>gf_model_set(model M, 'enable bricks', ivec bricks_indices)</synopsis>
+    <synopsis>gf_model_set(model M, 'disable variable', string varname)</synopsis>
+    <synopsis>gf_model_set(model M, 'enable variable', string varname)</synopsis>
+    <synopsis>gf_model_set(model M, 'first iter')</synopsis>
+    <synopsis>gf_model_set(model M, 'next iter')</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add basic contact brick', string varname_u, string multname_n[, string multname_t], string dataname_r, spmat BN[, spmat BT, string dataname_friction_coeff][, string dataname_gap[, string dataname_alpha[, int augmented_version]])</synopsis>
+    <synopsis>gf_model_set(model M, 'contact brick set BN', int indbrick, spmat BN)</synopsis>
+    <synopsis>gf_model_set(model M, 'contact brick set BT', int indbrick, spmat BT)</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add nodal contact with rigid obstacle brick',  mesh_im mim, string varname_u, string multname_n[, string multname_t], string dataname_r[, string dataname_friction_coeff], int region, string obstacle[,  int augmented_version])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add integral contact with rigid obstacle brick',  mesh_im mim, string varname_u, string multname, string dataname_obstacle, string dataname_r [, string dataname_friction_coeff], int region [, int option [, string dataname_alpha [, string dataname_wt [, string dataname_gamma [, string dataname_vt]]]]])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add penalized contact with rigid obstacle brick',  mesh_im mim, string varname_u, string dataname_obstacle, string dataname_r [, string dataname_coeff], int region [, int option, string dataname_lambda, [, string dataname_alpha [, string dataname_wt]]])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add Nitsche contact with rigid obstacle brick',  mesh_im mim, string varname_u, string dataname_obstacle, string dataname_r, string dataname_friction_coeff, string dataname_lambda, string dataname_mu, int region)</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add nodal contact between nonmatching meshes brick',  mesh_im mim1[, mesh_im mim2], string varname_u1[, string varname_u2], string multname_n[, string multname_t], string dataname_r[, string dataname_fr], int rg1, int rg2[, int slave1, int slave2,  int augmented_version])</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add integral large sliding contact brick',  mesh_im mim, string varname_u, string multname, string dataname_r, string dataname_fr, int rg)</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add boundary to large sliding contact brick',  int indbrick, mesh_im mim, string varname_u, string multname, int rg)</synopsis>
+    <synopsis>ind = gf_model_set(model M, 'add rigid obstacle to large sliding contact brick',  int indbrick, string obs)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  Modifies a model object.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_model_set(mds,'clear') Clear the model.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'add fem variable', string name, MeshFem mf[,
-        int niter]) Add a variable to the model linked to a MeshFem.
-        <literal>name</literal> is the variable name and
-        <literal>niter</literal> is the optional number of copy of the
-        variable for time integration schemes.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'add variable', string name, int size[, int
-          niter]) Add a variable to the model of constant size.
-        <literal>name</literal> is the variable name and
-        <literal>niter</literal> is the optional number of copy of the
-        variable for time integration schemes.</para>
-      </listitem>
-
-      <listitem>
-	<para>gf_model_set(md,'resize variable', string name, int
-	  size) : Resize a fixed size variable of the model. <literal>name</literal>
-	  is the variable name, <literal>size</literal> is the new
-	  fixed size.
-	</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'add multiplier', string name, MeshFem mf,
-          string primalname[, int niter]) Add a particular variable linked to a
-          fem being a multiplier with respect to a primal variable. The dof will
-          be filtered with the gmm::range_basis function applied on the terms of
-          the model which link the multiplier and the primal variable. This in
-          order to retain only linearly independant constraints on the primal
-          variable. Optimized for boundary multipliers. niter is the number of
-          version of the data stored, for time integration schemes.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'add fem data', string name, MeshFem mf[, int
-        qdim, int niter]) Add a data to the model linked to a MeshFem.
-        <literal>name</literal> is the data name, <literal>qdim</literal> is
-        the optional dimension of the data over the MeshFem and
-        <literal>niter</literal> is the optional number of copy of the data
-        for time integration schemes.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'add initialized fem data', string name,
-        MeshFem mf, vec V) Add a data to the model linked to a MeshFem.
-        <literal>name</literal> is the data name. The data is initiakized with
-        <literal>V</literal>. The data can be a scalar or vector field.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'add data', string name, int size[, int niter])
-        Add a data to the model of constant size. <literal>name</literal> is
-        the data name and <literal>niter</literal> is the optional number of
-        copy of the data for time integration schemes.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'add initialized data', string name, V) Add a
-        fixed size data to the model linked to a MeshFem.
-        <literal>name</literal> is the data name, <literal>V</literal> is the
-        value of the data.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'variable', string name, vec V[, int niter])
-        Set the value of a variable or data.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'to variables', vec V) Set the value of the
-        variables of the model with the vector <literal>V</literal>.
-        Typically, the vector <literal>V</literal> results of the solve of the
-        tangent linear system (usefull to solve your problem with you own
-        solver).</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add Laplacian brick', mesh_im mim, string
-        varname[, int region]) add a Laplacian term to the model relatively to
-        the variable <literal>varname</literal>. If this is a vector valued
-        variable, the Laplacian term is added componentwise.
-        <literal>region</literal> is an optional mesh region on which the term
-        is added. If it is not specified, it is added on the whole
-        mesh.</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add generic elliptic brick', mesh_im mim,
-        string varname, string dataname[, int region]) add a generic elliptic
-        term to the model relatively to the variable
-        <literal>varname</literal>. The shape of the elliptic term depends
-        both on the variable and the data. This corresponds to a term
-        <inlineequation>
-            <inlinemediaobject>
-              <imageobject>
-                <imagedata fileref="../mml/gf_model_set_eq1.mml" />
-              </imageobject>
-            </inlinemediaobject>
-          </inlineequation> where <literal>a</literal> is the data and
-        <literal>u</literal> the variable. The data can be a scalar, a matrix
-        or an order four tensor. The variable can be vector valued or not. If
-        the data is a scalar or a matrix and the variable is vector valued
-        then the term is added componentwise. An order four tensor data is
-        allowed for vector valued variable only. The data can be constant or
-        describbed on a fem. Of course, when the data is a tensor describe on
-        a finite element method (a tensor field) the data can be a huge
-        vector. The components of the matrix/tensor have to be stored with the
-        fortran order (columnwise) in the data vector (compatibility with
-        blas). The symmetry of the given matrix/tensor is not verified (but
-        assumed). If this is a vector valued variable, the Laplacian term is
-        added componentwise. <literal>region</literal> is an optional mesh
-        region on which the term is added. If it is not specified, it is added
-        on the whole mesh.</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add source term brick', mesh_im mim,
-        string varname, string dataname[, int region]) add a source term to
-        the model relatively to the variable <literal>varname</literal>. The
-        source term is represented by the data <literal>dataname</literal>
-        which could be constant or described on a fem.
-        <literal>region</literal> is an optional mesh region on which the term
-        is added. An additional optional data
-        <literal>directdataname</literal> can be provided. The corresponding
-        data vector will be directly added to the right hand side without
-        assembly.</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add normal source term brick', mesh_im
-        mim, string varname, string dataname[, int region]) add a source term
-        on the variable <literal>varname</literal> on a boundary
-        <literal>region</literal>. The source term is represented by the data
-        <literal>dataname</literal> which could be constant or described on a
-        fem. A scalar product with the outward normal unit vector to the
-        boundary is performed. The main aim of this brick is to represent a
-        Neumann condition with a vector data without performing the scalar
-        product with the normal as a pre-processing.</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add Dirichlet condition with
-        multipliers', mesh_im mim, string varname, mult_description, int
-        region[, string dataname]) Add a Dirichlet condition on the variable
-        <literal>varname</literal> and the mesh region
-        <literal>region</literal>. This region should be a boundary. The
-        Dirichlet condition is prescribed with a multiplier variable described
-        by <literal>mult_description</literal>. If
-        <literal>mult_description</literal> is a string this is assumed to be
-        the variable name correpsonding to the multiplier (which should be
-        first declared as a multiplier variable on the mesh region in the
-        model). If it is a finite element method (mesh_fem object) then a
-        multiplier variable will be added to the model and build on this
-        finite element method (it will be restricted to the mesh region
-        <literal>region</literal> and eventually some conflicting dofs with
-        some other multiplier variables will be suppressed). If it is an
-        integer, then a multiplier variable will be added to the model and
-        build on a classical finite element of degree that integer.
-        <literal>dataname</literal> is the optional right hand side of the
-        Dirichlet condition. It could be constant or described on a fem;
-        scalar or vector valued, depending on the variable on which the
-        Dirichlet condition is prescribed. Return the brick index in the
-        model.</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add Dirichlet condition with
-        penalization', mesh_im mim, string varname, scalar coeff, int region[,
-        string dataname]) Add a Dirichlet condition on the variable
-        <literal>varname</literal> and the mesh region
-        <literal>region</literal>. This region should be a boundary. The
-        Dirichlet condition is prescribed with penalization. The penalization
-        coefficient is intially <literal>coeff</literal> and will be added to
-        the data of the model. <literal>dataname</literal> is the optional
-        right hand side of the Dirichlet condition. It could be constant or
-        described on a fem; scalar or vector valued, depending on the variable
-        on which the Dirichlet condition is prescribed. Return the brick index
-        in the model.</para>
-      </listitem>
-
-      <listitem>
-	<para>ind_brick=gf_model_set(md,'add generalized Dirichlet
-	  condition with multiplier', mesh_im mim, string varname,
-	  string multname | mesh_fem mf_mult | int degree, int region,
-	  string dataname, string Hname) : Add a Dirichlet condition on the variable <literal>varname</literal> and the mesh
-	  region <literal>region</literal>. This version is for vector
-	  field. It prescribes a condition $Hu = r$
-	  where <literal>H</literal> is a matrix field. The region
-	  should be a boundary. The Dirichlet condition is prescribed with a multiplier variable which can be either
-	  directly given by <literal>multname</literal> (should be first declared as a multiplier 
-	  variable on the mesh region in the model) or added by the function and
-	  buld on the given finite element method <literal>mf_mult</literal> (it will be restricted to
-	  the mesh region <literal>region</literal> and eventually some conflicting dofs with some
-	  other multiplier variables will be suppressed) or added by the function and
-	  build on a standard finite element method of degree <literal>degree</literal>.
-	  <literal>dataname</literal> is the optional right hand side of  the Dirichlet condition. It could be constant or
-	  described on a fem; scalar or vector valued, depending on the variable
-	  on which the Dirichlet condition is prescribed. <literal>Hname</literal> is the data
-	  corresponding to the matrix field <literal>H</literal>. It has to be a constant matrix
-	  or described on a scalar fem. Return the brick index in the model.</para>
-      </listitem>
-      
-      <listitem>
-	<para>ind_brick=gf_model_set(md,'add  generalized Dirichlet
-	  condition with penalization', mesh_im mim, string varname,
-	  scalar coeff, int region, string dataname, string Hname) : Add
-	  a Dirichlet condition on the
-	  variable <literal>varname</literal> and the mesh 
-	  region <literal>region</literal>. This version is for vector field.
-	  It prescribes a condition $Hu = r$ where <literal>H</literal>
-	  is a matrix field. The region should be a boundary. The Dirichlet
-	  condition is prescribed with penalization. The penalization coefficient
-	  is intially <literal>coeff</literal> and will be added to the data of
-	  the model. <literal>dataname</literal> is the optional
-	  right hand side of  the Dirichlet condition. It could be constant or
-	  described on a fem; scalar or vector valued, depending on the variable
-	  on which the Dirichlet condition is prescribed. <literal>Hname</literal> is the data
-	  corresponding to the matrix field <literal>H</literal>. It has to be a constant matrix
-	  or described on a scalar fem. Return the brick index in the model.</para>
-      </listitem>
-      
-      <listitem>
-        <para>gf_model_set(mds,'change penalization coeff', int ind_brick,
-          scalar coeff) Change the penalization coefficient of a Dirichlet
-          condition with penalization brick. If the brick is not of this kind,
-          this function has an undefined behavior.</para>
-      </listitem>
-      
-      <listitem>
-        <para>ind = gf_model_set(mds,'add Helmholtz brick', mesh_im mim, string
-        varname, string dataname[, int region]) add a Helmholtz term to the
-        model relatively to the variable <literal>varname</literal>.
-        <literal>dataname</literal> should contain the wave number.
-        <literal>region</literal> is an optional mesh region on which the term
-        is added. If it is not specified, it is added on the whole
-        mesh.</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add Fourier Robin brick', mesh_im mim,
-        string varname, string dataname, int region) add a Fourier-Robin term
-        to the model relatively to the variable <literal>varname</literal>.
-        this corresponds to a weak term of the form <inlineequation>
-            <inlinemediaobject>
-              <imageobject>
-                <imagedata fileref="../mml/gf_model_set_eq2.mml" />
-              </imageobject>
-            </inlinemediaobject>
-          </inlineequation>. <phrase>dataname</phrase> should contain the
-        parameter <literal>q</literal> of the Fourier-Robin condition.
-        <literal>region</literal> is the mesh region on which the term is
-        added.</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add constraint with multipliers', string
-        varname, string multname, mat B, vec L) Add an additional explicit
-        constraint on the variable <literal>varname</literal> thank to a
-        multiplier <literal>multname</literal> peviously added to the model
-        (should be a fixed size variable). The constraint is
-        <emphasis>BU=L</emphasis> with <literal>B</literal> being a
-        rectangular sparse matrix. It is possible to change the constraint at
-        any time whith the methods gf_model_set(mds,'set private matrix') and
-        gf_model_set(mds,'set private rhs')</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add constraint with penalization',
-        string varname, scalar coeff, mat B, vec L) Add an additional explicit
-        penalized constraint on the variable <literal>varname</literal>. The
-        constraint is BU=L with <literal>B</literal> being a rectangular
-        sparse matrix. Be aware that <literal>B</literal> should not contain a
-        palin row, otherwise the whole tangent matrix will be plain. It is
-        possible to change the constraint at any time whith the methods
-        gf_model_set(mds,'set private matrix') and gf_model_set(mds,'set
-        private rhs'). The method gf_model_set(mds,'change penalization
-        coeff') can be used.</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add explicit matrix', string varname1,
-        string varname2, mat B[, int issymmetric[, int iscoercive]]) Add a
-        brick reprenting an explicit matrix to be added to the tangent linear
-        system relatively to the variables 'varname1' and 'varname2'. The
-        given matrix should have has many rows as the dimension of 'varname1'
-        and as many columns as the dimension of 'varname2'. If the two
-        variables are different and if <literal>issymmetric</literal> is set
-        to 1 then the transpose of the matrix is also added to the tangent
-        system (default is 0). set <literal>iscoercive</literal> to 1 if the
-        term does not affect the coercivity of the tangent system (default is
-        0). The matrix can be changed by the command gf_model_set(mds,'set
-        private matrix').</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add explicit rhs', string varname, vec
-        L) Add a brick reprenting an explicit right hand side to be added to
-        the right hand side of the tangent linear system relatively to the
-        variable 'varname'. The given rhs should have the same size than the
-        dimension of <literal>varname</literal>. The rhs can be changed by the
-        command gf_model_set(mds,'set private rhs').</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'set private matrix', int indbrick, mat B) For
-        some specific bricks having an internal sparse matrix (explicit
-        bricks: 'constraint brick' and 'explicit matrix brick'), set this
-        matrix.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'set private rhs', int indbrick, vec B) For
-        some specific bricks having an internal right hand side vector
-        (explicit bricks: 'constraint brick' and 'explicit rhs brick'), set
-        this rhs.</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add isotropic linearized elasticity
-        brick', mesh_im mim, string varname, string dataname_lambda, string
-        dataname_mu[, int region]) add an isotropic linearized elasticity term
-        to the model relatively to the variable <literal>varname</literal>.
-        <literal>dataname_lambda</literal> and <literal>dataname_mu</literal>
-        should contain the Lamé coefficients. <literal>region</literal> is an
-        optional mesh region on which the term is added. If it is not
-        specified, it is added on the whole mesh.</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add linear incompressibility brick',
-        mesh_im mim, string varname, string multname_pressure[, int region[,
-        string dataname_coeff]]) add an linear incompressibility condition on
-        <literal>variable</literal>. <literal>multname_pressure</literal> is a
-        variable which represent the pressure. Be aware that an inf-sup
-        condition between the finite element method describing the rpressure
-        and the primal variable has to be satisfied. <literal>region</literal>
-        is an optional mesh region on which the term is added. If it is not
-        specified, it is added on the whole mesh.
-        <literal>dataname_coeff</literal> is an optional penalization
-        coefficient for nearly incompressible elasticity for instance. In this
-        case, it is the inverse of the Lamé coefficient lambda.</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add mass brick', mesh_im mim, string
-        varname[, string dataname_rho[, int region]]) add mass term to the
-        model relatively to the variable <literal>varname</literal>. If
-        specified, the data <literal>dataname_rho</literal> should contain the
-        density (1 if omitted). <literal>region</literal> is an optional mesh
-        region on which the term is added. If it is not specified, it is added
-        on the whole mesh.</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add basic d on dt brick', mesh_im mim,
-        string varnameU, string dataname_dt[, string dataname_rho[, int
-        region]]) Add the standard discretization of a first order time
-        derivative on <literal>varnameU</literal>. The parameter rho is the
-        density which could be omitted (the defaul value is 1). This brick
-        should be used in addition to a time dispatcher for the other
-        terms.</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'add basic d2 on dt2 brick', mesh_im mim,
-        string varnameU, string datanameV, string dataname_dt, string
-        dataname_alpha,[, string dataname_rho[, int region]]) Add the standard
-        discretization of a second order time derivative on
-        <literal>varnameU</literal>. <literal>datanameV</literal> is a data
-        represented on the same finite element method as U which represents
-        the time derivative of U. The parameter <literal>rho</literal> is the
-        density which could be omitted (the defaul value is 1). This brick
-        should be used in addition to a time dispatcher for the other terms.
-        The time derivative <literal>v</literal> of the variable
-        <literal>u</literal> is preferably computed as a post-traitement which
-        depends on each scheme. The parameter
-        <literal>dataname_alpha</literal> depends on the time integration
-        scheme.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'add theta method dispatcher', vec
-        bricks_indices, string theta) Add a theta-method time dispatcher to a
-        list of bricks. For instance, a matrix term <literal>K</literal> will
-        be replaced by <inlineequation>
-            <inlinemediaobject>
-              <imageobject>
-                <imagedata fileref="../mml/gf_model_set_eq3.mml" />
-              </imageobject>
-            </inlinemediaobject>
-          </inlineequation>.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'add midpoint dispatcher', vec bricks_indices)
-        Add a midpoint time dispatcher to a list of bricks. For instance, a
-        nonlinear term K(U) will be replaced by <inlineequation>
-            <inlinemediaobject>
-              <imageobject>
-                <imagedata fileref="../mml/gf_model_set_eq4.mml" />
-              </imageobject>
-            </inlinemediaobject>
-          </inlineequation>.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'velocity update for order two theta method',
-        string varnameU, string datanameV, string dataname_dt, string
-        dataname_theta) Function which udpate the velocity
-        v<superscript>n+1</superscript> after the computation of the
-        displacement u<superscript>n+1</superscript> and before the next
-        iteration. Specific for theta-method and when the velocity is included
-        in the data of the model.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'velocity update for Newmark scheme', int
-        id2dt2_brick, string varnameU, string datanameV, string dataname_dt,
-        string dataname_twobeta, string dataname_alpha) Function which udpate
-        the velocity v<superscript>n+1</superscript> after the computation of
-        the displacement u<superscript>n+1</superscript> and before the next
-        iteration. Specific for Newmark scheme and when the velocity is
-        included in the data of the model. This version inverts the mass
-        matrix by a conjugate gradient.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'disable bricks', vec bricks_indices) Disable a
-        brick (the brick will no longer participate to the building of the
-        tangent linear system).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_model_set(mds,'unable bricks', vec bricks_indices) Unable a
-        disabled brick.</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'first iter') To be executed before the
-        first iteration of a time integration scheme</para>
-      </listitem>
-
-      <listitem>
-        <para>ind = gf_model_set(mds,'next iter') To be executed at the end of
-        each iteration of a time integration scheme.</para>
-      </listitem>
-
-      <listitem>
-	<para>
-	  ind_brick=gf_model_set(md,'add basic contact brick', string varname_u, string multname_n[, string multname_t], string dataname_r, mat BN[, mat BT, string dataname_friction_coeff][, string dataname_gap[, string dataname_alpha[, int symmetrized]]]) :
-	  Add a contact with  or without friction brick to the model.
-	  If U is the vector of degrees of freedom on which the unilateral constraint is applied,
-	  the matrix <literal>BN</literal> have to be such that this constraint is defined by
-	  <![CDATA[B_N U \le 0]]>. A friction condition can be considered by adding the three
-	  parameters <literal>multname_t</literal>, <literal>BT</literal> and <literal>dataname_friction_coeff</literal>. In this case,
-	  the tangential displacement is <![CDATA[B_T U]]> and the matrix <literal>BT</literal> should have as
-	  many rows as <literal>BN</literal> multiplied by <![CDATA[d-1]]> where <![CDATA[d]]> is the domain dimension.
-	  In this case also, <literal>dataname_friction_coeff</literal> is a data which represents the
-	  coefficient of friction. It can be a scalar or a vector representing a
-	  value on each contact condition.  The unilateral constraint is prescribed thank to a multiplier
-	  <literal>multname_n</literal> whose dimension should be equal to the number of rows of
-	  <literal>BN</literal>. If a friction condition is added, it is prescribed with a
-	  multiplier <literal>multname_t</literal> whose dimension should be equal to the number
-	  of rows of <literal>BT</literal>. The augmentation parameter <literal>r</literal> should be chosen in a range of
-	  acceptabe values (see Getfem user documentation). <literal>dataname_gap</literal> is an
-	  optional parameter representing the initial gap. It can be a single value
-	  or a vector of value. <literal>dataname_alpha</literal> is an optional homogenization
-	  parameter for the augmentation parameter (see Getfem user documentation). The parameter <literal>symmetrized</literal> indicates
-	  that the symmetry of the tangent matrix will be kept or not (except for
-	  the part representing the coupling between contact and friction which cannot be symmetrized).
-	</para>
-      </listitem>
-      
-      <listitem>
-	<para>gf_model_set(md,'contact brick set BN', int indbrick, mat BN) :
-	  Can be used to set the BN matrix of a basic contact/friction
-	  brick.</para>
-      </listitem>
+    <listitem>
+    <para><literal>gf_model_set(model M, 'clear')</literal></para>
+
+    <para>         Clear the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'add fem variable', string name, mesh_fem mf[, int niter])</literal></para>
+
+    <para>         Add a variable to the model linked to a mesh_fem. <literal>name</literal> is the variable
+      name and <literal>niter</literal> is the optional number of version of the data stored,
+      for time integration schemes.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'add variable', string name, int size[, int niter])</literal></para>
+
+    <para>         Add a variable to the model of constant size. <literal>name</literal> is the variable
+      name and <literal>niter</literal> is the optional number of version of the data stored,
+      for time integration schemes. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'resize variable', string name, int size)</literal></para>
+
+    <para>         Resize a  constant size variable of the model. <literal>name</literal> is the variable
+      name. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'add multiplier', string name, mesh_fem mf, string primalname[, int niter])</literal></para>
+
+    <para>       Add a particular variable linked to a fem being a multiplier with
+    respect to a primal variable. The dof will be filtered with the
+    <literal></literal>gmm::range_basis<literal></literal> function applied on the terms of the model
+    which link the multiplier and the primal variable. This in order to
+    retain only linearly independant constraints on the primal variable.
+    Optimized for boundary multipliers. <literal>niter</literal> is the optional number
+    of version of the data stored, for time integration schemes. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'add fem data', string name, mesh_fem mf[, int qdim[, int niter]])</literal></para>
+
+    <para>         Add a data to the model linked to a mesh_fem. <literal>name</literal> is the data name,
+      <literal>qdim</literal> is the optional dimension of the data over the mesh_fem and
+      <literal>niter</literal> is the optional number of version of the data stored,
+      for time integration schemes. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'add initialized fem data', string name, mesh_fem mf, vec V)</literal></para>
+
+    <para>         Add a data to the model linked to a mesh_fem. <literal>name</literal> is the data name.
+      The data is initiakized with <literal>V</literal>. The data can be a scalar or vector
+      field.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'add data', string name, int size[, int niter])</literal></para>
+
+    <para>         Add a data to the model of constant size. <literal>name</literal> is the data name
+      and <literal>niter</literal> is the optional number of version of the data stored,
+      for time integration schemes. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'add initialized data', string name, vec V)</literal></para>
+
+    <para>         Add a fixed size data to the model linked to a mesh_fem.
+      <literal>name</literal> is the data name and <literal>V</literal> is the value of the data.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'variable', string name, vec V[, int niter])</literal></para>
+
+    <para>         Set the value of a variable or data. <literal>name</literal> is the data name
+      and <literal>niter</literal> is the optional number of version of the data stored,
+      for time integration schemes.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'to variables', vec V)</literal></para>
+
+    <para>         Set the value of the variables of the model with the vector <literal>V</literal>.
+      Typically, the vector <literal>V</literal> results of the solve of the tangent
+      linear system (useful to solve your problem with you own solver).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add Laplacian brick', mesh_im mim, string varname[, int region])</literal></para>
+
+    <para>       Add a Laplacian term to the model relatively to the variable <literal>varname</literal>
+    (in fact with a minus : <latex style="text"><![CDATA[-\text{div}(\nabla u)]]></latex>).
+    If this is a vector valued variable, the Laplacian term is added
+    componentwise. <literal>region</literal> is an optional mesh region on which the term
+    is added. If it is not specified, it is added on the whole mesh. Return
+    the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add generic elliptic brick', mesh_im mim, string varname, string dataname[, int region])</literal></para>
+
+    <para>       Add a generic elliptic term to the model relatively to the variable <literal>varname</literal>.
+    The shape of the elliptic term depends both on the variable and the data.
+    This corresponds to a term
+    <latex style="text"><![CDATA[-\text{div}(a\nabla u)]]></latex>
+    where <latex style="text"><![CDATA[a]]></latex> is the data and <latex style="text"><![CDATA[u]]></latex> the variable. The data can be a scalar,
+    a matrix or an order four tensor. The variable can be vector valued or
+    not. If the data is a scalar or a matrix and the variable is vector
+    valued then the term is added componentwise. An order four tensor data
+    is allowed for vector valued variable only. The data can be constant or
+    describbed on a fem. Of course, when the data is a tensor describe on a
+    finite element method (a tensor field) the data can be a huge vector.
+    The components of the matrix/tensor have to be stored with the fortran
+    order (columnwise) in the data vector (compatibility with blas). The
+    symmetry of the given matrix/tensor is not verified (but assumed). If
+    this is a vector valued variable, the elliptic term is added
+    componentwise. <literal>region</literal> is an optional mesh region on which the term is
+    added. If it is not specified, it is added on the whole mesh. Return the
+    brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add source term brick', mesh_im mim, string varname, string dataname[, int region[, string directdataname]])</literal></para>
+
+    <para>       Add a source term to the model relatively to the variable <literal>varname</literal>.
+    The source term is represented by the data <literal>dataname</literal> which could be
+    constant or described on a fem. <literal>region</literal> is an optional mesh region
+    on which the term is added. An additional optional data <literal>directdataname</literal>
+    can be provided. The corresponding data vector will be directly added
+    to the right hand side without assembly. Return the brick index in the
+    model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add normal source term brick', mesh_im mim, string varname, string dataname, int region)</literal></para>
+
+    <para>         Add a source term on the variable <literal>varname</literal> on a boundary <literal>region</literal>.
+      This region should be a boundary. The source term is represented by the
+      data <literal>dataname</literal> which could be constant or described on a fem. A scalar
+      product with the outward normal unit vector to the boundary is performed.
+      The main aim of this brick is to represent a Neumann condition with a
+      vector data without performing the scalar product with the normal as a
+      pre-processing. Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region[, string dataname])</literal></para>
+
+    <para>         Add a Dirichlet condition on the variable <literal>varname</literal> and the mesh
+      region <literal>region</literal>. This region should be a boundary. The Dirichlet
+      condition is prescribed with a multiplier variable described by
+      <literal>mult_description</literal>. If <literal>mult_description</literal> is a string this is assumed
+      to be the variable name corresponding to the multiplier (which should be
+      first declared as a multiplier variable on the mesh region in the model).
+      If it is a finite element method (mesh_fem object) then a multiplier
+      variable will be added to the model and build on this finite element
+      method (it will be restricted to the mesh region <literal>region</literal> and eventually
+      some conflicting dofs with some other multiplier variables will be
+      suppressed). If it is an integer, then a  multiplier variable will be
+      added to the model and build on a classical finite element of degree
+      that integer. <literal>dataname</literal> is the optional right hand side of  the
+      Dirichlet condition. It could be constant or described on a fem; scalar
+      or vector valued, depending on the variable on which the Dirichlet
+      condition is prescribed. Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region[, string dataname, mesh_fem mf_mult])</literal></para>
+
+    <para>       Add a Dirichlet condition on the variable <literal>varname</literal> and the mesh
+    region <literal>region</literal>. This region should be a boundary. The Dirichlet
+    condition is prescribed with penalization. The penalization coefficient
+    is initially <literal>coeff</literal> and will be added to the data of the model.
+    <literal>dataname</literal> is the optional right hand side of the Dirichlet condition.
+    It could be constant or described on a fem; scalar or vector valued,
+    depending on the variable on which the Dirichlet condition is prescribed.
+    <literal>mf_mult</literal> is an optional parameter which allows to weaken the
+    Dirichlet condition specifying a multiplier space.
+    Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add normal Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region[, string dataname])</literal></para>
+
+    <para>         Add a Dirichlet condition to the normal component of the vector
+     (or tensor) valued variable <literal>varname</literal> and the mesh
+      region <literal>region</literal>. This region should be a boundary. The Dirichlet
+      condition is prescribed with a multiplier variable described by
+      <literal>mult_description</literal>. If <literal>mult_description</literal> is a string this is assumed
+      to be the variable name corresponding to the multiplier (which should be
+      first declared as a multiplier variable on the mesh region in the model).
+      If it is a finite element method (mesh_fem object) then a multiplier
+      variable will be added to the model and build on this finite element
+      method (it will be restricted to the mesh region <literal>region</literal> and eventually
+      some conflicting dofs with some other multiplier variables will be
+      suppressed). If it is an integer, then a  multiplier variable will be
+      added to the model and build on a classical finite element of degree
+      that integer. <literal>dataname</literal> is the optional right hand side of  the
+      Dirichlet condition. It could be constant or described on a fem; scalar
+      or vector valued, depending on the variable on which the Dirichlet
+      condition is prescribed (scalar if the variable
+      is vector valued, vector if the variable is tensor valued).
+      Returns the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add normal Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region[, string dataname, mesh_fem mf_mult])</literal></para>
+
+    <para>       Add a Dirichlet condition to the normal component of the vector
+    (or tensor) valued variable <literal>varname</literal> and the mesh
+    region <literal>region</literal>. This region should be a boundary. The Dirichlet
+    condition is prescribed with penalization. The penalization coefficient
+    is initially <literal>coeff</literal> and will be added to the data of the model.
+    <literal>dataname</literal> is the optional right hand side of the Dirichlet condition.
+    It could be constant or described on a fem; scalar or vector valued,
+    depending on the variable on which the Dirichlet condition is prescribed
+    (scalar if the variable
+    is vector valued, vector if the variable is tensor valued).
+    <literal>mf_mult</literal> is an optional parameter which allows to weaken the
+    Dirichlet condition specifying a multiplier space.
+    Returns the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add generalized Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region, string dataname, string Hname)</literal></para>
+
+    <para>       Add a Dirichlet condition on the variable <literal>varname</literal> and the mesh
+    region <literal>region</literal>.  This version is for vector field.
+    It prescribes a condition <latex style="text"><![CDATA[Hu = r]]></latex>
+    where <literal>H</literal> is a matrix field. The region should be a boundary. The Dirichlet
+    condition is prescribed with a multiplier variable described by
+    <literal>mult_description</literal>. If <literal>mult_description</literal> is a string this is assumed
+    to be the variable name corresponding to the multiplier (which should be
+    first declared as a multiplier variable on the mesh region in the model).
+    If it is a finite element method (mesh_fem object) then a multiplier
+    variable will be added to the model and build on this finite element
+    method (it will be restricted to the mesh region <literal>region</literal> and eventually
+    some conflicting dofs with some other multiplier variables will be
+    suppressed). If it is an integer, then a  multiplier variable will be
+    added to the model and build on a classical finite element of degree
+    that integer. <literal>dataname</literal> is the right hand side of  the
+    Dirichlet condition. It could be constant or described on a fem; scalar
+    or vector valued, depending on the variable on which the Dirichlet
+    condition is prescribed. <literal>Hname</literal> is the data
+    corresponding to the matrix field <literal>H</literal>.
+    Returns the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add generalized Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region, string dataname, string Hname[, mesh_fem mf_mult])</literal></para>
+
+    <para>         Add a Dirichlet condition on the variable <literal>varname</literal> and the mesh
+      region <literal>region</literal>. This version is for vector field.
+      It prescribes a condition <latex style="text"><![CDATA[Hu = r]]></latex>
+      where <literal>H</literal> is a matrix field.
+      The region should be a boundary. The Dirichlet
+      condition is prescribed with penalization. The penalization coefficient
+      is intially <literal>coeff</literal> and will be added to the data of the model.
+      <literal>dataname</literal> is the right hand side of the Dirichlet condition.
+      It could be constant or described on a fem; scalar or vector valued,
+      depending on the variable on which the Dirichlet condition is prescribed.
+      <literal>Hname</literal> is the data
+      corresponding to the matrix field <literal>H</literal>. It has to be a constant matrix
+      or described on a scalar fem.
+      <literal>mf_mult</literal> is an optional parameter which allows to weaken the
+      Dirichlet condition specifying a multiplier space.
+      Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add pointwise constraints with multipliers', string varname, string dataname_pt[, string dataname_unitv] [, string dataname_val])</literal></para>
+
+    <para>       Add some pointwise constraints on the variable <literal>varname</literal> using
+    multiplier. The multiplier variable is automatically added to the model.
+    The conditions are prescribed on a set of points given in the data
+    <literal>dataname_pt</literal> whose dimension is the number of points times the dimension
+    of the mesh.
+    If the variable represents a vector field, one has to give the data
+    <literal>dataname_unitv</literal> which represents a vector of dimension the number of
+    points times the dimension of the vector field which should store some
+    unit vectors. In that case the prescribed constraint is the scalar
+    product of the variable at the corresponding point with the corresponding
+    unit vector.
+    The optional data <literal>dataname_val</literal> is the vector of values to be prescribed
+    at the different points.
+    This brick is specifically designed to kill rigid displacement
+    in a Neumann problem.
+    Returns the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add pointwise constraints with given multipliers', string varname, string multname, string dataname_pt[, string dataname_unitv] [, string dataname_val])</literal></para>
+
+    <para>       Add some pointwise constraints on the variable <literal>varname</literal> using a given
+    multiplier <literal>multname</literal>.
+    The conditions are prescribed on a set of points given in the data
+    <literal>dataname_pt</literal> whose dimension is the number of points times the dimension
+    of the mesh.
+    The multiplier variable should be a fixed size variable of size the
+    number of points.
+    If the variable represents a vector field, one has to give the data
+    <literal>dataname_unitv</literal> which represents a vector of dimension the number of
+    points times the dimension of the vector field which should store some
+    unit vectors. In that case the prescribed constraint is the scalar
+    product of the variable at the corresponding point with the corresponding
+    unit vector.
+    The optional data <literal>dataname_val</literal> is the vector of values to be prescribed
+    at the different points.
+    This brick is specifically designed to kill rigid displacement
+    in a Neumann problem.
+    Returns the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add pointwise constraints with penalization', string varname, scalar coeff, string dataname_pt[, string dataname_unitv] [, string dataname_val])</literal></para>
+
+    <para>       Add some pointwise constraints on the variable <literal>varname</literal> thanks to
+    a penalization. The penalization coefficient is initially
+    <literal>penalization_coeff</literal> and will be added to the data of the model.
+    The conditions are prescribed on a set of points given in the data
+    <literal>dataname_pt</literal> whose dimension is the number of points times the dimension
+    of the mesh.
+    If the variable represents a vector field, one has to give the data
+    <literal>dataname_unitv</literal> which represents a vector of dimension the number of
+    points times the dimension of the vector field which should store some
+    unit vectors. In that case the prescribed constraint is the scalar
+    product of the variable at the corresponding point with the corresponding
+    unit vector.
+    The optional data <literal>dataname_val</literal> is the vector of values to be prescribed
+    at the different points.
+    This brick is specifically designed to kill rigid displacement
+    in a Neumann problem.
+    Returns the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'change penalization coeff', int ind_brick, scalar coeff)</literal></para>
+
+    <para>       Change the penalization coefficient of a Dirichlet condition with
+    penalization brick. If the brick is not of this kind, this
+    function has an undefined behavior.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add Helmholtz brick', mesh_im mim, string varname, string dataname[, int region])</literal></para>
+
+    <para>         Add a Helmholtz term to the model relatively to the variable <literal>varname</literal>.
+      <literal>dataname</literal> should contain the wave number. <literal>region</literal> is an optional mesh
+      region on which the term is added. If it is not specified, it is added
+      on the whole mesh. Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add Fourier Robin brick', mesh_im mim, string varname, string dataname, int region)</literal></para>
+
+    <para>       Add a Fourier-Robin term to the model relatively to the variable
+    <literal>varname</literal>. This corresponds to a weak term of the form
+    <latex style="text"><![CDATA[\int (qu).v]]></latex>. <literal>dataname</literal>
+    should contain the parameter <latex style="text"><![CDATA[q]]></latex> of
+    the Fourier-Robin condition. <literal>region</literal> is the mesh region on which
+    the term is added. Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add basic nonlinear brick', mesh_im mim, string varname, string f, string dfdu[, string dataname, int region])</literal></para>
+
+    <para>       Add a brick representing a scalar term <latex style="text"><![CDATA[f(u)]]></latex> to the left-hand
+    side of the model. In the weak form, one adds <latex style="text"><![CDATA[+\int f(u)v]]></latex>.
+    The function <latex style="text"><![CDATA[f]]></latex> may optionally depend on <latex style="text"><![CDATA[\lambda]]></latex>, i.e.,
+    <latex style="text"><![CDATA[f(u)=f(u,\lambda)]]></latex>.
+    <literal>f</literal> and <literal>dfdu</literal> should contain the expressions for
+    <latex style="text"><![CDATA[f(u)]]></latex> and <latex style="text"><![CDATA[\frac{df}{du}(u)]]></latex>, respectively.
+    <literal>dataname</literal> represents the optional real scalar parameter <latex style="text"><![CDATA[\lambda]]></latex>
+    in the model. <literal>region</literal> is an optional mesh region on which the term is
+    added. If it is not specified, the term is added on the whole mesh.
+    Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add constraint with multipliers', string varname, string multname, spmat B, vec L)</literal></para>
+
+    <para>       Add an additional explicit constraint on the variable <literal>varname</literal> thank to
+    a multiplier <literal>multname</literal> peviously added to the model (should be a fixed
+    size variable). The constraint is <latex style="text"><![CDATA[BU=L]]></latex>
+    with <literal>B</literal> being a rectangular sparse matrix. It is possible to change
+    the constraint at any time whith the methods gf_model_set(model M, 'set private matrix')
+    and gf_model_set(model M, 'set private rhs'). Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add constraint with penalization', string varname, scalar coeff, spmat B, vec L)</literal></para>
+
+    <para>       Add an additional explicit penalized constraint on the variable <literal>varname</literal>.
+    The constraint is :math<literal>BU=L</literal> with <literal>B</literal> being a rectangular sparse matrix.
+    Be aware that <literal>B</literal> should not contain a palin row, otherwise the whole
+    tangent matrix will be plain. It is possible to change the constraint
+    at any time whith the methods gf_model_set(model M, 'set private matrix')
+    and gf_model_set(model M, 'set private rhs'). The method
+    gf_model_set(model M, 'change penalization coeff') can be used. Return the brick
+    index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add explicit matrix', string varname1, string varname2, spmat B[, int issymmetric[, int iscoercive]])</literal></para>
+
+    <para>       Add a brick representing an explicit matrix to be added to the tangent
+    linear system relatively to the variables <literal>varname1</literal> and <literal>varname2</literal>.
+    The given matrix should have has many rows as the dimension of
+    <literal>varname1</literal> and as many columns as the dimension of <literal>varname2</literal>.
+    If the two variables are different and if <literal>issymmetric</literal> is set to 1
+    then the transpose of the matrix is also added to the tangent system
+    (default is 0). Set <literal>iscoercive</literal> to 1 if the term does not affect the
+    coercivity of the tangent system (default is 0). The matrix can be
+    changed by the command gf_model_set(model M, 'set private matrix'). Return the
+    brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add explicit rhs', string varname, vec L)</literal></para>
+
+    <para>         Add a brick representing an explicit right hand side to be added to
+      the right hand side of the tangent linear system relatively to the
+      variable <literal>varname</literal>. The given rhs should have the same size than the
+      dimension of <literal>varname</literal>. The rhs can be changed by the command
+      gf_model_set(model M, 'set private rhs'). Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'set private matrix', int indbrick, spmat B)</literal></para>
+
+    <para>         For some specific bricks having an internal sparse matrix
+      (explicit bricks: 'constraint brick' and 'explicit matrix brick'),
+      set this matrix. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'set private rhs', int indbrick, vec B)</literal></para>
+
+    <para>         For some specific bricks having an internal right hand side vector
+      (explicit bricks: 'constraint brick' and 'explicit rhs brick'),
+      set this rhs. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add isotropic linearized elasticity brick', mesh_im mim, string varname, string dataname_lambda, string dataname_mu[, int region])</literal></para>
+
+    <para>         Add an isotropic linearized elasticity term to the model relatively to
+      the variable <literal>varname</literal>. <literal>dataname_lambda</literal> and <literal>dataname_mu</literal> should
+      contain the Lame coefficients. <literal>region</literal> is an optional mesh region
+      on which the term is added. If it is not specified, it is added
+      on the whole mesh. Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add linear incompressibility brick', mesh_im mim, string varname, string multname_pressure[, int region[, string dataname_coeff]])</literal></para>
+
+    <para>       Add an linear incompressibility condition on <literal>variable</literal>. <literal>multname_pressure</literal>
+    is a variable which represent the pressure. Be aware that an inf-sup
+    condition between the finite element method describing the pressure and the
+    primal variable has to be satisfied. <literal>region</literal> is an optional mesh region on
+    which the term is added. If it is not specified, it is added on the whole mesh.
+    <literal>dataname_coeff</literal> is an optional penalization coefficient for nearly
+    incompressible elasticity for instance. In this case, it is the inverse
+    of the Lame coefficient <latex style="text"><![CDATA[\lambda]]></latex>. Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add nonlinear elasticity brick', mesh_im mim, string varname, string constitutive_law, string dataname[, int region])</literal></para>
+
+    <para>       Add a nonlinear elasticity term to the model relatively to the
+    variable <literal>varname</literal>. <literal>lawname</literal> is the constitutive law which
+    could be 'SaintVenant Kirchhoff', 'Mooney Rivlin', 'Ciarlet Geymonat'
+    or 'generalized Blatz Ko'.
+    IMPORTANT : if the variable is defined on a 2D mesh, the plane strain
+    approximation is automatically used.
+    <literal>dataname</literal> is a vector of parameters for the constitutive law. Its length
+    depends on the law. It could be a short vector of constant values or a
+    vector field described on a finite element method for variable
+    coefficients. <literal>region</literal> is an optional mesh region on which the term
+    is added. If it is not specified, it is added on the whole mesh. Return the
+    brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add elastoplasticity brick', mesh_im mim ,string projname, string varname, string datalambda, string datamu, string datathreshold, string datasigma[, int region])</literal></para>
+
+    <para>         Add a nonlinear elastoplastic term to the model relatively to the
+      variable <literal>varname</literal>, in small deformations, for an isotropic material
+      and for a quasistatic model. <literal>projname</literal> is the type of projection that
+      we want to use. For the moment, only the Von Mises projection is
+      computing that we could entering 'VM' or 'Von Mises'.
+      <literal>datasigma</literal> is the variable representing the constraints on the material.
+      Be carefull that <literal>varname</literal> and <literal>datasigma</literal> are composed of two iterates
+      for the time scheme needed for the Newton algorithm used.
+      Moreover, the finite element method on which <literal>varname</literal> is described
+      is an K ordered mesh_fem, the <literal>datasigma</literal> one have to be at least
+      an K-1 ordered mesh_fem.
+      <literal>datalambda</literal> and <literal>datamu</literal> are the Lame coefficients of the studied
+      material.
+      <literal>datathreshold</literal> is the plasticity threshold of the material.
+      The three last variable could be constants or described on the
+      same finite element method.
+      <literal>region</literal> is an optional mesh region on which the term is added.
+      If it is not specified, it is added on the whole mesh.
+      Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add nonlinear incompressibility brick', mesh_im mim, string varname, string multname_pressure[, int region])</literal></para>
+
+    <para>       Add an nonlinear incompressibility condition on <literal>variable</literal> (for large
+    strain elasticity). <literal>multname_pressure</literal>
+    is a variable which represent the pressure. Be aware that an inf-sup
+    condition between the finite element method describing the pressure and the
+    primal variable has to be satisfied. <literal>region</literal> is an optional mesh region on
+    which the term is added. If it is not specified, it is added on the
+    whole mesh. Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add bilaplacian brick', mesh_im mim, string varname, string dataname [, int region])</literal></para>
+
+    <para>         Add a bilaplacian brick on the variable
+      <literal>varname</literal> and on the mesh region <literal>region</literal>.
+      This represent a term <latex style="text"><![CDATA[\Delta(D \Delta u)]]></latex>.
+      where <latex style="text"><![CDATA[D(x)]]></latex> is a coefficient determined by <literal>dataname</literal> which
+      could be constant or described on a f.e.m. The corresponding weak form
+      is <latex style="text"><![CDATA[\int D(x)\Delta u(x) \Delta v(x) dx]]></latex>.
+      Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add Kirchhoff-Love plate brick', mesh_im mim, string varname, string dataname_D, string dataname_nu [, int region])</literal></para>
+
+    <para>         Add a bilaplacian brick on the variable
+      <literal>varname</literal> and on the mesh region <literal>region</literal>.
+      This represent a term <latex style="text"><![CDATA[\Delta(D \Delta u)]]></latex> where <latex style="text"><![CDATA[D(x)]]></latex>
+      is a the flexion modulus determined by <literal>dataname_D</literal>. The term is
+      integrated by part following a Kirchhoff-Love plate model
+      with <literal>dataname_nu</literal> the poisson ratio.
+      Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add normal derivative source term brick', mesh_im mim, string varname, string dataname, int region)</literal></para>
+
+    <para>         Add a normal derivative source term brick
+      <latex style="text"><![CDATA[F = \int b.\partial_n v]]></latex> on the variable <literal>varname</literal> and the
+      mesh region <literal>region</literal>.
+
+      Update the right hand side of the linear system.
+      <literal>dataname</literal> represents <literal>b</literal> and <literal>varname</literal> represents <literal>v</literal>.
+      Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add Kirchhoff-Love Neumann term brick', mesh_im mim, string varname, string dataname_M, string dataname_divM, int region)</literal></para>
+
+    <para>          Add a Neumann term brick for Kirchhoff-Love model
+      on the variable <literal>varname</literal> and the mesh region <literal>region</literal>.
+      <literal>dataname_M</literal> represents the bending moment tensor and  <literal>dataname_divM</literal>
+      its divergence.
+      Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add normal derivative Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region [, string dataname, int R_must_be_derivated])</literal></para>
+
+    <para>          Add a Dirichlet condition on the normal derivative of the variable
+      <literal>varname</literal> and on the mesh region <literal>region</literal> (which should be a boundary.
+      The general form is
+      <latex style="text"><![CDATA[\int \partial_n u(x)v(x) = \int r(x)v(x) \forall v]]></latex>
+      where <latex style="text"><![CDATA[r(x)]]></latex> is
+      the right hand side for the Dirichlet condition (0 for
+      homogeneous conditions) and <latex style="text"><![CDATA[v]]></latex> is in a space of multipliers
+      defined by <literal>mult_description</literal>.
+      If <literal>mult_description</literal> is a string this is assumed
+      to be the variable name corresponding to the multiplier (which should be
+      first declared as a multiplier variable on the mesh region in the model).
+      If it is a finite element method (mesh_fem object) then a multiplier
+      variable will be added to the model and build on this finite element
+      method (it will be restricted to the mesh region <literal>region</literal> and eventually
+      some conflicting dofs with some other multiplier variables will be
+      suppressed). If it is an integer, then a  multiplier variable will be
+      added to the model and build on a classical finite element of degree
+      that integer. <literal>dataname</literal> is an optional parameter which represents
+      the right hand side of the Dirichlet condition.
+      If <literal>R_must_be_derivated</literal> is set to <literal>true</literal> then the normal
+      derivative of <literal>dataname</literal> is considered.
+      Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add normal derivative Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region [, string dataname, int R_must_be_derivated])</literal></para>
+
+    <para>          Add a Dirichlet condition on the normal derivative of the variable
+      <literal>varname</literal> and on the mesh region <literal>region</literal> (which should be a boundary.
+      The general form is
+      <latex style="text"><![CDATA[\int \partial_n u(x)v(x) = \int r(x)v(x) \forall v]]></latex>
+      where <latex style="text"><![CDATA[r(x)]]></latex> is
+      the right hand side for the Dirichlet condition (0 for
+      homogeneous conditions).
+      The penalization coefficient
+      is initially <literal>coeff</literal> and will be added to the data of the model.
+      It can be changed with the command gf_model_set(model M, 'change penalization coeff').
+      <literal>dataname</literal> is an optional parameter which represents
+      the right hand side of the Dirichlet condition.
+      If <literal>R_must_be_derivated</literal> is set to <literal>true</literal> then the normal
+      derivative of <literal>dataname</literal> is considered.
+      Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add mass brick', mesh_im mim, string varname[, string dataname_rho[, int region]])</literal></para>
+
+    <para>         Add mass term to the model relatively to the variable <literal>varname</literal>.
+      If specified, the data <literal>dataname_rho</literal> should contain the
+      density (1 if omitted). <literal>region</literal> is an optional mesh region on
+      which the term is added. If it is not specified, it
+      is added on the whole mesh. Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add basic d on dt brick', mesh_im mim, string varnameU, string dataname_dt[, string dataname_rho[, int region]])</literal></para>
+
+    <para>       Add the standard discretization of a first order time derivative on
+    <literal>varnameU</literal>. The parameter <literal>dataname_rho</literal> is the density which could
+    be omitted (the defaul value is 1). This brick should be used in
+    addition to a time dispatcher for the other terms. Return the brick
+    index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add basic d2 on dt2 brick', mesh_im mim, string varnameU,  string datanameV, string dataname_dt, string dataname_alpha,[, string dataname_rho[, int region]])</literal></para>
+
+    <para>       Add the standard discretization of a second order time derivative
+    on <literal>varnameU</literal>. <literal>datanameV</literal> is a data represented on the same finite
+    element method as U which represents the time derivative of U. The
+    parameter <literal>dataname_rho</literal> is the density which could be omitted (the defaul
+    value is 1). This brick should be used in addition to a time dispatcher for
+    the other terms. The time derivative <latex style="text"><![CDATA[v]]></latex> of the
+    variable <latex style="text"><![CDATA[u]]></latex> is preferably computed as a
+    post-traitement which depends on each scheme. The parameter <literal>dataname_alpha</literal>
+    depends on the time integration scheme. Return the brick index in the model.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'add theta method dispatcher', ivec bricks_indices, string theta)</literal></para>
+
+    <para>         Add a theta-method time dispatcher to a list of bricks. For instance,
+      a matrix term <latex style="text"><![CDATA[K]]></latex> will be replaced by
+      <latex style="text"><![CDATA[\theta K U^{n+1} + (1-\theta) K U^{n}]]></latex>.
       
-      <listitem>
-	<para>gf_model_set(md,'contact brick set BT', int indbrick, mat BT) :
-	  Can be used to set the BT matrix of a basic contact with
-	  friction brick.</para>
-      </listitem>
-
-      <listitem>
-	<para>
-	  ind_brick=gf_model_set(md, 'add contact with rigid obstacle brick', mesh_im mim, string varname_u, string multname_n[, string multname_t], string dataname_r[, string dataname_friction_coeff], int region, string obstacle, [, int symmetrized]) :
-	  Add a contact with or without friction condition with a rigid obstacle
-	  to the model. The condition is applied on the variable <literal>varname_u</literal>
-	  on the boundary corresponding to <literal>region</literal>. The rigid obstacle should
-	  be described with the string `obstacle` being a signed distance to
-	  the obstacle. This string should be an expression where the coordinates
-	  are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
-	  obstacle correspond to <![CDATA[z <= 0]]>, the corresponding signed distance will
-	  be simply 'z'. <literal>multname_n</literal> should be a fixed size variable whose size is
-	  the number of degrees of freedom on boundary <literal>region</literal>. It represent the
-	  contact equivalent nodal forces. In order to add a friction condition
-	  one has to add the <literal>multname_t</literal> and <literal>dataname_friction_coeff</literal> parameters.
-	  <literal>multname_t</literal> should be a fixed size variable whose size is
-	  the number of degrees of freedom on boundary <literal>region</literal> multiplied by <![CDATA[d-1]]>
-	  where <![CDATA[d]]> is the domain dimension. It represent the friction equivalent nodal forces.
-	  The augmentation parameter <literal>r</literal> should be chosen in a
-	  range of acceptabe values (close to the Young modulus of the elastic
-	  body, see Getfem user documentation). <literal>dataname_friction_coeff</literal> is
-	  the friction coefficient. It could be a scalar or a vector of values
-	  representing the friction coefficient on each contact node. The
-	  parameter <literal>symmetrized</literal> indicates that the symmetry of the tangent
-	  matrix will be kept or not. Basically, this brick compute the matrix BN
-	  and the vectors gap and alpha and call the basic contact brick.
-	</para>
-      </listitem>
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'add midpoint dispatcher', ivec bricks_indices)</literal></para>
+
+    <para>         Add a midpoint time dispatcher to a list of bricks. For instance, a
+      nonlinear term <latex style="text"><![CDATA[K(U)]]></latex> will be replaced by
+      <latex style="text"><![CDATA[K((U^{n+1} +  U^{n})/2)]]></latex>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'velocity update for order two theta method', string varnameU,  string datanameV, string dataname_dt, string dataname_theta)</literal></para>
+
+    <para>         Function which udpate the velocity <latex style="text"><![CDATA[v^{n+1}]]></latex> after
+      the computation of the displacement <latex style="text"><![CDATA[u^{n+1}]]></latex> and
+      before the next iteration. Specific for theta-method and when the velocity is
+      included in the data of the model. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'velocity update for Newmark scheme', int id2dt2_brick, string varnameU,  string datanameV, string dataname_dt, string dataname_twobeta, string dataname_alpha)</literal></para>
+
+    <para>         Function which udpate the velocity
+      <latex style="text"><![CDATA[v^{n+1}]]></latex> after
+      the computation of the displacement
+      <latex style="text"><![CDATA[u^{n+1}]]></latex> and
+      before the next iteration. Specific for Newmark scheme
+      and when the velocity is
+      included in the data of the model.*
+      This version inverts the mass matrix by a
+      conjugate gradient.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'disable bricks', ivec bricks_indices)</literal></para>
+
+    <para>          Disable a brick (the brick will no longer participate to the
+       building of the tangent linear system).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'enable bricks', ivec bricks_indices)</literal></para>
+
+    <para>          Enable a disabled brick. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'disable variable', string varname)</literal></para>
+
+    <para>          Disable a variable for a solve. The next solve will operate only on
+       the remaining variables. This allows to solve separately different
+       parts of a model. If there is a strong coupling of the variables,
+       a fixed point strategy can the be used. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'enable variable', string varname)</literal></para>
+
+    <para>          Enable a disabled variable. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'first iter')</literal></para>
+
+    <para>          To be executed before the first iteration of a time integration
+       scheme. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'next iter')</literal></para>
+
+    <para>          To be executed at the end of each iteration of a time
+       integration scheme. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add basic contact brick', string varname_u, string multname_n[, string multname_t], string dataname_r, spmat BN[, spmat BT, string dataname_friction_coeff][, string dataname_gap[, string dataname_alpha[, int augmented_version]])</literal></para>
+
+    <para>          
+     Add a contact with  or without friction brick to the model.
+     If U is the vector
+     of degrees of freedom on which the unilateral constraint is applied,
+     the matrix <literal>BN</literal> have to be such that this constraint is defined by
+     <latex style="text"><![CDATA[B_N U \le 0]]></latex>. A friction condition can be considered by adding
+     the three parameters <literal>multname_t</literal>, <literal>BT</literal> and <literal>dataname_friction_coeff</literal>.
+     In this case, the tangential displacement is <latex style="text"><![CDATA[B_T U]]></latex> and
+     the matrix <literal>BT</literal> should have as many rows as <literal>BN</literal> multiplied by
+     <latex style="text"><![CDATA[d-1]]></latex> where <latex style="text"><![CDATA[d]]></latex> is the domain dimension.
+     In this case also, <literal>dataname_friction_coeff</literal> is a data which represents
+     the coefficient of friction. It can be a scalar or a vector representing a
+     value on each contact condition.  The unilateral constraint is prescribed
+     thank to a multiplier
+     <literal>multname_n</literal> whose dimension should be equal to the number of rows of
+     <literal>BN</literal>. If a friction condition is added, it is prescribed with a
+     multiplier <literal>multname_t</literal> whose dimension should be equal to the number
+     of rows of <literal>BT</literal>. The augmentation parameter <literal>r</literal> should be chosen in
+     a range of
+     acceptabe values (see Getfem user documentation). <literal>dataname_gap</literal> is an
+     optional parameter representing the initial gap. It can be a single value
+     or a vector of value. <literal>dataname_alpha</literal> is an optional homogenization
+     parameter for the augmentation parameter
+     (see Getfem user documentation).  The parameter <literal>augmented_version</literal>
+     indicates the augmentation strategy : 1 for the non-symmetric
+     Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+     the coupling between contact and Coulomb friction), 3 for the symmetric
+     one with an additional term, 4 for the new unsymmetric method,
+     5 for the new unsymmetric method with De Saxce projection. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'contact brick set BN', int indbrick, spmat BN)</literal></para>
+
+    <para>       Can be used to set the BN matrix of a basic contact/friction brick. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_model_set(model M, 'contact brick set BT', int indbrick, spmat BT)</literal></para>
+
+    <para>         Can be used to set the BT matrix of a basic contact with
+      friction brick. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add nodal contact with rigid obstacle brick',  mesh_im mim, string varname_u, string multname_n[, string multname_t], string dataname_r[, string dataname_friction_coeff], int region, string obstacle[,  int augmented_version])</literal></para>
+
+    <para>   
+    Add a contact with or without friction condition with a rigid obstacle
+    to the model. The condition is applied on the variable <literal>varname_u</literal>
+    on the boundary corresponding to <literal>region</literal>. The rigid obstacle should
+    be described with the string <literal>obstacle</literal> being a signed distance to
+    the obstacle. This string should be an expression where the coordinates
+    are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
+    obstacle correspond to <latex style="text"><![CDATA[z \le 0]]></latex>, the corresponding signed distance
+    will be simply "z". <literal>multname_n</literal> should be a fixed size variable whose size
+    is the number of degrees of freedom on boundary <literal>region</literal>. It represents the
+    contact equivalent nodal forces. In order to add a friction condition
+    one has to add the <literal>multname_t</literal> and <literal>dataname_friction_coeff</literal> parameters.
+    <literal>multname_t</literal> should be a fixed size variable whose size is
+    the number of degrees of freedom on boundary <literal>region</literal> multiplied by
+    <latex style="text"><![CDATA[d-1]]></latex> where <latex style="text"><![CDATA[d]]></latex> is the domain dimension. It represents
+    the friction equivalent nodal forces.
+    The augmentation parameter <literal>r</literal> should be chosen in a
+    range of acceptabe values (close to the Young modulus of the elastic
+    body, see Getfem user documentation).  <literal>dataname_friction_coeff</literal> is
+    the friction coefficient. It could be a scalar or a vector of values
+    representing the friction coefficient on each contact node. 
+    The parameter <literal>augmented_version</literal>
+    indicates the augmentation strategy : 1 for the non-symmetric
+    Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+    the coupling between contact and Coulomb friction),
+    3 for the new unsymmetric method.
+    Basically, this brick compute the matrix BN
+    and the vectors gap and alpha and calls the basic contact brick. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add integral contact with rigid obstacle brick',  mesh_im mim, string varname_u, string multname, string dataname_obstacle, string dataname_r [, string dataname_friction_coeff], int region [, int option [, string dataname_alpha [, string dataname_wt [, string dataname_gamma [, string dataname_vt]]]]])</literal></para>
+
+    <para>   
+      Add a contact with or without friction condition with a rigid obstacle
+      to the model. This brick adds a contact which is defined
+      in an integral way. It is the direct approximation of an augmented
+      Lagrangian formulation (see Getfem user documentation) defined at the
+      continuous level. The advantage should be a better scalability:
+      the number of the
+      Newton iterations should be more or less independent of the mesh size.
+      The condition is applied on the variable <literal>varname_u</literal>
+      on the boundary corresponding to <literal>region</literal>. The rigid obstacle should
+      be described with the data <literal>dataname_obstacle</literal> being a signed distance
+      to the obstacle (interpolated on a finite element method).
+      <literal>multname</literal> should be a fem variable representing the contact stress.
+      An inf-sup condition between <literal>multname</literal> and <literal>varname_u</literal> is required.
+      The augmentation parameter <literal>dataname_r</literal> should be chosen in a
+      range of acceptable values. <literal>dataname_friction_coeff</literal> is the friction
+      coefficient which could be constant or defined on a finite element
+      method.
+      Possible values for <literal>option</literal> is 1 for the non-symmetric Alart-Curnier
+      augmented Lagrangian method, 2 for the symmetric one, 3 for the
+      non-symmetric Alart-Curnier method with an additional augmentation
+      and 4 for a new unsymmetric method. The default value is 1.
+      <literal>dataname_alpha</literal> and <literal>dataname_wt</literal> are optional parameters to solve
+      evolutionary friction problems. <literal>dataname_gamma</literal> and <literal>dataname_vt</literal>
+      represent optional data for adding a parameter-dependent sliding
+      velocity to the friction condition.
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add penalized contact with rigid obstacle brick',  mesh_im mim, string varname_u, string dataname_obstacle, string dataname_r [, string dataname_coeff,] int region [, int option, string dataname_lambda, [, string dataname_alpha [, string dataname_wt]]])</literal></para>
+
+    <para>
+      Adds a penalized contact with or without friction condition with a
+      rigid obstacle to the model.
+      The condition is applied on the variable <literal>varname_u</literal>
+      on the boundary corresponding to <literal>region</literal>. The rigid obstacle should
+      be described with the data <literal>dataname_obstacle</literal> being a signed distance to
+      the obstacle (interpolated on a finite element method).
+      The penalization parameter <literal>dataname_r</literal> should be chosen
+      large enough to prescribe approximate non-penetration and friction
+      conditions but not too large not to deteriorate too much the
+      conditionning of the tangent system.
+      <literal>dataname_lambda</literal> is an optional parameter used if option
+      is 2. In that case, the penalization term is shifted by lambda (this
+      allows the use of an Uzawa algorithm on the corresponding augmented
+      Lagrangian formulation)
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add Nitsche contact with rigid obstacle brick',  mesh_im mim, string varname_u, string dataname_obstacle, string dataname_r, string dataname_friction_coeff, string dataname_lambda, string dataname_mu, int region)</literal></para>
+
+    <para>   
+      Add a contact with friction condition with a rigid obstacle
+      to the model with  Nitsche strategy (no multiplier) in an integral way.
+      This is an experimental brick, which works only for linear homogeneous
+      isotropic elasticity.
+      The condition is applied on the variable <literal>varname_u</literal>
+      on the boundary corresponding to <literal>region</literal>. The rigid obstacle should
+      be described with the data <literal>dataname_obstacle</literal> being a signed distance
+      to the obstacle (interpolated on a finite element method).
+      The Nitsche parameter <literal>dataname_r</literal> should be chosen in a
+      range of acceptable values. <literal>dataname_friction_coeff</literal> is the friction
+      coefficient which could be constant or defined on a finite element
+      method. <literal>dataname_lambda</literal> and <literal>dataname_mu</literal> are the Lame coefficients.
+    
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add nodal contact between nonmatching meshes brick',  mesh_im mim1[, mesh_im mim2], string varname_u1[, string varname_u2], string multname_n[, string multname_t], string dataname_r[, string dataname_fr], int rg1, int rg2[, int slave1, int slave2,  int augmented_version])</literal></para>
+
+    <para>   
+    Add a contact with or without friction condition between two faces of
+    one or two elastic bodies. The condition is applied on the variable
+    <literal>varname_u1</literal> or the variables <literal>varname_u1</literal> and <literal>varname_u2</literal> depending
+    if a single or two distinct displacement fields are given. Integers
+    <literal>rg1</literal> and <literal>rg2</literal> represent the regions expected to come in contact with
+    each other. In the single displacement variable case the regions defined
+    in both <literal>rg1</literal> and <literal>rg2</literal> refer to the variable <literal>varname_u1</literal>. In the case
+    of two displacement variables, <literal>rg1</literal> refers to <literal>varname_u1</literal> and <literal>rg2</literal>
+    refers to <literal>varname_u2</literal>. <literal>multname_n</literal> should be a fixed size variable
+    whose size is the number of degrees of freedom on those regions among
+    the ones defined in <literal>rg1</literal> and <literal>rg2</literal> which are characterized as "slaves".
+    It represents the contact equivalent nodal normal forces. <literal>multname_t</literal>
+    should be a fixed size variable whose size corresponds to the size of
+    <literal>multname_n</literal> multiplied by qdim - 1 . It represents the contact
+    equivalent nodal tangent (frictional) forces. The augmentation parameter
+    <literal>r</literal> should be chosen in a range of acceptabe values (close to the Young
+    modulus of the elastic body, see Getfem user documentation). The
+    friction coefficient stored in the parameter <literal>fr</literal> is either a single
+    value or a vector of the same size as <literal>multname_n</literal>. The optional
+    parameters <literal>slave1</literal> and <literal>slave2</literal> declare if the regions defined in <literal>rg1</literal>
+    and <literal>rg2</literal> are correspondingly considered as "slaves". By default
+    <literal>slave1</literal> is true and <literal>slave2</literal> is false, i.e. <literal>rg1</literal> contains the slave
+    surfaces, while 'rg2' the master surfaces. Preferrably only one of
+    <literal>slave1</literal> and <literal>slave2</literal> is set to true.  The parameter <literal>augmented_version</literal>
+    indicates the augmentation strategy : 1 for the non-symmetric
+    Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+    the coupling between contact and Coulomb friction),
+    3 for the new unsymmetric method.
+    Basically, this brick computes the matrices BN and BT and the vectors
+    gap and alpha and calls the basic contact brick. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add integral large sliding contact brick',  mesh_im mim, string varname_u, string multname, string dataname_r, string dataname_fr, int rg)</literal></para>
+
+    <para>          (still experimental brick)
+       Add a large sliding contact with friction brick to the model.
+       This brick is able to deal with auto-contact, contact between
+       several deformable bodies and contact with rigid obstacles.
+       The condition is applied on the variable <literal>varname_u</literal> on the
+       boundary corresponding to <literal>region</literal>. <literal>dataname_r</literal> is the augmentation
+       parameter of the augmented Lagrangian. <literal>dataname_friction_coeff</literal>
+       is the friction coefficient. <literal>mim</literal> is an integration method on the
+       boundary. <literal>varname_u</literal> is the variable on which the contact condition 
+       will be prescribed (should be of displacement type). <literal>multname</literal> is 
+       a multiplier defined on the boundary which will represent the contact
+       force. If no additional boundary or rigid
+       obstacle is added, only auto-contact will be detected. Use
+       <literal>add_boundary_to_large_sliding_contact_brick</literal> and
+       <literal>add_rigid_obstacle_to_large_sliding_contact_brick</literal> to add contact
+       boundaries and rigid obstacles. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add boundary to large sliding contact brick',  int indbrick, mesh_im mim, string varname_u, string multname, int rg)</literal></para>
+
+    <para>          Add a contact boundary to an existing large sliding contact brick.
+      <literal>indbrick</literal> is the brick index. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ind = gf_model_set(model M, 'add rigid obstacle to large sliding contact brick',  int indbrick, string obs)</literal></para>
+
+    <para>          Add a rigid obstacle to an existing large sliding contact brick.
+      <literal>indbrick</literal> is the brick index, <literal>obs</literal> is the expression of a
+      function which should be closed to a signed distance to the obstacle. 
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_model_get">gf_model_get</link></member>
-
-      <member><link linkend="gf_model">gf_model</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_plot_1D.xml b/interface/src/scilab/help/en_US/gf_plot_1D.xml
index 1c2fe08..a8b8f83 100644
--- a/interface/src/scilab/help/en_US/gf_plot_1D.xml
+++ b/interface/src/scilab/help/en_US/gf_plot_1D.xml
@@ -10,7 +10,7 @@
   <refnamediv>
     <refname>gf_plot_1D</refname>
 
-    <refpurpose>This function plots a 1D finite elements field.</refpurpose>
+    <refpurpose>This function plots a 1D finite element field.</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
@@ -22,28 +22,27 @@
   <refsection>
     <title>Description</title>
 
-    <para>This function plots a 1D finite elements field.</para>
+    <para>This function plots a 1D finite element field.</para>
 
-    <para>The options are specified as pairs of 'option name'/'option
+    <para>Available options are specified as pairs of 'option name'/'option
     value':</para>
 
     <itemizedlist>
       <listitem>
-        <para>'style', 'bo-' : the line style and dof marker style (same //
-        syntax as in the matlab command 'plot').</para>
+        <para>'style', 'bo-': line style and dof marker style (same //
+        syntax as in the Scilab command 'plot');</para>
       </listitem>
 
       <listitem>
-        <para>'color', [] : override the line color.</para>
+        <para>'color', '': override line color (by a given color name);</para>
       </listitem>
 
       <listitem>
-        <para>'dof_color', [1,0,0] : color of the markers for the degrees of
-        freedom.</para>
+        <para>'dof_color', '': overrride color of dof markers;</para>
       </listitem>
 
       <listitem>
-        <para>'width', 2 : line width. </para>
+        <para>'width', 2: line width. </para>
       </listitem>
     </itemizedlist>
   </refsection>
diff --git a/interface/src/scilab/help/en_US/gf_plot_mesh.xml b/interface/src/scilab/help/en_US/gf_plot_mesh.xml
index b21df9b..b0b1749 100644
--- a/interface/src/scilab/help/en_US/gf_plot_mesh.xml
+++ b/interface/src/scilab/help/en_US/gf_plot_mesh.xml
@@ -105,7 +105,7 @@
     <title>Examples</title>
 
     <para>Displaying a donut (meshed with quadratic tetrahedrons) created with
-    <link linkend="http://gid.cimne.upc.es/">GiD</link>:</para>
+    <ulink url="http://gid.cimne.upc.es/">GiD</ulink>:</para>
 
     <programlisting role="example"> 
 // the mesh is in the demos directory of the distribution
diff --git a/interface/src/scilab/help/en_US/gf_poly.xml b/interface/src/scilab/help/en_US/gf_poly.xml
index 2fd5c6b..e061b0e 100644
--- a/interface/src/scilab/help/en_US/gf_poly.xml
+++ b/interface/src/scilab/help/en_US/gf_poly.xml
@@ -9,40 +9,58 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_poly</refname>
-
-    <refpurpose>Performs various operations on the polynom</refpurpose>
+    <refpurpose>  
+  Performs various operations on the polynom POLY.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>gf_poly(operation, poly [,args])</synopsis>
+    <synopsis>gf_poly(poly P, 'print')</synopsis>
+    <synopsis>gf_poly(poly P, 'product')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  
+  Performs various operations on the polynom POLY.
+</para>
+  </refsection>
 
-    <para>Performs various operations on the polynom
-    <literal>poly</literal>.</para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_poly('print', p) Prints the content of P.</para>
-      </listitem>
+    <listitem>
+    <para><literal>gf_poly(poly P, 'print')</literal></para>
+
+    <para>         Prints the content of P.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_poly(poly P, 'product')</literal></para>
+
+    <para>         To be done ... !
+    
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_integ">gf_integ</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_precond.xml b/interface/src/scilab/help/en_US/gf_precond.xml
index 79b1ef6..cf6e9ee 100644
--- a/interface/src/scilab/help/en_US/gf_precond.xml
+++ b/interface/src/scilab/help/en_US/gf_precond.xml
@@ -9,97 +9,127 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_precond</refname>
-
-    <refpurpose>Create a preconditioner</refpurpose>
+    <refpurpose>  The preconditioners may store REAL or COMPLEX values. They accept getfem
+  sparse matrices and Matlab sparse matrices.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-gf_precond('identity')
-gf_precond('cidentity')
-gf_precond('diagonal', vec D)
-gf_precond('ildlt', spmat M)
-gf_precond('ilu', spmat M)
-gf_precond('ildltt', spmat M [, int fillin [, scalar threshold]])
-gf_precond('ilut', spmat M [, int fillin [, scalar threshold]])gf_precond('superlu', spmat M)
-    </synopsis>
+    <synopsis>PC = gf_precond('identity')</synopsis>
+    <synopsis>PC = gf_precond('cidentity')</synopsis>
+    <synopsis>PC = gf_precond('diagonal', vec D)</synopsis>
+    <synopsis>PC = gf_precond('ildlt', spmat m)</synopsis>
+    <synopsis>PC = gf_precond('ilu', spmat m)</synopsis>
+    <synopsis>PC = gf_precond('ildltt', spmat m[, int fillin[, scalar threshold]])</synopsis>
+    <synopsis>PC = gf_precond('ilut', spmat m[, int fillin[, scalar threshold]])</synopsis>
+    <synopsis>PC = gf_precond('superlu', spmat m)</synopsis>
+    <synopsis>PC = gf_precond('spmat', spmat m)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for precond objects.</para>
+
+    <para>  The preconditioners may store REAL or COMPLEX values. They accept getfem
+  sparse matrices and Matlab sparse matrices.
+</para>
+  </refsection>
 
-    <para>The preconditioners may store REAL or COMPLEX values. They accept
-    getfem sparse matrices and Scilab sparse matrices.</para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_precond('identity') Create a REAL identity
-        precondioner.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_precond('cidentity') Create a COMPLEX identity
-        preconditioner.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_precond('diagonal', vec D) Create a diagonal
-        precondioner.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_precond('ildlt', Spmat m) Create an ILDLT (Cholesky)
-        preconditioner for the (symmetric) sparse matrix `m`. This
-        preconditioner has the same sparsity pattern than `m` (no
-        fill-in).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_precond('ilu', Spmat m) Create an ILU (Incomplete LU)
-        preconditioner for the sparse matrix `m`. This preconditioner has the
-        same sparsity pattern than `m` (no fill-in).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_precond('ildltt', Spmat m[, int fillin[, scalar threshold]])
-        Create an ILDLT (Cholesky with filling) preconditioner for the
-        (symmetric) sparse matrix `m`. The preconditioner may add at most
-        `fillin` additional non-zero entries on each line. The default value
-        for `fillin` is 10, and the default threshold is1e-7.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_precond('ilut', Spmat m[, int fillin[, scalar threshold]])
-        Create an ILUT (Incomplete LU with filling) preconditioner for the
-        sparse matrix `m`. The preconditioner may add at most `fillin`
-        additional non-zero entries on each line. The default value for
-        `fillin` is 10, and the default threshold is 1e-7.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_precond('superlu', Spmat m) Uses <link linkend="http://crd.lbl.gov/~xiaoye/SuperLU/">SuperLU</link> to build an exact
-          factorization of the sparse matrix `m`. This preconditioner is only available if the getfem-interface was built with 
-	  <link linkend="http://crd.lbl.gov/~xiaoye/SuperLU/">SuperLU</link> support</para>
-
-        <para>Note that LU factorization is likely to eat all your memory for 3D problems.</para>
-      </listitem>
+    <listitem>
+    <para><literal>PC = gf_precond('identity')</literal></para>
+
+    <para>         Create a REAL identity precondioner.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>PC = gf_precond('cidentity')</literal></para>
+
+    <para>         Create a COMPLEX identity precondioner.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>PC = gf_precond('diagonal', vec D)</literal></para>
+
+    <para>         Create a diagonal precondioner.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>PC = gf_precond('ildlt', spmat m)</literal></para>
+
+    <para>         Create an ILDLT (Cholesky) preconditioner for the (symmetric) sparse
+      matrix <literal>m</literal>. This preconditioner has the same sparsity pattern than <literal>m</literal>
+      (no fill-in).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>PC = gf_precond('ilu', spmat m)</literal></para>
+
+    <para>         Create an ILU (Incomplete LU) preconditioner for the sparse
+      matrix <literal>m</literal>. This preconditioner has the same sparsity pattern
+      than <literal>m</literal> (no fill-in).  
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>PC = gf_precond('ildltt', spmat m[, int fillin[, scalar threshold]])</literal></para>
+
+    <para>         Create an ILDLTT (Cholesky with filling) preconditioner for the
+      (symmetric) sparse matrix <literal>m</literal>. The preconditioner may add at most
+      <literal>fillin</literal> additional non-zero entries on each line. The default value
+      for <literal>fillin</literal> is 10, and the default threshold is1e-7.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>PC = gf_precond('ilut', spmat m[, int fillin[, scalar threshold]])</literal></para>
+
+    <para>         Create an ILUT (Incomplete LU with filling) preconditioner for the
+      sparse matrix <literal>m</literal>. The preconditioner may add at most <literal>fillin</literal>
+      additional non-zero entries on each line. The default value for
+      <literal>fillin</literal> is 10, and the default threshold is 1e-7.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>PC = gf_precond('superlu', spmat m)</literal></para>
+
+    <para>         Uses SuperLU to build an exact factorization of the sparse matrix <literal>m</literal>.
+      This preconditioner is only available if the getfem-interface was
+      built with SuperLU support. Note that LU factorization is likely to
+      eat all your memory for 3D problems.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>PC = gf_precond('spmat', spmat m)</literal></para>
+
+    <para>         Preconditionner given explicitely by a sparse matrix.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_precond_get">gf_precond_get</link></member>
-      <member><link linkend="gf_linsolve">gf_linsolve</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_precond_get.xml b/interface/src/scilab/help/en_US/gf_precond_get.xml
index e5a6266..2a2562c 100644
--- a/interface/src/scilab/help/en_US/gf_precond_get.xml
+++ b/interface/src/scilab/help/en_US/gf_precond_get.xml
@@ -9,78 +9,99 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_precond_get</refname>
-
-    <refpurpose>get informations related to the preconditioner</refpurpose>
+    <refpurpose>  General function for querying information about precond objects.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-vec PV=gf_precond_get(P,'mult', vec V)
-vec tPV=gf_precond_get(P,'tmult', vec V)
-string S=gf_precond_get(P,'type')
-ivec gf_precond_get('size')
-int gf_precond_get(P,'is_complex')string S=gf_precond_get(P,'info')
-    </synopsis>
+    <synopsis>gf_precond_get(precond P, 'mult', vec V)</synopsis>
+    <synopsis>gf_precond_get(precond P, 'tmult', vec V)</synopsis>
+    <synopsis>gf_precond_get(precond P, 'type')</synopsis>
+    <synopsis>gf_precond_get(precond P, 'size')</synopsis>
+    <synopsis>gf_precond_get(precond P, 'is_complex')</synopsis>
+    <synopsis>s = gf_precond_get(precond P, 'char')</synopsis>
+    <synopsis>gf_precond_get(precond P, 'display')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
-
-    <itemizedlist>
-      <listitem>
-        <para>gf_precond_get(P,'mult',vec V) Apply the preconditioner to the
-        supplied vector.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_precond_get(P,'tmult',vec V) Apply the transposed
-        preconditioner to the supplied vector.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_precond_get(P,'type') Return a string describing the type of
-        the preconditioner ('ilu', 'ildlt',..).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_precond_get(P,'size') Return the dimensions of the
-        preconditioner.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_precond_get(P,'is_complex') Return 1 if the preconditioner
-        stores complex values.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_precond_get(P,'info') Return a short informative string about
-        the preconditioner.</para>
-      </listitem>
-    </itemizedlist>
+    <para>  General function for querying information about precond objects.
+</para>
   </refsection>
 
   <refsection>
-    <title>Examples</title>
+    <title>Command list</title>
+
+    <itemizedlist>
+    <listitem>
+    <para><literal>gf_precond_get(precond P, 'mult', vec V)</literal></para>
+
+    <para>       Apply the preconditioner to the supplied vector.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_precond_get(precond P, 'tmult', vec V)</literal></para>
+
+    <para>         Apply the transposed preconditioner to the supplied vector.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_precond_get(precond P, 'type')</literal></para>
+
+    <para>         Return a string describing the type of the preconditioner ('ilu', 'ildlt',..).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_precond_get(precond P, 'size')</literal></para>
 
-    <programlisting role="example"> 
-  Add an example here
- </programlisting>
+    <para>         Return the dimensions of the preconditioner.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_precond_get(precond P, 'is_complex')</literal></para>
+
+    <para>         Return 1 if the preconditioner stores complex values.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>s = gf_precond_get(precond P, 'char')</literal></para>
+
+    <para>         Output a (unique) string representation of the precond.
+
+      This can be used to perform comparisons between two
+      different precond objects.
+      This function is to be completed.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_precond_get(precond P, 'display')</literal></para>
+
+    <para>         displays a short summary for a precond object.
+    </para>
+    </listitem>
+
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_precond">gf_precond</link></member>
-      <member><link linkend="gf_linsolve">gf_linsolve</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_slice.xml b/interface/src/scilab/help/en_US/gf_slice.xml
index efbffd8..37a1f5d 100644
--- a/interface/src/scilab/help/en_US/gf_slice.xml
+++ b/interface/src/scilab/help/en_US/gf_slice.xml
@@ -9,205 +9,177 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_slice</refname>
+    <refpurpose>  Creation of a mesh slice. Mesh slices are very similar to a
+  P1-discontinuous mesh_fem on which interpolation is very fast. The slice is
+  built from a mesh object, and a description of the slicing operation, for
+  example::
 
-    <refpurpose>Mesh slice creation.</refpurpose>
+    sl = gf_slice({'planar',+1,[0;0],[1;0]}, m, 5);
+
+  cuts the original mesh with the half space {y>0}. Each convex of the
+  original mesh <literal>m</literal> is simplexified (for example a quadrangle is splitted
+  into 2 triangles), and each simplex is refined 5 times.
+
+  Slicing operations can be:
+
+  * cutting with a plane, a sphere or a cylinder
+  * intersection or union of slices
+  * isovalues surfaces/volumes
+  * "points", "streamlines" (see below)
+
+  If the first argument is a mesh_fem <literal>mf</literal> instead of a mesh, and if it is
+  followed by a <literal>mf</literal>-field <literal>u</literal>, then the deformation <literal>u</literal> will be applied to the
+  mesh before the slicing operation.
+
+  The first argument can also be a slice.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-sl = gf_slice(sliceop, mesh M, int REFINE [, CVFLST])
-sl = gf_slice(sliceop, mesh_fem MF, vec U, int REFINE [, CVFLST])
-sl = gf_slice(sliceop, slice SL)
-sl = gf_slice('streamlines', mesh_fem MF, vec U, mat SEEDS)
-sl = gf_slice('points', mesh M, mat PTS)  
-    </synopsis>
+    <synopsis>sl = gf_slice(sliceop, {slice sl|{mesh m| mesh_fem mf, vec U}, int refine}[, mat CVfids])</synopsis>
+    <synopsis>sl = gf_slice('streamlines', mesh_fem mf, mat U, mat S)</synopsis>
+    <synopsis>sl = gf_slice('points', mesh m, mat Pts)</synopsis>
+    <synopsis>sl = gf_slice('load', string filename[, mesh m])</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for slice objects.</para>
+
+    <para>  Creation of a mesh slice. Mesh slices are very similar to a
+  P1-discontinuous mesh_fem on which interpolation is very fast. The slice is
+  built from a mesh object, and a description of the slicing operation, for
+  example::
+
+    sl = gf_slice({'planar',+1,[0;0],[1;0]}, m, 5);
 
-    <para>Creation of a mesh slice. Mesh slices are very similar to a
-    P1-discontinuous mesh_fem on which interpolation is very fast. The slice
-    is built from a mesh object, and a description of the slicing operation,
-    for example,</para>
+  cuts the original mesh with the half space {y>0}. Each convex of the
+  original mesh <literal>m</literal> is simplexified (for example a quadrangle is splitted
+  into 2 triangles), and each simplex is refined 5 times.
 
-    <programlisting role="example"><![CDATA[ 
-sl = gf_slice(list('planar',+1,[0;0],[1;0]), m, 5);
- ]]></programlisting>
+  Slicing operations can be:
 
-    <para>cuts the original mesh with the half space [y>0]. Each convex of
-    the original mesh m is simplexified (for example a quadrangle is splitted
-    into 2 triangles), and each simplex is refined 5 times.</para>
+  * cutting with a plane, a sphere or a cylinder
+  * intersection or union of slices
+  * isovalues surfaces/volumes
+  * "points", "streamlines" (see below)
 
-    <para>Slicing operations can be:</para>
+  If the first argument is a mesh_fem <literal>mf</literal> instead of a mesh, and if it is
+  followed by a <literal>mf</literal>-field <literal>u</literal>, then the deformation <literal>u</literal> will be applied to the
+  mesh before the slicing operation.
+
+  The first argument can also be a slice.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>cutting with a plane, a sphere or a cylinder</para>
-      </listitem>
+    <listitem>
+    <para><literal>sl = gf_slice(sliceop, {slice sl|{mesh m| mesh_fem mf, vec U}, int refine}[, mat CVfids])</literal></para>
 
-      <listitem>
-        <para>intersection or union of slices</para>
-      </listitem>
+    <para>     Create a slice using <literal>sliceop</literal> operation.
 
-      <listitem>
-        <para>isovalues surfaces/volumes</para>
-      </listitem>
+  <literal>sliceop</literal> operation is specified with Scilab CELL arrays (i.e. with braces) . The first element is the
+  name of the operation, followed the slicing options:
 
-      <listitem>
-        <para>"points", "streamlines" (see below)</para>
-      </listitem>
-    </itemizedlist>
+  * {'none'} :
+    Does not cut the mesh.
 
-    <para>If the first argument is a mesh_fem mf instead of a mesh, and if it
-    is followed by a field <literal>U</literal> (with <emphasis>size(U,1) ==
-    gf_mesh_fem_get(mf,U)</emphasis>), then the deformation
-    <literal>U</literal> will be applied to the mesh before the slicing
-    operation.</para>
+  * {'planar', int orient, vec p, vec n} :
+    Planar cut. <literal>p</literal> and <literal>n</literal> define a half-space, <literal>p</literal> being a point belong to
+    the boundary of the half-space, and <literal>n</literal> being its normal. If <literal>orient</literal> is
+    equal to -1 (resp. 0, +1), then the slicing operation will cut the mesh
+    with the "interior" (resp. "boundary", "exterior") of the half-space.
+    <literal>orient</literal> may also be set to +2 which means that the mesh will be sliced,
+    but both the outer and inner parts will be kept.
 
-    <para>The first argument can also be a slice.</para>
+  * {'ball', int orient, vec c, scalar r} :
+    Cut with a ball of center <literal>c</literal> and radius <literal>r</literal>.
 
-    <para>Slicing operations:</para>
+  * {'cylinder', int orient, vec p1, vec p2, scalar r} :
+    Cut with a cylinder whose axis is the line <literal>(p1, p2)</literal> and whose radius
+    is <literal>r</literal>.
 
-    <para>Always specifiy them between braces (i.e. in a cell array). The
-    first argument is the name of the operation, followed the slicing
-    options.</para>
+  * {'isovalues', int orient, mesh_fem mf, vec U, scalar s} :
+    Cut using the isosurface of the field <literal>U</literal> (defined on the mesh_fem <literal>mf</literal>).
+    The result is the set <literal>{x such that <latex style="text"><![CDATA[U(x) \leq s]]></latex>}</literal> or <literal>{x such that
+    </literal>U<literal>(x)=</literal>s<literal>}</literal> or <literal>{x such that </literal>U<literal>(x) >= </literal>s<literal>}</literal> depending on the value of
+    <literal>orient</literal>.
 
-    <itemizedlist>
-      <listitem>
-        <para>list('none'): Does not cut the mesh.</para>
-      </listitem>
-
-      <listitem>
-        <para>list('planar', orient, p, n): Planar cut. <literal>p</literal>
-        and <literal>n</literal> define a half-space, <literal>p</literal>
-        being a point belong to the boundary of the half-space, and n being
-        its normal. If <literal>orient</literal> is equal to -1 (resp. 0, +1),
-        then the slicing operation will cut the mesh with the "interior"
-        (resp. "boundary", "exterior") of the half-space.
-        <literal>Orient</literal> may also be set to +2 which means that the
-        mesh will be sliced, but both the outer and inner parts will be
-        kept.</para>
-      </listitem>
-
-      <listitem>
-        <para>list('ball', orient, c, r): Cut with a ball of center
-        <literal>c</literal> and radius <literal>r</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>list('cylinder', orient, p1, p2, r): Cut with a cylinder whose
-        axis is the line (p1,p2) and whose radius is r.</para>
-      </listitem>
-
-      <listitem>
-        <para>list('isovalues',orient, mesh_fem MF, vec U, scalar V): Cut
-        using the isosurface of the field <literal>U</literal> (defined on the
-        mesh_fem <literal>MF</literal>). The result is the set <emphasis>{x
-        such that U(x) <= V} or {x such that U(x) == V} or {x such that
-        U(x) <= V}</emphasis> depending on the value of
-        <literal>ORIENT</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>list('boundary'[, SLICEOP]): Return the boundary of the result
-        of <literal>SLICEOP</literal>, where <literal>SLICEOP</literal> is any
-        slicing operation. If <literal>SLICEOP</literal> is not specified,
-        then the whole mesh is considered (i.e. it is equivalent to
-        list('boundary',list('none'))).</para>
-      </listitem>
-
-      <listitem>
-        <para>list('explode', coef): Build an 'exploded' view of the mesh:
-        each convex is shrinked (<emphasis>0 <coef <= 1</emphasis>). In
-        the case of 3D convexes, only their faces are kept.</para>
-      </listitem>
-
-      <listitem>
-        <para>list('union', SLICEOP1, SLICEOP2),</para>
-      </listitem>
-
-      <listitem>
-        <para>list('intersection', SLICEOP1, SLICEOP2),</para>
-      </listitem>
-
-      <listitem>
-        <para>list('comp', SLICEOP),</para>
-      </listitem>
-
-      <listitem>
-        <para>list('diff', SLICEOP1, SLICEOP2): Boolean operations: returns
-        the union,intersection,complementary or difference of slicing
-        operations.</para>
-      </listitem>
-
-      <listitem>
-        <para>list('mesh', MESH): Build a slice which is the intersection of
-        the sliced mesh with another mesh. The slice is such that all of its
-        simplexes are stricly contained into a convex of each mesh.</para>
-      </listitem>
-    </itemizedlist>
+  * {'boundary'[, SLICEOP]} :
+    Return the boundary of the result of SLICEOP, where SLICEOP is any
+    slicing operation. If SLICEOP is not specified, then the whole mesh is
+    considered (i.e. it is equivalent to {'boundary',{'none'}}).
 
+  * {'explode', mat Coef} :
+    Build an 'exploded' view of the mesh: each convex is shrinked (<latex style="text"><![CDATA[0 <
+    \text{Coef} \leq 1]]></latex>). In the case of 3D convexes, only their faces are kept.
 
-    <para>SPECIAL SLICES:</para>
+  * {'union', SLICEOP1, SLICEOP2} :
+    Returns the union of slicing operations.
 
-    <para>There are also some special calls to gf_slice:</para>
+  * {'intersection', SLICEOP1, SLICEOP2} :
+    Returns the intersection of slicing operations, for example::
 
-    <itemizedlist>
-      <listitem>
-        <para>gf_slice('streamlines',mf, U, mat SEEDS): compute streamlines of
-        the (vector) field <literal>U</literal>, with seed points given by the
-        columns of <literal>SEEDS</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_slice('points', m, mat PTS): return the "slice" composed of
-        points given by the columns of <literal>PTS</literal> (useful for
-        interpolation on a given set of sparse points, see
-        <emphasis>gf_compute(mf,U,'interpolate on',sl)</emphasis>.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_slice('load', filename [,m]): load the slice (and its
-        linked_mesh if it is not given as an argument) from a text
-        file.</para>
-      </listitem>
-    </itemizedlist>
-  </refsection>
+      sl = gf_slice({intersection',{'planar',+1,[0;0;0],[0;0;1]},
+                                 {'isovalues',-1,mf2,u2,0}},mf,u,5)
 
-  <refsection>
-    <title>Examples</title>
+  * {'comp', SLICEOP} :
+    Returns the complementary of slicing operations.
+
+  * {'diff', SLICEOP1, SLICEOP2} :
+    Returns the difference of slicing operations.
+
+  * {'mesh', mesh m} :
+    Build a slice which is the intersection of the sliced mesh with another
+    mesh. The slice is such that all of its simplexes are stricly contained
+    into a convex of each mesh.
+
+    </para>
+    </listitem>
 
-    <para>Apply the deformation given by mf,U on the mesh, then slice it with the z+ half-space, and keep only the part where U2(x) > 0. </para>
+    <listitem>
+    <para><literal>sl = gf_slice('streamlines', mesh_fem mf, mat U, mat S)</literal></para>
 
-    <programlisting role="example"><![CDATA[ 
-sl = gf_slice(list(intersection',list('planar',+1,[0;0;0],[0;0;1]),list('isovalues',-1,mf2,U2,0)),mf,U,5);
- ]]></programlisting>
+    <para>         Compute streamlines of the (vector) field <literal>U</literal>, with seed points given
+      by the columns of <literal>S</literal>.
+    </para>
+    </listitem>
 
-    <para>view the convex quality of a 2D or 3D mesh m:</para>
-    
-    <programlisting role="example"><![CDATA[ 
-gf_plot_slice(gf_slice(list('explode', 0.7), m, 2), 'convex_data', gf_mesh_get(m,'quality'));
- ]]></programlisting>
+    <listitem>
+    <para><literal>sl = gf_slice('points', mesh m, mat Pts)</literal></para>
 
-    <para>See the gf_plot_slice usage example for more slices. </para>
+    <para>         Return the "slice" composed of points given by the columns of <literal>Pts</literal>
+      (useful for interpolation on a given set of sparse points, see
+      <literal></literal>gf_compute('interpolate on',sl)<literal></literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>sl = gf_slice('load', string filename[, mesh m])</literal></para>
+
+    <para>         Load the slice (and its linked mesh if it is not given as an argument)
+      from a text file.
+    </para>
+    </listitem>
+
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_slice_get">gf_slice_get</link></member>
-      <member><link linkend="gf_slice_set">gf_slice_set</link></member>
-      <member><link linkend="gf_plot_slice">gf_plot_slice</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_slice_get.xml b/interface/src/scilab/help/en_US/gf_slice_get.xml
index 69a232d..866a6c4 100644
--- a/interface/src/scilab/help/en_US/gf_slice_get.xml
+++ b/interface/src/scilab/help/en_US/gf_slice_get.xml
@@ -9,213 +9,253 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_slice_get</refname>
-
-    <refpurpose>Get informations related to mesh slices</refpurpose>
+    <refpurpose>  General function for querying information about slice objects.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-int I = gf_slice_get(sl, 'dim')
-scalar I = gf_slice_get(sl, 'area')
-ivec cvlst = gf_slice_get(sl, 'cvs')
-int n = gf_slice_get(sl, 'nbpts')
-mat P = gf_slice_get(sl, 'pts')
-ivec NS = gf_slice_get(sl, 'nbsplxs')
-int NS = gf_slice_get(sl, 'nbsplxs',int dim)
-[imat S, ivec CV2SPLX] = gf_slice_get(sl, 'splxs', int dim)
-mat E = gf_slice_get(sl, 'edges')
-[mat P, ivec E1, ivec E2] = gf_slice_get(sl, 'edges')
-vec Usl=gf_slice_get(sl, 'interpolate_convex_data', Ucv)
-mesh m = gf_slice_get(sl, 'linked mesh')
-gf_slice_get(sl,'export_to_vtk', filename ... [, 'ascii'][, 'edges'],...)
-gf_slice_get(sl,'export_to_pov', filename, ...)
-gf_slice_get(sl,'export_to_dx', filename, ...[, 'ascii'][, 'edges'][, 'append'])int ms=gf_slice_get(sl, 'memsize')
-    </synopsis>
+    <synopsis>d = gf_slice_get(slice S, 'dim')</synopsis>
+    <synopsis>a = gf_slice_get(slice S, 'area')</synopsis>
+    <synopsis>CVids = gf_slice_get(slice S, 'cvs')</synopsis>
+    <synopsis>n = gf_slice_get(slice S, 'nbpts')</synopsis>
+    <synopsis>ns = gf_slice_get(slice S, 'nbsplxs'[, int dim])</synopsis>
+    <synopsis>P = gf_slice_get(slice S, 'pts')</synopsis>
+    <synopsis>{S, CV2S} = gf_slice_get(slice S, 'splxs',int dim)</synopsis>
+    <synopsis>{P, E1, E2} = gf_slice_get(slice S, 'edges')</synopsis>
+    <synopsis>Usl = gf_slice_get(slice S, 'interpolate_convex_data', mat Ucv)</synopsis>
+    <synopsis>m = gf_slice_get(slice S, 'linked mesh')</synopsis>
+    <synopsis>m = gf_slice_get(slice S, 'mesh')</synopsis>
+    <synopsis>z = gf_slice_get(slice S, 'memsize')</synopsis>
+    <synopsis>gf_slice_get(slice S, 'export to vtk', string filename, ...)</synopsis>
+    <synopsis>gf_slice_get(slice S, 'export to pov', string filename)</synopsis>
+    <synopsis>gf_slice_get(slice S, 'export to dx', string filename, ...)</synopsis>
+    <synopsis>gf_slice_get(slice S, 'export to pos', string filename[, string name][[,mesh_fem mf1], mat U1, string nameU1[[,mesh_fem mf1], mat U2, string nameU2,...])</synopsis>
+    <synopsis>s = gf_slice_get(slice S, 'char')</synopsis>
+    <synopsis>gf_slice_get(slice S, 'display')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  General function for querying information about slice objects.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>d = gf_slice_get(sl,'dim') Return the dimension of the slice (2
-        for a 2D mesh, etc..).</para>
-      </listitem>
-
-      <listitem>
-        <para>a = gf_slice_get(sl,'area') Return the area of the slice.</para>
-      </listitem>
-
-      <listitem>
-        <para>CVids = gf_slice_get(sl,'cvs') Return the list of convexes of
-        the original mesh contained in the slice.</para>
-      </listitem>
-
-      <listitem>
-        <para>n = gf_slice_get(sl,'nbpts') Return the number of points in the
-        slice.</para>
-      </listitem>
-
-      <listitem>
-        <para>ns = gf_slice_get(sl,'nbsplxs'[, int dim]) Return the number of
-        simplexes in the slice. Since the slice may contain points (simplexes
-        of dim 0), segments (simplexes of dimension 1), triangles etc., the
-        result is a vector of size gf_slice_get(sl,'dim')+1 , except if the
-        optional argument <literal>dim</literal> is used.</para>
-      </listitem>
-
-      <listitem>
-        <para>P = gf_slice_get(sl,'pts') Return the list of point
-        coordinates.</para>
-      </listitem>
-
-      <listitem>
-        <para>list(S, CV2S) = gf_slice_get(sl,'splxs',int dim) Return the list
-        of simplexes of dimension <literal>dim</literal>. </para>
-
-        <para>On output, S has <emphasis>dim+1</emphasis> rows, each column
-        contains the point numbers of a simplex. The vector
-        <literal>CV2S</literal> can be used to find the list of simplexes for
-        any convex stored in the slice. For example
-        <emphasis>S(:,CV2S(4):CV2S(5)-1)</emphasis> gives the list of
-        simplexes for the fourth convex.</para>
-      </listitem>
-
-      <listitem>
-        <para>list(P, E1, E2) = gf_slice_get(sl,'edges') Return the edges of
-        the linked mesh contained in the slice. <literal>P</literal> contains
-        the list of all edge vertices, <literal>E1</literal> contains the
-        indices of each mesh edge in <literal>P</literal>, and
-        <literal>E2</literal> contains the indices of each "edges" which is on
-        the border of the slice. This function is useless except for
-        post-processing purposes.</para>
-      </listitem>
-
-      <listitem>
-        <para>Usl = gf_slice_get(sl,'interpolate_convex_data',mat Ucv)
-        Interpolate data given on each convex of the mesh to the slice nodes.
-        The input array <literal>Ucv</literal> may have any number of
-        dimensions, but its last dimension should be equal to
-        <emphasis>gf_mesh_get(m,'max cvid')</emphasis>.</para>
-
-        <para>Example of use:</para>
-
-        <programlisting role="example"><![CDATA[  
-gf_slice_get(sl,'interpolate_convex_data', gf_mesh_get(m,'quality'))
- ]]></programlisting>
-      </listitem>
-
-      <listitem>
-        <para> m = gf_slice_get(sl,'linked mesh') Return the mesh on which the
-        slice was taken.</para>
-      </listitem>
-
-      <listitem>
-        <para> z = gf_slice_get(sl,'memsize') Return the amount of memory (in
-        bytes) used by the slice object.</para>
-      </listitem>
-
-      <listitem>
-        <para> gf_slice_get(sl,'export to vtk',string filename ... [,
-        'ascii'][, 'edges'] ...) Export a slice to VTK. Following the
-        <literal>filename</literal>, you may use any of the following
-        options:</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>if 'ascii' is not used, the file will contain binary data
-            (non portable, but fast).</para>
-          </listitem>
-
-          <listitem>
-            <para>if 'edges' is used, the edges of the original mesh will be
-            written instead of the slice content</para>
-          </listitem>
-        </itemizedlist>
-
-        <para>More than one dataset may be written, just list them. Each
-        dataset consists of either:</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>a field interpolated on the slice (scalar, vector or
-            tensor), followed by an optional name.</para>
-          </listitem>
-
-          <listitem>
-            <para>a mesh_fem and a field, followed by an optional name.</para>
-          </listitem>
-        </itemizedlist>
-
-        <para>Examples:</para>
-
-	<programlisting role="example"><![CDATA[ 
-gf_slice_get(sl,'export to vtk','test.vtk',Usl,'first_dataset', mf, U2, 'second_dataset')
-gf_slice_get(sl,'export to vtk','test.vtk','ascii',mf,U2)
-gf_slice_get(sl,'export to vtk','test.vtk','edges','ascii',Uslice)
- ]]></programlisting>
-      </listitem>
-
-      <listitem>
-        <para>gf_slice_get(sl,'export to pov',string filename, ...) Export a
-        the triangles of the slice to POV-RAY.</para>
-      </listitem>
-
-      <listitem>
-        <para> gf_slice_get(sl,'export to dx',string filename, ...) Export a
-        slice to OpenDX. Following the file name, you may use any of the
-        following options:</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>if 'ascii' is not used, the file will contain binary data
-            (non portable, but fast).</para>
-          </listitem>
-
-          <listitem>
-            <para>if 'edges' is used, the edges of the original mesh will be
-            written instead of the slice content.</para>
-          </listitem>
-
-          <listitem>
-            <para>if 'append' is used, the opendx file will not be
-            overwritten, and the new data will be added at the end of the
-            file.</para>
-          </listitem>
-        </itemizedlist>
-
-        <para>More than one dataset may be written, just list them. Each
-        dataset consists of either:</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>a field interpolated on the slice (scalar, vector or
-            tensor), followed by an optional name.</para>
-          </listitem>
-
-          <listitem>
-            <para>a mesh_fem and a field, followed by an optional name.</para>
-          </listitem>
-        </itemizedlist>
-      </listitem>
+    <listitem>
+    <para><literal>d = gf_slice_get(slice S, 'dim')</literal></para>
+
+    <para>         Return the dimension of the slice (2 for a 2D mesh, etc..).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>a = gf_slice_get(slice S, 'area')</literal></para>
+
+    <para>         Return the area of the slice.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>CVids = gf_slice_get(slice S, 'cvs')</literal></para>
+
+    <para>       Return the list of convexes of the original mesh contained in the slice.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>n = gf_slice_get(slice S, 'nbpts')</literal></para>
+
+    <para>         Return the number of points in the slice.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>ns = gf_slice_get(slice S, 'nbsplxs'[, int dim])</literal></para>
+
+    <para>       Return the number of simplexes in the slice.
+
+    Since the slice may contain points (simplexes of dim 0), segments
+    (simplexes of dimension 1), triangles etc., the result is a vector
+    of size gf_slice_get(slice S, 'dim')+1, except if the optional argument <literal>dim</literal>
+    is used.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>P = gf_slice_get(slice S, 'pts')</literal></para>
+
+    <para>         Return the list of point coordinates.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{S, CV2S} = gf_slice_get(slice S, 'splxs',int dim)</literal></para>
+
+    <para>         Return the list of simplexes of dimension <literal>dim</literal>.
+      
+      On output, S has 'dim+1' rows, each column contains the point
+      numbers of a simplex.  The vector <literal>CV2S</literal> can be used to find the
+      list of simplexes for any convex stored in the slice. For example
+      'S(:,CV2S(4):CV2S(5)-1)'
+      gives the list of simplexes for the fourth convex.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{P, E1, E2} = gf_slice_get(slice S, 'edges')</literal></para>
+
+    <para>         Return the edges of the linked mesh contained in the slice.
+      
+      <literal>P</literal> contains the list of all edge vertices, <literal>E1</literal> contains
+      the indices of each mesh edge in <literal>P</literal>, and <literal>E2</literal> contains the
+      indices of each "edges" which is on the border of the slice.
+      This function is useless except for post-processing purposes.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Usl = gf_slice_get(slice S, 'interpolate_convex_data', mat Ucv)</literal></para>
+
+    <para>       Interpolate data given on each convex of the mesh to the slice nodes.
+
+    The input array <literal>Ucv</literal> may have any number of dimensions, but its
+    last dimension should be equal to gf_mesh_get(mesh M, 'max cvid').
+
+    Example of use: gf_slice_get(slice S, 'interpolate_convex_data', gf_mesh_get(mesh M, 'quality')).
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>m = gf_slice_get(slice S, 'linked mesh')</literal></para>
+
+    <para>         Return the mesh on which the slice was taken.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>m = gf_slice_get(slice S, 'mesh')</literal></para>
+
+    <para>         Return the mesh on which the slice was taken
+      (identical to 'linked mesh')
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>z = gf_slice_get(slice S, 'memsize')</literal></para>
+
+    <para>       Return the amount of memory (in bytes) used by the slice object.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_slice_get(slice S, 'export to vtk', string filename, ...)</literal></para>
+
+    <para>       Export a slice to VTK.
+
+    Following the <literal>filename</literal>, you may use any of the following options:
+
+    - if 'ascii' is not used, the file will contain binary data
+      (non portable, but fast).
+    - if 'edges' is used, the edges of the original mesh will be
+      written instead of the slice content.
+
+    More than one dataset may be written, just list them. Each dataset
+    consists of either:
+
+    - a field interpolated on the slice (scalar, vector or tensor),
+      followed by an optional name.
+    - a mesh_fem and a field, followed by an optional name.
+
+    Examples:
+
+    - gf_slice_get(slice S, 'export to vtk', 'test.vtk', Usl, 'first_dataset', mf,
+      U2, 'second_dataset')
+    - gf_slice_get(slice S, 'export to vtk', 'test.vtk', 'ascii', mf,U2)
+    - gf_slice_get(slice S, 'export to vtk', 'test.vtk', 'edges', 'ascii', Uslice)
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_slice_get(slice S, 'export to pov', string filename)</literal></para>
+
+    <para>         Export a the triangles of the slice to POV-RAY.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_slice_get(slice S, 'export to dx', string filename, ...)</literal></para>
+
+    <para>       Export a slice to OpenDX.
+
+    Following the <literal>filename</literal>, you may use any of the following
+    options:
+
+    - if 'ascii' is not used, the file will contain binary data
+      (non portable, but fast).
+    - if 'edges' is used, the edges of the original mesh will be
+      written instead of the slice content.
+    - if 'append' is used, the opendx file will not be overwritten,
+      and the new data will be added at the end of the file.
+
+    More than one dataset may be written, just list them. Each dataset
+    consists of either:
+
+    - a field interpolated on the slice (scalar, vector or tensor),
+      followed by an optional name.
+    - a mesh_fem and a field, followed by an optional name.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_slice_get(slice S, 'export to pos', string filename[, string name][[,mesh_fem mf1], mat U1, string nameU1[[,mesh_fem mf1], mat U2, string nameU2,...])</literal></para>
+
+    <para>       Export a slice to Gmsh.
+
+    More than one dataset may be written, just list them.
+    Each dataset consists of either:
+
+    - a field interpolated on the slice (scalar, vector or tensor).
+    - a mesh_fem and a field.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>s = gf_slice_get(slice S, 'char')</literal></para>
+
+    <para>         Output a (unique) string representation of the slice.
+
+      This can be used to perform comparisons between two
+      different slice objects.
+      This function is to be completed.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_slice_get(slice S, 'display')</literal></para>
+
+    <para>         displays a short summary for a slice object.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_slice_get">gf_slice_get</link></member>
-      <member><link linkend="gf_slice">gf_slice</link></member>
-      <member><link linkend="gf_plot_slice">gf_plot_slice</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_slice_set.xml b/interface/src/scilab/help/en_US/gf_slice_set.xml
index 476d7d4..1b10e35 100644
--- a/interface/src/scilab/help/en_US/gf_slice_set.xml
+++ b/interface/src/scilab/help/en_US/gf_slice_set.xml
@@ -9,46 +9,51 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_slice_set</refname>
-
-    <refpurpose>Edition of mesh slices.</refpurpose>
+    <refpurpose>  Edition of mesh slices.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-gf_slice_set(mesh_slice sl, 'pts', mat P)
-    </synopsis>
+    <synopsis>gf_slice_set(slice S, 'pts', mat P)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  Edition of mesh slices.
+</para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_slice_set(SL,('pts',mat P) : Replace the points of the slice.
-        The new points <literal>P</literal> are stored in the columns the
-        matrix. Note that you can use the function to apply a deformation to a
-        slice, or to change the dimension of the slice (the number of rows of
-        <literal>P</literal> is not required to be equal to
-        <emphasis>gf_slice_get(SL,('dim'))</emphasis>.</para>
-      </listitem>
+    <listitem>
+    <para><literal>gf_slice_set(slice S, 'pts', mat P)</literal></para>
+
+    <para>       Replace the points of the slice.
+
+    The new points <literal>P</literal> are stored in the columns the matrix. Note that
+    you can use the function to apply a deformation to a slice, or to
+    change the dimension of the slice (the number of rows of <literal>P</literal> is not
+    required to be equal to gf_slice_get(slice S, 'dim')).
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_slice_get">gf_slice_get</link></member>
-      <member><link linkend="gf_slice">gf_slice</link></member>
-      <member><link linkend="gf_plot_slice">gf_plot_slice</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_spmat.xml b/interface/src/scilab/help/en_US/gf_spmat.xml
index 3fdcccf..17bf8a0 100644
--- a/interface/src/scilab/help/en_US/gf_spmat.xml
+++ b/interface/src/scilab/help/en_US/gf_spmat.xml
@@ -9,137 +9,138 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_spmat</refname>
-
-    <refpurpose>Sparse matrix manipulation</refpurpose>
+    <refpurpose>  Create a new sparse matrix in getfem++ format. These sparse matrix can be stored as CSC (compressed column
+  sparse), which is the format used by Matlab, or they can be stored as WSC
+  (internal format to getfem). The CSC matrices are not writable (it would
+  be very inefficient), but they are optimized for multiplication with
+  vectors, and memory usage. The WSC are writable, they are very fast with
+  respect to random read/write operation. However their memory overhead is
+  higher than CSC matrices, and they are a little bit slower for
+  matrix-vector multiplications.
+
+  By default, all newly created matrices are build as WSC matrices. This can
+  be changed later with <literal></literal>gf_spmat_set(spmat S, 'to_csc',...)<literal></literal>, or may be changed
+  automatically by getfem (for example <literal></literal>gf_linsolve()<literal></literal> converts the
+  matrices to CSC).
+
+  The matrices may store REAL or COMPLEX values.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-M=gf_spmat('empty', int m [, int n])
-M=gf_spmat('identity', int n)
-M=gf_spmat('copy', spmat K [,ivec I [, ivec J]])
-M=gf_spmat('mult',  spmat A,  spmat B)
-M=gf_spmat('add', spmat A, spmat B)
-M=gf_spmat('harwell-boeing', string filename)M=gf_spmat('matrix-market', string filename)
-    </synopsis>
+    <synopsis>SM = gf_spmat('empty', int m [, int n])</synopsis>
+    <synopsis>SM = gf_spmat('copy', mat K [,  I [,  J]])</synopsis>
+    <synopsis>SM = gf_spmat('identity', int n)</synopsis>
+    <synopsis>SM = gf_spmat('mult', spmat A, spmat B)</synopsis>
+    <synopsis>SM = gf_spmat('add', spmat A, spmat B)</synopsis>
+    <synopsis>SM = gf_spmat('diag', mat D [, ivec E [, int n [,int m]]])</synopsis>
+    <synopsis>SM = gf_spmat('load','hb'|'harwell-boeing'|'mm'|'matrix-market', string filename)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>General constructor for spmat objects.</para>
+
+    <para>  Create a new sparse matrix in getfem++ format. These sparse matrix can be stored as CSC (compressed column
+  sparse), which is the format used by Matlab, or they can be stored as WSC
+  (internal format to getfem). The CSC matrices are not writable (it would
+  be very inefficient), but they are optimized for multiplication with
+  vectors, and memory usage. The WSC are writable, they are very fast with
+  respect to random read/write operation. However their memory overhead is
+  higher than CSC matrices, and they are a little bit slower for
+  matrix-vector multiplications.
+
+  By default, all newly created matrices are build as WSC matrices. This can
+  be changed later with <literal></literal>gf_spmat_set(spmat S, 'to_csc',...)<literal></literal>, or may be changed
+  automatically by getfem (for example <literal></literal>gf_linsolve()<literal></literal> converts the
+  matrices to CSC).
+
+  The matrices may store REAL or COMPLEX values.
+</para>
+  </refsection>
 
-    <para>These sparse matrix can be stored as CSC (compressed column sparse),
-    which is the format used by Matlab, or they can be stored as WSC (internal
-    format to getfem). The CSC matrices are not writable (it would be very
-    inefficient), but they are optimized for multiplication with vectors, and
-    memory usage. The WSC are writable, they are very fast with respect to
-    random read/write operation. However their memory overhead is higher than
-    CSC matrices, and they are a little bit slower for matrix-vector
-    multiplications. By default, all newly created matrices are build as WSC
-    matrices. This can be changed later with
-    <emphasis>gf_spmat_set(M,('to_csc',...)</emphasis>, or may be changed
-    automatically by getfem (for example gf_linsolve() converts the matrices
-    to CSC). The matrices may store REAL or COMPLEX values. </para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_spmat('empty', int m [, int n]) Create a new empty (i.e. full
-        of zeros) sparse matrix, of dimensions <emphasis>m x n</emphasis>. If
-        <literal>n</literal> is omitted, the matrix dimension is <emphasis>m x
-        m</emphasis>. </para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat('copy', mat K [, list I [, list J]]) Duplicate a matrix
-        <literal>K</literal> (which might be a Spmat). If (index)
-        <literal>I</literal> and/or <literal>J</literal> are given, the matrix
-        will be a submatrix of <literal>K</literal>. </para>
-
-        <para>For example: <emphasis>M = gf_spmat('copy',
-        gf_spmat('empty',50,50), range(40), [6, 7, 8, 3, 10])</emphasis> will
-        return a 40x5 matrix. </para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat('identity', int n) Create a <emphasis>n x n</emphasis>
-        identity matrix. </para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat('mult', SpMat A, SpMat B) Create a sparse matrix as the
-        product of the sparse matrices <literal>A</literal> and
-        <literal>B</literal>. It requires that <literal>A</literal> and
-        <literal>B</literal> be both real or both complex, you may have to use
-        <emphasis>gf_spmat_set(M,('to_complex') </emphasis></para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat('add', SpMat A, SpMat B) Create a sparse matrix as the
-        sum of the sparse matrices <literal>A</literal> and
-        <literal>B</literal>. Adding a real matrix with a complex matrix is
-        possible. </para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat_set(M,('diag', mat D [, ivec E [, int n [,int m]]])
-        Create a diagonal matrix. If <literal>E</literal> is given,
-        <literal>D</literal> might be a matrix and each column of
-        <literal>E</literal> will contain the sub-diagonal number that will be
-        filled with the corresponding column of <literal>D</literal>. </para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat('load','hb'|'harwell-boeing', string filename) Read a
-        sparse matrix from an Harwell-Boeing file. </para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat('load','mm'|'matrix-market', filename) Read a sparse
-        matrix from a Matrix-Market file.</para>
-      </listitem>
-    </itemizedlist>
-  </refsection>
+    <listitem>
+    <para><literal>SM = gf_spmat('empty', int m [, int n])</literal></para>
 
-  <refsection>
-    <title>Examples</title>
-
-    <programlisting role="example"><![CDATA[ 
-// TEST EMPTY COPY FULL
-A  = gf_spmat('empty', 5,6);
-B  = gf_spmat('empty', 11111);
-C  = gf_spmat('copy', A);
-C  = sprand(50,50,.1); C(2,2)=1+2*%i; I = 1:40; J = [6 7 8 3 10];
-D  = gf_spmat('copy', C, I, J);
-DD = gf_spmat_get(D,'full');
-
-// TEST MULT
-A  = gf_spmat('identity', 11111);
-C  = gf_spmat('mult',A,B);
-n  = gf_spmat_get(C,'nnz'); assert('n==0');
-C  = gf_spmat('mult',A,A);
-n  = gf_spmat_get(C,'nnz'); assert('n==11111');
-M1 = sprand(50,43,.1);
-M2 = sprand(43,14,.3);
-C  = gf_spmat('mult',M1,M2);
-C  = gf_spmat_get(C, 'full');
-P  = full(M1*M2);
- ]]></programlisting>
+    <para>         Create a new empty (i.e. full of zeros) sparse matrix, of dimensions
+      <literal>m x n</literal>. If <literal>n</literal> is omitted, the matrix dimension is <literal>m x m</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>SM = gf_spmat('copy', mat K [,  I [,  J]])</literal></para>
+
+    <para>         Duplicate a matrix <literal>K</literal> (which might be a spmat). If index <literal>I</literal> and/or <literal>J</literal> are given, the matrix will
+      be a submatrix of <literal>K</literal>. For example::
+
+        
+        m = gf_spmat('copy', sprand(50,50,.1), 1:40, [6 7 8 3 10])
+        
+
+      will return a 40x5 matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>SM = gf_spmat('identity', int n)</literal></para>
+
+    <para>          Create a <literal>n x n</literal> identity matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>SM = gf_spmat('mult', spmat A, spmat B)</literal></para>
+
+    <para>          Create a sparse matrix as the product of the sparse matrices <literal>A</literal> and
+       <literal>B</literal>. It requires that <literal>A</literal> and <literal>B</literal> be both real or both complex, you
+       may have to use <literal></literal>gf_spmat_set(spmat S, 'to_complex')<literal></literal> 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>SM = gf_spmat('add', spmat A, spmat B)</literal></para>
+
+    <para>          Create a sparse matrix as the sum of the sparse matrices <literal>A</literal> and <literal>B</literal>.
+       Adding a real matrix with a complex matrix is possible.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>SM = gf_spmat('diag', mat D [, ivec E [, int n [,int m]]])</literal></para>
+
+    <para>          Create a diagonal matrix. If <literal>E</literal> is given, <literal>D</literal> might be a matrix and
+       each column of <literal>E</literal> will contain the sub-diagonal number that will be
+       filled with the corresponding column of <literal>D</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>SM = gf_spmat('load','hb'|'harwell-boeing'|'mm'|'matrix-market', string filename)</literal></para>
+
+    <para>         Read a sparse matrix from an Harwell-Boeing or a Matrix-Market file
+      .
+    </para>
+    </listitem>
+
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_spmat_get">gf_spmat_get</link></member>
-      <member><link linkend="gf_spmat_set">gf_spmat_set</link></member>
-      <member><link linkend="gf_util">gf_util</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_spmat_get.xml b/interface/src/scilab/help/en_US/gf_spmat_get.xml
index 5f03a03..c7fab87 100644
--- a/interface/src/scilab/help/en_US/gf_spmat_get.xml
+++ b/interface/src/scilab/help/en_US/gf_spmat_get.xml
@@ -9,136 +9,181 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_spmat_get</refname>
-
-    <refpurpose>General getfem sparse matrix inquiry function.</refpurpose>
+    <refpurpose></refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-ivec gf_spmat_get(M,'size')
-int gf_spmat_get(M,'nnz')
-int gf_spmat_get(M,'is_complex')
-string S=gf_spmat_get(M,'storage')
-mat fM=gf_spmat_get(M,'full'[,I [,J]])
-vec tMV=gf_spmat_get(M,'mult', V)
-vec MV=gf_spmat_get(M,'tmult', V)
-vec D=gf_spmat_get(M,'diag'[, E])
-[ivec JC,ivec IR]=gf_spmat_get(M,'csc_ind')
-[vec V]=gf_spmat_get(M,'csc_val')
-[spmat N, vec U0]=gf_spmat_get(H,'dirichlet_nullspace', @vec R)
-string S=gf_spmat_get(sl,'info')gf_spmat_get(sl,'save', string format, string filename)
-    </synopsis>
+    <synopsis>n = gf_spmat_get(spmat S, 'nnz')</synopsis>
+    <synopsis>Sm = gf_spmat_get(spmat S, 'full'[, list I[, list J]])</synopsis>
+    <synopsis>MV = gf_spmat_get(spmat S, 'mult', vec V)</synopsis>
+    <synopsis>MtV = gf_spmat_get(spmat S, 'tmult', vec V)</synopsis>
+    <synopsis>D = gf_spmat_get(spmat S, 'diag'[, list E])</synopsis>
+    <synopsis>s = gf_spmat_get(spmat S, 'storage')</synopsis>
+    <synopsis>{ni,nj} = gf_spmat_get(spmat S, 'size')</synopsis>
+    <synopsis>b = gf_spmat_get(spmat S, 'is_complex')</synopsis>
+    <synopsis>{JC, IR} = gf_spmat_get(spmat S, 'csc_ind')</synopsis>
+    <synopsis>V = gf_spmat_get(spmat S, 'csc_val')</synopsis>
+    <synopsis>{N, U0} = gf_spmat_get(spmat S, 'dirichlet nullspace', vec R)</synopsis>
+    <synopsis>gf_spmat_get(spmat S, 'save', string format, string filename)</synopsis>
+    <synopsis>s = gf_spmat_get(spmat S, 'char')</synopsis>
+    <synopsis>gf_spmat_get(spmat S, 'display')</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para></para>
+  </refsection>
 
-    <para> General getfem sparse matrix inquiry function. M might also be a
-    native matlab sparse matrix.</para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>n = gf_spmat_get(M,'nnz') Return the number of non-null values
-        stored in the sparse matrix</para>
-      </listitem>
-
-      <listitem>
-        <para>Sm = gf_spmat_get(M,'full'[, list I[, list J]]) Return a full
-        (sub-)matrix. The optional arguments <literal>I</literal> and
-        <literal>J</literal>, are the sub-intervals for the rows and columns
-        that are to be extracted.</para>
-      </listitem>
-
-      <listitem>
-        <para>MV = gf_spmat_get(M,'mult',vec V) Product of the sparse matrix
-        <literal>M</literal> with a vector <literal>V</literal>. For
-        matrix-matrix multiplications, see gf_spmat('mult').</para>
-      </listitem>
-
-      <listitem>
-        <para>MtV = gf_spmat_get(M,'tmult',vec V) Product of
-        <literal>M</literal> transposed (conjugated if M is complex) with the
-        vector V.</para>
-      </listitem>
-
-      <listitem>
-        <para>D = gf_spmat_get(M,'diag'[, list E]) Return the diagonal of
-        <literal>M</literal> as a vector. If <literal>E</literal> is used,
-        return the sub-diagonals whose ranks are given in
-        <literal>E</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>s = gf_spmat_get(M,'storage') Return the storage type currently
-        used for the matrix. The storage is returned as a string, either 'CSC'
-        or 'WSC'.</para>
-      </listitem>
-
-      <listitem>
-        <para>list(ni,nj) = gf_spmat_get(M,'size') Return a vector where
-        <literal>ni</literal> and <literal>nj</literal> are the dimensions of
-        the matrix.</para>
-      </listitem>
-
-      <listitem>
-        <para>b = gf_spmat_get(M,'is_complex') Return 1 if the matrix contains
-        complex values.</para>
-      </listitem>
-
-      <listitem>
-        <para>list(JC, IR) = gf_spmat_get(M,'csc_ind') Return the two usual
-        index arrays of CSC storage. If <literal>M</literal> is not stored as
-        a CSC matrix, it is converted into CSC.</para>
-      </listitem>
-
-      <listitem>
-        <para>V = gf_spmat_get(M,'csc_val') Return the array of values of all
-        non-zero entries of <literal>M</literal>. If <literal>M</literal> is
-        not stored as a CSC matrix, it is converted into CSC.</para>
-      </listitem>
-
-      <listitem>
-        <para>list(N, U0) = gf_spmat_get(M,'dirichlet nullspace',vec R) Solve
-        the dirichlet conditions <emphasis>M.U=R</emphasis>. A solution
-        <literal>U0</literal> which has a minimum L2-norm is returned, with a
-        sparse matrix <literal>N</literal> containing an orthogonal basis of
-        the kernel of the (assembled) constraints matrix <literal>M</literal>
-        (hence, the PDE linear system should be solved on this subspace):
-        </para>
-
-        <para>the initial problem <emphasis>K.U = B</emphasis> with
-        constraints <emphasis>M.U = R</emphasis> is replaced by
-        <emphasis>(N'.K.N).UU = N'.B</emphasis> with <emphasis>U = N.UU +
-        U0</emphasis></para>
-      </listitem>
-
-      <listitem>
-        <para>s = gf_spmat_get(M,'info') Return a string contains a short
-        summary on the sparse matrix (dimensions, filling, ...).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat_get(M,'save',string format, string filename) Export the
-        sparse matrix. the format of the file may be 'hb' for Harwell-Boeing,
-        or 'mm' for Matrix-Market.</para>
-      </listitem>
+    <listitem>
+    <para><literal>n = gf_spmat_get(spmat S, 'nnz')</literal></para>
+
+    <para>         Return the number of non-null values stored in the sparse matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>Sm = gf_spmat_get(spmat S, 'full'[, list I[, list J]])</literal></para>
+
+    <para>         Return a full (sub-)matrix.
+      
+      The optional arguments <literal>I</literal> and <literal>J</literal>, are the sub-intervals for the
+      rows and columns that are to be extracted.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MV = gf_spmat_get(spmat S, 'mult', vec V)</literal></para>
+
+    <para>         Product of the sparse matrix <literal>M</literal> with a vector <literal>V</literal>.
+      
+      For matrix-matrix multiplications, see gf_spmat('mult').
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>MtV = gf_spmat_get(spmat S, 'tmult', vec V)</literal></para>
+
+    <para>         Product of <literal>M</literal> transposed (conjugated if <literal>M</literal> is complex) with the
+      vector <literal>V</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>D = gf_spmat_get(spmat S, 'diag'[, list E])</literal></para>
+
+    <para>         Return the diagonal of <literal>M</literal> as a vector.
+      
+      If <literal>E</literal> is used, return the sub-diagonals whose ranks are given in E.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>s = gf_spmat_get(spmat S, 'storage')</literal></para>
+
+    <para>         Return the storage type currently used for the matrix.
+      
+      The storage is returned as a string, either 'CSC' or 'WSC'.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{ni,nj} = gf_spmat_get(spmat S, 'size')</literal></para>
+
+    <para>         Return a vector where <literal>ni</literal> and <literal>nj</literal> are the dimensions of the matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>b = gf_spmat_get(spmat S, 'is_complex')</literal></para>
+
+    <para>         Return 1 if the matrix contains complex values.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{JC, IR} = gf_spmat_get(spmat S, 'csc_ind')</literal></para>
+
+    <para>         Return the two usual index arrays of CSC storage.
+      
+      If <literal>M</literal> is not stored as a CSC matrix, it is converted into CSC.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>V = gf_spmat_get(spmat S, 'csc_val')</literal></para>
+
+    <para>         Return the array of values of all non-zero entries of <literal>M</literal>.
+      
+      If <literal>M</literal> is not stored as a CSC matrix, it is converted into CSC.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>{N, U0} = gf_spmat_get(spmat S, 'dirichlet nullspace', vec R)</literal></para>
+
+    <para>       Solve the dirichlet conditions <literal>M.U=R</literal>.
+
+    A solution <literal>U0</literal> which has a minimum L2-norm is returned, with a
+    sparse matrix <literal>N</literal> containing an orthogonal basis of the kernel of
+    the (assembled) constraints matrix <literal>M</literal> (hence, the PDE linear system
+    should be solved on this subspace): the initial problem
+
+    <literal>K.U = B</literal> with constraints <literal>M.U = R</literal>
+
+    is replaced by
+
+    <literal>(N'.K.N).UU = N'.B</literal> with <literal>U = N.UU + U0</literal>
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_spmat_get(spmat S, 'save', string format, string filename)</literal></para>
+
+    <para>         Export the sparse matrix.
+
+      the format of the file may be 'hb' for Harwell-Boeing, or 'mm'
+      for Matrix-Market.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>s = gf_spmat_get(spmat S, 'char')</literal></para>
+
+    <para>         Output a (unique) string representation of the spmat.
+
+      This can be used to perform comparisons between two
+      different spmat objects.
+      This function is to be completed.
+      
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_spmat_get(spmat S, 'display')</literal></para>
+
+    <para>         displays a short summary for a spmat object.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_spmat">gf_spmat</link></member>
-      <member><link linkend="gf_spmat_set">gf_spmat_set</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_spmat_set.xml b/interface/src/scilab/help/en_US/gf_spmat_set.xml
index 9e1a6f5..cc2f292 100644
--- a/interface/src/scilab/help/en_US/gf_spmat_set.xml
+++ b/interface/src/scilab/help/en_US/gf_spmat_set.xml
@@ -9,107 +9,141 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_spmat_set</refname>
-
-    <refpurpose>Modification of the content of a getfem sparse
-    matrix.</refpurpose>
+    <refpurpose>   Modification of the content of a getfem sparse matrix.
+ </refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-gf_spmat_set(M,'clear'[, I[, J]])
-gf_spmat_set(M,'scale', V)
-gf_spmat_set(M,'transpose')
-gf_spmat_set(M,'conjugate')
-gf_spmat_set(M,'transconj')
-gf_spmat_set(M,'to_csc')
-gf_spmat_set(M,'to_wsc')
-gf_spmat_set(M,'to_complex')
-gf_spmat_set(M,'diag', mat D [, ivec E])
-gf_spmat_set(M,'assign', ivec I, ivec J, V)gf_spmat_set(M,'add', I, J, V)
-    </synopsis>
+    <synopsis>gf_spmat_set(spmat S, 'clear'[, list I[, list J]])</synopsis>
+    <synopsis>gf_spmat_set(spmat S, 'scale', scalar v)</synopsis>
+    <synopsis>gf_spmat_set(spmat S, 'transpose')</synopsis>
+    <synopsis>gf_spmat_set(spmat S, 'conjugate')</synopsis>
+    <synopsis>gf_spmat_set(spmat S, 'transconj')</synopsis>
+    <synopsis>gf_spmat_set(spmat S, 'to_csc')</synopsis>
+    <synopsis>gf_spmat_set(spmat S, 'to_wsc')</synopsis>
+    <synopsis>gf_spmat_set(spmat S, 'to_complex')</synopsis>
+    <synopsis>gf_spmat_set(spmat S, 'diag', mat D [, ivec E])</synopsis>
+    <synopsis>gf_spmat_set(spmat S, 'assign', ivec I, ivec J, mat V)</synopsis>
+    <synopsis>gf_spmat_set(spmat S, 'add', ivec I, ivec J, mat V)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>   Modification of the content of a getfem sparse matrix.
+ </para>
+  </refsection>
+
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_spmat_set(M,'clear'[, list I[, list J]]) Erase the non-zero
-        entries of the matrix. The optional arguments <literal>I</literal> and
-        <literal>J</literal> may be specified to clear a sub-matrix instead of
-        the entire matrix.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat_set(M,'scale',scalar v) Multiplies the matrix by a
-        scalar value `v`.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat_set(M,'transpose') Transpose the matrix.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat_set(M,'conjugate') Conjugate each element of the
-        matrix.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat_set(M,'transconj') Transpose and conjugate the
-        matrix.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat_set(M,'to_csc') Convert the matrix to CSC storage. CSC
-        storage is recommended for matrix-vector multiplications.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat_set(M,'to_wsc') Convert the matrix to WSC storage. Read
-        and write operation are quite fast with WSC storage.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat_set(M,'to_wsc') Convert the matrix to WSC storage. Read
-        and write operation are quite fast with WSC storage.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat_set(M,'diag',mat D [, ivec E]) Change the diagonal (or
-        sub-diagonals) of the matrix. If <literal>E</literal> is given,
-        <literal>D</literal> might be a matrix and each column of
-        <literal>E</literal> will contain the sub-diagonal number that will be
-        filled with the corresponding column of <literal>D</literal>.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat_set(M,'assign',ivec I, ivec J, mat V) Copy
-        <literal>V</literal> into the sub-matrix 'M(I,J)'.
-        <literal>V</literal> might be a sparse matrix or a full matrix.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_spmat_set(M,'add',ivec I, ivec J, mat V) Add
-        <literal>V</literal> to the sub-matrix 'M(I,J)'. <literal>V</literal>
-        might be a sparse matrix or a full matrix.</para>
-      </listitem>
+    <listitem>
+    <para><literal>gf_spmat_set(spmat S, 'clear'[, list I[, list J]])</literal></para>
+
+    <para>         Erase the non-zero entries of the matrix.
+
+      The optional arguments <literal>I</literal> and <literal>J</literal> may be specified to clear a
+      sub-matrix instead of the entire matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_spmat_set(spmat S, 'scale', scalar v)</literal></para>
+
+    <para>         Multiplies the matrix by a scalar value <literal>v</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_spmat_set(spmat S, 'transpose')</literal></para>
+
+    <para>         Transpose the matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_spmat_set(spmat S, 'conjugate')</literal></para>
+
+    <para>         Conjugate each element of the matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_spmat_set(spmat S, 'transconj')</literal></para>
+
+    <para>         Transpose and conjugate the matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_spmat_set(spmat S, 'to_csc')</literal></para>
+
+    <para>         Convert the matrix to CSC storage.
+
+      CSC storage is recommended for matrix-vector multiplications.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_spmat_set(spmat S, 'to_wsc')</literal></para>
+
+    <para>         Convert the matrix to WSC storage.
+      
+      Read and write operation are quite fast with WSC storage.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_spmat_set(spmat S, 'to_complex')</literal></para>
+
+    <para>         Store complex numbers.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_spmat_set(spmat S, 'diag', mat D [, ivec E])</literal></para>
+
+    <para>         Change the diagonal (or sub-diagonals) of the matrix.
+      
+      If <literal>E</literal> is given, <literal>D</literal> might be a matrix and each column of <literal>E</literal> will
+      contain the sub-diagonal number that will be filled with the
+      corresponding column of <literal>D</literal>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_spmat_set(spmat S, 'assign', ivec I, ivec J, mat V)</literal></para>
+
+    <para>         Copy V into the sub-matrix 'M(I,J)'.
+      
+      <literal>V</literal> might be a sparse matrix or a full matrix.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_spmat_set(spmat S, 'add', ivec I, ivec J, mat V)</literal></para>
+
+    <para>       Add <literal>V</literal> to the sub-matrix 'M(I,J)'.
+
+    <literal>V</literal> might be a sparse matrix or a full matrix.
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_spmat_get">gf_spmat_get</link></member>
-      <member><link linkend="gf_spmat">gf_spmat</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_util.xml b/interface/src/scilab/help/en_US/gf_util.xml
index e86289e..2f7126d 100644
--- a/interface/src/scilab/help/en_US/gf_util.xml
+++ b/interface/src/scilab/help/en_US/gf_util.xml
@@ -9,56 +9,78 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_util</refname>
-
-    <refpurpose>Performs various operations which do not fit elsewhere.</refpurpose>
+    <refpurpose>  Performs various operations which do not fit elsewhere.
+</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-gf_util('save matrix',string fmt, string filename, spmat A)
-A = gf_util('load matrix',string fmt, string filename)
-gf_util('trace level', int level)
-gf_util('warning level', int level)
-</synopsis>
+    <synopsis>gf_util('save matrix', string FMT, string FILENAME, mat A)</synopsis>
+    <synopsis>A = gf_util('load matrix', string FMT, string FILENAME)</synopsis>
+    <synopsis>tl = gf_util('trace level' [, int level])</synopsis>
+    <synopsis>tl = gf_util('warning level', int level)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>  Performs various operations which do not fit elsewhere.
+</para>
+  </refsection>
 
-    <para>Performs various operations which do not fit elsewhere.</para>
+  <refsection>
+    <title>Command list</title>
 
     <itemizedlist>
-      <listitem>
-        <para>gf_util('save matrix', string FMT, string FILENAME, spmat A):
-        Exports a sparse matrix into the file named FILENAME, using
-        Harwell-Boeing (FMT='hb') or Matrix-Market (FMT='mm')
-        formatting.</para>
-      </listitem>
-
-      <listitem>
-        <para>A = gf_util('load matrix', string FMT, string FILENAME): Imports
-        a sparse matrix from a file.</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_util('trace_level',int level): Set the verbosity of some
-        getfem++ routines. Typically the messages printed by the model bricks,
-        0 means no trace message (default is 3).</para>
-      </listitem>
-
-      <listitem>
-        <para>gf_util('warning_level',int level): Filter the less important
-        warnings displayed by getfem. 0 means no warnings, default level is
-        3.</para>
-      </listitem>
+    <listitem>
+    <para><literal>gf_util('save matrix', string FMT, string FILENAME, mat A)</literal></para>
+
+    <para>       Exports a sparse matrix into the file named FILENAME, using
+    Harwell-Boeing (FMT='hb') or Matrix-Market (FMT='mm') formatting. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>A = gf_util('load matrix', string FMT, string FILENAME)</literal></para>
+
+    <para>        Imports a sparse matrix from a file. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>tl = gf_util('trace level' [, int level])</literal></para>
+
+    <para>         Set the verbosity of some getfem++ routines.
+
+      Typically the messages printed by the model bricks, 0 means no
+      trace message (default is 3). if no level is given,
+      the current trace level is returned. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>tl = gf_util('warning level', int level)</literal></para>
+
+    <para>         Filter the less important warnings displayed by getfem.
+
+      0 means no warnings, default level is 3. if no level is given,
+      the current warning level is returned. 
+    </para>
+    </listitem>
+
     </itemizedlist>
   </refsection>
 
   <refsection>
-    <title>Authors</title>
+    <title>See Also</title>
+    <simplelist type="inline">
+      <member><link linkend="getfem_types">getfem types</link></member>
+    </simplelist>
+  </refsection>
 
+  <refsection>
+    <title>Authors</title>
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/gf_workspace.xml b/interface/src/scilab/help/en_US/gf_workspace.xml
index 3bf577f..e23b924 100644
--- a/interface/src/scilab/help/en_US/gf_workspace.xml
+++ b/interface/src/scilab/help/en_US/gf_workspace.xml
@@ -9,123 +9,138 @@
           xmlns:db="http://docbook.org/ns/docbook">
   <refnamediv>
     <refname>gf_workspace</refname>
+    <refpurpose>    Getfem workspace management function. 
 
-    <refpurpose>Getfem workspace management function.</refpurpose>
+    Getfem uses its own workspaces in Matlab, independently of the
+    matlab workspaces (this is due to some limitations in the memory
+    management of matlab objects). By default, all getfem variables
+    belong to the root getfem workspace. A function can create its own
+    workspace by invoking gf_workspace('push') at its beginning. When
+    exiting, this function MUST invoke gf_workspace('pop') (you can
+    use matlab exceptions handling to do this cleanly when the
+    function exits on an error).
+
+ </refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 
-    <synopsis>
-gf_workspace('push') 
-gf_workspace('pop' [,hobj i, hobj j,..])  
-gf_workspace('stat') 
-gf_workspace('stats')
-gf_workspace('keep', hobj i[,hobj j, hobj k..]) 
-gf_workspace('clear')
-gf_workspace('clear all')
-gf_workspace('class name', hobj i)
-  </synopsis>
+    <synopsis>gf_workspace('push')</synopsis>
+    <synopsis>gf_workspace('pop',  [,i,j, ...])</synopsis>
+    <synopsis>gf_workspace('stat')</synopsis>
+    <synopsis>gf_workspace('stats')</synopsis>
+    <synopsis>gf_workspace('keep', i[,j,k...])</synopsis>
+    <synopsis>gf_workspace('keep all')</synopsis>
+    <synopsis>gf_workspace('clear')</synopsis>
+    <synopsis>gf_workspace('clear all')</synopsis>
+    <synopsis>gf_workspace('class name', i)</synopsis>
   </refsynopsisdiv>
 
   <refsection>
     <title>Description</title>
+    <para>    Getfem workspace management function. 
 
-    <para>Getfem uses its own workspaces in Scilab, independently of the
-    scilab workspaces (this is due to some limitations in the memory
-    management of scilab objects). By default, all getfem variables belong to
-    the root getfem workspace. A function can create its own workspace by
-    invoking gf_workspace('push') at its beginning. When exiting, this
-    function MUST invoke gf_workspace('pop') (you can use scilab exceptions
-    handling to do this cleanly when the function exits on an error).</para>
+    Getfem uses its own workspaces in Matlab, independently of the
+    matlab workspaces (this is due to some limitations in the memory
+    management of matlab objects). By default, all getfem variables
+    belong to the root getfem workspace. A function can create its own
+    workspace by invoking gf_workspace('push') at its beginning. When
+    exiting, this function MUST invoke gf_workspace('pop') (you can
+    use matlab exceptions handling to do this cleanly when the
+    function exits on an error).
 
-    <itemizedlist>
-      <listitem>
-        <para>gf_workspace('push'): Create a new temporary workspace on
-          the workspace stack.</para>
-      </listitem>
-      
-      <listitem>
-        <para>gf_workspace('pop' [,i,j,..]): Leave the current
-          workspace, destroying all getfem objects belonging to it, except
-          the one listed after 'pop', and the ones moved to parent
-          workspace by gf_workspace('keep').</para>
-      </listitem>
-      
-      <listitem>
-        <para>gf_workspace('stat'): Print informations about variables
-          in current workspace.</para>
-      </listitem>
-      
-      <listitem>
-        <para>gf_workspace('stats'): Print informations about all getfem
-          variables.</para>
-      </listitem>
-      
-      <listitem>
-        <para>gf_workspace('keep', i[,j,k..]): prevent the listed
-          variables i from being deleted when gf_workspace("pop") will be
-          called by moving this variable in the parent workspace.</para>
-      </listitem>
-      
-      <listitem>
-        <para>gf_workspace('clear'): Clear the current workspace.</para>
-      </listitem>
-      
-      <listitem>
-        <para>gf_workspace('clear all'): Clear every workspace, and
-          returns to the main workspace (you should not need this
-          command).</para>
-      </listitem>
-      
-      <listitem>
-        <para>S=gf_workspace('class name', i): Return the class name of
-          object i (if I is a mesh handle, it return gfMesh etc..)</para>
-      </listitem>
-    </itemizedlist>
+ </para>
   </refsection>
 
   <refsection>
-    <title>Examples</title>
-
-    <para>If you want to create getfem-matlab object within one of your own m-files, you should follow this template in order to avoid memory leaks.</para>
-
-    <programlisting role="example"><![CDATA[ 
-// First example
-function [a]=foo(x,y,z)
-gf_workspace('push');
-try
-  ...                      // some work here ...
-  a = gf_mesh_fem(m);      // create a  getfem++ object
-  b = gf_mesh(x);
-  gf_workspace('keep', a); // b will be automatically destroyed at the 'pop'
-  ...                      // other work...
-catch
-  gf_workspace('pop');     // cleanup before error
-  error(lasterror);
-end
-gf_workspace('pop');
-endfunction
-
-// Second example
-m  = gf_mesh('cartesian',[0:.1:1],[0:.1:1]); 
-gf_workspace('stats');
- ]]></programlisting>
+    <title>Command list</title>
+
+    <itemizedlist>
+    <listitem>
+    <para><literal>gf_workspace('push')</literal></para>
+
+    <para>         Create a new temporary workspace on the workspace stack. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_workspace('pop',  [,i,j, ...])</literal></para>
+
+    <para>         Leave the current workspace, destroying all getfem objects
+      belonging to it, except the one listed after 'pop', and the ones
+      moved to parent workspace by gf_workspace('keep'). 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_workspace('stat')</literal></para>
+
+    <para>          Print informations about variables in current workspace. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_workspace('stats')</literal></para>
+
+    <para>          Print informations about all getfem variables. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_workspace('keep', i[,j,k...])</literal></para>
+
+    <para>         prevent the listed variables from being deleted when
+      gf_workspace("pop") will be called by moving these variables in the
+      parent workspace. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_workspace('keep all')</literal></para>
+
+    <para>         prevent all variables from being deleted when
+      gf_workspace("pop") will be called by moving the variables in the
+      parent workspace. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_workspace('clear')</literal></para>
+
+    <para>         Clear the current workspace. 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_workspace('clear all')</literal></para>
+
+    <para>         Clear every workspace, and returns to the main workspace (you
+      should not need this command). 
+    </para>
+    </listitem>
+
+    <listitem>
+    <para><literal>gf_workspace('class name', i)</literal></para>
+
+    <para>         Return the class name of object i (if I is a mesh handle, it 
+      return gfMesh etc..) 
+    </para>
+    </listitem>
+
+    </itemizedlist>
   </refsection>
 
   <refsection>
     <title>See Also</title>
-
     <simplelist type="inline">
-      <member><link linkend="gf_delete">gf_delete</link></member>
-      <member><link linkend="gf_mesh">gf_mesh</link></member>
-      <member><link linkend="gf_mesh_fem">gf_mesh_fem</link></member>
+      <member><link linkend="getfem_types">getfem types</link></member>
     </simplelist>
   </refsection>
 
   <refsection>
     <title>Authors</title>
-
     <para>Y. Collette</para>
   </refsection>
+
 </refentry>
diff --git a/interface/src/scilab/help/en_US/preliminary.xml b/interface/src/scilab/help/en_US/preliminary.xml
index 192db33..f52b64d 100644
--- a/interface/src/scilab/help/en_US/preliminary.xml
+++ b/interface/src/scilab/help/en_US/preliminary.xml
@@ -86,13 +86,7 @@
     of the PDE. But most PDEs involve various coefficients, for
     example:</para>
 
-    <para><inlineequation>
-        <inlinemediaobject>
-          <imageobject>
-            <imagedata fileref="../mml/preliminary_eq1.mml" />
-          </imageobject>
-        </inlinemediaobject>
-      </inlineequation></para>
+    <para><latex align="center"><![CDATA[\nabla\cdot\left(\lambda\left(x\right)\nabla u\right)=f\left(x\right)]]></latex></para>
 
     <para>Hence one has to define a FEM for the main unknown u, but also for
     the data λ(x) and f(x) if they are not constant. In order to interpolate
diff --git a/interface/src/scilab/help/en_US/sparses/sp_luinc.xml b/interface/src/scilab/help/en_US/sparses/sp_luinc.xml
index 7e1661d..92e976a 100644
--- a/interface/src/scilab/help/en_US/sparses/sp_luinc.xml
+++ b/interface/src/scilab/help/en_US/sparses/sp_luinc.xml
@@ -91,7 +91,7 @@
       <member><link linkend="sp_cgs">sp_cgs</link></member>
       <member><link linkend="sp_cgne">sp_sgne</link></member>
       <member><link linkend="sp_gmres">sp_gmres</link></member>
-      <member><link linkend="sp_mcgr">sp_mcgr</link></member>
+      <member><link linkend="sp_mgcr">sp_mgcr</link></member>
       <member><link linkend="sp_chsolve">sp_chsolve</link></member>
       <member><link linkend="sp_lusolve">sp_lusolve</link></member>
     </simplelist>
diff --git a/interface/src/scilab/jar/scilab_en_US_help.jar b/interface/src/scilab/jar/scilab_en_US_help.jar
index 9ad9343..3bfa848 100644
Binary files a/interface/src/scilab/jar/scilab_en_US_help.jar and b/interface/src/scilab/jar/scilab_en_US_help.jar differ
diff --git a/interface/src/scilab/jar/scilab_fr_FR_help.jar b/interface/src/scilab/jar/scilab_fr_FR_help.jar
deleted file mode 100644
index 5f3eabb..0000000
Binary files a/interface/src/scilab/jar/scilab_fr_FR_help.jar and /dev/null differ
diff --git a/interface/src/scilab/loader.sce b/interface/src/scilab/loader.sce
index 525a433..d995d5c 100644
--- a/interface/src/scilab/loader.sce
+++ b/interface/src/scilab/loader.sce
@@ -1,15 +1,10 @@
-// This file is released into the public domain
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
 // Generated by builder.sce: Please, do not edit this file
-//
+
 try
- v = getversion('scilab');
+ getversion("scilab");
 catch
- warning('Scilab 5.0 or more is required.');
- return;
+ error("Scilab 5.0 or more is required.");
 end;
-// ====================================================================
-root_tlbx = get_absolute_file_path('loader.sce');
-exec(root_tlbx+'etc/'+'sci_getfem.start');
-// ====================================================================
-clear root_tlbx;
-// ====================================================================
+
+exec(get_absolute_file_path("loader.sce")+"etc/"+"sci_getfem.start");
diff --git a/interface/src/scilab/macros/gf_mesh_fem_get_eval.sci b/interface/src/scilab/macros/gf_mesh_fem_get_eval.sci
index 50a6366..1125272 100644
--- a/interface/src/scilab/macros/gf_mesh_fem_get_eval.sci
+++ b/interface/src/scilab/macros/gf_mesh_fem_get_eval.sci
@@ -72,7 +72,8 @@ if typeof(_what)=='list' then
         x = xpos;
         y = ypos;
         z = zpos;
-        X(i,dof+j-1) = eval(_what(i)(j));
+        //X(i,dof+j-1) = eval(_what(i)(j));
+        X(i,dof+j-1) = evstr(_what(i)(j));
       elseif ((typeof(_what(i)(j))=='function')|(typeof(_what(i)(j))=='fptr')) then
         X(i,dof+j-1) = feval(xpos,ypos,zpos,_what(i)(j));
       else
diff --git a/interface/src/scilab/macros/gf_plot_1D.sci b/interface/src/scilab/macros/gf_plot_1D.sci
index b4b1388..31abdc1 100644
--- a/interface/src/scilab/macros/gf_plot_1D.sci
+++ b/interface/src/scilab/macros/gf_plot_1D.sci
@@ -1,12 +1,12 @@
 function [hline, hdof] = gf_plot_1D(mf,U, varargin)
 // function h=gf_plot_1D(mf,U,...)
-// this function plots a 1D finite elements field.
+// this function plots a 1D finite element field.
 //
-// The options are specified as pairs of 'option name'/'option value'
-//  'style', 'bo-'       : the line style and dof marker style (same
-//                         syntax as in the matlab command 'plot').
-//  'color', []          : override the line color.
-//  'dof_color', [1,0,0] : color of the markers for the degrees of freedom.
+// Available options are specified as pairs of 'option name'/'option value'
+//  'style', 'bo-'       : line style and dof marker style (same
+//                         syntax as in the Scilab command 'plot');
+//  'color', ''          : override line color (by a given color name);
+//  'dof_color', ''      : override color of dof markers;
 //  'width', 2           : line width.
 
 opts = build_options_list(varargin(:));
@@ -27,20 +27,23 @@ endfunction
 function [hline, hdof] = gf_plot_1D_aux(mf, U, opts)
 
 [opt_style,err]      = get_param(opts,'style','bo-');
-[opt_dof_marker,err] = get_param(opts,'dof_marker','');
+[opt_color,err]      = get_param(opts,'color','');
+[opt_dof_color,err]  = get_param(opts,'dof_color','');
 [opt_width,err]      = get_param(opts,'width',2);
-[opt_dof_color,err]  = get_param(opts,'dof_color',[1 0 0]);
 
-// try to remove markers from the line style
+// remove eventual markers from the line style
 s              = opt_style; 
 opt_style      = ''; 
 opt_dof_marker = '';
 
-for i=s
-  if (isempty(strindex('ox+*sdv^<>ph',i))) then 
-    opt_style = [opt_style i];
-  else
-    opt_dof_marker = i;
+for i = 1:length(s)
+  if (isempty(strindex('ox+*.sdv^<>p', part(s, i)))) then
+    opt_style = opt_style + part(s, i);
+  elseif i == 1 then
+    opt_dof_marker = part(s, i);
+  elseif '-.' == part(s, [i-1,i]) then
+    opt_style = opt_style + '.';
+  else opt_dof_marker = part(s, i);
   end
 end
 
@@ -56,25 +59,36 @@ else
   REFINE = 2;
 end
 
-m   = gf_mesh_fem_get(mf, 'linked_mesh');
-sl  = gf_slice(list('none'),m, REFINE); 
+m = gf_mesh_fem_get(mf, 'linked_mesh');
+sl = gf_slice(list('none'),m, REFINE); 
 Usl = gf_compute(mf,U,'interpolate on', sl);
-D   = unique(gf_mesh_fem_get(mf, 'dof nodes'));
+D = unique(gf_mesh_fem_get(mf, 'basic dof nodes'));
 slD = gf_slice('points', m, D);
-UD  = gf_compute(mf,U,'interpolate on',slD);
+UD = gf_compute(mf,U,'interpolate on',slD);
 
 X = gf_slice_get(sl, 'pts');
 Y = Usl;
 plot(X, Y, opt_style); 
 hline = gce();
 hline.children.thickness = opt_width;
-if (~isempty(opt_color)) then 
-  hline.children.line_style = opt_color;
+if (~isempty(opt_color)) then
+  hline.children.foreground = color(opt_color);
 end
 
 hdof = [];
 if (~isempty(opt_dof_marker)) then
-  hdof = plot2d(gf_slice_get(slD, 'pts'), UD, opt_dof_marker); // opt_dof_marker must be < 0 
+  // add color to the marker if it is given in opt_style
+  for i = 1:length(opt_style)
+    if (~isempty(strindex('rgbcmykw', part(opt_style, i)))) then
+      opt_dof_marker = part(s, i) + opt_dof_marker;
+    end
+  end
+  
+  plot(gf_slice_get(slD, 'pts'), UD, opt_dof_marker);
+  hdof = gce();
+  if (~isempty(opt_color)) then
+    hdof.children.mark_foreground = color(opt_dof_color);
+  end
 end
 endfunction
 
diff --git a/interface/src/scilab/macros/gf_plot_mesh.sci b/interface/src/scilab/macros/gf_plot_mesh.sci
index ee0336d..5816f70 100644
--- a/interface/src/scilab/macros/gf_plot_mesh.sci
+++ b/interface/src/scilab/macros/gf_plot_mesh.sci
@@ -149,18 +149,22 @@ if (mdim > 3) then error('sorry, only mesh of dimension <= 3 allowed'); end;
   disp('plotting mesh...');
   if (mdim <= 2) then
     if (ison(o_edges)) then
+      drawlater;
       plot(X, Y);
       hmesh = gce();
       hmesh.children(:).thickness  = o_edges_width;
       hmesh.children(:).line_style = 0; // Continous lines
-      hmesh.children(:).foreground = color(round(255*o_edges_color(1)),round(255*o_edges_color(2)),round(255*o_edges_color(3))); 
+      hmesh.children(:).foreground = color(round(255*o_edges_color(1)),round(255*o_edges_color(2)),round(255*o_edges_color(3)));
+      drawnow;
     end
     for bnum=1:length(o_boundaries),
+      drawlater;
       plot(bedge(bnum)(:,:,1), bedge(bnum)(:,:,2));
       hbound(bnum) = gce();
       hbound(bnum).children(:).thickness  = 2;
       hbound(bnum).children(:).line_style = 0; // Continous lines
       hbound(bnum).children(:).foreground = 5;
+      drawnow;
     end
     if (ison(o_vertices)) then
       xstring(PXY(1,PID)+ecart(1), PXY(2,PID)+ecart(2), string(double(PID)));
@@ -189,18 +193,22 @@ if (mdim > 3) then error('sorry, only mesh of dimension <= 3 allowed'); end;
     end
   else
     if (ison(o_edges)) then
+      drawlater;
       plot3d(X, Y, Z); // 'Color',o_edges_color,'LineWidth',o_edges_width
       hmesh = gce();
       hmesh.thickness  = o_edges_width;
       //hmesh.children(:).line_style = 0; // Continuous line
-      hmesh.foreground = color(round(255*o_edges_color(1)),round(255*o_edges_color(2)),round(255*o_edges_color(3))); 
+      hmesh.foreground = color(round(255*o_edges_color(1)),round(255*o_edges_color(2)),round(255*o_edges_color(3)));
+      drawnow;
     end
     for bnum=1:length(o_boundaries),
+      drawlater;
       plot3d(bedge(bnum)(:,:,1), bedge(bnum)(:,:,2), bedge(bnum)(:,:,3)); // 'Color','red','LineWidth',2);
       hbound(bnum) = gce();
-      hbound(bnum).children(:).thickness  = 2;
-      hbound(bnum).children(:).line_style = 0; // Continuous line
-      hbound(bnum).children(:).foreground = 5; // Red
+      hbound(bnum).thickness  = 2;
+      hbound(bnum).line_style = 0; // Continuous line
+      hbound(bnum).foreground = 5; // Red
+      drawnow;
     end
     if (ison(o_vertices)) then
       for i=1:length(PID)
diff --git a/interface/src/scilab/macros/gf_solve.sci b/interface/src/scilab/macros/gf_solve.sci
index 2cb1ddb..b55876a 100644
--- a/interface/src/scilab/macros/gf_solve.sci
+++ b/interface/src/scilab/macros/gf_solve.sci
@@ -307,14 +307,14 @@ function [U,P] = do_solve_stokes_cg3(K,B,Fu,Fp)
 nu = size(K,2);
 np = size(B,2);
 
-disp('solve stokes usawa cholinc');
+disp('solve stokes uzawa cholinc');
 //[pcB] = sp_cholinc(K,'0'); YC: '0' option ??
 [pcB] = sp_cholinc(K);
 pcBt = pcB';
-disp('solve stokes usawa first pcg');
+disp('solve stokes uzawa first pcg');
 P = zeros(np,1);
 U = pcg(K,Fu - B*P,1e-6,100,pcBt,pcB); // YC: ??
-disp('solve stokes usawa : got U');
+disp('solve stokes uzawa : got U');
 for k=1:10000,
   r = Fp - B'*U;
   res = norm(r);
diff --git a/interface/src/scilab/macros/overload/%objid_e.sci b/interface/src/scilab/macros/overload/%objid_e.sci
index eb01af1..d4b3176 100644
--- a/interface/src/scilab/macros/overload/%objid_e.sci
+++ b/interface/src/scilab/macros/overload/%objid_e.sci
@@ -8,57 +8,63 @@ function varargout = %objid_e(varargin)
   
   select gf_obj('cid')
   case 0 then
+    // gfContStruct
+    varargout = gf_cont_struct_get(gf_obj,other_param);
+  case 1 then
     // gfCvStruct
     varargout = gf_cvstruct_get(gf_obj,other_param);
-  case 1 then
+  case 2 then
     // gfEltm
     // No gf_eltm_get function
-  case 2 then
+  case 3 then
     // gfFem
     varargout = gf_fem_get(gf_obj,other_param);
-  case 3 then
+  case 4 then
     // gfGeoTrans
     varargout = gf_geotrans_get(gf_obj,other_param);
-  case 4 then
+  case 5 then
     // gfGlobalFunction
     varargout = gf_global_function_get(gf_obj,other_param);
-  case 5 then
+  case 6 then
     // gfInteg
     varargout = gf_integ_get(gf_obj,other_param);
-  case 6 then
+  case 7 then
     // gfLevelSet
     varargout = gf_levelset_get(gf_obj,other_param);
-  case 7 then
+  case 8 then
     // gfMdBrick
     varargout = gf_mdbrick_get(gf_obj,other_param);
-  case 8 then
+  case 9 then
     // gfMdState
     varargout = gf_mdstate_get(gf_obj,other_param);
-  case 9 then
+  case 10 then
     // gfMesh
     varargout = gf_mesh_get(gf_obj,other_param);
-  case 10 then
+  case 11 then
     // gfMeshFem
     varargout = gf_mesh_fem_get(gf_obj,other_param);
-  case 11 then
+  case 12 then
     // gfMeshIm
     varargout = gf_mesh_im_get(gf_obj,other_param);
-  case 12 then
+  case 13 then
     // gfMeshLevelSet
     varargout = gf_mesh_levelset_get(gf_obj,other_param);
-  case 13 then
+  case 14 then
+    // gfMesherObject
+    varargout = gf_mesher_object_get(gf_obj,other_param);
+  case 15 then
     // gfModel
     varargout = gf_model_get(gf_obj,other_param);
-  case 14 then
+  case 16 then
     // gfPrecond
     varargout = gf_precond_get(gf_obj,other_param);
-  case 15 then
+  case 17 then
     // gfSlice
     varargout = gf_slice_get(gf_obj,other_param);
-  case 16 then
+  case 18 then
     // gfSpmat
     varargout = gf_spmat_get(gf_obj,other_param);
-  case 17 then
+  case 19 then
     // gfPoly
     // No gf_poly_get function
   else
diff --git a/interface/src/scilab/macros/overload/%objid_get.sci b/interface/src/scilab/macros/overload/%objid_get.sci
index 878f58c..b2e8bfc 100644
--- a/interface/src/scilab/macros/overload/%objid_get.sci
+++ b/interface/src/scilab/macros/overload/%objid_get.sci
@@ -8,57 +8,63 @@ function varargout = %objid_get(varargin)
 
   select gf_obj('cid')
   case 0 then
+    // gfContStruct
+    varargout = gf_cont_struct_get(gf_obj,other_param(:));
+  case 1 then
     // gfCvStruct
     varargout = gf_cvstruct_get(gf_obj,other_param(:));
-  case 1 then
+  case 2 then
     // gfEltm
     // No gf_eltm_get function
-  case 2 then
+  case 3 then
     // gfFem
     varargout = gf_fem_get(gf_obj,other_param(:));
-  case 3 then
+  case 4 then
     // gfGeoTrans
     varargout = gf_geotrans_get(gf_obj,other_param(:));
-  case 4 then
+  case 5 then
     // gfGlobalFunction
     varargout = gf_global_function_get(gf_obj,other_param(:));
-  case 5 then
+  case 6 then
     // gfInteg
     varargout = gf_integ_get(gf_obj,other_param(:));
-  case 6 then
+  case 7 then
     // gfLevelSet
     varargout = gf_levelset_get(gf_obj,other_param(:));
-  case 7 then
+  case 8 then
     // gfMdBrick
     varargout = gf_mdbrick_get(gf_obj,other_param(:));
-  case 8 then
+  case 9 then
     // gfMdState
     varargout = gf_mdstate_get(gf_obj,other_param(:));
-  case 9 then
+  case 10 then
     // gfMesh
     varargout = gf_mesh_get(gf_obj,other_param(:));
-  case 10 then
+  case 11 then
     // gfMeshFem
     varargout = gf_mesh_fem_get(gf_obj,other_param(:));
-  case 11 then
+  case 12 then
     // gfMeshIm
     varargout = gf_mesh_im_get(gf_obj,other_param(:));
-  case 12 then
+  case 13 then
     // gfMeshLevelSet
     varargout = gf_mesh_levelset_get(gf_obj,other_param(:));
-  case 13 then
+  case 14 then
+    // gfMesherObject
+    varargout = gf_mesher_object_get(gf_obj,other_param(:));
+  case 15 then
     // gfModel
     varargout = gf_model_get(gf_obj,other_param(:));
-  case 14 then
+  case 16 then
     // gfPrecond
     varargout = gf_precond_get(gf_obj,other_param(:));
-  case 15 then
+  case 17 then
     // gfSlice
     varargout = gf_slice_get(gf_obj,other_param(:));
-  case 16 then
+  case 18 then
     // gfSpmat
     varargout = gf_spmat_get(gf_obj,other_param(:));
-  case 17 then
+  case 19 then
     // gfPoly
     // No gf_poly_get function
   else
diff --git a/interface/src/scilab/macros/overload/%objid_set.sci b/interface/src/scilab/macros/overload/%objid_set.sci
index 56e90dc..7cbf9f2 100644
--- a/interface/src/scilab/macros/overload/%objid_set.sci
+++ b/interface/src/scilab/macros/overload/%objid_set.sci
@@ -7,57 +7,63 @@ function %objid_set(varargin)
 
   select gf_obj('cid')
   case 0 then
+    // gfContStruct
+    // No gf_cont_struct_set function
+  case 1 then
     // gfCvStruct
     // No gf_cvstruct_set function
-  case 1 then
+  case 2 then
     // gfEltm
     // No gf_eltm_set function
-  case 2 then
+  case 3 then
     // gfFem
     // No gf_fem_set function
-  case 3 then
+  case 4 then
     // gfGeoTrans
     // No gf_geotrans_set function
-  case 4 then
+  case 5 then
     // gfGlobalFunction
     // No gf_global_function_set function
-  case 5 then
+  case 6 then
     // gfInteg
     // No gf_integ_set function
-  case 6 then
+  case 7 then
     // gfLevelSet
     gf_levelset_set(gf_obj,other_param(:));
-  case 7 then
+  case 8 then
     // gfMdBrick
     gf_mdbrick_set(gf_obj,other_param(:));
-  case 8 then
+  case 9 then
     // gfMdState
     gf_mdstate_set(gf_obj,other_param(:));
-  case 9 then
+  case 10 then
     // gfMesh
     gf_mesh_set(gf_obj,other_param(:));
-  case 10 then
+  case 11 then
     // gfMeshFem
     gf_mesh_fem_set(gf_obj,other_param(:));
-  case 11 then
+  case 12 then
     // gfMeshIm
     gf_mesh_im_set(gf_obj,other_param(:));
-  case 12 then
+  case 13 then
     // gfMeshLevelSet
     gf_mesh_levelset_set(gf_obj,other_param(:));
-  case 13 then
+  case 14 then
+    // gfMesherObject
+    // No gf_mesher_object_set function
+  case 15 then
     // gfModel
     gf_model_set(gf_obj,other_param(:));
-  case 14 then
+  case 16 then
     // gfPrecond
     // No gf_precond_set function
-  case 15 then
+  case 17 then
     // gfSlice
     gf_slice_set(gf_obj,other_param(:));
-  case 16 then
+  case 18 then
     // gfSpmat
     gf_spmat_set(gf_obj,other_param(:));
-  case 17 then
+  case 19 then
     // gfPoly
     // No gf_poly_set function
   else
diff --git a/interface/src/scilab/macros/overload/gf_typeof.sci b/interface/src/scilab/macros/overload/gf_typeof.sci
index 944de77..8826df6 100644
--- a/interface/src/scilab/macros/overload/gf_typeof.sci
+++ b/interface/src/scilab/macros/overload/gf_typeof.sci
@@ -10,40 +10,44 @@ function res = gf_typeof(gf_var)
 
   select gf_var('cid')
   case 0 then
-    res = 'gfCvStruct';
+    res = 'gfContStruct';
   case 1 then
-    res =  'gfEltm';
+    res = 'gfCvStruct';
   case 2 then
-    res = 'gfFem';
+    res =  'gfEltm';
   case 3 then
-    res = 'gfGeoTrans';
+    res = 'gfFem';
   case 4 then
-    res = 'gfGlobalFunction';
+    res = 'gfGeoTrans';
   case 5 then
-    res = 'gfInteg';
+    res = 'gfGlobalFunction';
   case 6 then
-    res = 'gfLevelSet';
+    res = 'gfInteg';
   case 7 then
-    res = 'gfMdBrick';
+    res = 'gfLevelSet';
   case 8 then
-    res = 'gfMdState';
+    res = 'gfMdBrick';
   case 9 then
-    res = 'gfMesh';
+    res = 'gfMdState';
   case 10 then
-    res = 'gfMeshFem';
+    res = 'gfMesh';
   case 11 then
-    res = 'gfMeshIm';
+    res = 'gfMeshFem';
   case 12 then
-    res = 'gfMeshLevelSet';
+    res = 'gfMeshIm';
   case 13 then
-    res = 'gfModel';
+    res = 'gfMeshLevelSet';
   case 14 then
-    res = 'gfPrecond';
+    res = 'gfMesherObject';
   case 15 then
-    res = 'gfSlice';
+    res = 'gfModel';
   case 16 then
-    res = 'gfSpmat';
+    res = 'gfPrecond';
   case 17 then
+    res = 'gfSlice';
+  case 18 then
+    res = 'gfSpmat';
+  case 19 then
     res = 'gfPoly';
   else
     error('wrong object ID');
diff --git a/interface/src/scilab/macros/overload/init_gf_types.sce b/interface/src/scilab/macros/overload/init_gf_types.sce
index 64d4953..bb18f69 100644
--- a/interface/src/scilab/macros/overload/init_gf_types.sce
+++ b/interface/src/scilab/macros/overload/init_gf_types.sce
@@ -16,4 +16,6 @@ gfSpmat          = gf_spmat;
 gfPrecond        = gf_precond;
 gfLevelSet       = gf_levelset;
 gfMeshLevelSet   = gf_mesh_levelset;
+gfMesherObject   = gf_mesher_object;
+gfContStruct  	 = gf_cont_struct;
 gfGlobalFunction = gf_global_function;
diff --git a/interface/src/scilab/readme.txt b/interface/src/scilab/readme.txt
index 05c4a2b..0ad580b 100644
--- a/interface/src/scilab/readme.txt
+++ b/interface/src/scilab/readme.txt
@@ -1,6 +1,6 @@
 readme.txt of the scilab getfem interface
 
-To compile this interface, you will need to work with the scilab-5.2.0
+To compile this interface, you will need to work with the scilab-5.2.2
 version or the scilab-master version (the version in the git
 repository) because this interface uses the new interface api.
 
@@ -28,4 +28,33 @@ You can try to launch a demo (be careful, there is a lot of work needed before t
 - cd demos
 - exec demo_static_contact.sce;
 
-Y. Collette (ycollet at freesurf dot fr)
+
+* Some hints for the compilation of this toolbox under windows.
+
+For the compilation of the toolbox under windows:
+- compile getfem + getfem interface using the visual studio 2010 project.
+  copy the lib files (from msvc2010/Release) into scilab/src/win32 or
+  src/win64
+  If you plan to add support for qhull and muparser in the windows
+  library, you must add:
+  - for qhull:
+    - GETFEM_HAVE_QHULL_QHULL_H in the preprocessor
+    - the path to the include where we can find qhull/qhull.h
+  - for muparser:
+    - GETFEM_HAVE_MUPARSER_H in the preprocessor
+    - the path to the include where we can find muParser.h
+
+- download and compile statically qhull using visual studio 2010.
+  copy libqhull.lib into scilab/src/win32 ou src/win64
+
+- download and compile statically muparser using visual studio 2010.
+  copy libmuparser.lib into scilab/src/win32 ou src/win64
+
+Now, you can go into the scilab directory.
+Launch Scilab and do:
+
+exec builder.sce;
+
+Best regards,
+
+Y. Collette (ycollette dot nospam at free dot fr)
diff --git a/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce b/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce
index 87288a6..f234524 100644
--- a/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce
+++ b/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce
@@ -5,82 +5,132 @@
 // ====================================================================
 
 sci_getfem_path = get_absolute_file_path('builder_gateway_c.sce');
-getfem_path = '/home/renard/goulp/source++/getfem';
+getfem_path = '/home/renard/temp/getfem-4.2';
 
-Table = ['gf_util',                'sci_gf_scilab'; ...
+// Functions extracted from getfem_interface.cc
+
+Table = ['gf_workspace',           'sci_gf_scilab'; ...
+         'gf_delete',              'sci_gf_scilab'; ...
+         'gf_undelete',            'sci_gf_scilab'; ...
+         'gf_eltm',                'sci_gf_scilab'; ...
+         'gf_geotrans',            'sci_gf_scilab'; ...
+         'gf_geotrans_get',        'sci_gf_scilab'; ...
+         'gf_integ',               'sci_gf_scilab'; ...
+         'gf_integ_get',           'sci_gf_scilab'; ...
+         'gf_global_function',     'sci_gf_scilab'; ...
+         'gf_global_function_get', 'sci_gf_scilab'; ...
+         'gf_fem',                 'sci_gf_scilab'; ...
+         'gf_fem_get',             'sci_gf_scilab'; ...
          'gf_cvstruct_get',        'sci_gf_scilab'; ...
-	 'gf_geotrans',            'sci_gf_scilab'; ...
-	 'gf_geotrans_get',        'sci_gf_scilab'; ...
-	 'gf_compute',             'sci_gf_scilab'; ...
-	 'gf_mesh_fem',            'sci_gf_scilab'; ...
-	 'gf_mesh_fem_set',        'sci_gf_scilab'; ...
-	 'gf_mesh_fem_get',        'sci_gf_scilab'; ...
-	 'gf_mesh_im',             'sci_gf_scilab'; ...
-	 'gf_mesh_im_set',         'sci_gf_scilab'; ...
-	 'gf_mesh_im_get',         'sci_gf_scilab'; ...
-	 'gf_eltm',                'sci_gf_scilab'; ...
-	 'gf_mesh',                'sci_gf_scilab'; ...
-	 'gf_mesh_set',            'sci_gf_scilab'; ...
-	 'gf_mesh_get',            'sci_gf_scilab'; ...
-	 'gf_mdbrick',             'sci_gf_scilab'; ...
-	 'gf_mdbrick_get',         'sci_gf_scilab'; ...
-	 'gf_mdbrick_set',         'sci_gf_scilab'; ...
-	 'gf_mdstate',             'sci_gf_scilab'; ...
-	 'gf_mdstate_get',         'sci_gf_scilab'; ...
-	 'gf_mdstate_set',         'sci_gf_scilab'; ...
-	 'gf_model',               'sci_gf_scilab'; ...
-	 'gf_model_get',           'sci_gf_scilab'; ...
-	 'gf_model_set',           'sci_gf_scilab'; ...
-	 'gf_slice',               'sci_gf_scilab'; ...
-	 'gf_slice_get',           'sci_gf_scilab'; ...
-	 'gf_slice_set',           'sci_gf_scilab'; ...
-	 'gf_levelset',            'sci_gf_scilab'; ...
-	 'gf_levelset_get',        'sci_gf_scilab'; ...
-	 'gf_levelset_set',        'sci_gf_scilab'; ...
-	 'gf_mesh_levelset',       'sci_gf_scilab'; ...
-	 'gf_mesh_levelset_get',   'sci_gf_scilab'; ...
-	 'gf_mesh_levelset_set',   'sci_gf_scilab'; ...
-	 'gf_precond',             'sci_gf_scilab'; ...
-	 'gf_precond_get',         'sci_gf_scilab'; ...
-	 'gf_linsolve',            'sci_gf_scilab'; ...
-	 'gf_spmat',               'sci_gf_scilab'; ...
-	 'gf_spmat_set',           'sci_gf_scilab'; ...
-	 'gf_spmat_get',           'sci_gf_scilab'; ...
-	 'gf_asm',                 'sci_gf_scilab'; ...
-	 'gf_fem',                 'sci_gf_scilab'; ...
-	 'gf_fem_get',             'sci_gf_scilab'; ...
-	 'gf_integ',               'sci_gf_scilab'; ...
-	 'gf_integ_get',           'sci_gf_scilab'; ...
-	 'gf_workspace',           'sci_gf_scilab'; ...
-	 'gf_delete',              'sci_gf_scilab'; ...
-	 'gf_undelete',            'sci_gf_scilab'; ...
-	 'gf_global_function',     'sci_gf_scilab'; ...
-	 'gf_global_function_get', 'sci_gf_scilab'; ...
-	 'sp_luinc',               'sci_spluinc';   ...
-	 'sp_lu',                  'sci_splu';      ...
-	 'sp_lusolve',             'sci_splusolve'; ...
-	 'sp_cholinc',             'sci_spcholinc'; ...
-	 'sp_chol',                'sci_spchol';    ...
-	 'sp_chsolve',             'sci_spchsolve'; ...
-	 'sp_cgne',                'sci_spcgne';    ...
-	 'sp_cgs',                 'sci_spcgs';     ...
-	 'sp_gmres',               'sci_spgmres';   ...
-	 'sp_mgcr',                'sci_spmgcr'];
-
-Files = ['gfm_common.c','gfm_scilab.c','sci_spluinc.c','sci_spcholinc.c','sci_splu.c','sci_spchol.c', ...
+         'gf_mesher_object',       'sci_gf_scilab'; ...
+         'gf_mesher_object_get',   'sci_gf_scilab'; ...
+         'gf_mesh',                'sci_gf_scilab'; ...
+         'gf_mesh_get',            'sci_gf_scilab'; ...
+         'gf_mesh_set',            'sci_gf_scilab'; ...
+         'gf_mesh_fem',            'sci_gf_scilab'; ...
+         'gf_mesh_fem_get',        'sci_gf_scilab'; ...
+         'gf_mesh_fem_set',        'sci_gf_scilab'; ...
+         'gf_mesh_im',             'sci_gf_scilab'; ...
+         'gf_mesh_im_get',         'sci_gf_scilab'; ...
+         'gf_mesh_im_set',         'sci_gf_scilab'; ...
+         'gf_mdbrick',             'sci_gf_scilab'; ...
+         'gf_mdbrick_get',         'sci_gf_scilab'; ...
+         'gf_mdbrick_set',         'sci_gf_scilab'; ...
+         'gf_mdstate',             'sci_gf_scilab'; ...
+         'gf_mdstate_get',         'sci_gf_scilab'; ...
+         'gf_mdstate_set',         'sci_gf_scilab'; ...
+         'gf_model',               'sci_gf_scilab'; ...
+         'gf_model_get',           'sci_gf_scilab'; ...
+         'gf_model_set',           'sci_gf_scilab'; ...
+         'gf_slice',               'sci_gf_scilab'; ...
+         'gf_slice_get',           'sci_gf_scilab'; ...
+         'gf_slice_set',           'sci_gf_scilab'; ...
+         'gf_levelset',            'sci_gf_scilab'; ...
+         'gf_levelset_get',        'sci_gf_scilab'; ...
+         'gf_levelset_set',        'sci_gf_scilab'; ...
+         'gf_mesh_levelset',       'sci_gf_scilab'; ...
+         'gf_mesh_levelset_get',   'sci_gf_scilab'; ...
+         'gf_mesh_levelset_set',   'sci_gf_scilab'; ...
+         'gf_asm',                 'sci_gf_scilab'; ...
+         'gf_compute',             'sci_gf_scilab'; ...
+         'gf_precond',             'sci_gf_scilab'; ...
+         'gf_precond_get',         'sci_gf_scilab'; ...
+         'gf_spmat',               'sci_gf_scilab'; ...
+         'gf_spmat_get',           'sci_gf_scilab'; ...
+         'gf_spmat_set',           'sci_gf_scilab'; ...
+         'gf_linsolve',            'sci_gf_scilab'; ...
+         'gf_util',                'sci_gf_scilab'; ...
+         'gf_exit',                'sci_gf_scilab'; ...
+	 'gf_cont_struct_get',     'sci_gf_scilab'; ...
+	 'gf_cont_struct',         'sci_gf_scilab'];
+
+// Special functions added for matlab compatibility
+
+Table = [Table; ...
+	 'sp_luinc',   'sci_spluinc';   ...
+	 'sp_lu',      'sci_splu';      ...
+	 'sp_lusolve', 'sci_splusolve'; ...
+	 'sp_cholinc', 'sci_spcholinc'; ...
+	 'sp_chol',    'sci_spchol';    ...
+	 'sp_chsolve', 'sci_spchsolve'; ...
+	 'sp_cgne',    'sci_spcgne';    ...
+	 'sp_cgs',     'sci_spcgs';     ...
+	 'sp_gmres',   'sci_spgmres';   ...
+	 'sp_mgcr',    'sci_spmgcr'];
+
+Files = ['gfm_common.c','gfm_scilab.cpp','sci_spluinc.c','sci_spcholinc.c','sci_splu.c','sci_spchol.c', ...
          'sci_cgne.c','sci_cgs.c','sci_gmres.c','sci_mgcr.c','sci_spchsolve.c','sci_splusolve.c'];
+
 Libraries = ['../../src/c/libsp_get'];
 
-cflags = ' -g -I' + sci_getfem_path + ' -I' + sci_getfem_path + ' -I' + sci_getfem_path + '/../../src/c';
-cflags = cflags + ' -I' + getfem_path + '/interface/src/' + ' -I' + getfem_path + '/src/getfem';
-cflags = cflags + ' -I' + SCI + '/../../include/scilab'; // For the binary distribution
+if getos()=='Windows' then
+  getfem_path = pwd() + '\..\..\..\';
+  
+  cflags = ' /I' + sci_getfem_path + ' /I' + sci_getfem_path + '/../../src/c';
+  cflags = cflags + ' /I' + getfem_path + '/interface/src/' + ' /I' + getfem_path + '/src/getfem';
+  cflags = cflags + ' /I' + SCI + '/../../include/scilab'; // For the binary distribution
+  cflags = cflags + ' /D__USE_DEPRECATED_STACK_FUNCTIONS__';
+
+  ldflags = getfem_path + 'msvc2010\Release\libgetfemint.lib ';
+  ldflags = ldflags + getfem_path + 'msvc2010\Release\libgetfem.lib ';
+  ldflags = ldflags + getfem_path + 'msvc2010\Release\superlu.lib ';
+  if (isfile(getfem_path + 'msvc2010\qhull-2011.1\lib\qhullstatic.lib')) then
+    ldflags = ldflags + getfem_path + 'msvc2010\qhull-2011.1\lib\qhullstatic.lib ';
+  end  
+  if (isfile(getfem_path + 'msvc2010\muparser_v134\lib\muparser.lib')) then
+    ldflags = ldflags + getfem_path + 'msvc2010\muparser_v134\lib\muparser.lib ';
+  end  
+
+  // Under windows, scilab ships only sparse_f.dll
+  // We need first to recreate the lib part 
+
+  // * Here are the mingw commands necessary to produce this lib library:
+  //   echo EXPORT > sparse_f.def
+  //   nm sparse_f.dll | grep 'T_' | sed 's/.* T _//' > sparse_f.def
+  //   dll_tool --def sparse_f.def --dllname sparse_f.dll --outputfile sparse_f.lib
+  // * Here are the visual commands necessary to produce this lib library:
+  //   dumpbin /exports sparse_f.dll > sparse_f.def
+  //   Edit sparse_f.def, add 'EXPORTS' on the first line and remove all the
+  //   cryptic symbols except the symbol name.
+  //   Now produce the lib file: lib /def:sparse_f.def /OUT:sparse_f.lib
+    
+  ldflags = ldflags + ' ' + SCI + '/bin/sparse_f.lib';
+
+  // ldflags = ldflags + ' /NODEFAULTLIB:LIBCMT';
+else
+  cflags = ' -g -I' + sci_getfem_path + ' -I' + sci_getfem_path + ' -I' + sci_getfem_path + '/../../src/c';
+  cflags = cflags + ' -I' + getfem_path + '/interface/src/' + ' -I' + getfem_path + '/src/getfem';
+  cflags = cflags + ' -I' + SCI + '/../../include/scilab'; // For the binary distribution
+  cflags = cflags + ' -D__USE_DEPRECATED_STACK_FUNCTIONS__';
+  
+  ldflags = sci_getfem_path + '/../../../.libs/libgetfemint.a ' + sci_getfem_path + '/../../../../../src/.libs/libgetfem.a';
+end
 
-ldflags = sci_getfem_path + '/../../../.libs/libgetfemint.a ' + sci_getfem_path + '/../../../../../src/.libs/libgetfem.a';
-if ~isempty('-lqhull') then
+if ~isempty('-lqhull') & getos()~='Windows' then
   ldflags = ldflags + ' -L/usr/lib -lqhull';
 end
 
-if ~isempty('-lmuparser') then
+if ~isempty('-lmuparser') & getos()~='Windows' then
   ldflags = ldflags + ' -L/usr/lib -lmuparser';
 end
 
diff --git a/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce.in b/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce.in
index 9fed859..eb8a95d 100644
--- a/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce.in
+++ b/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce.in
@@ -7,80 +7,130 @@
 sci_getfem_path = get_absolute_file_path('builder_gateway_c.sce');
 getfem_path = '@GETFEM_INTERFACE_PATH@';
 
-Table = ['gf_util',                'sci_gf_scilab'; ...
+// Functions extracted from getfem_interface.cc
+
+Table = ['gf_workspace',           'sci_gf_scilab'; ...
+         'gf_delete',              'sci_gf_scilab'; ...
+         'gf_undelete',            'sci_gf_scilab'; ...
+         'gf_eltm',                'sci_gf_scilab'; ...
+         'gf_geotrans',            'sci_gf_scilab'; ...
+         'gf_geotrans_get',        'sci_gf_scilab'; ...
+         'gf_integ',               'sci_gf_scilab'; ...
+         'gf_integ_get',           'sci_gf_scilab'; ...
+         'gf_global_function',     'sci_gf_scilab'; ...
+         'gf_global_function_get', 'sci_gf_scilab'; ...
+         'gf_fem',                 'sci_gf_scilab'; ...
+         'gf_fem_get',             'sci_gf_scilab'; ...
          'gf_cvstruct_get',        'sci_gf_scilab'; ...
-	 'gf_geotrans',            'sci_gf_scilab'; ...
-	 'gf_geotrans_get',        'sci_gf_scilab'; ...
-	 'gf_compute',             'sci_gf_scilab'; ...
-	 'gf_mesh_fem',            'sci_gf_scilab'; ...
-	 'gf_mesh_fem_set',        'sci_gf_scilab'; ...
-	 'gf_mesh_fem_get',        'sci_gf_scilab'; ...
-	 'gf_mesh_im',             'sci_gf_scilab'; ...
-	 'gf_mesh_im_set',         'sci_gf_scilab'; ...
-	 'gf_mesh_im_get',         'sci_gf_scilab'; ...
-	 'gf_eltm',                'sci_gf_scilab'; ...
-	 'gf_mesh',                'sci_gf_scilab'; ...
-	 'gf_mesh_set',            'sci_gf_scilab'; ...
-	 'gf_mesh_get',            'sci_gf_scilab'; ...
-	 'gf_mdbrick',             'sci_gf_scilab'; ...
-	 'gf_mdbrick_get',         'sci_gf_scilab'; ...
-	 'gf_mdbrick_set',         'sci_gf_scilab'; ...
-	 'gf_mdstate',             'sci_gf_scilab'; ...
-	 'gf_mdstate_get',         'sci_gf_scilab'; ...
-	 'gf_mdstate_set',         'sci_gf_scilab'; ...
-	 'gf_model',               'sci_gf_scilab'; ...
-	 'gf_model_get',           'sci_gf_scilab'; ...
-	 'gf_model_set',           'sci_gf_scilab'; ...
-	 'gf_slice',               'sci_gf_scilab'; ...
-	 'gf_slice_get',           'sci_gf_scilab'; ...
-	 'gf_slice_set',           'sci_gf_scilab'; ...
-	 'gf_levelset',            'sci_gf_scilab'; ...
-	 'gf_levelset_get',        'sci_gf_scilab'; ...
-	 'gf_levelset_set',        'sci_gf_scilab'; ...
-	 'gf_mesh_levelset',       'sci_gf_scilab'; ...
-	 'gf_mesh_levelset_get',   'sci_gf_scilab'; ...
-	 'gf_mesh_levelset_set',   'sci_gf_scilab'; ...
-	 'gf_precond',             'sci_gf_scilab'; ...
-	 'gf_precond_get',         'sci_gf_scilab'; ...
-	 'gf_linsolve',            'sci_gf_scilab'; ...
-	 'gf_spmat',               'sci_gf_scilab'; ...
-	 'gf_spmat_set',           'sci_gf_scilab'; ...
-	 'gf_spmat_get',           'sci_gf_scilab'; ...
-	 'gf_asm',                 'sci_gf_scilab'; ...
-	 'gf_fem',                 'sci_gf_scilab'; ...
-	 'gf_fem_get',             'sci_gf_scilab'; ...
-	 'gf_integ',               'sci_gf_scilab'; ...
-	 'gf_integ_get',           'sci_gf_scilab'; ...
-	 'gf_workspace',           'sci_gf_scilab'; ...
-	 'gf_delete',              'sci_gf_scilab'; ...
-	 'gf_undelete',            'sci_gf_scilab'; ...
-	 'gf_global_function',     'sci_gf_scilab'; ...
-	 'gf_global_function_get', 'sci_gf_scilab'; ...
-	 'sp_luinc',               'sci_spluinc';   ...
-	 'sp_lu',                  'sci_splu';      ...
-	 'sp_lusolve',             'sci_splusolve'; ...
-	 'sp_cholinc',             'sci_spcholinc'; ...
-	 'sp_chol',                'sci_spchol';    ...
-	 'sp_chsolve',             'sci_spchsolve'; ...
-	 'sp_cgne',                'sci_spcgne';    ...
-	 'sp_cgs',                 'sci_spcgs';     ...
-	 'sp_gmres',               'sci_spgmres';   ...
-	 'sp_mgcr',                'sci_spmgcr'];
-
-Files = ['gfm_common.c','gfm_scilab.c','sci_spluinc.c','sci_spcholinc.c','sci_splu.c','sci_spchol.c', ...
+         'gf_mesher_object',       'sci_gf_scilab'; ...
+         'gf_mesher_object_get',   'sci_gf_scilab'; ...
+         'gf_mesh',                'sci_gf_scilab'; ...
+         'gf_mesh_get',            'sci_gf_scilab'; ...
+         'gf_mesh_set',            'sci_gf_scilab'; ...
+         'gf_mesh_fem',            'sci_gf_scilab'; ...
+         'gf_mesh_fem_get',        'sci_gf_scilab'; ...
+         'gf_mesh_fem_set',        'sci_gf_scilab'; ...
+         'gf_mesh_im',             'sci_gf_scilab'; ...
+         'gf_mesh_im_get',         'sci_gf_scilab'; ...
+         'gf_mesh_im_set',         'sci_gf_scilab'; ...
+         'gf_mdbrick',             'sci_gf_scilab'; ...
+         'gf_mdbrick_get',         'sci_gf_scilab'; ...
+         'gf_mdbrick_set',         'sci_gf_scilab'; ...
+         'gf_mdstate',             'sci_gf_scilab'; ...
+         'gf_mdstate_get',         'sci_gf_scilab'; ...
+         'gf_mdstate_set',         'sci_gf_scilab'; ...
+         'gf_model',               'sci_gf_scilab'; ...
+         'gf_model_get',           'sci_gf_scilab'; ...
+         'gf_model_set',           'sci_gf_scilab'; ...
+         'gf_slice',               'sci_gf_scilab'; ...
+         'gf_slice_get',           'sci_gf_scilab'; ...
+         'gf_slice_set',           'sci_gf_scilab'; ...
+         'gf_levelset',            'sci_gf_scilab'; ...
+         'gf_levelset_get',        'sci_gf_scilab'; ...
+         'gf_levelset_set',        'sci_gf_scilab'; ...
+         'gf_mesh_levelset',       'sci_gf_scilab'; ...
+         'gf_mesh_levelset_get',   'sci_gf_scilab'; ...
+         'gf_mesh_levelset_set',   'sci_gf_scilab'; ...
+         'gf_asm',                 'sci_gf_scilab'; ...
+         'gf_compute',             'sci_gf_scilab'; ...
+         'gf_precond',             'sci_gf_scilab'; ...
+         'gf_precond_get',         'sci_gf_scilab'; ...
+         'gf_spmat',               'sci_gf_scilab'; ...
+         'gf_spmat_get',           'sci_gf_scilab'; ...
+         'gf_spmat_set',           'sci_gf_scilab'; ...
+         'gf_linsolve',            'sci_gf_scilab'; ...
+         'gf_util',                'sci_gf_scilab'; ...
+         'gf_exit',                'sci_gf_scilab'; ...
+	 'gf_cont_struct_get',     'sci_gf_scilab'; ...
+	 'gf_cont_struct',         'sci_gf_scilab'];
+
+// Special functions added for matlab compatibility
+
+Table = [Table; ...
+	 'sp_luinc',   'sci_spluinc';   ...
+	 'sp_lu',      'sci_splu';      ...
+	 'sp_lusolve', 'sci_splusolve'; ...
+	 'sp_cholinc', 'sci_spcholinc'; ...
+	 'sp_chol',    'sci_spchol';    ...
+	 'sp_chsolve', 'sci_spchsolve'; ...
+	 'sp_cgne',    'sci_spcgne';    ...
+	 'sp_cgs',     'sci_spcgs';     ...
+	 'sp_gmres',   'sci_spgmres';   ...
+	 'sp_mgcr',    'sci_spmgcr'];
+
+Files = ['gfm_common.c','gfm_scilab.cpp','sci_spluinc.c','sci_spcholinc.c','sci_splu.c','sci_spchol.c', ...
          'sci_cgne.c','sci_cgs.c','sci_gmres.c','sci_mgcr.c','sci_spchsolve.c','sci_splusolve.c'];
+
 Libraries = ['../../src/c/libsp_get'];
 
-cflags = ' -g -I' + sci_getfem_path + ' -I' + sci_getfem_path + ' -I' + sci_getfem_path + '/../../src/c';
-cflags = cflags + ' -I' + getfem_path + '/interface/src/' + ' -I' + getfem_path + '/src/getfem';
-cflags = cflags + ' -I' + SCI + '/../../include/scilab'; // For the binary distribution
+if getos()=='Windows' then
+  getfem_path = pwd() + '\..\..\..\';
+  
+  cflags = ' /I' + sci_getfem_path + ' /I' + sci_getfem_path + '/../../src/c';
+  cflags = cflags + ' /I' + getfem_path + '/interface/src/' + ' /I' + getfem_path + '/src/getfem';
+  cflags = cflags + ' /I' + SCI + '/../../include/scilab'; // For the binary distribution
+  cflags = cflags + ' /D__USE_DEPRECATED_STACK_FUNCTIONS__';
+
+  ldflags = getfem_path + 'msvc2010\Release\libgetfemint.lib ';
+  ldflags = ldflags + getfem_path + 'msvc2010\Release\libgetfem.lib ';
+  ldflags = ldflags + getfem_path + 'msvc2010\Release\superlu.lib ';
+  if (isfile(getfem_path + 'msvc2010\qhull-2011.1\lib\qhullstatic.lib')) then
+    ldflags = ldflags + getfem_path + 'msvc2010\qhull-2011.1\lib\qhullstatic.lib ';
+  end  
+  if (isfile(getfem_path + 'msvc2010\muparser_v134\lib\muparser.lib')) then
+    ldflags = ldflags + getfem_path + 'msvc2010\muparser_v134\lib\muparser.lib ';
+  end  
+
+  // Under windows, scilab ships only sparse_f.dll
+  // We need first to recreate the lib part 
+
+  // * Here are the mingw commands necessary to produce this lib library:
+  //   echo EXPORT > sparse_f.def
+  //   nm sparse_f.dll | grep 'T_' | sed 's/.* T _//' > sparse_f.def
+  //   dll_tool --def sparse_f.def --dllname sparse_f.dll --outputfile sparse_f.lib
+  // * Here are the visual commands necessary to produce this lib library:
+  //   dumpbin /exports sparse_f.dll > sparse_f.def
+  //   Edit sparse_f.def, add 'EXPORTS' on the first line and remove all the
+  //   cryptic symbols except the symbol name.
+  //   Now produce the lib file: lib /def:sparse_f.def /OUT:sparse_f.lib
+    
+  ldflags = ldflags + ' ' + SCI + '/bin/sparse_f.lib';
+
+  // ldflags = ldflags + ' /NODEFAULTLIB:LIBCMT';
+else
+  cflags = ' -g -I' + sci_getfem_path + ' -I' + sci_getfem_path + ' -I' + sci_getfem_path + '/../../src/c';
+  cflags = cflags + ' -I' + getfem_path + '/interface/src/' + ' -I' + getfem_path + '/src/getfem';
+  cflags = cflags + ' -I' + SCI + '/../../include/scilab'; // For the binary distribution
+  cflags = cflags + ' -D__USE_DEPRECATED_STACK_FUNCTIONS__';
+  
+  ldflags = sci_getfem_path + '/../../../.libs/libgetfemint.a ' + sci_getfem_path + '/../../../../../src/.libs/libgetfem.a';
+end
 
-ldflags = sci_getfem_path + '/../../../.libs/libgetfemint.a ' + sci_getfem_path + '/../../../../../src/.libs/libgetfem.a';
-if ~isempty('@QHULL_LIBS@') then
+if ~isempty('@QHULL_LIBS@') & getos()~='Windows' then
   ldflags = ldflags + ' -L/usr/lib @QHULL_LIBS@';
 end
 
-if ~isempty('@MUPARSER_LIBS@') then
+if ~isempty('@MUPARSER_LIBS@') & getos()~='Windows' then
   ldflags = ldflags + ' -L/usr/lib @MUPARSER_LIBS@';
 end
 
diff --git a/interface/src/scilab/sci_gateway/c/cleaner.sce b/interface/src/scilab/sci_gateway/c/cleaner.sce
index c47cb19..19ad36f 100644
--- a/interface/src/scilab/sci_gateway/c/cleaner.sce
+++ b/interface/src/scilab/sci_gateway/c/cleaner.sce
@@ -1,4 +1,4 @@
-// This file is released into the public domain
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
 // Generated by builder.sce : Please, do not edit this file
 // cleaner.sce
 // ------------------------------------------------------
diff --git a/interface/src/scilab/sci_gateway/c/gfm_common.c b/interface/src/scilab/sci_gateway/c/gfm_common.c
index 86d97bb..bbb14da 100644
--- a/interface/src/scilab/sci_gateway/c/gfm_common.c
+++ b/interface/src/scilab/sci_gateway/c/gfm_common.c
@@ -1,25 +1,23 @@
-/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2009-2010 Yann Collette
-
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yann Collette
+ 
  This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301,
- USA.
-
- ========================================================================*/
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <assert.h>
 #include <signal.h>
@@ -30,13 +28,7 @@
 #include <Scierror.h>
 #include <sciprint.h>
 #include <MALLOC.h>
-#include <api_common.h>
-#include <api_string.h>
-#include <api_double.h>
-#include <api_int.h>
-#include <api_sparse.h>
-#include <api_list.h>
-#include <api_boolean.h>
+#include <api_scilab.h>
 
 #include "gfm_common.h"
 
@@ -48,8 +40,8 @@
 #define USE_SPT
 
 // a function to transpose a sparse matrix. From modules/sparse/src/fortran
-void C2F(spt)(int * m, int * n, int * nel, int * it, int * ptr, double * A_R,  double * A_I,  
-	      int * A_mnel,  int * A_icol, double * At_R, double * At_I, int * At_mnel, int * At_icol);
+extern void C2F(spt)(int * m, int * n, int * nel, int * it, int * ptr, double * A_R,  double * A_I,  
+	                 int * A_mnel,  int * A_icol, double * At_R, double * At_I, int * At_mnel, int * At_icol);
 	    
 
 const char * sci_ClassID2string(sci_types id) 
@@ -87,8 +79,20 @@ const char * sci_ClassID2string(sci_types id)
 int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 {
   SciErr _SciErr;
-  StrCtx _StrCtx;
   int i, n = 0, var_type = 0;
+  int * item_address = NULL;
+  int pirow, picol, *pilen = NULL, *pilistaddress, size_pistring = 0, nbitem;
+  int * nbitemrow = NULL, * picolpos = NULL;
+  char ** pstStrings = NULL, ** pstData = NULL;
+  double * pdblDataID = NULL, * pdblDataCID = NULL;
+  int * pintDims = NULL, * ptr = NULL;
+  double * pdblDims = NULL, * pdblDataReal = NULL, * pdblDataImag = NULL;
+  int piPrecision, * p_item_address = NULL;
+  int * piData32 = NULL, * piBool = NULL;
+  unsigned int * puiData32 = NULL;
+  int is_complex;
+  int tmp_cnt, tmp_cnt2;
+  double * tmp_dblDataReal = NULL, * tmp_dblDataImag = NULL;
   
 #ifdef DEBUG
   int _picol, _pirow;
@@ -109,7 +113,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 #ifdef DEBUG
 	sciprint("sci_array_to_gfi_array: dealing with sci_list\n");
 #endif
-	int i;
 
 	_SciErr = getListItemNumber(pvApiCtx,sci_x,&n); CHECK_ERROR_API_SCILAB;
 
@@ -120,7 +123,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 	for(i=0; i<n; ++i) 
 	  {
 	    t->storage.gfi_storage_u.data_cell.data_cell_val[i] = MALLOC(1*sizeof(gfi_array));
-	    int * item_address = NULL;
 	    _SciErr = getListItemAddress(pvApiCtx,sci_x,i+1,&item_address); CHECK_ERROR_API_SCILAB;
 #ifdef DEBUG
 	    _SciErr = getVarType(pvApiCtx,item_address,&var_type); CHECK_ERROR_API_SCILAB;
@@ -142,11 +144,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 #ifdef DEBUG
 	sciprint("sci_array_to_gfi_array: dealing with mlist\n");
 #endif
-	int pirow, picol, *pilen, *pilistaddress, size_pistring = 0;
-	char ** pstStrings;
-	double * pdblDataID, * pdblDataCID;
-	int * pintDims;
-	double * pdblDims;
 
 	_SciErr = getListItemNumber(pvApiCtx,sci_x,&n); CHECK_ERROR_API_SCILAB;
 	_SciErr = getMatrixOfStringInList(pvApiCtx,sci_x,1,&pirow,&picol,NULL,NULL); CHECK_ERROR_API_SCILAB;
@@ -198,7 +195,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 	  }
 	else if (strcmp(pstStrings[0],"hm")==0)
 	  {
-	    int piPrecision, ret, * p_item_address;
 #ifdef DEBUG
 	    sciprint("sci_array_to_gfi_array: dealing with hypermat\n");
 #endif
@@ -272,8 +268,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 		
 		if (piPrecision==SCI_INT32)
 		  {
-		    int * piData32;
-
 		    t->storage.type = GFI_INT32;
 		    _SciErr = getMatrixOfInteger32(pvApiCtx,sci_x,&pirow,&picol,&piData32); CHECK_ERROR_API_SCILAB;
 		    
@@ -283,8 +277,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 		  }
 		else if (piPrecision==SCI_UINT32)
 		  {
-		    unsigned int * puiData32;
-
 		    t->storage.type = GFI_UINT32;
 		    _SciErr = getMatrixOfUnsignedInteger32(pvApiCtx,sci_x,&pirow,&picol,&puiData32); CHECK_ERROR_API_SCILAB;
 		    
@@ -321,9 +313,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 #ifdef DEBUG
 	sciprint("sci_array_to_gfi_array: dealing with sci_strings\n");
 #endif
-	int picol, pirow;
-	int * pilen = NULL;
-	char ** pstData = NULL;
 
 	t->storage.type = GFI_CHAR;
 
@@ -371,7 +360,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 #ifdef DEBUG
 	sciprint("sci_array_to_gfi_array: dealing with sci_ints\n");
 #endif
-	int piPrecision;
 
 	_SciErr = getMatrixOfIntegerPrecision(pvApiCtx,sci_x,&piPrecision); CHECK_ERROR_API_SCILAB;
 #ifdef DEBUG
@@ -386,8 +374,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 	if (piPrecision==SCI_INT32)
 	  {
 	    t->storage.type = GFI_INT32;
-	    int pirow, picol;
-	    int * piData32;
 
 	    _SciErr = getMatrixOfInteger32(pvApiCtx,sci_x,&pirow,&picol,&piData32); CHECK_ERROR_API_SCILAB;
 #ifdef DEBUG
@@ -409,8 +395,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 	else
 	  {
 	    t->storage.type = GFI_UINT32;
-	    int pirow, picol;
-	    unsigned int * puiData32;
 
 	    _SciErr = getMatrixOfUnsignedInteger32(pvApiCtx,sci_x,&pirow,&picol,&puiData32); CHECK_ERROR_API_SCILAB;
 
@@ -437,8 +421,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 #ifdef DEBUG
 	sciprint("sci_array_to_gfi_array: dealing with sci_boolean\n");
 #endif
-	int pirow, picol;
-	int * piBool;
 
 	t->storage.type = GFI_INT32;
 
@@ -467,9 +449,7 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 #ifdef DEBUG
 	sciprint("sci_array_to_gfi_array: dealing with sci_matrix\n");
 #endif
-	int is_complex = isVarComplex(pvApiCtx,sci_x);
-	int pirow, picol;
-	double * pdblDataReal, * pdblDataImag;
+	is_complex = isVarComplex(pvApiCtx,sci_x);
 	
 	t->storage.type = GFI_DOUBLE;
 	t->storage.gfi_storage_u.data_double.is_complex = is_complex;
@@ -519,13 +499,7 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 #ifdef DEBUG
 	sciprint("sci_array_to_gfi_array: dealing with sci_sparse\n");
 #endif
-	int is_complex = isVarComplex(pvApiCtx,sci_x);
-	int pirow, picol, nbitem;
-	double * pdblDataReal, * pdblDataImag;
-	int * nbitemrow, * picolpos, * offset;
-	int j, k, Index;
-	int * ptr;
-	int tmp_cnt, tmp_cnt2;
+	is_complex = isVarComplex(pvApiCtx,sci_x);
 
         t->storage.type = GFI_SPARSE;
         t->storage.gfi_storage_u.sp.is_complex = is_complex;
@@ -647,7 +621,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
 
 #ifdef USE_SPT
 	    sciprint("DEBUG: testing the new method - complex\n");
-	    double * tmp_dblDataReal, * tmp_dblDataImag;
 
 	    ptr = (int *)MALLOC(picol*sizeof(int));
 	    tmp_dblDataReal = (double *)MALLOC(nbitem*sizeof(double));
@@ -754,26 +727,39 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
   // - addCellToCell, addStringToCell, etc.. pour gérer les listes imbriquées
 
   SciErr _SciErr;
-  int *m_var, var_type;
-  StrCtx _StrCtx;
-
-  assert(t);
+  int * m_var = NULL, var_type;
 
   /* Scilab represent scalars as an array of size one */
   /* while gfi_array represents "scalar" values with 0-dimension array */
 
   int ndim = (t->dim.dim_len == 0 ? 1 : t->dim.dim_len);
   static const int one = 1;
-  const int *dim = (t->dim.dim_len == 0 ? &one : (const int *)t->dim.dim_val);
+  const int * dim = (t->dim.dim_len == 0 ? &one : (const int *)t->dim.dim_val);
+  int is_hypermat = 0;
+  int nrow, ncol, nb_item, pi_precision;
+  int pirow, picol, nbitem, * pi_col_pos = NULL, * nb_item_row = NULL;
+  int * nb_item_row_tmp = NULL, * pi_col_pos_tmp = NULL, * pilen = NULL;
+  int * dims = NULL;
+  unsigned int * entries = NULL;
+  int nb_elem = 1;
+  double * pr = NULL, * pi = NULL;
+  int i, j;
+  double * pdblDataReal = NULL, * pdblDataImag = NULL, * pdblDataReal_tmp = NULL, * pdblDataImag_tmp = NULL;
+  double * dbl_entries = NULL;
+  double * entries_pr = NULL, * entries_pi = NULL;
+  int iscomplex;
+  int * ptr = NULL, * m_content = NULL, * piData32 = NULL;
+  char ** pstStrings = NULL;
+  double * pdblReal = NULL, * pdblImag = NULL;
+  unsigned int * puiData32 = NULL;
+  int * piBool = NULL;
+
+  assert(t);
   
   switch (t->storage.type) 
     {
     case GFI_UINT32: 
       {
-	int is_hypermat = 0;
-	int nrow, ncol, i;
-	int pirow, picol;
-
 	if (ndim==1)
 	  {
 	    nrow = dim[0];
@@ -799,10 +785,8 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
 	  }
 	else
 	  {
-	    char *fields[] = {"hm","dims","entries"};
-	    int * dims;
-	    unsigned int * entries;
-	    int nb_elem = 1;
+	    const char * const fields[] = {"hm","dims","entries"};
+	    nb_elem = 1;
 
 	    _SciErr = createMList(pvApiCtx,ivar,3,&m_var); CHECK_ERROR_API_SCILAB;
 	    _SciErr = createMatrixOfStringInList(pvApiCtx,ivar, m_var, 1, 1, 3, fields); CHECK_ERROR_API_SCILAB;
@@ -829,9 +813,7 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
       break;
     case GFI_INT32: 
       {
-	int is_hypermat = 0;
-	int nrow, ncol, i;
-	int pirow, picol;
+	is_hypermat = 0;
 
 	if (ndim==1)
 	  {
@@ -858,10 +840,8 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
 	  }
 	else
 	  {
-	    char *fields[] = {"hm","dims","entries"};
-	    int * dims;
-	    double * entries;
-	    int nb_elem = 1;
+	    const char * const fields[] = {"hm","dims","entries"};
+	    nb_elem = 1;
 
 	    _SciErr = createMList(pvApiCtx,ivar,3,&m_var); CHECK_ERROR_API_SCILAB;
 	    _SciErr = createMatrixOfStringInList(pvApiCtx,ivar, m_var, 1, 1, 3, fields); CHECK_ERROR_API_SCILAB;
@@ -873,15 +853,15 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
 		nb_elem *= (int)t->dim.dim_val[i];
 	      }
 
-	    entries = (double *)MALLOC(nb_elem*sizeof(double));
-	    for(i=0;i<nb_elem;i++) entries[i] = (double)t->storage.gfi_storage_u.data_int32.data_int32_val[i];
+	    dbl_entries = (double *)MALLOC(nb_elem*sizeof(double));
+	    for(i=0;i<nb_elem;i++) dbl_entries[i] = (double)t->storage.gfi_storage_u.data_int32.data_int32_val[i];
 	    
 	    // Add a vector to the 'dims' field -> a row vector
 	    _SciErr = createMatrixOfInteger32InList(pvApiCtx,ivar, m_var, 2, 1, t->dim.dim_len, dims); CHECK_ERROR_API_SCILAB;
 	    // Add a vector to the 'entries' field -> a column vector
-	    _SciErr = createMatrixOfDoubleInList(pvApiCtx,ivar, m_var, 3, nb_elem, 1, entries); CHECK_ERROR_API_SCILAB;
+	    _SciErr = createMatrixOfDoubleInList(pvApiCtx,ivar, m_var, 3, nb_elem, 1, dbl_entries); CHECK_ERROR_API_SCILAB;
 		
-	    if (entries) FREE(entries);
+	    if (entries) FREE(dbl_entries);
 	    if (dims)    FREE(dims);
 	  }
       } 
@@ -893,9 +873,7 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
 	sciprint("ndim = %d ivar = %d\n", ndim, ivar);
 	sciprint("dim[0] = %d\n", dim[0]);
 #endif
-	int i, nrow, ncol;
-	double *pr, *pi;
-	int is_hypermat = 0;
+	is_hypermat = 0;
 
 	if (ndim==1)
 	  {
@@ -929,7 +907,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
 #ifdef DEBUG
 		sciprint("DEBUG: array is complex\n");
 #endif
-		double *pr, *pi; int i;
 		
 		pr = (double *)MALLOC(nrow*ncol*sizeof(double));
 		pi = (double *)MALLOC(nrow*ncol*sizeof(double));
@@ -951,9 +928,8 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
 #ifdef DEBUG
 	    sciprint("DEBUG: array is hypermat\n");
 #endif
-	    char *fields[] = {"hm","dims","entries"};
-	    int * dims;
-	    int nb_elem = 1;
+	    const char * const fields[] = {"hm","dims","entries"};
+	    nb_elem = 1;
 
 	    _SciErr = createMList(pvApiCtx,ivar,3,&m_var); CHECK_ERROR_API_SCILAB;
 	    _SciErr = createMatrixOfStringInList(pvApiCtx,ivar, m_var, 1, 1, 3, fields); CHECK_ERROR_API_SCILAB;
@@ -967,15 +943,14 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
 
 	    if (!gfi_array_is_complex(t)) 
 	      {
-		double * entries;
 
-		entries = (double *)MALLOC(nb_elem*sizeof(double));
-		for(i=0;i<nb_elem;i++) entries[i] = t->storage.gfi_storage_u.data_double.data_double_val[i];
+		dbl_entries = (double *)MALLOC(nb_elem*sizeof(double));
+		for(i=0;i<nb_elem;i++) dbl_entries[i] = t->storage.gfi_storage_u.data_double.data_double_val[i];
 		
 		// Add a vector to the 'dims' field -> a row vector
 		_SciErr = createMatrixOfInteger32InList(pvApiCtx,ivar, m_var, 2, 1, t->dim.dim_len, dims); CHECK_ERROR_API_SCILAB;
 		// Add a vector to the 'entries' field -> a column vector
-		_SciErr = createMatrixOfDoubleInList(pvApiCtx,ivar, m_var, 3, nb_elem, 1, entries); CHECK_ERROR_API_SCILAB;
+		_SciErr = createMatrixOfDoubleInList(pvApiCtx,ivar, m_var, 3, nb_elem, 1, dbl_entries); CHECK_ERROR_API_SCILAB;
 		
 		if (entries) FREE(entries);
 #ifdef DEBUG
@@ -984,8 +959,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
 	      }
 	    else
 	      {
-		double * entries_pr, *entries_pi;
-
 		entries_pr = (double *)MALLOC(nb_elem*sizeof(double));
 		entries_pi = (double *)MALLOC(nb_elem*sizeof(double));
 		for(i=0;i<nb_elem;i++) 
@@ -1026,8 +999,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
       break;
     case GFI_CELL: 
       {
-	unsigned int i, nb_item;
-	int * m_content;
 #ifdef DEBUG
 	sciprint("gfi_array_to_sci_array: create from a GFI_CELL\n");
 	sciprint("ndim = %d ivar = %d\n", dim[0],ivar);
@@ -1070,8 +1041,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
 		  sciprint("gfi_array_to_sci_array: create from a GFI_CELL - sci_strings\n");
 		  sciprint("add element %d to position %d\n", i, ivar);
 #endif
-		  int pirow, picol, *pilen, j;
-		  char ** pstStrings;
 		  
 		  // Get the matrix of strings from the gfi_array
 		  _SciErr = getMatrixOfString(pvApiCtx,m_content, &pirow, &picol, NULL, NULL); CHECK_ERROR_API_SCILAB;
@@ -1105,10 +1074,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
 #endif
 		// UINT32 + INT32
 		{
-		  int pi_precision, pirow, picol;
-		  int * piData32;
-		  unsigned int * puiData32;
-		  
 		  _SciErr = getMatrixOfIntegerPrecision(pvApiCtx,m_content,&pi_precision); CHECK_ERROR_API_SCILAB;
 		  if ((pi_precision!=SCI_INT32)&&(pi_precision!=SCI_UINT32))
 		    {
@@ -1134,8 +1099,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
 #ifdef DEBUG
 		  sciprint("gfi_array_to_sci_array: create from a GFI_CELL - sci_boolean\n");
 #endif
-		  int pirow, picol;
-		  int * piBool;
 
 		  _SciErr = getMatrixOfBoolean(pvApiCtx,m_content, &pirow, &picol, &piBool); CHECK_ERROR_API_SCILAB;
 		  _SciErr = createMatrixOfBooleanInList(pvApiCtx,ivar, m_var, i+1, pirow, picol, piBool); CHECK_ERROR_API_SCILAB;
@@ -1146,9 +1109,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
 #ifdef DEBUG
 		  sciprint("gfi_array_to_sci_array: create from a GFI_CELL - sci_matrix\n");
 #endif
-		  int pirow, picol;
-		  double * pdblReal, * pdblImag;
-		  
 		  if (isVarComplex(pvApiCtx,m_content))
 		    {
 		      _SciErr = getComplexMatrixOfDouble(pvApiCtx,m_content, &pirow, &picol, &pdblReal, &pdblImag); CHECK_ERROR_API_SCILAB;
@@ -1166,9 +1126,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
 #ifdef DEBUG
 		  sciprint("gfi_array_to_sci_array: create from a GFI_CELL - sci_sparse\n");
 #endif
-		  int pirow, picol, nbitem, * nb_item_row, * pi_col_pos;
-		  double * pdblReal, * pdblImag;
-		  
 		  if (isVarComplex(pvApiCtx,m_content))
 		    {
 		      _SciErr = getComplexSparseMatrix(pvApiCtx,m_content, &pirow, &picol, &nbitem, &nb_item_row, &pi_col_pos, &pdblReal, &pdblImag); CHECK_ERROR_API_SCILAB;
@@ -1214,11 +1171,7 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
       break;
     case GFI_SPARSE: 
       {
-	int picol, pirow, nbitem, * pi_col_pos, * nb_item_row, * nb_item_row_tmp, * pi_col_pos_tmp;
-	int i, j, k, nnz, Index;
-	double * pdblDataReal, * pdblDataImag, * pdblDataReal_tmp, * pdblDataImag_tmp;
-	int iscomplex = gfi_array_is_complex(t);
-	int * ptr;
+	iscomplex = gfi_array_is_complex(t);
 
 	nbitem = t->storage.gfi_storage_u.sp.ir.ir_len;
 	pirow  = t->dim.dim_val[0];
diff --git a/interface/src/scilab/sci_gateway/c/gfm_common.h b/interface/src/scilab/sci_gateway/c/gfm_common.h
index 1d79602..26bcb31 100644
--- a/interface/src/scilab/sci_gateway/c/gfm_common.h
+++ b/interface/src/scilab/sci_gateway/c/gfm_common.h
@@ -1,34 +1,33 @@
 /* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2009 Yann Collette
-
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yann Collette
+ 
  This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301,
- USA.
-
- As a special exception, you may use this file as part of a free software
- library without restriction.  Specifically, if other files instantiate
- templates or use macros or inline functions from this file, or you compile
- this file and link it with other files to produce an executable, this
- file does not by itself cause the resulting executable to be covered by
- the GNU General Public License.  This exception does not however
- invalidate any other reasons why the executable file might be covered by
- the GNU General Public License.
-
- ========================================================================*/
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #ifndef GFM_COMMON_H
 #define GFM_COMMON_H
diff --git a/interface/src/scilab/sci_gateway/c/gfm_scilab.c b/interface/src/scilab/sci_gateway/c/gfm_scilab.c
deleted file mode 100644
index 53dd659..0000000
--- a/interface/src/scilab/sci_gateway/c/gfm_scilab.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2009 Yann Collette
-
- This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301,
- USA.
-
- ========================================================================*/
-
-#include <assert.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <time.h>
-
-#include <stack-c.h>
-#include <sciprint.h>
-#include <Scierror.h>
-#include <api_common.h>
-#include <MALLOC.h>
-
-#include "gfm_common.h"
-#include "gfi_array.h"
-#include "getfem_interface.h"
-
-//#define DEBUG_TIMER
-//#define DEBUG
-//#define DEBUG2
-
-gfi_output * call_getfem_interface(char *funname, gfi_array_list in, int nlhs)
-{
-  static gfi_output result;
-  gfi_array **pin  = NULL;
-  gfi_array **pout = NULL;
-  char *errmsg = 0, *infomsg = 0;
-  unsigned int i;
-
-#ifdef DEBUG2
-  sciprint("call_getfem_interface: len = %d \n",in.arg.arg_len);
-  for(i=0;i<in.arg.arg_len;i++)
-    {
-      sciprint("element %d: \n",i);
-      gfi_array_print(&in.arg.arg_val[i]);
-    }
-#endif
-
-  pin = gfi_calloc(in.arg.arg_len, sizeof(gfi_array*));
-  for (i=0; i < in.arg.arg_len; ++i) 
-    {
-      pin[i] = &in.arg.arg_val[i];
-    }
-
-#ifdef DEBUG
-  sciprint("call_getfem_interface: funname = %s len = %d\n",funname, in.arg.arg_len);
-#endif
-
-  errmsg = getfem_interface_main(SCILAB_INTERFACE, funname, in.arg.arg_len, (const gfi_array **)pin, &nlhs, &pout, &infomsg, 1);
-
-#ifdef DEBUG
-  sciprint("call_getfem_interface: end of getfem_interface_main, nlhs = %d infomsg = %s\n",nlhs,infomsg);
-#endif
-
-  result.infomsg = infomsg;
-  if (errmsg) 
-    {
-      result.status = GFI_STATUS_ERROR;
-      result.gfi_output_u.errmsg = errmsg;
-    } 
-  else 
-    {
-      result.status = GFI_STATUS_OK;
-      result.gfi_output_u.output.arg.arg_len = nlhs;
-      result.gfi_output_u.output.arg.arg_val = gfi_calloc(nlhs, sizeof(gfi_array));
-      for(i=0; i<nlhs; ++i) 
-	{
-	  assert(pout[i]);
-	  result.gfi_output_u.output.arg.arg_val[i] = *pout[i];
-	  gfi_free(pout[i]);
-	}
-      if (pout) gfi_free(pout);
-    }
-  gfi_free(pin);
-
-  return &result;
-}
-
-char *current_scilab_function = NULL;
-
-void sigint_callback(int sig) 
-{
-  char *s = current_scilab_function; if (!s) s = "doh!!";
-  fprintf(stderr, "*** CTRL-C hit during execution of the getfem_scilab function: gf_%s...\n" \
-	  "You will gain control as soon as the current operation is finished ***\n" \
-	  "If you want to abort immediatly the current operation, hit CTRL-C again\n" \
-	  "In that case, you will have to restart getfem_scilab:\n", s);
-  set_cancel_flag(1);
-  assert(handle_getfem_callback() == 1);
-}
-
-int sci_gf_scilab(char * fname) 
-{
-  gfi_output     * out  = NULL;
-  gfi_array_list * in   = NULL;
-  gfi_array_list * outl = NULL;
-  int ** ptr_param = NULL;
-  int *  sci_x     = NULL;
-  int picol, pirow, var_type;
-  unsigned int i;
-  SciErr _SciErr;
-  StrCtx _StrCtx;
-  clock_t time_start, time_end;
-
-  set_cancel_flag(0);
-  set_superlu_callback(is_cancel_flag_set);
-  
-#ifdef DEBUG
-  sciprint("sci_gf_scilab: Rhs = %d Lhs = %d\n", Rhs, Lhs);
-#endif
-
-  ptr_param = (int **)MALLOC((Rhs+1)*sizeof(int *));
-  for(i=1;i<=Rhs;i++)
-    {
-#ifdef DEBUG
-      sciprint("sci_gf_scilab: i = %d Rhs = %d\n", i, Rhs);
-#endif
-      _SciErr = getVarAddressFromPosition(&_StrCtx,i,ptr_param+i);
-#ifdef DEBUG
-      _SciErr = getVarDimension(&_StrCtx,ptr_param[i],&pirow,&picol);
-      _SciErr = getVarType(&_StrCtx,ptr_param[i],&var_type);
-      sciprint("sci_gf_scilab: position %d - address %d - type %d - dimension %d %d\n", i, ptr_param[i],var_type,pirow,picol);
-#endif
-    }
-
-#ifdef DEBUG
-      sciprint("sci_gf_scilab: list of parameters built\n", i, Rhs);
-#endif
-
-#ifdef DEBUG_TIMER
-  sciprint("DEBUG_TIMER: before build_gfi_array_list\n");
-  time_start = clock()/CLOCKS_PER_SEC;
-#endif
-    
-  in = build_gfi_array_list(Rhs, ptr_param);
-
-#ifdef DEBUG_TIMER
-  time_end = clock()/CLOCKS_PER_SEC;
-  sciprint("DEBUG_TIMER: after build_gfi_array_list: %f\n", (double)(time_end - time_start));
-  time_start = time_end;
-#endif
-
-  if (!in) 
-    {
-      Scierror(999,"%s: a problem occured while reading arguments.\n",fname);
-      return 0;
-    }
-#ifdef DEBUG
-  sciprint("sci_gf_scilab: end of build_gfi_array_list\n");
-#endif
-
-  install_custom_sigint(sigint_callback);
-
-#ifdef DEBUG
-  sciprint("sci_gf_scilab: fname = %s - calling call_getfem_interface with %s\n",fname, &fname[3]);
-#endif
-
-  out = call_getfem_interface(&fname[3], *in, Lhs);
-
-  // We now remove all the allocated memory for the input parameters
-  // This memory is allocated in gfm_common.c
-  if (in) 
-    {
-      for(i=0;i<in->arg.arg_len;i++)
-	gfi_array_destroy(&in->arg.arg_val[i]);
-      gfi_free(in->arg.arg_val);
-      gfi_free(in); 
-    }
-
-#ifdef DEBUG_TIMER
-  time_end = clock()/CLOCKS_PER_SEC;
-  sciprint("DEBUG_TIMER: after call_getfem_interface: %f\n",(double)(time_end - time_start));
-  time_start = time_end;
-#endif
-
-#ifdef DEBUG
-  sciprint("sci_gf_scilab: end of call_getfem_interface\n");
-#endif
-
-  remove_custom_sigint(out->status == GFI_STATUS_OK);
-  
-  if (out == NULL) 
-    {
-      sciprint("%s: could not connect to getfem_scilab server...\n",fname);
-      LhsVar(1) = 0;
-    } 
-  else 
-    {
-      if (out->infomsg) 
-	{
-	  sciprint("%s: message:\n%s\n",fname,out->infomsg);
-	}
-      
-      if (out->status == GFI_STATUS_OK) 
-	{
-	  outl = &out->gfi_output_u.output;
-	  for(i=0; i<outl->arg.arg_len; ++i) 
-	    {
-#ifdef DEBUG
-	      sciprint("sci_gf_scilab: processing output argument %d / %d\n", i, outl->arg.arg_len);
-	      sciprint("storage type = %d\n", outl->arg.arg_val[i].storage.type);
-	      sciprint("output position: LhsVar(%d) = %d\n", i+1, Rhs+1+i);
-#endif
-	      sci_x = gfi_array_to_sci_array(&outl->arg.arg_val[i],Rhs+1+i);
-	      LhsVar(i+1) = Rhs+1+i;
-	      if (&outl->arg.arg_val[i]) gfi_array_destroy(&outl->arg.arg_val[i]);
-	    }
-	  
-	  gfi_free(outl->arg.arg_val);
-	} 
-      else 
-	{
-	  Scierror(999,"%s: %s\n", fname,out->gfi_output_u.errmsg);
-	  LhsVar(1) = 0;
-	}
-    }
-
-#ifdef DEBUG_TIMER
-  time_end = clock()/CLOCKS_PER_SEC;
-  sciprint("DEBUG_TIMER: after gfi_array_to_sci_array: %f\n", (double)(time_end - time_start));
-#endif
-
-  if (ptr_param) FREE(ptr_param);
-
-  return 0;
-}
diff --git a/interface/src/scilab/sci_gateway/c/gfm_scilab.cpp b/interface/src/scilab/sci_gateway/c/gfm_scilab.cpp
new file mode 100644
index 0000000..15a1b9d
--- /dev/null
+++ b/interface/src/scilab/sci_gateway/c/gfm_scilab.cpp
@@ -0,0 +1,264 @@
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yann Collette
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+#include <assert.h>
+#include <string.h>
+#include <errno.h>
+#include <stdio.h>
+#include <time.h>
+
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+extern "C" {
+#include <stack-c.h>
+#include <sciprint.h>
+#include <Scierror.h>
+#include <api_scilab.h>
+#include <MALLOC.h>
+}
+
+extern "C" {
+#include "gfm_common.h"
+}
+
+#include "gfi_array.h"
+#include "getfem_interface.h"
+
+#ifndef _MSCVER
+#include "stream_redirect.h"
+#endif
+
+//#define DEBUG_TIMER
+//#define DEBUG
+//#define DEBUG2
+
+extern "C" int handle_getfem_callback();
+extern "C" void set_superlu_callback(int (*cb)());
+
+gfi_output * call_getfem_interface(char *funname, gfi_array_list in, int nlhs)
+{
+  static gfi_output result;
+  gfi_array **pin  = NULL;
+  gfi_array **pout = NULL;
+  char *errmsg = 0, *infomsg = 0;
+  int i;
+
+#ifdef DEBUG2
+  sciprint("call_getfem_interface: len = %d \n",in.arg.arg_len);
+  for(i=0;i<in.arg.arg_len;i++)
+    {
+      sciprint("element %d: \n",i);
+      gfi_array_print(&in.arg.arg_val[i]);
+    }
+#endif
+
+  pin = (gfi_array **)gfi_calloc(in.arg.arg_len, sizeof(gfi_array*));
+  for (i=0; i < in.arg.arg_len; ++i) 
+    {
+      pin[i] = &in.arg.arg_val[i];
+    }
+
+#ifdef DEBUG
+  sciprint("call_getfem_interface: funname = %s len = %d\n",funname, in.arg.arg_len);
+#endif
+
+  errmsg = getfem_interface_main(SCILAB_INTERFACE, funname, in.arg.arg_len, (const gfi_array **)pin, &nlhs, &pout, &infomsg, 1);
+
+#ifdef DEBUG
+  sciprint("call_getfem_interface: end of getfem_interface_main, nlhs = %d infomsg = %s\n",nlhs,infomsg);
+#endif
+
+  result.infomsg = infomsg;
+  if (errmsg) 
+    {
+      result.status = GFI_STATUS_ERROR;
+      result.gfi_output_u.errmsg = errmsg;
+    } 
+  else 
+    {
+      result.status = GFI_STATUS_OK;
+      result.gfi_output_u.output.arg.arg_len = nlhs;
+      result.gfi_output_u.output.arg.arg_val = (gfi_array *)gfi_calloc(nlhs, sizeof(gfi_array));
+      for(i=0; i<nlhs; ++i) 
+	{
+	  assert(pout[i]);
+	  result.gfi_output_u.output.arg.arg_val[i] = *pout[i];
+	  gfi_free(pout[i]);
+	}
+      if (pout) gfi_free(pout);
+    }
+  gfi_free(pin);
+
+  return &result;
+}
+
+char *current_scilab_function = NULL;
+
+void sigint_callback(int sig) 
+{
+  const char * s = current_scilab_function; if (!s) s = "doh!!";
+  fprintf(stderr, "*** CTRL-C hit during execution of the getfem_scilab function: gf_%s...\n" \
+	  "You will gain control as soon as the current operation is finished ***\n" \
+	  "If you want to abort immediatly the current operation, hit CTRL-C again\n" \
+	  "In that case, you will have to restart getfem_scilab:\n", s);
+  set_cancel_flag(1);
+  assert(handle_getfem_callback() == 1);
+}
+
+extern "C" int sci_gf_scilab(char * fname) 
+{
+  gfi_output     * out  = NULL;
+  gfi_array_list * in   = NULL;
+  gfi_array_list * outl = NULL;
+  int ** ptr_param = NULL;
+  int sci_x;
+  unsigned int i;
+  SciErr _SciErr;
+#ifdef DEBUG_TIMER
+  clock_t time_start, time_end;
+#endif
+#ifndef _MSCVER
+  ScilabStream scicout(std::cout);
+  ScilabStream scicerr(std::cerr);
+#endif
+  set_cancel_flag(0);
+  set_superlu_callback(is_cancel_flag_set);
+  
+#ifdef DEBUG
+  sciprint("sci_gf_scilab: Rhs = %d Lhs = %d\n", Rhs, Lhs);
+#endif
+
+  ptr_param = (int **)MALLOC((Rhs+1)*sizeof(int *));
+  for(i=1;i<=Rhs;i++)
+    {
+#ifdef DEBUG
+      sciprint("sci_gf_scilab: i = %d Rhs = %d\n", i, Rhs);
+#endif
+      _SciErr = getVarAddressFromPosition(pvApiCtx,i,ptr_param+i);
+#ifdef DEBUG
+      _SciErr = getVarDimension(pvApiCtx,ptr_param[i],&pirow,&picol);
+      _SciErr = getVarType(pvApiCtx,ptr_param[i],&var_type);
+      sciprint("sci_gf_scilab: position %d - address %d - type %d - dimension %d %d\n", i, ptr_param[i],var_type,pirow,picol);
+#endif
+    }
+
+#ifdef DEBUG
+      sciprint("sci_gf_scilab: list of parameters built\n", i, Rhs);
+#endif
+
+#ifdef DEBUG_TIMER
+  sciprint("DEBUG_TIMER: before build_gfi_array_list\n");
+  time_start = clock()/CLOCKS_PER_SEC;
+#endif
+    
+  in = build_gfi_array_list(Rhs, ptr_param);
+
+#ifdef DEBUG_TIMER
+  time_end = clock()/CLOCKS_PER_SEC;
+  sciprint("DEBUG_TIMER: after build_gfi_array_list: %f\n", (double)(time_end - time_start));
+  time_start = time_end;
+#endif
+
+  if (!in) 
+    {
+      Scierror(999,"%s: a problem occured while reading arguments.\n",fname);
+      return 0;
+    }
+#ifdef DEBUG
+  sciprint("sci_gf_scilab: end of build_gfi_array_list\n");
+#endif
+
+  install_custom_sigint(sigint_callback);
+
+#ifdef DEBUG
+  sciprint("sci_gf_scilab: fname = %s - calling call_getfem_interface with %s\n",fname, &fname[3]);
+#endif
+
+  out = call_getfem_interface(&fname[3], *in, Lhs);
+
+  // We now remove all the allocated memory for the input parameters
+  // This memory is allocated in gfm_common.c
+  if (in) 
+    {
+      for(i=0;i<in->arg.arg_len;i++)
+	gfi_array_destroy(&in->arg.arg_val[i]);
+      gfi_free(in->arg.arg_val);
+      gfi_free(in); 
+    }
+
+#ifdef DEBUG_TIMER
+  time_end = clock()/CLOCKS_PER_SEC;
+  sciprint("DEBUG_TIMER: after call_getfem_interface: %f\n",(double)(time_end - time_start));
+  time_start = time_end;
+#endif
+
+#ifdef DEBUG
+  sciprint("sci_gf_scilab: end of call_getfem_interface\n");
+#endif
+
+  remove_custom_sigint(out->status == GFI_STATUS_OK);
+  
+  if (out == NULL) 
+    {
+      sciprint("%s: could not connect to getfem_scilab server...\n",fname);
+      LhsVar(1) = 0;
+    } 
+  else 
+    {
+      if (out->infomsg) 
+	{
+	  sciprint("%s: message:\n%s\n",fname,out->infomsg);
+	}
+      
+      if (out->status == GFI_STATUS_OK) 
+	{
+	  outl = &out->gfi_output_u.output;
+	  for(i=0; i<outl->arg.arg_len; ++i) 
+	    {
+#ifdef DEBUG
+	      sciprint("sci_gf_scilab: processing output argument %d / %d\n", i, outl->arg.arg_len);
+	      sciprint("storage type = %d\n", outl->arg.arg_val[i].storage.type);
+	      sciprint("output position: LhsVar(%d) = %d\n", i+1, Rhs+1+i);
+#endif
+	      sci_x = gfi_array_to_sci_array(&outl->arg.arg_val[i],Rhs+1+i);
+	      LhsVar(i+1) = Rhs+1+i;
+	      if (&outl->arg.arg_val[i]) gfi_array_destroy(&outl->arg.arg_val[i]);
+	    }
+	  
+	  gfi_free(outl->arg.arg_val);
+	} 
+      else 
+	{
+	  Scierror(999,"%s: %s\n", fname,out->gfi_output_u.errmsg);
+	  LhsVar(1) = 0;
+	}
+    }
+
+#ifdef DEBUG_TIMER
+  time_end = clock()/CLOCKS_PER_SEC;
+  sciprint("DEBUG_TIMER: after gfi_array_to_sci_array: %f\n", (double)(time_end - time_start));
+#endif
+
+  if (ptr_param) FREE(ptr_param);
+
+  return 0;
+}
diff --git a/interface/src/scilab/sci_gateway/c/libscigetfem_c.c b/interface/src/scilab/sci_gateway/c/libscigetfem_c.c
index d9e79ae..965f0e3 100644
--- a/interface/src/scilab/sci_gateway/c/libscigetfem_c.c
+++ b/interface/src/scilab/sci_gateway/c/libscigetfem_c.c
@@ -1,6 +1,7 @@
 #include <mex.h> 
 #include <sci_gateway.h>
 #include <api_scilab.h>
+#include <MALLOC.h>
 static int direct_gateway(char *fname,void F(void)) { F();return 0;};
 extern Gatefunc sci_gf_scilab;
 extern Gatefunc sci_gf_scilab;
@@ -51,6 +52,11 @@ extern Gatefunc sci_gf_scilab;
 extern Gatefunc sci_gf_scilab;
 extern Gatefunc sci_gf_scilab;
 extern Gatefunc sci_gf_scilab;
+extern Gatefunc sci_gf_scilab;
+extern Gatefunc sci_gf_scilab;
+extern Gatefunc sci_gf_scilab;
+extern Gatefunc sci_gf_scilab;
+extern Gatefunc sci_gf_scilab;
 extern Gatefunc sci_spluinc;
 extern Gatefunc sci_splu;
 extern Gatefunc sci_splusolve;
@@ -62,21 +68,30 @@ extern Gatefunc sci_spcgs;
 extern Gatefunc sci_spgmres;
 extern Gatefunc sci_spmgcr;
 static GenericTable Tab[]={
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_util"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_cvstruct_get"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_workspace"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_delete"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_undelete"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_eltm"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_geotrans"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_geotrans_get"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_compute"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_integ"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_integ_get"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_global_function"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_global_function_get"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_fem"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_fem_get"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_cvstruct_get"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesher_object"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesher_object_get"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_get"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_set"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_fem"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_fem_set"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_fem_get"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_fem_set"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_im"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_im_set"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_im_get"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_eltm"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_set"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_get"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_im_set"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mdbrick"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mdbrick_get"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mdbrick_set"},
@@ -95,22 +110,18 @@ static GenericTable Tab[]={
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_levelset"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_levelset_get"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_levelset_set"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_asm"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_compute"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_precond"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_precond_get"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_linsolve"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_spmat"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_spmat_set"},
   {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_spmat_get"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_asm"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_fem"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_fem_get"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_integ"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_integ_get"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_workspace"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_delete"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_undelete"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_global_function"},
-  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_global_function_get"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_spmat_set"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_linsolve"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_util"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_exit"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_cont_struct_get"},
+  {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_cont_struct"},
   {(Myinterfun)sci_gateway,sci_spluinc,"sp_luinc"},
   {(Myinterfun)sci_gateway,sci_splu,"sp_lu"},
   {(Myinterfun)sci_gateway,sci_splusolve,"sp_lusolve"},
@@ -128,6 +139,10 @@ int C2F(libscigetfem_c)()
   Rhs = Max(0, Rhs);
   if (*(Tab[Fin-1].f) != NULL) 
   {
+     if(pvApiCtx == NULL)
+     {
+       pvApiCtx = (StrCtx*)MALLOC(sizeof(StrCtx));
+     }
      pvApiCtx->pstName = (char*)Tab[Fin-1].name;
     (*(Tab[Fin-1].f))(Tab[Fin-1].name,Tab[Fin-1].F);
   }
diff --git a/interface/src/scilab/sci_gateway/c/loader.sce b/interface/src/scilab/sci_gateway/c/loader.sce
index 5a06390..7ae366c 100644
--- a/interface/src/scilab/sci_gateway/c/loader.sce
+++ b/interface/src/scilab/sci_gateway/c/loader.sce
@@ -1,71 +1,85 @@
-// This file is released into the public domain
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
 // Generated by builder.sce : Please, do not edit this file
+// ----------------------------------------------------------------------------
 //
-libscigetfem_c_path = get_file_path('loader.sce');
-link(libscigetfem_c_path+'/../../src/c/libsp_get.so');
-list_functions = [             'gf_util';
-            'gf_cvstruct_get';
-            'gf_geotrans';
-            'gf_geotrans_get';
-            'gf_compute';
-            'gf_mesh_fem';
-            'gf_mesh_fem_set';
-            'gf_mesh_fem_get';
-            'gf_mesh_im';
-            'gf_mesh_im_set';
-            'gf_mesh_im_get';
-            'gf_eltm';
-            'gf_mesh';
-            'gf_mesh_set';
-            'gf_mesh_get';
-            'gf_mdbrick';
-            'gf_mdbrick_get';
-            'gf_mdbrick_set';
-            'gf_mdstate';
-            'gf_mdstate_get';
-            'gf_mdstate_set';
-            'gf_model';
-            'gf_model_get';
-            'gf_model_set';
-            'gf_slice';
-            'gf_slice_get';
-            'gf_slice_set';
-            'gf_levelset';
-            'gf_levelset_get';
-            'gf_levelset_set';
-            'gf_mesh_levelset';
-            'gf_mesh_levelset_get';
-            'gf_mesh_levelset_set';
-            'gf_precond';
-            'gf_precond_get';
-            'gf_linsolve';
-            'gf_spmat';
-            'gf_spmat_set';
-            'gf_spmat_get';
-            'gf_asm';
-            'gf_fem';
-            'gf_fem_get';
-            'gf_integ';
-            'gf_integ_get';
-            'gf_workspace';
-            'gf_delete';
-            'gf_undelete';
-            'gf_global_function';
-            'gf_global_function_get';
-            'sp_luinc';
-            'sp_lu';
-            'sp_lusolve';
-            'sp_cholinc';
-            'sp_chol';
-            'sp_chsolve';
-            'sp_cgne';
-            'sp_cgs';
-            'sp_gmres';
-            'sp_mgcr';
+libscigetfem_c_path = get_absolute_file_path('loader.sce');
+//
+// ulink previous function with same name
+[bOK, ilib] = c_link('libscigetfem_c');
+if bOK then
+  ulink(ilib);
+end
+//
+link(libscigetfem_c_path + filesep() + '../../src/c/libsp_get' + getdynlibext());
+list_functions = [ 'gf_workspace';
+                   'gf_delete';
+                   'gf_undelete';
+                   'gf_eltm';
+                   'gf_geotrans';
+                   'gf_geotrans_get';
+                   'gf_integ';
+                   'gf_integ_get';
+                   'gf_global_function';
+                   'gf_global_function_get';
+                   'gf_fem';
+                   'gf_fem_get';
+                   'gf_cvstruct_get';
+                   'gf_mesher_object';
+                   'gf_mesher_object_get';
+                   'gf_mesh';
+                   'gf_mesh_get';
+                   'gf_mesh_set';
+                   'gf_mesh_fem';
+                   'gf_mesh_fem_get';
+                   'gf_mesh_fem_set';
+                   'gf_mesh_im';
+                   'gf_mesh_im_get';
+                   'gf_mesh_im_set';
+                   'gf_mdbrick';
+                   'gf_mdbrick_get';
+                   'gf_mdbrick_set';
+                   'gf_mdstate';
+                   'gf_mdstate_get';
+                   'gf_mdstate_set';
+                   'gf_model';
+                   'gf_model_get';
+                   'gf_model_set';
+                   'gf_slice';
+                   'gf_slice_get';
+                   'gf_slice_set';
+                   'gf_levelset';
+                   'gf_levelset_get';
+                   'gf_levelset_set';
+                   'gf_mesh_levelset';
+                   'gf_mesh_levelset_get';
+                   'gf_mesh_levelset_set';
+                   'gf_asm';
+                   'gf_compute';
+                   'gf_precond';
+                   'gf_precond_get';
+                   'gf_spmat';
+                   'gf_spmat_get';
+                   'gf_spmat_set';
+                   'gf_linsolve';
+                   'gf_util';
+                   'gf_exit';
+                   'gf_cont_struct_get';
+                   'gf_cont_struct';
+                   'sp_luinc';
+                   'sp_lu';
+                   'sp_lusolve';
+                   'sp_cholinc';
+                   'sp_chol';
+                   'sp_chsolve';
+                   'sp_cgne';
+                   'sp_cgs';
+                   'sp_gmres';
+                   'sp_mgcr';
 ];
-addinter(libscigetfem_c_path+'/libscigetfem_c.so','libscigetfem_c',list_functions);
+addinter(libscigetfem_c_path + filesep() + 'libscigetfem_c' + getdynlibext(), 'libscigetfem_c', list_functions);
 // remove temp. variables on stack
 clear libscigetfem_c_path;
+clear bOK;
+clear ilib;
 clear list_functions;
-clear get_file_path;
-// ------------------------------------------------------
+// ----------------------------------------------------------------------------
diff --git a/interface/src/scilab/sci_gateway/c/sci_cgne.c b/interface/src/scilab/sci_gateway/c/sci_cgne.c
index f636c5f..c354d57 100644
--- a/interface/src/scilab/sci_gateway/c/sci_cgne.c
+++ b/interface/src/scilab/sci_gateway/c/sci_cgne.c
@@ -1,16 +1,36 @@
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yann Collette
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <stdio.h>
 
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+#include <api_scilab.h>
 #include <MALLOC.h>
 #include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
 
 #include <sparse2.h>
 #include <iter.h>
 #include <err.h>
 
-#define DEBUG
+//#define DEBUG
 
 // x = cgs(A,b)
 // cgs(A,b,tol)
@@ -40,49 +60,48 @@
 int sci_spcgne(char * fname)
 {
   // [x,[iter]] = pmgcr(A,b,tol,[maxit,[k,[B,[x0]]]])
-  int * A_pi_address, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row, * A_pi_col_pos;
-  double * A_pdbl_real;
-  int * B_pi_address, B_pi_nb_rows, B_pi_nb_cols, B_pi_nb_items, * B_pi_nb_items_row, * B_pi_col_pos;
-  double * B_pdbl_real;
-  int * b_pi_address, b_pi_nb_rows, b_pi_nb_cols;
-  double * b_pdbl_real;
-  int * tol_pi_address, tol_pi_nb_rows, tol_pi_nb_cols;
-  double * tol_pdbl_real;
-  int * maxit_pi_address, maxit_pi_nb_rows, maxit_pi_nb_cols;
-  double * maxit_pdbl_real;
-  int * x0_pi_address, x0_pi_nb_rows, x0_pi_nb_cols;
-  double * x0_pdbl_real;
-  int * xsol_pi_address, xsol_pi_nb_rows, xsol_pi_nb_cols;
-  double * xsol_pdbl_real;
-  int * iter_pi_address, iter_pi_nb_rows, iter_pi_nb_cols;
-  double * iter_pdbl_real;
+  int * A_pi_address = NULL, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row = NULL, * A_pi_col_pos = NULL;
+  double * A_pdbl_real = NULL;
+  int * B_pi_address = NULL, B_pi_nb_rows, B_pi_nb_cols, B_pi_nb_items, * B_pi_nb_items_row = NULL, * B_pi_col_pos = NULL;
+  double * B_pdbl_real = NULL;
+  int * b_pi_address = NULL, b_pi_nb_rows, b_pi_nb_cols;
+  double * b_pdbl_real = NULL;
+  int * tol_pi_address = NULL, tol_pi_nb_rows, tol_pi_nb_cols;
+  double * tol_pdbl_real = NULL;
+  int * maxit_pi_address = NULL, maxit_pi_nb_rows, maxit_pi_nb_cols;
+  double * maxit_pdbl_real = NULL;
+  int * x0_pi_address = NULL, x0_pi_nb_rows, x0_pi_nb_cols;
+  double * x0_pdbl_real = NULL;
+  int xsol_pi_nb_rows, xsol_pi_nb_cols;
+  double * xsol_pdbl_real = NULL;
+  int iter_pi_nb_rows, iter_pi_nb_cols;
+  double * iter_pdbl_real = NULL;
   SciErr _SciErr;
-  StrCtx _StrCtx;
   int var_type;
   SPMAT  * A = NULL, * B = NULL;
   VEC * b = NULL, * x0 = NULL, * xsol = NULL;
-  int Index, steps, i, j, k;
+  int Index, steps, i, j;
 
   CheckRhs(3,7);
   CheckLhs(1,2);
 
   // Get A
-  _SciErr = getVarAddressFromPosition(&_StrCtx,1,&A_pi_address);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,1,&A_pi_address);
 
-  _SciErr = getVarType(&_StrCtx,A_pi_address,&var_type);
+  _SciErr = getVarType(pvApiCtx,A_pi_address,&var_type);
   if (var_type!=sci_sparse)
     {
       Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
       return 0;
     }
 
-  if (isVarComplex(&_StrCtx,A_pi_address))
+  if (isVarComplex(pvApiCtx,A_pi_address))
     {
       Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
       return 0;
     }
 
-  _SciErr = getSparseMatrix(&_StrCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols, 
+  _SciErr = getSparseMatrix(pvApiCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols, 
 			    &A_pi_nb_items, &A_pi_nb_items_row, &A_pi_col_pos, &A_pdbl_real);
 
   // Convert Scilab sparse into SPMAT
@@ -98,8 +117,8 @@ int sci_spcgne(char * fname)
     }
 
   // Get b
-  _SciErr = getVarAddressFromPosition(&_StrCtx,2,&b_pi_address);
-  _SciErr = getMatrixOfDouble(&_StrCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,2,&b_pi_address);
+  _SciErr = getMatrixOfDouble(pvApiCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
 
   // Convert Scilab vector into VEC
   b  = v_get(b_pi_nb_rows);
@@ -109,34 +128,34 @@ int sci_spcgne(char * fname)
     }
 
   // Get tol
-  _SciErr = getVarAddressFromPosition(&_StrCtx,3,&tol_pi_address);
-  _SciErr = getMatrixOfDouble(&_StrCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,3,&tol_pi_address);
+  _SciErr = getMatrixOfDouble(pvApiCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
 
    // Get optional maxit
   if (Rhs>=4)
     {
-      _SciErr = getVarAddressFromPosition(&_StrCtx,4,&maxit_pi_address);
-      _SciErr = getMatrixOfDouble(&_StrCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,4,&maxit_pi_address);
+      _SciErr = getMatrixOfDouble(pvApiCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
     }
 
   // Get optional B
   if (Rhs>=5)
     {
-      _SciErr = getVarAddressFromPosition(&_StrCtx,5,&B_pi_address);
-      _SciErr = getVarType(&_StrCtx,B_pi_address,&var_type);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,5,&B_pi_address);
+      _SciErr = getVarType(pvApiCtx,B_pi_address,&var_type);
       if (var_type!=sci_sparse)
 	{
 	  Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
 	  return 0;
 	}
       
-      if (isVarComplex(&_StrCtx,B_pi_address))
+      if (isVarComplex(pvApiCtx,B_pi_address))
 	{
 	  Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
 	  return 0;
 	}
 
-      _SciErr = getSparseMatrix(&_StrCtx,B_pi_address, &B_pi_nb_rows, &B_pi_nb_cols, 
+      _SciErr = getSparseMatrix(pvApiCtx,B_pi_address, &B_pi_nb_rows, &B_pi_nb_cols, 
 				&B_pi_nb_items, &B_pi_nb_items_row, &B_pi_col_pos, &B_pdbl_real);
 
       // Convert SPMAT into Scilab sparse
@@ -155,8 +174,8 @@ int sci_spcgne(char * fname)
   // Get optional x0
   if (Rhs>=6)
     {
-      _SciErr = getVarAddressFromPosition(&_StrCtx,6,&x0_pi_address);
-      _SciErr = getMatrixOfDouble(&_StrCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,6,&x0_pi_address);
+      _SciErr = getMatrixOfDouble(pvApiCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
 
       // Convert Scilab vector into VEC
       x0 = v_get(x0_pi_nb_rows);
@@ -176,7 +195,7 @@ int sci_spcgne(char * fname)
   memcpy(xsol_pdbl_real,xsol->ve,b_pi_nb_rows*sizeof(double));
   xsol_pi_nb_rows = b_pi_nb_rows;
   xsol_pi_nb_cols = 1;
-  _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
+  _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
   if (xsol_pdbl_real) FREE(xsol_pdbl_real);
 
   LhsVar(1) = Rhs+1;
@@ -187,7 +206,7 @@ int sci_spcgne(char * fname)
       *iter_pdbl_real = (double)steps;
       iter_pi_nb_rows = 1;
       iter_pi_nb_cols = 1;
-      _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
+      _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
       if (iter_pdbl_real) FREE(iter_pdbl_real);
 
       LhsVar(2) = Rhs+2;
diff --git a/interface/src/scilab/sci_gateway/c/sci_cgs.c b/interface/src/scilab/sci_gateway/c/sci_cgs.c
index 8c0e4c0..94995ad 100644
--- a/interface/src/scilab/sci_gateway/c/sci_cgs.c
+++ b/interface/src/scilab/sci_gateway/c/sci_cgs.c
@@ -1,16 +1,37 @@
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yann Collette
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
 #include <stdio.h>
 
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+#include <api_scilab.h>
 #include <MALLOC.h>
 #include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
 
 #include <sparse2.h>
 #include <iter.h>
 #include <err.h>
 
-#define DEBUG
+//#define DEBUG
 
 // x = cgs(A,b)
 // cgs(A,b,tol)
@@ -40,26 +61,25 @@
 int sci_spcgs(char * fname)
 {
   // [x,flag,[relres,[iter,[resvec]]]] = cgs(A,b,tol,[maxit,[M,[x0]]])
-  int * A_pi_address, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row, * A_pi_col_pos;
-  double * A_pdbl_real;
-  int * b_pi_address, b_pi_nb_rows, b_pi_nb_cols;
-  double * b_pdbl_real;
-  int * tol_pi_address, tol_pi_nb_rows, tol_pi_nb_cols;
-  double * tol_pdbl_real;
-  int * maxit_pi_address, maxit_pi_nb_rows, maxit_pi_nb_cols;
-  double * maxit_pdbl_real;
-  int * M_pi_address, M_pi_nb_rows, M_pi_nb_cols, M_pi_nb_items, * M_pi_nb_items_row, * M_pi_col_pos;
-  double * M_pdbl_real;
-  int * x0_pi_address, x0_pi_nb_rows, x0_pi_nb_cols;
-  double * x0_pdbl_real;
-  int * xsol_pi_address, xsol_pi_nb_rows, xsol_pi_nb_cols;
-  double * xsol_pdbl_real;
-  int * iter_pi_address, iter_pi_nb_rows, iter_pi_nb_cols;
-  double * iter_pdbl_real;
-  int * resvec_pi_address, resvec_pi_nb_rows, resvec_pi_nb_cols;
-  double * resvec_pdbl_real;
+  int * A_pi_address = NULL, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row = NULL, * A_pi_col_pos = NULL;
+  double * A_pdbl_real = NULL;
+  int * b_pi_address = NULL, b_pi_nb_rows, b_pi_nb_cols;
+  double * b_pdbl_real = NULL;
+  int * tol_pi_address = NULL, tol_pi_nb_rows, tol_pi_nb_cols;
+  double * tol_pdbl_real = NULL;
+  int * maxit_pi_address = NULL, maxit_pi_nb_rows, maxit_pi_nb_cols;
+  double * maxit_pdbl_real = NULL;
+  int * M_pi_address = NULL, M_pi_nb_rows, M_pi_nb_cols, M_pi_nb_items, * M_pi_nb_items_row = NULL, * M_pi_col_pos = NULL;
+  double * M_pdbl_real = NULL;
+  int * x0_pi_address = NULL, x0_pi_nb_rows, x0_pi_nb_cols;
+  double * x0_pdbl_real = NULL;
+  int xsol_pi_nb_rows, xsol_pi_nb_cols;
+  double * xsol_pdbl_real = NULL;
+  int iter_pi_nb_rows, iter_pi_nb_cols;
+  double * iter_pdbl_real = NULL;
+  int resvec_pi_nb_rows, resvec_pi_nb_cols;
+  double * resvec_pdbl_real = NULL;
   SciErr _SciErr;
-  StrCtx _StrCtx;
   int var_type;
   SPMAT  * A = NULL;
   VEC * b = NULL, * x0 = NULL, * r0 = NULL, * xsol = NULL;
@@ -70,22 +90,22 @@ int sci_spcgs(char * fname)
   CheckLhs(1,5);
 
   // Get A
-  _SciErr = getVarAddressFromPosition(&_StrCtx,1,&A_pi_address);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,1,&A_pi_address);
 
-  _SciErr = getVarType(&_StrCtx,A_pi_address,&var_type);
+  _SciErr = getVarType(pvApiCtx,A_pi_address,&var_type);
   if (var_type!=sci_sparse)
     {
       Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
       return 0;
     }
 
-  if (isVarComplex(&_StrCtx,A_pi_address))
+  if (isVarComplex(pvApiCtx,A_pi_address))
     {
       Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
       return 0;
     }
 
-  _SciErr = getSparseMatrix(&_StrCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols, 
+  _SciErr = getSparseMatrix(pvApiCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols, 
 			    &A_pi_nb_items, &A_pi_nb_items_row, &A_pi_col_pos, &A_pdbl_real);
 
   // Convert Scilab sparse into SPMAT
@@ -101,8 +121,8 @@ int sci_spcgs(char * fname)
     }
 
   // Get b
-  _SciErr = getVarAddressFromPosition(&_StrCtx,2,&b_pi_address);
-  _SciErr = getMatrixOfDouble(&_StrCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,2,&b_pi_address);
+  _SciErr = getMatrixOfDouble(pvApiCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
 
   // Convert Scilab vector into VEC
   b  = v_get(b_pi_nb_rows);
@@ -114,34 +134,34 @@ int sci_spcgs(char * fname)
     }
 
   // Get tol
-  _SciErr = getVarAddressFromPosition(&_StrCtx,3,&tol_pi_address);
-  _SciErr = getMatrixOfDouble(&_StrCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,3,&tol_pi_address);
+  _SciErr = getMatrixOfDouble(pvApiCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
 
   // Get optional maxit
   if (Rhs>=4)
     {
-      _SciErr = getVarAddressFromPosition(&_StrCtx,4,&maxit_pi_address);
-      _SciErr = getMatrixOfDouble(&_StrCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,4,&maxit_pi_address);
+      _SciErr = getMatrixOfDouble(pvApiCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
     }
 
   // Get optional M
   if (Rhs>=5)
     {
-      _SciErr = getVarAddressFromPosition(&_StrCtx,5,&M_pi_address);
-      _SciErr = getVarType(&_StrCtx,M_pi_address,&var_type);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,5,&M_pi_address);
+      _SciErr = getVarType(pvApiCtx,M_pi_address,&var_type);
       if (var_type!=sci_sparse)
 	{
 	  Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
 	  return 0;
 	}
       
-      if (isVarComplex(&_StrCtx,M_pi_address))
+      if (isVarComplex(pvApiCtx,M_pi_address))
 	{
 	  Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
 	  return 0;
 	}
 
-      _SciErr = getSparseMatrix(&_StrCtx,M_pi_address, &M_pi_nb_rows, &M_pi_nb_cols, 
+      _SciErr = getSparseMatrix(pvApiCtx,M_pi_address, &M_pi_nb_rows, &M_pi_nb_cols, 
 				&M_pi_nb_items, &M_pi_nb_items_row, &M_pi_col_pos, &M_pdbl_real);
 
       // Convert SPMAT into Scilab sparse
@@ -160,8 +180,8 @@ int sci_spcgs(char * fname)
   // Get optional x0
   if (Rhs>=6)
     {
-      _SciErr = getVarAddressFromPosition(&_StrCtx,6,&x0_pi_address);
-      _SciErr = getMatrixOfDouble(&_StrCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,6,&x0_pi_address);
+      _SciErr = getMatrixOfDouble(pvApiCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
 
       // Convert Scilab vector into VEC
       x0 = v_get(x0_pi_nb_rows);
@@ -180,6 +200,7 @@ int sci_spcgs(char * fname)
     }
 
   // call iter_spcgs method.
+
   catchall(xsol = iter_spcgs(A, M, b, r0, *tol_pdbl_real, x0, (int)*maxit_pdbl_real, &steps),
   	   Scierror(999,"%s: an error (%d) occured.\n",fname,_err_num); return 0);
 
@@ -188,7 +209,7 @@ int sci_spcgs(char * fname)
   memcpy(xsol_pdbl_real,xsol->ve,b_pi_nb_rows*sizeof(double));
   xsol_pi_nb_rows = b_pi_nb_rows;
   xsol_pi_nb_cols = 1;
-  _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
+  _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
   if (xsol_pdbl_real) FREE(xsol_pdbl_real);
 
   LhsVar(1) = Rhs+1;
@@ -199,7 +220,7 @@ int sci_spcgs(char * fname)
       *iter_pdbl_real = (double)steps;
       iter_pi_nb_rows = 1;
       iter_pi_nb_cols = 1;
-      _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
+      _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
       if (iter_pdbl_real) FREE(iter_pdbl_real);
 
       LhsVar(2) = Rhs+2;
@@ -211,7 +232,7 @@ int sci_spcgs(char * fname)
       memcpy(resvec_pdbl_real,r0->ve,b_pi_nb_rows*sizeof(double));
       resvec_pi_nb_rows = b_pi_nb_rows;
       resvec_pi_nb_cols = 1;
-      _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+3, resvec_pi_nb_rows, resvec_pi_nb_cols, resvec_pdbl_real);
+      _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+3, resvec_pi_nb_rows, resvec_pi_nb_cols, resvec_pdbl_real);
       if (resvec_pdbl_real) FREE(resvec_pdbl_real);
 
       LhsVar(3) = Rhs+3;
diff --git a/interface/src/scilab/sci_gateway/c/sci_gmres.c b/interface/src/scilab/sci_gateway/c/sci_gmres.c
index 2ba0182..f6fe4de 100644
--- a/interface/src/scilab/sci_gateway/c/sci_gmres.c
+++ b/interface/src/scilab/sci_gateway/c/sci_gmres.c
@@ -1,16 +1,37 @@
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yann Collette
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
 #include <stdio.h>
 
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+#include <api_scilab.h>
 #include <MALLOC.h>
 #include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
 
 #include <sparse2.h>
 #include <iter.h>
 #include <err.h>
 
-#define DEBUG
+//#define DEBUG
 
 // x = cgs(A,b)
 // cgs(A,b,tol)
@@ -34,51 +55,50 @@
 int sci_spgmres(char * fname)
 {
   // [x,[iter]] = gmres(A,b,tol,[maxit,[k,[B,[x0]]]])
-  int * A_pi_address, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row, * A_pi_col_pos;
-  double * A_pdbl_real;
-  int * B_pi_address, B_pi_nb_rows, B_pi_nb_cols, B_pi_nb_items, * B_pi_nb_items_row, * B_pi_col_pos;
-  double * B_pdbl_real;
-  int * b_pi_address, b_pi_nb_rows, b_pi_nb_cols;
-  double * b_pdbl_real;
-  int * tol_pi_address, tol_pi_nb_rows, tol_pi_nb_cols;
-  double * tol_pdbl_real;
-  int * maxit_pi_address, maxit_pi_nb_rows, maxit_pi_nb_cols;
-  double * maxit_pdbl_real;
-  int * k_pi_address, k_pi_nb_rows, k_pi_nb_cols;
-  double * k_pdbl_real;
-  int * x0_pi_address, x0_pi_nb_rows, x0_pi_nb_cols;
-  double * x0_pdbl_real;
-  int * xsol_pi_address, xsol_pi_nb_rows, xsol_pi_nb_cols;
-  double * xsol_pdbl_real;
-  int * iter_pi_address, iter_pi_nb_rows, iter_pi_nb_cols;
-  double * iter_pdbl_real;
+  int * A_pi_address = NULL, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row = NULL, * A_pi_col_pos = NULL;
+  double * A_pdbl_real = NULL;
+  int * B_pi_address = NULL, B_pi_nb_rows, B_pi_nb_cols, B_pi_nb_items, * B_pi_nb_items_row = NULL, * B_pi_col_pos = NULL;
+  double * B_pdbl_real = NULL;
+  int * b_pi_address = NULL, b_pi_nb_rows, b_pi_nb_cols;
+  double * b_pdbl_real = NULL;
+  int * tol_pi_address = NULL, tol_pi_nb_rows, tol_pi_nb_cols;
+  double * tol_pdbl_real = NULL;
+  int * maxit_pi_address = NULL, maxit_pi_nb_rows, maxit_pi_nb_cols;
+  double * maxit_pdbl_real = NULL;
+  int * k_pi_address = NULL, k_pi_nb_rows, k_pi_nb_cols;
+  double * k_pdbl_real = NULL;
+  int * x0_pi_address = NULL, x0_pi_nb_rows, x0_pi_nb_cols;
+  double * x0_pdbl_real = NULL;
+  int xsol_pi_nb_rows, xsol_pi_nb_cols;
+  double * xsol_pdbl_real = NULL;
+  int iter_pi_nb_rows, iter_pi_nb_cols;
+  double * iter_pdbl_real = NULL;
   SciErr _SciErr;
-  StrCtx _StrCtx;
   int var_type;
   SPMAT  * A = NULL, * B = NULL;
   VEC * b = NULL, * x0 = NULL, * xsol = NULL;
-  int Index, steps, i, j, k;
+  int Index, steps, i, j, k = 0;
 
   CheckRhs(3,7);
   CheckLhs(1,2);
 
   // Get A
-  _SciErr = getVarAddressFromPosition(&_StrCtx,1,&A_pi_address);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,1,&A_pi_address);
 
-  _SciErr = getVarType(&_StrCtx,A_pi_address,&var_type);
+  _SciErr = getVarType(pvApiCtx,A_pi_address,&var_type);
   if (var_type!=sci_sparse)
     {
       Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
       return 0;
     }
 
-  if (isVarComplex(&_StrCtx,A_pi_address))
+  if (isVarComplex(pvApiCtx,A_pi_address))
     {
       Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
       return 0;
     }
 
-  _SciErr = getSparseMatrix(&_StrCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols, 
+  _SciErr = getSparseMatrix(pvApiCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols, 
 			    &A_pi_nb_items, &A_pi_nb_items_row, &A_pi_col_pos, &A_pdbl_real);
 
   // Convert Scilab sparse into SPMAT
@@ -94,8 +114,8 @@ int sci_spgmres(char * fname)
     }
 
   // Get b
-  _SciErr = getVarAddressFromPosition(&_StrCtx,2,&b_pi_address);
-  _SciErr = getMatrixOfDouble(&_StrCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,2,&b_pi_address);
+  _SciErr = getMatrixOfDouble(pvApiCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
 
   // Convert Scilab vector into VEC
   b  = v_get(b_pi_nb_rows);
@@ -105,41 +125,41 @@ int sci_spgmres(char * fname)
     }
 
   // Get tol
-  _SciErr = getVarAddressFromPosition(&_StrCtx,3,&tol_pi_address);
-  _SciErr = getMatrixOfDouble(&_StrCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,3,&tol_pi_address);
+  _SciErr = getMatrixOfDouble(pvApiCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
 
    // Get optional maxit
   if (Rhs>=4)
     {
-      _SciErr = getVarAddressFromPosition(&_StrCtx,4,&maxit_pi_address);
-      _SciErr = getMatrixOfDouble(&_StrCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,4,&maxit_pi_address);
+      _SciErr = getMatrixOfDouble(pvApiCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
     }
 
    // Get optional k
   if (Rhs>=5)
     {
-      _SciErr = getVarAddressFromPosition(&_StrCtx,5,&k_pi_address);
-      _SciErr = getMatrixOfDouble(&_StrCtx,k_pi_address, &k_pi_nb_rows, &k_pi_nb_cols, &k_pdbl_real);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,5,&k_pi_address);
+      _SciErr = getMatrixOfDouble(pvApiCtx,k_pi_address, &k_pi_nb_rows, &k_pi_nb_cols, &k_pdbl_real);
     }
 
   // Get optional B
   if (Rhs>=5)
     {
-      _SciErr = getVarAddressFromPosition(&_StrCtx,5,&B_pi_address);
-      _SciErr = getVarType(&_StrCtx,B_pi_address,&var_type);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,5,&B_pi_address);
+      _SciErr = getVarType(pvApiCtx,B_pi_address,&var_type);
       if (var_type!=sci_sparse)
 	{
 	  Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
 	  return 0;
 	}
       
-      if (isVarComplex(&_StrCtx,B_pi_address))
+      if (isVarComplex(pvApiCtx,B_pi_address))
 	{
 	  Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
 	  return 0;
 	}
 
-      _SciErr = getSparseMatrix(&_StrCtx,B_pi_address, &B_pi_nb_rows, &B_pi_nb_cols, 
+      _SciErr = getSparseMatrix(pvApiCtx,B_pi_address, &B_pi_nb_rows, &B_pi_nb_cols, 
 				&B_pi_nb_items, &B_pi_nb_items_row, &B_pi_col_pos, &B_pdbl_real);
 
       // Convert SPMAT into Scilab sparse
@@ -158,8 +178,8 @@ int sci_spgmres(char * fname)
   // Get optional x0
   if (Rhs>=6)
     {
-      _SciErr = getVarAddressFromPosition(&_StrCtx,6,&x0_pi_address);
-      _SciErr = getMatrixOfDouble(&_StrCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,6,&x0_pi_address);
+      _SciErr = getMatrixOfDouble(pvApiCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
 
       // Convert Scilab vector into VEC
       x0 = v_get(x0_pi_nb_rows);
@@ -179,7 +199,7 @@ int sci_spgmres(char * fname)
   memcpy(xsol_pdbl_real,xsol->ve,b_pi_nb_rows*sizeof(double));
   xsol_pi_nb_rows = b_pi_nb_rows;
   xsol_pi_nb_cols = 1;
-  _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
+  _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
   if (xsol_pdbl_real) FREE(xsol_pdbl_real);
 
   LhsVar(1) = Rhs+1;
@@ -190,7 +210,7 @@ int sci_spgmres(char * fname)
       *iter_pdbl_real = (double)steps;
       iter_pi_nb_rows = 1;
       iter_pi_nb_cols = 1;
-      _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
+      _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
       if (iter_pdbl_real) FREE(iter_pdbl_real);
 
       LhsVar(2) = Rhs+2;
diff --git a/interface/src/scilab/sci_gateway/c/sci_mgcr.c b/interface/src/scilab/sci_gateway/c/sci_mgcr.c
index c975490..a1457ae 100644
--- a/interface/src/scilab/sci_gateway/c/sci_mgcr.c
+++ b/interface/src/scilab/sci_gateway/c/sci_mgcr.c
@@ -1,16 +1,37 @@
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yann Collette
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
 #include <stdio.h>
 
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+#include <api_scilab.h>
 #include <MALLOC.h>
 #include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
 
 #include <sparse2.h>
 #include <iter.h>
 #include <err.h>
 
-#define DEBUG
+//#define DEBUG
 
 // x = cgs(A,b)
 // cgs(A,b,tol)
@@ -34,51 +55,50 @@
 int sci_spmgcr(char * fname)
 {
   // [x,[iter]] = pmgcr(A,b,tol,[maxit,[k,[B,[x0]]]])
-  int * A_pi_address, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row, * A_pi_col_pos;
-  double * A_pdbl_real;
-  int * B_pi_address, B_pi_nb_rows, B_pi_nb_cols, B_pi_nb_items, * B_pi_nb_items_row, * B_pi_col_pos;
-  double * B_pdbl_real;
-  int * b_pi_address, b_pi_nb_rows, b_pi_nb_cols;
-  double * b_pdbl_real;
-  int * tol_pi_address, tol_pi_nb_rows, tol_pi_nb_cols;
-  double * tol_pdbl_real;
-  int * maxit_pi_address, maxit_pi_nb_rows, maxit_pi_nb_cols;
-  double * maxit_pdbl_real;
-  int * k_pi_address, k_pi_nb_rows, k_pi_nb_cols;
-  double * k_pdbl_real;
-  int * x0_pi_address, x0_pi_nb_rows, x0_pi_nb_cols;
-  double * x0_pdbl_real;
-  int * xsol_pi_address, xsol_pi_nb_rows, xsol_pi_nb_cols;
-  double * xsol_pdbl_real;
-  int * iter_pi_address, iter_pi_nb_rows, iter_pi_nb_cols;
-  double * iter_pdbl_real;
+  int * A_pi_address = NULL, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row = NULL, * A_pi_col_pos = NULL;
+  double * A_pdbl_real = NULL;
+  int * B_pi_address = NULL, B_pi_nb_rows, B_pi_nb_cols, B_pi_nb_items, * B_pi_nb_items_row = NULL, * B_pi_col_pos = NULL;
+  double * B_pdbl_real = NULL;
+  int * b_pi_address = NULL, b_pi_nb_rows, b_pi_nb_cols;
+  double * b_pdbl_real = NULL;
+  int * tol_pi_address = NULL, tol_pi_nb_rows, tol_pi_nb_cols;
+  double * tol_pdbl_real = NULL;
+  int * maxit_pi_address = NULL, maxit_pi_nb_rows, maxit_pi_nb_cols;
+  double * maxit_pdbl_real = NULL;
+  int * k_pi_address = NULL, k_pi_nb_rows, k_pi_nb_cols;
+  double * k_pdbl_real = NULL;
+  int * x0_pi_address = NULL, x0_pi_nb_rows, x0_pi_nb_cols;
+  double * x0_pdbl_real = NULL;
+  int xsol_pi_nb_rows, xsol_pi_nb_cols;
+  double * xsol_pdbl_real = NULL;
+  int iter_pi_nb_rows, iter_pi_nb_cols;
+  double * iter_pdbl_real = NULL;
   SciErr _SciErr;
-  StrCtx _StrCtx;
   int var_type;
   SPMAT  * A = NULL, * B = NULL;
   VEC * b = NULL, * x0 = NULL, * xsol = NULL;
-  int Index, steps, i, j, k;
+  int Index, steps, i, j, k = 0;
 
   CheckRhs(3,7);
   CheckLhs(1,2);
 
   // Get A
-  _SciErr = getVarAddressFromPosition(&_StrCtx,1,&A_pi_address);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,1,&A_pi_address);
 
-  _SciErr = getVarType(&_StrCtx,A_pi_address,&var_type);
+  _SciErr = getVarType(pvApiCtx,A_pi_address,&var_type);
   if (var_type!=sci_sparse)
     {
       Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
       return 0;
     }
 
-  if (isVarComplex(&_StrCtx,A_pi_address))
+  if (isVarComplex(pvApiCtx,A_pi_address))
     {
       Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
       return 0;
     }
 
-  _SciErr = getSparseMatrix(&_StrCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols, 
+  _SciErr = getSparseMatrix(pvApiCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols, 
 			    &A_pi_nb_items, &A_pi_nb_items_row, &A_pi_col_pos, &A_pdbl_real);
 
   // Convert Scilab sparse into SPMAT
@@ -94,8 +114,8 @@ int sci_spmgcr(char * fname)
     }
 
   // Get b
-  _SciErr = getVarAddressFromPosition(&_StrCtx,2,&b_pi_address);
-  _SciErr = getMatrixOfDouble(&_StrCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,2,&b_pi_address);
+  _SciErr = getMatrixOfDouble(pvApiCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
 
   // Convert Scilab vector into VEC
   b  = v_get(b_pi_nb_rows);
@@ -105,41 +125,41 @@ int sci_spmgcr(char * fname)
     }
 
   // Get tol
-  _SciErr = getVarAddressFromPosition(&_StrCtx,3,&tol_pi_address);
-  _SciErr = getMatrixOfDouble(&_StrCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,3,&tol_pi_address);
+  _SciErr = getMatrixOfDouble(pvApiCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
 
    // Get optional maxit
   if (Rhs>=4)
     {
-      _SciErr = getVarAddressFromPosition(&_StrCtx,4,&maxit_pi_address);
-      _SciErr = getMatrixOfDouble(&_StrCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,4,&maxit_pi_address);
+      _SciErr = getMatrixOfDouble(pvApiCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
     }
 
    // Get optional k
   if (Rhs>=5)
     {
-      _SciErr = getVarAddressFromPosition(&_StrCtx,5,&k_pi_address);
-      _SciErr = getMatrixOfDouble(&_StrCtx,k_pi_address, &k_pi_nb_rows, &k_pi_nb_cols, &k_pdbl_real);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,5,&k_pi_address);
+      _SciErr = getMatrixOfDouble(pvApiCtx,k_pi_address, &k_pi_nb_rows, &k_pi_nb_cols, &k_pdbl_real);
     }
 
   // Get optional B
   if (Rhs>=6)
     {
-      _SciErr = getVarAddressFromPosition(&_StrCtx,6,&B_pi_address);
-      _SciErr = getVarType(&_StrCtx,B_pi_address,&var_type);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,6,&B_pi_address);
+      _SciErr = getVarType(pvApiCtx,B_pi_address,&var_type);
       if (var_type!=sci_sparse)
 	{
 	  Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
 	  return 0;
 	}
       
-      if (isVarComplex(&_StrCtx,B_pi_address))
+      if (isVarComplex(pvApiCtx,B_pi_address))
 	{
 	  Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
 	  return 0;
 	}
 
-      _SciErr = getSparseMatrix(&_StrCtx,B_pi_address, &B_pi_nb_rows, &B_pi_nb_cols, 
+      _SciErr = getSparseMatrix(pvApiCtx,B_pi_address, &B_pi_nb_rows, &B_pi_nb_cols, 
 				&B_pi_nb_items, &B_pi_nb_items_row, &B_pi_col_pos, &B_pdbl_real);
 
       // Convert SPMAT into Scilab sparse
@@ -158,8 +178,8 @@ int sci_spmgcr(char * fname)
   // Get optional x0
   if (Rhs>=7)
     {
-      _SciErr = getVarAddressFromPosition(&_StrCtx,7,&x0_pi_address);
-      _SciErr = getMatrixOfDouble(&_StrCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,7,&x0_pi_address);
+      _SciErr = getMatrixOfDouble(pvApiCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
 
       // Convert Scilab vector into VEC
       x0 = v_get(x0_pi_nb_rows);
@@ -178,7 +198,7 @@ int sci_spmgcr(char * fname)
   memcpy(xsol_pdbl_real,xsol->ve,b_pi_nb_rows*sizeof(double));
   xsol_pi_nb_rows = b_pi_nb_rows;
   xsol_pi_nb_cols = 1;
-  _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
+  _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
   if (xsol_pdbl_real) FREE(xsol_pdbl_real);
 
   LhsVar(1) = Rhs+1;
@@ -189,7 +209,7 @@ int sci_spmgcr(char * fname)
       *iter_pdbl_real = (double)steps;
       iter_pi_nb_rows = 1;
       iter_pi_nb_cols = 1;
-      _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
+      _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
       if (iter_pdbl_real) FREE(iter_pdbl_real);
 
       LhsVar(2) = Rhs+2;
diff --git a/interface/src/scilab/sci_gateway/c/sci_spchol.c b/interface/src/scilab/sci_gateway/c/sci_spchol.c
index 1b297e2..9ae3d81 100644
--- a/interface/src/scilab/sci_gateway/c/sci_spchol.c
+++ b/interface/src/scilab/sci_gateway/c/sci_spchol.c
@@ -1,13 +1,34 @@
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+/*===========================================================================
+ 
+ Copyright (C) 2011-2012 Yann Collette.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+#include <api_scilab.h>
+#include <api_scilab.h>
 #include <MALLOC.h>
 #include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
 
 #include <sparse2.h>
 #include <err.h>
 
-#define DEBUG
+//#define DEBUG
 
 int sci_spchol(char * fname)
 {
@@ -17,35 +38,33 @@ int sci_spchol(char * fname)
   int    * p_in_spmat_col_pos   = NULL;
   double * p_in_spmat_val       = NULL;
   SPMAT  * A = NULL;
-  int      Index, i, j, res;
+  int      Index, i, j;
   int    * p_out_spmat_item_row = NULL;
   int    * p_out_spmat_col_pos  = NULL;
   double * p_out_spmat_val      = NULL;
-  double   value, alpha = 1.0;
   int      nnz = 0, var_type;
   SciErr _SciErr;
-  StrCtx _StrCtx;
 
   CheckRhs(1,1);
   CheckLhs(1,1);
 
   // First, access to the input variable (a matrix of strings)
-  _SciErr = getVarAddressFromPosition(&_StrCtx,1,&p_in_spmat_address);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,1,&p_in_spmat_address);
 
-  _SciErr = getVarType(&_StrCtx,p_in_spmat_address,&var_type);
+  _SciErr = getVarType(pvApiCtx,p_in_spmat_address,&var_type);
   if (var_type!=sci_sparse)
     {
       Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
       return 0;
     }
 
-  if (isVarComplex(&_StrCtx,p_in_spmat_address))
+  if (isVarComplex(pvApiCtx,p_in_spmat_address))
     {
       Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
       return 0;
     }
 
-  _SciErr = getSparseMatrix(&_StrCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols, 
+  _SciErr = getSparseMatrix(pvApiCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols, 
 			    &p_in_spmat_nb_items, &p_in_spmat_items_row, &p_in_spmat_col_pos, &p_in_spmat_val);
 
   ///////////////////////////////
@@ -92,7 +111,7 @@ int sci_spchol(char * fname)
 	}
     }
   
-  _SciErr = createSparseMatrix(&_StrCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index, 
+  _SciErr = createSparseMatrix(pvApiCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index, 
 			       p_out_spmat_item_row, p_out_spmat_col_pos, p_out_spmat_val);
   
   LhsVar(1) = Rhs+1;
diff --git a/interface/src/scilab/sci_gateway/c/sci_spcholinc.c b/interface/src/scilab/sci_gateway/c/sci_spcholinc.c
index b76bd08..472cd56 100644
--- a/interface/src/scilab/sci_gateway/c/sci_spcholinc.c
+++ b/interface/src/scilab/sci_gateway/c/sci_spcholinc.c
@@ -1,14 +1,34 @@
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yann Collette
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+#include <api_scilab.h>
 #include <MALLOC.h>
 #include <stack-c.h>
 #include <sciprint.h>
+#include <Scierror.h>
 
 #include <sparse2.h>
 #include <err.h>
 
-#define DEBUG
+//#define DEBUG
 
 int sci_spcholinc(char * fname)
 {
@@ -18,39 +38,39 @@ int sci_spcholinc(char * fname)
   int    * p_in_spmat_col_pos   = NULL;
   double * p_in_spmat_val       = NULL;
   SPMAT  * A = NULL;
-  int      Index, i, j, res;
+  int      Index, i, j;
   int    * p_out_spmat_item_row = NULL;
   int    * p_out_spmat_col_pos  = NULL;
   double * p_out_spmat_val      = NULL;
-  double   value, alpha = 1.0;
   int      nnz = 0, var_type;
   SciErr _SciErr;
-  StrCtx _StrCtx;
 
   CheckRhs(1,1);
   CheckLhs(1,1);
 
   // First, access to the input variable (a matrix of strings)
     
-  _SciErr = getVarAddressFromPosition(&_StrCtx,1,&p_in_spmat_address);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,1,&p_in_spmat_address);
 
-  _SciErr = getVarType(&_StrCtx,p_in_spmat_address,&var_type);
+  _SciErr = getVarType(pvApiCtx,p_in_spmat_address,&var_type);
   if (var_type!=sci_sparse)
     {
       Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
       return 0;
     }
 
-  if (isVarComplex(&_StrCtx,p_in_spmat_address))
+  if (isVarComplex(pvApiCtx,p_in_spmat_address))
     {
       Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
       return 0;
     }
 
-  _SciErr = getSparseMatrix(&_StrCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols, 
+  _SciErr = getSparseMatrix(pvApiCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols, 
 			    &p_in_spmat_nb_items, &p_in_spmat_items_row, &p_in_spmat_col_pos, &p_in_spmat_val);
 
+#ifdef DEBUG
   sciprint("DEBUG: %d, %d\n",p_in_spmat_nb_rows, p_in_spmat_nb_cols);
+#endif
 
   ///////////////////////////////
   // Proceed the factorization //
@@ -96,7 +116,7 @@ int sci_spcholinc(char * fname)
 	}
     }
   
-  _SciErr = createSparseMatrix(&_StrCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index, 
+  _SciErr = createSparseMatrix(pvApiCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index, 
 			       p_out_spmat_item_row, p_out_spmat_col_pos, p_out_spmat_val);
   
   LhsVar(1) = Rhs+1;
diff --git a/interface/src/scilab/sci_gateway/c/sci_spchsolve.c b/interface/src/scilab/sci_gateway/c/sci_spchsolve.c
index 3c257da..e1743bb 100644
--- a/interface/src/scilab/sci_gateway/c/sci_spchsolve.c
+++ b/interface/src/scilab/sci_gateway/c/sci_spchsolve.c
@@ -1,8 +1,29 @@
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yann Collette
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+#include <api_scilab.h>
 #include <MALLOC.h>
 #include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
 
 #include <string.h>
 
@@ -19,43 +40,39 @@ int sci_spchsolve(char * fname)
   int      p_in_b_nb_rows, p_in_b_nb_cols;
   double * p_in_b_dbl_matrix  = NULL;
   int    * p_in_b_dbl_address = NULL;
-  int      p_out_x_nb_rows, p_out_x_nb_cols;
   double * p_out_x_dbl_matrix  = NULL;
-  int    * p_out_x_dbl_address = NULL;
   SPMAT  * A  = NULL;
   VEC    * vB = NULL, * vOut = NULL;
-  int      Index, i, j, res;
-  double   value, alpha = 1.0;
+  int      Index, i, j;
   SciErr   _SciErr;
-  StrCtx   _StrCtx;
-  int      nnz = 0, var_type;
+  int      var_type;
 
   CheckRhs(1,2);
   CheckLhs(1,1);
 
   // First, access to the input variable (a matrix of strings)
-  _SciErr = getVarAddressFromPosition(&_StrCtx, 1,&p_in_spmat_address);
+  _SciErr = getVarAddressFromPosition(pvApiCtx, 1,&p_in_spmat_address);
 
-  _SciErr = getVarType(&_StrCtx,p_in_spmat_address,&var_type);
+  _SciErr = getVarType(pvApiCtx,p_in_spmat_address,&var_type);
   if (var_type!=sci_sparse)
     {
       Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
       return 0;
     }
 
-  if (isVarComplex(&_StrCtx,p_in_spmat_address))
+  if (isVarComplex(pvApiCtx,p_in_spmat_address))
     {
       Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
       return 0;
     }
 
-  _SciErr = getSparseMatrix(&_StrCtx, p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols, 
+  _SciErr = getSparseMatrix(pvApiCtx, p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols, 
 			&p_in_spmat_nb_items, &p_in_spmat_items_row, &p_in_spmat_col_pos, &p_in_spmat_val);
 
   // Second, get b
-  _SciErr = getVarAddressFromPosition(&_StrCtx, 2, &p_in_b_dbl_address);
+  _SciErr = getVarAddressFromPosition(pvApiCtx, 2, &p_in_b_dbl_address);
 
-  _SciErr = getMatrixOfDouble(&_StrCtx, p_in_b_dbl_address, &p_in_b_nb_rows, &p_in_b_nb_cols, &p_in_b_dbl_matrix);
+  _SciErr = getMatrixOfDouble(pvApiCtx, p_in_b_dbl_address, &p_in_b_nb_rows, &p_in_b_nb_cols, &p_in_b_dbl_matrix);
 
   ////////////////////////////
   // Proceed the resolution //
@@ -88,7 +105,7 @@ int sci_spchsolve(char * fname)
   p_out_x_dbl_matrix = (double *)MALLOC(p_in_b_nb_rows*sizeof(double));
   memcpy(p_out_x_dbl_matrix,vOut->ve,p_in_b_nb_rows*sizeof(double));
 
-  _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+1, p_in_b_nb_rows, p_in_b_nb_cols, p_out_x_dbl_matrix);
+  _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+1, p_in_b_nb_rows, p_in_b_nb_cols, p_out_x_dbl_matrix);
 
   LhsVar(1) = Rhs+1;
 
diff --git a/interface/src/scilab/sci_gateway/c/sci_splu.c b/interface/src/scilab/sci_gateway/c/sci_splu.c
index 77d785f..9e438c5 100644
--- a/interface/src/scilab/sci_gateway/c/sci_splu.c
+++ b/interface/src/scilab/sci_gateway/c/sci_splu.c
@@ -1,15 +1,35 @@
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yann Collette
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <stdio.h>
 
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+#include <api_scilab.h>
 #include <MALLOC.h>
 #include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
 
-#include <sparse2.h>
-#include <err.h>
+#include "sparse2.h"
+#include "err.h"
 
-#define DEBUG
+//#define DEBUG
 
 int sci_splu(char * fname)
 {
@@ -23,44 +43,43 @@ int sci_splu(char * fname)
   int    * p_in_dbl_address = NULL;
   SPMAT  * A = NULL;
   PERM   * pivot = NULL;
-  int      Index, i, j, res;
+  int      Index, i, j;
   int    * p_out_spmat_item_row = NULL;
   int    * p_out_spmat_col_pos  = NULL;
   double * p_out_spmat_val      = NULL;
-  double   value, alpha = 1.0;
+  double   alpha = 1.0;
   int      nnz = 0, var_type;
   SciErr _SciErr;
-  StrCtx _StrCtx;
 
   CheckRhs(1,2);
   CheckLhs(1,3);
 
   // First, access to the input variable (a matrix of strings)
-  _SciErr = getVarAddressFromPosition(&_StrCtx,1,&p_in_spmat_address);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,1,&p_in_spmat_address);
 
-  _SciErr = getVarType(&_StrCtx,p_in_spmat_address,&var_type);
+  _SciErr = getVarType(pvApiCtx,p_in_spmat_address,&var_type);
   if (var_type!=sci_sparse)
     {
       Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
       return 0;
     }
 
-  if (isVarComplex(&_StrCtx,p_in_spmat_address))
+  if (isVarComplex(pvApiCtx,p_in_spmat_address))
     {
       Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
       return 0;
     }
 
-  _SciErr = getSparseMatrix(&_StrCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols, 
+  _SciErr = getSparseMatrix(pvApiCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols, 
 			    &p_in_spmat_nb_items, &p_in_spmat_items_row, &p_in_spmat_col_pos, &p_in_spmat_val);
 
   if (Rhs==2)
     {
       // Second, get the alpha parameter
       // First, access to the input variable (a matrix of doubles)
-      _SciErr = getVarAddressFromPosition(&_StrCtx,2,&p_in_dbl_address);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,2,&p_in_dbl_address);
       
-      _SciErr = getMatrixOfDouble(&_StrCtx,p_in_dbl_address, &p_in_dbl_nb_rows, &p_in_dbl_nb_cols, &p_in_dbl_matrix);
+      _SciErr = getMatrixOfDouble(pvApiCtx,p_in_dbl_address, &p_in_dbl_nb_rows, &p_in_dbl_nb_cols, &p_in_dbl_matrix);
       alpha = *p_in_dbl_matrix;
     }
 
@@ -113,7 +132,7 @@ int sci_splu(char * fname)
 	    }
 	}
       
-      _SciErr = createSparseMatrix(&_StrCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index, 
+      _SciErr = createSparseMatrix(pvApiCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index, 
 				   p_out_spmat_item_row, p_out_spmat_col_pos, p_out_spmat_val);
 
       LhsVar(1) = Rhs+1;
@@ -138,7 +157,7 @@ int sci_splu(char * fname)
 	    }
 	}
       
-      _SciErr = createSparseMatrix(&_StrCtx,Rhs+2, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index, 
+      _SciErr = createSparseMatrix(pvApiCtx,Rhs+2, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index, 
 				   p_out_spmat_item_row, p_out_spmat_col_pos, p_out_spmat_val);
 
       LhsVar(2) = Rhs+2;
@@ -155,7 +174,7 @@ int sci_splu(char * fname)
 	  p_out_spmat_val[i]      = 1.0;
 	}
 
-      _SciErr = createSparseMatrix(&_StrCtx,Rhs+3, p_in_spmat_nb_rows, p_in_spmat_nb_cols, p_in_spmat_nb_rows, 
+      _SciErr = createSparseMatrix(pvApiCtx,Rhs+3, p_in_spmat_nb_rows, p_in_spmat_nb_cols, p_in_spmat_nb_rows, 
 				   p_out_spmat_item_row, p_out_spmat_col_pos, p_out_spmat_val);
 
       LhsVar(3) = Rhs+3;
diff --git a/interface/src/scilab/sci_gateway/c/sci_spluinc.c b/interface/src/scilab/sci_gateway/c/sci_spluinc.c
index 5f58b45..6bd48af 100644
--- a/interface/src/scilab/sci_gateway/c/sci_spluinc.c
+++ b/interface/src/scilab/sci_gateway/c/sci_spluinc.c
@@ -1,13 +1,34 @@
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
-#include <MALLOC.h>
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yann Collette
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+#include <api_scilab.h>
 #include <stack-c.h>
+#include <MALLOC.h>
+#include <Scierror.h>
+#include <sciprint.h>
 
 #include <sparse2.h>
 #include <err.h>
 
-#define DEBUG
+//#define DEBUG
 
 int sci_spluinc(char * fname)
 {
@@ -20,14 +41,13 @@ int sci_spluinc(char * fname)
   double * p_in_dbl_matrix  = NULL;
   int    * p_in_dbl_address = NULL;
   SPMAT  * A = NULL;
-  int      Index, i, j, res;
+  int      Index, i, j;
   int    * p_out_spmat_item_row = NULL;
   int    * p_out_spmat_col_pos  = NULL;
   double * p_out_spmat_val      = NULL;
-  double   value, alpha = 1.0;
+  double   alpha = 1.0;
   int      nnz = 0, var_type;
   SciErr  _SciErr;
-  StrCtx  _StrCtx;
 
   CheckRhs(1,2);
   CheckLhs(1,2);
@@ -38,9 +58,9 @@ int sci_spluinc(char * fname)
 
   // First, access to the input variable (a matrix of strings)
 
-  _SciErr = getVarAddressFromPosition(&_StrCtx,1,&p_in_spmat_address);
+  _SciErr = getVarAddressFromPosition(pvApiCtx,1,&p_in_spmat_address);
 
-  _SciErr = getVarType(&_StrCtx,p_in_spmat_address,&var_type);
+  _SciErr = getVarType(pvApiCtx,p_in_spmat_address,&var_type);
 
   if (var_type!=sci_sparse)
     {
@@ -48,22 +68,22 @@ int sci_spluinc(char * fname)
       return 0;
     }
 
-  if (isVarComplex(&_StrCtx,p_in_spmat_address))
+  if (isVarComplex(pvApiCtx,p_in_spmat_address))
     {
       Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
       return 0;
     }
 
-  _SciErr = getSparseMatrix(&_StrCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols, 
+  _SciErr = getSparseMatrix(pvApiCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols, 
 			    &p_in_spmat_nb_items, &p_in_spmat_items_row, &p_in_spmat_col_pos, &p_in_spmat_val);
 
   if (Rhs==2)
     {
       // Second, get the alpha parameter
       // First, access to the input variable (a matrix of doubles)
-      _SciErr = getVarAddressFromPosition(&_StrCtx,2,&p_in_dbl_address);
+      _SciErr = getVarAddressFromPosition(pvApiCtx,2,&p_in_dbl_address);
       
-      _SciErr = getMatrixOfDouble(&_StrCtx,p_in_dbl_address, &p_in_dbl_nb_rows, &p_in_dbl_nb_cols, &p_in_dbl_matrix);
+      _SciErr = getMatrixOfDouble(pvApiCtx,p_in_dbl_address, &p_in_dbl_nb_rows, &p_in_dbl_nb_cols, &p_in_dbl_matrix);
       alpha = *p_in_dbl_matrix;
     }
 
@@ -120,7 +140,7 @@ int sci_spluinc(char * fname)
 	    }
 	}
       
-      _SciErr = createSparseMatrix(&_StrCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index, 
+      _SciErr = createSparseMatrix(pvApiCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index, 
 				   p_out_spmat_item_row, p_out_spmat_col_pos, p_out_spmat_val);
 
       LhsVar(1) = Rhs+1;
@@ -145,7 +165,7 @@ int sci_spluinc(char * fname)
 	    }
 	}
       
-      _SciErr = createSparseMatrix(&_StrCtx,Rhs+2, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index, 
+      _SciErr = createSparseMatrix(pvApiCtx,Rhs+2, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index, 
 				   p_out_spmat_item_row, p_out_spmat_col_pos, p_out_spmat_val);
 
       LhsVar(2) = Rhs+2;
diff --git a/interface/src/scilab/sci_gateway/c/sci_splusolve.c b/interface/src/scilab/sci_gateway/c/sci_splusolve.c
index d7ee8f3..caa49c2 100644
--- a/interface/src/scilab/sci_gateway/c/sci_splusolve.c
+++ b/interface/src/scilab/sci_gateway/c/sci_splusolve.c
@@ -1,8 +1,29 @@
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yann Collette
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+#include <api_scilab.h>
 #include <MALLOC.h>
 #include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
 
 #include <sparse2.h>
 #include <err.h>
@@ -19,44 +40,40 @@ int sci_splusolve(char * fname)
   int      p_in_b_nb_rows, p_in_b_nb_cols;
   double * p_in_b_dbl_matrix  = NULL;
   int    * p_in_b_dbl_address = NULL;
-  int      p_out_x_nb_rows, p_out_x_nb_cols;
   double * p_out_x_dbl_matrix  = NULL;
-  int    * p_out_x_dbl_address = NULL;
   SPMAT  * A  = NULL;
   VEC    * vB = NULL, * vOut = NULL;
   PERM   * pivot = NULL;
-  int      Index, i, j, res;
-  double   value, alpha = 1.0;
+  int      Index, i, j;
   SciErr   _SciErr;
-  StrCtx   _StrCtx;
-  int      nnz = 0, var_type;
+  int      var_type;
 
   CheckRhs(1,2);
   CheckLhs(1,1);
 
   // First, access to the input variable (a matrix of strings)
-  _SciErr = getVarAddressFromPosition(&_StrCtx, 1,&p_in_spmat_address);
+  _SciErr = getVarAddressFromPosition(pvApiCtx, 1,&p_in_spmat_address);
 
-  _SciErr = getVarType(&_StrCtx, p_in_spmat_address, &var_type);
+  _SciErr = getVarType(pvApiCtx, p_in_spmat_address, &var_type);
   if (var_type!=sci_sparse)
     {
       Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
       return 0;
     }
 
-  if (isVarComplex(&_StrCtx, p_in_spmat_address))
+  if (isVarComplex(pvApiCtx, p_in_spmat_address))
     {
       Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
       return 0;
     }
 
-  _SciErr = getSparseMatrix(&_StrCtx, p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols, 
+  _SciErr = getSparseMatrix(pvApiCtx, p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols, 
 			    &p_in_spmat_nb_items, &p_in_spmat_items_row, &p_in_spmat_col_pos, &p_in_spmat_val);
 
   // Second, get b
-  _SciErr = getVarAddressFromPosition(&_StrCtx, 2, &p_in_b_dbl_address);
+  _SciErr = getVarAddressFromPosition(pvApiCtx, 2, &p_in_b_dbl_address);
 
-  _SciErr = getMatrixOfDouble(&_StrCtx, p_in_b_dbl_address, &p_in_b_nb_rows, &p_in_b_nb_cols, &p_in_b_dbl_matrix);
+  _SciErr = getMatrixOfDouble(pvApiCtx, p_in_b_dbl_address, &p_in_b_nb_rows, &p_in_b_nb_cols, &p_in_b_dbl_matrix);
 
   ////////////////////////////
   // Proceed the resolution //
@@ -92,7 +109,7 @@ int sci_splusolve(char * fname)
   p_out_x_dbl_matrix = (double *)MALLOC(p_in_b_nb_rows*sizeof(double));
   memcpy(p_out_x_dbl_matrix,vOut->ve,p_in_b_nb_rows*sizeof(double));
 
-  _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+1, p_in_b_nb_rows, p_in_b_nb_cols, p_out_x_dbl_matrix);
+  _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+1, p_in_b_nb_rows, p_in_b_nb_cols, p_out_x_dbl_matrix);
 
   LhsVar(1) = Rhs+1;
 
diff --git a/interface/src/scilab/sci_gateway/cleaner_gateway.sce b/interface/src/scilab/sci_gateway/cleaner_gateway.sce
index 030d761..a245907 100644
--- a/interface/src/scilab/sci_gateway/cleaner_gateway.sce
+++ b/interface/src/scilab/sci_gateway/cleaner_gateway.sce
@@ -1,18 +1,15 @@
-// This file is released into the public domain
-// Generated by cleaner_gateway.sce: Please, do not edit this file
-//
-sci_gateway_dir = get_absolute_file_path('cleaner_gateway.sce');
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
+// Generated by builder_gateway.sce: Please, do not edit this file
+
+sci_gateway_dir = get_absolute_file_path("cleaner_gateway.sce");
 current_dir     = pwd();
 
 chdir(sci_gateway_dir);
-if ( isdir('c') ) then
-  chdir('c');
-  exec('cleaner.sce');
-  mdelete('cleaner.sce');
+if ( isdir("c") ) then
+    chdir("c");
+    exec("cleaner.sce");
+    mdelete("cleaner.sce");
 end
 
 chdir(current_dir);
-// ====================================================================
-clear sci_gateway_dir;
-clear current_dir;
-// ====================================================================
+clear sci_gateway_dir current_dir;
diff --git a/interface/src/scilab/sci_gateway/loader_gateway.sce b/interface/src/scilab/sci_gateway/loader_gateway.sce
index cfae727..e3e7807 100644
--- a/interface/src/scilab/sci_gateway/loader_gateway.sce
+++ b/interface/src/scilab/sci_gateway/loader_gateway.sce
@@ -1,28 +1,24 @@
-// This file is released into the public domain
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
 // Generated by builder_gateway.sce: Please, do not edit this file
-//
 
 try
-  v = getversion('scilab');
+    v = getversion("scilab");
 catch
-  v = [ 5 0 ]; // or older 
+    v = [ 5 0 ]; // or older 
 end
-if (v(1) <= 5) & (v(2) < 2) then
-  // new API in scilab 5.2
-  error(gettext('Scilab 5.2 or more is required.'));
+if (v(1) <= 5) & (v(2) < 3) then
+    // new API in scilab 5.3
+    error(gettext("Scilab 5.3 or more is required."));
 end
 
-sci_gateway_dir = get_absolute_file_path('loader_gateway.sce');
+sci_gateway_dir = get_absolute_file_path("loader_gateway.sce");
 current_dir     = pwd();
 
 chdir(sci_gateway_dir);
-if ( isdir('c') ) then
-  chdir('c');
-  exec('loader.sce');
+if ( isdir("c") ) then
+    chdir("c");
+    exec("loader.sce");
 end
 
 chdir(current_dir);
-// ====================================================================
-clear sci_gateway_dir;
-clear current_dir;
-// ====================================================================
+clear sci_gateway_dir current_dir v;
diff --git a/interface/src/scilab/sci_getfem.iss b/interface/src/scilab/sci_getfem.iss
index a7d14df..b9bea25 100644
--- a/interface/src/scilab/sci_getfem.iss
+++ b/interface/src/scilab/sci_getfem.iss
@@ -1,48 +1,50 @@
-;##############################################################################################################
-; Script d'installation Inno Setup (5.2.2) pour scilab
-; Allan CORNET
-; Version TRUNK
-; This file is released into the public domain
-;##############################################################################################################
-;--------------------------------------------------------------------------------------------------------------
-; toolbox_skeleton
-;--------------------------------------------------------------------------------------------------------------
-#define TOOLBOX_SKELETON "toolbox_skeleton"
-;
-Source: contrib\{#TOOLBOX_SKELETON}\builder.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\toolbox_skeleton_redist.iss; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\changelog.txt; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\license.txt; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\readme.txt; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}; Components: {#COMPN_TOOLBOX_SKELETON}
-;
-Source: contrib\{#TOOLBOX_SKELETON}\demos\*.*; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\demos; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\etc\toolbox_skeleton.quit; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\etc; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\etc\toolbox_skeleton.start; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\etc; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\help\builder_help.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\help; Components: {#COMPN_TOOLBOX_SKELETON}
-
-Source: contrib\{#TOOLBOX_SKELETON}\help\en_US\build_help.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\help\en_US; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\help\en_US\*.xml; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\help\en_US; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\help\fr_FR\build_help.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\help\fr_FR; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\help\fr_FR\*.xml; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\help\fr_FR; Components: {#COMPN_TOOLBOX_SKELETON}
-;
-;Source: contrib\{#TOOLBOX_SKELETON}\includes\*.h; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\includes
-;Source: contrib\{#TOOLBOX_SKELETON}\locales\*.*; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\locales
-;
-Source: contrib\{#TOOLBOX_SKELETON}\macros\buildmacros.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\macros; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\macros\*.sci; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\macros; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\builder_gateway.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\c\builder_gateway_c.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway\c; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\c\sci_csum.c; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway\c; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\c\sci_csub.c; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway\c; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\cpp\sci_cpp_find.cxx; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway\cpp; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\cpp\builder_gateway_cpp.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway\cpp; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\fortran\builder_gateway_fortran.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway\fortran; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\fortran\sci_fsum.c; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway\fortran; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\src\builder_src.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\src; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\src\c\builder_c.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\src\c; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\src\c\csum.c; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\src\c; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\src\c\csub.c; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\src\c; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\src\fortran\builder_fortran.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\src\fortran; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\src\fortran\fsum.f; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\src\fortran; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\tests\*.*; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\tests; Flags: recursesubdirs; Components: {#COMPN_TOOLBOX_SKELETON}
-;--------------------------------------------------------------------------------------------------------------
+;##############################################################################################################
+; Inno Setup Install script for SciGetFem Module
+; http://www.jrsoftware.org/isinfo.php
+; Yann COLLETTE
+; This file is released into the public domain
+;##############################################################################################################
+; modify this path where is sciglpk directory
+#define BinariesSourcePath "E:\Scilab\toolboxes\getfem\interface\src\scilab"
+;
+#define SCIGETFEM_Module_version "3914"
+#define CurrentYear "2011"
+#define SCIGETFEM_ModuleDirFilename "scigetfem-rev3914"
+;##############################################################################################################
+[Setup]
+; Debut Données de base à renseigner suivant version
+SourceDir={#BinariesSourcePath}
+AppName=SciGetFem Module
+AppVerName=SciGetFem Module version rev3914
+DefaultDirName={pf}/{#SCIGETFEM_ModuleDirFilename}
+InfoAfterfile=readme.txt
+LicenseFile=license.txt
+WindowVisible=true
+AppPublisher=Home
+BackColorDirection=lefttoright
+AppCopyright=Copyright © {#CurrentYear}
+Compression=lzma/max
+InternalCompressLevel=normal
+SolidCompression=true
+VersionInfoVersion={#SCIGETFEM_Module_version}
+VersionInfoCompany=Home
+;##############################################################################################################
+[Files]
+; Add here files that you want to add
+Source: loader.sce; DestDir: {app}
+Source: license.txt; DestDir: {app}
+Source: readme.txt; DestDir: {app}
+Source: etc\sci_getfem.quit; DestDir: {app}\etc
+Source: etc\sci_getfem.start; DestDir: {app}\etc
+Source: sci_gateway\loader_gateway.sce; DestDir: {app}\sci_gateway
+Source: sci_gateway\c\loader.sce; DestDir: {app}\sci_gateway\c
+Source: sci_gateway\c\*.dll; DestDir: {app}\sci_gateway\c
+Source: macros\*.*; DestDir: {app}\macros;
+Source: macros\overload\*.*; DestDir: {app}\macros\overload;
+Source: demos\*.*; DestDir: {app}\demos;
+Source: demos\data\*.*; DestDir: {app}\demos\data;
+Source: jar\*.*; DestDir: {app}\jar
+Source: src\c\loader.sce; DestDir: {app}\src\c
+Source: src\c\*.dll; DestDir: {app}\src\c
+;
+;##############################################################################################################
diff --git a/interface/src/scilab/src/c/DOC/tutorial.txt b/interface/src/scilab/src/c/DOC/tutorial.txt
index 1b21492..69d27cd 100644
--- a/interface/src/scilab/src/c/DOC/tutorial.txt
+++ b/interface/src/scilab/src/c/DOC/tutorial.txt
@@ -705,7 +705,7 @@ to the screen.
 
    Some of the most common routines have variants that take a variable
 number of arguments.  These are the routines .._get_vars(), .._resize_vars()
-and .._free_vars().  These correspond to the the basic routines .._get(),
+and .._free_vars().  These correspond to the basic routines .._get(),
 .._resize() and .._free() respectively.  Also there is the
 mem_stat_reg_vars() routine which registers a list of static workspace
 variables. This corresponds to mem_stat_reg_list() for a single variable.
diff --git a/interface/src/scilab/src/c/MACHINES/Cray/machine.h b/interface/src/scilab/src/c/MACHINES/Cray/machine.h
index d64beb4..90e6e5c 100644
--- a/interface/src/scilab/src/c/MACHINES/Cray/machine.h
+++ b/interface/src/scilab/src/c/MACHINES/Cray/machine.h
@@ -1,8 +1,31 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+**			     Meschach Library
+** 
+** This Meschach Library is provided "as is" without any express 
+** or implied warranty of any kind with respect to this software. 
+** In particular the authors shall not be liable for any direct, 
+** indirect, special, incidental or consequential damages arising 
+** in any way from use of the software.
+** 
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+**  1.  All copies contain this copyright notice.
+**  2.  All modified copies shall carry a notice stating who
+**      made the last modification and the date of such modification.
+**  3.  No charge is made for this software or works derived from it.  
+**      This clause shall not be construed as constraining other software
+**      distributed on the same medium as this software, nor is a
+**      distribution fee considered a charge.
+**
+***************************************************************************/
 /* machine.h.  Generated automatically by configure.  */
 /* Any machine specific stuff goes here */
 /* Add details necessary for your own installation here! */
 
-/* RCS id: $Id: machine.h 3690 2010-09-02 09:55:19Z lsaavedr $ */
+/* RCS id: $Id: machine.h 4050 2012-02-26 13:04:17Z renard $ */
 
 /* This is for use with "configure" -- if you are not using configure
 	then use machine.van for the "vanilla" version of machine.h */
diff --git a/interface/src/scilab/src/c/MACHINES/GCC/machine.h b/interface/src/scilab/src/c/MACHINES/GCC/machine.h
index a3ab270..f3c12ae 100644
--- a/interface/src/scilab/src/c/MACHINES/GCC/machine.h
+++ b/interface/src/scilab/src/c/MACHINES/GCC/machine.h
@@ -1,3 +1,26 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+**			     Meschach Library
+** 
+** This Meschach Library is provided "as is" without any express 
+** or implied warranty of any kind with respect to this software. 
+** In particular the authors shall not be liable for any direct, 
+** indirect, special, incidental or consequential damages arising 
+** in any way from use of the software.
+** 
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+**  1.  All copies contain this copyright notice.
+**  2.  All modified copies shall carry a notice stating who
+**      made the last modification and the date of such modification.
+**  3.  No charge is made for this software or works derived from it.  
+**      This clause shall not be construed as constraining other software
+**      distributed on the same medium as this software, nor is a
+**      distribution fee considered a charge.
+**
+***************************************************************************/
 /* machine.h.  Generated automatically by configure.  */
 /* Any machine specific stuff goes here */
 /* Add details necessary for your own installation here! */
diff --git a/interface/src/scilab/src/c/MACHINES/Linux/machine.h b/interface/src/scilab/src/c/MACHINES/Linux/machine.h
index c78684b..94d5156 100644
--- a/interface/src/scilab/src/c/MACHINES/Linux/machine.h
+++ b/interface/src/scilab/src/c/MACHINES/Linux/machine.h
@@ -1,3 +1,26 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+**			     Meschach Library
+** 
+** This Meschach Library is provided "as is" without any express 
+** or implied warranty of any kind with respect to this software. 
+** In particular the authors shall not be liable for any direct, 
+** indirect, special, incidental or consequential damages arising 
+** in any way from use of the software.
+** 
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+**  1.  All copies contain this copyright notice.
+**  2.  All modified copies shall carry a notice stating who
+**      made the last modification and the date of such modification.
+**  3.  No charge is made for this software or works derived from it.  
+**      This clause shall not be construed as constraining other software
+**      distributed on the same medium as this software, nor is a
+**      distribution fee considered a charge.
+**
+***************************************************************************/
 /* machine.h.  Generated automatically by configure.  */
 /* Any machine specific stuff goes here */
 /* Add details necessary for your own installation here! */
diff --git a/interface/src/scilab/src/c/MACHINES/RS6000/machine.h b/interface/src/scilab/src/c/MACHINES/RS6000/machine.h
index b3bbf0b..bbafaf2 100644
--- a/interface/src/scilab/src/c/MACHINES/RS6000/machine.h
+++ b/interface/src/scilab/src/c/MACHINES/RS6000/machine.h
@@ -1,3 +1,26 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+**			     Meschach Library
+** 
+** This Meschach Library is provided "as is" without any express 
+** or implied warranty of any kind with respect to this software. 
+** In particular the authors shall not be liable for any direct, 
+** indirect, special, incidental or consequential damages arising 
+** in any way from use of the software.
+** 
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+**  1.  All copies contain this copyright notice.
+**  2.  All modified copies shall carry a notice stating who
+**      made the last modification and the date of such modification.
+**  3.  No charge is made for this software or works derived from it.  
+**      This clause shall not be construed as constraining other software
+**      distributed on the same medium as this software, nor is a
+**      distribution fee considered a charge.
+**
+***************************************************************************/
 
 /* Note special macros: ANSI_C (ANSI C syntax)
 			SEGMENTED (segmented memory machine e.g. MS-DOS)
diff --git a/interface/src/scilab/src/c/MACHINES/SGI/machine.h b/interface/src/scilab/src/c/MACHINES/SGI/machine.h
index 1a35754..437913d 100644
--- a/interface/src/scilab/src/c/MACHINES/SGI/machine.h
+++ b/interface/src/scilab/src/c/MACHINES/SGI/machine.h
@@ -1,8 +1,31 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+**			     Meschach Library
+** 
+** This Meschach Library is provided "as is" without any express 
+** or implied warranty of any kind with respect to this software. 
+** In particular the authors shall not be liable for any direct, 
+** indirect, special, incidental or consequential damages arising 
+** in any way from use of the software.
+** 
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+**  1.  All copies contain this copyright notice.
+**  2.  All modified copies shall carry a notice stating who
+**      made the last modification and the date of such modification.
+**  3.  No charge is made for this software or works derived from it.  
+**      This clause shall not be construed as constraining other software
+**      distributed on the same medium as this software, nor is a
+**      distribution fee considered a charge.
+**
+***************************************************************************/
 /* machine.h.  Generated automatically by configure.  */
 /* Any machine specific stuff goes here */
 /* Add details necessary for your own installation here! */
 
-/* RCS id: $Id: machine.h 3690 2010-09-02 09:55:19Z lsaavedr $ */
+/* RCS id: $Id: machine.h 4050 2012-02-26 13:04:17Z renard $ */
 
 /* This is for use with "configure" -- if you are not using configure
 	then use machine.van for the "vanilla" version of machine.h */
diff --git a/interface/src/scilab/src/c/MACHINES/SPARC/machine.h b/interface/src/scilab/src/c/MACHINES/SPARC/machine.h
index a62657c..82b7a47 100644
--- a/interface/src/scilab/src/c/MACHINES/SPARC/machine.h
+++ b/interface/src/scilab/src/c/MACHINES/SPARC/machine.h
@@ -1,3 +1,26 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+**			     Meschach Library
+** 
+** This Meschach Library is provided "as is" without any express 
+** or implied warranty of any kind with respect to this software. 
+** In particular the authors shall not be liable for any direct, 
+** indirect, special, incidental or consequential damages arising 
+** in any way from use of the software.
+** 
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+**  1.  All copies contain this copyright notice.
+**  2.  All modified copies shall carry a notice stating who
+**      made the last modification and the date of such modification.
+**  3.  No charge is made for this software or works derived from it.  
+**      This clause shall not be construed as constraining other software
+**      distributed on the same medium as this software, nor is a
+**      distribution fee considered a charge.
+**
+***************************************************************************/
 
 /* Note special macros: ANSI_C (ANSI C syntax)
 			SEGMENTED (segmented memory machine e.g. MS-DOS)
diff --git a/interface/src/scilab/src/c/README b/interface/src/scilab/src/c/README
index cfd3256..1941354 100644
--- a/interface/src/scilab/src/c/README
+++ b/interface/src/scilab/src/c/README
@@ -81,7 +81,7 @@ files: meschach[01234].shar (which contain the library itself),
 meschach0.shar (which contains basic documentation and machine dependent
 files for a number of machines).  Of the meschach[1234].shar files, only
 meschach[12].shar are needed for the basic Meschach library; the third
-.shar file contains the sparse matrix routines, and the the fourth contains
+.shar file contains the sparse matrix routines, and the fourth contains
 the routines for complex numbers, vectors and matrices.  There is also a
 README file that you should get from meschach0.shar.
 
@@ -257,12 +257,12 @@ into a library. Consult your local compiler's manual for details of how to
 do this.
 
    When compiling programs/routines that use Meschach, you will need to
-have access the the header files in the INCLUDE directory. The INCLUDE
+have access to the header files in the INCLUDE directory. The INCLUDE
 directory's contents can be copied to the directory where the
 programs/routines are compiled.
 
    The files in the DOC directory form a very brief form of documentation
-on the the library routines in Meschach. See the printed documentation for
+on the library routines in Meschach. See the printed documentation for
 more comprehensive documentation of the Meschach routines.  This can be
 obtained from the authors via email.
 
diff --git a/interface/src/scilab/src/c/builder_c.sce b/interface/src/scilab/src/c/builder_c.sce
index 67b0a28..4fa565a 100644
--- a/interface/src/scilab/src/c/builder_c.sce
+++ b/interface/src/scilab/src/c/builder_c.sce
@@ -18,11 +18,17 @@ Files = ['bdfactor.c','hessen.c','machine.c','spchfctr.c', ...
 	 'zfunc.c','zhsehldr.c','zmatio.c','zmemory.c','zschur.c', ...
 	 'zgivens.c','zlufctr.c','zmatlab.c','znorm.c','zsolve.c'];
 Symbols = ['sp_get','sp_set_val','spICHfactor','sp_col_access','spILUfactor','iter_spcgne', ...
-           'iter_spcgs','iter_spgmres','iter_spmgcr','spCHfactor','spILUfactor'];
+           'iter_spcgs','iter_spgmres','iter_spmgcr','spCHfactor','spILUfactor','spLUfactor',...
+           'spLUsolve','v_set_val','v_free','sp_free','v_get','restart'];
 
 libs = [];
 ldflags = '';
-cflags = '-I' + sparsecomp_path + ' -I' + sparsecomp_path + '/MACHINES/GCC';
+
+if getos()=='Windows' then
+  cflags = '/I' + sparsecomp_path + ' /I' + sparsecomp_path + '/MACHINES/GCC /DHAVE_CONFIG_H';
+else
+  cflags = '-I' + sparsecomp_path + ' -I' + sparsecomp_path + '/MACHINES/GCC -DHAVE_CONFIG_H';
+end
 
 tbx_build_src(Symbols, Files, 'c', sparsecomp_path, libs, ldflags, cflags);
 
diff --git a/interface/src/scilab/src/c/cleaner.sce b/interface/src/scilab/src/c/cleaner.sce
index 3f248d7..e43f6dd 100644
--- a/interface/src/scilab/src/c/cleaner.sce
+++ b/interface/src/scilab/src/c/cleaner.sce
@@ -1,4 +1,4 @@
-// This file is released into the public domain
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
 // Generated by builder.sce : Please, do not edit this file
 // cleaner.sce
 // ------------------------------------------------------
diff --git a/interface/src/scilab/src/c/err.c b/interface/src/scilab/src/c/err.c
index c625d18..00347ac 100644
--- a/interface/src/scilab/src/c/err.c
+++ b/interface/src/scilab/src/c/err.c
@@ -31,7 +31,7 @@
   Ported to Pyramid 9810 late 1987
   */
 
-static	char	rcsid[] = "$Id: err.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static	char	rcsid[] = "$Id: err.c 3865 2011-11-02 06:38:43Z ycollet $";
 
 #include	<stdio.h>
 #include	<setjmp.h>
@@ -102,8 +102,11 @@ static char *warn_mesg[] = {
 
 #define	MAX_ERRS	100
 
+#ifdef _MSC_VER
+jmp_buf	__declspec(dllexport) restart;
+#else
 jmp_buf	restart;
-
+#endif
 
 /* array of pointers to lists of errors */
 
diff --git a/interface/src/scilab/src/c/err.h b/interface/src/scilab/src/c/err.h
index 7b2659a..e2288c2 100644
--- a/interface/src/scilab/src/c/err.h
+++ b/interface/src/scilab/src/c/err.h
@@ -26,7 +26,7 @@
 
 /* err.h  28/09/1993 */
 
-/*  RCS id: $Id: err.h 3690 2010-09-02 09:55:19Z lsaavedr $  */
+/*  RCS id: $Id: err.h 3885 2011-11-08 20:05:30Z ycollet $  */
 
 
 #ifndef ERRHEADER
@@ -38,8 +38,15 @@
 
 /* Error recovery */
 
-extern	jmp_buf	restart;
-
+#ifdef _MSC_VER
+#ifdef DLLIMPORT
+jmp_buf __declspec(dllimport) restart;
+#else
+jmp_buf __declspec(dllexport) restart;
+#endif
+#else
+extern jmp_buf restart;
+#endif
 
 /* max. # of error lists */
 #define ERR_LIST_MAX_LEN   10
diff --git a/interface/src/scilab/src/c/loader.sce b/interface/src/scilab/src/c/loader.sce
index 40ba75e..4b70767 100644
--- a/interface/src/scilab/src/c/loader.sce
+++ b/interface/src/scilab/src/c/loader.sce
@@ -1,23 +1,103 @@
-// This file is released into the public domain
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
 // Generated by builder.sce : Please, do not edit this file
+// ----------------------------------------------------------------------------
 //
-
 sp_get_path = get_absolute_file_path('loader.sce');
-
+//
 // ulink previous function with same name
-[bOK,ilib] = c_link('sp_get');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('sp_set_val');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('spICHfactor');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('sp_col_access');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('spILUfactor');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('iter_spcgne');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('iter_spcgs');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('iter_spgmres');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('iter_spmgcr');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('spCHfactor');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('spILUfactor');if (bOK) then ulink(ilib),end
-link(sp_get_path+'libsp_get'+getdynlibext(),['sp_get','sp_set_val','spICHfactor','sp_col_access','spILUfactor','iter_spcgne','iter_spcgs','iter_spgmres','iter_spmgcr','spCHfactor','spILUfactor'],'c');
+[bOK, ilib] = c_link('sp_get');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('sp_set_val');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('spICHfactor');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('sp_col_access');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('spILUfactor');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('iter_spcgne');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('iter_spcgs');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('iter_spgmres');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('iter_spmgcr');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('spCHfactor');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('spILUfactor');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('spLUfactor');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('spLUsolve');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('v_set_val');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('v_free');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('sp_free');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('v_get');
+if bOK then
+  ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('restart');
+if bOK then
+  ulink(ilib);
+end
+//
+link(sp_get_path + 'libsp_get' + getdynlibext(), ['sp_get','sp_set_val','spICHfactor','sp_col_access','spILUfactor','iter_spcgne','iter_spcgs','iter_spgmres','iter_spmgcr','spCHfactor','spILUfactor','spLUfactor','spLUsolve','v_set_val','v_free','sp_free','v_get','restart'],'c');
 // remove temp. variables on stack
 clear sp_get_path;
-clear get_file_path;
-// ------------------------------------------------------
+clear bOK;
+clear ilib;
+// ----------------------------------------------------------------------------
diff --git a/interface/src/scilab/src/c/machine.h b/interface/src/scilab/src/c/machine.h
index 88533b5..dcf786a 100644
--- a/interface/src/scilab/src/c/machine.h
+++ b/interface/src/scilab/src/c/machine.h
@@ -1,8 +1,31 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+**			     Meschach Library
+** 
+** This Meschach Library is provided "as is" without any express 
+** or implied warranty of any kind with respect to this software. 
+** In particular the authors shall not be liable for any direct, 
+** indirect, special, incidental or consequential damages arising 
+** in any way from use of the software.
+** 
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+**  1.  All copies contain this copyright notice.
+**  2.  All modified copies shall carry a notice stating who
+**      made the last modification and the date of such modification.
+**  3.  No charge is made for this software or works derived from it.  
+**      This clause shall not be construed as constraining other software
+**      distributed on the same medium as this software, nor is a
+**      distribution fee considered a charge.
+**
+***************************************************************************/
 /* machine.h.  Generated automatically by configure.  */
 /* Any machine specific stuff goes here */
 /* Add details necessary for your own installation here! */
 
-/* RCS id: $Id: machine.h 3690 2010-09-02 09:55:19Z lsaavedr $ */
+/* RCS id: $Id: machine.h 4050 2012-02-26 13:04:17Z renard $ */
 
 /* This is for use with "configure" -- if you are not using configure
 	then use machine.van for the "vanilla" version of machine.h */
diff --git a/interface/src/scilab/src/c/machine.h.in b/interface/src/scilab/src/c/machine.h.in
index 4f4efb6..e205f15 100644
--- a/interface/src/scilab/src/c/machine.h.in
+++ b/interface/src/scilab/src/c/machine.h.in
@@ -1,3 +1,26 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+**			     Meschach Library
+** 
+** This Meschach Library is provided "as is" without any express 
+** or implied warranty of any kind with respect to this software. 
+** In particular the authors shall not be liable for any direct, 
+** indirect, special, incidental or consequential damages arising 
+** in any way from use of the software.
+** 
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+**  1.  All copies contain this copyright notice.
+**  2.  All modified copies shall carry a notice stating who
+**      made the last modification and the date of such modification.
+**  3.  No charge is made for this software or works derived from it.  
+**      This clause shall not be construed as constraining other software
+**      distributed on the same medium as this software, nor is a
+**      distribution fee considered a charge.
+**
+***************************************************************************/
 /* Any machine specific stuff goes here */
 /* Add details necessary for your own installation here! */
 
diff --git a/interface/src/scilab/src/c/matop.c b/interface/src/scilab/src/c/matop.c
index df20bd4..da414ad 100644
--- a/interface/src/scilab/src/c/matop.c
+++ b/interface/src/scilab/src/c/matop.c
@@ -30,12 +30,11 @@
 #include	<stdio.h>
 #include	"matrix.h"
 
-static	char	rcsid[] = "$Id: matop.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static	char	rcsid[] = "$Id: matop.c 3865 2011-11-02 06:38:43Z ycollet $";
 
 
 /* m_add -- matrix addition -- may be in-situ */
-MAT	*m_add(mat1,mat2,out)
-MAT	*mat1,*mat2,*out;
+MAT * m_add(MAT * mat1, MAT * mat2, MAT * out)
 {
 	u_int	m,n,i;
 
@@ -59,8 +58,7 @@ MAT	*mat1,*mat2,*out;
 }
 
 /* m_sub -- matrix subtraction -- may be in-situ */
-MAT	*m_sub(mat1,mat2,out)
-MAT	*mat1,*mat2,*out;
+MAT * m_sub(MAT * mat1, MAT * mat2, MAT * out)
 {
 	u_int	m,n,i;
 
@@ -84,23 +82,21 @@ MAT	*mat1,*mat2,*out;
 }
 
 /* m_mlt -- matrix-matrix multiplication */
-MAT	*m_mlt(A,B,OUT)
-MAT	*A,*B,*OUT;
-{
+MAT * m_mlt(MAT * A, MAT * B, MAT * out) {
 	u_int	i, /* j, */ k, m, n, p;
-	Real	**A_v, **B_v /*, *B_row, *OUT_row, sum, tmp */;
+	Real	**A_v, **B_v /*, *B_row, *out_row, sum, tmp */;
 
 	if ( A==(MAT *)NULL || B==(MAT *)NULL )
 		error(E_NULL,"m_mlt");
 	if ( A->n != B->m )
 		error(E_SIZES,"m_mlt");
-	if ( A == OUT || B == OUT )
+	if ( A == out || B == out )
 		error(E_INSITU,"m_mlt");
 	m = A->m;	n = A->n;	p = B->n;
 	A_v = A->me;		B_v = B->me;
 
-	if ( OUT==(MAT *)NULL || OUT->m != A->m || OUT->n != B->n )
-		OUT = m_resize(OUT,A->m,B->n);
+	if ( out==(MAT *)NULL || out->m != A->m || out->n != B->n )
+		out = m_resize(out,A->m,B->n);
 
 /****************************************************************
 	for ( i=0; i<m; i++ )
@@ -109,101 +105,97 @@ MAT	*A,*B,*OUT;
 			sum = 0.0;
 			for ( k=0; k<n; k++ )
 				sum += A_v[i][k]*B_v[k][j];
-			OUT->me[i][j] = sum;
+			out->me[i][j] = sum;
 		}
 ****************************************************************/
-	m_zero(OUT);
+	m_zero(out);
 	for ( i=0; i<m; i++ )
 		for ( k=0; k<n; k++ )
 		{
 		    if ( A_v[i][k] != 0.0 )
-		        __mltadd__(OUT->me[i],B_v[k],A_v[i][k],(int)p);
+		        __mltadd__(out->me[i],B_v[k],A_v[i][k],(int)p);
 		    /**************************************************
-		    B_row = B_v[k];	OUT_row = OUT->me[i];
+		    B_row = B_v[k];	out_row = out->me[i];
 		    for ( j=0; j<p; j++ )
-			(*OUT_row++) += tmp*(*B_row++);
+			(*out_row++) += tmp*(*B_row++);
 		    **************************************************/
 		}
 
-	return OUT;
+	return out;
 }
 
 /* mmtr_mlt -- matrix-matrix transposed multiplication
-	-- A.B^T is returned, and stored in OUT */
-MAT	*mmtr_mlt(A,B,OUT)
-MAT	*A, *B, *OUT;
+	-- A.B^T is returned, and stored in out */
+MAT	*mmtr_mlt(MAT * A, MAT * B, MAT * out)
 {
 	int	i, j, limit;
 	/* Real	*A_row, *B_row, sum; */
 
 	if ( ! A || ! B )
 		error(E_NULL,"mmtr_mlt");
-	if ( A == OUT || B == OUT )
+	if ( A == out || B == out )
 		error(E_INSITU,"mmtr_mlt");
 	if ( A->n != B->n )
 		error(E_SIZES,"mmtr_mlt");
-	if ( ! OUT || OUT->m != A->m || OUT->n != B->m )
-		OUT = m_resize(OUT,A->m,B->m);
+	if ( ! out || out->m != A->m || out->n != B->m )
+		out = m_resize(out,A->m,B->m);
 
 	limit = A->n;
 	for ( i = 0; i < A->m; i++ )
 		for ( j = 0; j < B->m; j++ )
 		{
-		    OUT->me[i][j] = __ip__(A->me[i],B->me[j],(int)limit);
+		    out->me[i][j] = __ip__(A->me[i],B->me[j],(int)limit);
 		    /**************************************************
 		    sum = 0.0;
 		    A_row = A->me[i];
 		    B_row = B->me[j];
 		    for ( k = 0; k < limit; k++ )
 			sum += (*A_row++)*(*B_row++);
-		    OUT->me[i][j] = sum;
+		    out->me[i][j] = sum;
 		    **************************************************/
 		}
 
-	return OUT;
+	return out;
 }
 
 /* mtrm_mlt -- matrix transposed-matrix multiplication
-	-- A^T.B is returned, result stored in OUT */
-MAT	*mtrm_mlt(A,B,OUT)
-MAT	*A, *B, *OUT;
+	-- A^T.B is returned, result stored in out */
+MAT * mtrm_mlt(MAT * A, MAT * B, MAT * out)
 {
 	int	i, k, limit;
-	/* Real	*B_row, *OUT_row, multiplier; */
+	/* Real	*B_row, *out_row, multiplier; */
 
 	if ( ! A || ! B )
 		error(E_NULL,"mmtr_mlt");
-	if ( A == OUT || B == OUT )
+	if ( A == out || B == out )
 		error(E_INSITU,"mtrm_mlt");
 	if ( A->m != B->m )
 		error(E_SIZES,"mmtr_mlt");
-	if ( ! OUT || OUT->m != A->n || OUT->n != B->n )
-		OUT = m_resize(OUT,A->n,B->n);
+	if ( ! out || out->m != A->n || out->n != B->n )
+		out = m_resize(out,A->n,B->n);
 
 	limit = B->n;
-	m_zero(OUT);
+	m_zero(out);
 	for ( k = 0; k < A->m; k++ )
 		for ( i = 0; i < A->n; i++ )
 		{
 		    if ( A->me[k][i] != 0.0 )
-			__mltadd__(OUT->me[i],B->me[k],A->me[k][i],(int)limit);
+			__mltadd__(out->me[i],B->me[k],A->me[k][i],(int)limit);
 		    /**************************************************
 		    multiplier = A->me[k][i];
-		    OUT_row = OUT->me[i];
+		    out_row = out->me[i];
 		    B_row   = B->me[k];
 		    for ( j = 0; j < limit; j++ )
-			*(OUT_row++) += multiplier*(*B_row++);
+			*(out_row++) += multiplier*(*B_row++);
 		    **************************************************/
 		}
 
-	return OUT;
+	return out;
 }
 
 /* mv_mlt -- matrix-vector multiplication 
 		-- Note: b is treated as a column vector */
-VEC	*mv_mlt(A,b,out)
-MAT	*A;
-VEC	*b,*out;
+VEC * mv_mlt(MAT * A, VEC * b, VEC * out)
 {
 	u_int	i, m, n;
 	Real	**A_v, *b_v /*, *A_row */;
@@ -237,9 +229,7 @@ VEC	*b,*out;
 }
 
 /* sm_mlt -- scalar-matrix multiply -- may be in-situ */
-MAT	*sm_mlt(scalar,matrix,out)
-double	scalar;
-MAT	*matrix,*out;
+MAT * sm_mlt(double scalar, MAT * matrix, MAT * out)
 {
 	u_int	m,n,i;
 
@@ -259,9 +249,7 @@ MAT	*matrix,*out;
 
 /* vm_mlt -- vector-matrix multiplication 
 		-- Note: b is treated as a row vector */
-VEC	*vm_mlt(A,b,out)
-MAT	*A;
-VEC	*b,*out;
+VEC * vm_mlt(MAT * A, VEC * b, VEC * out)
 {
 	u_int	j,m,n;
 	/* Real	sum,**A_v,*b_v; */
@@ -296,8 +284,7 @@ VEC	*b,*out;
 }
 
 /* m_transp -- transpose matrix */
-MAT	*m_transp(in,out)
-MAT	*in, *out;
+MAT * m_transp(MAT * in, MAT * out)
 {
 	int	i, j;
 	int	in_situ;
@@ -327,9 +314,7 @@ MAT	*in, *out;
 }
 
 /* swap_rows -- swaps rows i and j of matrix A upto column lim */
-MAT	*swap_rows(A,i,j,lo,hi)
-MAT	*A;
-int	i, j, lo, hi;
+MAT * swap_rows(MAT * A, int i, int j, int lo, int hi)
 {
 	int	k;
 	Real	**A_me, tmp;
@@ -352,9 +337,7 @@ int	i, j, lo, hi;
 }
 
 /* swap_cols -- swap columns i and j of matrix A upto row lim */
-MAT	*swap_cols(A,i,j,lo,hi)
-MAT	*A;
-int	i, j, lo, hi;
+MAT * swap_cols(MAT * A, int i, int j, int lo, int hi)
 {
 	int	k;
 	Real	**A_me, tmp;
@@ -379,9 +362,7 @@ int	i, j, lo, hi;
 /* ms_mltadd -- matrix-scalar multiply and add
 	-- may be in situ
 	-- returns out == A1 + s*A2 */
-MAT	*ms_mltadd(A1,A2,s,out)
-MAT	*A1, *A2, *out;
-double	s;
+MAT * ms_mltadd(MAT * A1, MAT * A2, double s, MAT * out)
 {
 	/* register Real	*A1_e, *A2_e, *out_e; */
 	/* register int	j; */
@@ -418,10 +399,7 @@ double	s;
 /* mv_mltadd -- matrix-vector multiply and add
 	-- may not be in situ
 	-- returns out == v1 + alpha*A*v2 */
-VEC	*mv_mltadd(v1,v2,A,alpha,out)
-VEC	*v1, *v2, *out;
-MAT	*A;
-double	alpha;
+VEC * mv_mltadd(VEC * v1, VEC * v2, MAT * A, double alpha, VEC * out)
 {
 	/* register	int	j; */
 	int	i, m, n;
@@ -460,10 +438,7 @@ double	alpha;
 /* vm_mltadd -- vector-matrix multiply and add
 	-- may not be in situ
 	-- returns out' == v1' + v2'*A */
-VEC	*vm_mltadd(v1,v2,A,alpha,out)
-VEC	*v1, *v2, *out;
-MAT	*A;
-double	alpha;
+VEC * vm_mltadd(VEC * v1, VEC * v2, MAT * A,double alpha, VEC * out)
 {
 	int	/* i, */ j, m, n;
 	Real	tmp, /* *A_e, */ *out_ve;
diff --git a/interface/src/scilab/src/c/matrix.h b/interface/src/scilab/src/c/matrix.h
index 39990a3..0b72d50 100644
--- a/interface/src/scilab/src/c/matrix.h
+++ b/interface/src/scilab/src/c/matrix.h
@@ -30,7 +30,7 @@
 
 #ifndef	MATRIXH
 
-/* RCS id: $Id: matrix.h 3690 2010-09-02 09:55:19Z lsaavedr $ */
+/* RCS id: $Id: matrix.h 3911 2011-11-16 17:55:09Z ycollet $ */
 
 #define	MATRIXH	
 
@@ -178,8 +178,10 @@ extern  BAND *bd_get(int,int,int), *bd_resize(BAND *,int,int,int);
 /* free (de-allocate) (band) matrices, vectors, permutations and 
    integer vectors */
 extern  int iv_free(IVEC *);
-extern	m_free(MAT *),v_free(VEC *),px_free(PERM *);
-extern   int bd_free(BAND *);
+extern	int m_free(MAT *);
+extern  int v_free(VEC *);
+extern  int px_free(PERM *);
+extern  int bd_free(BAND *);
 
 #endif
 
diff --git a/interface/src/scilab/src/c/sparse.c b/interface/src/scilab/src/c/sparse.c
index 2f74df3..0c2ceee 100644
--- a/interface/src/scilab/src/c/sparse.c
+++ b/interface/src/scilab/src/c/sparse.c
@@ -34,7 +34,7 @@
 #include	"sparse.h"
 
 
-static char	rcsid[] = "$Id: sparse.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static char	rcsid[] = "$Id: sparse.c 3865 2011-11-02 06:38:43Z ycollet $";
 
 #define	MINROWLEN	10
 
@@ -650,9 +650,9 @@ SPMAT	*A;
 }
 
 /* sp_copy2 -- copy sparse matrix (type 2) 
-   -- keeps structure of the OUT matrix */
-SPMAT	*sp_copy2(A,OUT)
-SPMAT	*A, *OUT;
+   -- keeps structure of the out matrix */
+SPMAT	*sp_copy2(A,out)
+SPMAT	*A, *out;
 {
    int	i /* , idx, len1, len2 */;
    SPROW	*r1, *r2;
@@ -661,45 +661,45 @@ SPMAT	*A, *OUT;
    
    if ( ! A )
      error(E_NULL,"sp_copy2");
-   if ( ! OUT )
-     OUT = sp_get(A->m,A->n,10);
+   if ( ! out )
+     out = sp_get(A->m,A->n,10);
    if ( ! scratch ) {
       scratch = sprow_xpd(scratch,MINROWLEN,TYPE_SPROW);
       MEM_STAT_REG(scratch,TYPE_SPROW);
    }
 
-   if ( OUT->m < A->m )
+   if ( out->m < A->m )
    {
       if (mem_info_is_on()) {
 	 mem_bytes(TYPE_SPMAT,A->max_m*sizeof(SPROW),
 		      A->m*sizeof(SPROW));
       }
 
-      OUT->row = RENEW(OUT->row,A->m,SPROW);
-      if ( ! OUT->row )
+      out->row = RENEW(out->row,A->m,SPROW);
+      if ( ! out->row )
 	error(E_MEM,"sp_copy2");
       
-      for ( i = OUT->m; i < A->m; i++ )
+      for ( i = out->m; i < A->m; i++ )
       {
-	 OUT->row[i].elt = NEW_A(MINROWLEN,row_elt);
-	 if ( ! OUT->row[i].elt )
+	 out->row[i].elt = NEW_A(MINROWLEN,row_elt);
+	 if ( ! out->row[i].elt )
 	   error(E_MEM,"sp_copy2");
 	 else if (mem_info_is_on()) {
 	    mem_bytes(TYPE_SPMAT,0,MINROWLEN*sizeof(row_elt));
 	 }
 	 
-	 OUT->row[i].maxlen = MINROWLEN;
-	 OUT->row[i].len = 0;
+	 out->row[i].maxlen = MINROWLEN;
+	 out->row[i].len = 0;
       }
-      OUT->m = A->m;
+      out->m = A->m;
    }
    
-   OUT->flag_col = OUT->flag_diag = FALSE;
-   /* sp_zero(OUT); */
+   out->flag_col = out->flag_diag = FALSE;
+   /* sp_zero(out); */
 
    for ( i = 0; i < A->m; i++ )
    {
-      r1 = &(A->row[i]);	r2 = &(OUT->row[i]);
+      r1 = &(A->row[i]);	r2 = &(out->row[i]);
       sprow_copy(r1,r2,scratch,TYPE_SPROW);
       if ( r2->maxlen < scratch->len )
 	sprow_xpd(r2,scratch->len,TYPE_SPMAT);
@@ -716,8 +716,8 @@ SPMAT	*A, *OUT;
 	*******************************************************/
    }
 
-   sp_col_access(OUT);
-   return OUT;
+   sp_col_access(out);
+   return out;
 }
 
 /* sp_resize -- resize a sparse matrix
diff --git a/interface/src/scilab/src/c/spbkp.c b/interface/src/scilab/src/c/spbkp.c
index b1daf69..c5a8320 100644
--- a/interface/src/scilab/src/c/spbkp.c
+++ b/interface/src/scilab/src/c/spbkp.c
@@ -27,11 +27,11 @@
 /*
   Sparse matrix Bunch--Kaufman--Parlett factorisation and solve
   Radical revision started Thu 05th Nov 1992, 09:36:12 AM
-  to use Karen George's suggestion of leaving the the row elements unordered
+  to use Karen George's suggestion of leaving the row elements unordered
   Radical revision completed Mon 07th Dec 1992, 10:59:57 AM
 */
 
-static	char	rcsid[] = "$Id: spbkp.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static	char	rcsid[] = "$Id: spbkp.c 4023 2012-02-15 10:06:09Z logari81 $";
 
 #include	<stdio.h>
 #include        "sparse2.h"
diff --git a/interface/src/scilab/src/c/zfunc.c b/interface/src/scilab/src/c/zfunc.c
index b028347..4531ef0 100644
--- a/interface/src/scilab/src/c/zfunc.c
+++ b/interface/src/scilab/src/c/zfunc.c
@@ -28,10 +28,10 @@
 	-- if not already defined
 */
 
-#include	"zmatrix.h"
 #include	<math.h>
+#include	"zmatrix.h"
 
-static char rcsid[] = "$Id: zfunc.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static char rcsid[] = "$Id: zfunc.c 3916 2011-11-17 17:47:20Z ycollet $";
 
 #ifndef COMPLEX_H
 
@@ -49,8 +49,7 @@ double	real, imag;
 
 #ifndef zneg
 /* zneg -- returns negative of z */
-complex	zneg(z)
-complex	z;
+complex	zneg(complex z)
 {
     z.re = - z.re;
     z.im = - z.im;
@@ -61,8 +60,7 @@ complex	z;
 
 #ifndef zabs
 /* zabs -- returns |z| */
-double	zabs(z)
-complex	z;
+double	zabs(complex z)
 {
     Real	x, y, tmp;
     int		x_expt, y_expt;
@@ -89,8 +87,7 @@ complex	z;
 
 #ifndef zadd
 /* zadd -- returns z1+z2 */
-complex zadd(z1,z2)
-complex	z1, z2;
+complex zadd(complex z1, complex z2)
 {
     complex z;
 
@@ -103,8 +100,7 @@ complex	z1, z2;
 
 #ifndef zsub
 /* zsub -- returns z1-z2 */
-complex zsub(z1,z2)
-complex	z1, z2;
+complex zsub(complex z1, complex z2)
 {
     complex z;
 
@@ -117,8 +113,7 @@ complex	z1, z2;
 
 #ifndef zmlt
 /* zmlt -- returns z1*z2 */
-complex	zmlt(z1,z2)
-complex	z1, z2;
+complex	zmlt(complex z1, complex z2)
 {
     complex z;
 
@@ -131,8 +126,7 @@ complex	z1, z2;
 
 #ifndef zinv
 /* zmlt -- returns 1/z */
-complex	zinv(z)
-complex	z;
+complex	zinv(complex z)
 {
     Real	x, y, tmp;
     int		x_expt, y_expt;
@@ -162,8 +156,7 @@ complex	z;
 
 #ifndef zdiv
 /* zdiv -- returns z1/z2 */
-complex	zdiv(z1,z2)
-complex	z1, z2;
+complex	zdiv(complex z1, complex z2)
 {
     return zmlt(z1,zinv(z2));
 }
@@ -171,8 +164,7 @@ complex	z1, z2;
 
 #ifndef zsqrt
 /* zsqrt -- returns sqrt(z); uses branch with Re sqrt(z) >= 0 */
-complex	zsqrt(z)
-complex	z;
+complex	zsqrt(complex z)
 {
     complex	w;	/* == sqrt(z) at end */
     Real	alpha;
@@ -195,8 +187,7 @@ complex	z;
 
 #ifndef	zexp
 /* zexp -- returns exp(z) */
-complex	zexp(z)
-complex	z;
+complex	zexp(complex z)
 {
     complex	w;	/* == exp(z) at end */
     Real	r;
@@ -211,8 +202,7 @@ complex	z;
 
 #ifndef	zlog
 /* zlog -- returns log(z); uses principal branch with -pi <= Im log(z) <= pi */
-complex	zlog(z)
-complex	z;
+complex	zlog(complex z)
 {
     complex	w;	/* == log(z) at end */
 
@@ -224,8 +214,7 @@ complex	z;
 #endif
 
 #ifndef zconj
-complex	zconj(z)
-complex	z;
+complex	zconj(complex z)
 {
     complex	w;	/* == conj(z) */
 
diff --git a/interface/src/scilab/src/c/zgivens.c b/interface/src/scilab/src/c/zgivens.c
index f9f786c..29e1a6c 100644
--- a/interface/src/scilab/src/c/zgivens.c
+++ b/interface/src/scilab/src/c/zgivens.c
@@ -35,10 +35,11 @@
 static	char	rcsid[] = "$Id: ";
 
 #include	<stdio.h>
-#include	"zmatrix.h"
-#include        "zmatrix2.h"
 #include	<math.h>
 
+#include	"zmatrix.h"
+#include    "zmatrix2.h"
+
 /*
 	(Complex) Givens rotation matrix:
 		[ c   -s ]
diff --git a/interface/src/scilab/src/c/zhsehldr.c b/interface/src/scilab/src/c/zhsehldr.c
index 8d0f3ac..fff9e57 100644
--- a/interface/src/scilab/src/c/zhsehldr.c
+++ b/interface/src/scilab/src/c/zhsehldr.c
@@ -34,13 +34,14 @@
 	Complex version
 */
 
-static	char	rcsid[] = "$Id: zhsehldr.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static	char	rcsid[] = "$Id: zhsehldr.c 3865 2011-11-02 06:38:43Z ycollet $";
 
 #include	<stdio.h>
-#include	"zmatrix.h"
-#include        "zmatrix2.h"
 #include	<math.h>
 
+#include	"zmatrix.h"
+#include    "zmatrix2.h"
+
 #define	is_zero(z)	((z).re == 0.0 && (z).im == 0.0)
 
 /* zhhvec -- calulates Householder vector to eliminate all entries after the
diff --git a/interface/src/scilab/src/c/zlufctr.c b/interface/src/scilab/src/c/zlufctr.c
index e1f6cd9..7bf4c53 100644
--- a/interface/src/scilab/src/c/zlufctr.c
+++ b/interface/src/scilab/src/c/zlufctr.c
@@ -28,13 +28,14 @@
 	Complex version
 */
 
-static	char	rcsid[] = "$Id: zlufctr.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static	char	rcsid[] = "$Id: zlufctr.c 3865 2011-11-02 06:38:43Z ycollet $";
 
 #include	<stdio.h>
-#include	"zmatrix.h"
-#include        "zmatrix2.h"
 #include	<math.h>
 
+#include	"zmatrix.h"
+#include    "zmatrix2.h"
+
 #define	is_zero(z)	((z).re == 0.0 && (z).im == 0.0)
 
 
diff --git a/interface/src/scilab/src/c/zmachine.c b/interface/src/scilab/src/c/zmachine.c
index a76ee90..0f17b2d 100644
--- a/interface/src/scilab/src/c/zmachine.c
+++ b/interface/src/scilab/src/c/zmachine.c
@@ -31,17 +31,16 @@
   full advantage of specialised architectures (pipelining, vector
   processors etc).
   */
-static	char	*rcsid = "$Id: zmachine.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static	char	*rcsid = "$Id: zmachine.c 3865 2011-11-02 06:38:43Z ycollet $";
 
-#include	"machine.h"
-#include        "zmatrix.h"
 #include	<math.h>
 
+#include	"machine.h"
+#include    "zmatrix.h"
+
 
 /* __zconj__ -- complex conjugate */
-void	__zconj__(zp,len)
-complex	*zp;
-int	len;
+void	__zconj__(complex * zp, int len)
 {
     int		i;
 
diff --git a/interface/src/scilab/src/c/zmatop.c b/interface/src/scilab/src/c/zmatop.c
index c587c0e..f5b0a46 100644
--- a/interface/src/scilab/src/c/zmatop.c
+++ b/interface/src/scilab/src/c/zmatop.c
@@ -28,7 +28,7 @@
 #include	<stdio.h>
 #include	"zmatrix.h"
 
-static	char	rcsid[] = "$Id: zmatop.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static	char	rcsid[] = "$Id: zmatop.c 3865 2011-11-02 06:38:43Z ycollet $";
 
 
 #define	is_zero(z)	((z).re == 0.0 && (z).im == 0.0)
@@ -90,8 +90,8 @@ ZMAT	*mat1,*mat2,*out;
   */
 
 /* zm_mlt -- matrix-matrix multiplication */
-ZMAT	*zm_mlt(A,B,OUT)
-ZMAT	*A,*B,*OUT;
+ZMAT	*zm_mlt(A,B,out)
+ZMAT	*A,*B,*out;
 {
     u_int	i, /* j, */ k, m, n, p;
     complex	**A_v, **B_v /*, *B_row, *OUT_row, sum, tmp */;
@@ -100,13 +100,13 @@ ZMAT	*A,*B,*OUT;
 	error(E_NULL,"zm_mlt");
     if ( A->n != B->m )
 	error(E_SIZES,"zm_mlt");
-    if ( A == OUT || B == OUT )
+    if ( A == out || B == out )
 	error(E_INSITU,"zm_mlt");
     m = A->m;	n = A->n;	p = B->n;
     A_v = A->me;		B_v = B->me;
     
-    if ( OUT==ZMNULL || OUT->m != A->m || OUT->n != B->n )
-	OUT = zm_resize(OUT,A->m,B->n);
+    if ( out==ZMNULL || out->m != A->m || out->n != B->n )
+	out = zm_resize(out,A->m,B->n);
     
     /****************************************************************
       for ( i=0; i<m; i++ )
@@ -115,90 +115,90 @@ ZMAT	*A,*B,*OUT;
       sum = 0.0;
       for ( k=0; k<n; k++ )
       sum += A_v[i][k]*B_v[k][j];
-      OUT->me[i][j] = sum;
+      out->me[i][j] = sum;
       }
     ****************************************************************/
-    zm_zero(OUT);
+    zm_zero(out);
     for ( i=0; i<m; i++ )
 	for ( k=0; k<n; k++ )
 	{
 	    if ( ! is_zero(A_v[i][k]) )
-		__zmltadd__(OUT->me[i],B_v[k],A_v[i][k],(int)p,Z_NOCONJ);
+		__zmltadd__(out->me[i],B_v[k],A_v[i][k],(int)p,Z_NOCONJ);
 	    /**************************************************
-	      B_row = B_v[k];	OUT_row = OUT->me[i];
+	      B_row = B_v[k];	out_row = out->me[i];
 	      for ( j=0; j<p; j++ )
-	      (*OUT_row++) += tmp*(*B_row++);
+	      (*out_row++) += tmp*(*B_row++);
 	    **************************************************/
 	}
     
-    return OUT;
+    return out;
 }
 
 /* zmma_mlt -- matrix-matrix adjoint multiplication
-   -- A.B* is returned, and stored in OUT */
-ZMAT	*zmma_mlt(A,B,OUT)
-ZMAT	*A, *B, *OUT;
+   -- A.B* is returned, and stored in out */
+ZMAT	*zmma_mlt(A,B,out)
+ZMAT	*A, *B, *out;
 {
     int	i, j, limit;
     /* complex	*A_row, *B_row, sum; */
     
     if ( ! A || ! B )
 	error(E_NULL,"zmma_mlt");
-    if ( A == OUT || B == OUT )
+    if ( A == out || B == out )
 	error(E_INSITU,"zmma_mlt");
     if ( A->n != B->n )
 	error(E_SIZES,"zmma_mlt");
-    if ( ! OUT || OUT->m != A->m || OUT->n != B->m )
-	OUT = zm_resize(OUT,A->m,B->m);
+    if ( ! out || out->m != A->m || out->n != B->m )
+	out = zm_resize(out,A->m,B->m);
     
     limit = A->n;
     for ( i = 0; i < A->m; i++ )
 	for ( j = 0; j < B->m; j++ )
 	{
-	    OUT->me[i][j] = __zip__(B->me[j],A->me[i],(int)limit,Z_CONJ);
+	    out->me[i][j] = __zip__(B->me[j],A->me[i],(int)limit,Z_CONJ);
 	    /**************************************************
 	      sum = 0.0;
 	      A_row = A->me[i];
 	      B_row = B->me[j];
 	      for ( k = 0; k < limit; k++ )
 	      sum += (*A_row++)*(*B_row++);
-	      OUT->me[i][j] = sum;
+	      out->me[i][j] = sum;
 	      **************************************************/
 	}
     
-    return OUT;
+    return out;
 }
 
 /* zmam_mlt -- matrix adjoint-matrix multiplication
-   -- A*.B is returned, result stored in OUT */
-ZMAT	*zmam_mlt(A,B,OUT)
-ZMAT	*A, *B, *OUT;
+   -- A*.B is returned, result stored in out */
+ZMAT	*zmam_mlt(A,B,out)
+ZMAT	*A, *B, *out;
 {
     int	i, k, limit;
-    /* complex	*B_row, *OUT_row, multiplier; */
+    /* complex	*B_row, *out_row, multiplier; */
     complex	tmp;
     
     if ( ! A || ! B )
 	error(E_NULL,"zmam_mlt");
-    if ( A == OUT || B == OUT )
+    if ( A == out || B == out )
 	error(E_INSITU,"zmam_mlt");
     if ( A->m != B->m )
 	error(E_SIZES,"zmam_mlt");
-    if ( ! OUT || OUT->m != A->n || OUT->n != B->n )
-	OUT = zm_resize(OUT,A->n,B->n);
+    if ( ! out || out->m != A->n || out->n != B->n )
+	out = zm_resize(out,A->n,B->n);
     
     limit = B->n;
-    zm_zero(OUT);
+    zm_zero(out);
     for ( k = 0; k < A->m; k++ )
 	for ( i = 0; i < A->n; i++ )
 	{
 	    tmp.re =   A->me[k][i].re;
 	    tmp.im = - A->me[k][i].im;
 	    if ( ! is_zero(tmp) )
-		__zmltadd__(OUT->me[i],B->me[k],tmp,(int)limit,Z_NOCONJ);
+		__zmltadd__(out->me[i],B->me[k],tmp,(int)limit,Z_NOCONJ);
 	}
     
-    return OUT;
+    return out;
 }
 
 /* zmv_mlt -- matrix-vector multiplication 
diff --git a/interface/src/scilab/src/c/zmatrix.h b/interface/src/scilab/src/c/zmatrix.h
index 8eeef59..cc110e1 100644
--- a/interface/src/scilab/src/c/zmatrix.h
+++ b/interface/src/scilab/src/c/zmatrix.h
@@ -31,14 +31,13 @@
 
 #include "matrix.h"
 
-
-          /*  Type definitions for complex vectors and matrices  */
+/*  Type definitions for complex vectors and matrices  */
 
 
 /* complex definition */
 typedef struct  {
                 Real re,im;
-        } complex;
+                } complex;
 
 /* complex vector definition */
 typedef struct  {
diff --git a/interface/src/scilab/src/c/zqrfctr.c b/interface/src/scilab/src/c/zqrfctr.c
index a672606..7d2e280 100644
--- a/interface/src/scilab/src/c/zqrfctr.c
+++ b/interface/src/scilab/src/c/zqrfctr.c
@@ -38,13 +38,13 @@
   
 */
 
-static	char	rcsid[] = "$Id: zqrfctr.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static	char	rcsid[] = "$Id: zqrfctr.c 3865 2011-11-02 06:38:43Z ycollet $";
 
 #include	<stdio.h>
-#include	"zmatrix.h"
-#include	"zmatrix2.h" 
 #include	<math.h>
 
+#include	"zmatrix.h"
+#include	"zmatrix2.h" 
 
 #define	is_zero(z)	((z).re == 0.0 && (z).im == 0.0)
 
diff --git a/interface/src/scilab/src/c/zschur.c b/interface/src/scilab/src/c/zschur.c
index 55c4c74..5158684 100644
--- a/interface/src/scilab/src/c/zschur.c
+++ b/interface/src/scilab/src/c/zschur.c
@@ -32,10 +32,10 @@
 
 
 #include	<stdio.h>
-#include	"zmatrix.h"
-#include        "zmatrix2.h"
 #include	<math.h>
 
+#include	"zmatrix.h"
+#include    "zmatrix2.h"
 
 #define	is_zero(z)	((z).re == 0.0 && (z).im == 0.0)
 #define	b2s(t_or_f)	((t_or_f) ? "TRUE" : "FALSE")
diff --git a/interface/src/scilab/src/c/zsolve.c b/interface/src/scilab/src/c/zsolve.c
index fccd671..300b8e4 100644
--- a/interface/src/scilab/src/c/zsolve.c
+++ b/interface/src/scilab/src/c/zsolve.c
@@ -29,12 +29,12 @@
 	Complex case
 */
 
-static	char	rcsid[] = "$Id: zsolve.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static	char	rcsid[] = "$Id: zsolve.c 3865 2011-11-02 06:38:43Z ycollet $";
 
 #include	<stdio.h>
-#include        "zmatrix2.h"
 #include	<math.h>
 
+#include    "zmatrix2.h"
 
 #define	is_zero(z)	((z).re == 0.0 && (z).im == 0.0 )
 
diff --git a/interface/src/scilab/demos/check_all.sce b/interface/src/scilab/tests/unit_tests/check_all.sce
similarity index 100%
rename from interface/src/scilab/demos/check_all.sce
rename to interface/src/scilab/tests/unit_tests/check_all.sce
diff --git a/interface/src/scilab/demos/check_asm.sce b/interface/src/scilab/tests/unit_tests/check_asm.sce
similarity index 100%
rename from interface/src/scilab/demos/check_asm.sce
rename to interface/src/scilab/tests/unit_tests/check_asm.sce
diff --git a/interface/src/scilab/demos/check_bricks.sce b/interface/src/scilab/tests/unit_tests/check_bricks.sce
similarity index 100%
rename from interface/src/scilab/demos/check_bricks.sce
rename to interface/src/scilab/tests/unit_tests/check_bricks.sce
diff --git a/interface/src/scilab/demos/check_fem.sce b/interface/src/scilab/tests/unit_tests/check_fem.sce
similarity index 100%
rename from interface/src/scilab/demos/check_fem.sce
rename to interface/src/scilab/tests/unit_tests/check_fem.sce
diff --git a/interface/src/scilab/demos/check_geotrans.sce b/interface/src/scilab/tests/unit_tests/check_geotrans.sce
similarity index 100%
rename from interface/src/scilab/demos/check_geotrans.sce
rename to interface/src/scilab/tests/unit_tests/check_geotrans.sce
diff --git a/interface/src/scilab/demos/check_integ.sce b/interface/src/scilab/tests/unit_tests/check_integ.sce
similarity index 100%
rename from interface/src/scilab/demos/check_integ.sce
rename to interface/src/scilab/tests/unit_tests/check_integ.sce
diff --git a/interface/src/scilab/demos/check_interpolated_fem.sce b/interface/src/scilab/tests/unit_tests/check_interpolated_fem.sce
similarity index 100%
rename from interface/src/scilab/demos/check_interpolated_fem.sce
rename to interface/src/scilab/tests/unit_tests/check_interpolated_fem.sce
diff --git a/interface/src/scilab/demos/check_levelset.sce b/interface/src/scilab/tests/unit_tests/check_levelset.sce
similarity index 100%
rename from interface/src/scilab/demos/check_levelset.sce
rename to interface/src/scilab/tests/unit_tests/check_levelset.sce
diff --git a/interface/src/scilab/demos/check_mesh_fem.sce b/interface/src/scilab/tests/unit_tests/check_mesh_fem.sce
similarity index 100%
rename from interface/src/scilab/demos/check_mesh_fem.sce
rename to interface/src/scilab/tests/unit_tests/check_mesh_fem.sce
diff --git a/interface/src/scilab/demos/check_oo.sce b/interface/src/scilab/tests/unit_tests/check_oo.sce
similarity index 100%
rename from interface/src/scilab/demos/check_oo.sce
rename to interface/src/scilab/tests/unit_tests/check_oo.sce
diff --git a/interface/src/scilab/demos/check_plot.sce b/interface/src/scilab/tests/unit_tests/check_plot.sce
similarity index 100%
rename from interface/src/scilab/demos/check_plot.sce
rename to interface/src/scilab/tests/unit_tests/check_plot.sce
diff --git a/interface/src/scilab/demos/check_slices.sce b/interface/src/scilab/tests/unit_tests/check_slices.sce
similarity index 100%
rename from interface/src/scilab/demos/check_slices.sce
rename to interface/src/scilab/tests/unit_tests/check_slices.sce
diff --git a/interface/src/scilab/demos/check_solve.sce b/interface/src/scilab/tests/unit_tests/check_solve.sce
similarity index 100%
rename from interface/src/scilab/demos/check_solve.sce
rename to interface/src/scilab/tests/unit_tests/check_solve.sce
diff --git a/interface/src/scilab/demos/check_spmat.sce b/interface/src/scilab/tests/unit_tests/check_spmat.sce
similarity index 100%
rename from interface/src/scilab/demos/check_spmat.sce
rename to interface/src/scilab/tests/unit_tests/check_spmat.sce
diff --git a/interface/src/scilab/demos/check_workspace.sce b/interface/src/scilab/tests/unit_tests/check_workspace.sce
similarity index 100%
rename from interface/src/scilab/demos/check_workspace.sce
rename to interface/src/scilab/tests/unit_tests/check_workspace.sce
diff --git a/interface/src/scilab/demos/test_argyris.sce b/interface/src/scilab/tests/unit_tests/test_argyris.sce
similarity index 100%
rename from interface/src/scilab/demos/test_argyris.sce
rename to interface/src/scilab/tests/unit_tests/test_argyris.sce
diff --git a/interface/src/scilab/tests/unit_tests/test_plasticity_new_brick.sce b/interface/src/scilab/tests/unit_tests/test_plasticity_new_brick.sce
new file mode 100644
index 0000000..b0d25f5
--- /dev/null
+++ b/interface/src/scilab/tests/unit_tests/test_plasticity_new_brick.sce
@@ -0,0 +1,157 @@
+gf_workspace('clear all');
+
+//
+
+// We try to compute a plasticity problem with a Von Mises crierion
+// For convenience we consider an homogenous Dirichlet condition on the left
+// of the domain and an easy computed Neumann Condition on the right
+
+//
+
+// Initialize used data
+L      = 100;
+H      = 20;
+lambda = 121150;
+mu     = 80769;
+von_mises_threshold = 8000;
+f = [0 -330]';
+t = [0 0.9032 1 1.1 1.3 1.5 1.7 1.74 1.7 1.5 1.3 1.1 1 0.9032 0.7 0.5 0.3 0.1 0];
+
+// Create the mesh
+m = gf_mesh('triangles grid', [0:4:L], [0:2:H]);
+
+// Plotting
+h_graph = scf();
+h_graph.color_map = jetcolormap(256);
+drawlater;
+gf_plot_mesh(m, 'vertices', 'on', 'convexes', 'on');
+drawnow;
+
+// Define used MeshIm
+mim = gf_mesh_im(m);  gf_mesh_im_set(mim, 'integ', gf_integ('IM_TRIANGLE(6)')); // Gauss methods on triangles
+
+// Define used MeshFem
+mf_u     = gf_mesh_fem(m,2); gf_mesh_fem_set(mf_u,     'fem', gf_fem('FEM_PK(2,2)'));
+mf_data  = gf_mesh_fem(m);   gf_mesh_fem_set(mf_data,  'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,0)'));
+mf_sigma = gf_mesh_fem(m,4); gf_mesh_fem_set(mf_sigma, 'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,1)'));
+mf_err   = gf_mesh_fem(m);   gf_mesh_fem_set(mf_err,   'fem', gf_fem('FEM_PK(2,0)'));
+mf_vm    = gf_mesh_fem(m);   gf_mesh_fem_set(mf_vm,    'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,1)'));
+mf_pl    = gf_mesh_fem(m);   gf_mesh_fem_set(mf_pl,    'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,1)'));
+
+// Find the border of the domain
+P = gf_mesh_get(m, 'pts');
+pidleft  = find(abs(P(1,:))<1e-6); // Retrieve index of points which x near to 0
+pidright = find(abs(P(1,:) - L)<1e-6); // Retrieve index of points which x near to L
+fleft    = gf_mesh_get(m, 'faces from pid', pidleft); 
+fright   = gf_mesh_get(m, 'faces from pid', pidright);
+
+// Decomposed the mesh into 2 regions with different values of Lamé coeff
+CV       = gf_mesh_get(m, 'cvid');
+CVbottom = find(CV <= 250); // Retrieve index of convex located at the bottom
+CVtop    = find(CV > 250);  // Retrieve index of convex located at the top
+
+// Definition of Lame coeff
+lambda(CVbottom) = 121150; // Stell
+lambda(CVtop)    = 84605;  // Iron
+//lambda(CV) = 84605;
+mu(CVbottom) = 80769; // Stell
+mu(CVtop)    = 77839; // Iron
+//mu(CV) = 77839;
+von_mises_threshold(CVbottom) = 7000;
+von_mises_threshold(CVtop)    = 8000;
+
+// Assign boundary numbers
+gf_mesh_set(m,'boundary',1,fleft);  // for Dirichlet condition
+gf_mesh_set(m,'boundary',2,fright); // for Neumann condition
+
+// Create the model
+md = gf_model('real');
+
+// Declare that u is the unknown of the system on mf_u
+// 2 is the number of version of the data stored, for the time integration scheme 
+gf_model_set(md, 'add fem variable', 'u', mf_u, 2); 
+
+// Declare that lambda is a data of the system on mf_data
+gf_model_set(md, 'add initialized fem data', 'lambda', mf_data, lambda);
+
+// Declare that mu is a data of the system on mf_data
+gf_model_set(md, 'add initialized fem data', 'mu', mf_data, mu);
+
+// Declare that von_mises_threshold is a data of the system on mf_data
+gf_model_set(md, 'add initialized fem data', 'von_mises_threshold', mf_data, von_mises_threshold);
+
+// Declare that sigma is a data of the system on mf_sigma
+// 2 is the number of version of the data stored, for the time integration scheme
+gf_model_set(md, 'add fem data', 'sigma', mf_sigma);
+
+// Add plasticity brick on u
+gf_model_set(md, 'add elastoplasticity brick', mim, 'VM', 'u', 'lambda', 'mu', 'von_mises_threshold', 'sigma');
+
+// Add homogeneous Dirichlet condition to u on the left hand side of the domain
+gf_model_set(md, 'add Dirichlet condition with multipliers', mim, 'u', mf_u, 1);
+
+// Add a source term to the system
+gf_model_set(md,'add initialized fem data', 'VolumicData', mf_data, gf_mesh_fem_get_eval(mf_data, list(list(f(1,1)),list(f(2,1)*t(1)))));
+gf_model_set(md, 'add source term brick', mim, 'u', 'VolumicData', 2);
+
+VM = zeros(1,gf_mesh_fem_get(mf_vm, 'nbdof'));
+
+nbstep = size(t,2);
+
+dd = gf_mesh_fem_get(mf_err, 'basic dof from cvid');
+
+h_graph_2 = scf();
+h_graph_2.color_map = jetcolormap(256);
+
+h_graph_3 = scf();
+h_graph_3.color_map = jetcolormap(256);
+
+for step=1:nbstep,
+  if step > 1 then
+    gf_model_set(md, 'variable', 'VolumicData', gf_mesh_fem_get_eval(mf_data, list(list(f(1,1)),list(f(2,1)*t(step)))));
+  end
+
+  // Solve the system
+  gf_model_get(md, 'solve','lsolver', 'superlu', 'lsearch', 'simplest',  'alpha min', 0.8, 'very noisy', 'max_iter', 100, 'max_res', 1e-6);
+
+  // Retrieve the solution U
+  U = gf_model_get(md, 'variable', 'u', 0);
+    
+  // Compute new plasticity constraints used to compute 
+  // the Von Mises or Tresca stress
+  gf_model_get(md, 'elastoplasticity next iter', mim, 'u', 'VM', 'lambda', 'mu', 'von_mises_threshold', 'sigma');
+  plast = gf_model_get(md, 'compute plastic part', mim, mf_pl, 'u', 'VM', 'lambda', 'mu', 'von_mises_threshold', 'sigma');
+      
+  // Compute Von Mises or Tresca stress
+  VM = gf_model_get(md, 'compute elastoplasticity Von Mises or Tresca', 'sigma', mf_vm, 'Von Mises');
+  
+  scf(h_graph_2);
+  drawlater;
+  clf(h_graph_2);
+  subplot(2,1,1);
+  gf_plot(mf_vm,VM,'deformed_mesh', 'on', 'deformation', U, 'deformation_mf', mf_u, 'refine', 4, 'deformation_scale',1); 
+  colorbar(min(VM),max(VM));
+
+  n = t(step);
+  title(['Von Mises criterion for t = ', string(n)]);
+  
+  ERR = gf_compute(mf_u, U, 'error estimate', mim);
+  E = ERR; E(dd) = ERR;
+
+  subplot(2,1,2);
+  gf_plot(mf_err, E, 'mesh','on', 'refine', 1); 
+  colorbar(min(E),max(E));
+  title('Error estimate');
+  drawnow;
+
+  scf(h_graph_3);
+  drawlater;
+  clf(h_graph_3);
+  gf_plot(mf_pl,plast,'deformed_mesh','on', 'deformation',U,'deformation_mf',mf_u,'refine', 4, 'deformation_scale',1); 
+  colorbar(min(plast),max(plast));
+  n = t(step);
+  title(['Plastification for t = ', string(n)]);
+  drawnow;
+
+  sleep(1000);
+end
diff --git a/interface/tests/Makefile.in b/interface/tests/Makefile.in
index fec864c..4b242da 100644
--- a/interface/tests/Makefile.in
+++ b/interface/tests/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -116,6 +116,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -134,6 +135,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -150,6 +152,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -214,6 +217,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -249,7 +253,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -520,10 +523,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/interface/tests/matlab/Makefile.am b/interface/tests/matlab/Makefile.am
index 2eb87bb..390fadd 100644
--- a/interface/tests/matlab/Makefile.am
+++ b/interface/tests/matlab/Makefile.am
@@ -29,8 +29,10 @@ EXTRA_DIST= \
 	demo_nonlinear_elasticity.m \
 	demo_nonlinear_elasticity_anim.m \
 	demo_plasticity.m \
+	demo_continuation.m \
 	demo_crack.m \
 	demo_mortar.m \
+	demo_mesh_generation.m \
 	demo_topological_optimization.m \
 	demo_structural_optimization.m \
 	demo_refine.m \
@@ -41,11 +43,14 @@ EXTRA_DIST= \
 	demo_stokes_3D_tank_alt.m \
 	demo_stokes_3D_tank_draw.m \
 	demo_tripod.m \
+	demo_Navier_Stokes.m \
 	demo_convection_rotating_cavity.m \
 	demo_tripod_alt.m \
 	demo_tripod_slice_anim.m \
 	demo_fictitious_domains.m \
+	demo_fictitious_domains_laplacian.m \
 	demo_static_contact.m \
+	demo_large_sliding_contact.m \
 	demo_wave2D.m \
 	demo_wave2D_alt.m \
 	demo_wave_equation.m \
diff --git a/interface/tests/matlab/Makefile.in b/interface/tests/matlab/Makefile.in
index 99f683f..fa07f6d 100644
--- a/interface/tests/matlab/Makefile.in
+++ b/interface/tests/matlab/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -72,6 +72,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(toolboxdir)"
 SCRIPTS = $(toolbox_SCRIPTS)
 SOURCES =
@@ -143,6 +149,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -161,6 +168,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -177,6 +185,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -241,6 +250,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -276,7 +286,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -319,8 +328,10 @@ EXTRA_DIST = \
 	demo_nonlinear_elasticity.m \
 	demo_nonlinear_elasticity_anim.m \
 	demo_plasticity.m \
+	demo_continuation.m \
 	demo_crack.m \
 	demo_mortar.m \
+	demo_mesh_generation.m \
 	demo_topological_optimization.m \
 	demo_structural_optimization.m \
 	demo_refine.m \
@@ -331,11 +342,14 @@ EXTRA_DIST = \
 	demo_stokes_3D_tank_alt.m \
 	demo_stokes_3D_tank_draw.m \
 	demo_tripod.m \
+	demo_Navier_Stokes.m \
 	demo_convection_rotating_cavity.m \
 	demo_tripod_alt.m \
 	demo_tripod_slice_anim.m \
 	demo_fictitious_domains.m \
+	demo_fictitious_domains_laplacian.m \
 	demo_static_contact.m \
+	demo_large_sliding_contact.m \
 	demo_wave2D.m \
 	demo_wave2D_alt.m \
 	demo_wave_equation.m \
@@ -418,9 +432,7 @@ uninstall-toolboxSCRIPTS:
 	@list='$(toolbox_SCRIPTS)'; test -n "$(toolboxdir)" || exit 0; \
 	files=`for p in $$list; do echo "$$p"; done | \
 	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(toolboxdir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(toolboxdir)" && rm -f $$files
+	dir='$(DESTDIR)$(toolboxdir)'; $(am__uninstall_files_from_dir)
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -644,14 +656,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -732,10 +745,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/interface/tests/matlab/axrot_matrix.m b/interface/tests/matlab/axrot_matrix.m
old mode 100755
new mode 100644
index c6a1e6b..0072536
--- a/interface/tests/matlab/axrot_matrix.m
+++ b/interface/tests/matlab/axrot_matrix.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2004-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 function R=axrot_matrix(A, B, theta)
   n=(B-A); n = n/norm(n);
   a=n(1); b=n(2); c=n(3); 
@@ -10,4 +27,4 @@ function R=axrot_matrix(A, B, theta)
   Ry=eye(4); Ry([1 3],[1 3])=[d -a; a d];
   Rz=eye(4); Rz(1:2,1:2)=[cos(theta) sin(theta); -sin(theta) cos(theta)];
   R = inv(T)*inv(Rx)*inv(Ry)*Rz*Ry*Rx*T;
-  
\ No newline at end of file
+  
diff --git a/interface/tests/matlab/check_all.m b/interface/tests/matlab/check_all.m
old mode 100755
new mode 100644
index 0ef0a05..1f042e0
--- a/interface/tests/matlab/check_all.m
+++ b/interface/tests/matlab/check_all.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 errcnt=0;
 t = 'check_integ [integration methods]            ';
 try
diff --git a/interface/tests/matlab/check_asm.m b/interface/tests/matlab/check_asm.m
index 2709549..a41781b 100644
--- a/interface/tests/matlab/check_asm.m
+++ b/interface/tests/matlab/check_asm.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 function check_asm(iverbose,idebug)
   global gverbose;
   global gdebug;  
diff --git a/interface/tests/matlab/check_bricks.m b/interface/tests/matlab/check_bricks.m
index f2e8e23..8838c33 100644
--- a/interface/tests/matlab/check_bricks.m
+++ b/interface/tests/matlab/check_bricks.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 function check_bricks(iverbose,idebug)
   global gverbose;
   global gdebug;  
diff --git a/interface/tests/matlab/check_fem.m b/interface/tests/matlab/check_fem.m
index 5318def..010a18a 100644
--- a/interface/tests/matlab/check_fem.m
+++ b/interface/tests/matlab/check_fem.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 function check_fem(iverbose,idebug)
   global gverbose;
   global gdebug;  
diff --git a/interface/tests/matlab/check_geotrans.m b/interface/tests/matlab/check_geotrans.m
index 177b450..95a832f 100644
--- a/interface/tests/matlab/check_geotrans.m
+++ b/interface/tests/matlab/check_geotrans.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 function check_geotrans(iverbose,idebug)
   global gverbose;
   global gdebug;  
diff --git a/interface/tests/matlab/check_integ.m b/interface/tests/matlab/check_integ.m
index 19c3fae..1fd1b1d 100644
--- a/interface/tests/matlab/check_integ.m
+++ b/interface/tests/matlab/check_integ.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 function check_integ(iverbose,idebug)
   global gverbose;
   global gdebug;  
diff --git a/interface/tests/matlab/check_mesh_fem.m b/interface/tests/matlab/check_mesh_fem.m
index da7ad02..9c1a316 100644
--- a/interface/tests/matlab/check_mesh_fem.m
+++ b/interface/tests/matlab/check_mesh_fem.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 function check_mesh_fem(iverbose,idebug)
   global gverbose;
   global gdebug;  
diff --git a/interface/tests/matlab/check_oo.m b/interface/tests/matlab/check_oo.m
index 607aed6..6825721 100644
--- a/interface/tests/matlab/check_oo.m
+++ b/interface/tests/matlab/check_oo.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 function check_oo(iverbose,idebug)
   global gverbose;
   global gdebug;  
diff --git a/interface/tests/matlab/check_plot.m b/interface/tests/matlab/check_plot.m
old mode 100755
new mode 100644
index eb83a1e..a41734f
--- a/interface/tests/matlab/check_plot.m
+++ b/interface/tests/matlab/check_plot.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 gf_workspace('clear all');
 m2=gf_mesh('triangles grid',[0:.1:1],[0:.1:1]);
 m22=gf_mesh('cartesian',[0:.1:1],[0:.1:1]);
diff --git a/interface/tests/matlab/check_slices.m b/interface/tests/matlab/check_slices.m
index 7204e0f..11fb6fd 100644
--- a/interface/tests/matlab/check_slices.m
+++ b/interface/tests/matlab/check_slices.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 function check_slices(iverbose,idebug)
   global gverbose;
   global gdebug;  
diff --git a/interface/tests/matlab/check_solve.m b/interface/tests/matlab/check_solve.m
index 01295fb..824bc26 100644
--- a/interface/tests/matlab/check_solve.m
+++ b/interface/tests/matlab/check_solve.m
@@ -1,3 +1,22 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+% deprected functions ...
+
 function res=check_solve(iverbose,idebug)
 % check: gf_mesh('cartesian_mesh'), gf_mesh('triangles grid'), 
 % gf_compute('interpolate on Q1 grid')
diff --git a/interface/tests/matlab/check_spmat.m b/interface/tests/matlab/check_spmat.m
index fe194eb..eda57e3 100644
--- a/interface/tests/matlab/check_spmat.m
+++ b/interface/tests/matlab/check_spmat.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 function check_spmat(iverbose,idebug)
   global gverbose;
   global gdebug;  
diff --git a/interface/tests/matlab/check_workspace.m b/interface/tests/matlab/check_workspace.m
old mode 100755
new mode 100644
index 685ea91..d787ea3
--- a/interface/tests/matlab/check_workspace.m
+++ b/interface/tests/matlab/check_workspace.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 function check_workspace(iverbose,idebug)
   global gverbose;
   global gdebug;  
diff --git a/interface/tests/matlab/demo_Navier_Stokes.m b/interface/tests/matlab/demo_Navier_Stokes.m
new file mode 100644
index 0000000..6959d26
--- /dev/null
+++ b/interface/tests/matlab/demo_Navier_Stokes.m
@@ -0,0 +1,157 @@
+% Copyright (C) 2011-2012 Mariama Ndiaye, Yves Renard.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+%
+%  Transient Navier-Stokes equation on a driven cavity with two numerical
+%  scheme : a projection and a semi-implicite scheme. Without using the
+%  bricks.
+%
+%  This program is used to check that matlab-getfem is working. This is
+%  also a good example of use of GetFEM++.
+%
+
+clear all;
+gf_workspace('clear all');
+NX=20;        % Space resoltuion
+Dt=0.02;     % Time step
+T = 10;       % Time interval
+nu=0.005;     % Viscosity
+v = 30;       % Driven velocity
+scheme = 1;   % 1 : Projection scheme.
+              % 2 : Semi-implicit scheme
+rho = 2;      % density
+g = 9.81;     % gravity constant
+
+%m=gf_mesh('cartesian', [0:1/NX:1],[0:1/NX:1]); 
+m = gf_mesh('triangles grid',[0:1/NX:1],[0:1/NX:1]);
+border = gf_mesh_get(m,'outer faces');
+% mark it as boundary #1
+gf_mesh_set(m, 'boundary', 1, border);
+gf_plot_mesh(m, 'regions', [1]); % the boundary edges appears in red
+
+
+% create mesh_fem objects
+mf_u = gfMeshFem(m,2);  % For the velocity.
+mf_p = gfMeshFem(m,1);  % For the pressure.
+mf_f = gfMeshFem(m,1);  % For the external forces.
+
+%mim=gf_mesh_im(m,  gf_integ('IM_GAUSS_PARALLELEPIPED(2, 2)'));
+mim = gf_mesh_im(m, gf_integ('IM_HCT_COMPOSITE(IM_TRIANGLE(13))'));
+
+% assign the fems to all convexes of the mesh_fems
+if (scheme == 1)
+  gf_mesh_fem_set(mf_u,'fem',gf_fem('FEM_PK(2,1)'));
+  gf_mesh_fem_set(mf_p,'fem',gf_fem('FEM_PK(2,1)'));
+  gf_mesh_fem_set(mf_f,'fem',gf_fem('FEM_PK(2,1)'));
+elseif (scheme == 2)
+  gf_mesh_fem_set(mf_u,'fem',gf_fem('FEM_PK(2,2)'));
+  gf_mesh_fem_set(mf_p,'fem',gf_fem('FEM_PK(2,1)'));
+  gf_mesh_fem_set(mf_f,'fem',gf_fem('FEM_PK(2,1)'));
+end;
+
+% Assembly
+
+Fd = [gf_mesh_fem_get(mf_f, 'eval', { 0}); gf_mesh_fem_get(mf_f, 'eval', { rho*g })];
+FD =Fd;
+U = zeros(gf_mesh_fem_get(mf_u, 'nbdof'), 1); % initial condition
+
+M=rho*gf_asm('mass matrix',mim,mf_u) / Dt;
+K=nu*gf_asm('volumic','M(#1,#1)+=comp(vGrad(#1).vGrad(#1))(:,i,j,:,i,j)', mim, mf_u);
+F=gf_asm('volumic source',mim,mf_u,mf_f,Fd); %#1 methode d'elmt fini 1, vBase vecteur de base de methode d'EF 1, vGrad grad vect
+Kp=gf_asm('volumic','M(#1,#1)+=comp(Grad(#1).Grad(#1))(:,i,:,i)', mim, mf_p);
+D=gf_asm('volumic','M(#1,#2)+=comp(Base(#1).vGrad(#2))(:,:,i,i)', mim, mf_p, mf_u);
+B=gf_asm('volumic','M(#1,#2)+=comp(vBase(#1).Grad(#2))(:,i,:,i)', mim, mf_u, mf_p);
+
+% for the vorticity computation
+Mo=gf_asm('mass matrix', mim, mf_f);
+MVo=gf_asm('volumic','t=comp(Base(#1).vGrad(#2));M(#1,#2)+=t(:,:,1,2)-t(:,:,2,1)', mim, mf_f, mf_u);
+
+
+UBOUND = gf_mesh_fem_get(mf_u, 'dof on region', 1);% fournit le numero des dof sur la frontiere
+UNODES = gf_mesh_fem_get(mf_u, 'dof nodes');
+Kp(1, :) = 0; % In order to fix the pressure on a node for scheme 1.
+Kp(1, 1) = 1;
+Ndofu = size(D,2);          % Dof number for the velocity
+Ndofp = size(D,1);          % Dof number for the pressure
+
+
+for t=0:Dt:T
+    
+  if (scheme == 1)
+    
+    C=rho*gf_asm('volumic','a=data(#1);M(#1,#1)+=comp(vBase(#1).vGrad(#1).vBase(#1))(i,j,:,k,j,:,k).a(i)', mim,mf_u, U);
+    A = M + K + C;
+    L = F + M * U;
+  
+    for i=UBOUND     % Boundary conditions
+        A(i, :) = 0; A(i,i) = 1; L(i) = 0;
+        if (mod(i, 2) == 1) 
+            node = UNODES(:, i);
+            if (abs(node(2)-1) < 1e-10 && abs(node(1)-0.5) < 0.499)
+               L(i) = v * node(1) * (1-node(1));
+            end
+        end
+    end;
+    U1_2 = A \ L;
+ 
+    L2 = -D * U1_2/Dt;
+    L2(1) = 0;
+    P =  Kp \ L2 ;
+    U = M \ (M * U1_2 - B * P);
+  
+  elseif (scheme == 2)
+      
+      C=rho*gf_asm('volumic','a=data(#1);M(#1,#1)+=comp(vBase(#1).vGrad(#1).vBase(#1))(i,j,:,k,j,:,k).a(i)', mim,mf_u, U);
+      C=C+rho*gf_asm('volumic','a=data(#1);M(#1,#1)+=comp(vBase(#1).vGrad(#1).vBase(#1))(:,i,j,k,k,:,i).a(j)', mim,mf_u, U)/2;
+      
+      A = [M+K+C, -D'; -D, zeros(Ndofp)];
+      L = F + M * U;
+      
+      for i=UBOUND     % Boundary conditions
+        A(i, :) = 0; A(i,i) = 1; L(i) = 0;
+        if (mod(i, 2) == 1) 
+            node = UNODES(:, i);
+            if (abs(node(2)-1) < 1e-10 && abs(node(1)-0.5) < 0.499)
+               L(i) = v * node(1) * (1-node(1));
+            end
+        end
+      end;
+      
+      A(Ndofu+1, :) = 0;   % In order to fix the pressure on a node.
+      A(Ndofu+1, Ndofu+1) = 1;
+      
+      UP = A \ [L; zeros(Ndofp,1)];
+      U = UP(1:Ndofu);
+      P = UP(Ndofu+1:Ndofu+Ndofp);
+      
+  end;
+
+  
+  Vo = Mo \ (MVo * U); % Vorticity projected on mf_f. 
+  
+  gf_plot(mf_u, U','mesh','off', 'quiver_density', 15, 'quiver_scale', 4);
+  axis([0 1 0 1]);
+  hold on;
+  gf_plot(mf_p,P','refine',1);
+  gf_plot(mf_f,Vo','refine',1,'contour',[-40,-20,-10,10,20,40,80], 'pcolor', 'off');
+  hold off;
+  colorbar; title(sprintf('Quiver plot of U, with color plot of the pressure and vorticity contour lines, t=%g', t));
+  pause(1);
+    
+end;
+
+
+
diff --git a/interface/tests/matlab/demo_bilaplacian.m b/interface/tests/matlab/demo_bilaplacian.m
old mode 100755
new mode 100644
index 9874f8f..ca91e16
--- a/interface/tests/matlab/demo_bilaplacian.m
+++ b/interface/tests/matlab/demo_bilaplacian.m
@@ -1,10 +1,29 @@
+% Copyright (C) 2005-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 gf_workspace('clear all'); clear all;
 N = 2;
-NX=10; NY=10;
-%m=gfMesh('regular simplices',0:1/NX:1, 0:1/NY:1);
-m=gfMesh('cartesian',0:1/NX:1, 0:1/NY:1);
+NX=10; NY=14;
+m=gfMesh('regular simplices',0:0.4/NX:0.4, 0:1.2/NY:1.2);
+% m=gfMesh('cartesian',0:1/NX:1, 0:1/NY:1);
+% m=gfMesh('cartesian',0:0.4/NX:0.4, 0:1.2/NY:1.2);
+
 
-useKL=0; % use the Kirchhoff-Love plate model, or just a pure
+useKL=1; % use the Kirchhoff-Love plate model, or just a pure
          % bilaplacian problem
 
 D=1.0;   % Flexion modulus
@@ -15,13 +34,13 @@ if useKL, NU=0.3; end; % poisson ratio (0 <= NU <= 1)
 mim=gfMeshIm(m); 
 mfu=gfMeshFem(m); 
 mfd=gfMeshFem(m);
-%set(mim, 'integ',gfInteg('IM_TRIANGLE(13)'));
-%set(mfu, 'fem',gfFem('FEM_ARGYRIS'));
-%set(mfd, 'fem',gfFem('FEM_PK(2,5)'));
+set(mim, 'integ',gfInteg('IM_TRIANGLE(13)'));
+set(mfu, 'fem',gfFem('FEM_ARGYRIS'));
+set(mfd, 'fem',gfFem('FEM_PK(2,5)'));
 
-set(mim, 'integ', gfInteg('IM_GAUSS_PARALLELEPIPED(2,10)'));
-set(mfu, 'fem', gfFem('FEM_REDUCED_QUADC1_COMPOSITE'));
-set(mfd, 'fem', gfFem('FEM_QK(2,3)'));
+% set(mim, 'integ', gfInteg('IM_GAUSS_PARALLELEPIPED(2,10)'));
+% set(mfu, 'fem', gfFem('FEM_REDUCED_QUADC1_COMPOSITE'));
+% set(mfd, 'fem', gfFem('FEM_QK(2,3)'));
 
 flst = get(m, 'outer_faces');
 n = get(m, 'normal of faces', flst);
@@ -36,13 +55,13 @@ SIMPLE_SUPPORT_BOUNDARY_NUM=3;
 CLAMPED_BOUNDARY_NUM=4;
 
 set(m, 'region', FORCE_BOUNDARY_NUM, fright);
-set(m, 'region', SIMPLE_SUPPORT_BOUNDARY_NUM, [ftop fbottom fleft]);
-set(m, 'region', CLAMPED_BOUNDARY_NUM, [fleft fright]);
+set(m, 'region', SIMPLE_SUPPORT_BOUNDARY_NUM, [fleft ftop fbottom]);
+set(m, 'region', CLAMPED_BOUNDARY_NUM, [fleft ftop fbottom]);
 set(m, 'region', MOMENTUM_BOUNDARY_NUM, [ftop fbottom]);
 
-FT=10.;
+FT=2.;
 sol_u=get(mfd, 'eval',{sprintf('sin(%g*(x+y))',FT)});
-sol_f=sol_u*FT*FT*FT*FT*N*N;
+sol_f=sol_u*FT*FT*FT*FT*N*N*D;
 sol_lapl_u=-FT*FT*sol_u*N;
 
 if (newbricks) % uses new bricks
@@ -53,7 +72,7 @@ if (newbricks) % uses new bricks
 
   if useKL
     gf_model_set(md, 'add initialized data', 'D', [D]);
-    gf_model_set(md, 'add initialized data', 'nu', [nu]);
+    gf_model_set(md, 'add initialized data', 'nu', [NU]);
     gf_model_set(md, 'add Kirchhoff-Love plate brick', mim, 'u', 'D', 'nu');
     M = zeros(N,N, get(mfd,'nbdof'));
   else
@@ -63,7 +82,8 @@ if (newbricks) % uses new bricks
   end;
 
   gf_model_set(md, 'add initialized fem data', 'VolumicData', mfd, ...
-    	       get(mfd, 'eval', {'1-(x-y).^2'}));
+     	       get(mfd, 'eval', {'1-(x-y).^2'}));
+
   gf_model_set(md, 'add source term brick', mim, 'u', 'VolumicData');
 
   
@@ -77,7 +97,7 @@ if (newbricks) % uses new bricks
     gf_model_set(md, 'add initialized fem data', 'H', mfd, H);
     gf_model_set(md, 'add initialized fem data', 'F', mfd, F);
     gf_model_set(md, 'add Kirchhoff-Love Neumann term brick', mim, 'u', ...
-		         H, F, FORCE_BOUNDARY_NUM);
+		         'H', 'F', FORCE_BOUNDARY_NUM);
   else
     F = zeros(1, N, get(mfd, 'nbdof'));
     gf_model_set(md, 'add initialized fem data', 'F', mfd, F);
@@ -103,7 +123,7 @@ else % uses old bricks
     b0 = gfMdBrick('bilaplacian', mim, mfu, 'Kirchhoff-Love');
     set(b0, 'param','D', D);
     set(b0, 'param','nu', NU);
-    M = zeros(N,N, get(mfd,'nbdof'));
+    M = zeros(1, get(mfd,'nbdof'));
   else
     b0 = gfMdBrick('bilaplacian', mim, mfu);
     set(b0, 'param','D', D);
@@ -114,10 +134,10 @@ else % uses old bricks
   set(b1, 'param', 'source_term', mfd, get(mfd, 'eval', {'1-(x-y).^2'}));
 
   b2 = gfMdBrick('normal derivative source term',b1,MOMENTUM_BOUNDARY_NUM);
-  set(b2, 'param', 'source_term', mfd,M);
+  set(b2, 'param', 'source_term', mfd, M);
 
   if (useKL) 
-    H = zeros(N, N, get(mfd, 'nbdof'));
+    H = zeros(N*N, get(mfd, 'nbdof'));
     F = zeros(N, get(mfd, 'nbdof'));
     b3 = gfMdBrick('neumann Kirchhoff-Love source term',b2,FORCE_BOUNDARY_NUM);
     set(b3, 'param', 'M', mfd, H);
@@ -145,6 +165,7 @@ end
 
 
 gf_plot(mfu,U,'mesh','on');
+colorbar;
 
 disp(sprintf('H2 norm of the solution: %g', gf_compute(mfu,U,'H2 norm', mim)));
 
diff --git a/interface/tests/matlab/demo_continuation.m b/interface/tests/matlab/demo_continuation.m
new file mode 100644
index 0000000..7298c50
--- /dev/null
+++ b/interface/tests/matlab/demo_continuation.m
@@ -0,0 +1,126 @@
+% Copyright (C) 2011-2012 Tomas Ligursky, Yves Renard.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+%
+% Simple exemple othe f bifurcation problem: -Delta(u) + u = lambda exp(u)
+%
+% This program is used to check that matlab-getfem is working. This is also
+% a good example of use of GetFEM++.
+%
+
+gf_workspace('clear all');
+
+lambda = 0;
+direction = 1;
+nbstep = 80;
+
+maxit = 5;
+thrit = 4;
+minang = 0.993;
+maxres_solve = 1.e-7;
+noisy = 'very_noisy'
+
+h_init = 1e-3;
+h_max = 2e-1;
+h_min = 1e-5;
+
+with_dirichlet = true;
+
+% create a simple cartesian mesh
+m = gf_mesh('cartesian', [0:.1:1]);
+
+% create a mesh_fem of for a field of dimension 1 (i.e. a scalar field)
+mf = gf_mesh_fem(m,1);
+% assign the P1 fem to all convexes of the mesh_fem,
+gf_mesh_fem_set(mf, 'classical fem', 1);
+
+% integration which will be used
+mim = gf_mesh_im(m, 4);
+
+% detect the border of the mesh
+border = gf_mesh_get(m,'outer faces');
+% mark it as boundary #1
+gf_mesh_set(m, 'boundary', 1, border);
+
+% define the model
+md = gf_model('real');
+gf_model_set(md, 'add fem variable', 'u', mf);
+gf_model_set(md, 'add Laplacian brick', mim, 'u');
+gf_model_set(md, 'add initialized data', 'lambda', [lambda]);
+gf_model_set(md, 'add basic nonlinear brick', mim, 'u', 'u-lambda*exp(u)', '1-lambda*exp(u)', 'lambda');
+if (with_dirichlet)
+  gf_model_set(md, 'add Dirichlet condition with multipliers', mim, 'u', mf, 1);
+end;
+
+% initialise the continuation
+scfac = 1 / gf_mesh_fem_get(mf, 'nbdof');
+S = gf_cont_struct(md, 'lambda', scfac, 'max_iter', maxit, 'thr_iter', thrit, 'min_ang', minang, 'h_init', h_init, 'h_max', h_max, 'h_min', h_min, noisy);
+
+% compute an initial point
+if (noisy) disp('computing initial point\n'); end
+gf_model_get(md, 'solve', noisy, 'max iter', 100, 'max_res', maxres_solve);
+[T_U, T_lambda, h] = gf_cont_struct_get(S, 'init Moore-Penrose continuation', direction);
+
+U = gf_model_get(md, 'variable', 'u');
+disp('U = '); disp(U); disp(sprintf('lambda = %e\n', lambda));
+disp(sprintf('lambda - U(1) * exp(-U(1)) = %e\n', lambda - U(1) * exp(-U(1))));
+
+U_hist = zeros(1, nbstep + 1); lambda_hist = zeros(1, nbstep + 1);
+U_hist(1) = max(U); lambda_hist(1) = lambda;
+
+figure(1);
+subplot(2,1,1);
+plot(lambda_hist(1), U_hist(1), 'k.');
+xlabel('lambda'); ylabel('max(u)');
+if (with_dirichlet) axis([0 4 0 10]); else axis([0 0.4 0 11]); end
+subplot(2,1,2)
+gf_plot_1D(mf, U, 'style', 'k.-');
+if (with_dirichlet) axis([0 1 0 10]); else axis([0 1 0 11]); end  
+xlabel('x'); ylabel('u');
+pause(1);
+
+% continue from the initial point
+for step = 1:nbstep
+  disp(sprintf('\nbeginning of step %d\n', step));
+  [T_U, T_lambda, h] = gf_cont_struct_get(S, 'Moore-Penrose continuation', T_U, T_lambda, h);
+  U = gf_model_get(md, 'variable', 'u');
+  lambda = gf_model_get(md, 'variable', 'lambda');
+  % disp('U = '); disp(U);
+  disp(sprintf('lambda = %e\n', lambda));
+  % disp(sprintf('lambda - U(1) * exp(-U(1)) = %e\n', lambda - U(1) * exp(-U(1))));
+   
+  U_hist(step+1) = max(U); lambda_hist(step+1) = lambda;
+    
+  subplot(2,1,1);
+  plot(lambda_hist(1:step+1), U_hist(1:step+1), 'k-');
+  hold on;
+  plot(lambda_hist(1:step), U_hist(1:step), 'ko');
+  plot(lambda_hist(step+1), U_hist(step+1), 'k.');
+  hold off;
+  if (with_dirichlet) axis([0 4 0 10]); else axis([0 0.4 0 11]); end
+  xlabel('lambda'); ylabel('max(u)');
+  subplot(2,1,2)
+  gf_plot_1D(mf, U, 'style', 'k.-');
+  if (with_dirichlet) axis([0 1 0 10]); else axis([0 1 0 11]); end
+  xlabel('x'); ylabel('u');
+  pause(0.25);
+  disp(sprintf('end of step n° %d', step)); disp(sprintf(' / %d\n', nbstep));
+end
+
+
+
+% gf_plot(mf,U,'mesh','on','contour',.01:.01:.1); 
+% colorbar; title('computed solution');
diff --git a/interface/tests/matlab/demo_convection_rotating_cavity.m b/interface/tests/matlab/demo_convection_rotating_cavity.m
index 82adef0..6b526da 100644
--- a/interface/tests/matlab/demo_convection_rotating_cavity.m
+++ b/interface/tests/matlab/demo_convection_rotating_cavity.m
@@ -1,17 +1,16 @@
-% Matlab GetFEM++ interface
+% Copyright (C) 2009-2012 Yves Renard.
 %
-% Copyright (C) 2009-2010 Yves Renard.
+% This file is a part of GETFEM++
 %
-% This file is a part of GetFEM++
-%
-% GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 % under  the  terms  of the  GNU  Lesser General Public License as published
-% by  the  Free Software Foundation;  either version 2.1 of the License,  or
-% (at your option) any later version.
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
-% License for more details.
+% License and GCC Runtime Library Exception for more details.
 % You  should  have received a copy of the GNU Lesser General Public License
 % along  with  this program;  if not, write to the Free Software Foundation,
 % Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/interface/tests/matlab/demo_crack.m b/interface/tests/matlab/demo_crack.m
index 0f24424..862f4d7 100644
--- a/interface/tests/matlab/demo_crack.m
+++ b/interface/tests/matlab/demo_crack.m
@@ -1,17 +1,16 @@
-% Matlab GetFEM++ interface
+% Copyright (C) 2009-2012 Luis Saavedra, Yves Renard.
 %
-% Copyright (C) 2009 Luis Saavedra, Yves Renard.
+% This file is a part of GETFEM++
 %
-% This file is a part of GetFEM++
-%
-% GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 % under  the  terms  of the  GNU  Lesser General Public License as published
-% by  the  Free Software Foundation;  either version 2.1 of the License,  or
-% (at your option) any later version.
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
-% License for more details.
+% License and GCC Runtime Library Exception for more details.
 % You  should  have received a copy of the GNU Lesser General Public License
 % along  with  this program;  if not, write to the Free Software Foundation,
 % Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/interface/tests/matlab/demo_fictitious_domains.m b/interface/tests/matlab/demo_fictitious_domains.m
index d8ec126..ad32a7b 100644
--- a/interface/tests/matlab/demo_fictitious_domains.m
+++ b/interface/tests/matlab/demo_fictitious_domains.m
@@ -1,19 +1,37 @@
+% Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 disp('This demo use levelset to impose (weakly) a Dirichlet condition on an');
 disp('implicit boundary defined by the zero of the levelset');
 
 %clear all;
 gf_workspace('clear all');
-NX=40;
-ls_degree = 2;
+NX=80;
+ls_degree = 1;
 
 
 m=gf_mesh('cartesian', -.5:(1/NX):.5, -.5:(1/NX):.5);
 %m=gfMesh('triangles grid', -.5:(1/NX):.5, -.5:(1/NX):.5);
 ls=gf_levelset(m, ls_degree);
-ls2=gf_LevelSet(m, ls_degree, 'with_secondary');
+%ls2=gf_LevelSet(m, ls_degree, 'with_secondary');
 
 mf_ls=gfObject(gf_levelset_get(ls, 'mf'));
-mf_ls2=gfObject(gf_levelset_get(ls2, 'mf'));
+%mf_ls2=gfObject(gf_levelset_get(ls2, 'mf'));
 
 P=get(mf_ls, 'basic dof nodes');
 x = P(1,:); y = P(2,:);
@@ -24,8 +42,8 @@ ULS=1000*ones(1,numel(x));
 rand('state',1);
 
 if 0,
-  for ix=1:5,
-    for iy=1:5,
+  for ix=1:1,
+    for iy=1:1,
       xc = ((ix-1)/4) * 0.8 - 0.4;
       yc = ((iy-1)/4) * 0.8 - 0.4;
       if (mod(iy,2)==0),
@@ -38,15 +56,15 @@ if 0,
     end;
   end;
 else
-  for i=1:8,
-    xc = rand() - 0.5;
-    yc = rand() - 0.5;
-    R = rand() * 0.09 + 0.02;
+  for i=1:1,
+    xc =0.1;% rand() - 0.5;
+    yc =0;% rand() - 0.5;
+    R=0.1;%R = rand() * 0.09 + 0.02;
     ULS = min(ULS, ((x - xc).^2 + (y - yc).^2) - R^2);
   end;
 end;
 
-set(ls, 'values', ULS);
+gf_levelset_set(ls, 'values', ULS);
 
 ULS2=1000*ones(1,numel(x));
 ULS2s=1000*ones(1,numel(x));
@@ -56,21 +74,21 @@ for i=1:1,
   theta = pi/3; %pi*rand();
   n = [-sin(theta) cos(theta)];
   
-  R = 0.19; %rand() * 0.09 + 0.02;
+  R = 0.1; %rand() * 0.09 + 0.02;
   ULS2 = min(ULS2, ((x-xc)*n(1) + (y-yc)*n(2)));
-  %ULS2s = min(ULS2s, ((x - xc).^2 + (y - yc).^2) - R^2);
-  ULS2s = min(ULS2s, (abs(y - yc)+abs(x-xc) - R));
+  ULS2s = min(ULS2s, ((x - xc).^2 + (y - yc).^2) - R^2);
+  %ULS2s = min(ULS2s, (abs(y - yc)+abs(x-xc) - R));
 end;
 
-set(ls2, 'values', ULS2, ULS2s); %'-y-x+.2'); %, '(y-.2)^2 - 0.04');
+%gf_levelset_set(ls2, 'values', ULS2s, ULS2); %'-y-x+.2'); %, '(y-.2)^2 - 0.04');
 
 mls=gfMeshLevelSet(m);
 set(mls, 'add', ls);
-set(mls, 'add', ls2);
+%set(mls, 'add', ls2);
 set(mls, 'adapt');
 
-mim_bound = gfMeshIm('levelset',mls,'boundary(a+b)', gf_integ('IM_TRIANGLE(6)')); %, gf_integ('IM_QUAD(5)'));
-mim = gfMeshIm('levelset',mls,'all(a+b)', gf_integ('IM_TRIANGLE(6)'));
+mim_bound = gfMeshIm('levelset',mls,'boundary', gf_integ('IM_TRIANGLE(6)')); %, gf_integ('IM_QUAD(5)'));
+mim = gfMeshIm('levelset',mls,'all', gf_integ('IM_TRIANGLE(6)'));
 set(mim, 'integ', 4);
 
 mfu0=gfMeshFem(m,2); set(mfu0, 'fem', gf_fem('FEM_QK(2,3)'));
@@ -85,9 +103,9 @@ A=gf_asm('volumic','V()+=comp()',mim_bound)
 
 dof_out = get(mfu0, 'dof from im', mim);
 cv_out = get(mim, 'convex_index');
-cv_in = setdiff(get(m, 'cvid'), cv_out);
+cv_in = setdiff(gf_mesh_get(m, 'cvid'), cv_out);
 
-% mfu = gfMeshFem('partial', mfu0, dof_out, cv_in);
+mfu = gfMeshFem('partial', mfu0, dof_out, cv_in);
 
 
 md=gf_model('real');
@@ -105,6 +123,7 @@ gf_model_set(md, 'add Dirichlet condition with multipliers', ...
 gf_model_get(md, 'solve');
 U = gf_model_get(md, 'variable', 'u');
 
+
 VM = gf_model_get(md, 'compute isotropic linearized Von Mises or Tresca', 'u', 'lambda', 'mu', mfdu);
 
 gf_plot(mfdu, VM, 'deformed_mesh', 'on', 'deformation', U, ...
@@ -117,15 +136,14 @@ hold on;
 % set(h2{1},'LineWidth',2);
 % set(h2{1},'Color','white');
 
-[h1,h2]=gf_plot(mf_ls, get(ls,'values'), 'contour', 0,'pcolor','off');
+[h1,h2]=gf_plot(mf_ls, gf_levelset_get(ls,'values'), 'contour', 0, 'pcolor','off');
 set(h2{1},'LineWidth',1);
 set(h2{1},'Color','blue');
-%[h1,h2]=gf_plot(mf_ls2, get(ls2,'values'), 'contour',
-%0,'pcolor','off');
+%[h1,h1]=gf_plot(mf_ls2, gf_levelset_get(ls2,'values'), 'contour',0,'pcolor','off');
 
-h2=line([xc + R*n(2); xc - R*n(2)],[yc - R*n(1), yc + R*n(1)]);
-set(h2,'LineWidth',1);
-set(h2,'Color','blue');
+%h2=line([xc + R*n(2); xc - R*n(2)],[yc - R*n(1), yc + R*n(1)]);
+%set(h2,'LineWidth',1);
+%set(h2,'Color','blue');
 
 
 
diff --git a/interface/tests/matlab/demo_fictitious_domains_laplacian.m b/interface/tests/matlab/demo_fictitious_domains_laplacian.m
new file mode 100644
index 0000000..e32bedc
--- /dev/null
+++ b/interface/tests/matlab/demo_fictitious_domains_laplacian.m
@@ -0,0 +1,244 @@
+% Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
+disp('This demo use levelset to impose (weakly) a Dirichlet condition on a part of an ');
+disp('implicit boundary defined by the zero of the levelset and a Neumann condition on ');
+disp('the remaining part of that boundary. A Poisson problem');
+
+clear all;
+gf_workspace('clear all');
+
+  
+
+NX=30
+N = 3
+ls_degree = 1
+R = 0.4;
+
+if (N == 3)
+  m=gf_mesh('cartesian', -.5:(1/NX):.5, -.5:(1/NX):.5, -.5:(1/NX):.5);
+  %m=gf_Mesh('regular simplices', -.5:(1/NX):.5, -.5:(1/NX):.5, -.5:(1/NX):.5);
+  mfu0=gfMeshFem(m,1);
+  mf_mult=gfMeshFem(m,1);
+  set(mfu0, 'fem', gf_fem('FEM_QK(3,1)'))
+  %set(mfu0, 'fem', gf_fem('FEM_PK(3,1)'));
+  set(mf_mult, 'fem', gf_fem('FEM_QK(3,1)'))
+  %set(mf_mult, 'fem', gf_fem('FEM_PK(3,0)'));
+  adapt_im = 'IM_TETRAHEDRON(6)';
+elseif (N == 2)
+  %m=gf_mesh('cartesian', -.5:(1/NX):.5, -.5:(1/NX):.5);
+  m=gfMesh('triangles grid', -.5:(1/NX):.5, -.5:(1/NX):.5);
+  mfu0=gfMeshFem(m,1);
+  mf_mult=gfMeshFem(m,1);
+  set(mfu0, 'fem', gf_fem('FEM_PK(2,3)'));
+  set(mf_mult, 'fem', gf_fem('FEM_PK(2,1)'));
+  adapt_im = 'IM_TRIANGLE(6)'
+else 
+  error('Wrong dimension');
+end
+
+ls=gf_levelset(m, ls_degree);
+ls2s=gf_levelset(m, ls_degree, 'with_secondary');
+ls2=gf_LevelSet(m, ls_degree, 'with_secondary');
+
+mf_ls=gfObject(gf_levelset_get(ls, 'mf'));
+mf_ls2=gfObject(gf_levelset_get(ls2, 'mf'));
+P=get(mf_ls, 'basic dof nodes');
+x = P(1,:); y = P(2,:);
+if (N == 3)
+  z = P(3,:);
+else
+  z = 0 * x;
+end
+ULS=1000*ones(1,numel(x));
+ULS2=1000*ones(1,numel(x));
+ULS = min(ULS,((x.^2 + y.^2 + z.^2).^1.5 - R^3));
+%ULS2 = min(ULS,x);
+if (N == 3)
+  ULS2 = min(ULS2,z);%ULS2=-ULS2;
+else
+ ULS2 = min(ULS2,y);%ULS2=-ULS2;
+end
+
+
+gf_levelset_set(ls, 'values', ULS);
+gf_levelset_set(ls2, 'values', ULS, ULS2);
+%gf_levelset_set(lss, 'values', ULS);
+gf_levelset_set(ls2s, 'values', ULS, -ULS2);
+
+mls=gfMeshLevelSet(m);
+set(mls, 'add', ls);
+set(mls, 'add',ls2);
+set(mls, 'adapt');
+
+mls2=gfMeshLevelSet(m);
+set(mls2, 'add', ls);
+set(mls2, 'add',ls2s);
+set(mls2, 'adapt');
+
+
+mim_bounddown = gfMeshIm('levelset',mls,'boundary(b)', gf_integ(adapt_im));
+%mim_bound2 = gfMeshIm('levelset',mls,'boundary(a)', gf_integ(adapt_im));
+mim_boundup = gfMeshIm('levelset',mls2,'boundary(b)', gf_integ(adapt_im));
+mim_int = gfMeshIm('levelset', mls, 'inside(a)', gf_integ(adapt_im));
+set(mim_int, 'integ', 4);
+
+% Some verifications
+A1=gf_asm('volumic','V()+=comp()',mim_bounddown);
+%A2=gf_asm('volumic','V()+=comp()',mim_bound2);
+A2=gf_asm('volumic','V()+=comp()',mim_boundup);
+V =gf_asm('volumic','V()+=comp()',mim_int);
+if (N == 2)
+  disp(sprintf('length : %g should be %g', A1, pi*R));
+  disp(sprintf('length : %g should be %g', A2, 2*pi*R));
+  disp(sprintf('area : %g should be %g', V, pi*R^2));
+else
+  disp(sprintf('area : %g should be %g', A1, 4*pi*R^2/2));
+  disp(sprintf('area : %g should be %g', A2, 4*pi*R^2));
+  disp(sprintf('volume : %g should be %g', V, 4*pi*R^3/3.));   
+end
+
+% partial mesh fem
+dof_out = get(mfu0, 'dof from im', mim_int);
+cv_out = get(mim_int, 'convex_index');
+cv_in = setdiff(gf_mesh_get(m, 'cvid'), cv_out);
+mfu = gfMeshFem('partial', mfu0, dof_out, cv_in);
+
+% data
+if (N == 2)
+  Volumic_data = gf_mesh_fem_get(mfu0, 'eval', { '45*sqrt(x.^2+y.^2)' });
+  surface_data = gf_mesh_fem_get(mfu0, 'eval', { '-15*(x.^2+y.^2)' });
+  Sol_U = gf_mesh_fem_get(mfu0, 'eval', { sprintf('5*((%g)^3-(x.^2+y.^2).^1.5)', R) });
+else
+  Volumic_data = gf_mesh_fem_get(mfu0, 'eval', { '60*sqrt(x.^2+y.^2+z.^2)' });
+  surface_data = gf_mesh_fem_get(mfu0, 'eval', { '-15*(x.^2+y.^2+z.^2)' });
+  Sol_U = gf_mesh_fem_get(mfu0, 'eval', { sprintf('5*((%g)^3-(x.^2+y.^2+z.^2).^1.5)', R) });
+end
+
+% getfem model
+
+
+md=gf_model('real');
+gf_model_set(md, 'add fem variable', 'u', mfu);
+gf_model_set(md, 'add Laplacian brick', mim_int, 'u');
+gf_model_set(md, 'add initialized fem data', 'VolumicData', mfu0, Volumic_data);
+gf_model_set(md, 'add source term brick', mim_int, 'u', 'VolumicData');
+
+if 0,
+B2=gf_asm('mass matrix', mim_boundup, mfu0, mfu);
+Rh=gf_spmat_get(B2, 'tmult', surface_data);
+gf_model_set(md, 'add explicit rhs', 'u', Rh);
+else
+
+gf_model_set(md, 'add initialized fem data', 'SurfaceData', mfu0, surface_data);
+gf_model_set(md, 'add source term brick', mim_boundup, 'u', 'SurfaceData');   
+    
+% gf_model_set(md, 'add initialized fem data', 'SurfaceData', mfu0, surface_data);
+% gf_model_set(md, 'add source term brick', mim_bound2, 'u', 'SurfaceData');
+% gf_model_set(md, 'add initialized fem data', 'SurfaceData2', mfu0, -surface_data);
+% gf_model_set(md, 'add source term brick', mim_bounddown, 'u', 'SurfaceData2');
+end;
+
+%range bases
+BRBB=gf_asm('mass matrix', mim_bounddown, mf_mult, mf_mult);
+gf_mesh_fem_set(mf_mult,'reduce meshfem', BRBB);
+
+gf_model_set(md, 'add fem variable', 'Lambda', mf_mult);
+B=gf_asm('mass matrix', mim_bounddown, mfu, mf_mult);
+gf_model_set(md, 'add explicit matrix', 'u', 'Lambda', B, 1);
+
+% gf_model_set(md, 'add multiplier', 'Lambda', mf_mult, 'u');
+% gf_model_set(md, 'add Dirichlet condition with multipliers', ...
+% 	     mim_bounddown, 'u', 'Lambda', -1);
+
+gf_model_get(md, 'solve');
+U = gf_model_get(md, 'variable', 'u');
+Lambda = gf_model_get(md, 'variable', 'Lambda');
+
+% Comparison with the exaxt solution
+U0=gf_compute(mfu,U,'interpolate on',mfu0);
+ERRL2 = gf_compute(mfu0, U0, 'L2 dist', mim_int, mfu0, Sol_U);
+L2_Error=100*gf_compute(mfu, U, 'L2 dist', mim_int, mfu0, Sol_U)/gf_compute(mfu0, Sol_U,'L2 norm',mim_int);
+ERRH1 = gf_compute(mfu0, U0, 'H1 semi dist', mim_int, mfu0, Sol_U);
+H1_Error=100*gf_compute(mfu, U, 'H1 semi dist', mim_int, mfu0, Sol_U)/gf_compute(mfu0,Sol_U,'H1 norm',mim_int);
+
+%Compute error on the Multiplier
+
+
+map_Error=(abs(U0-Sol_U));
+%LambdaE = gf_mesh_fem_get(mf_mult, 'eval', { '-15*(x.^2+y.^2+z.^2)' });
+BA=gf_asm('mass matrix', mim_bounddown, mf_mult, mf_mult);
+BLS=gf_asm('lsneuman matrix', mim_bounddown, mfu0, mf_mult, ls);
+KA=gf_asm('nlsgrad matrix', mim_bounddown, mfu0, mfu0, ls);
+%ERRL_mult= (Lambda*gf_spmat_get(BA, 'mult',Lambda)+ U0*gf_spmat_get(KA, 'mult',U0) + 2*Lambda*gf_spmat_get(BLS, 'mult',U0))/(U0*gf_spmat_get(KA, 'mult',U0))
+ERRL2_mult= (Lambda*gf_spmat_get(BA, 'mult',Lambda)+ Sol_U*gf_spmat_get(KA, 'mult',Sol_U) + 2*Lambda*gf_spmat_get(BLS, 'mult',Sol_U))/(Sol_U*gf_spmat_get(KA, 'mult',Sol_U));
+L2_error_mult=100* sqrt(abs(ERRL2_mult));
+
+disp(sprintf('L2 norm %g\n H1 error = %g\n L2 norm mult=%g', L2_Error, H1_Error, L2_error_mult));
+
+if (N == 2)
+  figure(1);
+  gf_plot(mfu, U, 'mesh','on', 'refine', 2);
+  xlabel('x'); ylabel('y');
+  title('Displasment solution');
+  figure(2);
+  gf_plot(mfu0, map_Error, 'mesh','on', 'refine', 2);
+  xlabel('x'); ylabel('y');
+  title('Map Error in displacement');
+else
+ % gf_plot(mfu, U, 'mesh','on', 'cvlst', gf_mesh_get(m, 'outer faces'), 'refine', 2);
+ %Plot displasment
+  figure(1);
+  sl=gf_slice({'boundary',{'intersection',{'ball', -1,[0;0;0], R},{'planar',1,[0;0;0],[0;0;1]}}},mfu,3);
+  %sl=gf_slice({'boundary',{'intersection',{'ball',-1,[0;0;0],R}}},mfu,1);
+  Usl=gf_compute(mfu,U,'interpolate on', sl);
+  gf_plot_slice(sl,'mesh_faces','on','mesh','off','data',Usl,'mesh_slice_edges','on');
+  xlabel('x'); ylabel('y'); zlabel('z');
+  title('Displasment solution');
+  
+  
+  %plot exact solution
+  figure(2);
+  sl=gf_slice({'boundary',{'intersection',{'ball', -1,[0;0;0], R},{'planar',1,[0;0;0],[0;0;1]}}},mfu0,3);
+  %sl=gf_slice({'boundary',{'intersection',{'ball',-1,[0;0;0],R}}},mfu0,10);
+  Usl=gf_compute(mfu0,Sol_U,'interpolate on', sl);
+  gf_plot_slice(sl,'mesh_faces','on','mesh','off','data',Usl,'mesh_slice_edges','on');
+  xlabel('x'); ylabel('y'); zlabel('z');
+  title('Exact solution');
+  
+  %Plot map eroor on u
+  figure(3);
+  sl=gf_slice({'boundary',{'intersection',{'ball', -1,[0;0;0], R},{'planar',-1,[0;0;0],[0;0;1]}}},mfu0,10);
+  %sl=gf_slice({'boundary',{'intersection',{'ball',-1,[0;0;0],R}}},mfu0,10);
+  Usl=gf_compute(mfu0,map_Error,'interpolate on', sl);
+  gf_plot_slice(sl,'mesh_faces','on','mesh','off','data',Usl,'mesh_slice_edges','on');
+  xlabel('x'); ylabel('y'); zlabel('z');
+  title('Map Error in displacement');
+  
+  
+  %Plot multiplier
+  figure(4);
+  %sl=gf_slice({'boundary',{'intersection',{'ball', 0,[0;0;0], R},{'planar',-1,[0;0;0],[0;0;1]}}},mf_mult,10);
+  sl=gf_slice({'boundary',{'intersection',{'ball',0,[0;0;0],R}}},mf_mult,3);
+  Usl=gf_compute(mf_mult, Lambda,'interpolate on', sl);
+  gf_plot_slice(sl,'mesh_faces','on','mesh','off','data',Usl,'mesh_slice_edges','on');
+  xlabel('x'); ylabel('y'); zlabel('z');
+  title('Multiplier solution');
+  end
+gf_colormap('chouette');
+
diff --git a/interface/tests/matlab/demo_laplacian.m b/interface/tests/matlab/demo_laplacian.m
index f5e0827..28a5deb 100644
--- a/interface/tests/matlab/demo_laplacian.m
+++ b/interface/tests/matlab/demo_laplacian.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 % trace on;
 gf_workspace('clear all');
 m = gf_mesh('cartesian',[0:.1:1],[0:.1:1]);
diff --git a/interface/tests/matlab/demo_laplacian1D.m b/interface/tests/matlab/demo_laplacian1D.m
old mode 100755
new mode 100644
index 10651d6..29ca87e
--- a/interface/tests/matlab/demo_laplacian1D.m
+++ b/interface/tests/matlab/demo_laplacian1D.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 % clears every getfem object 
 gf_workspace('clear all');
 clear pde;
diff --git a/interface/tests/matlab/demo_large_sliding_contact.m b/interface/tests/matlab/demo_large_sliding_contact.m
new file mode 100644
index 0000000..3c6b084
--- /dev/null
+++ b/interface/tests/matlab/demo_large_sliding_contact.m
@@ -0,0 +1,138 @@
+% Copyright (C) 2012-2012 Yves Renard.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+gf_workspace('clear all');
+clear all;
+
+lambda = 1.; mu = 1.;   % Elasticity parameters
+r = 1.0;                % Augmentation parameter
+f_coeff = 1.;           % Friction coefficient
+vf = 0.01;                % Vertical force
+penalty_parameter = 0.1;
+
+
+mesh1 = gf_mesh('load', '../../../tests/meshes/disc_with_a_hole.mesh');
+mesh2 = gf_mesh('import', 'structured', 'GT="GT_PK(2,1)";ORG=[-0.5,0];SIZES=[1,0.1];NSUBDIV=[20,2]');
+
+N = gf_mesh_get(mesh1, 'dim');
+
+mfu1 = gf_mesh_fem(mesh1, N); gf_mesh_fem_set(mfu1, 'classical fem', 2);
+pre_mflambda1 = gf_mesh_fem(mesh1, N); gf_mesh_fem_set(pre_mflambda1, 'classical fem', 1);
+mfvm1 = gf_mesh_fem(mesh1); gf_mesh_fem_set(mfvm1, 'classical discontinuous fem', 1);
+fb1 = gf_mesh_get(mesh1, 'outer faces');
+CONTACT_BOUNDARY1 = 1;
+gf_mesh_set(mesh1,'boundary', CONTACT_BOUNDARY1, fb1);
+dol1 = gf_mesh_fem_get(pre_mflambda1, 'basic dof on region', CONTACT_BOUNDARY1);
+mflambda1 = gf_mesh_fem('partial',  pre_mflambda1, dol1);
+mim1 = gf_mesh_im(mesh1, 4);
+
+
+mfu2 = gf_mesh_fem(mesh2, N); gf_mesh_fem_set(mfu2, 'classical fem', 1);
+pre_mflambda2 = gf_mesh_fem(mesh2, N); gf_mesh_fem_set(pre_mflambda2, 'classical fem', 1);
+mfvm2 = gf_mesh_fem(mesh2); gf_mesh_fem_set(mfvm2, 'classical discontinuous fem', 1);
+fb2 = gf_mesh_get(mesh2, 'outer faces');
+CONTACT_BOUNDARY2 = 2;
+gf_mesh_set(mesh2,'boundary', CONTACT_BOUNDARY2, fb2);
+dol2 = gf_mesh_fem_get(pre_mflambda2, 'basic dof on region', CONTACT_BOUNDARY2);
+mflambda2 = gf_mesh_fem('partial',  pre_mflambda2, dol2);
+mim2 = gf_mesh_im(mesh2, 8);
+
+two_bodies = 1;
+
+md=gf_model('real');
+gf_model_set(md, 'add initialized data', 'lambda', lambda);
+gf_model_set(md, 'add initialized data', 'mu', mu);
+
+if (two_bodies) 
+  gf_model_set(md, 'add fem variable', 'u1', mfu1);
+  gf_model_set(md, 'add fem variable', 'lambda1', mflambda1);
+  gf_model_set(md, 'add isotropic linearized elasticity brick', mim1, 'u1', 'lambda', 'mu');
+%   gf_model_set(md, 'add initialized data', 'cpoints1', [0 0.5 0 1.5 0 0.5 0 1.5]);
+%   gf_model_set(md, 'add initialized data', 'cunitv1', [1 0 1 0 0 1 0 1]);
+%   gf_model_set(md, 'add initialized data', 'cdata', [0 0 -0.01 -0.01]);
+%   gf_model_set(md, 'add pointwise constraints with multipliers', 'u1', 'cpoints1', 'cunitv1', 'cdata');
+  gf_model_set(md, 'add initialized data', 'cpoints1', [0 0.5 0 1.5]);
+  gf_model_set(md, 'add initialized data', 'cunitv1', [1 0 1 0]);
+  gf_model_set(md, 'add initialized data', 'cdata', [0 0]);
+  gf_model_set(md, 'add pointwise constraints with multipliers', 'u1', 'cpoints1', 'cunitv1', 'cdata');
+  gf_model_set(md, 'add initialized data', 'data1', [0 -vf]);
+  gf_model_set(md, 'add source term brick', mim1, 'u1', 'data1');
+  gf_model_set(md, 'add initialized data', 'penalty_param1', [penalty_parameter]);          
+  gf_model_set(md, 'add mass brick', mim1, 'u1', 'penalty_param1');
+end;
+
+gf_model_set(md, 'add fem variable', 'u2', mfu2);
+gf_model_set(md, 'add fem variable', 'lambda2', mflambda2);
+gf_model_set(md, 'add isotropic linearized elasticity brick', mim2, 'u2', 'lambda', 'mu');
+gf_model_set(md, 'add initialized data', 'cpoints2', [0 0]);
+gf_model_set(md, 'add initialized data', 'cunitv2', [1 0]);
+gf_model_set(md, 'add pointwise constraints with multipliers', 'u2', 'cpoints2', 'cunitv2');
+gf_model_set(md, 'add initialized data', 'data2', [0 -vf]);
+gf_model_set(md, 'add source term brick', mim2, 'u2', 'data2');
+gf_model_set(md, 'add initialized data', 'penalty_param2', [penalty_parameter]);          
+gf_model_set(md, 'add mass brick', mim2, 'u2', 'penalty_param2');
+
+gf_model_set(md, 'add initialized data', 'r', r);
+gf_model_set(md, 'add initialized data', 'f', f_coeff);
+
+indb = gf_model_set(md, 'add integral large sliding contact brick', mim2, 'u2', 'lambda2', 'r', 'f', CONTACT_BOUNDARY2);
+
+if (two_bodies) 
+  gf_model_set(md, 'add boundary to large sliding contact brick', indb, mim1, 'u1', 'lambda1', CONTACT_BOUNDARY1);
+end;
+
+gf_model_set(md, 'add rigid obstacle to large sliding contact brick', indb, 'y');
+
+% gf_model_get(md, 'test tangent matrix', 1E-6, 10, 0.00001);
+
+
+
+for i=1:100
+
+   
+    
+gf_model_get(md, 'solve', 'noisy', 'max_iter', 50, 'max_res', 1e-8); % , 'lsearch', 'simplest');
+
+U2 = gf_model_get(md, 'variable', 'u2');
+VM2 = gf_model_get(md, 'compute_isotropic_linearized_Von_Mises_or_Tresca', ...
+		  'u2', 'lambda', 'mu', mfvm2);
+
+gf_plot(mfvm2,VM2,'mesh','off', 'deformation',U2,'deformation_mf',mfu2,'deformation_scale', 1, 'refine', 8); colorbar;
+
+if (two_bodies)
+   hold on
+   U1 = gf_model_get(md, 'variable', 'u1');
+   VM1 = gf_model_get(md, 'compute_isotropic_linearized_Von_Mises_or_Tresca', ...
+		  'u1', 'lambda', 'mu', mfvm1);
+   gf_plot(mfvm1,VM1,'mesh','off', 'deformation',U1,'deformation_mf',mfu1,'deformation_scale', 1, 'refine', 8); colorbar;
+   hold off
+end;
+
+axis([-2, 2, -0.2, 3]);
+pause(1);
+
+ vf = vf + 0.001;
+ gf_model_set(md, 'variable', 'data1', [0 -vf]);
+ gf_model_set(md, 'variable', 'data2', [0 -vf]);
+
+end;
+
+
+
+
+
+
diff --git a/interface/tests/matlab/demo_mesh_generation.m b/interface/tests/matlab/demo_mesh_generation.m
new file mode 100644
index 0000000..012414e
--- /dev/null
+++ b/interface/tests/matlab/demo_mesh_generation.m
@@ -0,0 +1,96 @@
+% Copyright (C) 2011-2012 Yves Renard.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+%
+% Mesh generation with the experimental meshing procedure of Getfem which
+% uses simple primitives to describe the mesh geometry. 
+%
+% This program is used to check that matlab-getfem is working. This is also
+% a good example of use of GetFEM++.
+%
+
+gf_workspace('clear all'); clear all;
+
+N = 2;   % dimension of the mesh
+K = 2;   % degree of the mesh (for curved boundaries)
+if (N == 1) 
+  mo = gf_mesher_object('ball', [0], 2);
+  fixed_vertices = [0];
+  h = 0.5;
+elseif (N == 2)
+  if (1)  
+    mo = gf_mesher_object('ball', [0 4], 2);
+    fixed_vertices = [0; 4];
+    h = 0.5;
+  else
+    mo1 = gf_mesher_object('ball', [0 1.1], 1);
+    mo2 = gf_mesher_object('rectangle', [-0.2 1.085], [0.2, 1.115]);
+    mo3 = gf_mesher_object('ball', [0.4 1.1], 0.2);
+    mo4 = gf_mesher_object('ball', [-0.4 1.1], 0.2);
+    mo5 = gf_mesher_object('union', mo2, mo3, mo4);
+    mo = gf_mesher_object('set minus', mo1, mo5);
+    fixed_vertices = [];
+    h = 0.05;
+  end
+elseif (N == 3)
+  if (0)
+    mo1 = gf_mesher_object('ball', [0 0 1], 2);
+    mo2 = gf_mesher_object('ball', [0 0 -1], 2);
+    mo3 = gf_mesher_object('intersect', mo1, mo2);
+    mo4 = gf_mesher_object('ball', [0 0 0], 1.3);
+    mo5 = gf_mesher_object('union', mo4, mo3);
+    mo6 = gf_mesher_object('ball', [-1 0 0], 1);
+    mo  = gf_mesher_object('set minus', mo5, mo6);
+    fixed_vertices = []; h = 0.3; 
+  elseif (1)
+    alpha = pi/5;
+    L = 20;
+    R = L * tan(alpha) * 0.7;
+    mo1 = gf_mesher_object('cone', [0 0 0], [0 0 1], L, alpha);
+    mo2 = gf_mesher_object('cylinder', [0 0 L], [0, 0, 1], L, R);
+    mo = gf_mesher_object('union', mo1, mo2);
+    fixed_vertices = []; h = 2.1;
+  else
+    mo  = gf_mesher_object('ball', [0 0 20], 20);
+    fixed_vertices = []; h = 3;
+  end
+elseif (N == 4)
+  mo = gf_mesher_object('ball', [0 0 0 4], 2);
+  fixed_vertices = [0; 0; 0; 4];
+  h = 1;
+else
+  error('It is not very reasonable to build a mesh in dimension greater than 4 !');
+end;
+ 
+
+tl = gf_util('trace level');
+% gf_util('trace level', 2);   % no trace for mesh generation
+gf_util('trace level', 4);   % all traces for mesh generation
+m = gf_mesh('generate', mo, h, K, fixed_vertices);
+gf_util('trace level', tl);
+ 
+ 
+if (N <= 2) 
+    gf_plot_mesh(m);
+elseif (N == 3)
+   mf=gf_mesh_fem(m, 1);
+   gf_mesh_fem_set(mf, 'classical fem', K);
+   VAL = gf_mesh_fem_get(mf, 'eval', {'x+y+z'});
+   gf_plot(mf, VAL, 'mesh', 'on', 'cvlst', gf_mesh_get(mf,'outer faces'), 'refine', 4);
+   axis on; camlight; gf_colormap('chouette');
+end;
+ 
+% gf_mesh_get(m, 'save', 'name.mesh');
diff --git a/interface/tests/matlab/demo_mortar.m b/interface/tests/matlab/demo_mortar.m
old mode 100755
new mode 100644
index bbb0a89..aa785a8
--- a/interface/tests/matlab/demo_mortar.m
+++ b/interface/tests/matlab/demo_mortar.m
@@ -1,3 +1,19 @@
+% Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
 % do a partition of the mesh into two disjoint areas, and then
 % solve the linear elasticity problem with a mortar join on 
 % the interface between the two areas
diff --git a/interface/tests/matlab/demo_nonlinear_elasticity.m b/interface/tests/matlab/demo_nonlinear_elasticity.m
index d51ba67..e945694 100644
--- a/interface/tests/matlab/demo_nonlinear_elasticity.m
+++ b/interface/tests/matlab/demo_nonlinear_elasticity.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 clear pde;
 gf_workspace('clear all');
 
@@ -168,6 +185,8 @@ for step=1:nbstep,
       % full(gf_model_get(md, 'tangent matrix'))
       U = gf_model_get(md, 'variable', 'u');
       VM = gf_model_get(md, 'compute Von Mises or Tresca', 'u', lawname, 'params', mfdu);
+      % sigma = gf_model_get(md, 'compute second Piola Kirchhoff tensor', 'u', lawname, 'params', mfdu);
+      % sigma
     else
       gf_MdBrick_set(b3, 'param', 'R', mfd, R);
       gf_MdBrick_get(b3, 'solve', mds, 'very noisy', 'max_iter', 100, 'max_res', 1e-5);
diff --git a/interface/tests/matlab/demo_nonlinear_elasticity_anim.m b/interface/tests/matlab/demo_nonlinear_elasticity_anim.m
old mode 100755
new mode 100644
index 706fc43..d7c4239
--- a/interface/tests/matlab/demo_nonlinear_elasticity_anim.m
+++ b/interface/tests/matlab/demo_nonlinear_elasticity_anim.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 % replay all the computations of demo_nonlinear_elasticity.m
 
 load demo_nonlinear_elasticity_U.mat
@@ -31,4 +49,4 @@ for step=1:1:nbstep,
   camlight; 
   axis off;
   print(gcf, '-dpng', '-r150', sprintf('torsion%03d',step));
-end;
\ No newline at end of file
+end;
diff --git a/interface/tests/matlab/demo_plasticity.m b/interface/tests/matlab/demo_plasticity.m
index 336e744..c3c5a2b 100644
--- a/interface/tests/matlab/demo_plasticity.m
+++ b/interface/tests/matlab/demo_plasticity.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 clear all
 gf_workspace('clear all');
 clc
diff --git a/interface/tests/matlab/demo_refine.m b/interface/tests/matlab/demo_refine.m
old mode 100755
new mode 100644
index 4500424..9ca61b9
--- a/interface/tests/matlab/demo_refine.m
+++ b/interface/tests/matlab/demo_refine.m
@@ -1,3 +1,19 @@
+% Copyright (C) 2005-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
 % Example of automatic refinement of the mesh
 % In this example, the refinement will focus on the
 % transition between the Dirichlet and the Neumann boundary.
diff --git a/interface/tests/matlab/demo_static_contact.m b/interface/tests/matlab/demo_static_contact.m
index 1ee809f..a619561 100644
--- a/interface/tests/matlab/demo_static_contact.m
+++ b/interface/tests/matlab/demo_static_contact.m
@@ -1,22 +1,22 @@
-% Matlab GetFEM++ interface
+% Copyright (C) 2009-2012 Yves Renard.
 %
-% Copyright (C) 2009-2010 Yves Renard.
+% This file is a part of GETFEM++
 %
-% This file is a part of GetFEM++
-%
-% GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 % under  the  terms  of the  GNU  Lesser General Public License as published
-% by  the  Free Software Foundation;  either version 2.1 of the License,  or
-% (at your option) any later version.
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
-% License for more details.
+% License and GCC Runtime Library Exception for more details.
 % You  should  have received a copy of the GNU Lesser General Public License
 % along  with  this program;  if not, write to the Free Software Foundation,
 % Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
 %
-% Static equilibrium of an elastic solid in contact with a rigid foundation
+% Static equilibrium of an elastic solid in contact with a rigid foundation.
+% Tests the different contact/friction formulations of Getfem.
 %
 % This program is used to check that matlab-getfem is working. This is also
 % a good example of use of GetFEM++.
@@ -25,95 +25,178 @@
 gf_workspace('clear all');
 clear all;
 
-% Import the mesh
-% m=gfMesh('load', '../../../tests/meshes/disc_P2_h2.mesh');
-%m=gf_mesh('load', '../../../tests/meshes/disc_P2_h1.mesh');
- m=gf_Mesh('load', '../../../tests/meshes/disc_P2_h0.5.mesh');
-
-d = gf_mesh_get(m, 'dim');
-
-
-% parameters of the model
-lambda = 1;  % Lame coefficient
-mu = 1;      % Lame coefficient
-friction_coeff = 0.2; % coefficient of friction
-r = 5;       % Augmentation parameter
-version = 1; % 1 : frictionless contact and the basic contact brick
-             % 2 : contact with 'static' friction and the basic contact brick
-             % 3 : frictionless contact and the contact with a
-             %     rigid obstacle brick
-             % 4 : contact with 'static' friction and the contact with a
-             %     rigid obstacle brick
+% Import the mesh : disc
+m=gf_mesh('load', '../../../tests/meshes/disc_P2_h4.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/disc_P2_h2.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/disc_P2_h1.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/disc_P2_h0_5.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/disc_P2_h0_3.mesh');
+
+% Import the mesh : sphere
+% m=gf_mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_8_elts.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_80_elts.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_400_elts.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_2000_elts.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_16000_elts.mesh');
+
+
+d = gf_mesh_get(m, 'dim'); % Mesh dimension
+
+
+% Parameters of the model
+clambda = 1;           % Lame coefficient
+cmu = 1;               % Lame coefficient
+friction_coeff = 0.4;  % coefficient of friction
+vertical_force = 0.05; % Volumic load in the vertical direction
+r = 1;                % Augmentation parameter
+condition_type = 2; % 0 = Explicitely kill horizontal rigid displacements
+                    % 1 = Kill rigid displacements using a global penalization
+                    % 2 = Add a Dirichlet condition on the top of the structure
+penalty_parameter = 1E-6;    % Penalization coefficient for the global penalization
 if (d == 2)
-  obstacle = 'y';  % Signed distance representing the obstacle
+    cpoints = [0, 0];   % constrained points for 2d
+    cunitv  = [1, 0];   % corresponding constrained directions for 2d
 else
-  obstacle = 'z';  % Signed distance representing the obstacle
+    cpoints = [0, 0, 0,   0, 0, 0,   5, 0, 5];  % constrained points for 3d
+    cunitv  = [1, 0, 0,   0, 1, 0,   0, 1, 0];  % corresponding constrained directions for 3d
 end;
 
-% Selection of the contact boundary
+niter = 100;   % Maximum number of iterations for Newton's algorithm.
+plot_mesh = true;
+version = 1;  % 1 : frictionless contact and the basic contact brick
+              % 2 : contact with 'static' Coulomb friction and basic contact brick
+              % 3 : frictionless contact and the contact with a
+              %     rigid obstacle brick
+              % 4 : contact with 'static' Coulomb friction and the contact with a
+              %     rigid obstacle brick
+              % 5 : frictionless contact and the integral brick
+              %     Newton and Alart-Curnier augmented lagrangian,
+              %     unsymmetric version
+              % 6 : frictionless contact and the integral brick
+              %     Newton and Alart-Curnier augmented lagrangian, symmetric
+              %     version.
+              % 7 : frictionless contact and the integral brick
+              %     New unsymmetric method.
+              % 9 : frictionless contact and the integral brick : Uzawa
+              %     on the Lagrangian augmented by the penalization term.
+              % 10 : contact with 'static' Coulomb friction and the integral brick
+              %     Newton and Alart-Curnier augmented lagrangian,
+              %     unsymmetric version.
+              % 11 : contact with 'static' Coulomb friction and the integral brick
+              %     Newton and Alart-Curnier augmented lagrangian,
+              %     nearly symmetric version.
+              % 12 : contact with 'static' Coulomb friction and the integral brick
+              %     New unsymmetric method.
+              % 13 : contact with 'static' Coulomb friction and the integral brick
+              %     New unsymmetric method with De Saxce projection.
+              % 14 : contact with 'static' Coulomb friction and the integral brick : Uzawa
+              %     on the Lagrangian augmented by the penalization term.
+              % 15 : penalized contact with 'static' Coulomb friction (r is the penalization
+              %     coefficient).
+ % Signed distance representing the obstacle
+if (d == 2) obstacle = 'y'; else obstacle = 'z'; end;
+
+% Selection of the contact and Dirichlet boundaries
+GAMMAC = 1; GAMMAD = 2;
+
 border = gf_mesh_get(m,'outer faces');
 normals = gf_mesh_get(m, 'normal of faces', border);
-contact_boundary=border(:,find(normals(d, :) < 0));
-GAMMAC = 1;
+contact_boundary=border(:, find(normals(d, :) < -0.01));
 gf_mesh_set(m, 'region', GAMMAC, contact_boundary);
+contact_boundary=border(:, find(normals(d, :) > 0.01));
+gf_mesh_set(m, 'region', GAMMAD, contact_boundary);
+
 
-% Plot the mesh
-figure(1);
-gf_plot_mesh(m, 'regions', [GAMMAC]);
-title('Mesh and contact boundary (in red)');
-pause(0.1);
 
 
 % Finite element methods
-mfu=gf_Mesh_Fem(m, d);
-gf_mesh_fem_set(mfu, 'classical fem', 2);
-mfd=gf_Mesh_Fem(m, 1);
-gf_mesh_fem_set(mfd, 'classical fem', 1);
-mfvm=gf_Mesh_Fem(m, 1);
-gf_mesh_fem_set(mfvm, 'classical discontinuous fem', 1);
-mim=gf_Mesh_Im(m, 4);
+u_degree = 2;
+lambda_degree = 2;
+
+mfu=gf_mesh_fem(m, d);
+gf_mesh_fem_set(mfu, 'classical fem', u_degree);
+mfd=gf_mesh_fem(m, 1);
+gf_mesh_fem_set(mfd, 'classical fem', u_degree);
+mflambda=gf_mesh_fem(m, 1); % used only by versions 5 to 13
+gf_mesh_fem_set(mflambda, 'classical fem', lambda_degree);
+mfvm=gf_mesh_fem(m, 1);
+gf_mesh_fem_set(mfvm, 'classical discontinuous fem', u_degree-1);
 
+% Integration method
+mim=gf_mesh_im(m, 4);
+if (d == 2)
+  mim_friction=gf_mesh_im(m, ...
+      gf_integ('IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(4),4)'));
+else
+   mim_friction=gf_mesh_im(m, ...
+      gf_integ('IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(5),4)')); 
+end;
+
+% Plot the mesh
+if (plot_mesh)
+  figure(1);
+  gf_plot_mesh(m, 'regions', [GAMMAC]);
+  title('Mesh and contact boundary (in red)');
+  pause(0.1);
+end;
 
 % Volumic density of force
 nbdofd = gf_mesh_fem_get(mfd, 'nbdof');
 nbdofu = gf_mesh_fem_get(mfu, 'nbdof');
 F = zeros(nbdofd*d, 1);
-F(d:d:nbdofd*d) = -0.02;
+F(d:d:nbdofd*d) = -vertical_force;
 
 % Elasticity model
 md=gf_model('real');
 gf_model_set(md, 'add fem variable', 'u', mfu);
-gf_model_set(md, 'add initialized data', 'mu', [mu]);
-gf_model_set(md, 'add initialized data', 'lambda', [lambda]);
+gf_model_set(md, 'add initialized data', 'cmu', [cmu]);
+gf_model_set(md, 'add initialized data', 'clambda', [clambda]);
 gf_model_set(md, 'add isotropic linearized elasticity brick', mim, 'u', ...
-             'lambda', 'mu');
+                 'clambda', 'cmu');
 gf_model_set(md, 'add initialized fem data', 'volumicload', mfd, F);
 gf_model_set(md, 'add source term brick', mim, 'u', 'volumicload');
 
-% Small penalty term to avoid rigid motion (should be replaced by an explicit
-% treatment of the rigid motion with a constraint matrix)
-gf_model_set(md, 'add initialized data', 'penalty_param', [1E-8]);          
-gf_model_set(md, 'add mass brick', mim, 'u', 'penalty_param');
+if (condition_type == 2)
+  Ddata = zeros(1, d); Ddata(d) = -5;
+  gf_model_set(md, 'add initialized data', 'Ddata', Ddata);
+  gf_model_set(md, 'add Dirichlet condition with multipliers', mim, 'u', u_degree, GAMMAD, 'Ddata');
+elseif (condition_type == 0)
+  gf_model_set(md, 'add initialized data', 'cpoints', cpoints);
+  gf_model_set(md, 'add initialized data', 'cunitv', cunitv);
+  gf_model_set(md, 'add pointwise constraints with multipliers', 'u', 'cpoints', 'cunitv');
+elseif (condition_type == 1)  
+  % Small penalty term to avoid rigid motion (should be replaced by an
+  % explicit treatment of the rigid motion with a constraint matrix)
+  gf_model_set(md, 'add initialized data', 'penalty_param', ...
+              [penalty_parameter]);          
+  gf_model_set(md, 'add mass brick', mim, 'u', 'penalty_param');
+end;
 
 % The contact condition
 
 cdof = gf_mesh_fem_get(mfu, 'dof on region', GAMMAC);
 nbc = size(cdof, 2) / d;
 
+if (nbc <= 0)
+    disp('No contact zone');
+    return;
+end;
+
+solved = false;
 if (version == 1 || version == 2) % defining the matrices BN and BT by hand
   contact_dof = cdof(d:d:nbc*d);
   contact_nodes = gf_mesh_fem_get(mfu, 'basic dof nodes', contact_dof);
   BN = sparse(nbc, nbdofu);
+  ngap = zeros(nbc, 1);
   for i = 1:nbc
     BN(i, contact_dof(i)) = -1.0;
-    gap(i) = contact_nodes(d, i);
+    ngap(i) = contact_nodes(d, i);
   end;
   if (version == 2)
     BT = sparse(nbc*(d-1), nbdofu);
     for i = 1:nbc
-      BT(i*(d-1), contact_dof(i)-d+1) = 1.0;
-      if (d > 2)
-        BT(i*(d-1)+1, contact_dof(i)-d+2) = 1.0;
+      for j = 1:d-1
+        BT(j+(i-1)*(d-1), contact_dof(i)-d+j) = 1.0;
       end;
     end;
   end;
@@ -123,60 +206,174 @@ if (version == 1 || version == 2) % defining the matrices BN and BT by hand
   if (version == 2)
     gf_model_set(md, 'add variable', 'lambda_t', nbc * (d-1));
     gf_model_set(md, 'add initialized data', 'friction_coeff', ...
-		 [friction_coeff]);
+                 [friction_coeff]);
   end;
-  gf_model_set(md, 'add initialized data', 'gap', gap);
-  gf_model_set(md, 'add initialized data', 'alpha', ones(nbc, 1));
+  gf_model_set(md, 'add initialized data', 'ngap', ngap);
+  gf_model_set(md, 'add initialized data', 'alpha', 2*ones(nbc, 1));
   if (version == 1)
-    gf_model_set(md, 'add basic contact brick', 'u', 'lambda_n', 'r', BN, ...
-	         'gap', 'alpha', 0);
+    gf_model_set(md, 'add basic contact brick', 'u', 'lambda_n', 'r', ...
+        BN, 'ngap', 'alpha', 1);
   else
     gf_model_set(md, 'add basic contact brick', 'u', 'lambda_n', ...
-		 'lambda_t', 'r', BN, BT, 'friction_coeff', 'gap', 'alpha', 0);
+		 'lambda_t', 'r', BN, BT, 'friction_coeff', 'ngap', 'alpha', 1);
   end;
-elseif (version == 3 || version == 4) % BN and BT defined by the contact brick
+elseif (version == 3 || version == 4) % BN and BT defined by contact brick
 
   gf_model_set(md, 'add variable', 'lambda_n', nbc);
   gf_model_set(md, 'add initialized data', 'r', [r]);
   if (version == 3)
-    gf_model_set(md, 'add contact with rigid obstacle brick', mim, 'u', ...
-	         'lambda_n', 'r', GAMMAC, obstacle, 0);
+    gf_model_set(md, 'add nodal contact with rigid obstacle brick', mim, 'u', ...
+	         'lambda_n', 'r', GAMMAC, obstacle, 1);
   else
     gf_model_set(md, 'add variable', 'lambda_t', nbc * (d-1));
     gf_model_set(md, 'add initialized data', 'friction_coeff', ...
 		 [friction_coeff]);
-    gf_model_set(md, 'add contact with rigid obstacle brick', mim, 'u', ...
+    gf_model_set(md, 'add nodal contact with rigid obstacle brick', mim, 'u', ...
 	         'lambda_n', 'lambda_t', 'r', 'friction_coeff', GAMMAC, ...
-		 obstacle, 0);
+		 obstacle, 1);
+  end;
+
+elseif (version >= 5 && version <= 8) % The integral version, Newton
+ 
+  gf_model_set(md, 'add multiplier', 'lambda_n', mflambda, 'u', mim, GAMMAC);
+  gf_model_set(md, 'add initialized data', 'r', [r]);
+  OBS = gf_mesh_fem_get(mfd, 'eval', { obstacle });
+  gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+  gf_model_set(md, 'add integral contact with rigid obstacle brick', ...
+      mim_friction, 'u', 'lambda_n', 'obstacle', 'r', GAMMAC, version-4);
+          
+elseif (version == 9) % The integral version, Uzawa on the augmented Lagrangian
+    
+    
+  ldof = gf_mesh_fem_get(mflambda, 'dof on region', GAMMAC);
+  mflambda_partial = gf_mesh_fem('partial', mflambda, ldof);
+  nbc = gf_mesh_fem_get(mflambda_partial, 'nbdof');
+  M = gf_asm('mass matrix', mim, mflambda_partial, mflambda_partial, GAMMAC);
+  lambda_n = zeros(1, nbc);
+  gf_model_set(md, 'add initialized fem data', 'lambda_n', mflambda_partial, lambda_n);
+  gf_model_set(md, 'add initialized data', 'r', [r]);
+  OBS = gf_mesh_fem_get(mfd, 'eval', { obstacle });
+  gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+  gf_model_set(md, 'add penalized contact with rigid obstacle brick', mim_friction, 'u', ...
+	         'obstacle', 'r', GAMMAC, 2, 'lambda_n');
+  
+  for ii=1:100
+      disp(sprintf('iteration %d', ii));
+      gf_model_get(md, 'solve', 'max_res', 1E-9, 'max_iter', niter); % , 'very noisy');
+      U = gf_model_get(md, 'variable', 'u');
+      lambda_n_old = lambda_n;
+      lambda_n = (M\ gf_asm('integral contact Uzawa projection', GAMMAC, mim_friction, mfu, U, mflambda_partial, lambda_n, mfd, OBS, r))';
+      gf_model_set(md, 'variable', 'lambda_n', lambda_n);
+      difff = max(abs(lambda_n-lambda_n_old));
+      disp(sprintf('diff : %g', difff/max(abs(lambda_n))));
+      % pause;
+      if (difff/max(abs(lambda_n)) < penalty_parameter) break; end;
+  end;
+  
+  solved = true;
+  
+elseif (version >= 10 && version <= 13) % The integral version with friction, Newton
+ 
+  gf_mesh_fem_set(mflambda, 'qdim', d);
+  gf_model_set(md, 'add multiplier', 'lambda', mflambda, 'u', mim, GAMMAC);
+  gf_model_set(md, 'add initialized data', 'r', [r]);
+  gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
+  OBS = gf_mesh_fem_get(mfd, 'eval', { obstacle });
+  gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+  gf_model_set(md, 'add integral contact with rigid obstacle brick', mim_friction, 'u', ...
+	         'lambda', 'obstacle', 'r', 'friction_coeff', GAMMAC, version-9);
+
+elseif (version == 14) % The integral version, Uzawa on the augmented Lagrangian with friction
+  
+  gf_mesh_fem_set(mflambda, 'qdim', d);
+  ldof = gf_mesh_fem_get(mflambda, 'dof on region', GAMMAC);
+  mflambda_partial = gf_mesh_fem('partial', mflambda, ldof);
+  nbc = gf_mesh_fem_get(mflambda_partial, 'nbdof');
+  gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
+  M = gf_asm('mass matrix', mim, mflambda_partial, mflambda_partial, GAMMAC);
+  lambda = zeros(1, nbc);
+  gf_model_set(md, 'add initialized fem data', 'lambda', mflambda_partial, lambda);
+  gf_model_set(md, 'add initialized data', 'r', [r]);
+  OBS = gf_mesh_fem_get(mfd, 'eval', { obstacle });
+  gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+  gf_model_set(md, 'add penalized contact with rigid obstacle brick', mim_friction, 'u', ...
+	         'obstacle', 'r', 'friction_coeff', GAMMAC, 2, 'lambda');
+  
+  for ii=1:100
+      disp(sprintf('iteration %d', ii));
+      gf_model_get(md, 'solve', 'max_res', 1E-9, 'max_iter', niter); % , 'very noisy');
+      U = gf_model_get(md, 'variable', 'u');
+      lambda_old = lambda;
+      lambda = (M\ gf_asm('integral contact Uzawa projection', GAMMAC, mim_friction, mfu, U, mflambda_partial, lambda, mfd, OBS, r, friction_coeff))';
+      gf_model_set(md, 'variable', 'lambda', lambda);
+      difff = max(abs(lambda-lambda_old));
+      disp(sprintf('diff : %g', difff/max(abs(lambda))));
+      % pause;
+      if (difff/max(abs(lambda)) < penalty_parameter) break; end;
   end;
+  
+  solved = true;
 
+elseif (version == 15)
+ 
+  gf_model_set(md, 'add initialized data', 'r', [r]);
+  gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
+  OBS = gf_mesh_fem_get(mfd, 'eval', { obstacle });
+  gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+  gf_model_set(md, 'add penalized contact with rigid obstacle brick', mim_friction, 'u', ...
+	         'obstacle', 'r', 'friction_coeff', GAMMAC);
+    
 else
-  error('Unexistent version');
+  error('Inexistent version');
 end
 
 % Solve the problem
-
-gf_model_get(md, 'solve', 'max_res', 1E-7, 'very noisy', 'max_iter', 100); % , 'with pseudo potential');
-
+if (~solved)
+  gf_model_get(md, 'test tangent matrix', 1e-6, 10, 0.01);
+  gf_model_get(md, 'solve', 'max_res', 1E-9, 'very noisy', 'max_iter', niter); % ,  'lsearch', 'simplest'); % , 'with pseudo potential');
+end;
 
 U = gf_model_get(md, 'variable', 'u');
-lambda_n = gf_model_get(md, 'variable', 'lambda_n');
+% lambda_n = gf_model_get(md, 'variable', 'lambda_n');
 VM = gf_model_get(md, 'compute_isotropic_linearized_Von_Mises_or_Tresca', ...
-		  'u', 'lambda', 'mu', mfvm);
+		  'u', 'clambda', 'cmu', mfvm);
+    
 
 % set a custom colormap
 % r=[0.7 .7 .7]; l = r(end,:); s=63; s1=20; s2=25; s3=48;s4=55; for i=1:s, c1 = max(min((i-s1)/(s2-s1),1),0);c2 = max(min((i-s3)/(s4-s3),1),0); r(end+1,:)=(1-c2)*((1-c1)*l + c1*[1 0 0]) + c2*[1 .8 .2]; end; colormap(r);
 
 figure(2);
 if (d == 3)
-  gf_plot(mfvm, VM, 'mesh', 'off', 'cvlst', ...
-          gf_mesh_get(mfdu,'outer faces'), 'deformation', U, ...
-          'deformation_mf', mfu, 'deformation_scale', 1, 'refine', 8);
+  c=[0.1;0;20]; x=[1;0;0]; y=[0;1;0]; z=[0;0;1];
+  % Whole boundary
+  % sl2=gf_slice({'boundary',{'none'}}, m, 5);
+  % Slice, 3 planes
+  % sl2=gf_slice({'boundary',{'union',{'planar',+1,c,x},{'planar',+1,c,y},{'planar',+1,c,z}}},m,5);
+  % Slice, 2 planes
+  % sl2=gf_slice({'boundary',{'union',{'planar',+1,c,x},{'planar',+1,c,y}}},m,5);
+  % Slice, 1 plane
+  sl2=gf_slice({'boundary',{'planar',+1,c,x}}, m, 5);
+
+  P=gf_slice_get(sl2,'pts'); dP=gf_compute(mfu,U,'interpolate on',sl2);
+  gf_slice_set(sl2, 'pts', P+dP);
+  VMsl=gf_compute(mfvm,VM,'interpolate on',sl2);
+  set(gcf,'renderer','zbuffer');
+  h=gf_plot_slice(sl2,'mesh','on','mesh_slice_edges','off','data',VMsl);
+  view(-80,-15); axis on; camlight; gf_colormap('chouette');
+  % map=[1:-1/10:0]'*[1 1 1]; colormap(map); % for NB
+    
+  % gf_plot(mfvm, VM, 'mesh', 'off', 'cvlst', ...
+  %        gf_mesh_get(mfu,'outer faces'), 'deformation', U, ...
+  %        'deformation_mf', mfu, 'deformation_scale', 1, 'refine', 8);
+  % view(-5,-10); camlight; colormap(map);
+  xlabel('x'); ylabel('y'); zlabel('z');
+  title('Sliced deformed configuration (not really a small deformation of course ...)');
 else
   gf_plot(mfvm, VM, 'deformed_mesh', 'on', 'deformation', U, ...
           'deformation_mf', mfu, 'deformation_scale', 1, 'refine', 8);
+  xlabel('x'); ylabel('y');
+  title('Deformed configuration (not really a small deformation of course ...)');
 end;
 
-title('Deformed configuration (not really a small deformation of course ...)');
 colorbar;
 pause(0.1);
diff --git a/interface/tests/matlab/demo_stokes_2D_poiseuille.m b/interface/tests/matlab/demo_stokes_2D_poiseuille.m
old mode 100755
new mode 100644
index 5c9621f..e9afd66
--- a/interface/tests/matlab/demo_stokes_2D_poiseuille.m
+++ b/interface/tests/matlab/demo_stokes_2D_poiseuille.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 % this example uses the "old" gf_solve instead of the bricks
 % framework..
 
diff --git a/interface/tests/matlab/demo_stokes_2D_poiseuille_arc.m b/interface/tests/matlab/demo_stokes_2D_poiseuille_arc.m
old mode 100755
new mode 100644
index 17edc6c..a63c1f7
--- a/interface/tests/matlab/demo_stokes_2D_poiseuille_arc.m
+++ b/interface/tests/matlab/demo_stokes_2D_poiseuille_arc.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 % this example uses the "old" gf_solve instead of the bricks
 % framework..
 
@@ -42,7 +59,7 @@ mfulag=gf_mesh_fem(m,2);
 pde.mf_p=gf_mesh_fem(m,1);
 pde.mf_d=gf_mesh_fem(m,1);
 pde.mim=gf_mesh_im(m, gf_integ('IM_GAUSS_PARALLELEPIPED(2,10)'));
-% this is a good example of the usefullness of the cubic bubble
+% this is a good example of the usefulness of the cubic bubble
 % -> if not used, the pression has strange values
 gf_mesh_fem_set(pde.mf_u,'fem',fem_u);
 gf_mesh_fem_set(pde.mf_p,'fem',fem_u);
diff --git a/interface/tests/matlab/demo_stokes_2D_tube.m b/interface/tests/matlab/demo_stokes_2D_tube.m
old mode 100755
new mode 100644
index 7bc4f28..e127cca
--- a/interface/tests/matlab/demo_stokes_2D_tube.m
+++ b/interface/tests/matlab/demo_stokes_2D_tube.m
@@ -1,5 +1,21 @@
-% this example uses the "old" gf_solve instead of the bricks
-% framework..
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+% this example uses the "old" gf_solve instead of the bricks framework..
 
 gf_workspace('clear all');
 disp('2D stokes demonstration on a quadratic mesh');
@@ -19,7 +35,7 @@ mfulag=gf_mesh_fem(m,2);
 pde.mf_p=gf_mesh_fem(m,1);
 pde.mf_d=gf_mesh_fem(m,1);
 pde.mim=gf_mesh_im(m,gf_integ('IM_TRIANGLE(5)'));
-% this is a good example of the usefullness of the cubic bubble
+% this is a good example of the usefulness of the cubic bubble
 % -> if not used, the pressure has strange values
 gf_mesh_fem_set(pde.mf_u,'fem',gf_fem('FEM_PK_WITH_CUBIC_BUBBLE(2,2)'));
 gf_mesh_fem_set(pde.mf_d,'fem',gf_fem('FEM_PK(2,2)'));
diff --git a/interface/tests/matlab/demo_stokes_3D_tank.m b/interface/tests/matlab/demo_stokes_3D_tank.m
index 51ba13c..f50c3c5 100644
--- a/interface/tests/matlab/demo_stokes_3D_tank.m
+++ b/interface/tests/matlab/demo_stokes_3D_tank.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 disp('3D stokes demonstration on a quadratic mesh');
 compute=input('  1:compute the solution\n  0:load a previously computed solution\n ? ');
 gf_workspace('clear all');
diff --git a/interface/tests/matlab/demo_stokes_3D_tank_alt.m b/interface/tests/matlab/demo_stokes_3D_tank_alt.m
old mode 100755
new mode 100644
index 3aae8f7..332d4c9
--- a/interface/tests/matlab/demo_stokes_3D_tank_alt.m
+++ b/interface/tests/matlab/demo_stokes_3D_tank_alt.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 % old example, which uses the deprecated gf_solve function
 % see demo_stokes_3D_tank.m for a "modern" version
 
@@ -25,7 +43,7 @@ mfulag=gf_mesh_fem(m,3);
 pde.mf_p=gf_mesh_fem(m,1);
 pde.mf_d=gf_mesh_fem(m,1);
 pde.mim=gf_mesh_im(m, gf_integ('IM_TETRAHEDRON(5)'));
-% this is a good example of the usefullness of the cubic bubble
+% this is a good example of the usefulness of the cubic bubble
 % -> if not used, the pression has strange values
 %gf_mesh_fem_set(pde.mf_u,'fem',gf_fem('FEM_PK_WITH_CUBIC_BUBBLE(3,2)')
 gf_mesh_fem_set(pde.mf_u,'fem',gf_fem('FEM_PK(3,2)'));
diff --git a/interface/tests/matlab/demo_stokes_3D_tank_draw.m b/interface/tests/matlab/demo_stokes_3D_tank_draw.m
old mode 100755
new mode 100644
index e1a0667..e194f33
--- a/interface/tests/matlab/demo_stokes_3D_tank_draw.m
+++ b/interface/tests/matlab/demo_stokes_3D_tank_draw.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 if (exist('U')~=1 | exist('P') ~= 1),
   error('run demo_stokes_3D_tank2 first');
 end;
@@ -31,4 +48,4 @@ hold on; [a,h]=gf_plot_slice(tsl,'mesh','off','tube_radius',.2,'tube_color','whi
 % a nice colormap
 caxis([0 .7]);
 c=[0 0 1; 0 .5 1; 0 1 .5; 0 1 0; .5 1 0; 1 .5 0; 1 .4 0; 1 0 0; 1 .2 0; 1 .4 0; 1 .6 0; 1 .8 0];
-colormap(c); camlight;
\ No newline at end of file
+colormap(c); camlight;
diff --git a/interface/tests/matlab/demo_structural_optimization.m b/interface/tests/matlab/demo_structural_optimization.m
index d875ba3..54abce4 100644
--- a/interface/tests/matlab/demo_structural_optimization.m
+++ b/interface/tests/matlab/demo_structural_optimization.m
@@ -1,17 +1,16 @@
-% Matlab GetFEM++ interface
+% Copyright (C) 2009-2012 Alassane SY, Yves Renard.
 %
-% Copyright (C) 2009 Alassane SY, Yves Renard.
+% This file is a part of GETFEM++
 %
-% This file is a part of GetFEM++
-%
-% GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 % under  the  terms  of the  GNU  Lesser General Public License as published
-% by  the  Free Software Foundation;  either version 2.1 of the License,  or
-% (at your option) any later version.
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
-% License for more details.
+% License and GCC Runtime Library Exception for more details.
 % You  should  have received a copy of the GNU Lesser General Public License
 % along  with  this program;  if not, write to the Free Software Foundation,
 % Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/interface/tests/matlab/demo_topological_optimization.m b/interface/tests/matlab/demo_topological_optimization.m
index a7fa6bb..ef49300 100644
--- a/interface/tests/matlab/demo_topological_optimization.m
+++ b/interface/tests/matlab/demo_topological_optimization.m
@@ -1,17 +1,16 @@
-% Matlab GetFEM++ interface
+% Copyright (C) 2009-2012 Alassane SY, Yves Renard.
 %
-% Copyright (C) 2009 Alassane SY, Yves Renard.
+% This file is a part of GETFEM++
 %
-% This file is a part of GetFEM++
-%
-% GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 % under  the  terms  of the  GNU  Lesser General Public License as published
-% by  the  Free Software Foundation;  either version 2.1 of the License,  or
-% (at your option) any later version.
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
-% License for more details.
+% License and GCC Runtime Library Exception for more details.
 % You  should  have received a copy of the GNU Lesser General Public License
 % along  with  this program;  if not, write to the Free Software Foundation,
 % Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/interface/tests/matlab/demo_tripod.m b/interface/tests/matlab/demo_tripod.m
old mode 100755
new mode 100644
index 21a579e..74794a9
--- a/interface/tests/matlab/demo_tripod.m
+++ b/interface/tests/matlab/demo_tripod.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 disp('This demo is an adaption of the original tripod demo')
 disp('which uses the new "brick" framework of getfem')
 disp('The code is shorter, faster and much more powerful')
diff --git a/interface/tests/matlab/demo_tripod_alt.m b/interface/tests/matlab/demo_tripod_alt.m
old mode 100755
new mode 100644
index 7753062..d9a07aa
--- a/interface/tests/matlab/demo_tripod_alt.m
+++ b/interface/tests/matlab/demo_tripod_alt.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 disp('This is the "legacy" getfem-matlab demonstration')
 disp('This demo does not use the model bricks introduced with getfem 2.0')
 disp('instead it show how the linear system is built with direct calls')
diff --git a/interface/tests/matlab/demo_tripod_slice_anim.m b/interface/tests/matlab/demo_tripod_slice_anim.m
old mode 100755
new mode 100644
index 06dc60d..6fcce9b
--- a/interface/tests/matlab/demo_tripod_slice_anim.m
+++ b/interface/tests/matlab/demo_tripod_slice_anim.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 disp('this file should be launched after demo_tripod.m as it assumes the tripod mesh and solutions are in memory')
 
 gfObject(m)
diff --git a/interface/tests/matlab/demo_wave2D.m b/interface/tests/matlab/demo_wave2D.m
old mode 100755
new mode 100644
index 224384a..67d7f4d
--- a/interface/tests/matlab/demo_wave2D.m
+++ b/interface/tests/matlab/demo_wave2D.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 gf_workspace('clear all');
 disp('2D scalar wave equation (helmholtz) demonstration');
 disp(' we present three approaches for the solution of the helmholtz problem')
diff --git a/interface/tests/matlab/demo_wave2D_alt.m b/interface/tests/matlab/demo_wave2D_alt.m
index 1e70ed6..c6a56f1 100644
--- a/interface/tests/matlab/demo_wave2D_alt.m
+++ b/interface/tests/matlab/demo_wave2D_alt.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 gf_workspace('clear all');
 disp('2D scalar wave equation (helmholtz) demonstration');
 disp('Helmholtz is not handled (for the moment) by gf_solve');
diff --git a/interface/tests/matlab/demo_wave_equation.m b/interface/tests/matlab/demo_wave_equation.m
index 538d9da..60e0e00 100644
--- a/interface/tests/matlab/demo_wave_equation.m
+++ b/interface/tests/matlab/demo_wave_equation.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2008-2012 Yves Renard.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 % Simple demo of a wave equation solved with transient bricks
 % trace on;
 gf_workspace('clear all');
diff --git a/interface/tests/matlab/private/Makefile.in b/interface/tests/matlab/private/Makefile.in
index ff1e17f..9c27670 100644
--- a/interface/tests/matlab/private/Makefile.in
+++ b/interface/tests/matlab/private/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -71,6 +71,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(toolboxdir)"
 SCRIPTS = $(toolbox_SCRIPTS)
 SOURCES =
@@ -100,6 +106,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -118,6 +125,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -134,6 +142,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -198,6 +207,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -233,7 +243,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -320,9 +329,7 @@ uninstall-toolboxSCRIPTS:
 	@list='$(toolbox_SCRIPTS)'; test -n "$(toolboxdir)" || exit 0; \
 	files=`for p in $$list; do echo "$$p"; done | \
 	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(toolboxdir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(toolboxdir)" && rm -f $$files
+	dir='$(DESTDIR)$(toolboxdir)'; $(am__uninstall_files_from_dir)
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -383,10 +390,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/interface/tests/matlab/private/asserterr.m b/interface/tests/matlab/private/asserterr.m
old mode 100755
new mode 100644
index 626e3f1..55d7747
--- a/interface/tests/matlab/private/asserterr.m
+++ b/interface/tests/matlab/private/asserterr.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2003-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 function asserterr(sx)
   global gverbose;
   global gdebug;
diff --git a/interface/tests/matlab/private/gfassert.m b/interface/tests/matlab/private/gfassert.m
index b47f022..389057c 100644
--- a/interface/tests/matlab/private/gfassert.m
+++ b/interface/tests/matlab/private/gfassert.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2003-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 function gfassert(sx)
   global gverbose;
   global gdebug;
diff --git a/interface/tests/matlab/test_argyris.m b/interface/tests/matlab/test_argyris.m
index 402460c..42617a4 100644
--- a/interface/tests/matlab/test_argyris.m
+++ b/interface/tests/matlab/test_argyris.m
@@ -1,3 +1,19 @@
+% Copyright (C) 2005-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
 
 
 if (1) % draw the shape functions
diff --git a/interface/tests/matlab/test_plasticity_new_brick.m b/interface/tests/matlab/test_plasticity_new_brick.m
index 8fd6e43..b6cd754 100644
--- a/interface/tests/matlab/test_plasticity_new_brick.m
+++ b/interface/tests/matlab/test_plasticity_new_brick.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2010-2012 Amandine Cottaz, Yves Renard.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
 clear all
 gf_workspace('clear all');
 clc
@@ -53,10 +70,10 @@ CVtop = find(CV > 250); % Retrieve index of convex located at the top
 % Definition of Lame coeff
 lambda(CVbottom) = 121150; % Stell
 lambda(CVtop) = 84605; % Iron
-%lambda(CV) = 84605;
+%lambda = 121150;
 mu(CVbottom) = 80769; %Stell
 mu(CVtop) = 77839; % Iron
-%mu(CV) = 77839;
+%mu = 80769;
 von_mises_threshold(CVbottom) = 7000;
 von_mises_threshold(CVtop) = 8000;
 
@@ -87,7 +104,7 @@ set(md, 'add fem data', 'sigma', mf_sigma);
 % Add plasticity brick on u
 set(md, 'add elastoplasticity brick', mim, 'VM', 'u', 'lambda', 'mu', 'von_mises_threshold', 'sigma');
 
-% Add homogeneous Dirichlet condition to u on the the left hand side of the domain
+% Add homogeneous Dirichlet condition to u on the left hand side of the domain
 set(md, 'add Dirichlet condition with multipliers', mim, 'u', mf_u, 1);
 
 % Add a source term to the system
@@ -129,14 +146,14 @@ for step=1:nbstep,
     n = t(step);
     title(['Von Mises criterion for t = ', num2str(n)]);
   
-    ERR=gf_compute(mf_u,U,'error estimate', mim);
-    E=ERR; E(dd)=ERR;
+    %ERR=gf_compute(mf_u,U,'error estimate', mim);
+    %E=ERR; E(dd)=ERR;
     subplot(2,1,2);
-    gf_plot(mf_err, E, 'mesh','on', 'refine', 1); 
-    colorbar;
-    title('Error estimate');
+    %gf_plot(mf_err, E, 'mesh','on', 'refine', 1); 
+    %colorbar;
+    %title('Error estimate');
 
-    figure(3)
+    %figure(3)
     gf_plot(mf_pl,plast, 'deformation',U,'deformation_mf',mf_u,'refine', 4, 'deformation_scale',1);  % 'deformed_mesh', 'on')
     colorbar;
     caxis([0 10000]);
diff --git a/interface/tests/matlab/tripod_anim.m b/interface/tests/matlab/tripod_anim.m
index e42ab37..3d5426f 100644
--- a/interface/tests/matlab/tripod_anim.m
+++ b/interface/tests/matlab/tripod_anim.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 % You should run demo_tripod first ...
 m=gf_mesh('import','gid','../meshes/tripod.GiD.msh');
 % mfu=gfMeshFem('from string', smfu, m);
diff --git a/interface/tests/matlab/tutorial1.m b/interface/tests/matlab/tutorial1.m
old mode 100755
new mode 100644
index 74da6f6..36c20dc
--- a/interface/tests/matlab/tutorial1.m
+++ b/interface/tests/matlab/tutorial1.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
 m = gf_mesh('cartesian',[0:.1:1],[0:.1:1]);
 mf = gf_mesh_fem(m,1); % create a meshfem of for a field of dimension 1 (i.e. a scalar field)
 gf_mesh_fem_set(mf,'fem',gf_fem('FEM_QK(2,2)'));
diff --git a/interface/tests/meshes/Makefile.in b/interface/tests/meshes/Makefile.in
index 3d563df..35c2a18 100644
--- a/interface/tests/meshes/Makefile.in
+++ b/interface/tests/meshes/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -71,6 +71,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(meshesdir)"
 SCRIPTS = $(meshes_SCRIPTS)
 SOURCES =
@@ -100,6 +106,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -118,6 +125,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -134,6 +142,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -198,6 +207,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -233,7 +243,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -325,9 +334,7 @@ uninstall-meshesSCRIPTS:
 	@list='$(meshes_SCRIPTS)'; test -n "$(meshesdir)" || exit 0; \
 	files=`for p in $$list; do echo "$$p"; done | \
 	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(meshesdir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(meshesdir)" && rm -f $$files
+	dir='$(DESTDIR)$(meshesdir)'; $(am__uninstall_files_from_dir)
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -388,10 +395,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/interface/tests/python/Makefile.am b/interface/tests/python/Makefile.am
index 671cff9..f7828cc 100644
--- a/interface/tests/python/Makefile.am
+++ b/interface/tests/python/Makefile.am
@@ -1,19 +1,20 @@
 EXTRA_DIST= 				\
-	demo_tripod.py 			\
-	demo_tripod_alt.py 		\
-	demo_plate.py 			\
 	check_export.py 		\
-	check_levelset.py		\
-	getfem_tvtk.py 			\
-	demo_laplacian.py 		\
-	demo_plasticity.py              \
-	demo_wave.py			\
 	check_global_functions.py	\
+	check_levelset.py		\
 	demo_crack.py 			\
 	demo_fictitious_domains.py 	\
+	demo_laplacian.py 		\
+	demo_mortar.py 			\
+	demo_plasticity.py              \
+	demo_plate.py 			\
+	demo_static_contact.py 		\
 	demo_step_by_step.py		\
 	demo_stokes_3D_tank.py          \
 	demo_stokes_3D_tank_draw.py	\
+	demo_tripod.py 			\
+	demo_tripod_alt.py 		\
+	demo_wave.py			\
 	getfem_tvtk.py
 
 if BUILDPYTHON
diff --git a/interface/tests/python/Makefile.in b/interface/tests/python/Makefile.in
index f0f695e..24bd2df 100644
--- a/interface/tests/python/Makefile.in
+++ b/interface/tests/python/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -78,6 +78,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -96,6 +97,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -112,6 +114,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -176,6 +179,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -211,7 +215,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -232,21 +235,22 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 EXTRA_DIST = \
-	demo_tripod.py 			\
-	demo_tripod_alt.py 		\
-	demo_plate.py 			\
 	check_export.py 		\
-	check_levelset.py		\
-	getfem_tvtk.py 			\
-	demo_laplacian.py 		\
-	demo_plasticity.py              \
-	demo_wave.py			\
 	check_global_functions.py	\
+	check_levelset.py		\
 	demo_crack.py 			\
 	demo_fictitious_domains.py 	\
+	demo_laplacian.py 		\
+	demo_mortar.py 			\
+	demo_plasticity.py              \
+	demo_plate.py 			\
+	demo_static_contact.py 		\
 	demo_step_by_step.py		\
 	demo_stokes_3D_tank.py          \
 	demo_stokes_3D_tank_draw.py	\
+	demo_tripod.py 			\
+	demo_tripod_alt.py 		\
+	demo_wave.py			\
 	getfem_tvtk.py
 
 @BUILDPYTHON_TRUE at TESTS = \
@@ -388,14 +392,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -444,10 +449,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/interface/tests/python/check_export.py b/interface/tests/python/check_export.py
index b8663fb..9f0eb33 100644
--- a/interface/tests/python/check_export.py
+++ b/interface/tests/python/check_export.py
@@ -24,7 +24,7 @@
   This program is used to check that python-getfem is working. This is
   also a good example of use of python-getfem..
 
-  $Id: check_export.py 3226 2009-10-14 01:28:01Z lsaavedr $
+  $Id: check_export.py 4035 2012-02-18 12:21:20Z renard $
 """
 import getfem as gf
 import numpy as np
@@ -70,11 +70,14 @@ m1.export_to_vtk('check_export1.vtk','quality')
 mf0.export_to_vtk('check_export2.vtk','ascii')
 mf1.export_to_vtk('check_export3.vtk','ascii')
 
+
+
 # DX:
 try:
     m0.export_to_dx('check_export0.dx')
-except RuntimeError:
-    pass
+except RuntimeError as detail:
+    print detail
+
 m1.export_to_dx('check_export0.dx','ascii','edges')
 m1.export_to_dx('check_export0.dx','ascii','append')
 sl.export_to_dx('check_export1.dx','ascii')
diff --git a/interface/tests/python/check_global_functions.py b/interface/tests/python/check_global_functions.py
index b8ffc6b..fc53f48 100644
--- a/interface/tests/python/check_global_functions.py
+++ b/interface/tests/python/check_global_functions.py
@@ -24,7 +24,7 @@
   This program is used to check that python-getfem is working. This is
   also a good example of use of python-getfem..
 
-  $Id: check_global_functions.py 3468 2010-02-24 20:12:15Z renard $
+  $Id: check_global_functions.py 4035 2012-02-18 12:21:20Z renard $
 """
 import numpy as np
 import getfem as gf
@@ -79,10 +79,10 @@ if gf.getfem_env('muParser') == '1':
  p1 = gf.GlobalFunction('parser','1')
  p2 = gf.GlobalFunction('parser','2')
  p3 = gf.GlobalFunction('parser','3')
- p00 = gf.GlobalFunction('parser','x','1;0;')
- p11 = gf.GlobalFunction('parser','y','0;1;')
+ p00 = gf.GlobalFunction('parser','x','1;0')
+ p11 = gf.GlobalFunction('parser','y','0;1')
  p22 = gf.GlobalFunction('parser','r','x/r;y/r;','y^2/r^3;-x*y/r^3;-x*y/r^3;x^2/r^3')
- p33 = gf.GlobalFunction('parser','theta','-y/(r^2);x/(r^2);','2*x*y/r^4;(y^2-x^2)/r^4;(y^2-x^2)/r^4;-2*x*y/r^4;')
+ p33 = gf.GlobalFunction('parser','theta','-y/(r^2);x/(r^2)','2*x*y/r^4;(y^2-x^2)/r^4;(y^2-x^2)/r^4;-2*x*y/r^4')
  mf.export_to_pos('check_global_functions16.pos',p0(PTs),'0')
  mf.export_to_pos('check_global_functions17.pos',p1(PTs),'1')
  mf.export_to_pos('check_global_functions18.pos',p2(PTs),'2')
diff --git a/interface/tests/python/demo_laplacian.py b/interface/tests/python/demo_laplacian.py
index 72902ad..97f1b1f 100644
--- a/interface/tests/python/demo_laplacian.py
+++ b/interface/tests/python/demo_laplacian.py
@@ -24,7 +24,7 @@
   This program is used to check that python-getfem is working. This is
   also a good example of use of GetFEM++.
 
-  $Id: demo_laplacian.py 3226 2009-10-14 01:28:01Z lsaavedr $
+  $Id: demo_laplacian.py 3809 2011-09-26 20:38:56Z logari81 $
 """
 # import basic modules
 import getfem as gf
@@ -67,11 +67,11 @@ m.set_region(DIRICHLET_BOUNDARY_NUM2, ftop)
 m.set_region(NEUMANN_BOUNDARY_NUM, fneum)
 
 # interpolate the exact solution (Assuming mfu is a Lagrange fem)
-Ue = mfu.eval('x[1]*(x[1]-1)*x[0]*(x[0]-1)+x[0]*x[0]*x[0]*x[0]*x[0]')
+Ue = mfu.eval('y*(y-1)*x*(x-1)+x*x*x*x*x')
 
 # interpolate the source term
-F1 = mfrhs.eval('-(2*(x[0]*x[0]+x[1]*x[1])-2*x[0]-2*x[1]+20*x[0]*x[0]*x[0])')
-F2 = mfrhs.eval('[x[1]*(x[1]-1)*(2*x[0]-1) + 5*x[0]*x[0]*x[0]*x[0], x[0]*(x[0]-1)*(2*x[1]-1)]')
+F1 = mfrhs.eval('-(2*(x*x+y*y)-2*x-2*y+20*x*x*x)')
+F2 = mfrhs.eval('[y*(y-1)*(2*x-1) + 5*x*x*x*x, x*(x-1)*(2*y-1)]')
 
 # model
 md = gf.Model('real')
diff --git a/interface/tests/python/demo_mortar.py b/interface/tests/python/demo_mortar.py
new file mode 100644
index 0000000..27db154
--- /dev/null
+++ b/interface/tests/python/demo_mortar.py
@@ -0,0 +1,117 @@
+#!/usr/bin/env python
+# -*- coding: UTF8 -*-
+# Python GetFEM++ interface
+#
+# Copyright (C) 2011 Yves Renard.
+#
+# This file is a part of GetFEM++
+#
+# GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+# under  the  terms  of the  GNU  Lesser General Public License as published
+# by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
+# License for more details.
+# You  should  have received a copy of the GNU Lesser General Public License
+# along  with  this program;  if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+############################################################################
+
+""" Elasticity mortar problem test.
+
+  This program is used to check that python-getfem is working. This is
+  also a good example of use of GetFEM++.
+
+  It does a partition of the mesh into two disjoint areas, and then
+  solves the linear elasticity problem with a mortar join on  the
+  interface between the two areas
+"""
+
+# import basic modules
+import getfem as gf
+import numpy as np
+
+# Parameters
+NX = 9
+radius = 0.3
+xc = 0.5
+yc = 0.5
+
+# creation of a simple cartesian mesh
+m = gf.Mesh('cartesian', np.arange(0,1+0.5/NX,1./NX), np.arange(0,1+0.5/NX,1./NX))
+
+(pid,idx) = m.pid_from_cvid()
+
+P = m.pts()
+
+is_in_circle = (P[0,:]-xc)**2+(P[1,:]-yc)**2 <= radius**2
+
+areap = np.zeros(idx.size-1)
+for cv in range(idx.size-1):
+   if all(is_in_circle[pid[idx[cv]:idx[cv+1]]]):
+      areap[cv] = 1
+
+mfu = gf.MeshFem(m,2)
+mfd = gf.MeshFem(m,1)
+mfm = gf.MeshFem(m,2)
+mfdu= gf.MeshFem(m)
+
+mim = gf.MeshIm(m,5)
+
+mfu.set_fem(gf.Fem('FEM_QK(2,2)'))
+mfd.set_fem(gf.Fem('FEM_QK(2,1)'))
+mfm.set_fem(gf.Fem('FEM_QK(2,2)'))
+mfdu.set_fem(gf.Fem('FEM_QK_DISCONTINUOUS(2,2)'))
+
+mfu.set_dof_partition(areap)
+
+b_in  = m.outer_faces(np.nonzero(areap==1))
+b_out = m.outer_faces(np.nonzero(areap==0))
+b_border = m.outer_faces()
+b_out = np.array(tuple(set(tuple(r) for r in b_out.transpose())-
+                       set(tuple(r) for r in b_border.transpose()))).transpose()
+
+fleft = m.faces_from_pid(np.nonzero(abs(P[1])<1e-6))
+fright = m.faces_from_pid(np.nonzero(abs(P[1]-1.)<1e-6))
+
+# assign boundary numbers
+m.set_region(1,fleft)
+m.set_region(2,fright)
+
+MORTAR_BOUNDARY_IN = 40
+MORTAR_BOUNDARY_OUT = 41
+m.set_region(MORTAR_BOUNDARY_IN, b_in)
+m.set_region(MORTAR_BOUNDARY_OUT, b_out)
+
+indm = mfm.basic_dof_on_region(MORTAR_BOUNDARY_OUT)
+expr = 'M(#1,#2)+=comp(vBase(#1).vBase(#2))(:,i,:,i)'
+M =   gf.asm_boundary(MORTAR_BOUNDARY_IN, expr, mim, mfm, mfu)
+M = M-gf.asm_boundary(MORTAR_BOUNDARY_OUT, expr, mim, mfm, mfu)
+M = gf.Spmat('copy', M, indm, range(M.size()[1]))
+
+
+md = gf.Model('real')
+md.add_fem_variable('u', mfu);
+md.add_initialized_data('lambda', [1])
+md.add_initialized_data('mu', [1])
+md.add_isotropic_linearized_elasticity_brick(mim, 'u', 'lambda', 'mu')
+
+md.add_Dirichlet_condition_with_multipliers(mim, 'u', mfu, 1)
+
+F = mfd.eval('[0,y+2]')
+
+md.add_initialized_fem_data('VolumicData', mfd, F)
+md.add_source_term_brick(mim, 'u', 'VolumicData')
+md.add_variable('mult_spec', indm.size)
+md.add_constraint_with_multipliers('u', 'mult_spec', M, np.zeros(indm.size))
+
+md.solve();
+U = md.get('variable', 'u')
+
+VM = md.compute_isotropic_linearized_Von_Mises_or_Tresca('u', 'lambda', 'mu', mfdu)
+
+mfd.export_to_vtk('mortar.vtk', 'ascii', mfdu,  VM, 'Von Mises Stress', mfu, U, 'Displacement')
+
diff --git a/interface/tests/python/demo_plate.py b/interface/tests/python/demo_plate.py
index 26ecaf8..07ee6f0 100644
--- a/interface/tests/python/demo_plate.py
+++ b/interface/tests/python/demo_plate.py
@@ -24,7 +24,7 @@
   This program is used to check that python-getfem is working. This is
   also a good example of use of GetFEM++.
 
-  $Id: demo_plate.py 3226 2009-10-14 01:28:01Z lsaavedr $
+  $Id: demo_plate.py 3809 2011-09-26 20:38:56Z logari81 $
 """
 from getfem import *
 from numpy import *
@@ -69,7 +69,7 @@ else:
     b0 = MdBrick('mixed_isotropic_linearized_plate',mim,mfut,mfu3,mfth,thickness)
 
 b1 = MdBrick('plate_source_term', b0)
-b1.set('param', 'M', mfd, mfd.eval('[0, x[1]*x[1]/1000]'))
+b1.set('param', 'M', mfd, mfd.eval('[0, y*y/1000]'))
 
 b2 = MdBrick('plate clamped support', b1, CLAMPED_BOUNDARY, 'augmented');
 
diff --git a/interface/tests/python/demo_static_contact.py b/interface/tests/python/demo_static_contact.py
new file mode 100644
index 0000000..ea589d0
--- /dev/null
+++ b/interface/tests/python/demo_static_contact.py
@@ -0,0 +1,327 @@
+#!/usr/bin/env python
+# -*- coding: UTF8 -*-
+# Python GetFEM++ interface
+#
+# Copyright (C) 2011 Yves Renard.
+#
+# This file is a part of GetFEM++
+#
+# GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+# under  the  terms  of the  GNU  Lesser General Public License as published
+# by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
+# License for more details.
+# You  should  have received a copy of the GNU Lesser General Public License
+# along  with  this program;  if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+############################################################################
+
+""" Static equilibrium of an elastic solid in contact with a rigid foundation
+
+  This program is used to check that python-getfem is working. This is also
+  a good example of use of GetFEM++.
+"""
+
+import getfem as gf
+import numpy as np
+
+# Import the mesh : disc
+# m = gf.Mesh('load', '../../../tests/meshes/disc_P2_h4.mesh')
+#m = gf.Mesh('load', '../../../tests/meshes/disc_P2_h2.mesh')
+# m = gf.Mesh('load', '../../../tests/meshes/disc_P2_h1.mesh')
+# m = gf.Mesh('load', '../../../tests/meshes/disc_P2_h0_5.mesh')
+# m = gf.Mesh('load', '../../../tests/meshes/disc_P2_h0_3.mesh')
+
+# Import the mesh : sphere
+# m = gf.Mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_8_elts.mesh')
+# m = gf.Mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_80_elts.mesh')
+m = gf.Mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_400_elts.mesh')
+# m = gf.Mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_2000_elts.mesh')
+# m = gf.Mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_16000_elts.mesh')
+
+d = m.dim() # Mesh dimension
+
+# Parameters of the model
+clambda = 1.          # Lame coefficient
+cmu = 1.              # Lame coefficient
+friction_coeff = 0.4  # coefficient of friction
+vertical_force = 0.05 # Volumic load in the vertical direction
+r = 10.               # Augmentation parameter
+condition_type = 0 # 0 = Explicitely kill horizontal rigid displacements
+                   # 1 = Kill rigid displacements using a global penalization
+                   # 2 = Add a Dirichlet condition on the top of the structure
+penalty_parameter = 1E-6    # Penalization coefficient for the global penalization
+
+if d == 2:
+   cpoints = [0, 0]   # constrained points for 2d
+   cunitv  = [1, 0]   # corresponding constrained directions for 2d
+else:
+   cpoints = [0, 0, 0,   0, 0, 0,   5, 0, 5]  # constrained points for 3d
+   cunitv  = [1, 0, 0,   0, 1, 0,   0, 1, 0]  # corresponding constrained directions for 3d
+
+niter = 100  # Maximum number of iterations for Newton's algorithm.
+version = 13  # 1 : frictionless contact and the basic contact brick
+              # 2 : contact with 'static' Coulomb friction and basic contact brick
+              # 3 : frictionless contact and the contact with a
+              #     rigid obstacle brick
+              # 4 : contact with 'static' Coulomb friction and the contact with a
+              #     rigid obstacle brick
+              # 5 : frictionless contact and the integral brick
+              #     Newton and Alart-Curnier augmented lagrangian,
+              #     unsymmetric version
+              # 6 : frictionless contact and the integral brick
+              #     Newton and Alart-Curnier augmented lagrangian, symmetric
+              #     version.
+              # 7 : frictionless contact and the integral brick
+              #     Newton and Alart-Curnier augmented lagrangian,
+              #     unsymmetric version with an additional augmentation.
+              # 8 : frictionless contact and the integral brick
+              #     New unsymmetric method.
+              # 9 : frictionless contact and the integral brick : Uzawa
+              #     on the Lagrangian augmented by the penalization term.
+              # 10 : contact with 'static' Coulomb friction and the integral brick
+              #     Newton and Alart-Curnier augmented lagrangian,
+              #     unsymmetric version.
+              # 11 : contact with 'static' Coulomb friction and the integral brick
+              #     Newton and Alart-Curnier augmented lagrangian,
+              #     nearly symmetric version.
+              # 12 : contact with 'static' Coulomb friction and the integral brick
+              #     Newton and Alart-Curnier augmented lagrangian,
+              #     unsymmetric version with an additional augmentation.
+              # 13 : contact with 'static' Coulomb friction and the integral brick
+              #     New unsymmetric method.
+              # 14 : contact with 'static' Coulomb friction and the integral brick : Uzawa
+              #     on the Lagrangian augmented by the penalization term.
+              # 15 : penalized contact with 'static' Coulomb friction (r is the penalization
+              #     coefficient).
+
+# Signed distance representing the obstacle
+if d == 2:
+   obstacle = 'y'
+else:
+   obstacle = 'z'
+
+# Selection of the contact and Dirichlet boundaries
+GAMMAC = 1
+GAMMAD = 2
+
+border = m.outer_faces()
+normals = m.normal_of_faces(border)
+contact_boundary = border[:,np.nonzero(normals[d-1] < -0.01)[0]]
+m.set_region(GAMMAC, contact_boundary)
+contact_boundary = border[:,np.nonzero(normals[d-1] > 0.01)[0]]
+m.set_region(GAMMAD, contact_boundary)
+
+# Finite element methods
+u_degree = 2
+lambda_degree = 2
+
+mfu = gf.MeshFem(m, d)
+mfu.set_classical_fem(u_degree)
+
+mfd = gf.MeshFem(m, 1)
+mfd.set_classical_fem(u_degree)
+
+mflambda = gf.MeshFem(m, 1) # used only by version 5 to 13
+mflambda.set_classical_fem(lambda_degree)
+
+mfvm = gf.MeshFem(m, 1)
+mfvm.set_classical_discontinuous_fem(u_degree-1)
+
+# Integration method
+mim = gf.MeshIm(m, 4)
+if d == 2:
+   mim_friction = gf.MeshIm(m,
+     gf.Integ('IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(4),4)'))
+else:
+   mim_friction = gf.MeshIm(m,
+     gf.Integ('IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(5),4)'))
+
+# Volumic density of force
+nbdofd = mfd.nbdof()
+nbdofu = mfu.nbdof()
+F = np.zeros(nbdofd*d)
+F[d-1:nbdofd*d:d] = -vertical_force;
+
+# Elasticity model
+md = gf.Model('real')
+md.add_fem_variable('u', mfu)
+md.add_initialized_data('cmu', [cmu])
+md.add_initialized_data('clambda', [clambda])
+md.add_isotropic_linearized_elasticity_brick(mim, 'u', 'clambda', 'cmu')
+md.add_initialized_fem_data('volumicload', mfd, F)
+md.add_source_term_brick(mim, 'u', 'volumicload')
+
+if condition_type == 2:
+   Ddata = np.zeros(d)
+   Ddata[d-1] = -5
+   md.add_initialized_data('Ddata', Ddata)
+   md.add_Dirichlet_condition_with_multipliers(mim, 'u', u_degree, GAMMAD, 'Ddata')
+elif condition_type == 0:
+   md.add_initialized_data('cpoints', cpoints)
+   md.add_initialized_data('cunitv', cunitv)
+   md.add_pointwise_constraints_with_multipliers('u', 'cpoints', 'cunitv')
+elif condition_type == 1:
+   # Small penalty term to avoid rigid motion (should be replaced by an
+   # explicit treatment of the rigid motion with a constraint matrix)
+   md.add_initialized_data('penalty_param', [penalty_parameter])
+   md.add_mass_brick(mim, 'u', 'penalty_param')
+
+# The contact condition
+
+cdof = mfu.dof_on_region(GAMMAC)
+nbc = cdof.shape[0] / d
+
+solved = False
+if version == 1 or version == 2: # defining the matrices BN and BT by hand
+   contact_dof = cdof[d-1:nbc*d:d]
+   contact_nodes = mfu.basic_dof_nodes(contact_dof)
+   BN = gf.Spmat('empty', nbc, nbdofu)
+   ngap = np.zeros(nbc)
+   for i in range(nbc):
+      BN[i, contact_dof[i]] = -1.
+      ngap[i] = contact_nodes[d-1, i]
+
+   if version == 2:
+      BT = gf.Spmat('empty', nbc*(d-1), nbdofu)
+      for i in range(nbc):
+         for j in range(d-1):
+            BT[j+i*(d-1), contact_dof[i]-d+j+1] = 1.0
+
+   md.add_variable('lambda_n', nbc)
+   md.add_initialized_data('r', [r])
+   if version == 2:
+      md.add_variable('lambda_t', nbc * (d-1))
+      md.add_initialized_data('friction_coeff', [friction_coeff])
+
+   md.add_initialized_data('ngap', ngap)
+   md.add_initialized_data('alpha', np.ones(nbc))
+   if version == 1:
+      md.add_basic_contact_brick('u', 'lambda_n', 'r', BN, 'ngap', 'alpha', 1)
+   else:
+      md.add_basic_contact_brick('u', 'lambda_n', 'lambda_t', 'r', BN, BT, 'friction_coeff', 'ngap', 'alpha', 1);
+
+elif version == 3 or version == 4: # BN and BT defined by the contact brick
+
+   md.add_variable('lambda_n', nbc)
+   md.add_initialized_data('r', [r])
+   if version == 3:
+      md.add_nodal_contact_with_rigid_obstacle_brick(mim, 'u', 'lambda_n', 'r', GAMMAC, obstacle, 1);
+   else:
+      md.add_variable('lambda_t', nbc*(d-1))
+      md.add_initialized_data('friction_coeff', [friction_coeff])
+      md.add_nodal_contact_with_rigid_obstacle_brick(mim, 'u', 'lambda_n', 'lambda_t', 'r',
+                                                     'friction_coeff', GAMMAC, obstacle, 1)
+
+elif version >= 5 and version <= 8: # The integral version, Newton
+
+   ldof = mflambda.dof_on_region(GAMMAC)
+   mflambda_partial = gf.MeshFem('partial', mflambda, ldof)
+   md.add_fem_variable('lambda_n', mflambda_partial)
+   md.add_initialized_data('r', [r])
+   OBS = mfd.eval(obstacle)
+   md.add_initialized_fem_data('obstacle', mfd, OBS)
+   md.add_integral_contact_with_rigid_obstacle_brick(mim_friction, 'u', 'lambda_n',
+                                                      'obstacle', 'r', GAMMAC, version-4);
+
+elif version == 9: # The integral version, Uzawa on the augmented Lagrangian
+
+   ldof = mflambda.dof_on_region(GAMMAC)
+   mflambda_partial = gf.MeshFem('partial', mflambda, ldof)
+   nbc = mflambda_partial.nbdof()
+   M = gf.asm_mass_matrix(mim, mflambda_partial, mflambda_partial, GAMMAC)
+   lambda_n = np.zeros(nbc)
+   md.add_initialized_fem_data('lambda_n', mflambda_partial, lambda_n)
+   md.add_initialized_data('r', [r])
+   OBS = mfd.eval(obstacle) # np.array([mfd.eval(obstacle)])
+   md.add_initialized_fem_data('obstacle', mfd, OBS)
+   md.add_penalized_contact_with_rigid_obstacle_brick \
+     (mim_friction, 'u', 'obstacle', 'r', GAMMAC, 2, 'lambda_n')
+
+   for ii in range(100):
+      print 'iteration %d' % (ii+1)
+      md.solve('max_res', 1E-9, 'max_iter', niter)
+      U = md.get('variable', 'u')
+      lambda_n_old = lambda_n
+      sol = gf.linsolve_superlu(M, gf.asm_integral_contact_Uzawa_projection(GAMMAC, mim_friction, mfu, U, mflambda_partial, lambda_n, mfd, OBS, r))
+      lambda_n = sol[0].transpose()
+      md.set_variable('lambda_n', lambda_n)
+      difff = max(abs(lambda_n-lambda_n_old))[0]/max(abs(lambda_n))[0]
+      print 'diff : %g' % difff
+      if difff < penalty_parameter:
+         break
+
+   solved = True
+
+elif version >= 10 and version <= 13: # The integral version with friction, Newton
+
+   mflambda.set_qdim(d);
+   ldof = mflambda.dof_on_region(GAMMAC)
+   mflambda_partial = gf.MeshFem('partial', mflambda, ldof)
+   md.add_fem_variable('lambda', mflambda_partial)
+   md.add_initialized_data('r', [r])
+   md.add_initialized_data('friction_coeff', [friction_coeff])
+   OBS = mfd.eval(obstacle)
+   md.add_initialized_fem_data('obstacle', mfd, OBS)
+   md.add_integral_contact_with_rigid_obstacle_brick \
+     (mim_friction, 'u', 'lambda', 'obstacle', 'r', 'friction_coeff', GAMMAC, version-9)
+
+elif version == 14: # The integral version, Uzawa on the augmented Lagrangian with friction
+  
+   mflambda.set_qdim(d)
+   ldof = mflambda.dof_on_region(GAMMAC)
+   mflambda_partial = gf.MeshFem('partial', mflambda, ldof)
+   nbc = mflambda_partial.nbdof()
+   md.add_initialized_data('friction_coeff', [friction_coeff])
+   M = gf.asm_mass_matrix(mim, mflambda_partial, mflambda_partial, GAMMAC)
+   lambda_nt = np.zeros(nbc)
+   md.add_initialized_fem_data('lambda', mflambda_partial, lambda_nt)
+   md.add_initialized_data('r', [r])
+   OBS = mfd.eval(obstacle)
+   md.add_initialized_fem_data('obstacle', mfd, OBS)
+   md.add_penalized_contact_with_rigid_obstacle_brick \
+     (mim_friction, 'u', 'obstacle', 'r', 'friction_coeff', GAMMAC, 2, 'lambda')
+
+   for ii in range(100):
+      print 'iteration %d' % (ii+1)
+      md.solve('max_res', 1E-9, 'max_iter', niter)
+      U = md.get('variable', 'u')
+      lambda_nt_old = lambda_nt
+      sol = gf.linsolve_superlu(M,
+        gf.asm_integral_contact_Uzawa_projection(
+        GAMMAC, mim_friction, mfu, U, mflambda_partial, lambda_nt, mfd, OBS, r, friction_coeff))
+      lambda_nt = sol[0].transpose()
+      md.set_variable('lambda', lambda_nt)
+      difff = max(abs(lambda_nt-lambda_nt_old))[0]/max(abs(lambda_nt))[0]
+      print 'diff : %g' % difff
+      if difff < penalty_parameter:
+         break
+ 
+   solved = True
+
+elif version == 15:
+ 
+   md.add_initialized_data('r', [r])
+   md.add_initialized_data('friction_coeff', [friction_coeff])
+   OBS = mfd.eval(obstacle)
+   md.add_initialized_fem_data('obstacle', mfd, OBS);
+   md.add_penalized_contact_with_rigid_obstacle_brick \
+     (mim_friction, 'u', 'obstacle', 'r', 'friction_coeff', GAMMAC)
+
+else:
+   print 'Inexistent version'
+
+# Solve the problem
+if not solved:
+   md.solve('max_res', 1E-9, 'very noisy', 'max_iter', niter, 'lsearch', 'default') #, 'with pseudo potential')
+
+U = md.get('variable', 'u')
+# LAMBDA = md.get('variable', 'lambda_n')
+VM = md.compute_isotropic_linearized_Von_Mises_or_Tresca('u', 'clambda', 'cmu', mfvm)
+
+mfd.export_to_vtk('static_contact.vtk', 'ascii', mfvm,  VM, 'Von Mises Stress', mfu, U, 'Displacement')
+
diff --git a/interface/tests/python/demo_step_by_step.py b/interface/tests/python/demo_step_by_step.py
index 7451d81..3be92c9 100644
--- a/interface/tests/python/demo_step_by_step.py
+++ b/interface/tests/python/demo_step_by_step.py
@@ -35,7 +35,7 @@ md.add_fem_variable('u', mf)
 md.add_Laplacian_brick(mim, 'u');
 
 # add Dirichlet condition
-g = mf.eval('x[0]*(x[0]-1) - x[1]*(x[1]-1)')
+g = mf.eval('x*(x-1) - y*(y-1)')
 md.add_initialized_fem_data('DirichletData', mf, g)
 md.add_Dirichlet_condition_with_multipliers(mim, 'u', mf, 42, 'DirichletData')
 
diff --git a/interface/tests/python/demo_wave.py b/interface/tests/python/demo_wave.py
index 019bfb3..53d2381 100644
--- a/interface/tests/python/demo_wave.py
+++ b/interface/tests/python/demo_wave.py
@@ -24,7 +24,7 @@
   This program is used to check that python-getfem is working. This is
   also a good example of use of GetFEM++.
 
-  $Id: demo_wave.py 3226 2009-10-14 01:28:01Z lsaavedr $
+  $Id: demo_wave.py 3809 2011-09-26 20:38:56Z logari81 $
 """
 from numpy import *
 from getfem import *
@@ -62,7 +62,7 @@ m.set_region(DIRICHLET_BOUNDARY,fobj)
 m.set_region(ROBIN_BOUNDARY,fout)
 
 ## Interpolate the exact solution on mfd (assuming it is a Lagrange fem)
-wave_expr = ('cos(%f*x[1]+.2)+complex(0.,1.)*sin(%f*x[1]+.2)' % (k,k));
+wave_expr = ('cos(%f*y+.2)+complex(0.,1.)*sin(%f*y+.2)' % (k,k));
 Uinc=mfd.eval(wave_expr,globals(),locals());
 
 ## Model Bricks
diff --git a/ltmain.sh b/ltmain.sh
old mode 100755
new mode 100644
index 7ed280b..c2852d8
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1,9 +1,9 @@
-# Generated from ltmain.m4sh.
 
-# ltmain.sh (GNU libtool) 2.2.6b
+# libtool (GNU libtool) 2.4.2
 # Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+# 2007, 2008, 2009, 2010, 2011 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.
 
@@ -32,50 +32,57 @@
 #
 # Provide generalized library-building support services.
 #
-#     --config             show all configuration variables
-#     --debug              enable verbose shell tracing
-# -n, --dry-run            display commands without modifying any files
-#     --features           display basic configuration information and exit
-#     --mode=MODE          use operation mode MODE
-#     --preserve-dup-deps  don't remove duplicate dependency libraries
-#     --quiet, --silent    don't print informational messages
-#     --tag=TAG            use configuration variables from tag TAG
-# -v, --verbose            print informational messages (default)
-#     --version            print version information
-# -h, --help               print short or long help message
+#       --config             show all configuration variables
+#       --debug              enable verbose shell tracing
+#   -n, --dry-run            display commands without modifying any files
+#       --features           display basic configuration information and exit
+#       --mode=MODE          use operation mode MODE
+#       --preserve-dup-deps  don't remove duplicate dependency libraries
+#       --quiet, --silent    don't print informational messages
+#       --no-quiet, --no-silent
+#                            print informational messages (default)
+#       --no-warn            don't display warning messages
+#       --tag=TAG            use configuration variables from tag TAG
+#   -v, --verbose            print more informational messages than default
+#       --no-verbose         don't print the extra informational messages
+#       --version            print version information
+#   -h, --help, --help-all   print short, long, or detailed help message
 #
 # MODE must be one of the following:
 #
-#       clean              remove files from the build directory
-#       compile            compile a source file into a libtool object
-#       execute            automatically set library path, then run a program
-#       finish             complete the installation of libtool libraries
-#       install            install libraries or executables
-#       link               create a library or an executable
-#       uninstall          remove libraries from an installed directory
+#         clean              remove files from the build directory
+#         compile            compile a source file into a libtool object
+#         execute            automatically set library path, then run a program
+#         finish             complete the installation of libtool libraries
+#         install            install libraries or executables
+#         link               create a library or an executable
+#         uninstall          remove libraries from an installed directory
 #
-# MODE-ARGS vary depending on the MODE.
+# MODE-ARGS vary depending on the MODE.  When passed as first option,
+# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
 # Try `$progname --help --mode=MODE' for a more detailed description of MODE.
 #
 # When reporting a bug, please describe a test case to reproduce it and
 # include the following information:
 #
-#       host-triplet:	$host
-#       shell:		$SHELL
-#       compiler:		$LTCC
-#       compiler flags:		$LTCFLAGS
-#       linker:		$LD (gnu? $with_gnu_ld)
-#       $progname:		(GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1
-#       automake:		$automake_version
-#       autoconf:		$autoconf_version
+#         host-triplet:	$host
+#         shell:		$SHELL
+#         compiler:		$LTCC
+#         compiler flags:		$LTCFLAGS
+#         linker:		$LD (gnu? $with_gnu_ld)
+#         $progname:	(GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1
+#         automake:	$automake_version
+#         autoconf:	$autoconf_version
 #
 # Report bugs to <bug-libtool at gnu.org>.
+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+# General help using GNU software: <http://www.gnu.org/gethelp/>.
 
-PROGRAM=ltmain.sh
+PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.2.6b Debian-2.2.6b-2ubuntu1"
+VERSION="2.4.2 Debian-2.4.2-1ubuntu1"
 TIMESTAMP=""
-package_revision=1.3017
+package_revision=1.3337
 
 # Be Bourne compatible
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
@@ -91,10 +98,15 @@ fi
 BIN_SH=xpg4; export BIN_SH # for Tru64
 DUALCASE=1; export DUALCASE # for MKS sh
 
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
 # NLS nuisances: We save the old values to restore during execute mode.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
 lt_user_locale=
 lt_safe_locale=
 for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
@@ -107,24 +119,28 @@ do
 	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
 	fi"
 done
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
 
 $lt_unset CDPATH
 
 
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
 
 
 
 : ${CP="cp -f"}
-: ${ECHO="echo"}
-: ${EGREP="/bin/grep -E"}
-: ${FGREP="/bin/grep -F"}
-: ${GREP="/bin/grep"}
-: ${LN_S="ln -s"}
+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
 : ${MAKE="make"}
 : ${MKDIR="mkdir"}
 : ${MV="mv -f"}
 : ${RM="rm -f"}
-: ${SED="/bin/sed"}
 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
 : ${Xsed="$SED -e 1s/^X//"}
 
@@ -144,6 +160,27 @@ IFS=" 	$lt_nl"
 dirname="s,/[^/]*$,,"
 basename="s,^.*/,,"
 
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+} # func_dirname may be replaced by extended shell implementation
+
+
+# func_basename file
+func_basename ()
+{
+    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+} # func_basename may be replaced by extended shell implementation
+
+
 # func_dirname_and_basename file append nondir_replacement
 # perform func_basename and func_dirname in a single function
 # call:
@@ -158,33 +195,183 @@ basename="s,^.*/,,"
 # those functions but instead duplicate the functionality here.
 func_dirname_and_basename ()
 {
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+    # Extract subdirectory from the argument.
+    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
+} # func_dirname_and_basename may be replaced by extended shell implementation
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+    case ${2} in
+      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+    esac
+} # func_stripname may be replaced by extended shell implementation
+
+
+# These SED scripts presuppose an absolute path with a trailing slash.
+pathcar='s,^/\([^/]*\).*$,\1,'
+pathcdr='s,^/[^/]*,,'
+removedotparts=':dotsl
+		s@/\./@/@g
+		t dotsl
+		s,/\.$,/,'
+collapseslashes='s@/\{1,\}@/@g'
+finalslash='s,/*$,/,'
+
+# func_normal_abspath PATH
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+#             value returned in "$func_normal_abspath_result"
+func_normal_abspath ()
+{
+  # Start from root dir and reassemble the path.
+  func_normal_abspath_result=
+  func_normal_abspath_tpath=$1
+  func_normal_abspath_altnamespace=
+  case $func_normal_abspath_tpath in
+    "")
+      # Empty path, that just means $cwd.
+      func_stripname '' '/' "`pwd`"
+      func_normal_abspath_result=$func_stripname_result
+      return
+    ;;
+    # The next three entries are used to spot a run of precisely
+    # two leading slashes without using negated character classes;
+    # we take advantage of case's first-match behaviour.
+    ///*)
+      # Unusual form of absolute path, do nothing.
+    ;;
+    //*)
+      # Not necessarily an ordinary path; POSIX reserves leading '//'
+      # and for example Cygwin uses it to access remote file shares
+      # over CIFS/SMB, so we conserve a leading double slash if found.
+      func_normal_abspath_altnamespace=/
+    ;;
+    /*)
+      # Absolute path, do nothing.
+    ;;
+    *)
+      # Relative path, prepend $cwd.
+      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+    ;;
+  esac
+  # Cancel out all the simple stuff to save iterations.  We also want
+  # the path to end with a slash for ease of parsing, so make sure
+  # there is one (and only one) here.
+  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
+  while :; do
+    # Processed it all yet?
+    if test "$func_normal_abspath_tpath" = / ; then
+      # If we ascended to the root using ".." the result may be empty now.
+      if test -z "$func_normal_abspath_result" ; then
+        func_normal_abspath_result=/
+      fi
+      break
+    fi
+    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcar"`
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcdr"`
+    # Figure out what to do with it
+    case $func_normal_abspath_tcomponent in
+      "")
+        # Trailing empty path component, ignore it.
+      ;;
+      ..)
+        # Parent dir; strip last assembled component from result.
+        func_dirname "$func_normal_abspath_result"
+        func_normal_abspath_result=$func_dirname_result
+      ;;
+      *)
+        # Actual path component, append it.
+        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
+      ;;
+    esac
+  done
+  # Restore leading double-slash if one was found on entry.
+  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
 }
 
-# Generated shell functions inserted here.
+# func_relative_path SRCDIR DSTDIR
+# generates a relative path from SRCDIR to DSTDIR, with a trailing
+# slash if non-empty, suitable for immediately appending a filename
+# without needing to append a separator.
+#             value returned in "$func_relative_path_result"
+func_relative_path ()
+{
+  func_relative_path_result=
+  func_normal_abspath "$1"
+  func_relative_path_tlibdir=$func_normal_abspath_result
+  func_normal_abspath "$2"
+  func_relative_path_tbindir=$func_normal_abspath_result
+
+  # Ascend the tree starting from libdir
+  while :; do
+    # check if we have found a prefix of bindir
+    case $func_relative_path_tbindir in
+      $func_relative_path_tlibdir)
+        # found an exact match
+        func_relative_path_tcancelled=
+        break
+        ;;
+      $func_relative_path_tlibdir*)
+        # found a matching prefix
+        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+        func_relative_path_tcancelled=$func_stripname_result
+        if test -z "$func_relative_path_result"; then
+          func_relative_path_result=.
+        fi
+        break
+        ;;
+      *)
+        func_dirname $func_relative_path_tlibdir
+        func_relative_path_tlibdir=${func_dirname_result}
+        if test "x$func_relative_path_tlibdir" = x ; then
+          # Have to descend all the way to the root!
+          func_relative_path_result=../$func_relative_path_result
+          func_relative_path_tcancelled=$func_relative_path_tbindir
+          break
+        fi
+        func_relative_path_result=../$func_relative_path_result
+        ;;
+    esac
+  done
 
-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-# is ksh but when the shell is invoked as "sh" and the current value of
-# the _XPG environment variable is not equal to 1 (one), the special
-# positional parameter $0, within a function call, is the name of the
-# function.
-progpath="$0"
+  # Now calculate path; take care to avoid doubling-up slashes.
+  func_stripname '' '/' "$func_relative_path_result"
+  func_relative_path_result=$func_stripname_result
+  func_stripname '/' '/' "$func_relative_path_tcancelled"
+  if test "x$func_stripname_result" != x ; then
+    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
+  fi
+
+  # Normalisation. If bindir is libdir, return empty string,
+  # else relative path ending with a slash; either way, target
+  # file name can be directly appended.
+  if test ! -z "$func_relative_path_result"; then
+    func_stripname './' '' "$func_relative_path_result/"
+    func_relative_path_result=$func_stripname_result
+  fi
+}
 
 # The name of this program:
-# In the unlikely event $progname began with a '-', it would play havoc with
-# func_echo (imagine progname=-n), so we prepend ./ in that case:
 func_dirname_and_basename "$progpath"
 progname=$func_basename_result
-case $progname in
-  -*) progname=./$progname ;;
-esac
 
 # Make sure we have an absolute path for reexecution:
 case $progpath in
@@ -196,7 +383,7 @@ case $progpath in
      ;;
   *)
      save_IFS="$IFS"
-     IFS=:
+     IFS=${PATH_SEPARATOR-:}
      for progdir in $PATH; do
        IFS="$save_IFS"
        test -x "$progdir/$progname" && break
@@ -215,6 +402,15 @@ sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
 # Same as above, but do not quote variable references.
 double_quote_subst='s/\(["`\\]\)/\\\1/g'
 
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
+
+# Sed substitution that converts a w32 file name or path
+# which contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
 # Re-`\' parameter expansions in output of double_quote_subst that were
 # `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
 # in input to double_quote_subst, that '$' was protected from expansion.
@@ -243,7 +439,7 @@ opt_warning=:
 # name if it has been set yet.
 func_echo ()
 {
-    $ECHO "$progname${mode+: }$mode: $*"
+    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
 }
 
 # func_verbose arg...
@@ -258,18 +454,25 @@ func_verbose ()
     :
 }
 
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
 # func_error arg...
 # Echo program name prefixed message to standard error.
 func_error ()
 {
-    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
 }
 
 # func_warning arg...
 # Echo program name prefixed warning message to standard error.
 func_warning ()
 {
-    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
 
     # bash bug again:
     :
@@ -326,9 +529,9 @@ func_mkdir_p ()
         case $my_directory_path in */*) ;; *) break ;; esac
 
         # ...otherwise throw away the child directory and loop
-        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
       done
-      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
 
       save_mkdir_p_IFS="$IFS"; IFS=':'
       for my_dir in $my_dir_list; do
@@ -378,7 +581,7 @@ func_mktempdir ()
         func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
     fi
 
-    $ECHO "X$my_tmpdir" | $Xsed
+    $ECHO "$my_tmpdir"
 }
 
 
@@ -392,7 +595,7 @@ func_quote_for_eval ()
 {
     case $1 in
       *[\\\`\"\$]*)
-	func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
       *)
         func_quote_for_eval_unquoted_result="$1" ;;
     esac
@@ -419,7 +622,7 @@ func_quote_for_expand ()
 {
     case $1 in
       *[\\\`\"]*)
-	my_arg=`$ECHO "X$1" | $Xsed \
+	my_arg=`$ECHO "$1" | $SED \
 	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
       *)
         my_arg="$1" ;;
@@ -488,15 +691,39 @@ func_show_eval_locale ()
     fi
 }
 
-
-
+# func_tr_sh
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result.  All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+  case $1 in
+  [0-9]* | *[!a-zA-Z0-9_]*)
+    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
+    ;;
+  * )
+    func_tr_sh_result=$1
+    ;;
+  esac
+}
 
 
 # func_version
 # Echo version message to standard output and exit.
 func_version ()
 {
-    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+    $opt_debug
+
+    $SED -n '/(C)/!b go
+	:more
+	/\./!{
+	  N
+	  s/\n# / /
+	  b more
+	}
+	:go
+	/^# '$PROGRAM' (GNU /,/# warranty; / {
         s/^# //
 	s/^# *$//
         s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
@@ -509,22 +736,28 @@ func_version ()
 # Echo short help message to standard output and exit.
 func_usage ()
 {
-    $SED -n '/^# Usage:/,/# -h/ {
+    $opt_debug
+
+    $SED -n '/^# Usage:/,/^#  *.*--help/ {
         s/^# //
 	s/^# *$//
 	s/\$progname/'$progname'/
 	p
     }' < "$progpath"
-    $ECHO
+    echo
     $ECHO "run \`$progname --help | more' for full usage"
     exit $?
 }
 
-# func_help
-# Echo long help message to standard output and exit.
+# func_help [NOEXIT]
+# Echo long help message to standard output and exit,
+# unless 'noexit' is passed as argument.
 func_help ()
 {
+    $opt_debug
+
     $SED -n '/^# Usage:/,/# Report bugs to/ {
+	:print
         s/^# //
 	s/^# *$//
 	s*\$progname*'$progname'*
@@ -534,11 +767,18 @@ func_help ()
 	s*\$LTCFLAGS*'"$LTCFLAGS"'*
 	s*\$LD*'"$LD"'*
 	s/\$with_gnu_ld/'"$with_gnu_ld"'/
-	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
-	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
+	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
 	p
-     }' < "$progpath"
-    exit $?
+	d
+     }
+     /^# .* home page:/b print
+     /^# General help using/b print
+     ' < "$progpath"
+    ret=$?
+    if test -z "$1"; then
+      exit $ret
+    fi
 }
 
 # func_missing_arg argname
@@ -546,63 +786,106 @@ func_help ()
 # exit_cmd.
 func_missing_arg ()
 {
-    func_error "missing argument for $1"
+    $opt_debug
+
+    func_error "missing argument for $1."
     exit_cmd=exit
 }
 
-exit_cmd=:
 
+# func_split_short_opt shortopt
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+func_split_short_opt ()
+{
+    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
+    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
 
+    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
+    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
+} # func_split_short_opt may be replaced by extended shell implementation
+
+
+# func_split_long_opt longopt
+# Set func_split_long_opt_name and func_split_long_opt_arg shell
+# variables after splitting LONGOPT at the `=' sign.
+func_split_long_opt ()
+{
+    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
+    my_sed_long_arg='1s/^--[^=]*=//'
+
+    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
+    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
+} # func_split_long_opt may be replaced by extended shell implementation
+
+exit_cmd=:
 
 
 
-# Check that we have a working $ECHO.
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell, and then maybe $ECHO will work.
-  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
-fi
 
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-$*
-EOF
-  exit $EXIT_SUCCESS
-fi
 
 magic="%%%MAGIC variable%%%"
 magic_exe="%%%MAGIC EXE variable%%%"
 
 # Global variables.
-# $mode is unset
 nonopt=
-execute_dlfiles=
 preserve_args=
 lo2o="s/\\.lo\$/.${objext}/"
 o2lo="s/\\.${objext}\$/.lo/"
 extracted_archives=
 extracted_serial=0
 
-opt_dry_run=false
-opt_duplicate_deps=false
-opt_silent=false
-opt_debug=:
-
 # If this variable is set in any of the actions, the command in it
 # will be execed at the end.  This prevents here-documents from being
 # left over by shells.
 exec_cmd=
 
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+    eval "${1}=\$${1}\${2}"
+} # func_append may be replaced by extended shell implementation
+
+# func_append_quoted var value
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+func_append_quoted ()
+{
+    func_quote_for_eval "${2}"
+    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
+} # func_append_quoted may be replaced by extended shell implementation
+
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+    func_arith_result=`expr "${@}"`
+} # func_arith may be replaced by extended shell implementation
+
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
+} # func_len may be replaced by extended shell implementation
+
+
+# func_lo2o object
+func_lo2o ()
+{
+    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+} # func_lo2o may be replaced by extended shell implementation
+
+
+# func_xform libobj-or-source
+func_xform ()
+{
+    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+} # func_xform may be replaced by extended shell implementation
+
+
 # func_fatal_configuration arg...
 # Echo program name prefixed message to standard error, followed by
 # a configuration failure hint, and exit.
@@ -636,16 +919,16 @@ func_config ()
 # Display the features supported by this script.
 func_features ()
 {
-    $ECHO "host: $host"
+    echo "host: $host"
     if test "$build_libtool_libs" = yes; then
-      $ECHO "enable shared libraries"
+      echo "enable shared libraries"
     else
-      $ECHO "disable shared libraries"
+      echo "disable shared libraries"
     fi
     if test "$build_old_libs" = yes; then
-      $ECHO "enable static libraries"
+      echo "enable static libraries"
     else
-      $ECHO "disable static libraries"
+      echo "disable static libraries"
     fi
 
     exit $?
@@ -692,117 +975,209 @@ func_enable_tag ()
   esac
 }
 
-# Parse options once, thoroughly.  This comes as soon as possible in
-# the script to make things like `libtool --version' happen quickly.
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
 {
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+# Shorthand for --mode=foo, only valid as the first argument
+case $1 in
+clean|clea|cle|cl)
+  shift; set dummy --mode clean ${1+"$@"}; shift
+  ;;
+compile|compil|compi|comp|com|co|c)
+  shift; set dummy --mode compile ${1+"$@"}; shift
+  ;;
+execute|execut|execu|exec|exe|ex|e)
+  shift; set dummy --mode execute ${1+"$@"}; shift
+  ;;
+finish|finis|fini|fin|fi|f)
+  shift; set dummy --mode finish ${1+"$@"}; shift
+  ;;
+install|instal|insta|inst|ins|in|i)
+  shift; set dummy --mode install ${1+"$@"}; shift
+  ;;
+link|lin|li|l)
+  shift; set dummy --mode link ${1+"$@"}; shift
+  ;;
+uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+  shift; set dummy --mode uninstall ${1+"$@"}; shift
+  ;;
+esac
+
+
+
+# Option defaults:
+opt_debug=:
+opt_dry_run=false
+opt_config=false
+opt_preserve_dup_deps=false
+opt_features=false
+opt_finish=false
+opt_help=false
+opt_help_all=false
+opt_silent=:
+opt_warning=:
+opt_verbose=:
+opt_silent=false
+opt_verbose=false
 
-  # Shorthand for --mode=foo, only valid as the first argument
-  case $1 in
-  clean|clea|cle|cl)
-    shift; set dummy --mode clean ${1+"$@"}; shift
-    ;;
-  compile|compil|compi|comp|com|co|c)
-    shift; set dummy --mode compile ${1+"$@"}; shift
-    ;;
-  execute|execut|execu|exec|exe|ex|e)
-    shift; set dummy --mode execute ${1+"$@"}; shift
-    ;;
-  finish|finis|fini|fin|fi|f)
-    shift; set dummy --mode finish ${1+"$@"}; shift
-    ;;
-  install|instal|insta|inst|ins|in|i)
-    shift; set dummy --mode install ${1+"$@"}; shift
-    ;;
-  link|lin|li|l)
-    shift; set dummy --mode link ${1+"$@"}; shift
-    ;;
-  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
-    shift; set dummy --mode uninstall ${1+"$@"}; shift
-    ;;
-  esac
 
-  # Parse non-mode specific arguments:
-  while test "$#" -gt 0; do
+# Parse options once, thoroughly.  This comes as soon as possible in the
+# script to make things like `--version' happen as quickly as we can.
+{
+  # this just eases exit handling
+  while test $# -gt 0; do
     opt="$1"
     shift
-
     case $opt in
-      --config)		func_config					;;
-
-      --debug)		preserve_args="$preserve_args $opt"
+      --debug|-x)	opt_debug='set -x'
 			func_echo "enabling shell trace mode"
-			opt_debug='set -x'
 			$opt_debug
 			;;
-
-      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break
-			execute_dlfiles="$execute_dlfiles $1"
-			shift
+      --dry-run|--dryrun|-n)
+			opt_dry_run=:
 			;;
-
-      --dry-run | -n)	opt_dry_run=:					;;
-      --features)       func_features					;;
-      --finish)		mode="finish"					;;
-
-      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break
-			case $1 in
-			  # Valid mode arguments:
-			  clean)	;;
-			  compile)	;;
-			  execute)	;;
-			  finish)	;;
-			  install)	;;
-			  link)		;;
-			  relink)	;;
-			  uninstall)	;;
-
-			  # Catch anything else as an error
-			  *) func_error "invalid argument for $opt"
-			     exit_cmd=exit
-			     break
-			     ;;
-		        esac
-
-			mode="$1"
+      --config)
+			opt_config=:
+func_config
+			;;
+      --dlopen|-dlopen)
+			optarg="$1"
+			opt_dlopen="${opt_dlopen+$opt_dlopen
+}$optarg"
 			shift
 			;;
-
       --preserve-dup-deps)
-			opt_duplicate_deps=:				;;
-
-      --quiet|--silent)	preserve_args="$preserve_args $opt"
-			opt_silent=:
+			opt_preserve_dup_deps=:
 			;;
-
-      --verbose| -v)	preserve_args="$preserve_args $opt"
+      --features)
+			opt_features=:
+func_features
+			;;
+      --finish)
+			opt_finish=:
+set dummy --mode finish ${1+"$@"}; shift
+			;;
+      --help)
+			opt_help=:
+			;;
+      --help-all)
+			opt_help_all=:
+opt_help=': help-all'
+			;;
+      --mode)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_mode="$optarg"
+case $optarg in
+  # Valid mode arguments:
+  clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+  # Catch anything else as an error
+  *) func_error "invalid argument for $opt"
+     exit_cmd=exit
+     break
+     ;;
+esac
+			shift
+			;;
+      --no-silent|--no-quiet)
 			opt_silent=false
+func_append preserve_args " $opt"
 			;;
-
-      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break
-			preserve_args="$preserve_args $opt $1"
-			func_enable_tag "$1"	# tagname is set here
+      --no-warning|--no-warn)
+			opt_warning=false
+func_append preserve_args " $opt"
+			;;
+      --no-verbose)
+			opt_verbose=false
+func_append preserve_args " $opt"
+			;;
+      --silent|--quiet)
+			opt_silent=:
+func_append preserve_args " $opt"
+        opt_verbose=false
+			;;
+      --verbose|-v)
+			opt_verbose=:
+func_append preserve_args " $opt"
+opt_silent=false
+			;;
+      --tag)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_tag="$optarg"
+func_append preserve_args " $opt $optarg"
+func_enable_tag "$optarg"
 			shift
 			;;
 
+      -\?|-h)		func_usage				;;
+      --help)		func_help				;;
+      --version)	func_version				;;
+
       # Separate optargs to long options:
-      -dlopen=*|--mode=*|--tag=*)
-			func_opt_split "$opt"
-			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+      --*=*)
+			func_split_long_opt "$opt"
+			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
 			shift
 			;;
 
-      -\?|-h)		func_usage					;;
-      --help)		opt_help=:					;;
-      --version)	func_version					;;
-
-      -*)		func_fatal_help "unrecognized option \`$opt'"	;;
-
-      *)		nonopt="$opt"
-			break
+      # Separate non-argument short options:
+      -\?*|-h*|-n*|-v*)
+			func_split_short_opt "$opt"
+			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
+			shift
 			;;
+
+      --)		break					;;
+      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
+      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
     esac
   done
 
+  # Validate options:
+
+  # save first non-option argument
+  if test "$#" -gt 0; then
+    nonopt="$opt"
+    shift
+  fi
+
+  # preserve --debug
+  test "$opt_debug" = : || func_append preserve_args " --debug"
 
   case $host in
     *cygwin* | *mingw* | *pw32* | *cegcc*)
@@ -810,82 +1185,44 @@ func_enable_tag ()
       opt_duplicate_compiler_generated_deps=:
       ;;
     *)
-      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
       ;;
   esac
 
-  # Having warned about all mis-specified options, bail out if
-  # anything was wrong.
-  $exit_cmd $EXIT_FAILURE
-}
+  $opt_help || {
+    # Sanity checks first:
+    func_check_version_match
 
-# func_check_version_match
-# Ensure that we are using m4 macros, and libtool script from the same
-# release of libtool.
-func_check_version_match ()
-{
-  if test "$package_revision" != "$macro_revision"; then
-    if test "$VERSION" != "$macro_version"; then
-      if test -z "$macro_version"; then
-        cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from an older release.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
-      else
-        cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
-      fi
-    else
-      cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
-$progname: but the definition of this LT_INIT comes from revision $macro_revision.
-$progname: You should recreate aclocal.m4 with macros from revision $package_revision
-$progname: of $PACKAGE $VERSION and run autoconf again.
-_LT_EOF
+    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+      func_fatal_configuration "not configured to build any kind of library"
     fi
 
-    exit $EXIT_MISMATCH
-  fi
-}
-
-
-## ----------- ##
-##    Main.    ##
-## ----------- ##
-
-$opt_help || {
-  # Sanity checks first:
-  func_check_version_match
+    # Darwin sucks
+    eval std_shrext=\"$shrext_cmds\"
 
-  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-    func_fatal_configuration "not configured to build any kind of library"
-  fi
+    # Only execute mode is allowed to have -dlopen flags.
+    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
+      func_error "unrecognized option \`-dlopen'"
+      $ECHO "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
 
-  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+    # Change the help message to a mode-specific one.
+    generic_help="$help"
+    help="Try \`$progname --help --mode=$opt_mode' for more information."
+  }
 
 
-  # Darwin sucks
-  eval std_shrext=\"$shrext_cmds\"
+  # Bail if the options were screwed
+  $exit_cmd $EXIT_FAILURE
+}
 
 
-  # Only execute mode is allowed to have -dlopen flags.
-  if test -n "$execute_dlfiles" && test "$mode" != execute; then
-    func_error "unrecognized option \`-dlopen'"
-    $ECHO "$help" 1>&2
-    exit $EXIT_FAILURE
-  fi
 
-  # Change the help message to a mode-specific one.
-  generic_help="$help"
-  help="Try \`$progname --help --mode=$mode' for more information."
-}
 
+## ----------- ##
+##    Main.    ##
+## ----------- ##
 
 # func_lalib_p file
 # True iff FILE is a libtool `.la' library or `.lo' object file.
@@ -950,12 +1287,9 @@ func_ltwrapper_executable_p ()
 # temporary ltwrapper_script.
 func_ltwrapper_scriptname ()
 {
-    func_ltwrapper_scriptname_result=""
-    if func_ltwrapper_executable_p "$1"; then
-	func_dirname_and_basename "$1" "" "."
-	func_stripname '' '.exe' "$func_basename_result"
-	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
-    fi
+    func_dirname_and_basename "$1" "" "."
+    func_stripname '' '.exe' "$func_basename_result"
+    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
 }
 
 # func_ltwrapper_p file
@@ -1001,6 +1335,37 @@ func_source ()
 }
 
 
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot.  Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+  func_resolve_sysroot_result=$1
+  case $func_resolve_sysroot_result in
+  =*)
+    func_stripname '=' '' "$func_resolve_sysroot_result"
+    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+    ;;
+  esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+  case "$lt_sysroot:$1" in
+  ?*:"$lt_sysroot"*)
+    func_stripname "$lt_sysroot" '' "$1"
+    func_replace_sysroot_result="=$func_stripname_result"
+    ;;
+  *)
+    # Including no sysroot.
+    func_replace_sysroot_result=$1
+    ;;
+  esac
+}
+
 # func_infer_tag arg
 # Infer tagged configuration to use if any are available and
 # if one wasn't chosen via the "--tag" command line option.
@@ -1013,13 +1378,15 @@ func_infer_tag ()
     if test -n "$available_tags" && test -z "$tagname"; then
       CC_quoted=
       for arg in $CC; do
-        func_quote_for_eval "$arg"
-	CC_quoted="$CC_quoted $func_quote_for_eval_result"
+	func_append_quoted CC_quoted "$arg"
       done
+      CC_expanded=`func_echo_all $CC`
+      CC_quoted_expanded=`func_echo_all $CC_quoted`
       case $@ in
       # Blanks in the command may have been stripped by the calling shell,
       # but not from the CC environment variable when configure was run.
-      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
       # Blanks at the start of $base_compile will cause this to fail
       # if we don't check for them as well.
       *)
@@ -1030,11 +1397,13 @@ func_infer_tag ()
 	    CC_quoted=
 	    for arg in $CC; do
 	      # Double-quote args containing other shell metacharacters.
-	      func_quote_for_eval "$arg"
-	      CC_quoted="$CC_quoted $func_quote_for_eval_result"
+	      func_append_quoted CC_quoted "$arg"
 	    done
+	    CC_expanded=`func_echo_all $CC`
+	    CC_quoted_expanded=`func_echo_all $CC_quoted`
 	    case "$@ " in
-	      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
 	      # The compiler in the base compile command matches
 	      # the one in the tagged configuration.
 	      # Assume this is the tagged configuration we want.
@@ -1097,6 +1466,486 @@ EOF
     }
 }
 
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+  $opt_debug
+  func_convert_core_file_wine_to_w32_result="$1"
+  if test -n "$1"; then
+    # Unfortunately, winepath does not exit with a non-zero error code, so we
+    # are forced to check the contents of stdout. On the other hand, if the
+    # command is not found, the shell will set an exit code of 127 and print
+    # *an error message* to stdout. So we must check for both error code of
+    # zero AND non-empty stdout, which explains the odd construction:
+    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
+      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+        $SED -e "$lt_sed_naive_backslashify"`
+    else
+      func_convert_core_file_wine_to_w32_result=
+    fi
+  fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+  $opt_debug
+  # unfortunately, winepath doesn't convert paths, only file names
+  func_convert_core_path_wine_to_w32_result=""
+  if test -n "$1"; then
+    oldIFS=$IFS
+    IFS=:
+    for func_convert_core_path_wine_to_w32_f in $1; do
+      IFS=$oldIFS
+      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
+        if test -z "$func_convert_core_path_wine_to_w32_result"; then
+          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
+        else
+          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+        fi
+      fi
+    done
+    IFS=$oldIFS
+  fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+  $opt_debug
+  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+    if test "$?" -ne 0; then
+      # on failure, ensure result is empty
+      func_cygpath_result=
+    fi
+  else
+    func_cygpath_result=
+    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
+  fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format.  Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+  $opt_debug
+  # awkward: cmd appends spaces to result
+  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+  $opt_debug
+  if test -z "$2" && test -n "$1" ; then
+    func_error "Could not determine host file name corresponding to"
+    func_error "  \`$1'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback:
+    func_to_host_file_result="$1"
+  fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+  $opt_debug
+  if test -z "$4" && test -n "$3"; then
+    func_error "Could not determine the host path corresponding to"
+    func_error "  \`$3'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback.  This is a deliberately simplistic "conversion" and
+    # should not be "improved".  See libtool.info.
+    if test "x$1" != "x$2"; then
+      lt_replace_pathsep_chars="s|$1|$2|g"
+      func_to_host_path_result=`echo "$3" |
+        $SED -e "$lt_replace_pathsep_chars"`
+    else
+      func_to_host_path_result="$3"
+    fi
+  fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+  $opt_debug
+  case $4 in
+  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
+    ;;
+  esac
+  case $4 in
+  $2 ) func_append func_to_host_path_result "$3"
+    ;;
+  esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via `$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+  $opt_debug
+  $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result.  If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+  $opt_debug
+  case ,$2, in
+    *,"$to_tool_file_cmd",*)
+      func_to_tool_file_result=$1
+      ;;
+    *)
+      $to_tool_file_cmd "$1"
+      func_to_tool_file_result=$func_to_host_file_result
+      ;;
+  esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+  func_to_host_file_result="$1"
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+    # LT_CYGPATH in this case.
+    func_to_host_file_result=`cygpath -m "$1"`
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format.  Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_file_wine_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+    func_convert_core_file_wine_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via `$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format.  If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+#   file name conversion function    : func_convert_file_X_to_Y ()
+#   path conversion function         : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same.  If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+  $opt_debug
+  if test -z "$to_host_path_cmd"; then
+    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+    to_host_path_cmd="func_convert_path_${func_stripname_result}"
+  fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+  $opt_debug
+  func_init_to_host_path_cmd
+  $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+  func_to_host_path_result="$1"
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from ARG.  MSYS
+    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+    # and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format.  Requires a wine environment and
+# a working winepath.  Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from
+    # ARG. msys behavior is inconsistent here, cygpath turns them
+    # into '.;' and ';.', and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
 # func_mode_compile arg...
 func_mode_compile ()
 {
@@ -1137,12 +1986,12 @@ func_mode_compile ()
 	  ;;
 
 	-pie | -fpie | -fPIE)
-          pie_flag="$pie_flag $arg"
+          func_append pie_flag " $arg"
 	  continue
 	  ;;
 
 	-shared | -static | -prefer-pic | -prefer-non-pic)
-	  later="$later $arg"
+	  func_append later " $arg"
 	  continue
 	  ;;
 
@@ -1163,15 +2012,14 @@ func_mode_compile ()
 	  save_ifs="$IFS"; IFS=','
 	  for arg in $args; do
 	    IFS="$save_ifs"
-	    func_quote_for_eval "$arg"
-	    lastarg="$lastarg $func_quote_for_eval_result"
+	    func_append_quoted lastarg "$arg"
 	  done
 	  IFS="$save_ifs"
 	  func_stripname ' ' '' "$lastarg"
 	  lastarg=$func_stripname_result
 
 	  # Add the arguments to base_compile.
-	  base_compile="$base_compile $lastarg"
+	  func_append base_compile " $lastarg"
 	  continue
 	  ;;
 
@@ -1187,8 +2035,7 @@ func_mode_compile ()
       esac    #  case $arg_mode
 
       # Aesthetically quote the previous argument.
-      func_quote_for_eval "$lastarg"
-      base_compile="$base_compile $func_quote_for_eval_result"
+      func_append_quoted base_compile "$lastarg"
     done # for arg
 
     case $arg_mode in
@@ -1213,7 +2060,7 @@ func_mode_compile ()
     *.[cCFSifmso] | \
     *.ada | *.adb | *.ads | *.asm | \
     *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
-    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
       func_xform "$libobj"
       libobj=$func_xform_result
       ;;
@@ -1288,7 +2135,7 @@ func_mode_compile ()
     # Calculate the filename of the output object if compiler does
     # not support -o with -c
     if test "$compiler_c_o" = no; then
-      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
       lockfile="$output_obj.lock"
     else
       output_obj=
@@ -1319,17 +2166,16 @@ compiler."
 	$opt_dry_run || $RM $removelist
 	exit $EXIT_FAILURE
       fi
-      removelist="$removelist $output_obj"
+      func_append removelist " $output_obj"
       $ECHO "$srcfile" > "$lockfile"
     fi
 
     $opt_dry_run || $RM $removelist
-    removelist="$removelist $lockfile"
+    func_append removelist " $lockfile"
     trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
 
-    if test -n "$fix_srcfile_path"; then
-      eval srcfile=\"$fix_srcfile_path\"
-    fi
+    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+    srcfile=$func_to_tool_file_result
     func_quote_for_eval "$srcfile"
     qsrcfile=$func_quote_for_eval_result
 
@@ -1349,7 +2195,7 @@ compiler."
 
       if test -z "$output_obj"; then
 	# Place PIC objects in $objdir
-	command="$command -o $lobj"
+	func_append command " -o $lobj"
       fi
 
       func_show_eval_locale "$command"	\
@@ -1396,11 +2242,11 @@ compiler."
 	command="$base_compile $qsrcfile $pic_flag"
       fi
       if test "$compiler_c_o" = yes; then
-	command="$command -o $obj"
+	func_append command " -o $obj"
       fi
 
       # Suppress compiler output if we already did a PIC compilation.
-      command="$command$suppress_output"
+      func_append command "$suppress_output"
       func_show_eval_locale "$command" \
         '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
 
@@ -1445,13 +2291,13 @@ compiler."
 }
 
 $opt_help || {
-test "$mode" = compile && func_mode_compile ${1+"$@"}
+  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
 }
 
 func_mode_help ()
 {
     # We need to display help for each of the modes.
-    case $mode in
+    case $opt_mode in
       "")
         # Generic help is extracted from the usage comments
         # at the start of this file.
@@ -1482,10 +2328,11 @@ This mode accepts the following additional options:
 
   -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
   -no-suppress      do not suppress compiler output for multiple passes
-  -prefer-pic       try to building PIC objects only
-  -prefer-non-pic   try to building non-PIC objects only
+  -prefer-pic       try to build PIC objects only
+  -prefer-non-pic   try to build non-PIC objects only
   -shared           do not build a \`.o' file suitable for static linking
   -static           only build a \`.o' file suitable for static linking
+  -Wc,FLAG          pass FLAG directly to the compiler
 
 COMPILE-COMMAND is a command to be used in creating a \`standard' object file
 from the given SOURCEFILE.
@@ -1538,7 +2385,7 @@ either the \`install' or \`cp' program.
 
 The following components of INSTALL-COMMAND are treated specially:
 
-  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
 
 The rest of the components are interpreted as arguments to that command (only
 BSD-compatible install options are recognized)."
@@ -1558,6 +2405,8 @@ The following components of LINK-COMMAND are treated specially:
 
   -all-static       do not do any dynamic linking at all
   -avoid-version    do not add a version suffix if possible
+  -bindir BINDIR    specify path to binaries directory (for systems where
+                    libraries must be found in the PATH setting at runtime)
   -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
   -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
   -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
@@ -1586,6 +2435,11 @@ The following components of LINK-COMMAND are treated specially:
   -version-info CURRENT[:REVISION[:AGE]]
                     specify library version info [each variable defaults to 0]
   -weak LIBNAME     declare that the target provides the LIBNAME interface
+  -Wc,FLAG
+  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
+  -Wl,FLAG
+  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
+  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
 
 All other options (arguments beginning with \`-') are ignored.
 
@@ -1619,18 +2473,44 @@ Otherwise, only FILE itself is deleted using RM."
         ;;
 
       *)
-        func_fatal_help "invalid operation mode \`$mode'"
+        func_fatal_help "invalid operation mode \`$opt_mode'"
         ;;
     esac
 
-    $ECHO
+    echo
     $ECHO "Try \`$progname --help' for more information about other modes."
-
-    exit $?
 }
 
-  # Now that we've collected a possible --mode arg, show help if necessary
-  $opt_help && func_mode_help
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+  if test "$opt_help" = :; then
+    func_mode_help
+  else
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	func_mode_help
+      done
+    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	echo
+	func_mode_help
+      done
+    } |
+    sed '1d
+      /^When reporting/,/^Report/{
+	H
+	d
+      }
+      $x
+      /information about other modes/d
+      /more detailed .*MODE/d
+      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+  fi
+  exit $?
+fi
 
 
 # func_mode_execute arg...
@@ -1643,13 +2523,16 @@ func_mode_execute ()
       func_fatal_help "you must specify a COMMAND"
 
     # Handle -dlopen flags immediately.
-    for file in $execute_dlfiles; do
+    for file in $opt_dlopen; do
       test -f "$file" \
 	|| func_fatal_help "\`$file' is not a file"
 
       dir=
       case $file in
       *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
 	# Check to see that this really is a libtool archive.
 	func_lalib_unsafe_p "$file" \
 	  || func_fatal_help "\`$lib' is not a valid libtool archive"
@@ -1671,7 +2554,7 @@ func_mode_execute ()
 	dir="$func_dirname_result"
 
 	if test -f "$dir/$objdir/$dlname"; then
-	  dir="$dir/$objdir"
+	  func_append dir "/$objdir"
 	else
 	  if test ! -f "$dir/$dlname"; then
 	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
@@ -1712,7 +2595,7 @@ func_mode_execute ()
     for file
     do
       case $file in
-      -*) ;;
+      -* | *.la | *.lo ) ;;
       *)
 	# Do a test to see if this is really a libtool program.
 	if func_ltwrapper_script_p "$file"; then
@@ -1728,8 +2611,7 @@ func_mode_execute ()
 	;;
       esac
       # Quote arguments (to preserve shell metacharacters).
-      func_quote_for_eval "$file"
-      args="$args $func_quote_for_eval_result"
+      func_append_quoted args "$file"
     done
 
     if test "X$opt_dry_run" = Xfalse; then
@@ -1754,29 +2636,66 @@ func_mode_execute ()
       # Display what would be done.
       if test -n "$shlibpath_var"; then
 	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
-	$ECHO "export $shlibpath_var"
+	echo "export $shlibpath_var"
       fi
       $ECHO "$cmd$args"
       exit $EXIT_SUCCESS
     fi
 }
 
-test "$mode" = execute && func_mode_execute ${1+"$@"}
+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
 
 
 # func_mode_finish arg...
 func_mode_finish ()
 {
     $opt_debug
-    libdirs="$nonopt"
+    libs=
+    libdirs=
     admincmds=
 
-    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-      for dir
-      do
-	libdirs="$libdirs $dir"
-      done
+    for opt in "$nonopt" ${1+"$@"}
+    do
+      if test -d "$opt"; then
+	func_append libdirs " $opt"
+
+      elif test -f "$opt"; then
+	if func_lalib_unsafe_p "$opt"; then
+	  func_append libs " $opt"
+	else
+	  func_warning "\`$opt' is not a valid libtool archive"
+	fi
+
+      else
+	func_fatal_error "invalid argument \`$opt'"
+      fi
+    done
+
+    if test -n "$libs"; then
+      if test -n "$lt_sysroot"; then
+        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+      else
+        sysroot_cmd=
+      fi
+
+      # Remove sysroot references
+      if $opt_dry_run; then
+        for lib in $libs; do
+          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
+        done
+      else
+        tmpdir=`func_mktempdir`
+        for lib in $libs; do
+	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+	    > $tmpdir/tmp-la
+	  mv -f $tmpdir/tmp-la $lib
+	done
+        ${RM}r "$tmpdir"
+      fi
+    fi
 
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
       for libdir in $libdirs; do
 	if test -n "$finish_cmds"; then
 	  # Do each command in the finish commands.
@@ -1786,7 +2705,7 @@ func_mode_finish ()
 	if test -n "$finish_eval"; then
 	  # Do the single finish_eval.
 	  eval cmds=\"$finish_eval\"
-	  $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+	  $opt_dry_run || eval "$cmds" || func_append admincmds "
        $cmds"
 	fi
       done
@@ -1795,53 +2714,55 @@ func_mode_finish ()
     # Exit here if they wanted silent mode.
     $opt_silent && exit $EXIT_SUCCESS
 
-    $ECHO "X----------------------------------------------------------------------" | $Xsed
-    $ECHO "Libraries have been installed in:"
-    for libdir in $libdirs; do
-      $ECHO "   $libdir"
-    done
-    $ECHO
-    $ECHO "If you ever happen to want to link against installed libraries"
-    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
-    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
-    $ECHO "flag during linking and do at least one of the following:"
-    if test -n "$shlibpath_var"; then
-      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
-      $ECHO "     during execution"
-    fi
-    if test -n "$runpath_var"; then
-      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
-      $ECHO "     during linking"
-    fi
-    if test -n "$hardcode_libdir_flag_spec"; then
-      libdir=LIBDIR
-      eval flag=\"$hardcode_libdir_flag_spec\"
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      echo "----------------------------------------------------------------------"
+      echo "Libraries have been installed in:"
+      for libdir in $libdirs; do
+	$ECHO "   $libdir"
+      done
+      echo
+      echo "If you ever happen to want to link against installed libraries"
+      echo "in a given directory, LIBDIR, you must either use libtool, and"
+      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+      echo "flag during linking and do at least one of the following:"
+      if test -n "$shlibpath_var"; then
+	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+	echo "     during execution"
+      fi
+      if test -n "$runpath_var"; then
+	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+	echo "     during linking"
+      fi
+      if test -n "$hardcode_libdir_flag_spec"; then
+	libdir=LIBDIR
+	eval flag=\"$hardcode_libdir_flag_spec\"
 
-      $ECHO "   - use the \`$flag' linker flag"
-    fi
-    if test -n "$admincmds"; then
-      $ECHO "   - have your system administrator run these commands:$admincmds"
-    fi
-    if test -f /etc/ld.so.conf; then
-      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-    fi
-    $ECHO
+	$ECHO "   - use the \`$flag' linker flag"
+      fi
+      if test -n "$admincmds"; then
+	$ECHO "   - have your system administrator run these commands:$admincmds"
+      fi
+      if test -f /etc/ld.so.conf; then
+	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+      fi
+      echo
 
-    $ECHO "See any operating system documentation about shared libraries for"
-    case $host in
-      solaris2.[6789]|solaris2.1[0-9])
-        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
-	$ECHO "pages."
-	;;
-      *)
-        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
-        ;;
-    esac
-    $ECHO "X----------------------------------------------------------------------" | $Xsed
+      echo "See any operating system documentation about shared libraries for"
+      case $host in
+	solaris2.[6789]|solaris2.1[0-9])
+	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+	  echo "pages."
+	  ;;
+	*)
+	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
+	  ;;
+      esac
+      echo "----------------------------------------------------------------------"
+    fi
     exit $EXIT_SUCCESS
 }
 
-test "$mode" = finish && func_mode_finish ${1+"$@"}
+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
 
 
 # func_mode_install arg...
@@ -1852,7 +2773,7 @@ func_mode_install ()
     # install_prog (especially on Windows NT).
     if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
        # Allow the use of GNU shtool's install command.
-       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+       case $nonopt in *shtool*) :;; *) false;; esac; then
       # Aesthetically quote it.
       func_quote_for_eval "$nonopt"
       install_prog="$func_quote_for_eval_result "
@@ -1866,7 +2787,12 @@ func_mode_install ()
     # The real first argument should be the name of the installation program.
     # Aesthetically quote it.
     func_quote_for_eval "$arg"
-    install_prog="$install_prog$func_quote_for_eval_result"
+    func_append install_prog "$func_quote_for_eval_result"
+    install_shared_prog=$install_prog
+    case " $install_prog " in
+      *[\\\ /]cp\ *) install_cp=: ;;
+      *) install_cp=false ;;
+    esac
 
     # We need to accept at least all the BSD install flags.
     dest=
@@ -1876,10 +2802,12 @@ func_mode_install ()
     install_type=
     isdir=no
     stripme=
+    no_mode=:
     for arg
     do
+      arg2=
       if test -n "$dest"; then
-	files="$files $dest"
+	func_append files " $dest"
 	dest=$arg
 	continue
       fi
@@ -1887,10 +2815,9 @@ func_mode_install ()
       case $arg in
       -d) isdir=yes ;;
       -f)
-	case " $install_prog " in
-	*[\\\ /]cp\ *) ;;
-	*) prev=$arg ;;
-	esac
+	if $install_cp; then :; else
+	  prev=$arg
+	fi
 	;;
       -g | -m | -o)
 	prev=$arg
@@ -1904,6 +2831,10 @@ func_mode_install ()
       *)
 	# If the previous option needed an argument, then skip it.
 	if test -n "$prev"; then
+	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
+	    arg2=$install_override_mode
+	    no_mode=false
+	  fi
 	  prev=
 	else
 	  dest=$arg
@@ -1914,7 +2845,11 @@ func_mode_install ()
 
       # Aesthetically quote the argument.
       func_quote_for_eval "$arg"
-      install_prog="$install_prog $func_quote_for_eval_result"
+      func_append install_prog " $func_quote_for_eval_result"
+      if test -n "$arg2"; then
+	func_quote_for_eval "$arg2"
+      fi
+      func_append install_shared_prog " $func_quote_for_eval_result"
     done
 
     test -z "$install_prog" && \
@@ -1923,6 +2858,13 @@ func_mode_install ()
     test -n "$prev" && \
       func_fatal_help "the \`$prev' option requires an argument"
 
+    if test -n "$install_override_mode" && $no_mode; then
+      if $install_cp; then :; else
+	func_quote_for_eval "$install_override_mode"
+	func_append install_shared_prog " -m $func_quote_for_eval_result"
+      fi
+    fi
+
     if test -z "$files"; then
       if test -z "$dest"; then
 	func_fatal_help "no file or destination specified"
@@ -1977,10 +2919,13 @@ func_mode_install ()
       case $file in
       *.$libext)
 	# Do the static libraries later.
-	staticlibs="$staticlibs $file"
+	func_append staticlibs " $file"
 	;;
 
       *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
 	# Check to see that this really is a libtool archive.
 	func_lalib_unsafe_p "$file" \
 	  || func_fatal_help "\`$file' is not a valid libtool archive"
@@ -1994,23 +2939,23 @@ func_mode_install ()
 	if test "X$destdir" = "X$libdir"; then
 	  case "$current_libdirs " in
 	  *" $libdir "*) ;;
-	  *) current_libdirs="$current_libdirs $libdir" ;;
+	  *) func_append current_libdirs " $libdir" ;;
 	  esac
 	else
 	  # Note the libdir as a future libdir.
 	  case "$future_libdirs " in
 	  *" $libdir "*) ;;
-	  *) future_libdirs="$future_libdirs $libdir" ;;
+	  *) func_append future_libdirs " $libdir" ;;
 	  esac
 	fi
 
 	func_dirname "$file" "/" ""
 	dir="$func_dirname_result"
-	dir="$dir$objdir"
+	func_append dir "$objdir"
 
 	if test -n "$relink_command"; then
 	  # Determine the prefix the user has applied to our future dir.
-	  inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
 
 	  # Don't allow the user to place us outside of our expected
 	  # location b/c this prevents finding dependent libraries that
@@ -2023,9 +2968,9 @@ func_mode_install ()
 
 	  if test -n "$inst_prefix_dir"; then
 	    # Stick the inst_prefix_dir data into the link command.
-	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
 	  else
-	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
 	  fi
 
 	  func_warning "relinking \`$file'"
@@ -2043,7 +2988,7 @@ func_mode_install ()
 	  test -n "$relink_command" && srcname="$realname"T
 
 	  # Install the shared library and build the symlinks.
-	  func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
 	      'exit $?'
 	  tstripme="$stripme"
 	  case $host_os in
@@ -2083,7 +3028,7 @@ func_mode_install ()
 	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
 
 	# Maybe install the static library, too.
-	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
 	;;
 
       *.lo)
@@ -2183,7 +3128,7 @@ func_mode_install ()
 	    if test -f "$lib"; then
 	      func_source "$lib"
 	    fi
-	    libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
 	    if test -n "$libdir" && test ! -f "$libfile"; then
 	      func_warning "\`$lib' has not been installed in \`$libdir'"
 	      finalize=no
@@ -2202,7 +3147,7 @@ func_mode_install ()
 		file="$func_basename_result"
 	        outputname="$tmpdir/$file"
 	        # Replace the output file specification.
-	        relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
 
 	        $opt_silent || {
 	          func_quote_for_expand "$relink_command"
@@ -2221,7 +3166,7 @@ func_mode_install ()
 	    }
 	  else
 	    # Install the binary that we compiled earlier.
-	    file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
 	  fi
 	fi
 
@@ -2257,11 +3202,13 @@ func_mode_install ()
 
       # Set up the ranlib parameters.
       oldlib="$destdir/$name"
+      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+      tool_oldlib=$func_to_tool_file_result
 
       func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
 
       if test -n "$stripme" && test -n "$old_striplib"; then
-	func_show_eval "$old_striplib $oldlib" 'exit $?'
+	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
       fi
 
       # Do each command in the postinstall commands.
@@ -2280,7 +3227,7 @@ func_mode_install ()
     fi
 }
 
-test "$mode" = install && func_mode_install ${1+"$@"}
+test "$opt_mode" = install && func_mode_install ${1+"$@"}
 
 
 # func_generate_dlsyms outputname originator pic_p
@@ -2323,6 +3270,22 @@ func_generate_dlsyms ()
 extern \"C\" {
 #endif
 
+#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
 /* External symbol declarations for the compiler. */\
 "
 
@@ -2332,10 +3295,11 @@ extern \"C\" {
 	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
 
 	  # Add our own program objects to the symbol list.
-	  progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
 	  for progfile in $progfiles; do
-	    func_verbose "extracting global C symbols from \`$progfile'"
-	    $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
+	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
 	  done
 
 	  if test -n "$exclude_expsyms"; then
@@ -2371,7 +3335,7 @@ extern \"C\" {
 	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
 	      eval '$MV "$nlist"T "$nlist"'
 	      case $host in
-	        *cygwin | *mingw* | *cegcc* )
+	        *cygwin* | *mingw* | *cegcc* )
 	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
 	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
 	          ;;
@@ -2384,10 +3348,52 @@ extern \"C\" {
 	  func_verbose "extracting global C symbols from \`$dlprefile'"
 	  func_basename "$dlprefile"
 	  name="$func_basename_result"
-	  $opt_dry_run || {
-	    eval '$ECHO ": $name " >> "$nlist"'
-	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
-	  }
+          case $host in
+	    *cygwin* | *mingw* | *cegcc* )
+	      # if an import library, we need to obtain dlname
+	      if func_win32_import_lib_p "$dlprefile"; then
+	        func_tr_sh "$dlprefile"
+	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
+	        dlprefile_dlbasename=""
+	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+	          # Use subshell, to avoid clobbering current variable values
+	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+	          if test -n "$dlprefile_dlname" ; then
+	            func_basename "$dlprefile_dlname"
+	            dlprefile_dlbasename="$func_basename_result"
+	          else
+	            # no lafile. user explicitly requested -dlpreopen <import library>.
+	            $sharedlib_from_linklib_cmd "$dlprefile"
+	            dlprefile_dlbasename=$sharedlib_from_linklib_result
+	          fi
+	        fi
+	        $opt_dry_run || {
+	          if test -n "$dlprefile_dlbasename" ; then
+	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+	          else
+	            func_warning "Could not compute DLL name from $name"
+	            eval '$ECHO ": $name " >> "$nlist"'
+	          fi
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+	        }
+	      else # not an import lib
+	        $opt_dry_run || {
+	          eval '$ECHO ": $name " >> "$nlist"'
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	        }
+	      fi
+	    ;;
+	    *)
+	      $opt_dry_run || {
+	        eval '$ECHO ": $name " >> "$nlist"'
+	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	      }
+	    ;;
+          esac
 	done
 
 	$opt_dry_run || {
@@ -2415,36 +3421,19 @@ extern \"C\" {
 	  if test -f "$nlist"S; then
 	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
 	  else
-	    $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
 	  fi
 
-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
+	  echo >> "$output_objdir/$my_dlsyms" "\
 
 /* The mapping between symbol names and symbols.  */
 typedef struct {
   const char *name;
   void *address;
 } lt_dlsymlist;
-"
-	  case $host in
-	  *cygwin* | *mingw* | *cegcc* )
-	    $ECHO >> "$output_objdir/$my_dlsyms" "\
-/* DATA imports from DLLs on WIN32 con't be const, because
-   runtime relocations are performed -- see ld's documentation
-   on pseudo-relocs.  */"
-	    lt_dlsym_const= ;;
-	  *osf5*)
-	    echo >> "$output_objdir/$my_dlsyms" "\
-/* This system does not cope well with relocations in const data */"
-	    lt_dlsym_const= ;;
-	  *)
-	    lt_dlsym_const=const ;;
-	  esac
-
-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
-extern $lt_dlsym_const lt_dlsymlist
+extern LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[];
-$lt_dlsym_const lt_dlsymlist
+LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[] =
 {\
   { \"$my_originator\", (void *) 0 },"
@@ -2457,7 +3446,7 @@ lt_${my_prefix}_LTX_preloaded_symbols[] =
 	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
 	    ;;
 	  esac
-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
+	  echo >> "$output_objdir/$my_dlsyms" "\
   {0, (void *) 0}
 };
 
@@ -2484,7 +3473,7 @@ static const void *lt_preloaded_setup() {
 	  # linked before any other PIC object.  But we must not use
 	  # pic_flag when linking with -static.  The problem exists in
 	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
 	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
 	  *-*-hpux*)
 	    pic_flag_for_symtable=" $pic_flag"  ;;
@@ -2500,7 +3489,7 @@ static const void *lt_preloaded_setup() {
 	for arg in $LTCFLAGS; do
 	  case $arg in
 	  -pie | -fpie | -fPIE) ;;
-	  *) symtab_cflags="$symtab_cflags $arg" ;;
+	  *) func_append symtab_cflags " $arg" ;;
 	  esac
 	done
 
@@ -2515,16 +3504,16 @@ static const void *lt_preloaded_setup() {
 	case $host in
 	*cygwin* | *mingw* | *cegcc* )
 	  if test -f "$output_objdir/$my_outputname.def"; then
-	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
-	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
 	  else
-	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
-	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
 	  fi
 	  ;;
 	*)
-	  compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
-	  finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
 	  ;;
 	esac
 	;;
@@ -2538,8 +3527,8 @@ static const void *lt_preloaded_setup() {
       # really was required.
 
       # Nullify the symbol file.
-      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
-      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
     fi
 }
 
@@ -2549,6 +3538,7 @@ static const void *lt_preloaded_setup() {
 # Need a lot of goo to handle *both* DLLs and import libs
 # Has to be a shell function in order to 'eat' the argument
 # that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
 func_win32_libid ()
 {
   $opt_debug
@@ -2559,9 +3549,11 @@ func_win32_libid ()
     win32_libid_type="x86 archive import"
     ;;
   *ar\ archive*) # could be an import, or static
+    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
     if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
-       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
-      win32_nmres=`eval $NM -f posix -A $1 |
+       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+      func_to_tool_file "$1" func_convert_file_msys_to_w32
+      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
 	$SED -n -e '
 	    1,100{
 		/ I /{
@@ -2590,6 +3582,131 @@ func_win32_libid ()
   $ECHO "$win32_libid_type"
 }
 
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+  $opt_debug
+  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+  $opt_debug
+  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+    $SED '/^Contents of section '"$match_literal"':/{
+      # Place marker at beginning of archive member dllname section
+      s/.*/====MARK====/
+      p
+      d
+    }
+    # These lines can sometimes be longer than 43 characters, but
+    # are always uninteresting
+    /:[	 ]*file format pe[i]\{,1\}-/d
+    /^In archive [^:]*:/d
+    # Ensure marker is printed
+    /^====MARK====/p
+    # Remove all lines with less than 43 characters
+    /^.\{43\}/!d
+    # From remaining lines, remove first 43 characters
+    s/^.\{43\}//' |
+    $SED -n '
+      # Join marker and all lines until next marker into a single line
+      /^====MARK====/ b para
+      H
+      $ b para
+      b
+      :para
+      x
+      s/\n//g
+      # Remove the marker
+      s/^====MARK====//
+      # Remove trailing dots and whitespace
+      s/[\. \t]*$//
+      # Print
+      /./p' |
+    # we now have a list, one entry per line, of the stringified
+    # contents of the appropriate section of all members of the
+    # archive which possess that section. Heuristic: eliminate
+    # all those which have a first or second character that is
+    # a '.' (that is, objdump's representation of an unprintable
+    # character.) This should work for all archives with less than
+    # 0x302f exports -- but will fail for DLLs whose name actually
+    # begins with a literal '.' or a single character followed by
+    # a '.'.
+    #
+    # Of those that remain, print the first one.
+    $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+  $opt_debug
+  if func_cygming_gnu_implib_p "$1" ; then
+    # binutils import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+  elif func_cygming_ms_implib_p "$1" ; then
+    # ms-generated import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+  else
+    # unknown
+    sharedlib_from_linklib_result=""
+  fi
+}
 
 
 # func_extract_an_archive dir oldlib
@@ -2598,7 +3715,18 @@ func_extract_an_archive ()
     $opt_debug
     f_ex_an_ar_dir="$1"; shift
     f_ex_an_ar_oldlib="$1"
-    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+    if test "$lock_old_archive_extraction" = yes; then
+      lockfile=$f_ex_an_ar_oldlib.lock
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    fi
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+		   'stat=$?; rm -f "$lockfile"; exit $stat'
+    if test "$lock_old_archive_extraction" = yes; then
+      $opt_dry_run || rm -f "$lockfile"
+    fi
     if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
      :
     else
@@ -2669,7 +3797,7 @@ func_extract_archives ()
 	    darwin_file=
 	    darwin_files=
 	    for darwin_file in $darwin_filelist; do
-	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
 	      $LIPO -create -output "$darwin_file" $darwin_files
 	    done # $darwin_filelist
 	    $RM -rf unfat-$$
@@ -2684,25 +3812,30 @@ func_extract_archives ()
         func_extract_an_archive "$my_xdir" "$my_xabs"
 	;;
       esac
-      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
     done
 
     func_extract_archives_result="$my_oldobjs"
 }
 
 
-
-# func_emit_wrapper_part1 [arg=no]
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
 #
-# Emit the first part of a libtool wrapper script on stdout.
-# For more information, see the description associated with
-# func_emit_wrapper(), below.
-func_emit_wrapper_part1 ()
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
 {
-	func_emit_wrapper_part1_arg1=no
-	if test -n "$1" ; then
-	  func_emit_wrapper_part1_arg1=$1
-	fi
+	func_emit_wrapper_arg1=${1-no}
 
 	$ECHO "\
 #! $SHELL
@@ -2718,7 +3851,6 @@ func_emit_wrapper_part1 ()
 
 # Sed substitution that helps us do robust quoting.  It backslashifies
 # metacharacters that are still active within double-quoted strings.
-Xsed='${SED} -e 1s/^X//'
 sed_quote_subst='$sed_quote_subst'
 
 # Be Bourne compatible
@@ -2749,31 +3881,135 @@ if test \"\$libtool_install_magic\" = \"$magic\"; then
 else
   # When we are sourced in execute mode, \$file and \$ECHO are already set.
   if test \"\$libtool_execute_magic\" != \"$magic\"; then
-    ECHO=\"$qecho\"
-    file=\"\$0\"
-    # Make sure echo works.
-    if test \"X\$1\" = X--no-reexec; then
-      # Discard the --no-reexec flag, and continue.
-      shift
-    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
-      # Yippee, \$ECHO works!
-      :
-    else
-      # Restart under the correct shell, and then maybe \$ECHO will work.
-      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
-    fi
-  fi\
+    file=\"\$0\""
+
+    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+    $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+    ECHO=\"$qECHO\"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ which is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options which match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=\$0
+  shift
+  for lt_opt
+  do
+    case \"\$lt_opt\" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+        cat \"\$lt_dump_D/\$lt_dump_F\"
+        exit 0
+      ;;
+    --lt-*)
+        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n \"\$lt_option_debug\"; then
+    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
 "
-	$ECHO "\
+  case $host in
+  # Backslashes separate directories on plain windows
+  *-*-mingw | *-*-os2* | *-cegcc*)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+    ;;
+
+  *)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+    ;;
+  esac
+  $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  case \" \$* \" in
+  *\\ --lt-*)
+    for lt_wr_arg
+    do
+      case \$lt_wr_arg in
+      --lt-*) ;;
+      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+      esac
+      shift
+    done ;;
+  esac
+  func_exec_program_core \${1+\"\$@\"}
+}
+
+  # Parse options
+  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
 
   # Find the directory that this script lives in.
-  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
   test \"x\$thisdir\" = \"x\$file\" && thisdir=.
 
   # Follow symbolic links until we get to the real thisdir.
-  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
   while test -n \"\$file\"; do
-    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
 
     # If there was a directory component, then change thisdir.
     if test \"x\$destdir\" != \"x\$file\"; then
@@ -2783,30 +4019,13 @@ else
       esac
     fi
 
-    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
   done
-"
-}
-# end: func_emit_wrapper_part1
-
-# func_emit_wrapper_part2 [arg=no]
-#
-# Emit the second part of a libtool wrapper script on stdout.
-# For more information, see the description associated with
-# func_emit_wrapper(), below.
-func_emit_wrapper_part2 ()
-{
-	func_emit_wrapper_part2_arg1=no
-	if test -n "$1" ; then
-	  func_emit_wrapper_part2_arg1=$1
-	fi
-
-	$ECHO "\
 
   # Usually 'no', except on cygwin/mingw when embedded into
   # the cwrapper.
-  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
   if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
     # special case for '.'
     if test \"\$thisdir\" = \".\"; then
@@ -2814,7 +4033,7 @@ func_emit_wrapper_part2 ()
     fi
     # remove .libs from thisdir
     case \"\$thisdir\" in
-    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
     $objdir )   thisdir=. ;;
     esac
   fi
@@ -2869,6 +4088,18 @@ func_emit_wrapper_part2 ()
 
   if test -f \"\$progdir/\$program\"; then"
 
+	# fixup the dll searchpath if we need to.
+	#
+	# Fix the DLL searchpath if we need to.  Do this before prepending
+	# to shlibpath, because on Windows, both are PATH and uninstalled
+	# libraries must come first.
+	if test -n "$dllsearchpath"; then
+	  $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+	fi
+
 	# Export our shlibpath_var if we have one.
 	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
 	  $ECHO "\
@@ -2877,253 +4108,28 @@ func_emit_wrapper_part2 ()
 
     # Some systems cannot cope with colon-terminated $shlibpath_var
     # The second colon is a workaround for a bug in BeOS R4 sed
-    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
 
     export $shlibpath_var
 "
 	fi
 
-	# fixup the dll searchpath if we need to.
-	if test -n "$dllsearchpath"; then
-	  $ECHO "\
-    # Add the dll search path components to the executable PATH
-    PATH=$dllsearchpath:\$PATH
-"
-	fi
-
 	$ECHO "\
     if test \"\$libtool_execute_magic\" != \"$magic\"; then
       # Run the actual program with our arguments.
-"
-	case $host in
-	# Backslashes separate directories on plain windows
-	*-*-mingw | *-*-os2* | *-cegcc*)
-	  $ECHO "\
-      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-"
-	  ;;
-
-	*)
-	  $ECHO "\
-      exec \"\$progdir/\$program\" \${1+\"\$@\"}
-"
-	  ;;
-	esac
-	$ECHO "\
-      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
-      exit 1
+      func_exec_program \${1+\"\$@\"}
     fi
   else
     # The program doesn't exist.
     \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
     \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
-    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
     exit 1
   fi
 fi\
 "
 }
-# end: func_emit_wrapper_part2
-
-
-# func_emit_wrapper [arg=no]
-#
-# Emit a libtool wrapper script on stdout.
-# Don't directly open a file because we may want to
-# incorporate the script contents within a cygwin/mingw
-# wrapper executable.  Must ONLY be called from within
-# func_mode_link because it depends on a number of variables
-# set therein.
-#
-# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
-# variable will take.  If 'yes', then the emitted script
-# will assume that the directory in which it is stored is
-# the $objdir directory.  This is a cygwin/mingw-specific
-# behavior.
-func_emit_wrapper ()
-{
-	func_emit_wrapper_arg1=no
-	if test -n "$1" ; then
-	  func_emit_wrapper_arg1=$1
-	fi
-
-	# split this up so that func_emit_cwrapperexe_src
-	# can call each part independently.
-	func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
-	func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
-}
-
-
-# func_to_host_path arg
-#
-# Convert paths to host format when used with build tools.
-# Intended for use with "native" mingw (where libtool itself
-# is running under the msys shell), or in the following cross-
-# build environments:
-#    $build          $host
-#    mingw (msys)    mingw  [e.g. native]
-#    cygwin          mingw
-#    *nix + wine     mingw
-# where wine is equipped with the `winepath' executable.
-# In the native mingw case, the (msys) shell automatically
-# converts paths for any non-msys applications it launches,
-# but that facility isn't available from inside the cwrapper.
-# Similar accommodations are necessary for $host mingw and
-# $build cygwin.  Calling this function does no harm for other
-# $host/$build combinations not listed above.
-#
-# ARG is the path (on $build) that should be converted to
-# the proper representation for $host. The result is stored
-# in $func_to_host_path_result.
-func_to_host_path ()
-{
-  func_to_host_path_result="$1"
-  if test -n "$1" ; then
-    case $host in
-      *mingw* )
-        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-        case $build in
-          *mingw* ) # actually, msys
-            # awkward: cmd appends spaces to result
-            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
-            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
-              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
-            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          *cygwin* )
-            func_to_host_path_tmp1=`cygpath -w "$1"`
-            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          * )
-            # Unfortunately, winepath does not exit with a non-zero
-            # error code, so we are forced to check the contents of
-            # stdout. On the other hand, if the command is not
-            # found, the shell will set an exit code of 127 and print
-            # *an error message* to stdout. So we must check for both
-            # error code of zero AND non-empty stdout, which explains
-            # the odd construction:
-            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
-            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
-              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-                $SED -e "$lt_sed_naive_backslashify"`
-            else
-              # Allow warning below.
-              func_to_host_path_result=""
-            fi
-            ;;
-        esac
-        if test -z "$func_to_host_path_result" ; then
-          func_error "Could not determine host path corresponding to"
-          func_error "  '$1'"
-          func_error "Continuing, but uninstalled executables may not work."
-          # Fallback:
-          func_to_host_path_result="$1"
-        fi
-        ;;
-    esac
-  fi
-}
-# end: func_to_host_path
 
-# func_to_host_pathlist arg
-#
-# Convert pathlists to host format when used with build tools.
-# See func_to_host_path(), above. This function supports the
-# following $build/$host combinations (but does no harm for
-# combinations not listed here):
-#    $build          $host
-#    mingw (msys)    mingw  [e.g. native]
-#    cygwin          mingw
-#    *nix + wine     mingw
-#
-# Path separators are also converted from $build format to
-# $host format. If ARG begins or ends with a path separator
-# character, it is preserved (but converted to $host format)
-# on output.
-#
-# ARG is a pathlist (on $build) that should be converted to
-# the proper representation on $host. The result is stored
-# in $func_to_host_pathlist_result.
-func_to_host_pathlist ()
-{
-  func_to_host_pathlist_result="$1"
-  if test -n "$1" ; then
-    case $host in
-      *mingw* )
-        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-        # Remove leading and trailing path separator characters from
-        # ARG. msys behavior is inconsistent here, cygpath turns them
-        # into '.;' and ';.', and winepath ignores them completely.
-        func_to_host_pathlist_tmp2="$1"
-        # Once set for this call, this variable should not be
-        # reassigned. It is used in tha fallback case.
-        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
-          $SED -e 's|^:*||' -e 's|:*$||'`
-        case $build in
-          *mingw* ) # Actually, msys.
-            # Awkward: cmd appends spaces to result.
-            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
-            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
-              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
-            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          *cygwin* )
-            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
-            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          * )
-            # unfortunately, winepath doesn't convert pathlists
-            func_to_host_pathlist_result=""
-            func_to_host_pathlist_oldIFS=$IFS
-            IFS=:
-            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
-              IFS=$func_to_host_pathlist_oldIFS
-              if test -n "$func_to_host_pathlist_f" ; then
-                func_to_host_path "$func_to_host_pathlist_f"
-                if test -n "$func_to_host_path_result" ; then
-                  if test -z "$func_to_host_pathlist_result" ; then
-                    func_to_host_pathlist_result="$func_to_host_path_result"
-                  else
-                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
-                  fi
-                fi
-              fi
-              IFS=:
-            done
-            IFS=$func_to_host_pathlist_oldIFS
-            ;;
-        esac
-        if test -z "$func_to_host_pathlist_result" ; then
-          func_error "Could not determine the host path(s) corresponding to"
-          func_error "  '$1'"
-          func_error "Continuing, but uninstalled executables may not work."
-          # Fallback. This may break if $1 contains DOS-style drive
-          # specifications. The fix is not to complicate the expression
-          # below, but for the user to provide a working wine installation
-          # with winepath so that path translation in the cross-to-mingw
-          # case works properly.
-          lt_replace_pathsep_nix_to_dos="s|:|;|g"
-          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
-            $SED -e "$lt_replace_pathsep_nix_to_dos"`
-        fi
-        # Now, add the leading and trailing path separators back
-        case "$1" in
-          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
-            ;;
-        esac
-        case "$1" in
-          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
-            ;;
-        esac
-        ;;
-    esac
-  fi
-}
-# end: func_to_host_pathlist
 
 # func_emit_cwrapperexe_src
 # emit the source code for a wrapper executable on stdout
@@ -3141,31 +4147,23 @@ func_emit_cwrapperexe_src ()
 
    This wrapper executable should never be moved out of the build directory.
    If it is, it will not operate correctly.
-
-   Currently, it simply execs the wrapper *script* "$SHELL $output",
-   but could eventually absorb all of the scripts functionality and
-   exec $objdir/$outputname directly.
 */
 EOF
 	    cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
 #include <stdio.h>
 #include <stdlib.h>
 #ifdef _MSC_VER
 # include <direct.h>
 # include <process.h>
 # include <io.h>
-# define setmode _setmode
 #else
 # include <unistd.h>
 # include <stdint.h>
 # ifdef __CYGWIN__
 #  include <io.h>
-#  define HAVE_SETENV
-#  ifdef __STRICT_ANSI__
-char *realpath (const char *, char *);
-int putenv (char *);
-int setenv (const char *, const char *, int);
-#  endif
 # endif
 #endif
 #include <malloc.h>
@@ -3177,6 +4175,44 @@ int setenv (const char *, const char *, int);
 #include <fcntl.h>
 #include <sys/stat.h>
 
+/* declarations of non-ANSI functions */
+#if defined(__MINGW32__)
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined(__CYGWIN__)
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined (other platforms) ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined(_MSC_VER)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+# define S_IXUSR _S_IEXEC
+# ifndef _INTPTR_T_DEFINED
+#  define _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#elif defined(__MINGW32__)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+#elif defined(__CYGWIN__)
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined (other platforms) ... */
+#endif
+
 #if defined(PATH_MAX)
 # define LT_PATHMAX PATH_MAX
 #elif defined(MAXPATHLEN)
@@ -3192,14 +4228,7 @@ int setenv (const char *, const char *, int);
 # define S_IXGRP 0
 #endif
 
-#ifdef _MSC_VER
-# define S_IXUSR _S_IEXEC
-# define stat _stat
-# ifndef _INTPTR_T_DEFINED
-#  define intptr_t int
-# endif
-#endif
-
+/* path handling portability macros */
 #ifndef DIR_SEPARATOR
 # define DIR_SEPARATOR '/'
 # define PATH_SEPARATOR ':'
@@ -3230,10 +4259,6 @@ int setenv (const char *, const char *, int);
 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
 #endif /* PATH_SEPARATOR_2 */
 
-#ifdef __CYGWIN__
-# define FOPEN_WB "wb"
-#endif
-
 #ifndef FOPEN_WB
 # define FOPEN_WB "w"
 #endif
@@ -3246,22 +4271,13 @@ int setenv (const char *, const char *, int);
   if (stale) { free ((void *) stale); stale = 0; } \
 } while (0)
 
-#undef LTWRAPPER_DEBUGPRINTF
-#if defined DEBUGWRAPPER
-# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
-static void
-ltwrapper_debugprintf (const char *fmt, ...)
-{
-    va_list args;
-    va_start (args, fmt);
-    (void) vfprintf (stderr, fmt, args);
-    va_end (args);
-}
+#if defined(LT_DEBUGWRAPPER)
+static int lt_debug = 1;
 #else
-# define LTWRAPPER_DEBUGPRINTF(args)
+static int lt_debug = 0;
 #endif
 
-const char *program_name = NULL;
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
 
 void *xmalloc (size_t num);
 char *xstrdup (const char *string);
@@ -3271,41 +4287,27 @@ char *chase_symlinks (const char *pathspec);
 int make_executable (const char *path);
 int check_executable (const char *path);
 char *strendzap (char *str, const char *pat);
-void lt_fatal (const char *message, ...);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
 void lt_setenv (const char *name, const char *value);
 char *lt_extend_str (const char *orig_value, const char *add, int to_end);
-void lt_opt_process_env_set (const char *arg);
-void lt_opt_process_env_prepend (const char *arg);
-void lt_opt_process_env_append (const char *arg);
-int lt_split_name_value (const char *arg, char** name, char** value);
 void lt_update_exe_path (const char *name, const char *value);
 void lt_update_lib_path (const char *name, const char *value);
-
-static const char *script_text_part1 =
-EOF
-
-	    func_emit_wrapper_part1 yes |
-	        $SED -e 's/\([\\"]\)/\\\1/g' \
-	             -e 's/^/  "/' -e 's/$/\\n"/'
-	    echo ";"
-	    cat <<EOF
-
-static const char *script_text_part2 =
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
 EOF
-	    func_emit_wrapper_part2 yes |
-	        $SED -e 's/\([\\"]\)/\\\1/g' \
-	             -e 's/^/  "/' -e 's/$/\\n"/'
-	    echo ";"
 
 	    cat <<EOF
-const char * MAGIC_EXE = "$magic_exe";
+volatile const char * MAGIC_EXE = "$magic_exe";
 const char * LIB_PATH_VARNAME = "$shlibpath_var";
 EOF
 
 	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-              func_to_host_pathlist "$temp_rpath"
+              func_to_host_path "$temp_rpath"
 	      cat <<EOF
-const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
+const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
 EOF
 	    else
 	      cat <<"EOF"
@@ -3314,10 +4316,10 @@ EOF
 	    fi
 
 	    if test -n "$dllsearchpath"; then
-              func_to_host_pathlist "$dllsearchpath:"
+              func_to_host_path "$dllsearchpath:"
 	      cat <<EOF
 const char * EXE_PATH_VARNAME = "PATH";
-const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
+const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
 EOF
 	    else
 	      cat <<"EOF"
@@ -3340,24 +4342,10 @@ EOF
 	    cat <<"EOF"
 
 #define LTWRAPPER_OPTION_PREFIX         "--lt-"
-#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
 
-static const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
 static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
-
 static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
-
-static const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
-static const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
-  /* argument is putenv-style "foo=bar", value of foo is set to bar */
-
-static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
-static const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
-  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
-
-static const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
-static const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
-  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
+static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
 
 int
 main (int argc, char *argv[])
@@ -3374,10 +4362,13 @@ main (int argc, char *argv[])
   int i;
 
   program_name = (char *) xstrdup (base_name (argv[0]));
-  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
-  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+  newargz = XMALLOC (char *, argc + 1);
 
-  /* very simple arg parsing; don't want to rely on getopt */
+  /* very simple arg parsing; don't want to rely on getopt
+   * also, copy all non cwrapper options to newargz, except
+   * argz[0], which is handled differently
+   */
+  newargc=0;
   for (i = 1; i < argc; i++)
     {
       if (strcmp (argv[i], dumpscript_opt) == 0)
@@ -3391,25 +4382,57 @@ EOF
 	      esac
 
 	    cat <<"EOF"
-	  printf ("%s", script_text_part1);
-	  printf ("%s", script_text_part2);
+	  lt_dump_script (stdout);
 	  return 0;
 	}
+      if (strcmp (argv[i], debug_opt) == 0)
+	{
+          lt_debug = 1;
+          continue;
+	}
+      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal (__FILE__, __LINE__,
+		    "unrecognized %s option: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
     }
+  newargz[++newargc] = NULL;
+
+EOF
+	    cat <<EOF
+  /* The GNU banner must be the first non-error debug message */
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+EOF
+	    cat <<"EOF"
+  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
 
-  newargz = XMALLOC (char *, argc + 1);
   tmp_pathspec = find_executable (argv[0]);
   if (tmp_pathspec == NULL)
-    lt_fatal ("Couldn't find %s", argv[0]);
-  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
-			  tmp_pathspec));
+    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (before symlink chase) at: %s\n",
+		  tmp_pathspec);
 
   actual_cwrapper_path = chase_symlinks (tmp_pathspec);
-  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
-			  actual_cwrapper_path));
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (after symlink chase) at: %s\n",
+		  actual_cwrapper_path);
   XFREE (tmp_pathspec);
 
-  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
+  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
   strendzap (actual_cwrapper_path, actual_cwrapper_name);
 
   /* wrapper name transforms */
@@ -3427,8 +4450,9 @@ EOF
   target_name = tmp_pathspec;
   tmp_pathspec = 0;
 
-  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
-			  target_name));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(main) libtool target name: %s\n",
+		  target_name);
 EOF
 
 	    cat <<EOF
@@ -3478,80 +4502,19 @@ EOF
 
   lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
   lt_setenv ("DUALCASE", "1");  /* for MSK sh */
-  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
+     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+     because on Windows, both *_VARNAMEs are PATH but uninstalled
+     libraries must come first. */
   lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
 
-  newargc=0;
-  for (i = 1; i < argc; i++)
-    {
-      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
-        {
-          if (argv[i][env_set_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_set_opt_len + 1;
-              lt_opt_process_env_set (p);
-            }
-          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_set (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_set_opt);
-          continue;
-        }
-      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
-        {
-          if (argv[i][env_prepend_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_prepend_opt_len + 1;
-              lt_opt_process_env_prepend (p);
-            }
-          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_prepend_opt);
-          continue;
-        }
-      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
-        {
-          if (argv[i][env_append_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_append_opt_len + 1;
-              lt_opt_process_env_append (p);
-            }
-          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_append (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_append_opt);
-          continue;
-        }
-      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
-        {
-          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
-             namespace, but it is not one of the ones we know about and
-             have already dealt with, above (inluding dump-script), then
-             report an error. Otherwise, targets might begin to believe
-             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
-             namespace. The first time any user complains about this, we'll
-             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
-             or a configure.ac-settable value.
-           */
-          lt_fatal ("Unrecognized option in %s namespace: '%s'",
-                    ltwrapper_option_prefix, argv[i]);
-        }
-      /* otherwise ... */
-      newargz[++newargc] = xstrdup (argv[i]);
-    }
-  newargz[++newargc] = NULL;
-
-  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+		  nonnull (lt_argv_zero));
   for (i = 0; i < newargc; i++)
     {
-      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
+      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+		      i, nonnull (newargz[i]));
     }
 
 EOF
@@ -3560,11 +4523,14 @@ EOF
 	      mingw*)
 		cat <<"EOF"
   /* execv doesn't actually work on mingw as expected on unix */
+  newargz = prepare_spawn (newargz);
   rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
   if (rval == -1)
     {
       /* failed to start process */
-      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
+      lt_debugprintf (__FILE__, __LINE__,
+		      "(main) failed to launch target \"%s\": %s\n",
+		      lt_argv_zero, nonnull (strerror (errno)));
       return 127;
     }
   return rval;
@@ -3586,7 +4552,7 @@ xmalloc (size_t num)
 {
   void *p = (void *) malloc (num);
   if (!p)
-    lt_fatal ("Memory exhausted");
+    lt_fatal (__FILE__, __LINE__, "memory exhausted");
 
   return p;
 }
@@ -3620,8 +4586,8 @@ check_executable (const char *path)
 {
   struct stat st;
 
-  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
-			  path ? (*path ? path : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+                  nonempty (path));
   if ((!path) || (!*path))
     return 0;
 
@@ -3638,8 +4604,8 @@ make_executable (const char *path)
   int rval = 0;
   struct stat st;
 
-  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
-			  path ? (*path ? path : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+                  nonempty (path));
   if ((!path) || (!*path))
     return 0;
 
@@ -3665,8 +4631,8 @@ find_executable (const char *wrapper)
   int tmp_len;
   char *concat_name;
 
-  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
-			  wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+                  nonempty (wrapper));
 
   if ((wrapper == NULL) || (*wrapper == '\0'))
     return NULL;
@@ -3719,7 +4685,8 @@ find_executable (const char *wrapper)
 		{
 		  /* empty path: current directory */
 		  if (getcwd (tmp, LT_PATHMAX) == NULL)
-		    lt_fatal ("getcwd failed");
+		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+                              nonnull (strerror (errno)));
 		  tmp_len = strlen (tmp);
 		  concat_name =
 		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
@@ -3744,7 +4711,8 @@ find_executable (const char *wrapper)
     }
   /* Relative path | not found in path: prepend cwd */
   if (getcwd (tmp, LT_PATHMAX) == NULL)
-    lt_fatal ("getcwd failed");
+    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+              nonnull (strerror (errno)));
   tmp_len = strlen (tmp);
   concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
   memcpy (concat_name, tmp, tmp_len);
@@ -3770,8 +4738,9 @@ chase_symlinks (const char *pathspec)
   int has_symlinks = 0;
   while (strlen (tmp_pathspec) && !has_symlinks)
     {
-      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
-			      tmp_pathspec));
+      lt_debugprintf (__FILE__, __LINE__,
+		      "checking path component for symlinks: %s\n",
+		      tmp_pathspec);
       if (lstat (tmp_pathspec, &s) == 0)
 	{
 	  if (S_ISLNK (s.st_mode) != 0)
@@ -3793,8 +4762,9 @@ chase_symlinks (const char *pathspec)
 	}
       else
 	{
-	  char *errstr = strerror (errno);
-	  lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+	  lt_fatal (__FILE__, __LINE__,
+		    "error accessing file \"%s\": %s",
+		    tmp_pathspec, nonnull (strerror (errno)));
 	}
     }
   XFREE (tmp_pathspec);
@@ -3807,7 +4777,8 @@ chase_symlinks (const char *pathspec)
   tmp_pathspec = realpath (pathspec, buf);
   if (tmp_pathspec == 0)
     {
-      lt_fatal ("Could not follow symlinks for %s", pathspec);
+      lt_fatal (__FILE__, __LINE__,
+		"could not follow symlinks for %s", pathspec);
     }
   return xstrdup (tmp_pathspec);
 #endif
@@ -3833,11 +4804,25 @@ strendzap (char *str, const char *pat)
   return str;
 }
 
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+  va_list args;
+  if (lt_debug)
+    {
+      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+      va_start (args, fmt);
+      (void) vfprintf (stderr, fmt, args);
+      va_end (args);
+    }
+}
+
 static void
-lt_error_core (int exit_status, const char *mode,
+lt_error_core (int exit_status, const char *file,
+	       int line, const char *mode,
 	       const char *message, va_list ap)
 {
-  fprintf (stderr, "%s: %s: ", program_name, mode);
+  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
   vfprintf (stderr, message, ap);
   fprintf (stderr, ".\n");
 
@@ -3846,20 +4831,32 @@ lt_error_core (int exit_status, const char *mode,
 }
 
 void
-lt_fatal (const char *message, ...)
+lt_fatal (const char *file, int line, const char *message, ...)
 {
   va_list ap;
   va_start (ap, message);
-  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
   va_end (ap);
 }
 
+static const char *
+nonnull (const char *s)
+{
+  return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+  return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
 void
 lt_setenv (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_setenv) setting '%s' to '%s'\n",
+                  nonnull (name), nonnull (value));
   {
 #ifdef HAVE_SETENV
     /* always make a copy, for consistency with !HAVE_SETENV */
@@ -3904,95 +4901,12 @@ lt_extend_str (const char *orig_value, const char *add, int to_end)
   return new_value;
 }
 
-int
-lt_split_name_value (const char *arg, char** name, char** value)
-{
-  const char *p;
-  int len;
-  if (!arg || !*arg)
-    return 1;
-
-  p = strchr (arg, (int)'=');
-
-  if (!p)
-    return 1;
-
-  *value = xstrdup (++p);
-
-  len = strlen (arg) - strlen (*value);
-  *name = XMALLOC (char, len);
-  strncpy (*name, arg, len-1);
-  (*name)[len - 1] = '\0';
-
-  return 0;
-}
-
-void
-lt_opt_process_env_set (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
-    }
-
-  lt_setenv (name, value);
-  XFREE (name);
-  XFREE (value);
-}
-
-void
-lt_opt_process_env_prepend (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-  char *new_value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
-    }
-
-  new_value = lt_extend_str (getenv (name), value, 0);
-  lt_setenv (name, new_value);
-  XFREE (new_value);
-  XFREE (name);
-  XFREE (value);
-}
-
-void
-lt_opt_process_env_append (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-  char *new_value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
-    }
-
-  new_value = lt_extend_str (getenv (name), value, 1);
-  lt_setenv (name, new_value);
-  XFREE (new_value);
-  XFREE (name);
-  XFREE (value);
-}
-
 void
 lt_update_exe_path (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
 
   if (name && *name && value && *value)
     {
@@ -4011,9 +4925,9 @@ lt_update_exe_path (const char *name, const char *value)
 void
 lt_update_lib_path (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
 
   if (name && *name && value && *value)
     {
@@ -4023,11 +4937,158 @@ lt_update_lib_path (const char *name, const char *value)
     }
 }
 
+EOF
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+   Note that spawn() does not by itself call the command interpreter
+     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+         GetVersionEx(&v);
+         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+      }) ? "cmd.exe" : "command.com").
+   Instead it simply concatenates the arguments, separated by ' ', and calls
+   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
+   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+   special way:
+   - Space and tab are interpreted as delimiters. They are not treated as
+     delimiters if they are surrounded by double quotes: "...".
+   - Unescaped double quotes are removed from the input. Their only effect is
+     that within double quotes, space and tab are treated like normal
+     characters.
+   - Backslashes not followed by double quotes are not special.
+   - But 2*n+1 backslashes followed by a double quote become
+     n backslashes followed by a double quote (n >= 0):
+       \" -> "
+       \\\" -> \"
+       \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+  size_t argc;
+  char **new_argv;
+  size_t i;
+
+  /* Count number of arguments.  */
+  for (argc = 0; argv[argc] != NULL; argc++)
+    ;
+
+  /* Allocate new argument vector.  */
+  new_argv = XMALLOC (char *, argc + 1);
+
+  /* Put quoted arguments into the new argument vector.  */
+  for (i = 0; i < argc; i++)
+    {
+      const char *string = argv[i];
+
+      if (string[0] == '\0')
+	new_argv[i] = xstrdup ("\"\"");
+      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+	{
+	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+	  size_t length;
+	  unsigned int backslashes;
+	  const char *s;
+	  char *quoted_string;
+	  char *p;
+
+	  length = 0;
+	  backslashes = 0;
+	  if (quote_around)
+	    length++;
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		length += backslashes + 1;
+	      length++;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    length += backslashes + 1;
+
+	  quoted_string = XMALLOC (char, length + 1);
+
+	  p = quoted_string;
+	  backslashes = 0;
+	  if (quote_around)
+	    *p++ = '"';
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		{
+		  unsigned int j;
+		  for (j = backslashes + 1; j > 0; j--)
+		    *p++ = '\\';
+		}
+	      *p++ = c;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    {
+	      unsigned int j;
+	      for (j = backslashes; j > 0; j--)
+		*p++ = '\\';
+	      *p++ = '"';
+	    }
+	  *p = '\0';
+
+	  new_argv[i] = quoted_string;
+	}
+      else
+	new_argv[i] = (char *) string;
+    }
+  new_argv[argc] = NULL;
+
+  return new_argv;
+}
+EOF
+		;;
+	    esac
 
+            cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+	    func_emit_wrapper yes |
+	      $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/  fputs ("\1", f);/p
+g
+D'
+            cat <<"EOF"
+}
 EOF
 }
 # end: func_emit_cwrapperexe_src
 
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+    $opt_debug
+    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+    *import*) : ;;
+    *) false ;;
+    esac
+}
+
 # func_mode_link arg...
 func_mode_link ()
 {
@@ -4072,6 +5133,7 @@ func_mode_link ()
     new_inherited_linker_flags=
 
     avoid_version=no
+    bindir=
     dlfiles=
     dlprefiles=
     dlself=no
@@ -4164,6 +5226,11 @@ func_mode_link ()
 	esac
 
 	case $prev in
+	bindir)
+	  bindir="$arg"
+	  prev=
+	  continue
+	  ;;
 	dlfiles|dlprefiles)
 	  if test "$preload" = no; then
 	    # Add the symbol object into the linking commands.
@@ -4195,9 +5262,9 @@ func_mode_link ()
 	    ;;
 	  *)
 	    if test "$prev" = dlfiles; then
-	      dlfiles="$dlfiles $arg"
+	      func_append dlfiles " $arg"
 	    else
-	      dlprefiles="$dlprefiles $arg"
+	      func_append dlprefiles " $arg"
 	    fi
 	    prev=
 	    continue
@@ -4221,7 +5288,7 @@ func_mode_link ()
 	    *-*-darwin*)
 	      case "$deplibs " in
 		*" $qarg.ltframework "*) ;;
-		*) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+		*) func_append deplibs " $qarg.ltframework" # this is fixed later
 		   ;;
 	      esac
 	      ;;
@@ -4240,7 +5307,7 @@ func_mode_link ()
 	    moreargs=
 	    for fil in `cat "$save_arg"`
 	    do
-#	      moreargs="$moreargs $fil"
+#	      func_append moreargs " $fil"
 	      arg=$fil
 	      # A libtool-controlled object.
 
@@ -4269,7 +5336,7 @@ func_mode_link ()
 
 		  if test "$prev" = dlfiles; then
 		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-		      dlfiles="$dlfiles $pic_object"
+		      func_append dlfiles " $pic_object"
 		      prev=
 		      continue
 		    else
@@ -4281,7 +5348,7 @@ func_mode_link ()
 		  # CHECK ME:  I think I busted this.  -Ossama
 		  if test "$prev" = dlprefiles; then
 		    # Preload the old-style object.
-		    dlprefiles="$dlprefiles $pic_object"
+		    func_append dlprefiles " $pic_object"
 		    prev=
 		  fi
 
@@ -4351,12 +5418,12 @@ func_mode_link ()
 	  if test "$prev" = rpath; then
 	    case "$rpath " in
 	    *" $arg "*) ;;
-	    *) rpath="$rpath $arg" ;;
+	    *) func_append rpath " $arg" ;;
 	    esac
 	  else
 	    case "$xrpath " in
 	    *" $arg "*) ;;
-	    *) xrpath="$xrpath $arg" ;;
+	    *) func_append xrpath " $arg" ;;
 	    esac
 	  fi
 	  prev=
@@ -4368,28 +5435,28 @@ func_mode_link ()
 	  continue
 	  ;;
 	weak)
-	  weak_libs="$weak_libs $arg"
+	  func_append weak_libs " $arg"
 	  prev=
 	  continue
 	  ;;
 	xcclinker)
-	  linker_flags="$linker_flags $qarg"
-	  compiler_flags="$compiler_flags $qarg"
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $qarg"
 	  prev=
 	  func_append compile_command " $qarg"
 	  func_append finalize_command " $qarg"
 	  continue
 	  ;;
 	xcompiler)
-	  compiler_flags="$compiler_flags $qarg"
+	  func_append compiler_flags " $qarg"
 	  prev=
 	  func_append compile_command " $qarg"
 	  func_append finalize_command " $qarg"
 	  continue
 	  ;;
 	xlinker)
-	  linker_flags="$linker_flags $qarg"
-	  compiler_flags="$compiler_flags $wl$qarg"
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $wl$qarg"
 	  prev=
 	  func_append compile_command " $wl$qarg"
 	  func_append finalize_command " $wl$qarg"
@@ -4425,6 +5492,11 @@ func_mode_link ()
 	continue
 	;;
 
+      -bindir)
+	prev=bindir
+	continue
+	;;
+
       -dlopen)
 	prev=dlfiles
 	continue
@@ -4475,15 +5547,16 @@ func_mode_link ()
 	;;
 
       -L*)
-	func_stripname '-L' '' "$arg"
-	dir=$func_stripname_result
-	if test -z "$dir"; then
+	func_stripname "-L" '' "$arg"
+	if test -z "$func_stripname_result"; then
 	  if test "$#" -gt 0; then
 	    func_fatal_error "require no space between \`-L' and \`$1'"
 	  else
 	    func_fatal_error "need path for \`-L' option"
 	  fi
 	fi
+	func_resolve_sysroot "$func_stripname_result"
+	dir=$func_resolve_sysroot_result
 	# We need an absolute path.
 	case $dir in
 	[\\/]* | [A-Za-z]:[\\/]*) ;;
@@ -4495,24 +5568,30 @@ func_mode_link ()
 	  ;;
 	esac
 	case "$deplibs " in
-	*" -L$dir "*) ;;
+	*" -L$dir "* | *" $arg "*)
+	  # Will only happen for absolute or sysroot arguments
+	  ;;
 	*)
-	  deplibs="$deplibs -L$dir"
-	  lib_search_path="$lib_search_path $dir"
+	  # Preserve sysroot, but never include relative directories
+	  case $dir in
+	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+	    *) func_append deplibs " -L$dir" ;;
+	  esac
+	  func_append lib_search_path " $dir"
 	  ;;
 	esac
 	case $host in
 	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-	  testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
 	  case :$dllsearchpath: in
 	  *":$dir:"*) ;;
 	  ::) dllsearchpath=$dir;;
-	  *) dllsearchpath="$dllsearchpath:$dir";;
+	  *) func_append dllsearchpath ":$dir";;
 	  esac
 	  case :$dllsearchpath: in
 	  *":$testbindir:"*) ;;
 	  ::) dllsearchpath=$testbindir;;
-	  *) dllsearchpath="$dllsearchpath:$testbindir";;
+	  *) func_append dllsearchpath ":$testbindir";;
 	  esac
 	  ;;
 	esac
@@ -4522,7 +5601,7 @@ func_mode_link ()
       -l*)
 	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
 	  case $host in
-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
 	    # These systems don't actually have a C or math library (as such)
 	    continue
 	    ;;
@@ -4536,7 +5615,7 @@ func_mode_link ()
 	    ;;
 	  *-*-rhapsody* | *-*-darwin1.[012])
 	    # Rhapsody C and math libraries are in the System framework
-	    deplibs="$deplibs System.ltframework"
+	    func_append deplibs " System.ltframework"
 	    continue
 	    ;;
 	  *-*-sco3.2v5* | *-*-sco5v6*)
@@ -4556,7 +5635,7 @@ func_mode_link ()
 	   ;;
 	 esac
 	fi
-	deplibs="$deplibs $arg"
+	func_append deplibs " $arg"
 	continue
 	;;
 
@@ -4568,21 +5647,22 @@ func_mode_link ()
       # Tru64 UNIX uses -model [arg] to determine the layout of C++
       # classes, name mangling, and exception handling.
       # Darwin uses the -arch flag to determine output architecture.
-      -model|-arch|-isysroot)
-	compiler_flags="$compiler_flags $arg"
+      -model|-arch|-isysroot|--sysroot)
+	func_append compiler_flags " $arg"
 	func_append compile_command " $arg"
 	func_append finalize_command " $arg"
 	prev=xcompiler
 	continue
 	;;
 
-      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
-	compiler_flags="$compiler_flags $arg"
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+	func_append compiler_flags " $arg"
 	func_append compile_command " $arg"
 	func_append finalize_command " $arg"
 	case "$new_inherited_linker_flags " in
 	    *" $arg "*) ;;
-	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+	    * ) func_append new_inherited_linker_flags " $arg" ;;
 	esac
 	continue
 	;;
@@ -4649,13 +5729,17 @@ func_mode_link ()
 	# We need an absolute path.
 	case $dir in
 	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	=*)
+	  func_stripname '=' '' "$dir"
+	  dir=$lt_sysroot$func_stripname_result
+	  ;;
 	*)
 	  func_fatal_error "only absolute run-paths are allowed"
 	  ;;
 	esac
 	case "$xrpath " in
 	*" $dir "*) ;;
-	*) xrpath="$xrpath $dir" ;;
+	*) func_append xrpath " $dir" ;;
 	esac
 	continue
 	;;
@@ -4708,8 +5792,8 @@ func_mode_link ()
 	for flag in $args; do
 	  IFS="$save_ifs"
           func_quote_for_eval "$flag"
-	  arg="$arg $wl$func_quote_for_eval_result"
-	  compiler_flags="$compiler_flags $func_quote_for_eval_result"
+	  func_append arg " $func_quote_for_eval_result"
+	  func_append compiler_flags " $func_quote_for_eval_result"
 	done
 	IFS="$save_ifs"
 	func_stripname ' ' '' "$arg"
@@ -4724,9 +5808,9 @@ func_mode_link ()
 	for flag in $args; do
 	  IFS="$save_ifs"
           func_quote_for_eval "$flag"
-	  arg="$arg $wl$func_quote_for_eval_result"
-	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
-	  linker_flags="$linker_flags $func_quote_for_eval_result"
+	  func_append arg " $wl$func_quote_for_eval_result"
+	  func_append compiler_flags " $wl$func_quote_for_eval_result"
+	  func_append linker_flags " $func_quote_for_eval_result"
 	done
 	IFS="$save_ifs"
 	func_stripname ' ' '' "$arg"
@@ -4754,23 +5838,27 @@ func_mode_link ()
 	arg="$func_quote_for_eval_result"
 	;;
 
-      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
-      # -r[0-9][0-9]* specifies the processor on the SGI compiler
-      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
-      # +DA*, +DD* enable 64-bit mode on the HP compiler
-      # -q* pass through compiler args for the IBM compiler
-      # -m*, -t[45]*, -txscale* pass through architecture-specific
-      # compiler args for GCC
-      # -F/path gives path to uninstalled frameworks, gcc on darwin
-      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
-      # @file GCC response files
+      # Flags to be passed through unchanged, with rationale:
+      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
+      # -r[0-9][0-9]*        specify processor for the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+      # +DA*, +DD*           enable 64-bit mode for the HP compiler
+      # -q*                  compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+      # -F/path              path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
+      # @file                GCC response files
+      # -tp=*                Portland pgcc target processor selection
+      # --sysroot=*          for sysroot support
+      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
         func_quote_for_eval "$arg"
 	arg="$func_quote_for_eval_result"
         func_append compile_command " $arg"
         func_append finalize_command " $arg"
-        compiler_flags="$compiler_flags $arg"
+        func_append compiler_flags " $arg"
         continue
         ;;
 
@@ -4782,7 +5870,7 @@ func_mode_link ()
 
       *.$objext)
 	# A standard object.
-	objs="$objs $arg"
+	func_append objs " $arg"
 	;;
 
       *.lo)
@@ -4813,7 +5901,7 @@ func_mode_link ()
 
 	    if test "$prev" = dlfiles; then
 	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-		dlfiles="$dlfiles $pic_object"
+		func_append dlfiles " $pic_object"
 		prev=
 		continue
 	      else
@@ -4825,7 +5913,7 @@ func_mode_link ()
 	    # CHECK ME:  I think I busted this.  -Ossama
 	    if test "$prev" = dlprefiles; then
 	      # Preload the old-style object.
-	      dlprefiles="$dlprefiles $pic_object"
+	      func_append dlprefiles " $pic_object"
 	      prev=
 	    fi
 
@@ -4870,24 +5958,25 @@ func_mode_link ()
 
       *.$libext)
 	# An archive.
-	deplibs="$deplibs $arg"
-	old_deplibs="$old_deplibs $arg"
+	func_append deplibs " $arg"
+	func_append old_deplibs " $arg"
 	continue
 	;;
 
       *.la)
 	# A libtool-controlled library.
 
+	func_resolve_sysroot "$arg"
 	if test "$prev" = dlfiles; then
 	  # This library was specified with -dlopen.
-	  dlfiles="$dlfiles $arg"
+	  func_append dlfiles " $func_resolve_sysroot_result"
 	  prev=
 	elif test "$prev" = dlprefiles; then
 	  # The library was specified with -dlpreopen.
-	  dlprefiles="$dlprefiles $arg"
+	  func_append dlprefiles " $func_resolve_sysroot_result"
 	  prev=
 	else
-	  deplibs="$deplibs $arg"
+	  func_append deplibs " $func_resolve_sysroot_result"
 	fi
 	continue
 	;;
@@ -4925,7 +6014,7 @@ func_mode_link ()
 
     if test -n "$shlibpath_var"; then
       # get the directories listed in $shlibpath_var
-      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
     else
       shlib_search_path=
     fi
@@ -4934,6 +6023,8 @@ func_mode_link ()
 
     func_dirname "$output" "/" ""
     output_objdir="$func_dirname_result$objdir"
+    func_to_tool_file "$output_objdir/"
+    tool_output_objdir=$func_to_tool_file_result
     # Create the object directory.
     func_mkdir_p "$output_objdir"
 
@@ -4954,12 +6045,12 @@ func_mode_link ()
     # Find all interdependent deplibs by searching for libraries
     # that are linked more than once (e.g. -la -lb -la)
     for deplib in $deplibs; do
-      if $opt_duplicate_deps ; then
+      if $opt_preserve_dup_deps ; then
 	case "$libs " in
-	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
 	esac
       fi
-      libs="$libs $deplib"
+      func_append libs " $deplib"
     done
 
     if test "$linkmode" = lib; then
@@ -4972,9 +6063,9 @@ func_mode_link ()
       if $opt_duplicate_compiler_generated_deps; then
 	for pre_post_dep in $predeps $postdeps; do
 	  case "$pre_post_deps " in
-	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
 	  esac
-	  pre_post_deps="$pre_post_deps $pre_post_dep"
+	  func_append pre_post_deps " $pre_post_dep"
 	done
       fi
       pre_post_deps=
@@ -5044,17 +6135,19 @@ func_mode_link ()
 	for lib in $dlprefiles; do
 	  # Ignore non-libtool-libs
 	  dependency_libs=
+	  func_resolve_sysroot "$lib"
 	  case $lib in
-	  *.la)	func_source "$lib" ;;
+	  *.la)	func_source "$func_resolve_sysroot_result" ;;
 	  esac
 
 	  # Collect preopened libtool deplibs, except any this library
 	  # has declared as weak libs
 	  for deplib in $dependency_libs; do
-            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+	    func_basename "$deplib"
+            deplib_base=$func_basename_result
 	    case " $weak_libs " in
 	    *" $deplib_base "*) ;;
-	    *) deplibs="$deplibs $deplib" ;;
+	    *) func_append deplibs " $deplib" ;;
 	    esac
 	  done
 	done
@@ -5070,16 +6163,17 @@ func_mode_link ()
 	lib=
 	found=no
 	case $deplib in
-	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
 	  if test "$linkmode,$pass" = "prog,link"; then
 	    compile_deplibs="$deplib $compile_deplibs"
 	    finalize_deplibs="$deplib $finalize_deplibs"
 	  else
-	    compiler_flags="$compiler_flags $deplib"
+	    func_append compiler_flags " $deplib"
 	    if test "$linkmode" = lib ; then
 		case "$new_inherited_linker_flags " in
 		    *" $deplib "*) ;;
-		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
 		esac
 	    fi
 	  fi
@@ -5164,7 +6258,7 @@ func_mode_link ()
 	    if test "$linkmode" = lib ; then
 		case "$new_inherited_linker_flags " in
 		    *" $deplib "*) ;;
-		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
 		esac
 	    fi
 	  fi
@@ -5177,7 +6271,8 @@ func_mode_link ()
 	    test "$pass" = conv && continue
 	    newdependency_libs="$deplib $newdependency_libs"
 	    func_stripname '-L' '' "$deplib"
-	    newlib_search_path="$newlib_search_path $func_stripname_result"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
 	    ;;
 	  prog)
 	    if test "$pass" = conv; then
@@ -5191,7 +6286,8 @@ func_mode_link ()
 	      finalize_deplibs="$deplib $finalize_deplibs"
 	    fi
 	    func_stripname '-L' '' "$deplib"
-	    newlib_search_path="$newlib_search_path $func_stripname_result"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
 	    ;;
 	  *)
 	    func_warning "\`-L' is ignored for archives/objects"
@@ -5202,17 +6298,21 @@ func_mode_link ()
 	-R*)
 	  if test "$pass" = link; then
 	    func_stripname '-R' '' "$deplib"
-	    dir=$func_stripname_result
+	    func_resolve_sysroot "$func_stripname_result"
+	    dir=$func_resolve_sysroot_result
 	    # Make sure the xrpath contains only unique directories.
 	    case "$xrpath " in
 	    *" $dir "*) ;;
-	    *) xrpath="$xrpath $dir" ;;
+	    *) func_append xrpath " $dir" ;;
 	    esac
 	  fi
 	  deplibs="$deplib $deplibs"
 	  continue
 	  ;;
-	*.la) lib="$deplib" ;;
+	*.la)
+	  func_resolve_sysroot "$deplib"
+	  lib=$func_resolve_sysroot_result
+	  ;;
 	*.$libext)
 	  if test "$pass" = conv; then
 	    deplibs="$deplib $deplibs"
@@ -5230,7 +6330,7 @@ func_mode_link ()
 		match_pattern*)
 		  set dummy $deplibs_check_method; shift
 		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
-		  if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
 		    | $EGREP "$match_pattern_regex" > /dev/null; then
 		    valid_a_lib=yes
 		  fi
@@ -5240,15 +6340,15 @@ func_mode_link ()
 		;;
 	      esac
 	      if test "$valid_a_lib" != yes; then
-		$ECHO
+		echo
 		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
-		$ECHO "*** I have the capability to make that library automatically link in when"
-		$ECHO "*** you link to this library.  But I can only do this if you have a"
-		$ECHO "*** shared version of the library, which you do not appear to have"
-		$ECHO "*** because the file extensions .$libext of this argument makes me believe"
-		$ECHO "*** that it is just a static archive that I should not use here."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because the file extensions .$libext of this argument makes me believe"
+		echo "*** that it is just a static archive that I should not use here."
 	      else
-		$ECHO
+		echo
 		$ECHO "*** Warning: Linking the shared library $output against the"
 		$ECHO "*** static library $deplib is not portable!"
 		deplibs="$deplib $deplibs"
@@ -5275,11 +6375,11 @@ func_mode_link ()
 	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
 	      # If there is no dlopen support or we're linking statically,
 	      # we need to preload.
-	      newdlprefiles="$newdlprefiles $deplib"
+	      func_append newdlprefiles " $deplib"
 	      compile_deplibs="$deplib $compile_deplibs"
 	      finalize_deplibs="$deplib $finalize_deplibs"
 	    else
-	      newdlfiles="$newdlfiles $deplib"
+	      func_append newdlfiles " $deplib"
 	    fi
 	  fi
 	  continue
@@ -5321,20 +6421,20 @@ func_mode_link ()
 
 	# Convert "-framework foo" to "foo.ltframework"
 	if test -n "$inherited_linker_flags"; then
-	  tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
 	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
 	    case " $new_inherited_linker_flags " in
 	      *" $tmp_inherited_linker_flag "*) ;;
-	      *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
 	    esac
 	  done
 	fi
-	dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	if test "$linkmode,$pass" = "lib,link" ||
 	   test "$linkmode,$pass" = "prog,scan" ||
 	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
-	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
-	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+	  test -n "$dlopen" && func_append dlfiles " $dlopen"
+	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
 	fi
 
 	if test "$pass" = conv; then
@@ -5345,17 +6445,17 @@ func_mode_link ()
 	      func_fatal_error "cannot find name of link library for \`$lib'"
 	    fi
 	    # It is a libtool convenience library, so add in its objects.
-	    convenience="$convenience $ladir/$objdir/$old_library"
-	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
+	    func_append convenience " $ladir/$objdir/$old_library"
+	    func_append old_convenience " $ladir/$objdir/$old_library"
 	    tmp_libs=
 	    for deplib in $dependency_libs; do
 	      deplibs="$deplib $deplibs"
-	      if $opt_duplicate_deps ; then
+	      if $opt_preserve_dup_deps ; then
 		case "$tmp_libs " in
-		*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+		*" $deplib "*) func_append specialdeplibs " $deplib" ;;
 		esac
 	      fi
-	      tmp_libs="$tmp_libs $deplib"
+	      func_append tmp_libs " $deplib"
 	    done
 	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
 	    func_fatal_error "\`$lib' is not a convenience library"
@@ -5366,9 +6466,15 @@ func_mode_link ()
 
 	# Get the name of the library we link against.
 	linklib=
-	for l in $old_library $library_names; do
-	  linklib="$l"
-	done
+	if test -n "$old_library" &&
+	   { test "$prefer_static_libs" = yes ||
+	     test "$prefer_static_libs,$installed" = "built,no"; }; then
+	  linklib=$old_library
+	else
+	  for l in $old_library $library_names; do
+	    linklib="$l"
+	  done
+	fi
 	if test -z "$linklib"; then
 	  func_fatal_error "cannot find name of link library for \`$lib'"
 	fi
@@ -5385,9 +6491,9 @@ func_mode_link ()
 	    # statically, we need to preload.  We also need to preload any
 	    # dependent libraries so libltdl's deplib preloader doesn't
 	    # bomb out in the load deplibs phase.
-	    dlprefiles="$dlprefiles $lib $dependency_libs"
+	    func_append dlprefiles " $lib $dependency_libs"
 	  else
-	    newdlfiles="$newdlfiles $lib"
+	    func_append newdlfiles " $lib"
 	  fi
 	  continue
 	fi # $pass = dlopen
@@ -5409,14 +6515,14 @@ func_mode_link ()
 
 	# Find the relevant object directory and library name.
 	if test "X$installed" = Xyes; then
-	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
 	    func_warning "library \`$lib' was moved."
 	    dir="$ladir"
 	    absdir="$abs_ladir"
 	    libdir="$abs_ladir"
 	  else
-	    dir="$libdir"
-	    absdir="$libdir"
+	    dir="$lt_sysroot$libdir"
+	    absdir="$lt_sysroot$libdir"
 	  fi
 	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
 	else
@@ -5424,12 +6530,12 @@ func_mode_link ()
 	    dir="$ladir"
 	    absdir="$abs_ladir"
 	    # Remove this search path later
-	    notinst_path="$notinst_path $abs_ladir"
+	    func_append notinst_path " $abs_ladir"
 	  else
 	    dir="$ladir/$objdir"
 	    absdir="$abs_ladir/$objdir"
 	    # Remove this search path later
-	    notinst_path="$notinst_path $abs_ladir"
+	    func_append notinst_path " $abs_ladir"
 	  fi
 	fi # $installed = yes
 	func_stripname 'lib' '.la' "$laname"
@@ -5440,20 +6546,46 @@ func_mode_link ()
 	  if test -z "$libdir" && test "$linkmode" = prog; then
 	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
 	  fi
-	  # Prefer using a static library (so that no silly _DYNAMIC symbols
-	  # are required to link).
-	  if test -n "$old_library"; then
-	    newdlprefiles="$newdlprefiles $dir/$old_library"
-	    # Keep a list of preopened convenience libraries to check
-	    # that they are being used correctly in the link pass.
-	    test -z "$libdir" && \
-		dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
-	  # Otherwise, use the dlname, so that lt_dlopen finds it.
-	  elif test -n "$dlname"; then
-	    newdlprefiles="$newdlprefiles $dir/$dlname"
-	  else
-	    newdlprefiles="$newdlprefiles $dir/$linklib"
-	  fi
+	  case "$host" in
+	    # special handling for platforms with PE-DLLs.
+	    *cygwin* | *mingw* | *cegcc* )
+	      # Linker will automatically link against shared library if both
+	      # static and shared are present.  Therefore, ensure we extract
+	      # symbols from the import library if a shared library is present
+	      # (otherwise, the dlopen module name will be incorrect).  We do
+	      # this by putting the import library name into $newdlprefiles.
+	      # We recover the dlopen module name by 'saving' the la file
+	      # name in a special purpose variable, and (later) extracting the
+	      # dlname from the la file.
+	      if test -n "$dlname"; then
+	        func_tr_sh "$dir/$linklib"
+	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+	        func_append newdlprefiles " $dir/$linklib"
+	      else
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      fi
+	    ;;
+	    * )
+	      # Prefer using a static library (so that no silly _DYNAMIC symbols
+	      # are required to link).
+	      if test -n "$old_library"; then
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      # Otherwise, use the dlname, so that lt_dlopen finds it.
+	      elif test -n "$dlname"; then
+	        func_append newdlprefiles " $dir/$dlname"
+	      else
+	        func_append newdlprefiles " $dir/$linklib"
+	      fi
+	    ;;
+	  esac
 	fi # $pass = dlpreopen
 
 	if test -z "$libdir"; then
@@ -5471,7 +6603,7 @@ func_mode_link ()
 
 
 	if test "$linkmode" = prog && test "$pass" != link; then
-	  newlib_search_path="$newlib_search_path $ladir"
+	  func_append newlib_search_path " $ladir"
 	  deplibs="$lib $deplibs"
 
 	  linkalldeplibs=no
@@ -5484,7 +6616,8 @@ func_mode_link ()
 	  for deplib in $dependency_libs; do
 	    case $deplib in
 	    -L*) func_stripname '-L' '' "$deplib"
-	         newlib_search_path="$newlib_search_path $func_stripname_result"
+	         func_resolve_sysroot "$func_stripname_result"
+	         func_append newlib_search_path " $func_resolve_sysroot_result"
 		 ;;
 	    esac
 	    # Need to link against all dependency_libs?
@@ -5495,12 +6628,12 @@ func_mode_link ()
 	      # or/and link against static libraries
 	      newdependency_libs="$deplib $newdependency_libs"
 	    fi
-	    if $opt_duplicate_deps ; then
+	    if $opt_preserve_dup_deps ; then
 	      case "$tmp_libs " in
-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
 	      esac
 	    fi
-	    tmp_libs="$tmp_libs $deplib"
+	    func_append tmp_libs " $deplib"
 	  done # for deplib
 	  continue
 	fi # $linkmode = prog...
@@ -5515,7 +6648,7 @@ func_mode_link ()
 	      # Make sure the rpath contains only unique directories.
 	      case "$temp_rpath:" in
 	      *"$absdir:"*) ;;
-	      *) temp_rpath="$temp_rpath$absdir:" ;;
+	      *) func_append temp_rpath "$absdir:" ;;
 	      esac
 	    fi
 
@@ -5527,7 +6660,7 @@ func_mode_link ()
 	    *)
 	      case "$compile_rpath " in
 	      *" $absdir "*) ;;
-	      *) compile_rpath="$compile_rpath $absdir"
+	      *) func_append compile_rpath " $absdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5536,7 +6669,7 @@ func_mode_link ()
 	    *)
 	      case "$finalize_rpath " in
 	      *" $libdir "*) ;;
-	      *) finalize_rpath="$finalize_rpath $libdir"
+	      *) func_append finalize_rpath " $libdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5561,12 +6694,12 @@ func_mode_link ()
 	  case $host in
 	  *cygwin* | *mingw* | *cegcc*)
 	      # No point in relinking DLLs because paths are not encoded
-	      notinst_deplibs="$notinst_deplibs $lib"
+	      func_append notinst_deplibs " $lib"
 	      need_relink=no
 	    ;;
 	  *)
 	    if test "$installed" = no; then
-	      notinst_deplibs="$notinst_deplibs $lib"
+	      func_append notinst_deplibs " $lib"
 	      need_relink=yes
 	    fi
 	    ;;
@@ -5583,7 +6716,7 @@ func_mode_link ()
 	    fi
 	  done
 	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
-	    $ECHO
+	    echo
 	    if test "$linkmode" = prog; then
 	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
 	    else
@@ -5601,7 +6734,7 @@ func_mode_link ()
 	    *)
 	      case "$compile_rpath " in
 	      *" $absdir "*) ;;
-	      *) compile_rpath="$compile_rpath $absdir"
+	      *) func_append compile_rpath " $absdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5610,7 +6743,7 @@ func_mode_link ()
 	    *)
 	      case "$finalize_rpath " in
 	      *" $libdir "*) ;;
-	      *) finalize_rpath="$finalize_rpath $libdir"
+	      *) func_append finalize_rpath " $libdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5664,7 +6797,7 @@ func_mode_link ()
 	    linklib=$newlib
 	  fi # test -n "$old_archive_from_expsyms_cmds"
 
-	  if test "$linkmode" = prog || test "$mode" != relink; then
+	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
 	    add_shlibpath=
 	    add_dir=
 	    add=
@@ -5686,9 +6819,9 @@ func_mode_link ()
 		      if test "X$dlopenmodule" != "X$lib"; then
 			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
 			if test -z "$old_library" ; then
-			  $ECHO
-			  $ECHO "*** And there doesn't seem to be a static archive available"
-			  $ECHO "*** The link will probably fail, sorry"
+			  echo
+			  echo "*** And there doesn't seem to be a static archive available"
+			  echo "*** The link will probably fail, sorry"
 			else
 			  add="$dir/$old_library"
 			fi
@@ -5715,12 +6848,12 @@ func_mode_link ()
 	         test "$hardcode_direct_absolute" = no; then
 		add="$dir/$linklib"
 	      elif test "$hardcode_minus_L" = yes; then
-		add_dir="-L$dir"
+		add_dir="-L$absdir"
 		# Try looking first in the location we're being installed to.
 		if test -n "$inst_prefix_dir"; then
 		  case $libdir in
 		    [\\/]*)
-		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		      func_append add_dir " -L$inst_prefix_dir$libdir"
 		      ;;
 		  esac
 		fi
@@ -5742,7 +6875,7 @@ func_mode_link ()
 	    if test -n "$add_shlibpath"; then
 	      case :$compile_shlibpath: in
 	      *":$add_shlibpath:"*) ;;
-	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
 	      esac
 	    fi
 	    if test "$linkmode" = prog; then
@@ -5756,13 +6889,13 @@ func_mode_link ()
 		 test "$hardcode_shlibpath_var" = yes; then
 		case :$finalize_shlibpath: in
 		*":$libdir:"*) ;;
-		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+		*) func_append finalize_shlibpath "$libdir:" ;;
 		esac
 	      fi
 	    fi
 	  fi
 
-	  if test "$linkmode" = prog || test "$mode" = relink; then
+	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
 	    add_shlibpath=
 	    add_dir=
 	    add=
@@ -5776,7 +6909,7 @@ func_mode_link ()
 	    elif test "$hardcode_shlibpath_var" = yes; then
 	      case :$finalize_shlibpath: in
 	      *":$libdir:"*) ;;
-	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+	      *) func_append finalize_shlibpath "$libdir:" ;;
 	      esac
 	      add="-l$name"
 	    elif test "$hardcode_automatic" = yes; then
@@ -5793,7 +6926,7 @@ func_mode_link ()
 	      if test -n "$inst_prefix_dir"; then
 		case $libdir in
 		  [\\/]*)
-		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		    func_append add_dir " -L$inst_prefix_dir$libdir"
 		    ;;
 		esac
 	      fi
@@ -5828,21 +6961,21 @@ func_mode_link ()
 
 	    # Just print a warning and add the library to dependency_libs so
 	    # that the program can be linked against the static library.
-	    $ECHO
+	    echo
 	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
-	    $ECHO "*** I have the capability to make that library automatically link in when"
-	    $ECHO "*** you link to this library.  But I can only do this if you have a"
-	    $ECHO "*** shared version of the library, which you do not appear to have."
+	    echo "*** I have the capability to make that library automatically link in when"
+	    echo "*** you link to this library.  But I can only do this if you have a"
+	    echo "*** shared version of the library, which you do not appear to have."
 	    if test "$module" = yes; then
-	      $ECHO "*** But as you try to build a module library, libtool will still create "
-	      $ECHO "*** a static module, that should work as long as the dlopening application"
-	      $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+	      echo "*** But as you try to build a module library, libtool will still create "
+	      echo "*** a static module, that should work as long as the dlopening application"
+	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
 	      if test -z "$global_symbol_pipe"; then
-		$ECHO
-		$ECHO "*** However, this would only work if libtool was able to extract symbol"
-		$ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
-		$ECHO "*** not find such a program.  So, this module is probably useless."
-		$ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+		echo
+		echo "*** However, this would only work if libtool was able to extract symbol"
+		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		echo "*** not find such a program.  So, this module is probably useless."
+		echo "*** \`nm' from GNU binutils and a full rebuild may help."
 	      fi
 	      if test "$build_old_libs" = no; then
 		build_libtool_libs=module
@@ -5870,27 +7003,33 @@ func_mode_link ()
 	           temp_xrpath=$func_stripname_result
 		   case " $xrpath " in
 		   *" $temp_xrpath "*) ;;
-		   *) xrpath="$xrpath $temp_xrpath";;
+		   *) func_append xrpath " $temp_xrpath";;
 		   esac;;
-	      *) temp_deplibs="$temp_deplibs $libdir";;
+	      *) func_append temp_deplibs " $libdir";;
 	      esac
 	    done
 	    dependency_libs="$temp_deplibs"
 	  fi
 
-	  newlib_search_path="$newlib_search_path $absdir"
+	  func_append newlib_search_path " $absdir"
 	  # Link against this library
 	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
 	  # ... and its dependency_libs
 	  tmp_libs=
 	  for deplib in $dependency_libs; do
 	    newdependency_libs="$deplib $newdependency_libs"
-	    if $opt_duplicate_deps ; then
+	    case $deplib in
+              -L*) func_stripname '-L' '' "$deplib"
+                   func_resolve_sysroot "$func_stripname_result";;
+              *) func_resolve_sysroot "$deplib" ;;
+            esac
+	    if $opt_preserve_dup_deps ; then
 	      case "$tmp_libs " in
-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      *" $func_resolve_sysroot_result "*)
+                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
 	      esac
 	    fi
-	    tmp_libs="$tmp_libs $deplib"
+	    func_append tmp_libs " $func_resolve_sysroot_result"
 	  done
 
 	  if test "$link_all_deplibs" != no; then
@@ -5900,8 +7039,10 @@ func_mode_link ()
 	      case $deplib in
 	      -L*) path="$deplib" ;;
 	      *.la)
+	        func_resolve_sysroot "$deplib"
+	        deplib=$func_resolve_sysroot_result
 	        func_dirname "$deplib" "" "."
-		dir="$func_dirname_result"
+		dir=$func_dirname_result
 		# We need an absolute path.
 		case $dir in
 		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
@@ -5928,8 +7069,8 @@ func_mode_link ()
                       if test -z "$darwin_install_name"; then
                           darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
                       fi
-		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
-		      linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
 		      path=
 		    fi
 		  fi
@@ -5962,7 +7103,7 @@ func_mode_link ()
 	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
 	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
 	else
-	  compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	fi
       fi
       dependency_libs="$newdependency_libs"
@@ -5979,7 +7120,7 @@ func_mode_link ()
 	  for dir in $newlib_search_path; do
 	    case "$lib_search_path " in
 	    *" $dir "*) ;;
-	    *) lib_search_path="$lib_search_path $dir" ;;
+	    *) func_append lib_search_path " $dir" ;;
 	    esac
 	  done
 	  newlib_search_path=
@@ -6037,10 +7178,10 @@ func_mode_link ()
 	    -L*)
 	      case " $tmp_libs " in
 	      *" $deplib "*) ;;
-	      *) tmp_libs="$tmp_libs $deplib" ;;
+	      *) func_append tmp_libs " $deplib" ;;
 	      esac
 	      ;;
-	    *) tmp_libs="$tmp_libs $deplib" ;;
+	    *) func_append tmp_libs " $deplib" ;;
 	    esac
 	  done
 	  eval $var=\"$tmp_libs\"
@@ -6056,7 +7197,7 @@ func_mode_link ()
 	  ;;
 	esac
 	if test -n "$i" ; then
-	  tmp_libs="$tmp_libs $i"
+	  func_append tmp_libs " $i"
 	fi
       done
       dependency_libs=$tmp_libs
@@ -6097,7 +7238,7 @@ func_mode_link ()
       # Now set the variables for building old libraries.
       build_libtool_libs=no
       oldlibs="$output"
-      objs="$objs$old_deplibs"
+      func_append objs "$old_deplibs"
       ;;
 
     lib)
@@ -6130,10 +7271,10 @@ func_mode_link ()
 	if test "$deplibs_check_method" != pass_all; then
 	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
 	else
-	  $ECHO
+	  echo
 	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
 	  $ECHO "*** objects $objs is not portable!"
-	  libobjs="$libobjs $objs"
+	  func_append libobjs " $objs"
 	fi
       fi
 
@@ -6192,13 +7333,14 @@ func_mode_link ()
 	  # which has an extra 1 added just for fun
 	  #
 	  case $version_type in
+	  # correct linux to gnu/linux during the next big refactor
 	  darwin|linux|osf|windows|none)
 	    func_arith $number_major + $number_minor
 	    current=$func_arith_result
 	    age="$number_minor"
 	    revision="$number_revision"
 	    ;;
-	  freebsd-aout|freebsd-elf|sunos)
+	  freebsd-aout|freebsd-elf|qnx|sunos)
 	    current="$number_major"
 	    revision="$number_minor"
 	    age="0"
@@ -6311,7 +7453,7 @@ func_mode_link ()
 	  versuffix="$major.$revision"
 	  ;;
 
-	linux)
+	linux) # correct to gnu/linux during the next big refactor
 	  func_arith $current - $age
 	  major=.$func_arith_result
 	  versuffix="$major.$age.$revision"
@@ -6334,7 +7476,7 @@ func_mode_link ()
 	  done
 
 	  # Make executables depend on our current version.
-	  verstring="$verstring:${current}.0"
+	  func_append verstring ":${current}.0"
 	  ;;
 
 	qnx)
@@ -6402,10 +7544,10 @@ func_mode_link ()
       fi
 
       func_generate_dlsyms "$libname" "$libname" "yes"
-      libobjs="$libobjs $symfileobj"
+      func_append libobjs " $symfileobj"
       test "X$libobjs" = "X " && libobjs=
 
-      if test "$mode" != relink; then
+      if test "$opt_mode" != relink; then
 	# Remove our outputs, but don't remove object files since they
 	# may have been created when compiling PIC objects.
 	removelist=
@@ -6421,7 +7563,7 @@ func_mode_link ()
 		   continue
 		 fi
 	       fi
-	       removelist="$removelist $p"
+	       func_append removelist " $p"
 	       ;;
 	    *) ;;
 	  esac
@@ -6432,27 +7574,28 @@ func_mode_link ()
 
       # Now set the variables for building old libraries.
       if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
-	oldlibs="$oldlibs $output_objdir/$libname.$libext"
+	func_append oldlibs " $output_objdir/$libname.$libext"
 
 	# Transform .lo files to .o files.
-	oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
       fi
 
       # Eliminate all temporary directories.
       #for path in $notinst_path; do
-      #	lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
-      #	deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
-      #	dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
       #done
 
       if test -n "$xrpath"; then
 	# If the user specified any rpath flags, then add them.
 	temp_xrpath=
 	for libdir in $xrpath; do
-	  temp_xrpath="$temp_xrpath -R$libdir"
+	  func_replace_sysroot "$libdir"
+	  func_append temp_xrpath " -R$func_replace_sysroot_result"
 	  case "$finalize_rpath " in
 	  *" $libdir "*) ;;
-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  *) func_append finalize_rpath " $libdir" ;;
 	  esac
 	done
 	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
@@ -6466,7 +7609,7 @@ func_mode_link ()
       for lib in $old_dlfiles; do
 	case " $dlprefiles $dlfiles " in
 	*" $lib "*) ;;
-	*) dlfiles="$dlfiles $lib" ;;
+	*) func_append dlfiles " $lib" ;;
 	esac
       done
 
@@ -6476,19 +7619,19 @@ func_mode_link ()
       for lib in $old_dlprefiles; do
 	case "$dlprefiles " in
 	*" $lib "*) ;;
-	*) dlprefiles="$dlprefiles $lib" ;;
+	*) func_append dlprefiles " $lib" ;;
 	esac
       done
 
       if test "$build_libtool_libs" = yes; then
 	if test -n "$rpath"; then
 	  case $host in
-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
 	    # these systems don't actually have a c library (as such)!
 	    ;;
 	  *-*-rhapsody* | *-*-darwin1.[012])
 	    # Rhapsody C library is in the System framework
-	    deplibs="$deplibs System.ltframework"
+	    func_append deplibs " System.ltframework"
 	    ;;
 	  *-*-netbsd*)
 	    # Don't link with libc until the a.out ld.so is fixed.
@@ -6505,7 +7648,7 @@ func_mode_link ()
 	  *)
 	    # Add libc to deplibs on all other systems if necessary.
 	    if test "$build_libtool_need_lc" = "yes"; then
-	      deplibs="$deplibs -lc"
+	      func_append deplibs " -lc"
 	    fi
 	    ;;
 	  esac
@@ -6554,7 +7697,7 @@ EOF
 		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		  case " $predeps $postdeps " in
 		  *" $i "*)
-		    newdeplibs="$newdeplibs $i"
+		    func_append newdeplibs " $i"
 		    i=""
 		    ;;
 		  esac
@@ -6565,21 +7708,21 @@ EOF
 		  set dummy $deplib_matches; shift
 		  deplib_match=$1
 		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		    newdeplibs="$newdeplibs $i"
+		    func_append newdeplibs " $i"
 		  else
 		    droppeddeps=yes
-		    $ECHO
+		    echo
 		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
-		    $ECHO "*** I have the capability to make that library automatically link in when"
-		    $ECHO "*** you link to this library.  But I can only do this if you have a"
-		    $ECHO "*** shared version of the library, which I believe you do not have"
-		    $ECHO "*** because a test_compile did reveal that the linker did not use it for"
-		    $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+		    echo "*** I have the capability to make that library automatically link in when"
+		    echo "*** you link to this library.  But I can only do this if you have a"
+		    echo "*** shared version of the library, which I believe you do not have"
+		    echo "*** because a test_compile did reveal that the linker did not use it for"
+		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
 		  fi
 		fi
 		;;
 	      *)
-		newdeplibs="$newdeplibs $i"
+		func_append newdeplibs " $i"
 		;;
 	      esac
 	    done
@@ -6597,7 +7740,7 @@ EOF
 		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		    case " $predeps $postdeps " in
 		    *" $i "*)
-		      newdeplibs="$newdeplibs $i"
+		      func_append newdeplibs " $i"
 		      i=""
 		      ;;
 		    esac
@@ -6608,29 +7751,29 @@ EOF
 		    set dummy $deplib_matches; shift
 		    deplib_match=$1
 		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		      newdeplibs="$newdeplibs $i"
+		      func_append newdeplibs " $i"
 		    else
 		      droppeddeps=yes
-		      $ECHO
+		      echo
 		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
-		      $ECHO "*** I have the capability to make that library automatically link in when"
-		      $ECHO "*** you link to this library.  But I can only do this if you have a"
-		      $ECHO "*** shared version of the library, which you do not appear to have"
-		      $ECHO "*** because a test_compile did reveal that the linker did not use this one"
-		      $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+		      echo "*** I have the capability to make that library automatically link in when"
+		      echo "*** you link to this library.  But I can only do this if you have a"
+		      echo "*** shared version of the library, which you do not appear to have"
+		      echo "*** because a test_compile did reveal that the linker did not use this one"
+		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
 		    fi
 		  fi
 		else
 		  droppeddeps=yes
-		  $ECHO
+		  echo
 		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
-		  $ECHO "*** make it link in!  You will probably need to install it or some"
-		  $ECHO "*** library that it depends on before this library will be fully"
-		  $ECHO "*** functional.  Installing it before continuing would be even better."
+		  echo "*** make it link in!  You will probably need to install it or some"
+		  echo "*** library that it depends on before this library will be fully"
+		  echo "*** functional.  Installing it before continuing would be even better."
 		fi
 		;;
 	      *)
-		newdeplibs="$newdeplibs $i"
+		func_append newdeplibs " $i"
 		;;
 	      esac
 	    done
@@ -6647,15 +7790,27 @@ EOF
 	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		case " $predeps $postdeps " in
 		*" $a_deplib "*)
-		  newdeplibs="$newdeplibs $a_deplib"
+		  func_append newdeplibs " $a_deplib"
 		  a_deplib=""
 		  ;;
 		esac
 	      fi
 	      if test -n "$a_deplib" ; then
 		libname=`eval "\\$ECHO \"$libname_spec\""`
+		if test -n "$file_magic_glob"; then
+		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+		else
+		  libnameglob=$libname
+		fi
+		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
 		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  if test "$want_nocaseglob" = yes; then
+		    shopt -s nocaseglob
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		    $nocaseglob
+		  else
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		  fi
 		  for potent_lib in $potential_libs; do
 		      # Follow soft links.
 		      if ls -lLd "$potent_lib" 2>/dev/null |
@@ -6672,13 +7827,13 @@ EOF
 			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
 			case $potliblink in
 			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
-			*) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
 			esac
 		      done
 		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
 			 $SED -e 10q |
 			 $EGREP "$file_magic_regex" > /dev/null; then
-			newdeplibs="$newdeplibs $a_deplib"
+			func_append newdeplibs " $a_deplib"
 			a_deplib=""
 			break 2
 		      fi
@@ -6687,12 +7842,12 @@ EOF
 	      fi
 	      if test -n "$a_deplib" ; then
 		droppeddeps=yes
-		$ECHO
+		echo
 		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
-		$ECHO "*** I have the capability to make that library automatically link in when"
-		$ECHO "*** you link to this library.  But I can only do this if you have a"
-		$ECHO "*** shared version of the library, which you do not appear to have"
-		$ECHO "*** because I did check the linker path looking for a file starting"
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
 		if test -z "$potlib" ; then
 		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
 		else
@@ -6703,7 +7858,7 @@ EOF
 	      ;;
 	    *)
 	      # Add a -L argument.
-	      newdeplibs="$newdeplibs $a_deplib"
+	      func_append newdeplibs " $a_deplib"
 	      ;;
 	    esac
 	  done # Gone through all deplibs.
@@ -6719,7 +7874,7 @@ EOF
 	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		case " $predeps $postdeps " in
 		*" $a_deplib "*)
-		  newdeplibs="$newdeplibs $a_deplib"
+		  func_append newdeplibs " $a_deplib"
 		  a_deplib=""
 		  ;;
 		esac
@@ -6730,9 +7885,9 @@ EOF
 		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
 		  for potent_lib in $potential_libs; do
 		    potlib="$potent_lib" # see symlink-check above in file_magic test
-		    if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
 		       $EGREP "$match_pattern_regex" > /dev/null; then
-		      newdeplibs="$newdeplibs $a_deplib"
+		      func_append newdeplibs " $a_deplib"
 		      a_deplib=""
 		      break 2
 		    fi
@@ -6741,12 +7896,12 @@ EOF
 	      fi
 	      if test -n "$a_deplib" ; then
 		droppeddeps=yes
-		$ECHO
+		echo
 		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
-		$ECHO "*** I have the capability to make that library automatically link in when"
-		$ECHO "*** you link to this library.  But I can only do this if you have a"
-		$ECHO "*** shared version of the library, which you do not appear to have"
-		$ECHO "*** because I did check the linker path looking for a file starting"
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
 		if test -z "$potlib" ; then
 		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
 		else
@@ -6757,32 +7912,32 @@ EOF
 	      ;;
 	    *)
 	      # Add a -L argument.
-	      newdeplibs="$newdeplibs $a_deplib"
+	      func_append newdeplibs " $a_deplib"
 	      ;;
 	    esac
 	  done # Gone through all deplibs.
 	  ;;
 	none | unknown | *)
 	  newdeplibs=""
-	  tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
-	      -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
 	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 	    for i in $predeps $postdeps ; do
 	      # can't use Xsed below, because $i might contain '/'
-	      tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
 	    done
 	  fi
-	  if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[	 ]//g' |
-	     $GREP . >/dev/null; then
-	    $ECHO
+	  case $tmp_deplibs in
+	  *[!\	\ ]*)
+	    echo
 	    if test "X$deplibs_check_method" = "Xnone"; then
-	      $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+	      echo "*** Warning: inter-library dependencies are not supported in this platform."
 	    else
-	      $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+	      echo "*** Warning: inter-library dependencies are not known to be supported."
 	    fi
-	    $ECHO "*** All declared inter-library dependencies are being dropped."
+	    echo "*** All declared inter-library dependencies are being dropped."
 	    droppeddeps=yes
-	  fi
+	    ;;
+	  esac
 	  ;;
 	esac
 	versuffix=$versuffix_save
@@ -6794,23 +7949,23 @@ EOF
 	case $host in
 	*-*-rhapsody* | *-*-darwin1.[012])
 	  # On Rhapsody replace the C library with the System framework
-	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
 	  ;;
 	esac
 
 	if test "$droppeddeps" = yes; then
 	  if test "$module" = yes; then
-	    $ECHO
-	    $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+	    echo
+	    echo "*** Warning: libtool could not satisfy all declared inter-library"
 	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
-	    $ECHO "*** a static module, that should work as long as the dlopening"
-	    $ECHO "*** application is linked with the -dlopen flag."
+	    echo "*** a static module, that should work as long as the dlopening"
+	    echo "*** application is linked with the -dlopen flag."
 	    if test -z "$global_symbol_pipe"; then
-	      $ECHO
-	      $ECHO "*** However, this would only work if libtool was able to extract symbol"
-	      $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
-	      $ECHO "*** not find such a program.  So, this module is probably useless."
-	      $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+	      echo
+	      echo "*** However, this would only work if libtool was able to extract symbol"
+	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      echo "*** not find such a program.  So, this module is probably useless."
+	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
 	    fi
 	    if test "$build_old_libs" = no; then
 	      oldlibs="$output_objdir/$libname.$libext"
@@ -6820,16 +7975,16 @@ EOF
 	      build_libtool_libs=no
 	    fi
 	  else
-	    $ECHO "*** The inter-library dependencies that have been dropped here will be"
-	    $ECHO "*** automatically added whenever a program is linked with this library"
-	    $ECHO "*** or is declared to -dlopen it."
+	    echo "*** The inter-library dependencies that have been dropped here will be"
+	    echo "*** automatically added whenever a program is linked with this library"
+	    echo "*** or is declared to -dlopen it."
 
 	    if test "$allow_undefined" = no; then
-	      $ECHO
-	      $ECHO "*** Since this library must not contain undefined symbols,"
-	      $ECHO "*** because either the platform does not support them or"
-	      $ECHO "*** it was explicitly requested with -no-undefined,"
-	      $ECHO "*** libtool will only create a static version of it."
+	      echo
+	      echo "*** Since this library must not contain undefined symbols,"
+	      echo "*** because either the platform does not support them or"
+	      echo "*** it was explicitly requested with -no-undefined,"
+	      echo "*** libtool will only create a static version of it."
 	      if test "$build_old_libs" = no; then
 		oldlibs="$output_objdir/$libname.$libext"
 		build_libtool_libs=module
@@ -6846,9 +8001,9 @@ EOF
       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
       case $host in
 	*-*-darwin*)
-	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-	  new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-	  deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	  ;;
       esac
 
@@ -6861,7 +8016,7 @@ EOF
 	*)
 	  case " $deplibs " in
 	  *" -L$path/$objdir "*)
-	    new_libs="$new_libs -L$path/$objdir" ;;
+	    func_append new_libs " -L$path/$objdir" ;;
 	  esac
 	  ;;
 	esac
@@ -6871,10 +8026,10 @@ EOF
 	-L*)
 	  case " $new_libs " in
 	  *" $deplib "*) ;;
-	  *) new_libs="$new_libs $deplib" ;;
+	  *) func_append new_libs " $deplib" ;;
 	  esac
 	  ;;
-	*) new_libs="$new_libs $deplib" ;;
+	*) func_append new_libs " $deplib" ;;
 	esac
       done
       deplibs="$new_libs"
@@ -6886,15 +8041,22 @@ EOF
 
       # Test again, we may have decided not to build it any more
       if test "$build_libtool_libs" = yes; then
+	# Remove ${wl} instances when linking with ld.
+	# FIXME: should test the right _cmds variable.
+	case $archive_cmds in
+	  *\$LD\ *) wl= ;;
+        esac
 	if test "$hardcode_into_libs" = yes; then
 	  # Hardcode the library paths
 	  hardcode_libdirs=
 	  dep_rpath=
 	  rpath="$finalize_rpath"
-	  test "$mode" != relink && rpath="$compile_rpath$rpath"
+	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
 	  for libdir in $rpath; do
 	    if test -n "$hardcode_libdir_flag_spec"; then
 	      if test -n "$hardcode_libdir_separator"; then
+		func_replace_sysroot "$libdir"
+		libdir=$func_replace_sysroot_result
 		if test -z "$hardcode_libdirs"; then
 		  hardcode_libdirs="$libdir"
 		else
@@ -6903,18 +8065,18 @@ EOF
 		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 		    ;;
 		  *)
-		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
 		    ;;
 		  esac
 		fi
 	      else
 		eval flag=\"$hardcode_libdir_flag_spec\"
-		dep_rpath="$dep_rpath $flag"
+		func_append dep_rpath " $flag"
 	      fi
 	    elif test -n "$runpath_var"; then
 	      case "$perm_rpath " in
 	      *" $libdir "*) ;;
-	      *) perm_rpath="$perm_rpath $libdir" ;;
+	      *) func_append perm_rpath " $libdir" ;;
 	      esac
 	    fi
 	  done
@@ -6922,17 +8084,13 @@ EOF
 	  if test -n "$hardcode_libdir_separator" &&
 	     test -n "$hardcode_libdirs"; then
 	    libdir="$hardcode_libdirs"
-	    if test -n "$hardcode_libdir_flag_spec_ld"; then
-	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
-	    else
-	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-	    fi
+	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
 	  fi
 	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
 	    # We should set the runpath_var.
 	    rpath=
 	    for dir in $perm_rpath; do
-	      rpath="$rpath$dir:"
+	      func_append rpath "$dir:"
 	    done
 	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
 	  fi
@@ -6940,7 +8098,7 @@ EOF
 	fi
 
 	shlibpath="$finalize_shlibpath"
-	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
 	if test -n "$shlibpath"; then
 	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
 	fi
@@ -6966,18 +8124,18 @@ EOF
 	linknames=
 	for link
 	do
-	  linknames="$linknames $link"
+	  func_append linknames " $link"
 	done
 
 	# Use standard objects if they are pic
-	test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
 	test "X$libobjs" = "X " && libobjs=
 
 	delfiles=
 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
 	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
 	  export_symbols="$output_objdir/$libname.uexp"
-	  delfiles="$delfiles $export_symbols"
+	  func_append delfiles " $export_symbols"
 	fi
 
 	orig_export_symbols=
@@ -7008,13 +8166,45 @@ EOF
 	    $opt_dry_run || $RM $export_symbols
 	    cmds=$export_symbols_cmds
 	    save_ifs="$IFS"; IFS='~'
-	    for cmd in $cmds; do
+	    for cmd1 in $cmds; do
 	      IFS="$save_ifs"
-	      eval cmd=\"$cmd\"
-	      func_len " $cmd"
-	      len=$func_len_result
-	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	      # Take the normal branch if the nm_file_list_spec branch
+	      # doesn't work or if tool conversion is not needed.
+	      case $nm_file_list_spec~$to_tool_file_cmd in
+		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+		  try_normal_branch=yes
+		  eval cmd=\"$cmd1\"
+		  func_len " $cmd"
+		  len=$func_len_result
+		  ;;
+		*)
+		  try_normal_branch=no
+		  ;;
+	      esac
+	      if test "$try_normal_branch" = yes \
+		 && { test "$len" -lt "$max_cmd_len" \
+		      || test "$max_cmd_len" -le -1; }
+	      then
+		func_show_eval "$cmd" 'exit $?'
+		skipped_export=false
+	      elif test -n "$nm_file_list_spec"; then
+		func_basename "$output"
+		output_la=$func_basename_result
+		save_libobjs=$libobjs
+		save_output=$output
+		output=${output_objdir}/${output_la}.nm
+		func_to_tool_file "$output"
+		libobjs=$nm_file_list_spec$func_to_tool_file_result
+		func_append delfiles " $output"
+		func_verbose "creating $NM input file list: $output"
+		for obj in $save_libobjs; do
+		  func_to_tool_file "$obj"
+		  $ECHO "$func_to_tool_file_result"
+		done > "$output"
+		eval cmd=\"$cmd1\"
 		func_show_eval "$cmd" 'exit $?'
+		output=$save_output
+		libobjs=$save_libobjs
 		skipped_export=false
 	      else
 		# The command line is too long to execute in one step.
@@ -7036,7 +8226,7 @@ EOF
 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
 	  tmp_export_symbols="$export_symbols"
 	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-	  $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
 	fi
 
 	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
@@ -7048,7 +8238,7 @@ EOF
 	  # global variables. join(1) would be nice here, but unfortunately
 	  # isn't a blessed tool.
 	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-	  delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
 	  export_symbols=$output_objdir/$libname.def
 	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
 	fi
@@ -7058,7 +8248,7 @@ EOF
 	  case " $convenience " in
 	  *" $test_deplib "*) ;;
 	  *)
-	    tmp_deplibs="$tmp_deplibs $test_deplib"
+	    func_append tmp_deplibs " $test_deplib"
 	    ;;
 	  esac
 	done
@@ -7078,21 +8268,21 @@ EOF
 	    test "X$libobjs" = "X " && libobjs=
 	  else
 	    gentop="$output_objdir/${outputname}x"
-	    generated="$generated $gentop"
+	    func_append generated " $gentop"
 
 	    func_extract_archives $gentop $convenience
-	    libobjs="$libobjs $func_extract_archives_result"
+	    func_append libobjs " $func_extract_archives_result"
 	    test "X$libobjs" = "X " && libobjs=
 	  fi
 	fi
 
 	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
 	  eval flag=\"$thread_safe_flag_spec\"
-	  linker_flags="$linker_flags $flag"
+	  func_append linker_flags " $flag"
 	fi
 
 	# Make a backup of the uninstalled library when relinking
-	if test "$mode" = relink; then
+	if test "$opt_mode" = relink; then
 	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
 	fi
 
@@ -7137,7 +8327,8 @@ EOF
 	    save_libobjs=$libobjs
 	  fi
 	  save_output=$output
-	  output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+	  func_basename "$output"
+	  output_la=$func_basename_result
 
 	  # Clear the reloadable object creation command queue and
 	  # initialize k to one.
@@ -7150,13 +8341,16 @@ EOF
 	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
 	    output=${output_objdir}/${output_la}.lnkscript
 	    func_verbose "creating GNU ld script: $output"
-	    $ECHO 'INPUT (' > $output
+	    echo 'INPUT (' > $output
 	    for obj in $save_libobjs
 	    do
-	      $ECHO "$obj" >> $output
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
 	    done
-	    $ECHO ')' >> $output
-	    delfiles="$delfiles $output"
+	    echo ')' >> $output
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$func_to_tool_file_result
 	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
 	    output=${output_objdir}/${output_la}.lnk
 	    func_verbose "creating linker input file list: $output"
@@ -7170,10 +8364,12 @@ EOF
 	    fi
 	    for obj
 	    do
-	      $ECHO "$obj" >> $output
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
 	    done
-	    delfiles="$delfiles $output"
-	    output=$firstobj\"$file_list_spec$output\"
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
 	  else
 	    if test -n "$save_libobjs"; then
 	      func_verbose "creating reloadable object files..."
@@ -7197,17 +8393,19 @@ EOF
 		  # command to the queue.
 		  if test "$k" -eq 1 ; then
 		    # The first file doesn't have a previous command to add.
-		    eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+		    reload_objs=$objlist
+		    eval concat_cmds=\"$reload_cmds\"
 		  else
 		    # All subsequent reloadable object files will link in
 		    # the last one created.
-		    eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+		    reload_objs="$objlist $last_robj"
+		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
 		  fi
 		  last_robj=$output_objdir/$output_la-${k}.$objext
 		  func_arith $k + 1
 		  k=$func_arith_result
 		  output=$output_objdir/$output_la-${k}.$objext
-		  objlist=$obj
+		  objlist=" $obj"
 		  func_len " $last_robj"
 		  func_arith $len0 + $func_len_result
 		  len=$func_arith_result
@@ -7217,11 +8415,12 @@ EOF
 	      # reloadable object file.  All subsequent reloadable object
 	      # files will link in the last one created.
 	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-	      eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+	      reload_objs="$objlist $last_robj"
+	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
 	      if test -n "$last_robj"; then
 	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
 	      fi
-	      delfiles="$delfiles $output"
+	      func_append delfiles " $output"
 
 	    else
 	      output=
@@ -7255,7 +8454,7 @@ EOF
 		lt_exit=$?
 
 		# Restore the uninstalled library and exit
-		if test "$mode" = relink; then
+		if test "$opt_mode" = relink; then
 		  ( cd "$output_objdir" && \
 		    $RM "${realname}T" && \
 		    $MV "${realname}U" "$realname" )
@@ -7276,7 +8475,7 @@ EOF
 	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
 	      tmp_export_symbols="$export_symbols"
 	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-	      $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
 	    fi
 
 	    if test -n "$orig_export_symbols"; then
@@ -7288,7 +8487,7 @@ EOF
 	      # global variables. join(1) would be nice here, but unfortunately
 	      # isn't a blessed tool.
 	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-	      delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
 	      export_symbols=$output_objdir/$libname.def
 	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
 	    fi
@@ -7329,10 +8528,10 @@ EOF
 	# Add any objects from preloaded convenience libraries
 	if test -n "$dlprefiles"; then
 	  gentop="$output_objdir/${outputname}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $dlprefiles
-	  libobjs="$libobjs $func_extract_archives_result"
+	  func_append libobjs " $func_extract_archives_result"
 	  test "X$libobjs" = "X " && libobjs=
 	fi
 
@@ -7348,7 +8547,7 @@ EOF
 	    lt_exit=$?
 
 	    # Restore the uninstalled library and exit
-	    if test "$mode" = relink; then
+	    if test "$opt_mode" = relink; then
 	      ( cd "$output_objdir" && \
 	        $RM "${realname}T" && \
 		$MV "${realname}U" "$realname" )
@@ -7360,7 +8559,7 @@ EOF
 	IFS="$save_ifs"
 
 	# Restore the uninstalled library and exit
-	if test "$mode" = relink; then
+	if test "$opt_mode" = relink; then
 	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
 
 	  if test -n "$convenience"; then
@@ -7441,18 +8640,21 @@ EOF
       if test -n "$convenience"; then
 	if test -n "$whole_archive_flag_spec"; then
 	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
-	  reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
 	else
 	  gentop="$output_objdir/${obj}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $convenience
 	  reload_conv_objs="$reload_objs $func_extract_archives_result"
 	fi
       fi
 
+      # If we're not building shared, we need to use non_pic_objs
+      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+
       # Create the old-style object.
-      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
 
       output="$obj"
       func_execute_cmds "$reload_cmds" 'exit $?'
@@ -7512,8 +8714,8 @@ EOF
       case $host in
       *-*-rhapsody* | *-*-darwin1.[012])
 	# On Rhapsody replace the C library is the System framework
-	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
-	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
 	;;
       esac
 
@@ -7524,14 +8726,14 @@ EOF
 	if test "$tagname" = CXX ; then
 	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
 	    10.[0123])
-	      compile_command="$compile_command ${wl}-bind_at_load"
-	      finalize_command="$finalize_command ${wl}-bind_at_load"
+	      func_append compile_command " ${wl}-bind_at_load"
+	      func_append finalize_command " ${wl}-bind_at_load"
 	    ;;
 	  esac
 	fi
 	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
-	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	;;
       esac
 
@@ -7545,7 +8747,7 @@ EOF
 	*)
 	  case " $compile_deplibs " in
 	  *" -L$path/$objdir "*)
-	    new_libs="$new_libs -L$path/$objdir" ;;
+	    func_append new_libs " -L$path/$objdir" ;;
 	  esac
 	  ;;
 	esac
@@ -7555,17 +8757,17 @@ EOF
 	-L*)
 	  case " $new_libs " in
 	  *" $deplib "*) ;;
-	  *) new_libs="$new_libs $deplib" ;;
+	  *) func_append new_libs " $deplib" ;;
 	  esac
 	  ;;
-	*) new_libs="$new_libs $deplib" ;;
+	*) func_append new_libs " $deplib" ;;
 	esac
       done
       compile_deplibs="$new_libs"
 
 
-      compile_command="$compile_command $compile_deplibs"
-      finalize_command="$finalize_command $finalize_deplibs"
+      func_append compile_command " $compile_deplibs"
+      func_append finalize_command " $finalize_deplibs"
 
       if test -n "$rpath$xrpath"; then
 	# If the user specified any rpath flags, then add them.
@@ -7573,7 +8775,7 @@ EOF
 	  # This is the magic to use -rpath.
 	  case "$finalize_rpath " in
 	  *" $libdir "*) ;;
-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  *) func_append finalize_rpath " $libdir" ;;
 	  esac
 	done
       fi
@@ -7592,18 +8794,18 @@ EOF
 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 		;;
 	      *)
-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
 		;;
 	      esac
 	    fi
 	  else
 	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    rpath="$rpath $flag"
+	    func_append rpath " $flag"
 	  fi
 	elif test -n "$runpath_var"; then
 	  case "$perm_rpath " in
 	  *" $libdir "*) ;;
-	  *) perm_rpath="$perm_rpath $libdir" ;;
+	  *) func_append perm_rpath " $libdir" ;;
 	  esac
 	fi
 	case $host in
@@ -7612,12 +8814,12 @@ EOF
 	  case :$dllsearchpath: in
 	  *":$libdir:"*) ;;
 	  ::) dllsearchpath=$libdir;;
-	  *) dllsearchpath="$dllsearchpath:$libdir";;
+	  *) func_append dllsearchpath ":$libdir";;
 	  esac
 	  case :$dllsearchpath: in
 	  *":$testbindir:"*) ;;
 	  ::) dllsearchpath=$testbindir;;
-	  *) dllsearchpath="$dllsearchpath:$testbindir";;
+	  *) func_append dllsearchpath ":$testbindir";;
 	  esac
 	  ;;
 	esac
@@ -7643,18 +8845,18 @@ EOF
 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 		;;
 	      *)
-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
 		;;
 	      esac
 	    fi
 	  else
 	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    rpath="$rpath $flag"
+	    func_append rpath " $flag"
 	  fi
 	elif test -n "$runpath_var"; then
 	  case "$finalize_perm_rpath " in
 	  *" $libdir "*) ;;
-	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+	  *) func_append finalize_perm_rpath " $libdir" ;;
 	  esac
 	fi
       done
@@ -7668,8 +8870,8 @@ EOF
 
       if test -n "$libobjs" && test "$build_old_libs" = yes; then
 	# Transform all the library objects into standard objects.
-	compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-	finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
       fi
 
       func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
@@ -7681,15 +8883,15 @@ EOF
 
       wrappers_required=yes
       case $host in
+      *cegcc* | *mingw32ce*)
+        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
       *cygwin* | *mingw* )
         if test "$build_libtool_libs" != yes; then
           wrappers_required=no
         fi
         ;;
-      *cegcc)
-        # Disable wrappers for cegcc, we are cross compiling anyway.
-        wrappers_required=no
-        ;;
       *)
         if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
           wrappers_required=no
@@ -7698,13 +8900,19 @@ EOF
       esac
       if test "$wrappers_required" = no; then
 	# Replace the output file specification.
-	compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
 	link_command="$compile_command$compile_rpath"
 
 	# We have no uninstalled library dependencies, so finalize right now.
 	exit_status=0
 	func_show_eval "$link_command" 'exit_status=$?'
 
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
 	# Delete the generated files.
 	if test -f "$output_objdir/${outputname}S.${objext}"; then
 	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
@@ -7727,7 +8935,7 @@ EOF
 	  # We should set the runpath_var.
 	  rpath=
 	  for dir in $perm_rpath; do
-	    rpath="$rpath$dir:"
+	    func_append rpath "$dir:"
 	  done
 	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
 	fi
@@ -7735,7 +8943,7 @@ EOF
 	  # We should set the runpath_var.
 	  rpath=
 	  for dir in $finalize_perm_rpath; do
-	    rpath="$rpath$dir:"
+	    func_append rpath "$dir:"
 	  done
 	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
 	fi
@@ -7745,11 +8953,18 @@ EOF
 	# We don't need to create a wrapper script.
 	link_command="$compile_var$compile_command$compile_rpath"
 	# Replace the output file specification.
-	link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
 	# Delete the old output file.
 	$opt_dry_run || $RM $output
 	# Link the executable and exit
 	func_show_eval "$link_command" 'exit $?'
+
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
 	exit $EXIT_SUCCESS
       fi
 
@@ -7764,7 +8979,7 @@ EOF
 	if test "$fast_install" != no; then
 	  link_command="$finalize_var$compile_command$finalize_rpath"
 	  if test "$fast_install" = yes; then
-	    relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
 	  else
 	    # fast_install is set to needless
 	    relink_command=
@@ -7776,13 +8991,19 @@ EOF
       fi
 
       # Replace the output file specification.
-      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
 
       # Delete the old output files.
       $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
 
       func_show_eval "$link_command" 'exit $?'
 
+      if test -n "$postlink_cmds"; then
+	func_to_tool_file "$output_objdir/$outputname"
+	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	func_execute_cmds "$postlink_cmds" 'exit $?'
+      fi
+
       # Now create the wrapper script.
       func_verbose "creating $output"
 
@@ -7800,18 +9021,7 @@ EOF
 	  fi
 	done
 	relink_command="(cd `pwd`; $relink_command)"
-	relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-      fi
-
-      # Quote $ECHO for shipping.
-      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
-	case $progpath in
-	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
-	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
-	esac
-	qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
-      else
-	qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
       fi
 
       # Only actually do things if not in dry run mode.
@@ -7891,7 +9101,7 @@ EOF
 	else
 	  oldobjs="$old_deplibs $non_pic_objects"
 	  if test "$preload" = yes && test -f "$symfileobj"; then
-	    oldobjs="$oldobjs $symfileobj"
+	    func_append oldobjs " $symfileobj"
 	  fi
 	fi
 	addlibs="$old_convenience"
@@ -7899,10 +9109,10 @@ EOF
 
       if test -n "$addlibs"; then
 	gentop="$output_objdir/${outputname}x"
-	generated="$generated $gentop"
+	func_append generated " $gentop"
 
 	func_extract_archives $gentop $addlibs
-	oldobjs="$oldobjs $func_extract_archives_result"
+	func_append oldobjs " $func_extract_archives_result"
       fi
 
       # Do each command in the archive commands.
@@ -7913,10 +9123,10 @@ EOF
 	# Add any objects from preloaded convenience libraries
 	if test -n "$dlprefiles"; then
 	  gentop="$output_objdir/${outputname}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $dlprefiles
-	  oldobjs="$oldobjs $func_extract_archives_result"
+	  func_append oldobjs " $func_extract_archives_result"
 	fi
 
 	# POSIX demands no paths to be encoded in archives.  We have
@@ -7932,9 +9142,9 @@ EOF
 	    done | sort | sort -uc >/dev/null 2>&1); then
 	  :
 	else
-	  $ECHO "copying selected object files to avoid basename conflicts..."
+	  echo "copying selected object files to avoid basename conflicts..."
 	  gentop="$output_objdir/${outputname}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 	  func_mkdir_p "$gentop"
 	  save_oldobjs=$oldobjs
 	  oldobjs=
@@ -7958,18 +9168,30 @@ EOF
 		esac
 	      done
 	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
-	      oldobjs="$oldobjs $gentop/$newobj"
+	      func_append oldobjs " $gentop/$newobj"
 	      ;;
-	    *) oldobjs="$oldobjs $obj" ;;
+	    *) func_append oldobjs " $obj" ;;
 	    esac
 	  done
 	fi
+	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+	tool_oldlib=$func_to_tool_file_result
 	eval cmds=\"$old_archive_cmds\"
 
 	func_len " $cmds"
 	len=$func_len_result
 	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
 	  cmds=$old_archive_cmds
+	elif test -n "$archiver_list_spec"; then
+	  func_verbose "using command file archive linking..."
+	  for obj in $oldobjs
+	  do
+	    func_to_tool_file "$obj"
+	    $ECHO "$func_to_tool_file_result"
+	  done > $output_objdir/$libname.libcmd
+	  func_to_tool_file "$output_objdir/$libname.libcmd"
+	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+	  cmds=$old_archive_cmds
 	else
 	  # the command line is too long to link in one step, link in parts
 	  func_verbose "using piecewise archive linking..."
@@ -8043,7 +9265,7 @@ EOF
       done
       # Quote the link command for shipping.
       relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
-      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
       if test "$hardcode_automatic" = yes ; then
 	relink_command=
       fi
@@ -8063,12 +9285,23 @@ EOF
 	      *.la)
 		func_basename "$deplib"
 		name="$func_basename_result"
-		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		func_resolve_sysroot "$deplib"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
 		test -z "$libdir" && \
 		  func_fatal_error "\`$deplib' is not a valid libtool archive"
-		newdependency_libs="$newdependency_libs $libdir/$name"
+		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      -L*)
+		func_stripname -L '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -L$func_replace_sysroot_result"
 		;;
-	      *) newdependency_libs="$newdependency_libs $deplib" ;;
+	      -R*)
+		func_stripname -R '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -R$func_replace_sysroot_result"
+		;;
+	      *) func_append newdependency_libs " $deplib" ;;
 	      esac
 	    done
 	    dependency_libs="$newdependency_libs"
@@ -8082,9 +9315,9 @@ EOF
 		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
 		test -z "$libdir" && \
 		  func_fatal_error "\`$lib' is not a valid libtool archive"
-		newdlfiles="$newdlfiles $libdir/$name"
+		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
 		;;
-	      *) newdlfiles="$newdlfiles $lib" ;;
+	      *) func_append newdlfiles " $lib" ;;
 	      esac
 	    done
 	    dlfiles="$newdlfiles"
@@ -8101,7 +9334,7 @@ EOF
 		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
 		test -z "$libdir" && \
 		  func_fatal_error "\`$lib' is not a valid libtool archive"
-		newdlprefiles="$newdlprefiles $libdir/$name"
+		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
 		;;
 	      esac
 	    done
@@ -8113,7 +9346,7 @@ EOF
 		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
 		*) abs=`pwd`"/$lib" ;;
 	      esac
-	      newdlfiles="$newdlfiles $abs"
+	      func_append newdlfiles " $abs"
 	    done
 	    dlfiles="$newdlfiles"
 	    newdlprefiles=
@@ -8122,15 +9355,33 @@ EOF
 		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
 		*) abs=`pwd`"/$lib" ;;
 	      esac
-	      newdlprefiles="$newdlprefiles $abs"
+	      func_append newdlprefiles " $abs"
 	    done
 	    dlprefiles="$newdlprefiles"
 	  fi
 	  $RM $output
 	  # place dlname in correct position for cygwin
+	  # In fact, it would be nice if we could use this code for all target
+	  # systems that can't hard-code library paths into their executables
+	  # and that have no shared library path variable independent of PATH,
+	  # but it turns out we can't easily determine that from inspecting
+	  # libtool variables, so we have to hard-code the OSs to which it
+	  # applies here; at the moment, that means platforms that use the PE
+	  # object format with DLL files.  See the long comment at the top of
+	  # tests/bindir.at for full details.
 	  tdlname=$dlname
 	  case $host,$output,$installed,$module,$dlname in
-	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+	      # If a -bindir argument was supplied, place the dll there.
+	      if test "x$bindir" != x ;
+	      then
+		func_relative_path "$install_libdir" "$bindir"
+		tdlname=$func_relative_path_result$dlname
+	      else
+		# Otherwise fall back on heuristic.
+		tdlname=../bin/$dlname
+	      fi
+	      ;;
 	  esac
 	  $ECHO > $output "\
 # $outputname - a libtool library file
@@ -8189,7 +9440,7 @@ relink_command=\"$relink_command\""
     exit $EXIT_SUCCESS
 }
 
-{ test "$mode" = link || test "$mode" = relink; } &&
+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
     func_mode_link ${1+"$@"}
 
 
@@ -8209,9 +9460,9 @@ func_mode_uninstall ()
     for arg
     do
       case $arg in
-      -f) RM="$RM $arg"; rmforce=yes ;;
-      -*) RM="$RM $arg" ;;
-      *) files="$files $arg" ;;
+      -f) func_append RM " $arg"; rmforce=yes ;;
+      -*) func_append RM " $arg" ;;
+      *) func_append files " $arg" ;;
       esac
     done
 
@@ -8220,24 +9471,23 @@ func_mode_uninstall ()
 
     rmdirs=
 
-    origobjdir="$objdir"
     for file in $files; do
       func_dirname "$file" "" "."
       dir="$func_dirname_result"
       if test "X$dir" = X.; then
-	objdir="$origobjdir"
+	odir="$objdir"
       else
-	objdir="$dir/$origobjdir"
+	odir="$dir/$objdir"
       fi
       func_basename "$file"
       name="$func_basename_result"
-      test "$mode" = uninstall && objdir="$dir"
+      test "$opt_mode" = uninstall && odir="$dir"
 
-      # Remember objdir for removal later, being careful to avoid duplicates
-      if test "$mode" = clean; then
+      # Remember odir for removal later, being careful to avoid duplicates
+      if test "$opt_mode" = clean; then
 	case " $rmdirs " in
-	  *" $objdir "*) ;;
-	  *) rmdirs="$rmdirs $objdir" ;;
+	  *" $odir "*) ;;
+	  *) func_append rmdirs " $odir" ;;
 	esac
       fi
 
@@ -8263,18 +9513,17 @@ func_mode_uninstall ()
 
 	  # Delete the libtool libraries and symlinks.
 	  for n in $library_names; do
-	    rmfiles="$rmfiles $objdir/$n"
+	    func_append rmfiles " $odir/$n"
 	  done
-	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
 
-	  case "$mode" in
+	  case "$opt_mode" in
 	  clean)
-	    case "  $library_names " in
-	    # "  " in the beginning catches empty $dlname
+	    case " $library_names " in
 	    *" $dlname "*) ;;
-	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
+	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
 	    esac
-	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
 	    ;;
 	  uninstall)
 	    if test -n "$library_names"; then
@@ -8302,19 +9551,19 @@ func_mode_uninstall ()
 	  # Add PIC object to the list of files to remove.
 	  if test -n "$pic_object" &&
 	     test "$pic_object" != none; then
-	    rmfiles="$rmfiles $dir/$pic_object"
+	    func_append rmfiles " $dir/$pic_object"
 	  fi
 
 	  # Add non-PIC object to the list of files to remove.
 	  if test -n "$non_pic_object" &&
 	     test "$non_pic_object" != none; then
-	    rmfiles="$rmfiles $dir/$non_pic_object"
+	    func_append rmfiles " $dir/$non_pic_object"
 	  fi
 	fi
 	;;
 
       *)
-	if test "$mode" = clean ; then
+	if test "$opt_mode" = clean ; then
 	  noexename=$name
 	  case $file in
 	  *.exe)
@@ -8324,7 +9573,7 @@ func_mode_uninstall ()
 	    noexename=$func_stripname_result
 	    # $file with .exe has already been added to rmfiles,
 	    # add $file without .exe
-	    rmfiles="$rmfiles $file"
+	    func_append rmfiles " $file"
 	    ;;
 	  esac
 	  # Do a test to see if this is a libtool program.
@@ -8333,7 +9582,7 @@ func_mode_uninstall ()
 	      func_ltwrapper_scriptname "$file"
 	      relink_command=
 	      func_source $func_ltwrapper_scriptname_result
-	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+	      func_append rmfiles " $func_ltwrapper_scriptname_result"
 	    else
 	      relink_command=
 	      func_source $dir/$noexename
@@ -8341,12 +9590,12 @@ func_mode_uninstall ()
 
 	    # note $name still contains .exe if it was in $file originally
 	    # as does the version of $file that was added into $rmfiles
-	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
 	    if test "$fast_install" = yes && test -n "$relink_command"; then
-	      rmfiles="$rmfiles $objdir/lt-$name"
+	      func_append rmfiles " $odir/lt-$name"
 	    fi
 	    if test "X$noexename" != "X$name" ; then
-	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+	      func_append rmfiles " $odir/lt-${noexename}.c"
 	    fi
 	  fi
 	fi
@@ -8354,7 +9603,6 @@ func_mode_uninstall ()
       esac
       func_show_eval "$RM $rmfiles" 'exit_status=1'
     done
-    objdir="$origobjdir"
 
     # Try to remove the ${objdir}s in the directories where we deleted files
     for dir in $rmdirs; do
@@ -8366,16 +9614,16 @@ func_mode_uninstall ()
     exit $exit_status
 }
 
-{ test "$mode" = uninstall || test "$mode" = clean; } &&
+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
     func_mode_uninstall ${1+"$@"}
 
-test -z "$mode" && {
+test -z "$opt_mode" && {
   help="$generic_help"
   func_fatal_help "you must specify a MODE"
 }
 
 test -z "$exec_cmd" && \
-  func_fatal_help "invalid operation mode \`$mode'"
+  func_fatal_help "invalid operation mode \`$opt_mode'"
 
 if test -n "$exec_cmd"; then
   eval exec "$exec_cmd"
diff --git a/m4/Makefile.in b/m4/Makefile.in
index 55940fb..0da0560 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -76,6 +76,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -94,6 +95,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -110,6 +112,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -174,6 +177,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -209,7 +213,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -320,10 +323,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index a3fee53..828104c 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -1,7 +1,8 @@
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 # This file is free software; the Free Software Foundation gives
@@ -10,7 +11,8 @@
 
 m4_define([_LT_COPYING], [dnl
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -37,7 +39,7 @@ m4_define([_LT_COPYING], [dnl
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 ])
 
-# serial 56 LT_INIT
+# serial 57 LT_INIT
 
 
 # LT_PREREQ(VERSION)
@@ -66,6 +68,7 @@ esac
 # ------------------
 AC_DEFUN([LT_INIT],
 [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
 AC_BEFORE([$0], [LT_LANG])dnl
 AC_BEFORE([$0], [LT_OUTPUT])dnl
 AC_BEFORE([$0], [LTDL_INIT])dnl
@@ -82,6 +85,8 @@ AC_REQUIRE([LTVERSION_VERSION])dnl
 AC_REQUIRE([LTOBSOLETE_VERSION])dnl
 m4_require([_LT_PROG_LTMAIN])dnl
 
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
 dnl Parse OPTIONS
 _LT_SET_OPTIONS([$0], [$1])
 
@@ -118,7 +123,7 @@ m4_defun([_LT_CC_BASENAME],
     *) break;;
   esac
 done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 ])
 
 
@@ -138,6 +143,11 @@ m4_defun([_LT_FILEUTILS_DEFAULTS],
 m4_defun([_LT_SETUP],
 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
 AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
 _LT_DECL([], [host_alias], [0], [The host system])dnl
 _LT_DECL([], [host], [0])dnl
 _LT_DECL([], [host_os], [0])dnl
@@ -160,10 +170,13 @@ _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
 dnl
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
 m4_require([_LT_CMD_RELOAD])dnl
 m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
 m4_require([_LT_CMD_OLD_ARCHIVE])dnl
 m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
 
 _LT_CONFIG_LIBTOOL_INIT([
 # See if we are running on zsh, and set the options which allow our
@@ -179,7 +192,6 @@ fi
 _LT_CHECK_OBJDIR
 
 m4_require([_LT_TAG_COMPILER])dnl
-_LT_PROG_ECHO_BACKSLASH
 
 case $host_os in
 aix3*)
@@ -193,23 +205,6 @@ aix3*)
   ;;
 esac
 
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
 # Global variables:
 ofile=libtool
 can_build_shared=yes
@@ -250,6 +245,28 @@ _LT_CONFIG_COMMANDS
 ])# _LT_SETUP
 
 
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
 # _LT_PROG_LTMAIN
 # ---------------
 # Note that this code is called both from `configure', and `config.status'
@@ -408,7 +425,7 @@ m4_define([_lt_decl_all_varnames],
 # declaration there will have the same value as in `configure'.  VARNAME
 # must have a single quote delimited value for this to work.
 m4_define([_LT_CONFIG_STATUS_DECLARE],
-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
 
 
 # _LT_CONFIG_STATUS_DECLARATIONS
@@ -418,7 +435,7 @@ m4_define([_LT_CONFIG_STATUS_DECLARE],
 # embedded single quotes properly.  In configure, this macro expands
 # each variable declared with _LT_DECL (and _LT_TAGDECL) into:
 #
-#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+#    <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
 m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
 [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
     [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
@@ -517,12 +534,20 @@ LTCC='$LTCC'
 LTCFLAGS='$LTCFLAGS'
 compiler='$compiler_DEFAULT'
 
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
 # Quote evaled strings.
 for var in lt_decl_all_varnames([[ \
 ]], lt_decl_quote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -533,9 +558,9 @@ done
 # Double-quote double-evaled strings.
 for var in lt_decl_all_varnames([[ \
 ]], lt_decl_dquote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -543,16 +568,38 @@ for var in lt_decl_all_varnames([[ \
     esac
 done
 
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\[$]0 --fallback-echo"')dnl "
-  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
-  ;;
-esac
-
 _LT_OUTPUT_LIBTOOL_INIT
 ])
 
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable.  If COMMENT is supplied, it is inserted after the
+# `#!' sequence but before initialization text begins.  After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script.  The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test $lt_write_fail = 0 && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
 
 # LT_OUTPUT
 # ---------
@@ -562,20 +609,11 @@ _LT_OUTPUT_LIBTOOL_INIT
 AC_DEFUN([LT_OUTPUT],
 [: ${CONFIG_LT=./config.lt}
 AC_MSG_NOTICE([creating $CONFIG_LT])
-cat >"$CONFIG_LT" <<_LTEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate a libtool stub with the current configuration.
-
-lt_cl_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_LTEOF
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
 
 cat >>"$CONFIG_LT" <<\_LTEOF
-AS_SHELL_SANITIZE
-_AS_PREPARE
-
-exec AS_MESSAGE_FD>&1
+lt_cl_silent=false
 exec AS_MESSAGE_LOG_FD>>config.log
 {
   echo
@@ -601,7 +639,7 @@ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
 m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
 configured by $[0], generated by m4_PACKAGE_STRING.
 
-Copyright (C) 2008 Free Software Foundation, Inc.
+Copyright (C) 2011 Free Software Foundation, Inc.
 This config.lt script is free software; the Free Software Foundation
 gives unlimited permision to copy, distribute and modify it."
 
@@ -646,15 +684,13 @@ chmod +x "$CONFIG_LT"
 # appending to config.log, which fails on DOS, as config.log is still kept
 # open by configure.  Here we exec the FD to /dev/null, effectively closing
 # config.log, so it can be properly (re)opened and appended to by config.lt.
-if test "$no_create" != yes; then
-  lt_cl_success=:
-  test "$silent" = yes &&
-    lt_config_lt_args="$lt_config_lt_args --quiet"
-  exec AS_MESSAGE_LOG_FD>/dev/null
-  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
-  exec AS_MESSAGE_LOG_FD>>config.log
-  $lt_cl_success || AS_EXIT(1)
-fi
+lt_cl_success=:
+test "$silent" = yes &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
 ])# LT_OUTPUT
 
 
@@ -717,15 +753,12 @@ _LT_EOF
   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
   # text mode, it properly converts lines to CR/LF.  This bash problem
   # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  _LT_PROG_XSI_SHELLFNS
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
 
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
+  _LT_PROG_REPLACE_SHELLFNS
 
-  mv -f "$cfgfile" "$ofile" ||
+   mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
 ],
@@ -770,6 +803,7 @@ AC_DEFUN([LT_LANG],
 m4_case([$1],
   [C],			[_LT_LANG(C)],
   [C++],		[_LT_LANG(CXX)],
+  [Go],			[_LT_LANG(GO)],
   [Java],		[_LT_LANG(GCJ)],
   [Fortran 77],		[_LT_LANG(F77)],
   [Fortran],		[_LT_LANG(FC)],
@@ -791,6 +825,31 @@ m4_defun([_LT_LANG],
 ])# _LT_LANG
 
 
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_GO.  When it is available in    #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC],     [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+  fi
+fi
+if test -z "$GOC"; then
+  AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
 # _LT_LANG_DEFAULT_CONFIG
 # -----------------------
 m4_defun([_LT_LANG_DEFAULT_CONFIG],
@@ -821,6 +880,10 @@ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
        m4_ifdef([LT_PROG_GCJ],
 	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
 
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+  [LT_LANG(GO)],
+  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
 AC_PROVIDE_IFELSE([LT_PROG_RC],
   [LT_LANG(RC)],
   [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
@@ -831,11 +894,13 @@ AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
 AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
 AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
 AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
 dnl aclocal-1.4 backwards compatibility:
 dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
 dnl AC_DEFUN([AC_LIBTOOL_F77], [])
 dnl AC_DEFUN([AC_LIBTOOL_FC], [])
 dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
 
 
 # _LT_TAG_COMPILER
@@ -921,7 +986,13 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
 	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
         _lt_result=$?
-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
 	  lt_cv_apple_cc_single_mod=yes
 	else
 	  cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -929,6 +1000,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 	rm -rf libconftest.dylib*
 	rm -f conftest.*
       fi])
+
     AC_CACHE_CHECK([for -exported_symbols_list linker flag],
       [lt_cv_ld_exported_symbols_list],
       [lt_cv_ld_exported_symbols_list=no
@@ -940,6 +1012,34 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 	[lt_cv_ld_exported_symbols_list=no])
 	LDFLAGS="$save_LDFLAGS"
     ])
+
+    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+      [lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+    ])
     case $host_os in
     rhapsody* | darwin1.[[012]])
       _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
@@ -967,7 +1067,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
     else
       _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
     fi
-    if test "$DSYMUTIL" != ":"; then
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
@@ -977,8 +1077,8 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 ])
 
 
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
 # Checks for linker and compiler features on darwin
 m4_defun([_LT_DARWIN_LINKER_FEATURES],
 [
@@ -987,7 +1087,13 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   _LT_TAGVAR(hardcode_direct, $1)=no
   _LT_TAGVAR(hardcode_automatic, $1)=yes
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+  else
+    _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  fi
   _LT_TAGVAR(link_all_deplibs, $1)=yes
   _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
   case $cc_basename in
@@ -995,7 +1101,7 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
      *) _lt_dar_can_shared=$GCC ;;
   esac
   if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
+    output_verbose_link_cmd=func_echo_all
     _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
     _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
@@ -1011,203 +1117,142 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   fi
 ])
 
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
 # Links a minimal program and checks the executable
 # for the system default hardcoded library path. In most cases,
 # this is /usr/lib:/lib, but when the MPI compilers are used
 # the location of the communication and MPI libs are included too.
 # If we don't find anything, use the default library path according
 # to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
 m4_defun([_LT_SYS_MODULE_PATH_AIX],
 [m4_require([_LT_DECL_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+  lt_aix_libpath_sed='[
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }]'
+  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi],[])
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+  fi
+  ])
+  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
 ])# _LT_SYS_MODULE_PATH_AIX
 
 
 # _LT_SHELL_INIT(ARG)
 # -------------------
 m4_define([_LT_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
-	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-	 [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_SHELL_INIT
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
 
 
 # _LT_PROG_ECHO_BACKSLASH
 # -----------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script which will find a shell with a builtin
+# printf (which we can use as an echo command).
 m4_defun([_LT_PROG_ECHO_BACKSLASH],
-[_LT_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X[$]1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
 else
-  # Restart under the correct shell.
-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-[$]*
-_LT_EOF
-  exit 0
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
 fi
 
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-	   test "X$echo_testing_string" = "X$echo_test_string"; then
-	  # Cool, printf works
-	  :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-	  export CONFIG_SHELL
-	  SHELL="$CONFIG_SHELL"
-	  export SHELL
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        else
-	  # maybe with a smaller string...
-	  prev=:
-
-	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-	    then
-	      break
-	    fi
-	    prev="$cmd"
-	  done
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*" 
+}
 
-	  if test "$prev" != 'sed 50q "[$]0"'; then
-	    echo_test_string=`eval $prev`
-	    export echo_test_string
-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
-	  else
-	    # Oops.  We lost completely, so just stick with echo.
-	    ECHO=echo
-	  fi
-        fi
-      fi
-    fi
-  fi
-fi
+case "$ECHO" in
+  printf*) AC_MSG_RESULT([printf]) ;;
+  print*) AC_MSG_RESULT([print -r]) ;;
+  *) AC_MSG_RESULT([cat]) ;;
+esac
 
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+  test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test "X`printf %s $ECHO`" = "X$ECHO" \
+      || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
 
-AC_SUBST(lt_ECHO)
-])
 _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
-_LT_DECL([], [ECHO], [1],
-    [An echo program that does not interpret backslashes])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
 ])# _LT_PROG_ECHO_BACKSLASH
 
 
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[  --with-sysroot[=DIR] Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted.  We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   AC_MSG_RESULT([${with_sysroot}])
+   AC_MSG_ERROR([The sysroot must be an absolute path.])
+   ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and in which our libraries should be installed.])])
+
 # _LT_ENABLE_LOCK
 # ---------------
 m4_defun([_LT_ENABLE_LOCK],
@@ -1236,7 +1281,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     if test "$lt_cv_prog_gnu_ld" = yes; then
       case `/usr/bin/file conftest.$ac_objext` in
@@ -1329,14 +1374,27 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
     CFLAGS="$SAVE_CFLAGS"
   fi
   ;;
-sparc*-*solaris*)
+*-*solaris*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
       *)
 	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
 	  LD="${LD-ld} -64"
@@ -1354,14 +1412,47 @@ need_locks="$enable_libtool_lock"
 ])# _LT_ENABLE_LOCK
 
 
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+  [lt_cv_ar_at_file=no
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+     [echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([lt_ar_try])
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	AC_TRY_EVAL([lt_ar_try])
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     ])
+  ])
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+  [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
 # _LT_CMD_OLD_ARCHIVE
 # -------------------
 m4_defun([_LT_CMD_OLD_ARCHIVE],
-[AC_CHECK_TOOL(AR, ar, false)
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1])
+[_LT_PROG_AR
 
 AC_CHECK_TOOL(STRIP, strip, :)
 test -z "$STRIP" && STRIP=:
@@ -1380,18 +1471,27 @@ old_postuninstall_cmds=
 if test -n "$RANLIB"; then
   case $host_os in
   openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
     ;;
   esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
 fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
 _LT_DECL([], [old_postinstall_cmds], [2])
 _LT_DECL([], [old_postuninstall_cmds], [2])
 _LT_TAGDECL([], [old_archive_cmds], [2],
     [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+    [Whether to use a lock for old archive extraction])
 ])# _LT_CMD_OLD_ARCHIVE
 
 
@@ -1416,15 +1516,15 @@ AC_CACHE_CHECK([$1], [$2],
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        $2=yes
@@ -1464,7 +1564,7 @@ AC_CACHE_CHECK([$1], [$2],
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&AS_MESSAGE_LOG_FD
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          $2=yes
@@ -1527,6 +1627,11 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
   amigaos*)
     # On AmigaOS with pdksh, this test takes hours, literally.
     # So we just punt and use a minimum line length of 8192.
@@ -1552,6 +1657,11 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     lt_cv_sys_max_cmd_len=196608
     ;;
 
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
   osf*)
     # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
     # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
@@ -1591,8 +1701,8 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
 	      test $i != 17 # 1/2 MB should be enough
       do
         i=`expr $i + 1`
@@ -1643,7 +1753,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-[#line __oline__ "configure"
+[#line $LINENO "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -1684,7 +1794,13 @@ else
 #  endif
 #endif
 
-void fnord() { int i=42;}
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -1693,7 +1809,11 @@ int main ()
   if (self)
     {
       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
       /* dlclose (self); */
     }
   else
@@ -1869,16 +1989,16 @@ AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
@@ -2037,6 +2157,7 @@ m4_require([_LT_DECL_EGREP])dnl
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_OBJDUMP])dnl
 m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
 AC_MSG_CHECKING([dynamic linker characteristics])
 m4_if([$1],
 	[], [
@@ -2045,16 +2166,23 @@ if test "$GCC" = yes; then
     darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
     *) lt_awk_arg="/^libraries:/" ;;
   esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
     # if the path contains ";" then we assume it to be the separator
     # otherwise default to the standard path separator (i.e. ":") - it is
     # assumed that no part of a normal pathname contains ";" but that should
     # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
   # Ok, now we have the path, separated by spaces, we can step through it
   # and add multilib dir if necessary.
   lt_tmp_lt_search_path_spec=
@@ -2067,7 +2195,7 @@ if test "$GCC" = yes; then
 	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
 BEGIN {RS=" "; FS="/|\n";} {
   lt_foo="";
   lt_count=0;
@@ -2087,7 +2215,13 @@ BEGIN {RS=" "; FS="/|\n";} {
   if (lt_foo != "") { lt_freq[[lt_foo]]++; }
   if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
 }'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
   sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
 fi])
@@ -2113,7 +2247,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -2122,7 +2256,7 @@ aix3*)
   ;;
 
 aix[[4-9]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -2175,7 +2309,7 @@ amigaos*)
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
@@ -2187,7 +2321,7 @@ beos*)
   ;;
 
 bsdi[[45]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -2206,8 +2340,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
@@ -2228,36 +2363,83 @@ cygwin* | mingw* | pw32* | cegcc*)
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+m4_if([$1], [],[
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
       soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
       ;;
     esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
     ;;
 
   *)
+    # Assume MSVC wrapper
     library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
     ;;
   esac
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -2278,7 +2460,7 @@ m4_if([$1], [],[
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -2286,10 +2468,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -2297,7 +2475,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[[123]]*) objformat=aout ;;
+    freebsd[[23]].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -2315,7 +2493,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[[01]]* | freebsdelf3.[[01]]*)
@@ -2335,12 +2513,26 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
 
@@ -2386,12 +2578,14 @@ hpux9* | hpux10* | hpux11*)
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
   postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
   ;;
 
 interix[[3-9]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -2407,7 +2601,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
 	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
+		version_type=linux # correct to gnu/linux during the next big refactor
 	else
 		version_type=irix
 	fi ;;
@@ -2444,9 +2638,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2454,16 +2648,21 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
+
   # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
-       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
-       [shlibpath_overrides_runpath=yes])])
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
+  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+    [lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+	 LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+	 [lt_cv_shlibpath_overrides_runpath=yes])])
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    ])
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
@@ -2472,7 +2671,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
 
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
     sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
   fi
 
@@ -2516,7 +2715,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -2585,7 +2784,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2610,7 +2809,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -2634,7 +2833,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -2665,7 +2864,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2675,7 +2874,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -2717,6 +2916,8 @@ _LT_DECL([], [library_names_spec], [1],
     The last name is the one that the linker finds with -lNAME]])
 _LT_DECL([], [soname_spec], [1],
     [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+    [Permission mode override for installation of shared libraries])
 _LT_DECL([], [postinstall_cmds], [2],
     [Command to use after installation of a shared archive])
 _LT_DECL([], [postuninstall_cmds], [2],
@@ -2829,6 +3030,7 @@ AC_REQUIRE([AC_CANONICAL_HOST])dnl
 AC_REQUIRE([AC_CANONICAL_BUILD])dnl
 m4_require([_LT_DECL_SED])dnl
 m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
 
 AC_ARG_WITH([gnu-ld],
     [AS_HELP_STRING([--with-gnu-ld],
@@ -2950,6 +3152,11 @@ case $reload_flag in
 esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
   darwin*)
     if test "$GCC" = yes; then
       reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
@@ -2958,8 +3165,8 @@ case $host_os in
     fi
     ;;
 esac
-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
-_LT_DECL([], [reload_cmds], [2])dnl
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
 ])# _LT_CMD_RELOAD
 
 
@@ -3011,16 +3218,18 @@ mingw* | pw32*)
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
     lt_cv_file_magic_cmd='$OBJDUMP -f'
   fi
   ;;
 
-cegcc)
+cegcc*)
   # use the weaker test based on 'objdump'. See mingw*.
   lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
   lt_cv_file_magic_cmd='$OBJDUMP -f'
@@ -3050,6 +3259,10 @@ gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
 hpux10.20* | hpux11*)
   lt_cv_file_magic_cmd=/usr/bin/file
   case $host_cpu in
@@ -3058,11 +3271,11 @@ hpux10.20* | hpux11*)
     lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
     ;;
   hppa*64*)
-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
     lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
     ;;
   *)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
     lt_cv_file_magic_test_file=/usr/lib/libc.sl
     ;;
   esac
@@ -3083,7 +3296,7 @@ irix5* | irix6* | nonstopux*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -3162,6 +3375,21 @@ tpf*)
   ;;
 esac
 ])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
 file_magic_cmd=$lt_cv_file_magic_cmd
 deplibs_check_method=$lt_cv_deplibs_check_method
 test -z "$deplibs_check_method" && deplibs_check_method=unknown
@@ -3169,7 +3397,11 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
 _LT_DECL([], [deplibs_check_method], [1],
     [Method to check whether dependent libraries are shared objects])
 _LT_DECL([], [file_magic_cmd], [1],
-    [Command to use when deplibs_check_method == "file_magic"])
+    [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+    [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+    [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
 ])# _LT_CHECK_MAGIC_METHOD
 
 
@@ -3226,8 +3458,20 @@ if test "$lt_cv_path_NM" != "no"; then
   NM="$lt_cv_path_NM"
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
-  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
-  AC_SUBST([DUMPBIN])
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+  AC_SUBST([DUMPBIN])
   if test "$DUMPBIN" != ":"; then
     NM="$DUMPBIN"
   fi
@@ -3239,13 +3483,13 @@ _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
 AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
   [lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
   cat conftest.out >&AS_MESSAGE_LOG_FD
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -3260,6 +3504,67 @@ dnl aclocal-1.4 backwards compatibility:
 dnl AC_DEFUN([AM_PROG_NM], [])
 dnl AC_DEFUN([AC_PROG_NM], [])
 
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+    [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+  [lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*])
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
 
 # LT_LIB_M
 # --------
@@ -3268,7 +3573,7 @@ AC_DEFUN([LT_LIB_M],
 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
 LIBM=
 case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
   # These system don't have libm, or don't need it
   ;;
 *-ncr-sysv4.3*)
@@ -3296,7 +3601,12 @@ m4_defun([_LT_COMPILER_NO_RTTI],
 _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
 
 if test "$GCC" = yes; then
-  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+  case $cc_basename in
+  nvcc*)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+  esac
 
   _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
     lt_cv_prog_compiler_rtti_exceptions,
@@ -3313,6 +3623,7 @@ _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
 m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
 AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
 AC_REQUIRE([LT_PATH_NM])dnl
 AC_REQUIRE([LT_PATH_LD])dnl
 m4_require([_LT_DECL_SED])dnl
@@ -3380,8 +3691,8 @@ esac
 lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -3405,6 +3716,7 @@ for ac_symprfx in "" "_"; do
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK ['"\
 "     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
@@ -3417,6 +3729,7 @@ for ac_symprfx in "" "_"; do
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
   fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
 
   # Check to see that the pipe works correctly.
   pipe_works=no
@@ -3438,7 +3751,7 @@ _LT_EOF
   if AC_TRY_EVAL(ac_compile); then
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
       # Try sorting and uniquifying the output.
       if sort "$nlist" | uniq > "$nlist"T; then
 	mv -f "$nlist"T "$nlist"
@@ -3450,6 +3763,18 @@ _LT_EOF
       if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
 	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
 	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT@&t at _DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT@&t at _DLSYM_CONST
+#else
+# define LT@&t at _DLSYM_CONST const
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -3461,7 +3786,7 @@ _LT_EOF
 	  cat <<_LT_EOF >> conftest.$ac_ext
 
 /* The mapping between symbol names and symbols.  */
-const struct {
+LT@&t at _DLSYM_CONST struct {
   const char *name;
   void       *address;
 }
@@ -3487,15 +3812,15 @@ static const void *lt_preloaded_setup() {
 _LT_EOF
 	  # Now try linking the two files.
 	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
 	  LIBS="conftstm.$ac_objext"
 	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
 	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
 	    pipe_works=yes
 	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_save_CFLAGS"
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
 	else
 	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
 	fi
@@ -3528,6 +3853,13 @@ else
   AC_MSG_RESULT(ok)
 fi
 
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
 _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
     [Take the output of nm and produce a listing of raw symbols and C names])
 _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
@@ -3538,6 +3870,8 @@ _LT_DECL([global_symbol_to_c_name_address],
 _LT_DECL([global_symbol_to_c_name_address_lib_prefix],
     [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
     [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([], [nm_file_list_spec], [1],
+    [Specify filename containing input files for $NM])
 ]) # _LT_CMD_GLOBAL_SYMBOLS
 
 
@@ -3549,7 +3883,6 @@ _LT_TAGVAR(lt_prog_compiler_wl, $1)=
 _LT_TAGVAR(lt_prog_compiler_pic, $1)=
 _LT_TAGVAR(lt_prog_compiler_static, $1)=
 
-AC_MSG_CHECKING([for $compiler option to produce PIC])
 m4_if([$1], [CXX], [
   # C++ specific cases for pic, static, wl, etc.
   if test "$GXX" = yes; then
@@ -3600,6 +3933,11 @@ m4_if([$1], [CXX], [
       # DJGPP does not support shared libraries at all
       _LT_TAGVAR(lt_prog_compiler_pic, $1)=
       ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
     interix[[3-9]]*)
       # Interix 3.x gcc -fpic/-fPIC options generate broken code.
       # Instead, we relocate shared libraries at runtime.
@@ -3649,6 +3987,12 @@ m4_if([$1], [CXX], [
 	  ;;
 	esac
 	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	m4_if([$1], [GCJ], [],
+	  [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+	;;
       dgux*)
 	case $cc_basename in
 	  ec++*)
@@ -3738,8 +4082,8 @@ m4_if([$1], [CXX], [
 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
 	    ;;
-	  xlc* | xlC*)
-	    # IBM XL 8.0 on PPC
+	  xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
 	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
@@ -3801,7 +4145,7 @@ m4_if([$1], [CXX], [
 	;;
       solaris*)
 	case $cc_basename in
-	  CC*)
+	  CC* | sunCC*)
 	    # Sun C++ 4.2, 5.x and Centerline C++
 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
@@ -3905,6 +4249,12 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
       ;;
 
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+
     hpux*)
       # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
       # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
@@ -3947,6 +4297,15 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
       ;;
     esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+      if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+      fi
+      ;;
+    esac
   else
     # PORTME Check for flag to pass linker flags through the system compiler.
     case $host_os in
@@ -4010,7 +4369,13 @@ m4_if([$1], [CXX], [
 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
 	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
 	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
+      nagfor*)
+	# NAG Fortran compiler
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
 	# which looks to be a dead project)
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
@@ -4022,25 +4387,40 @@ m4_if([$1], [CXX], [
         # All Alpha code is PIC.
         _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
         ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
 	;;
       *)
 	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	  ;;
 	*Sun\ C*)
 	  # Sun C 5.9
 	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+        *Intel*\ [[CF]]*Compiler*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	  ;;
+	*Portland\ Group*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
 	  ;;
 	esac
 	;;
@@ -4072,7 +4452,7 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       case $cc_basename in
-      f77* | f90* | f95*)
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
       *)
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
@@ -4129,9 +4509,11 @@ case $host_os in
     _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
     ;;
 esac
-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-	[How to pass a linker flag through the compiler])
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
 
 #
 # Check to make sure the PIC flag actually works.
@@ -4150,6 +4532,8 @@ fi
 _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
 	[Additional compiler flags for building library objects])
 
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+	[How to pass a linker flag through the compiler])
 #
 # Check to make sure the static flag actually works.
 #
@@ -4170,6 +4554,7 @@ _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
 m4_defun([_LT_LINKER_SHLIBS],
 [AC_REQUIRE([LT_PATH_LD])dnl
 AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_EGREP])dnl
 m4_require([_LT_DECL_SED])dnl
@@ -4178,30 +4563,40 @@ m4_require([_LT_TAG_COMPILER])dnl
 AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
 m4_if([$1], [CXX], [
   _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
   case $host_os in
   aix[[4-9]]*)
     # If we're using GNU nm, then we don't want the "-C" option.
     # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
     if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     else
       _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     fi
     ;;
   pw32*)
     _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
+    ;;
   cygwin* | mingw* | cegcc*)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux* | k*bsd*-gnu)
+    case $cc_basename in
+    cl*)
+      _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+      ;;
+    esac
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
     _LT_TAGVAR(link_all_deplibs, $1)=no
-  ;;
+    ;;
   *)
     _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
+    ;;
   esac
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
 ], [
   runpath_var=
   _LT_TAGVAR(allow_undefined_flag, $1)=
@@ -4216,7 +4611,6 @@ m4_if([$1], [CXX], [
   _LT_TAGVAR(hardcode_direct, $1)=no
   _LT_TAGVAR(hardcode_direct_absolute, $1)=no
   _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
   _LT_TAGVAR(hardcode_libdir_separator, $1)=
   _LT_TAGVAR(hardcode_minus_L, $1)=no
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
@@ -4261,13 +4655,39 @@ dnl Note also adjust exclude_expsyms for C++ above.
   openbsd*)
     with_gnu_ld=no
     ;;
-  linux* | k*bsd*-gnu)
+  linux* | k*bsd*-gnu | gnu*)
     _LT_TAGVAR(link_all_deplibs, $1)=no
     ;;
   esac
 
   _LT_TAGVAR(ld_shlibs, $1)=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
   if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+	  *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
     wlarc='${wl}'
 
@@ -4301,11 +4721,12 @@ dnl Note also adjust exclude_expsyms for C++ above.
 	_LT_TAGVAR(ld_shlibs, $1)=no
 	cat <<_LT_EOF 1>&2
 
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** Warning: the GNU linker, at least up to release 2.19, is reported
 *** to be unable to reliably create shared libraries on AIX.
 *** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
 
 _LT_EOF
       fi
@@ -4341,10 +4762,12 @@ _LT_EOF
       # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
       # as there is no search path for DLLs.
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
       _LT_TAGVAR(always_export_symbols, $1)=no
       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
@@ -4362,6 +4785,11 @@ _LT_EOF
       fi
       ;;
 
+    haiku*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
     interix[[3-9]]*)
       _LT_TAGVAR(hardcode_direct, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
@@ -4387,15 +4815,16 @@ _LT_EOF
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
 	 && test "$tmp_diet" = no
       then
-	tmp_addflag=
+	tmp_addflag=' $pic_flag'
 	tmp_sharedflag='-shared'
 	case $cc_basename,$host_cpu in
         pgcc*)				# Portland Group C compiler
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag'
 	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag -Mnomain' ;;
 	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
 	  tmp_addflag=' -i_dynamic' ;;
@@ -4406,13 +4835,17 @@ _LT_EOF
 	lf95*)				# Lahey Fortran 8.1
 	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
 	  tmp_sharedflag='--shared' ;;
-	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+	xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
 	  tmp_sharedflag='-qmkshrobj'
 	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  ;;
 	esac
 	case `$CC -V 2>&1 | sed 5q` in
 	*Sun\ C*)			# Sun C 5.9
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  _LT_TAGVAR(compiler_needs_object, $1)=yes
 	  tmp_sharedflag='-G' ;;
 	*Sun\ F*)			# Sun Fortran 8.3
@@ -4428,17 +4861,16 @@ _LT_EOF
         fi
 
 	case $cc_basename in
-	xlf*)
+	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
 	  if test "x$supports_anon_versioning" = xyes; then
 	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
 	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
 	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
 	  fi
 	  ;;
 	esac
@@ -4452,8 +4884,8 @@ _LT_EOF
 	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 	wlarc=
       else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
@@ -4471,8 +4903,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	_LT_TAGVAR(ld_shlibs, $1)=no
       fi
@@ -4518,8 +4950,8 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	_LT_TAGVAR(ld_shlibs, $1)=no
       fi
@@ -4559,8 +4991,10 @@ _LT_EOF
       else
 	# If we're using GNU nm, then we don't want the "-C" option.
 	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
 	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	else
 	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	fi
@@ -4648,9 +5082,9 @@ _LT_EOF
 	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
+        _LT_SYS_MODULE_PATH_AIX([$1])
         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
       else
 	if test "$host_cpu" = ia64; then
 	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
@@ -4659,14 +5093,19 @@ _LT_EOF
 	else
 	 # Determine the default libpath from the value encoded in an
 	 # empty executable.
-	 _LT_SYS_MODULE_PATH_AIX
+	 _LT_SYS_MODULE_PATH_AIX([$1])
 	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 	  # Warning - without using the other run time loading flags,
 	  # -berok will link without error, but may produce a broken library.
 	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
 	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  fi
 	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
 	  # This is similar to how AIX traditionally builds its shared libraries.
 	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
@@ -4698,20 +5137,64 @@ _LT_EOF
       # Microsoft Visual C++.
       # hardcode_libdir_flag_spec is actually meaningless, as there is
       # no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-      # FIXME: Should let the user specify the lib program.
-      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	_LT_TAGVAR(always_export_symbols, $1)=yes
+	_LT_TAGVAR(file_list_spec, $1)='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	_LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	# FIXME: Should let the user specify the lib program.
+	_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	;;
+      esac
       ;;
 
     darwin* | rhapsody*)
@@ -4724,10 +5207,6 @@ _LT_EOF
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       ;;
 
-    freebsd1*)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
     # support.  Future versions do this automatically, but an explicit c++rt0.o
     # does not break anything, and helps significantly (at the cost of a little
@@ -4740,7 +5219,7 @@ _LT_EOF
       ;;
 
     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
+    freebsd2.*)
       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
       _LT_TAGVAR(hardcode_direct, $1)=yes
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
@@ -4749,7 +5228,7 @@ _LT_EOF
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
     freebsd* | dragonfly*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
       _LT_TAGVAR(hardcode_direct, $1)=yes
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
@@ -4757,7 +5236,7 @@ _LT_EOF
 
     hpux9*)
       if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       else
 	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       fi
@@ -4772,14 +5251,13 @@ _LT_EOF
       ;;
 
     hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
       else
 	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
       if test "$with_gnu_ld" = no; then
 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
 	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
 	_LT_TAGVAR(hardcode_direct, $1)=yes
 	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
@@ -4791,16 +5269,16 @@ _LT_EOF
       ;;
 
     hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
 	case $host_cpu in
 	hppa*64*)
 	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	esac
       else
@@ -4812,7 +5290,14 @@ _LT_EOF
 	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	m4_if($1, [], [
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  _LT_LINKER_OPTION([if $CC understands -b],
+	    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+	    [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+	    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+	  [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
 	  ;;
 	esac
       fi
@@ -4840,19 +5325,34 @@ _LT_EOF
 
     irix5* | irix6* | nonstopux*)
       if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	# Try to use the -exported_symbol ld option, if it does not
 	# work, assume that -exports_file does not work either and
 	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        AC_LINK_IFELSE(int foo(void) {},
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-        )
-        LDFLAGS="$save_LDFLAGS"
+	# This should be the same for all languages, so no per-tag cache variable.
+	AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+	  [lt_cv_irix_exported_symbol],
+	  [save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   AC_LINK_IFELSE(
+	     [AC_LANG_SOURCE(
+	        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+			      [C++], [[int foo (void) { return 0; }]],
+			      [Fortran 77], [[
+      subroutine foo
+      end]],
+			      [Fortran], [[
+      subroutine foo
+      end]])])],
+	      [lt_cv_irix_exported_symbol=yes],
+	      [lt_cv_irix_exported_symbol=no])
+           LDFLAGS="$save_LDFLAGS"])
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
       else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
       fi
       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
@@ -4914,17 +5414,17 @@ _LT_EOF
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
       _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
       ;;
 
     osf3*)
       if test "$GCC" = yes; then
 	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
       else
 	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
       fi
       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
@@ -4934,13 +5434,13 @@ _LT_EOF
     osf4* | osf5*)	# as osf3* with the addition of -msym flag
       if test "$GCC" = yes; then
 	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
       else
 	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
 
 	# Both c and cxx compiler support -rpath directly
 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
@@ -4953,9 +5453,9 @@ _LT_EOF
       _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
       if test "$GCC" = yes; then
 	wlarc='${wl}'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
       else
 	case `$CC -V 2>&1` in
 	*"Compilers 5.0"*)
@@ -5131,36 +5631,38 @@ x|xyes)
       # Test whether the compiler implicitly links with -lc since on some
       # systems, -lgcc has to come before -lc. If gcc already passes -lc
       # to ld, don't add -lc before -lgcc.
-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
-	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
-        _LT_TAGVAR(allow_undefined_flag, $1)=
-        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
-        then
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        else
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-        fi
-        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+      AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+	[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+	[$RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+	  pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+	  _LT_TAGVAR(allow_undefined_flag, $1)=
+	  if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+	  then
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	  else
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  fi
+	  _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+	])
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
       ;;
     esac
   fi
@@ -5197,9 +5699,6 @@ _LT_TAGDECL([], [no_undefined_flag], [1],
 _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
     [Flag to hardcode $libdir into a binary during linking.
     This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
-    [[If ld is used when linking, flag to hardcode $libdir into a binary
-    during linking.  This must work even if $libdir does not exist]])
 _LT_TAGDECL([], [hardcode_libdir_separator], [1],
     [Whether we need a single "-rpath" flag with a separated argument])
 _LT_TAGDECL([], [hardcode_direct], [0],
@@ -5225,8 +5724,6 @@ _LT_TAGDECL([], [inherit_rpath], [0],
     to runtime path list])
 _LT_TAGDECL([], [link_all_deplibs], [0],
     [Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [fix_srcfile_path], [1],
-    [Fix the shell variable $srcfile for the compiler])
 _LT_TAGDECL([], [always_export_symbols], [0],
     [Set to "yes" if exported symbols are required])
 _LT_TAGDECL([], [export_symbols_cmds], [2],
@@ -5237,6 +5734,8 @@ _LT_TAGDECL([], [include_expsyms], [1],
     [Symbols that must always be exported])
 _LT_TAGDECL([], [prelink_cmds], [2],
     [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+    [Commands necessary for finishing linking programs])
 _LT_TAGDECL([], [file_list_spec], [1],
     [Specify filename containing input files])
 dnl FIXME: Not yet implemented
@@ -5330,37 +5829,22 @@ CC="$lt_save_CC"
 ])# _LT_LANG_C_CONFIG
 
 
-# _LT_PROG_CXX
-# ------------
-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
-# compiler, we have our own version here.
-m4_defun([_LT_PROG_CXX],
-[
-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
-AC_PROG_CXX
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  AC_PROG_CXXCPP
-else
-  _lt_caught_CXX_error=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_CXX
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_CXX], [])
-
-
 # _LT_LANG_CXX_CONFIG([TAG])
 # --------------------------
 # Ensure that the configuration variables for a C++ compiler are suitably
 # defined.  These variables are subsequently used by _LT_CONFIG to write
 # the compiler configuration to `libtool'.
 m4_defun([_LT_LANG_CXX_CONFIG],
-[AC_REQUIRE([_LT_PROG_CXX])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
 
 AC_LANG_PUSH(C++)
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
@@ -5372,7 +5856,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
@@ -5382,6 +5865,8 @@ _LT_TAGVAR(module_cmds, $1)=
 _LT_TAGVAR(module_expsym_cmds, $1)=
 _LT_TAGVAR(link_all_deplibs, $1)=unknown
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 _LT_TAGVAR(no_undefined_flag, $1)=
 _LT_TAGVAR(whole_archive_flag_spec, $1)=
 _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
@@ -5413,6 +5898,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 
   # Allow CC to be a program name with arguments.
   lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
   lt_save_LD=$LD
   lt_save_GCC=$GCC
   GCC=$GXX
@@ -5430,6 +5916,7 @@ if test "$_lt_caught_CXX_error" != yes; then
   fi
   test -z "${LDCXX+set}" || LD=$LDCXX
   CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
   compiler=$CC
   _LT_TAGVAR(compiler, $1)=$CC
   _LT_CC_BASENAME([$compiler])
@@ -5451,8 +5938,8 @@ if test "$_lt_caught_CXX_error" != yes; then
       # Check if GNU C++ uses GNU ld as the underlying linker, since the
       # archiving commands below assume that GNU ld is being used.
       if test "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 
         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
@@ -5484,7 +5971,7 @@ if test "$_lt_caught_CXX_error" != yes; then
       # Commands to make compiler produce verbose output that lists
       # what "hidden" libraries, object files and flags are used when
       # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
     else
       GXX=no
@@ -5593,10 +6080,10 @@ if test "$_lt_caught_CXX_error" != yes; then
           _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
-          _LT_SYS_MODULE_PATH_AIX
+          _LT_SYS_MODULE_PATH_AIX([$1])
           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
         else
           if test "$host_cpu" = ia64; then
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
@@ -5605,14 +6092,19 @@ if test "$_lt_caught_CXX_error" != yes; then
           else
 	    # Determine the default libpath from the value encoded in an
 	    # empty executable.
-	    _LT_SYS_MODULE_PATH_AIX
+	    _LT_SYS_MODULE_PATH_AIX([$1])
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 	    # Warning - without using the other run time loading flags,
 	    # -berok will link without error, but may produce a broken library.
 	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
 	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	    # Exported symbols can be pulled into shared objects from archives
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    fi
 	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
 	    # This is similar to how AIX traditionally builds its shared
 	    # libraries.
@@ -5642,28 +6134,75 @@ if test "$_lt_caught_CXX_error" != yes; then
         ;;
 
       cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-        # as there is no search path for DLLs.
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-        _LT_TAGVAR(always_export_symbols, $1)=no
-        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    cp $export_symbols $output_objdir/$soname.def;
-          else
-	    echo EXPORTS > $output_objdir/$soname.def;
-	    cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          _LT_TAGVAR(ld_shlibs, $1)=no
-        fi
-        ;;
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=yes
+	  _LT_TAGVAR(file_list_spec, $1)='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=".dll"
+	  # FIXME: Setting linknames here is a bad hack.
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	    else
+	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	    fi~
+	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	    linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	  # Don't use ranlib
+	  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	    lt_tool_outputfile="@TOOL_OUTPUT@"~
+	    case $lt_outputfile in
+	      *.exe|*.EXE) ;;
+	      *)
+		lt_outputfile="$lt_outputfile.exe"
+		lt_tool_outputfile="$lt_tool_outputfile.exe"
+		;;
+	    esac~
+	    func_to_tool_file "$lt_outputfile"~
+	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	      $RM "$lt_outputfile.manifest";
+	    fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=no
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file (1st line
+	    # is EXPORTS), use it as is; otherwise, prepend...
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      cp $export_symbols $output_objdir/$soname.def;
+	    else
+	      echo EXPORTS > $output_objdir/$soname.def;
+	      cat $export_symbols >> $output_objdir/$soname.def;
+	    fi~
+	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	  ;;
+	esac
+	;;
       darwin* | rhapsody*)
         _LT_DARWIN_LINKER_FEATURES($1)
 	;;
@@ -5686,7 +6225,7 @@ if test "$_lt_caught_CXX_error" != yes; then
         esac
         ;;
 
-      freebsd[[12]]*)
+      freebsd2.*)
         # C++ shared libraries reported to be fairly broken before
 	# switch to ELF
         _LT_TAGVAR(ld_shlibs, $1)=no
@@ -5705,6 +6244,11 @@ if test "$_lt_caught_CXX_error" != yes; then
       gnu*)
         ;;
 
+      haiku*)
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        ;;
+
       hpux9*)
         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
@@ -5729,11 +6273,11 @@ if test "$_lt_caught_CXX_error" != yes; then
             # explicitly linking system object files so we need to strip them
             # from the output so that they don't get included in the library
             # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
             ;;
           *)
             if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
             else
               # FIXME: insert proper C++ library support
               _LT_TAGVAR(ld_shlibs, $1)=no
@@ -5794,7 +6338,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
           *)
 	    if test "$GXX" = yes; then
@@ -5804,10 +6348,10 @@ if test "$_lt_caught_CXX_error" != yes; then
 	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          ia64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          *)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	        esac
 	      fi
@@ -5837,7 +6381,7 @@ if test "$_lt_caught_CXX_error" != yes; then
         case $cc_basename in
           CC*)
 	    # SGI C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
@@ -5848,9 +6392,9 @@ if test "$_lt_caught_CXX_error" != yes; then
           *)
 	    if test "$GXX" = yes; then
 	      if test "$with_gnu_ld" = no; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	      else
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
 	      fi
 	    fi
 	    _LT_TAGVAR(link_all_deplibs, $1)=yes
@@ -5879,7 +6423,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
@@ -5916,26 +6460,26 @@ if test "$_lt_caught_CXX_error" != yes; then
           pgCC* | pgcpp*)
             # Portland Group C++ compiler
 	    case `$CC -V` in
-	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+	    *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
 	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
 	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
 		$RANLIB $oldlib'
 	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 	      ;;
-	    *) # Version 6 will use weak symbols
+	    *) # Version 6 and above use weak symbols
 	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 	      ;;
@@ -5943,7 +6487,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
             ;;
 	  cxx*)
 	    # Compaq C++
@@ -5962,9 +6506,9 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
 	    ;;
-	  xl*)
+	  xl* | mpixl* | bgxl*)
 	    # IBM XL 8.0 on PPC, with GNU ld
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
@@ -5984,13 +6528,13 @@ if test "$_lt_caught_CXX_error" != yes; then
 	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
 	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	      _LT_TAGVAR(compiler_needs_object, $1)=yes
 
 	      # Not sure whether something based on
 	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
 	      # would be better.
-	      output_verbose_link_cmd='echo'
+	      output_verbose_link_cmd='func_echo_all'
 
 	      # Archives containing C++ object files must be created using
 	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -6059,7 +6603,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
 	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
 	  fi
-	  output_verbose_link_cmd=echo
+	  output_verbose_link_cmd=func_echo_all
 	else
 	  _LT_TAGVAR(ld_shlibs, $1)=no
 	fi
@@ -6094,15 +6638,15 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    case $host in
 	      osf3*)
 	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 		;;
 	      *)
 	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
 	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
 	          $RM $lib.exp'
 	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
 		;;
@@ -6118,17 +6662,17 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
 	  *)
 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
 	      case $host in
 	        osf3*)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 		  ;;
 	        *)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 		  ;;
 	      esac
 
@@ -6138,7 +6682,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	      # Commands to make compiler produce verbose output that lists
 	      # what "hidden" libraries, object files and flags are used when
 	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
 	    else
 	      # FIXME: insert proper C++ library support
@@ -6174,7 +6718,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 
       solaris*)
         case $cc_basename in
-          CC*)
+          CC* | sunCC*)
 	    # Sun C++ 4.2, 5.x and Centerline C++
             _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
 	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
@@ -6195,7 +6739,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    esac
 	    _LT_TAGVAR(link_all_deplibs, $1)=yes
 
-	    output_verbose_link_cmd='echo'
+	    output_verbose_link_cmd='func_echo_all'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -6215,14 +6759,14 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
 	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
 	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      else
 	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
 	        # platform.
@@ -6233,7 +6777,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      fi
 
 	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
@@ -6287,6 +6831,10 @@ if test "$_lt_caught_CXX_error" != yes; then
           CC*)
 	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+	      '"$_LT_TAGVAR(old_archive_cmds, $1)"
+	    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+	      '"$_LT_TAGVAR(reload_cmds, $1)"
 	    ;;
 	  *)
 	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
@@ -6342,6 +6890,7 @@ if test "$_lt_caught_CXX_error" != yes; then
   fi # test -n "$compiler"
 
   CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
   LDCXX=$LD
   LD=$lt_save_LD
   GCC=$lt_save_GCC
@@ -6356,6 +6905,29 @@ AC_LANG_POP
 ])# _LT_LANG_CXX_CONFIG
 
 
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
 # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
 # ---------------------------------
 # Figure out "hidden" library dependencies from verbose
@@ -6364,6 +6936,7 @@ AC_LANG_POP
 # objects, libraries and library flags.
 m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
 [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
 # Dependencies to place before and after the object being linked:
 _LT_TAGVAR(predep_objects, $1)=
 _LT_TAGVAR(postdep_objects, $1)=
@@ -6413,7 +6986,20 @@ public class foo {
   }
 };
 _LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
 ])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
 dnl Parse the compiler output and extract the necessary
 dnl objects, libraries and library flags.
 if AC_TRY_EVAL(ac_compile); then
@@ -6425,7 +7011,7 @@ if AC_TRY_EVAL(ac_compile); then
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
+    case ${prev}${p} in
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
@@ -6434,13 +7020,22 @@ if AC_TRY_EVAL(ac_compile); then
           test $p = "-R"; then
 	 prev=$p
 	 continue
-       else
-	 prev=
        fi
 
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
        if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
+	 case ${prev} in
+	 -L | -R)
 	   # Internal compiler library paths should come after those
 	   # provided the user.  The postdeps already come after the
 	   # user supplied libs so there is no need to process them.
@@ -6460,8 +7055,10 @@ if AC_TRY_EVAL(ac_compile); then
 	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
 	 fi
        fi
+       prev=
        ;;
 
+    *.lto.$objext) ;; # Ignore GCC LTO objects
     *.$objext)
        # This assumes that the test object file only shows up
        # once in the compiler output.
@@ -6497,6 +7094,7 @@ else
 fi
 
 $RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
 
 # PORTME: override above test on systems where it is broken
 m4_if([$1], [CXX],
@@ -6533,7 +7131,7 @@ linux*)
 
 solaris*)
   case $cc_basename in
-  CC*)
+  CC* | sunCC*)
     # The more standards-conforming stlport4 library is
     # incompatible with the Cstd library. Avoid specifying
     # it if it's in CXXFLAGS. Ignore libCrun as
@@ -6577,32 +7175,16 @@ _LT_TAGDECL([], [compiler_lib_search_path], [1],
 ])# _LT_SYS_HIDDEN_LIBDEPS
 
 
-# _LT_PROG_F77
-# ------------
-# Since AC_PROG_F77 is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_F77],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
-AC_PROG_F77
-if test -z "$F77" || test "X$F77" = "Xno"; then
-  _lt_disable_F77=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_F77
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_F77], [])
-
-
 # _LT_LANG_F77_CONFIG([TAG])
 # --------------------------
 # Ensure that the configuration variables for a Fortran 77 compiler are
 # suitably defined.  These variables are subsequently used by _LT_CONFIG
 # to write the compiler configuration to `libtool'.
 m4_defun([_LT_LANG_F77_CONFIG],
-[AC_REQUIRE([_LT_PROG_F77])dnl
-AC_LANG_PUSH(Fortran 77)
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
 
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
 _LT_TAGVAR(allow_undefined_flag, $1)=
@@ -6612,7 +7194,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_automatic, $1)=no
@@ -6621,6 +7202,8 @@ _LT_TAGVAR(module_cmds, $1)=
 _LT_TAGVAR(module_expsym_cmds, $1)=
 _LT_TAGVAR(link_all_deplibs, $1)=unknown
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 _LT_TAGVAR(no_undefined_flag, $1)=
 _LT_TAGVAR(whole_archive_flag_spec, $1)=
 _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
@@ -6660,7 +7243,9 @@ if test "$_lt_disable_F77" != yes; then
   # Allow CC to be a program name with arguments.
   lt_save_CC="$CC"
   lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
   CC=${F77-"f77"}
+  CFLAGS=$FFLAGS
   compiler=$CC
   _LT_TAGVAR(compiler, $1)=$CC
   _LT_CC_BASENAME([$compiler])
@@ -6714,38 +7299,24 @@ if test "$_lt_disable_F77" != yes; then
 
   GCC=$lt_save_GCC
   CC="$lt_save_CC"
+  CFLAGS="$lt_save_CFLAGS"
 fi # test "$_lt_disable_F77" != yes
 
 AC_LANG_POP
 ])# _LT_LANG_F77_CONFIG
 
 
-# _LT_PROG_FC
-# -----------
-# Since AC_PROG_FC is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_FC],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
-AC_PROG_FC
-if test -z "$FC" || test "X$FC" = "Xno"; then
-  _lt_disable_FC=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_FC
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_FC], [])
-
-
 # _LT_LANG_FC_CONFIG([TAG])
 # -------------------------
 # Ensure that the configuration variables for a Fortran compiler are
 # suitably defined.  These variables are subsequently used by _LT_CONFIG
 # to write the compiler configuration to `libtool'.
 m4_defun([_LT_LANG_FC_CONFIG],
-[AC_REQUIRE([_LT_PROG_FC])dnl
-AC_LANG_PUSH(Fortran)
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
 
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
 _LT_TAGVAR(allow_undefined_flag, $1)=
@@ -6755,7 +7326,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_automatic, $1)=no
@@ -6764,6 +7334,8 @@ _LT_TAGVAR(module_cmds, $1)=
 _LT_TAGVAR(module_expsym_cmds, $1)=
 _LT_TAGVAR(link_all_deplibs, $1)=unknown
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 _LT_TAGVAR(no_undefined_flag, $1)=
 _LT_TAGVAR(whole_archive_flag_spec, $1)=
 _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
@@ -6803,7 +7375,9 @@ if test "$_lt_disable_FC" != yes; then
   # Allow CC to be a program name with arguments.
   lt_save_CC="$CC"
   lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
   CC=${FC-"f95"}
+  CFLAGS=$FCFLAGS
   compiler=$CC
   GCC=$ac_cv_fc_compiler_gnu
 
@@ -6859,7 +7433,8 @@ if test "$_lt_disable_FC" != yes; then
   fi # test -n "$compiler"
 
   GCC=$lt_save_GCC
-  CC="$lt_save_CC"
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
 fi # test "$_lt_disable_FC" != yes
 
 AC_LANG_POP
@@ -6896,10 +7471,12 @@ _LT_COMPILER_BOILERPLATE
 _LT_LINKER_BOILERPLATE
 
 # Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
 lt_save_GCC=$GCC
 GCC=yes
 CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
 _LT_TAGVAR(LD, $1)="$LD"
@@ -6909,6 +7486,8 @@ _LT_CC_BASENAME([$compiler])
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
 
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 
 ## CAVEAT EMPTOR:
 ## There is no encapsulation within the following macros, do not change
@@ -6928,10 +7507,82 @@ fi
 AC_LANG_RESTORE
 
 GCC=$lt_save_GCC
-CC="$lt_save_CC"
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
 ])# _LT_LANG_GCJ_CONFIG
 
 
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
 # _LT_LANG_RC_CONFIG([TAG])
 # -------------------------
 # Ensure that the configuration variables for the Windows resource compiler
@@ -6963,9 +7614,11 @@ _LT_LINKER_BOILERPLATE
 
 # Allow CC to be a program name with arguments.
 lt_save_CC="$CC"
+lt_save_CFLAGS=$CFLAGS
 lt_save_GCC=$GCC
 GCC=
 CC=${RC-"windres"}
+CFLAGS=
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
 _LT_CC_BASENAME([$compiler])
@@ -6978,7 +7631,8 @@ fi
 
 GCC=$lt_save_GCC
 AC_LANG_RESTORE
-CC="$lt_save_CC"
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
 ])# _LT_LANG_RC_CONFIG
 
 
@@ -6998,6 +7652,13 @@ dnl aclocal-1.4 backwards compatibility:
 dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
 
 
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
 # LT_PROG_RC
 # ----------
 AC_DEFUN([LT_PROG_RC],
@@ -7037,6 +7698,15 @@ _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
 AC_SUBST([OBJDUMP])
 ])
 
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
 
 # _LT_DECL_SED
 # ------------
@@ -7130,8 +7800,8 @@ m4_defun([_LT_CHECK_SHELL_FEATURES],
 # Try some XSI features
 xsi_shell=no
 ( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
     && eval 'test $(( 1 + 1 )) -eq 2 \
     && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
   && xsi_shell=yes
@@ -7170,208 +7840,162 @@ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
 ])# _LT_CHECK_SHELL_FEATURES
 
 
-# _LT_PROG_XSI_SHELLFNS
-# ---------------------
-# Bourne and XSI compatible variants of some useful shell functions.
-m4_defun([_LT_PROG_XSI_SHELLFNS],
-[case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
+# ------------------------------------------------------
+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
+m4_defun([_LT_PROG_FUNCTION_REPLACE],
+[dnl {
+sed -e '/^$1 ()$/,/^} # $1 /c\
+$1 ()\
+{\
+m4_bpatsubsts([$2], [$], [\\], [^\([	 ]\)], [\\\1])
+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+])
 
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $[*] ))
-}
 
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
+# _LT_PROG_REPLACE_SHELLFNS
+# -------------------------
+# Replace existing portable implementations of several shell functions with
+# equivalent extended shell implementations where those features are available..
+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
+[if test x"$xsi_shell" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac
+    func_basename_result="${1##*/}"])
 
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
+  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary parameter first.
+    func_stripname_result=${3}
+    func_stripname_result=${func_stripname_result#"${1}"}
+    func_stripname_result=${func_stripname_result%"${2}"}])
 
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
+  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+    func_split_long_opt_name=${1%%=*}
+    func_split_long_opt_arg=${1#*=}])
 
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
+    func_split_short_opt_arg=${1#??}
+    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
 
-dnl func_dirname_and_basename
-dnl A portable version of this function is already defined in general.m4sh
-dnl so there is no need for it here.
+  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+    case ${1} in
+      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+      *)    func_lo2o_result=${1} ;;
+    esac])
 
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
+  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
 
-# sed scripts:
-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[[^=]]*=//'
+  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
 
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
+fi
 
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$[@]"`
-}
+if test x"$lt_shell_append" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
 
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
+    func_quote_for_eval "${2}"
+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
+    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
 
-_LT_EOF
-esac
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
 
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
+if test x"$_lt_function_replace_fail" = x":"; then
+  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
 
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]+=\$[2]"
-}
-_LT_EOF
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine which file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
     ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]=\$$[1]\$[2]"
-}
-
-_LT_EOF
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
     ;;
-  esac
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+         [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
 ])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+         [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
index 34151a3..5d9acd8 100644
--- a/m4/ltoptions.m4
+++ b/m4/ltoptions.m4
@@ -1,13 +1,14 @@
 # Helper functions for option handling.                    -*- Autoconf -*-
 #
-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
+#   Inc.
 #   Written by Gary V. Vaughan, 2004
 #
 # This file is free software; the Free Software Foundation gives
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# serial 6 ltoptions.m4
+# serial 7 ltoptions.m4
 
 # This is to help aclocal find these macros, as it can't see m4_define.
 AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
@@ -125,7 +126,7 @@ LT_OPTION_DEFINE([LT_INIT], [win32-dll],
 [enable_win32_dll=yes
 
 case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
   AC_CHECK_TOOL(AS, as, false)
   AC_CHECK_TOOL(DLLTOOL, dlltool, false)
   AC_CHECK_TOOL(OBJDUMP, objdump, false)
@@ -133,13 +134,13 @@ case $host in
 esac
 
 test -z "$AS" && AS=as
-_LT_DECL([], [AS],      [0], [Assembler program])dnl
+_LT_DECL([], [AS],      [1], [Assembler program])dnl
 
 test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
 
 test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
 ])# win32-dll
 
 AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
@@ -325,9 +326,24 @@ dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
 # MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
 m4_define([_LT_WITH_PIC],
 [AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic],
+    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
 	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
+    [lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
     [pic_mode=default])
 
 test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
index f3c5309..07a8602 100644
--- a/m4/ltversion.m4
+++ b/m4/ltversion.m4
@@ -7,17 +7,17 @@
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# Generated from ltversion.in.
+# @configure_input@
 
-# serial 3017 ltversion.m4
+# serial 3337 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
-m4_define([LT_PACKAGE_REVISION], [1.3017])
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6b'
-macro_revision='1.3017'
+[macro_version='2.4.2'
+macro_revision='1.3337'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
index 637bb20..c573da9 100644
--- a/m4/lt~obsolete.m4
+++ b/m4/lt~obsolete.m4
@@ -1,13 +1,13 @@
 # lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
 #
-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
 #   Written by Scott James Remnant, 2004.
 #
 # This file is free software; the Free Software Foundation gives
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# serial 4 lt~obsolete.m4
+# serial 5 lt~obsolete.m4
 
 # These exist entirely to fool aclocal when bootstrapping libtool.
 #
@@ -77,7 +77,6 @@ m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
 m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
 m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
 m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
 m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
 m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
 m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
@@ -90,3 +89,10 @@ m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
 m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
 m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
 m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],	[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP],		[AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],	[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77],		[AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC],		[AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX],		[AC_DEFUN([_LT_PROG_CXX])])
diff --git a/m4/scilab.m4 b/m4/scilab.m4
index 9178c2a..b644695 100644
--- a/m4/scilab.m4
+++ b/m4/scilab.m4
@@ -60,7 +60,7 @@ AC_DEFUN([AC_CHECK_SCILAB],
     else
       AC_CHECK_PROG([has_scilab],[scilab],[yes],[no], , )
       if test x$has_scilab = xno; then
-        AC_MSG_ERROR([[Scilab binary program was found in your PATH], your PATH is $PATH])
+        AC_MSG_ERROR([[Scilab binary program was not found in your PATH], your PATH is $PATH])
       fi
       SCILAB_EXE="scilab"
       AC_DEFINE(HAVE_SCILAB)
diff --git a/missing b/missing
index 28055d2..86a8fc3 100755
--- a/missing
+++ b/missing
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2012-01-06.13; # UTC
 
 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
-# 2008, 2009 Free Software Foundation, Inc.
+# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 # Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -84,7 +84,6 @@ Supported PROGRAM values:
   help2man     touch the output file
   lex          create \`lex.yy.c', if possible, from existing .c
   makeinfo     touch the output file
-  tar          try tar, gnutar, gtar, then tar without non-portable flags
   yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
 
 Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
@@ -122,15 +121,6 @@ case $1 in
     # Not GNU programs, they don't have --version.
     ;;
 
-  tar*)
-    if test -n "$run"; then
-       echo 1>&2 "ERROR: \`tar' requires --run"
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       exit 1
-    fi
-    ;;
-
   *)
     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
        # We have it, but it failed.
@@ -226,7 +216,7 @@ WARNING: \`$1' $msg.  You should only need it if
          \`Bison' from any GNU archive site."
     rm -f y.tab.c y.tab.h
     if test $# -ne 1; then
-        eval LASTARG="\${$#}"
+        eval LASTARG=\${$#}
 	case $LASTARG in
 	*.y)
 	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
@@ -256,7 +246,7 @@ WARNING: \`$1' is $msg.  You should only need it if
          \`Flex' from any GNU archive site."
     rm -f lex.yy.c
     if test $# -ne 1; then
-        eval LASTARG="\${$#}"
+        eval LASTARG=\${$#}
 	case $LASTARG in
 	*.l)
 	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
@@ -318,41 +308,6 @@ WARNING: \`$1' is $msg.  You should only need it if
     touch $file
     ;;
 
-  tar*)
-    shift
-
-    # We have already tried tar in the generic part.
-    # Look for gnutar/gtar before invocation to avoid ugly error
-    # messages.
-    if (gnutar --version > /dev/null 2>&1); then
-       gnutar "$@" && exit 0
-    fi
-    if (gtar --version > /dev/null 2>&1); then
-       gtar "$@" && exit 0
-    fi
-    firstarg="$1"
-    if shift; then
-	case $firstarg in
-	*o*)
-	    firstarg=`echo "$firstarg" | sed s/o//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-	case $firstarg in
-	*h*)
-	    firstarg=`echo "$firstarg" | sed s/h//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-    fi
-
-    echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
-         You may want to install GNU tar or Free paxutils, or check the
-         command line arguments."
-    exit 1
-    ;;
-
   *)
     echo 1>&2 "\
 WARNING: \`$1' is needed, and is $msg.
diff --git a/py-compile b/py-compile
deleted file mode 100755
index 3f9d05b..0000000
--- a/py-compile
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/bin/sh
-# py-compile - Compile a Python program
-
-scriptversion=2009-04-28.21; # UTC
-
-# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2008, 2009 Free Software
-# Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <bug-automake at gnu.org> or send patches to
-# <automake-patches at gnu.org>.
-
-if [ -z "$PYTHON" ]; then
-  PYTHON=python
-fi
-
-basedir=
-destdir=
-files=
-while test $# -ne 0; do
-  case "$1" in
-    --basedir)
-      basedir=$2
-      if test -z "$basedir"; then
-        echo "$0: Missing argument to --basedir." 1>&2
-        exit 1
-      fi
-      shift
-      ;;
-    --destdir)
-      destdir=$2
-      if test -z "$destdir"; then
-        echo "$0: Missing argument to --destdir." 1>&2
-        exit 1
-      fi
-      shift
-      ;;
-    -h|--h*)
-      cat <<\EOF
-Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..."
-
-Byte compile some python scripts FILES.  Use --destdir to specify any
-leading directory path to the FILES that you don't want to include in the
-byte compiled file.  Specify --basedir for any additional path information you
-do want to be shown in the byte compiled file.
-
-Example:
-  py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py
-
-Report bugs to <bug-automake at gnu.org>.
-EOF
-      exit $?
-      ;;
-    -v|--v*)
-      echo "py-compile $scriptversion"
-      exit $?
-      ;;
-    *)
-      files="$files $1"
-      ;;
-  esac
-  shift
-done
-
-if test -z "$files"; then
-    echo "$0: No files given.  Try \`$0 --help' for more information." 1>&2
-    exit 1
-fi
-
-# if basedir was given, then it should be prepended to filenames before
-# byte compilation.
-if [ -z "$basedir" ]; then
-    pathtrans="path = file"
-else
-    pathtrans="path = os.path.join('$basedir', file)"
-fi
-
-# if destdir was given, then it needs to be prepended to the filename to
-# byte compile but not go into the compiled file.
-if [ -z "$destdir" ]; then
-    filetrans="filepath = path"
-else
-    filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)"
-fi
-
-$PYTHON -c "
-import sys, os, py_compile
-
-files = '''$files'''
-
-sys.stdout.write('Byte-compiling python modules...\n')
-for file in files.split():
-    $pathtrans
-    $filetrans
-    if not os.path.exists(filepath) or not (len(filepath) >= 3
-                                            and filepath[-3:] == '.py'):
-	    continue
-    sys.stdout.write(file)
-    sys.stdout.flush()
-    py_compile.compile(filepath, filepath + 'c', path)
-sys.stdout.write('\n')" || exit $?
-
-# this will fail for python < 1.5, but that doesn't matter ...
-$PYTHON -O -c "
-import sys, os, py_compile
-
-files = '''$files'''
-sys.stdout.write('Byte-compiling python modules (optimized versions) ...\n')
-for file in files.split():
-    $pathtrans
-    $filetrans
-    if not os.path.exists(filepath) or not (len(filepath) >= 3
-                                            and filepath[-3:] == '.py'):
-	    continue
-    sys.stdout.write(file)
-    sys.stdout.flush()
-    py_compile.compile(filepath, filepath + 'o', path)
-sys.stdout.write('\n')" 2>/dev/null || :
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/src/Makefile.am b/src/Makefile.am
index 7e3fed4..480eb0f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -34,7 +34,6 @@ nobase_include_HEADERS =                   		\
 	gmm/gmm_solver_bicgstab.h          		\
 	gmm/gmm_solver_Schwarz_additive.h  		\
 	gmm/gmm_solver_bfgs.h              		\
-	gmm/gmm_solver_Newton.h		   		\
 	gmm/gmm_domain_decomp.h            		\
 	gmm/gmm_superlu_interface.h        		\
 	gmm/gmm_precond.h                  		\
@@ -101,6 +100,7 @@ nobase_include_HEADERS =                   		\
 	getfem/getfem_derivatives.h        		\
 	getfem/getfem_fem.h                		\
 	getfem/getfem_interpolated_fem.h   		\
+	getfem/getfem_projected_fem.h   		\
 	getfem/getfem_mesh_fem_global_function.h	\
 	getfem/getfem_mesh_fem_sum.h            	\
 	getfem/getfem_gauss_lobatto_fem_coef.h  	\
@@ -131,12 +131,16 @@ nobase_include_HEADERS =                   		\
 	getfem/getfem_models.h                  	\
 	getfem/getfem_model_solvers.h             	\
 	getfem/getfem_linearized_plates.h         	\
+	getfem/getfem_contact_and_friction_common.h	\
+	getfem/getfem_contact_and_friction_nodal.h	\
+	getfem/getfem_contact_and_friction_integral.h	\
 	getfem/getfem_Coulomb_friction.h          	\
 	getfem/getfem_nonlinear_elasticity.h      	\
 	getfem/getfem_fourth_order.h              	\
 	getfem/getfem_Navier_Stokes.h             	\
 	getfem/getfem_superlu.h		   		\
 	getfem/getfem_plasticity.h                	\
+	getfem/getfem_continuation.h                    \
 	getfem/getfem_mesher.h                          \
 	getfem/getfem_convect.h                    	
 
@@ -170,6 +174,7 @@ SRC =                                      		\
 	getfem_integration_composite.cc    		\
 	getfem_fem.cc                      		\
 	getfem_interpolated_fem.cc         		\
+	getfem_projected_fem.cc         		\
 	getfem_mesh_fem_global_function.cc 		\
 	getfem_Xfem.cc                     		\
 	getfem_fem_composite.cc            		\
@@ -197,8 +202,10 @@ SRC =                                      		\
 	getfem_model_solvers.cc                		\
 	getfem_fourth_order.cc                		\
 	getfem_nonlinear_elasticity.cc                  \
-	getfem_Coulomb_friction.cc			\
-	getfem_plasticity.cc
+	getfem_contact_and_friction_nodal.cc		\
+	getfem_contact_and_friction_integral.cc	\
+	getfem_plasticity.cc				
+#	getfem_enumeration_dof_para.cc
 
 lib_LTLIBRARIES = libgetfem.la
 libgetfem_la_SOURCES = $(SRC)
diff --git a/src/Makefile.in b/src/Makefile.in
index 1b64d9d..feb1e32 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -73,6 +73,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 libgetfem_la_DEPENDENCIES =
@@ -87,8 +93,9 @@ am__objects_1 = dal_backtrace.lo dal_bit_vector.lo dal_singleton.lo \
 	getfem_mesh.lo getfem_mesh_region.lo getfem_context.lo \
 	getfem_mesh_fem.lo getfem_mesh_im.lo getfem_integration.lo \
 	getfem_integration_composite.lo getfem_fem.lo \
-	getfem_interpolated_fem.lo getfem_mesh_fem_global_function.lo \
-	getfem_Xfem.lo getfem_fem_composite.lo getfem_mat_elem.lo \
+	getfem_interpolated_fem.lo getfem_projected_fem.lo \
+	getfem_mesh_fem_global_function.lo getfem_Xfem.lo \
+	getfem_fem_composite.lo getfem_mat_elem.lo \
 	getfem_mat_elem_type.lo getfem_inter_element.lo \
 	getfem_level_set.lo getfem_mesh_level_set.lo \
 	getfem_mesh_im_level_set.lo getfem_mesh_fem_level_set.lo \
@@ -100,7 +107,8 @@ am__objects_1 = dal_backtrace.lo dal_bit_vector.lo dal_singleton.lo \
 	getfem_assembling_tensors.lo getfem_mesher.lo \
 	getfem_modeling.lo getfem_models.lo getfem_model_solvers.lo \
 	getfem_fourth_order.lo getfem_nonlinear_elasticity.lo \
-	getfem_Coulomb_friction.lo getfem_plasticity.lo
+	getfem_contact_and_friction_nodal.lo \
+	getfem_contact_and_friction_integral.lo getfem_plasticity.lo
 am_libgetfem_la_OBJECTS = $(am__objects_1)
 libgetfem_la_OBJECTS = $(am_libgetfem_la_OBJECTS)
 libgetfem_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
@@ -149,6 +157,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -167,6 +176,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -183,6 +193,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -247,6 +258,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -282,7 +294,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -338,7 +349,6 @@ nobase_include_HEADERS = \
 	gmm/gmm_solver_bicgstab.h          		\
 	gmm/gmm_solver_Schwarz_additive.h  		\
 	gmm/gmm_solver_bfgs.h              		\
-	gmm/gmm_solver_Newton.h		   		\
 	gmm/gmm_domain_decomp.h            		\
 	gmm/gmm_superlu_interface.h        		\
 	gmm/gmm_precond.h                  		\
@@ -405,6 +415,7 @@ nobase_include_HEADERS = \
 	getfem/getfem_derivatives.h        		\
 	getfem/getfem_fem.h                		\
 	getfem/getfem_interpolated_fem.h   		\
+	getfem/getfem_projected_fem.h   		\
 	getfem/getfem_mesh_fem_global_function.h	\
 	getfem/getfem_mesh_fem_sum.h            	\
 	getfem/getfem_gauss_lobatto_fem_coef.h  	\
@@ -435,12 +446,16 @@ nobase_include_HEADERS = \
 	getfem/getfem_models.h                  	\
 	getfem/getfem_model_solvers.h             	\
 	getfem/getfem_linearized_plates.h         	\
+	getfem/getfem_contact_and_friction_common.h	\
+	getfem/getfem_contact_and_friction_nodal.h	\
+	getfem/getfem_contact_and_friction_integral.h	\
 	getfem/getfem_Coulomb_friction.h          	\
 	getfem/getfem_nonlinear_elasticity.h      	\
 	getfem/getfem_fourth_order.h              	\
 	getfem/getfem_Navier_Stokes.h             	\
 	getfem/getfem_superlu.h		   		\
 	getfem/getfem_plasticity.h                	\
+	getfem/getfem_continuation.h                    \
 	getfem/getfem_mesher.h                          \
 	getfem/getfem_convect.h                    	
 
@@ -474,6 +489,7 @@ SRC = \
 	getfem_integration_composite.cc    		\
 	getfem_fem.cc                      		\
 	getfem_interpolated_fem.cc         		\
+	getfem_projected_fem.cc         		\
 	getfem_mesh_fem_global_function.cc 		\
 	getfem_Xfem.cc                     		\
 	getfem_fem_composite.cc            		\
@@ -501,9 +517,11 @@ SRC = \
 	getfem_model_solvers.cc                		\
 	getfem_fourth_order.cc                		\
 	getfem_nonlinear_elasticity.cc                  \
-	getfem_Coulomb_friction.cc			\
-	getfem_plasticity.cc
+	getfem_contact_and_friction_nodal.cc		\
+	getfem_contact_and_friction_integral.cc	\
+	getfem_plasticity.cc				
 
+#	getfem_enumeration_dof_para.cc
 lib_LTLIBRARIES = libgetfem.la
 libgetfem_la_SOURCES = $(SRC)
 libgetfem_la_LDFLAGS = ${LIBTOOL_VERSION_INFO}
@@ -576,7 +594,7 @@ clean-libLTLIBRARIES:
 	  echo "rm -f \"$${dir}/so_locations\""; \
 	  rm -f "$${dir}/so_locations"; \
 	done
-libgetfem.la: $(libgetfem_la_OBJECTS) $(libgetfem_la_DEPENDENCIES) 
+libgetfem.la: $(libgetfem_la_OBJECTS) $(libgetfem_la_DEPENDENCIES) $(EXTRA_libgetfem_la_DEPENDENCIES) 
 	$(libgetfem_la_LINK) -rpath $(libdir) $(libgetfem_la_OBJECTS) $(libgetfem_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
@@ -604,9 +622,10 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dal_bit_vector.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dal_singleton.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dal_static_stored_objects.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_Coulomb_friction.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_Xfem.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_assembling_tensors.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_contact_and_friction_integral.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_contact_and_friction_nodal.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_context.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_export.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_fem.Plo at am__quote@
@@ -641,6 +660,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_nonlinear_elasticity.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_partial_mesh_fem.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_plasticity.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_projected_fem.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_regular_meshes.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_superlu.Plo at am__quote@
 
@@ -690,9 +710,7 @@ uninstall-nobase_includeHEADERS:
 	@$(NORMAL_UNINSTALL)
 	@list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
 	$(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(includedir)" && rm -f $$files
+	dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -793,10 +811,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/src/bgeot_convex_ref.cc b/src/bgeot_convex_ref.cc
index cb9d9c0..5f0c594 100644
--- a/src/bgeot_convex_ref.cc
+++ b/src/bgeot_convex_ref.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/dal_singleton.h"
 #include "getfem/bgeot_convex_ref.h"
@@ -143,14 +143,15 @@ namespace bgeot {
     }
     scalar_type is_in_face(short_type f, const base_node &pt) const {
       // return a null number if pt is in the face of the convex
+      // negative if the point is on the side of the face where the element is
       if (pt.size() != cvs->dim())
 	throw dimension_error
 	  ("K_simplex_of_ref_::is_in_face : Dimension does not match");
-      if (f > 0) return gmm::abs(pt[f-1]);
+      if (f > 0) return -pt[f-1];
       scalar_type e = -1.0;
       base_node::const_iterator it = pt.begin(), ite = pt.end();
       for (; it != ite; e += *it, ++it) {};
-      return gmm::abs(e);
+      return e / sqrt(scalar_type(pt.size()));
     }
     K_simplex_of_ref_(dim_type NN, short_type KK) {
       cvs = simplex_structure(NN, KK);
@@ -310,7 +311,7 @@ namespace bgeot {
     scalar_type is_in_face(short_type f, const base_node &pt) const {
       const base_node &x0 = (f ? convex<base_node>::points()[f-1]
 			     : convex<base_node>::points().back());
-      return gmm::abs(gmm::vect_sp(pt-x0, normals()[f])); 
+      return gmm::vect_sp(pt-x0, normals()[f]); 
     }
     equilateral_simplex_of_ref_(size_type N) {
       pconvex_ref prev = equilateral_simplex_of_reference(dim_type(N-1));
diff --git a/src/bgeot_convex_ref_simplexified.cc b/src/bgeot_convex_ref_simplexified.cc
old mode 100755
new mode 100644
index e3bb9e6..b0c58a3
--- a/src/bgeot_convex_ref_simplexified.cc
+++ b/src/bgeot_convex_ref_simplexified.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/bgeot_convex_ref.h"
diff --git a/src/bgeot_convex_structure.cc b/src/bgeot_convex_structure.cc
index 56d95c6..311748f 100644
--- a/src/bgeot_convex_structure.cc
+++ b/src/bgeot_convex_structure.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/dal_singleton.h"
diff --git a/src/bgeot_ftool.cc b/src/bgeot_ftool.cc
index 7cf05e6..e4ddc38 100644
--- a/src/bgeot_ftool.cc
+++ b/src/bgeot_ftool.cc
@@ -1,30 +1,32 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/bgeot_config.h"
 #include "getfem/bgeot_ftool.h"
 #include <ctype.h>
 #include <limits.h>
-#include <unistd.h>
+#ifndef WIN32
+#  include <unistd.h>
+#endif
 #include <fstream>
 #include "gmm/gmm_def.h"
 
diff --git a/src/bgeot_geometric_trans.cc b/src/bgeot_geometric_trans.cc
index e2ec33e..1f44f5e 100644
--- a/src/bgeot_geometric_trans.cc
+++ b/src/bgeot_geometric_trans.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/dal_singleton.h"
@@ -28,18 +28,18 @@
 
 namespace bgeot {
 
-  const base_node& geotrans_interpolation_context::xref() const { 
+  const base_node& geotrans_interpolation_context::xref() const {
     if (!have_xref()) {
       if (pspt_) xref_ = (*pspt_)[ii_];
       else GMM_ASSERT1(false, "missing xref");
     }
-    return xref_; 
+    return xref_;
   }
 
   const base_node& geotrans_interpolation_context::xreal() const {
     if (!have_xreal()) {
       if (have_pgp()) {
-	xreal_ = pgp_->transform(ii_, G());
+        xreal_ = pgp_->transform(ii_, G());
       } else xreal_ = pgt()->transform(xref(),G());
     }
     return xreal_;
@@ -64,17 +64,17 @@ namespace bgeot {
       size_type P = pgt_->structure()->dim();
       K_.resize(N(), P);
       if (have_pgp()) {
-	
-	if (&pgp_->grad(ii_) == 0) { cerr << "OULA!! " << ii_ << "\n"; }
-	else if (pgp_->grad(ii_).size() == 0) { cerr << "OUCH\n"; }
-	
-	assert(ii_ < pgp_->get_point_tab().size());
-	
-	gmm::mult(G(), pgp_->grad(ii_), K_);
+
+        if (&pgp_->grad(ii_) == 0) { cerr << "OULA!! " << ii_ << "\n"; }
+        else if (pgp_->grad(ii_).size() == 0) { cerr << "OUCH\n"; }
+
+        assert(ii_ < pgp_->get_point_tab().size());
+
+        gmm::mult(G(), pgp_->grad(ii_), K_);
       } else {
-	base_matrix pc(pgt()->nb_points(), P); 
-	pgt()->poly_vector_grad(xref(), pc);
-	gmm::mult(G(),pc,K_);
+        base_matrix pc(pgt()->nb_points(), P);
+        pgt()->poly_vector_grad(xref(), pc);
+        gmm::mult(G(),pc,K_);
       }
     }
     return K_;
@@ -82,18 +82,18 @@ namespace bgeot {
 
   const base_matrix& geotrans_interpolation_context::B() const {
     if (!have_B()) {
-      GMM_ASSERT1(have_G() && have_pgt(), "unable to compute K\n");
+      GMM_ASSERT1(have_G() && have_pgt(), "unable to compute B\n");
       size_type P = pgt_->structure()->dim();
       B_.resize(N(), P);
       if (P != N()) {
-	base_matrix CS(P,P);
-	gmm::mult(gmm::transposed(K()), K(), CS);
-	// gmm::abs below because on flat convexes determinant could be -1e-27.
-	J_ = ::sqrt(gmm::abs(gmm::lu_inverse(CS)));
-	gmm::mult(K(), CS, B_);
+        base_matrix CS(P,P);
+        gmm::mult(gmm::transposed(K()), K(), CS);
+        // gmm::abs below because on flat convexes determinant could be -1e-27.
+        J_ = ::sqrt(gmm::abs(gmm::lu_inverse(CS)));
+        gmm::mult(K(), CS, B_);
       } else {
-	gmm::copy(gmm::transposed(K()), B_);
-	J_ = gmm::abs(gmm::lu_inverse(B_)); 
+        gmm::copy(gmm::transposed(K()), B_);
+        J_ = gmm::abs(gmm::lu_inverse(B_));
       }
     }
     return B_;
@@ -101,49 +101,49 @@ namespace bgeot {
 
   const base_matrix& geotrans_interpolation_context::B3() const {
     if (!have_B3()) {
-      const base_matrix &BB = B(); 
+      const base_matrix &BB = B();
       size_type P=gmm::mat_ncols(BB), N_=gmm::mat_nrows(BB);
       B3_.resize(N_*N_, P*P);
       for (short_type i = 0; i < P; ++i)
-	for (short_type j = 0; j < P; ++j)
-	  for (short_type k = 0; k < N_; ++k)
-	    for (short_type l = 0; l < N_; ++l)
-	      B3_(k + N_*l, i + P*j) = BB(k, i) * BB(l, j);
+        for (short_type j = 0; j < P; ++j)
+          for (short_type k = 0; k < N_; ++k)
+            for (short_type l = 0; l < N_; ++l)
+              B3_(k + N_*l, i + P*j) = BB(k, i) * BB(l, j);
     }
     return B3_;
   }
 
   const base_matrix& geotrans_interpolation_context::B32() const {
     if (!have_B32()) {
-      const base_matrix &BB = B(); 
-      size_type P=gmm::mat_ncols(BB), N_=gmm::mat_nrows(BB);	
+      const base_matrix &BB = B();
+      size_type P=gmm::mat_ncols(BB), N_=gmm::mat_nrows(BB);
       B32_.resize(N_*N_, P);
       if (!pgt()->is_linear()) {
-	base_matrix B2(P*P, P), Htau(N_, P*P);
-	if (have_pgp()) {
-	  gmm::mult(G(), pgp_->hessian(ii_), Htau);
-	} else {
-	  /* very inefficient of course... */
-	  base_matrix pc(pgt()->nb_points(), P*P); 
-	  pgt()->poly_vector_hess(xref(), pc);
-	  gmm::mult(G(), pc, Htau);
-	}
-	for (short_type i = 0; i < P; ++i)
-	  for (short_type j = 0; j < P; ++j)
-	    for (short_type k = 0; k < P; ++k)
-	      for (short_type l = 0; l < N_; ++l)
-		B2(i + P*j, k) += Htau(l, i + P*j) * BB(l,k);
-	gmm::mult(B3(), B2, B32_);
+        base_matrix B2(P*P, P), Htau(N_, P*P);
+        if (have_pgp()) {
+          gmm::mult(G(), pgp_->hessian(ii_), Htau);
+        } else {
+          /* very inefficient of course... */
+          base_matrix pc(pgt()->nb_points(), P*P);
+          pgt()->poly_vector_hess(xref(), pc);
+          gmm::mult(G(), pc, Htau);
+        }
+        for (short_type i = 0; i < P; ++i)
+          for (short_type j = 0; j < P; ++j)
+            for (short_type k = 0; k < P; ++k)
+              for (short_type l = 0; l < N_; ++l)
+                B2(i + P*j, k) += Htau(l, i + P*j) * BB(l,k);
+        gmm::mult(B3(), B2, B32_);
       } else gmm::clear(B32_);
     }
     return B32_;
   }
-  
- void geotrans_interpolation_context::set_ii(size_type ii__) { 
+
+ void geotrans_interpolation_context::set_ii(size_type ii__) {
     if (ii_ == ii__) return;
     if (have_K() && !pgt()->is_linear()) { K_.resize(0,0); }
     if (have_B() && !pgt()->is_linear()) { B_.resize(0,0); }
-    if (have_B3() && !pgt()->is_linear()) { 
+    if (have_B3() && !pgt()->is_linear()) {
       B3_.resize(0,0); B32_.resize(0,0); }
     xref_.clear(); xreal_.clear();
     ii_=ii__;  J_ = scalar_type(-1);
@@ -153,7 +153,7 @@ namespace bgeot {
     xref_ = P;
     if (have_K() && !pgt()->is_linear()) { K_.resize(0,0); }
     if (have_B() && !pgt()->is_linear()) { B_.resize(0,0); }
-    if (have_B3() && !pgt()->is_linear()) { 
+    if (have_B3() && !pgt()->is_linear()) {
       B3_.resize(0,0); B32_.resize(0,0); }
     xreal_.clear(); ii_ = size_type(-1); J_ = scalar_type(-1); pspt_ = 0;
   }
@@ -162,24 +162,24 @@ namespace bgeot {
     G_(0), pgt_(0), pgp_(0), pspt_(0), ii_(size_type(-1)), J_(-1) {}
   geotrans_interpolation_context::geotrans_interpolation_context
   (bgeot::pgeotrans_precomp pgp__, size_type ii__, const base_matrix& G__) :
-    G_(&G__), pgt_(pgp__->get_trans()), pgp_(pgp__), 
+    G_(&G__), pgt_(pgp__->get_trans()), pgp_(pgp__),
     pspt_(&pgp__->get_point_tab()), ii_(ii__), J_(-1) {}
   geotrans_interpolation_context::geotrans_interpolation_context
-  (bgeot::pgeometric_trans pgt__, bgeot::pstored_point_tab pspt__, 
+  (bgeot::pgeometric_trans pgt__, bgeot::pstored_point_tab pspt__,
    size_type ii__,  const base_matrix& G__) :
-    G_(&G__), pgt_(pgt__), pgp_(0), 
+    G_(&G__), pgt_(pgt__), pgp_(0),
     pspt_(pspt__), ii_(ii__), J_(-1) {}
   geotrans_interpolation_context::geotrans_interpolation_context
   (bgeot::pgeometric_trans pgt__, const base_node& xref__,
    const base_matrix& G__) :
-    xref_(xref__), G_(&G__), pgt_(pgt__), pgp_(0), pspt_(0), 
+    xref_(xref__), G_(&G__), pgt_(pgt__), pgp_(0), pspt_(0),
     ii_(size_type(-1)), J_(-1) {}
- 
+
 
   typedef dal::naming_system<geometric_trans>::param_list gt_param_list;
 
-  base_node geometric_trans::transform(const base_node &pt, 
-				       const base_matrix &G) const {
+  base_node geometric_trans::transform(const base_node &pt,
+                                       const base_matrix &G) const {
     size_type N = G.nrows(), k = nb_points();
     base_node P(N); base_vector val(k);
     poly_vector_val(pt, val);
@@ -197,9 +197,9 @@ namespace bgeot {
     for (size_type ip = 0; ip < nb_points(); ++ip) {
       bool vertex = true;
       for (size_type i = 0; i < cvr->points()[ip].size(); ++i)
-	if (gmm::abs(cvr->points()[ip][i]) > 1e-10
-	    && gmm::abs(cvr->points()[ip][i]-1.0) > 1e-10)
-	  { vertex = false; break; }
+        if (gmm::abs(cvr->points()[ip][i]) > 1e-10
+            && gmm::abs(cvr->points()[ip][i]-1.0) > 1e-10)
+          { vertex = false; break; }
       if (vertex) vertices_.push_back(ip);
     }
     assert(vertices_.size() >= dim());
@@ -217,33 +217,54 @@ namespace bgeot {
     virtual void poly_vector_val(const base_node &pt, base_vector &val) const {
       val.resize(nb_points());
       for (size_type k = 0; k < nb_points(); ++k)
-	val[k] = trans[k].eval(pt.begin());
+        val[k] = trans[k].eval(pt.begin());
+    }
+
+    virtual void poly_vector_val(const base_node &pt, const convex_ind_ct &ind_ct,
+                                 base_vector &val) const {
+      size_type nb_funcs=ind_ct.size();
+      val.resize(nb_funcs);
+      for (size_type k = 0; k < nb_funcs; ++k)
+        val[k] = trans[ind_ct[k]].eval(pt.begin());
     }
 
     virtual void poly_vector_grad(const base_node &pt, base_matrix &pc) const {
       FUNC PP;
       pc.resize(nb_points(),dim());
       for (size_type i = 0; i < nb_points(); ++i)
-	for (dim_type n = 0; n < dim(); ++n) {
-	  PP = trans[i];
-	  PP.derivative(n);
-	  pc(i, n) = PP.eval(pt.begin());
-	}
+        for (dim_type n = 0; n < dim(); ++n) {
+          PP = trans[i];
+          PP.derivative(n);
+          pc(i, n) = PP.eval(pt.begin());
+        }
+    }
+
+    virtual void poly_vector_grad(const base_node &pt, const convex_ind_ct &ind_ct,
+                                  base_matrix &pc) const {
+      FUNC PP;
+      size_type nb_funcs=ind_ct.size();
+      pc.resize(nb_funcs,dim());
+      for (size_type i = 0; i < nb_funcs; ++i)
+        for (dim_type n = 0; n < dim(); ++n) {
+          PP = trans[ind_ct[i]];
+          PP.derivative(n);
+          pc(i, n) = PP.eval(pt.begin());
+        }
     }
 
     virtual void poly_vector_hess(const base_node &pt, base_matrix &pc) const {
       FUNC PP, QP;
       pc.resize(nb_points(),dim()*dim());
       for (size_type i = 0; i < nb_points(); ++i)
-	for (dim_type n = 0; n < dim(); ++n) {
-	  QP = trans[i]; QP.derivative(n); 
-	  for (dim_type m = 0; m <= n; ++m) {
-	    PP = QP; PP.derivative(m);
-	    pc(i, n*dim()+m) = pc(i, m*dim()+n) = PP.eval(pt.begin());
-	  }
-	}
+        for (dim_type n = 0; n < dim(); ++n) {
+          QP = trans[i]; QP.derivative(n);
+          for (dim_type m = 0; m <= n; ++m) {
+            PP = QP; PP.derivative(m);
+            pc(i, n*dim()+m) = pc(i, m*dim()+n) = PP.eval(pt.begin());
+          }
+        }
     }
-    
+
   };
 
   typedef igeometric_trans<base_poly> poly_geometric_trans;
@@ -260,21 +281,21 @@ namespace bgeot {
       power_index w(short_type(N+1));
       l0.one(); l1.one(); p = l0;
       for (short_type nn = 0; nn < N; ++nn) l0 -= base_poly(N, 1, nn);
-      
+
       w[0] = K;
       for (int nn = 1; nn <= N; ++nn) {
-	w[nn]=short_type(floor(0.5+(((cvr->points())[i])[nn-1]*double(K))));
-	w[0]=short_type(w[0]-w[nn]);
+        w[nn]=short_type(floor(0.5+(((cvr->points())[i])[nn-1]*double(K))));
+        w[0]=short_type(w[0]-w[nn]);
       }
-      
+
       for (short_type nn = 0; nn <= N; ++nn)
-	for (short_type j = 0; j < w[nn]; ++j)
-	  if (nn == 0)
-	    p *= (l0 * (scalar_type(K) / scalar_type(j+1))) 
-	       - (l1 * (scalar_type(j) / scalar_type(j+1)));
-	  else
-	    p *= (base_poly(N, 1, short_type(nn-1)) * (scalar_type(K) / scalar_type(j+1))) 
-	       - (l1 * (scalar_type(j) / scalar_type(j+1)));
+        for (short_type j = 0; j < w[nn]; ++j)
+          if (nn == 0)
+            p *= (l0 * (scalar_type(K) / scalar_type(j+1)))
+               - (l1 * (scalar_type(j) / scalar_type(j+1)));
+          else
+            p *= (base_poly(N, 1, short_type(nn-1)) * (scalar_type(K) / scalar_type(j+1)))
+               - (l1 * (scalar_type(j) / scalar_type(j+1)));
     }
 
     simplex_trans_(dim_type nc, short_type k) {
@@ -290,16 +311,16 @@ namespace bgeot {
 
   static pgeometric_trans
   PK_gt(gt_param_list &params,
-	std::vector<dal::pstatic_stored_object> &dependencies) {
+        std::vector<dal::pstatic_stored_object> &dependencies) {
     GMM_ASSERT1(params.size() == 2, "Bad number of parameters : "
-		<< params.size() << " should be 2.");
+                << params.size() << " should be 2.");
     GMM_ASSERT1(params[0].type() == 0 && params[1].type() == 0,
-		"Bad type of parameters");
+                "Bad type of parameters");
     int n = int(::floor(params[0].num() + 0.01));
     int k = int(::floor(params[1].num() + 0.01));
     GMM_ASSERT1(n >= 0 && n < 100 && k >= 0 && k <= 150 &&
-		double(n) == params[0].num() && double(k) == params[1].num(),
-		"Bad parameters");
+                double(n) == params[0].num() && double(k) == params[1].num(),
+                "Bad parameters");
     dependencies.push_back(simplex_of_reference(dim_type(n), dim_type(k)));
     return new simplex_trans_(dim_type(n), dim_type(k));
   }
@@ -317,33 +338,33 @@ namespace bgeot {
       size_type n1 = a->nb_points(), n2 = b->nb_points();
       trans.resize(n1 * n2);
       for (size_type i1 = 0; i1 < n1; ++i1)
-	for (size_type i2 = 0; i2 < n2; ++i2) {
-	  trans[i1 + i2 * n1] = a->trans[i1];
-	  trans[i1 + i2 * n1].direct_product(b->trans[i2]);
-	}
+        for (size_type i2 = 0; i2 < n2; ++i2) {
+          trans[i1 + i2 * n1] = a->trans[i1];
+          trans[i1 + i2 * n1].direct_product(b->trans[i2]);
+        }
       for (size_type i2 = 0; i2 < b->nb_vertices(); ++i2)
-	for (size_type i1 = 0; i1 < a->nb_vertices(); ++i1)
-	  vertices_.push_back(a->vertices()[i1] + b->vertices()[i2] * n1);
+        for (size_type i1 = 0; i1 < a->nb_vertices(); ++i1)
+          vertices_.push_back(a->vertices()[i1] + b->vertices()[i2] * n1);
     }
   };
 
   static pgeometric_trans product_gt(gt_param_list &params,
-		  std::vector<dal::pstatic_stored_object> &dependencies) {
+                  std::vector<dal::pstatic_stored_object> &dependencies) {
     GMM_ASSERT1(params.size() == 2, "Bad number of parameters : "
-		<< params.size() << " should be 2.");
+                << params.size() << " should be 2.");
     GMM_ASSERT1(params[0].type() == 1 && params[1].type() == 1,
-		"Bad type of parameters");
+                "Bad type of parameters");
     pgeometric_trans a = params[0].method();
     pgeometric_trans b = params[1].method();
     dependencies.push_back(a); dependencies.push_back(b);
     dependencies.push_back(convex_ref_product(a->convex_ref(),
-					      b->convex_ref()));
+                                              b->convex_ref()));
     const poly_geometric_trans *aa
       = dynamic_cast<const poly_geometric_trans *>(a.get());
     const poly_geometric_trans *bb
       = dynamic_cast<const poly_geometric_trans *>(b.get());
     GMM_ASSERT1(aa && bb, "The product of geometric transformations "
-		"is only defined for polynomial ones");
+                "is only defined for polynomial ones");
     return new cv_pr_t_(aa, bb);
   }
 
@@ -354,7 +375,7 @@ namespace bgeot {
   struct cv_pr_tl_ : public poly_geometric_trans {
     cv_pr_tl_(const poly_geometric_trans *a, const poly_geometric_trans *b) {
       GMM_ASSERT1(a->is_linear() && b->is_linear(),
-		  "linear product of non-linear transformations");
+                  "linear product of non-linear transformations");
       cvr = convex_ref_product(a->convex_ref(), b->convex_ref());
       is_lin = true;
       complexity_ = std::max(a->complexity(), b->complexity());
@@ -369,32 +390,32 @@ namespace bgeot {
       = dynamic_cast<const poly_geometric_trans *>(pgt_.get());
 
       for (size_type i = 0; i <= dim(); ++i)
-	trans[cvr->structure()->ind_dir_points()[i]] 
-	  = pgt->trans[i];
+        trans[cvr->structure()->ind_dir_points()[i]]
+          = pgt->trans[i];
       for (size_type i2 = 0; i2 < b->nb_vertices(); ++i2)
-	for (size_type i1 = 0; i1 < a->nb_vertices(); ++i1)
-	  vertices_.push_back(a->vertices()[i1]
-			      + b->vertices()[i2] * a->nb_points());
+        for (size_type i1 = 0; i1 < a->nb_vertices(); ++i1)
+          vertices_.push_back(a->vertices()[i1]
+                              + b->vertices()[i2] * a->nb_points());
     }
   };
 
   static pgeometric_trans linear_product_gt(gt_param_list &params,
-	std::vector<dal::pstatic_stored_object> &dependencies) {
+        std::vector<dal::pstatic_stored_object> &dependencies) {
     GMM_ASSERT1(params.size() == 2, "Bad number of parameters : "
-		<< params.size() << " should be 2.");
+                << params.size() << " should be 2.");
     GMM_ASSERT1(params[0].type() == 1 && params[1].type() == 1,
-		"Bad type of parameters");
+                "Bad type of parameters");
     pgeometric_trans a = params[0].method();
     pgeometric_trans b = params[1].method();
     dependencies.push_back(a); dependencies.push_back(b);
     dependencies.push_back(convex_ref_product(a->convex_ref(),
-					      b->convex_ref()));    
+                                              b->convex_ref()));
     const poly_geometric_trans *aa
       = dynamic_cast<const poly_geometric_trans *>(a.get());
     const poly_geometric_trans *bb
       = dynamic_cast<const poly_geometric_trans *>(b.get());
     GMM_ASSERT1(aa && bb, "The product of geometric transformations "
-		"is only defined for polynomial ones");
+                "is only defined for polynomial ones");
     return new cv_pr_tl_(aa, bb);
   }
 
@@ -403,59 +424,59 @@ namespace bgeot {
   /* ******************************************************************** */
 
   static pgeometric_trans QK_gt(gt_param_list &params,
-	std::vector<dal::pstatic_stored_object> &) {
+        std::vector<dal::pstatic_stored_object> &) {
     GMM_ASSERT1(params.size() == 2, "Bad number of parameters : "
-		<< params.size() << " should be 2.");
+                << params.size() << " should be 2.");
     GMM_ASSERT1(params[0].type() == 0 && params[1].type() == 0,
-		"Bad type of parameters");
+                "Bad type of parameters");
     int n = int(::floor(params[0].num() + 0.01));
     int k = int(::floor(params[1].num() + 0.01));
     GMM_ASSERT1(n > 0 && n < 100 && k >= 0 && k <= 150 &&
-		double(n) == params[0].num() && double(k) == params[1].num(),
-		"Bad parameters");
+                double(n) == params[0].num() && double(k) == params[1].num(),
+                "Bad parameters");
     std::stringstream name;
     if (n == 1)
       name << "GT_PK(1," << k << ")";
-    else 
+    else
       name << "GT_PRODUCT(GT_QK(" << n-1 << "," << k << "),GT_PK(1,"
-	   << k << "))";
+           << k << "))";
     return geometric_trans_descriptor(name.str());
   }
 
   static pgeometric_trans prism_gt(gt_param_list &params,
-	std::vector<dal::pstatic_stored_object> &) {
+        std::vector<dal::pstatic_stored_object> &) {
     GMM_ASSERT1(params.size() == 2, "Bad number of parameters : "
-		<< params.size() << " should be 2.");
+                << params.size() << " should be 2.");
     GMM_ASSERT1(params[0].type() == 0 && params[1].type() == 0,
-		"Bad type of parameters");
+                "Bad type of parameters");
     int n = int(::floor(params[0].num() + 0.01));
     int k = int(::floor(params[1].num() + 0.01));
     GMM_ASSERT1(n > 0 && n < 100 && k >= 0 && k <= 150 &&
-		double(n) == params[0].num() && double(k) == params[1].num(),
-		"Bad parameters");
+                double(n) == params[0].num() && double(k) == params[1].num(),
+                "Bad parameters");
     std::stringstream name;
     name << "GT_PRODUCT(GT_PK(" << n-1 << "," << k << "),GT_PK(1,"
-	 << k << "))";
+         << k << "))";
     return geometric_trans_descriptor(name.str());
   }
 
   static pgeometric_trans linear_qk(gt_param_list &params,
-	std::vector<dal::pstatic_stored_object> &) {
+        std::vector<dal::pstatic_stored_object> &) {
     GMM_ASSERT1(params.size() == 1, "Bad number of parameters : "
-		<< params.size() << " should be 1.");
+                << params.size() << " should be 1.");
     GMM_ASSERT1(params[0].type() == 0, "Bad type of parameters");
     int n = int(::floor(params[0].num() + 0.01));
     return parallelepiped_linear_geotrans(n);
   }
 
   /* norm of returned vector is the ratio between the face surface on
-     the reel element and the face surface on the reference element 
+     the real element and the face surface on the reference element
      IT IS NOT UNITARY
-     
+
      pt is the position of the evaluation point on the reference element
   */
   base_small_vector compute_normal(const geotrans_interpolation_context& c,
-				   size_type face) {
+                                   size_type face) {
     GMM_ASSERT1(c.G().ncols() == c.pgt()->nb_points(), "dimensions mismatch");
     base_small_vector un(c.N());
     gmm::mult(c.B(), c.pgt()->normals()[face], un);
@@ -464,11 +485,11 @@ namespace bgeot {
 
   /*
     return the local basis (i.e. the normal in the first column, and the
-    tangent vectors in the other columns 
+    tangent vectors in the other columns
   */
-  base_matrix 
+  base_matrix
   compute_local_basis(const geotrans_interpolation_context& c,
-		      size_type face) {
+                      size_type face) {
     GMM_ASSERT1(c.G().ncols() == c.pgt()->nb_points(), "dimensions mismatch");
     base_small_vector up = c.pgt()->normals()[face];
     base_small_vector un(c.N());
@@ -477,7 +498,7 @@ namespace bgeot {
     base_matrix baseP(P, P);
     gmm::copy(gmm::identity_matrix(), baseP);
     size_type i0 = 0;
-    for (size_type i=1; i < P; ++i) 
+    for (size_type i=1; i < P; ++i)
       if (gmm::abs(up[i])>gmm::abs(up[i0])) i0=i;
     if (i0) gmm::copy(gmm::mat_col(baseP, 0), gmm::mat_col(baseP, i0));
     gmm::copy(up, gmm::mat_col(baseP, 0));
@@ -488,13 +509,13 @@ namespace bgeot {
     /* modified gram-schmidt */
     for (size_type k=0; k < P; ++k) {
       for (size_type l=0; l < k; ++l) {
-	gmm::add(gmm::scaled(gmm::mat_col(baseN,l), 
-			     -gmm::vect_sp(gmm::mat_col(baseN,l),
-					   gmm::mat_col(baseN,k))), 
-		 gmm::mat_col(baseN,k));
+        gmm::add(gmm::scaled(gmm::mat_col(baseN,l),
+                             -gmm::vect_sp(gmm::mat_col(baseN,l),
+                                           gmm::mat_col(baseN,k))),
+                 gmm::mat_col(baseN,k));
       }
       gmm::scale(gmm::mat_col(baseN,k),
-		 1./gmm::vect_norm2(gmm::mat_col(baseN,k)));
+                 1./gmm::vect_norm2(gmm::mat_col(baseN,k)));
     }
     /* TODO: for cases where P < N,
        complete the basis */
@@ -512,7 +533,7 @@ namespace bgeot {
 
   struct geometric_trans_naming_system
     : public dal::naming_system<geometric_trans> {
-    geometric_trans_naming_system() : 
+    geometric_trans_naming_system() :
       dal::naming_system<geometric_trans>("GT") {
       add_suffix("PK", PK_gt);
       add_suffix("QK", QK_gt);
@@ -522,7 +543,7 @@ namespace bgeot {
       add_suffix("LINEAR_QK", linear_qk);
     }
   };
-  
+
   pgeometric_trans geometric_trans_descriptor(std::string name) {
     size_type i=0;
     return dal::singleton<geometric_trans_naming_system>::instance().method(name, i);
@@ -533,7 +554,7 @@ namespace bgeot {
   }
 
   /* Fonctions pour la ref. directe.                                     */
-  
+
   pgeometric_trans simplex_geotrans(size_type n, short_type k) {
     static pgeometric_trans pgt = 0;
     static size_type d = size_type(-2);
@@ -564,8 +585,8 @@ namespace bgeot {
     switch (dim) {
     case 1: return "GT_PK(1,1)";
     default: return std::string("GT_LINEAR_PRODUCT(")
-			   + name_of_linear_qk_trans(dim-1) 
-			   + std::string(",GT_PK(1,1))");
+                           + name_of_linear_qk_trans(dim-1)
+                           + std::string(",GT_PK(1,1))");
     }
   }
 
@@ -593,10 +614,10 @@ namespace bgeot {
   }
 
   pgeometric_trans linear_product_geotrans(pgeometric_trans pg1,
-					   pgeometric_trans pg2) {
+                                           pgeometric_trans pg2) {
     std::stringstream name;
-    name << "GT_LINEAR_PRODUCT(" << name_of_geometric_trans(pg1) << "," 
-	 << name_of_geometric_trans(pg2) << ")";
+    name << "GT_LINEAR_PRODUCT(" << name_of_geometric_trans(pg1) << ","
+         << name_of_geometric_trans(pg2) << ")";
     return geometric_trans_descriptor(name.str());
   }
 
@@ -614,18 +635,18 @@ namespace bgeot {
   }
 
   pgeometric_trans product_geotrans(pgeometric_trans pg1,
-				    pgeometric_trans pg2) {
+                                    pgeometric_trans pg2) {
     static pgeometric_trans pgt = 0;
     static pgeometric_trans pg1_ = 0;
     static pgeometric_trans pg2_ = 0;
     if (pg1 != pg1_ || pg2 != pg2_) {
       std::stringstream name;
-      name << "GT_PRODUCT(" << name_of_geometric_trans(pg1) << "," 
-	   << name_of_geometric_trans(pg2) << ")";
+      name << "GT_PRODUCT(" << name_of_geometric_trans(pg1) << ","
+           << name_of_geometric_trans(pg2) << ")";
       pgt = geometric_trans_descriptor(name.str());
       pg1_ = pg1; pg2_ = pg2;
     }
-    return pgt;    
+    return pgt;
   }
 
   /* ********************************************************************* */
@@ -635,11 +656,11 @@ namespace bgeot {
   DAL_DOUBLE_KEY(pre_geot_key_, pgeometric_trans, pstored_point_tab);
 
   geotrans_precomp_::geotrans_precomp_(pgeometric_trans pg,
-				       pstored_point_tab ps) 
+                                       pstored_point_tab ps)
     : pgt(pg), pspt(ps) {}
 
   void geotrans_precomp_::init_val() const {
-    c.clear();  
+    c.clear();
     c.resize(pspt->size(), base_vector(pgt->nb_points()));
     for (size_type j = 0; j < pspt->size(); ++j)
       pgt->poly_vector_val((*pspt)[j], c[j]);
@@ -647,7 +668,7 @@ namespace bgeot {
 
   void geotrans_precomp_::init_grad() const {
     dim_type N = pgt->dim();
-    pc.clear(); 
+    pc.clear();
     pc.resize(pspt->size(), base_matrix(pgt->nb_points() , N));
     for (size_type j = 0; j < pspt->size(); ++j)
       pgt->poly_vector_grad((*pspt)[j], pc[j]);
@@ -663,13 +684,13 @@ namespace bgeot {
   }
 
   base_node geotrans_precomp_::transform(size_type i,
-					 const base_matrix &G) const {
+                                         const base_matrix &G) const {
     if (c.empty()) init_val();
     size_type N = G.nrows(), k = pgt->nb_points();
     base_node P(N);
     base_matrix::const_iterator git = G.begin();
     for (size_type l = 0; l < k; ++l) {
-      scalar_type a = c[i][l]; 
+      scalar_type a = c[i][l];
       base_node::iterator pit = P.begin(), pite = P.end();
       for (; pit != pite; ++git, ++pit) *pit += a * (*git);
     }
@@ -677,14 +698,14 @@ namespace bgeot {
   }
 
   pgeotrans_precomp geotrans_precomp(pgeometric_trans pg,
-				     pstored_point_tab pspt,
-				     dal::pstatic_stored_object dep) {
+                                     pstored_point_tab pspt,
+                                     dal::pstatic_stored_object dep) {
     dal::pstatic_stored_object o
       = dal::search_stored_object(pre_geot_key_(pg, pspt));
     if (o) return dal::stored_cast<geotrans_precomp_>(o);
     pgeotrans_precomp p = new geotrans_precomp_(pg, pspt);
     dal::add_stored_object(new pre_geot_key_(pg, pspt), p, pg, pspt,
-			   dal::AUTODELETE_STATIC_OBJECT);
+                           dal::AUTODELETE_STATIC_OBJECT);
     if (dep) dal::add_dependency(p, dep);
     return p;
   }
diff --git a/src/bgeot_geotrans_inv.cc b/src/bgeot_geotrans_inv.cc
index 354198f..bbe6816 100644
--- a/src/bgeot_geotrans_inv.cc
+++ b/src/bgeot_geotrans_inv.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/bgeot_geotrans_inv.h"
 #include "gmm/gmm_solver_bfgs.h"
diff --git a/src/bgeot_imbricated_box.cc b/src/bgeot_imbricated_box.cc
old mode 100755
new mode 100644
index b6aea54..d33ec3d
--- a/src/bgeot_imbricated_box.cc
+++ b/src/bgeot_imbricated_box.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/bgeot_imbricated_box.h"
 
diff --git a/src/bgeot_kdtree.cc b/src/bgeot_kdtree.cc
index 5cb1bd8..6b82512 100644
--- a/src/bgeot_kdtree.cc
+++ b/src/bgeot_kdtree.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/bgeot_kdtree.h"
@@ -227,21 +227,21 @@ namespace bgeot {
     if (!t->isleaf()) {
       const kdtree_node *tn = static_cast<const kdtree_node*>(t);
       scalar_type dist = p.pos[dir] - tn->split_v;
-      if (dist <= scalar_type(0) && tn->left) {
+      if ((dist <= scalar_type(0) && tn->left) || !tn->right) {
         nearest_neighbor_main(p, tn->left, unsigned((dir+1)%p.N));
-      } else if (dist > scalar_type(0) && tn->right) {
+      } else if (tn->right) {
         nearest_neighbor_main(p, tn->right, unsigned((dir+1)%p.N));
       } else {
-        assert(false);  // FIXME
+        assert(false);
       }
       // check the possibility of points at the opposite side of the current
       // tree node which are closer to pos as the current minimum distance
-      if ( dist * dist <= p.dist2 ) {
+      if (dist * dist <= p.dist2) {
         for (size_type k=0; k < p.N; ++k) p.vec_to_tree_elm[k] = 0.;
-        if (dist <= scalar_type(0) && tn->right) {
+        if ((dist <= scalar_type(0) && tn->right) || !tn->left) {
           p.vec_to_tree_elm[dir] = -dist;
           nearest_neighbor_assist(p, tn->right, unsigned((dir+1)%p.N));
-        } else if (dist > scalar_type(0) && tn->left) {
+        } else if (tn->left) {
           p.vec_to_tree_elm[dir] = dist;
           nearest_neighbor_assist(p, tn->left, unsigned((dir+1)%p.N));
         }
diff --git a/src/bgeot_mesh_structure.cc b/src/bgeot_mesh_structure.cc
index 173c0ab..2b5b324 100644
--- a/src/bgeot_mesh_structure.cc
+++ b/src/bgeot_mesh_structure.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 
diff --git a/src/bgeot_node_tab.cc b/src/bgeot_node_tab.cc
index 7c4fb93..f6e1cc0 100644
--- a/src/bgeot_node_tab.cc
+++ b/src/bgeot_node_tab.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/bgeot_node_tab.h"
@@ -46,17 +46,19 @@ namespace bgeot {
   }
 
   void node_tab::add_sorter(void) const {
-    if (sorters.size() > 0) GMM_WARNING3("Multiple sort needed for node tab");
+    if (sorters.size() > 1)
+      GMM_WARNING3("Multiple sort needed for node tab : " << sorters.size()+1);
     sorters.push_back(sorter(component_comp(*this, c, dim_)));
     for (dal::bv_visitor i(index()); !i.finished(); ++i)
       sorters.back().insert(size_type(i));
   }
 
-  size_type node_tab::search_node(const base_node &pt, const scalar_type radius) const {
+  size_type node_tab::search_node(const base_node &pt,
+				  const scalar_type radius) const {
     if (card() == 0) return size_type(-1);
-
+        
     scalar_type eps_radius = std::max(eps, radius);
-    for (size_type is = 0; ; ++is) {
+    for (size_type is = 0; is < 5; ++is) {
       if (is >= sorters.size()) add_sorter();
 
       c = pt - eps_radius * sorters[is].key_comp().v;
@@ -65,16 +67,22 @@ namespace bgeot {
       scalar_type up_bound
         = gmm::vect_sp(pt, sorters[is].key_comp().v) + 2*eps_radius;
       size_type count = 0;
+      // if (is > 0) cout << "begin loop " << " v = " <<  sorters[is].key_comp().v << "sp c = " << gmm::vect_sp(c, sorters[is].key_comp().v) << " eps_radius = " << eps_radius << " max_radius " <<  max_radius << endl;
       for (; it != sorters[is].end() && count < 20; ++it, ++count) {
+
 	const base_node &pt2 = (*this)[*it];
-	if (gmm::vect_dist2(pt, pt2) < eps_radius)
-	  return *it;
+
+// 	if (count > 0) {
+// 	  cout << "count " << count << " is = " << is << " pt = " << pt << " pt2 = " << pt2 << " sp = " << gmm::vect_sp(pt2, sorters[is].key_comp().v) << " spinit = " << gmm::vect_sp(pt, sorters[is].key_comp().v) << endl;
+// 	}
+
+	if (gmm::vect_dist2(pt, pt2) < eps_radius) return *it;
 	if (gmm::vect_sp(pt2, sorters[is].key_comp().v) > up_bound)
 	  return size_type(-1);
       }
       if (it == sorters[is].end()) return size_type(-1);
-      GMM_ASSERT1(is < 10, "Problem in node structure");
     }
+    GMM_ASSERT1(false, "Problem in node structure !!");
   }
 
   void node_tab::clear(void) {
@@ -126,8 +134,12 @@ namespace bgeot {
 
   void node_tab::sup_node(size_type i) {
     if (index().is_in(i)) {
-      for (size_type is = 0; is < sorters.size(); ++is) sorters[is].erase(i);
+      for (size_type is = 0; is < sorters.size(); ++is) {
+	sorters[is].erase(i);
+	GMM_ASSERT3(sorters[is].size()+1 == card(), "internal error");
+      }
       dal::dynamic_tas<base_node>::sup(i);
+      
     }
   }
 
diff --git a/src/bgeot_poly.cc b/src/bgeot_poly.cc
index 5ab2cfa..fc7932d 100644
--- a/src/bgeot_poly.cc
+++ b/src/bgeot_poly.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 
@@ -54,8 +54,8 @@ namespace bgeot {
     short_type n = short_type(size()), l;
     if (n > 0) {
       size_type g_idx = global_index_; short_type deg = degree_;
-      iterator it = begin() + (n-2);
-      for (l = short_type(n-2); l != short_type(-1); --l, --it)
+      reverse_iterator it = rbegin() + 1;
+      for (l = short_type(n-2); l != short_type(-1); --l, ++it)
 	if (*it != 0) break;
       short_type a = (*this)[n-1]; (*this)[n-1] = 0;
       (*this)[short_type(l+1)] = short_type(a + 1);
@@ -71,9 +71,10 @@ namespace bgeot {
     short_type n = short_type(size()), l;
     if (n > 0) {
       size_type g_idx = global_index_; short_type deg = degree_;
-      iterator it = begin() + (n-1);
-      for (l = short_type(n-1); l != short_type(-1); --l, --it)
+      reverse_iterator it = rbegin();
+      for (l = short_type(n-1); l != short_type(-1); --l, ++it) {
 	if (*it != 0) break;
+      }
       if (l != short_type(-1)) {
 	short_type a = (*this)[l];
 	(*this)[l] = 0; (*this)[n-1] = short_type(a - 1);
@@ -178,25 +179,31 @@ namespace bgeot {
   void do_bin_op(std::vector<base_poly> &value_list,
 		 std::vector<int> &op_list,
 		 std::vector<int> &prior_list) {
-    base_poly &p1(*(value_list.end() - 2)), &p2(*(value_list.end() - 1));
-    
-    switch (op_list.back()) {
-      case 1  : p1 *= p2; break;
-      case 2  : if (p2.degree() > 0) parse_error(6); p1 /= p2[0]; break;
-      case 3  : p1 += p2; break;
-      case 4  : p1 -= p2; break;
-      case 5  : 
-	{
-	  if (p2.degree() > 0) parse_error(7);
-	  int pow = int(p2[0]);
-	  if (p2[0] !=  opt_long_scalar_type(pow) || pow < 0) parse_error(8);
-	  base_poly p = p1; p1.one();
-	  for (int i = 0; i < pow; ++i) p1 *= p;
-	}
-	break;
-      case 6 : p2 *= opt_long_scalar_type(-1); break;
+    base_poly &p2 = *(value_list.rbegin());
+    if (op_list.back() != 6) {
+      assert(value_list.size()>1);
+      base_poly &p1 = *(value_list.rbegin()+1);    
+      switch (op_list.back()) {
+        case 1  : p1 *= p2; break;
+        case 2  : if (p2.degree() > 0) parse_error(6); p1 /= p2[0]; break;
+        case 3  : p1 += p2; break;
+        case 4  : p1 -= p2; break;
+        case 5  : 
+	  {
+	    if (p2.degree() > 0) parse_error(7);
+	    int pow = int(p2[0]);
+	    if (p2[0] !=  opt_long_scalar_type(pow) || pow < 0) parse_error(8);
+	    base_poly p = p1; p1.one();
+	    for (int i = 0; i < pow; ++i) p1 *= p;
+	  }
+	  break;
+        default: assert(0);
+      }
+      value_list.pop_back(); 
+    } else {
+      p2 *= opt_long_scalar_type(-1);
     }
-    if (op_list.back() != 6) value_list.pop_back(); op_list.pop_back(); prior_list.pop_back();
+    op_list.pop_back(); prior_list.pop_back();
   }
 
   base_poly read_base_poly(short_type n, std::istream &f) {
diff --git a/src/bgeot_poly_composite.cc b/src/bgeot_poly_composite.cc
index 81a0fe1..1b04ede 100644
--- a/src/bgeot_poly_composite.cc
+++ b/src/bgeot_poly_composite.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/dal_singleton.h"
 #include "getfem/bgeot_comma_init.h"
@@ -334,7 +334,8 @@ namespace bgeot {
     dal::bit_vector on_face;
     for (size_type i = 0; i < m.nb_max_points(); ++i) {
       if (m.is_point_valid(i)) {
-        if (cvr->is_in_face(f, m.points()[i]) < 1e-12) on_face.add(i);
+        if (gmm::abs(cvr->is_in_face(f, m.points()[i])) < 1e-12)
+	  on_face.add(i);
       }
     }
     //cerr << "on_face=" << on_face << endl;
diff --git a/src/bgeot_rtree.cc b/src/bgeot_rtree.cc
index 8e6e019..1d94ec7 100644
--- a/src/bgeot_rtree.cc
+++ b/src/bgeot_rtree.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/bgeot_rtree.h"
 
diff --git a/src/bgeot_small_vector.cc b/src/bgeot_small_vector.cc
index 7e4a385..47c0245 100644
--- a/src/bgeot_small_vector.cc
+++ b/src/bgeot_small_vector.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/bgeot_small_vector.h"
 namespace bgeot {
diff --git a/src/bgeot_sparse_tensors.cc b/src/bgeot_sparse_tensors.cc
index 2fb2b31..264bbce 100644
--- a/src/bgeot_sparse_tensors.cc
+++ b/src/bgeot_sparse_tensors.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <bitset>
 #include "gmm/gmm_blas_interface.h"
@@ -739,11 +739,11 @@ namespace bgeot {
       size_type redsz = 1;
       for (unsigned tnum=0; tnum < trtab.size(); ++tnum) {
 	if (!idx_occurences[ir][tnum]) continue;
-        std::bitset<32> once(reduction_chars.size());
+        std::bitset<int(32)> once((int)reduction_chars.size());
 	for (dim_type i=0; i < trtab[tnum].tr().ndim(); ++i) {
 	  bool ignore = false;
 	  for (dal::bv_visitor j(lst); !j.finished(); ++j) {
-	    if (trtab[tnum].ridx[i] == reduction_chars[j]) {
+	    if (trtab[tnum].ridx[i] == reduction_chars[(size_t)j]) {
               if (once[j]) ignore = true; else once[j] = true;
 	    }
           }
@@ -989,7 +989,7 @@ namespace bgeot {
        de l'utilisation de masque qui ne s'arrêtent pas forcement sur les 
        'frontieres' entre les differents tenseurs reduits) */
     //std::fill(out_data.begin(), out_data.end(), 0.);
-    memset(&out_data[0], 0, out_data.size()*sizeof(out_data[0]));
+    if (out_data.size()) memset(&out_data[0], 0, out_data.size()*sizeof(out_data[0]));
     for (unsigned i=0; i < trtab.size(); ++i) {
       if (trtab[i].is_reduction()) { 
         trtab[i].reduction->do_reduction(); 
diff --git a/src/dal_backtrace.cc b/src/dal_backtrace.cc
old mode 100755
new mode 100644
index 6ad7e5e..9ed075b
--- a/src/dal_backtrace.cc
+++ b/src/dal_backtrace.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 1995-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/dal_backtrace.h"
 #ifdef GETFEM_HAVE_BACKTRACE
diff --git a/src/dal_bit_vector.cc b/src/dal_bit_vector.cc
old mode 100755
new mode 100644
index 609e202..6b241a8
--- a/src/dal_bit_vector.cc
+++ b/src/dal_bit_vector.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 1995-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/dal_bit_vector.h"
diff --git a/src/dal_singleton.cc b/src/dal_singleton.cc
old mode 100755
new mode 100644
index c8d0b0f..209052d
--- a/src/dal_singleton.cc
+++ b/src/dal_singleton.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/dal_singleton.h"
 #include <algorithm>
diff --git a/src/dal_static_stored_objects.cc b/src/dal_static_stored_objects.cc
old mode 100755
new mode 100644
index b3d2103..a8b71e3
--- a/src/dal_static_stored_objects.cc
+++ b/src/dal_static_stored_objects.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/dal_static_stored_objects.h"
diff --git a/src/getfem/bgeot_comma_init.h b/src/getfem/bgeot_comma_init.h
index f1ecdc2..b78cb2b 100644
--- a/src/getfem/bgeot_comma_init.h
+++ b/src/getfem/bgeot_comma_init.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file bgeot_comma_init.h
    @author  Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/bgeot_config.h b/src/getfem/bgeot_config.h
index 07015c4..be207d1 100644
--- a/src/getfem/bgeot_config.h
+++ b/src/getfem/bgeot_config.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file bgeot_config.h
    @brief defines and typedefs for namespace bgeot
@@ -68,6 +69,10 @@
 /// Basic Geometric Tools
 namespace bgeot {
 
+  using std::endl; using std::cout; using std::cerr;
+  using std::ends; using std::cin;
+  
+
   static const size_t ST_NIL = size_t(-1);
   /// Dimension type (<255)
   typedef gmm::uint8_type dim_type;
diff --git a/src/getfem/bgeot_convex.h b/src/getfem/bgeot_convex.h
index 5a63275..dd76b4b 100644
--- a/src/getfem/bgeot_convex.h
+++ b/src/getfem/bgeot_convex.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file bgeot_convex.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/bgeot_convex_ref.h b/src/getfem/bgeot_convex_ref.h
index b90dcf1..13d8822 100644
--- a/src/getfem/bgeot_convex_ref.h
+++ b/src/getfem/bgeot_convex_ref.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 /**@file bgeot_convex_ref.h
@@ -99,7 +100,9 @@ namespace bgeot {
     virtual scalar_type is_in(const base_node &) const = 0;
     /** return a null (or almost zero) if pt is in the face of the convex.
      *  Does not control if the point is in the convex, but if a point
-     *  supposed to be in a convex is in this face.
+     *  supposed to be in a convex is in this face. return a negative number
+     *  if the point is in the side of the face where the element is and
+     *  positive in the other side.
      */
     virtual scalar_type is_in_face(short_type, const base_node &) const =0;
     /// return the normal vector for each face.
diff --git a/src/getfem/bgeot_convex_structure.h b/src/getfem/bgeot_convex_structure.h
index aca4cb6..f422577 100644
--- a/src/getfem/bgeot_convex_structure.h
+++ b/src/getfem/bgeot_convex_structure.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #ifndef BGEOT_CONVEX_STRUCTURE_H__
 #define BGEOT_CONVEX_STRUCTURE_H__
@@ -102,7 +103,7 @@ namespace bgeot {
      */
     inline const convex_ind_ct &ind_points_of_face(short_type i) const
     { return faces[i]; }
-    /** Return "direct" points indexes. These are the subset of points than
+    /** Return "direct" points indexes. These are the subset of points that
      *	can be used to build a direct vector basis. (rarely used)
      */
     inline const convex_ind_ct &ind_dir_points() const
diff --git a/src/getfem/bgeot_ftool.h b/src/getfem/bgeot_ftool.h
index 7549fde..a3e0eee 100644
--- a/src/getfem/bgeot_ftool.h
+++ b/src/getfem/bgeot_ftool.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file bgeot_ftool.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/bgeot_geometric_trans.h b/src/getfem/bgeot_geometric_trans.h
index 8e7d873..c50f84e 100644
--- a/src/getfem/bgeot_geometric_trans.h
+++ b/src/getfem/bgeot_geometric_trans.h
@@ -1,38 +1,39 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
-
-/** @file bgeot_geometric_trans.h 
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+
+/** @file bgeot_geometric_trans.h
     @author  Yves Renard <Yves.Renard at insa-lyon.fr>
     @date December 20, 2000.
     @brief Geometric transformations on convexes.
-*/ 
+*/
 
 #ifndef BGEOT_GEOMETRIC_TRANSFORMATION_H__
 #define BGEOT_GEOMETRIC_TRANSFORMATION_H__
@@ -42,6 +43,9 @@
 #include "bgeot_convex_ref.h"
 
 namespace bgeot {
+
+  typedef std::vector<short_type> convex_ind_ct;
+
   /**  Description of a geometric transformation between a
    * reference element and a real element.
    *
@@ -57,7 +61,7 @@ namespace bgeot {
    *     The geometric nodes of @f$\overline{T}@f$ are the points
    *     @f$\overline{g}^i \in\ {I\hspace{-0.3em}R}^P at f$, for @f$i = 0 .. n_g-1 at f$,
    *     and the corresponding (via the geometric transformation) nodes of
-   *     @f$T at f$ are the points @f$g^i \in\ {I\hspace{-0.3em}R}^N at f$. 
+   *     @f$T at f$ are the points @f$g^i \in\ {I\hspace{-0.3em}R}^N at f$.
    *
    *  <h3>Geometric transformation</h3>
    *     The geometric transformation is the application
@@ -66,25 +70,25 @@ namespace bgeot {
    *               \overline{x} & \longmapsto \ \ x,
    *     \end{array} @f]
    *     which should be a diffeomorphism between @f$\overline{T}@f$ and @f$T at f$.
-   *     It is assumed that there exists a (generally polynomial) vector 
+   *     It is assumed that there exists a (generally polynomial) vector
    *     @f$ \underline{\cal N}(\overline{x})
-   *        = \left({\cal N}i_(\overline{x})\right)i_, \ \ i = 0 .. n_g-1, @f$ 
+   *        = \left({\cal N}i_(\overline{x})\right)i_, \ \ i = 0 .. n_g-1, @f$
    *     defined on @f$\overline{T}@f$ of size @f$n_g at f$, such that the
    *     transformation
-   *     @f$\tau at f$ can be written 
+   *     @f$\tau at f$ can be written
    *     @f$ \tau(\overline{x}) = \sum_{i = 0}^{n_g-1} {\cal N}i_(\overline{x})
    *     g^i at f$.
    *
-   *     Denoting by 
-   *     @f$ \underline{\underline{G}} = (g^0; g^1; ...;g^{n_g-1}), @f$ 
+   *     Denoting by
+   *     @f$ \underline{\underline{G}} = (g^0; g^1; ...;g^{n_g-1}), @f$
    *     The matrix in which each column is a geometric node of @f$T at f$,
-   *     the transformation @f$\tau at f$ can be written as 
-   *     @f$ \tau(\overline{x}) = \underline{\underline{G}} \ 
-   *        \underline{\cal N}(\overline{x}). @f$ 
+   *     the transformation @f$\tau at f$ can be written as
+   *     @f$ \tau(\overline{x}) = \underline{\underline{G}} \
+   *        \underline{\cal N}(\overline{x}). @f$
    *
    *  <h3>Gradient of the transformation</h3>
-   *     The gradient of the transformation is 
-   *     @f[ \nabla \tau(\overline{x}) = 
+   *     The gradient of the transformation is
+   *     @f[ \nabla \tau(\overline{x}) =
    *     \left( \frac{\partial \tau_i}{\partial \overline{x}_j} \right)_{ij}
    *     = \left( \sum_{l = 0}^{n_g-1}g^l_i
    *     \frac{\partial {\cal N}l_(\overline{x})}{\partial \overline{x}_j}
@@ -101,16 +105,16 @@ namespace bgeot {
    */
   class geometric_trans : virtual public dal::static_stored_object {
   protected :
-    
+
     bool is_lin;
     pconvex_ref cvr;
     std::vector<size_type> vertices_;
     size_type complexity_; /* either the degree or the refinement of the
-			    *  transformation */
+                            *  transformation */
 
     void fill_standard_vertices(void);
   public :
-    
+
     /// Dimension of the reference element.
     dim_type dim(void) const { return cvr->structure()->dim(); }
     /// True if the transformation is linear (affine in fact).
@@ -124,11 +128,17 @@ namespace bgeot {
     /// Basic structure of the reference element.
     pconvex_structure basic_structure(void) const
     { return cvr->structure()->basic_structure(); }
-    /// Gives the value of the vector of functions at a certain point.
+    /// Gives the value of the functions vector at a certain point.
     virtual void poly_vector_val(const base_node &pt, base_vector &val) const = 0;
-    /// Gives the gradient of the vector of functions at a certain point.
+    /// Gives the value of a subgroup of the functions vector at a certain point.
+    virtual void poly_vector_val(const base_node &pt, const convex_ind_ct &ind_ct,
+                                 base_vector &val) const = 0;
+    /// Gives the gradient of the functions vector at a certain point.
     virtual void poly_vector_grad(const base_node &pt, base_matrix &val) const = 0;
-    /// Gives the hessian of the vector of functions at a certain point.
+    /// Gives the gradient of a subgroup of the functions vector at a certain point.
+    virtual void poly_vector_grad(const base_node &pt, const convex_ind_ct &ind_ct,
+                                  base_matrix &val) const = 0;
+    /// Gives the hessian of the functions vector at a certain point.
     virtual void poly_vector_hess(const base_node &pt, base_matrix &val) const = 0;
     /// Gives the number of vertices.
     size_type nb_vertices(void) const { return vertices_.size(); }
@@ -140,20 +150,20 @@ namespace bgeot {
     /// Gives the array of the normals to faces (on reference convex)
     const std::vector<base_small_vector> &normals(void) const
     { return cvr->normals(); }
-    /** Apply the geometric transformation to point pt, 
-	PTAB containsis the points of the real convex */
+    /** Apply the geometric transformation to point pt,
+        PTAB contains the points of the real convex */
     template<class CONT> base_node transform(const base_node &pt,
-					     const CONT &PTAB) const;
+                                             const CONT &PTAB) const;
     base_node transform(const base_node &pt, const base_matrix &G) const;
     /** Compute the gradient at point x, pc is resized to [nb_points() x dim()]
-	if the transformation is linear, x is not used at all */
+        if the transformation is linear, x is not used at all */
     size_type complexity(void) const { return complexity_; }
     virtual ~geometric_trans() {}
   };
 
   template<class CONT>
-    base_node geometric_trans::transform(const base_node &pt,
-					 const CONT &ptab) const {
+  base_node geometric_trans::transform(const base_node &pt,
+                                       const CONT &ptab) const {
     base_node P(ptab[0].size());
     size_type k = nb_points();
     base_vector val(k);
@@ -167,26 +177,26 @@ namespace bgeot {
   class geotrans_interpolation_context;
 
   template<class CONT>
-  void bounding_box(base_node& min, base_node& max, 
-		    const CONT &ptab, pgeometric_trans pgt = 0) {
+  void bounding_box(base_node& min, base_node& max,
+                    const CONT &ptab, pgeometric_trans pgt = 0) {
     typename CONT::const_iterator it = ptab.begin();
     min = max = *it; size_type P = min.size();
     base_node::iterator itmin = min.begin(), itmax = max.begin();
     for ( ++it; it != ptab.end(); ++it) {
       base_node pt = *it; /* need a temporary storage since cv.points()[j] may
-			     not be a reference to a base_node, but a
-			     temporary base_node !! (?) */
+                             not be a reference to a base_node, but a
+                             temporary base_node !! (?) */
       base_node::const_iterator it2 = pt.begin();
       for (size_type i = 0; i < P; ++i) {
-	itmin[i] = std::min(itmin[i], it2[i]);
-	itmax[i] = std::max(itmax[i], it2[i]);
+        itmin[i] = std::min(itmin[i], it2[i]);
+        itmax[i] = std::max(itmax[i], it2[i]);
       }
     }
     /* enlarge the box for non-linear transformations .. */
-    if (pgt && !pgt->is_linear()) 
+    if (pgt && !pgt->is_linear())
       for (size_type i = 0; i < P; ++i) {
-	scalar_type e = (itmax[i]-itmin[i]) * 0.2;
-	itmin[i] -= e; itmax[i] += e;
+        scalar_type e = (itmax[i]-itmin[i]) * 0.2;
+        itmin[i] -= e; itmax[i] += e;
       }
   }
 
@@ -200,9 +210,9 @@ namespace bgeot {
   pgeometric_trans prism_geotrans(size_type n, short_type k);
   pgeometric_trans prism_linear_geotrans(size_type n);
   pgeometric_trans product_geotrans(pgeometric_trans pg1,
-				    pgeometric_trans pg2);
+                                    pgeometric_trans pg2);
   pgeometric_trans linear_product_geotrans(pgeometric_trans pg1,
-					   pgeometric_trans pg2);
+                                           pgeometric_trans pg2);
 
   /**
      Get the geometric transformation from its string name.
@@ -211,7 +221,7 @@ namespace bgeot {
   pgeometric_trans geometric_trans_descriptor(std::string name);
   /**
      Get the string name of a geometric transformation.
-     
+
   List of possible names:
    * GT_PK(N,K)   : Transformation on simplexes, dim N, degree K
    * GT_QK(N,K)   : Transformation on parallelepipeds, dim N, degree K
@@ -225,20 +235,20 @@ namespace bgeot {
   std::string name_of_geometric_trans(pgeometric_trans p);
 
   /** norm of returned vector is the ratio between the face surface on
-   *  the reel element and the face surface on the reference element 
+   *  the real element and the face surface on the reference element
    *  IT IS NOT UNITARY
    *
    *  pt is the position of the evaluation point on the reference element
    */
   base_small_vector compute_normal(const geotrans_interpolation_context& c,
-				   size_type face);
+                                   size_type face);
 
   /** return the local basis (i.e. the normal in the first column, and the
-   *  tangent vectors in the other columns 
+   *  tangent vectors in the other columns
    */
-  base_matrix 
+  base_matrix
   compute_local_basis(const geotrans_interpolation_context& c,
-		      size_type face);
+                      size_type face);
     //@}
 
   /* ********************************************************************* */
@@ -249,14 +259,14 @@ namespace bgeot {
   class geotrans_precomp_;
   typedef boost::intrusive_ptr<const geotrans_precomp_> pgeotrans_precomp;
 
-  
+
   /**
    *  precomputed geometric transformation operations use this for
    *  repetitive evaluation of a geometric transformations on a set of
-   *  points "pspt" in the the reference convex which do not change.
+   *  points "pspt" in the reference convex which do not change.
    */
   class geotrans_precomp_ : virtual public dal::static_stored_object {
-  protected:      
+  protected:
     pgeometric_trans pgt;
     pstored_point_tab pspt;  /* a set of points in the reference elt*/
     mutable std::vector<base_vector> c;  /* precomputed values for the     */
@@ -266,25 +276,25 @@ namespace bgeot {
     mutable std::vector<base_matrix> hpc; /* precomputed values for hessian*/
                                           /*  of the transformation.       */
   public:
-    inline const base_vector &val(size_type i) const 
+    inline const base_vector &val(size_type i) const
     { if (c.empty()) init_val(); return c[i]; }
     inline const base_matrix &grad(size_type i) const
     { if (pc.empty()) init_grad(); return pc[i]; }
     inline const base_matrix &hessian(size_type i) const
     { if (hpc.empty()) init_hess(); return hpc[i]; }
-    
+
     /**
      *  Apply the geometric transformation from the reference convex to
      *  the convex whose vertices are stored in G, to the set of points
-     *  listed in pspt. 
+     *  listed in pspt.
      *  @param G any container of vertices of the transformed
      *  convex.
      *  @param pt_tab on output, the transformed points.
      */
-    template <typename CONT> 
+    template <typename CONT>
     void transform(const CONT& G,
-		   stored_point_tab& pt_tab) const;
-    template <typename CONT, typename VEC> 
+                   stored_point_tab& pt_tab) const;
+    template <typename CONT, typename VEC>
     void transform(const CONT& G, size_type ii, VEC& pt) const;
 
     base_node transform(size_type i, const base_matrix &G) const;
@@ -299,34 +309,34 @@ namespace bgeot {
     void init_hess() const;
 
     /**
-     *  precomputes a geometric transformation for a fixed set of 
-     *  points in the reference convex. 
+     *  precomputes a geometric transformation for a fixed set of
+     *  points in the reference convex.
      */
     friend pgeotrans_precomp
     geotrans_precomp(pgeometric_trans pg, pstored_point_tab ps,
-		     dal::pstatic_stored_object dep);
+                     dal::pstatic_stored_object dep);
 
   };
 
 
   pgeotrans_precomp
   geotrans_precomp(pgeometric_trans pg, pstored_point_tab ps,
-		   dal::pstatic_stored_object dep);
+                   dal::pstatic_stored_object dep);
 
-  template <typename CONT, typename VEC> 
+  template <typename CONT, typename VEC>
   void geotrans_precomp_::transform(const CONT& G, size_type j,
-				    VEC& pt) const {
+                                    VEC& pt) const {
     size_type k = 0;
     gmm::clear(pt);
     if (c.empty()) init_val();
-    for (typename CONT::const_iterator itk = G.begin(); 
+    for (typename CONT::const_iterator itk = G.begin();
          itk != G.end(); ++itk, ++k)
       gmm::add(gmm::scaled(*itk, c[j][k]), pt);
     GMM_ASSERT1(k == pgt->nb_points(),
-		"Wrong number of points in tranformation");
+                "Wrong number of points in tranformation");
   }
 
-  template <typename CONT> 
+  template <typename CONT>
   void geotrans_precomp_::transform(const CONT& G,
                                     stored_point_tab& pt_tab) const {
     if (c.empty()) init_val();
@@ -335,29 +345,29 @@ namespace bgeot {
       transform(G, j, pt_tab[j]);
     }
   }
-  
+
   void delete_geotrans_precomp(pgeotrans_precomp pgp);
 
   /**
    *  The object geotrans_precomp_pool Allow to allocate a certain number
-   *  of geotrans_precomp and automatically delete them when it is 
+   *  of geotrans_precomp and automatically delete them when it is
    *  deleted itself.
    */
   class geotrans_precomp_pool {
     std::set<pgeotrans_precomp> precomps;
 
   public :
-    
+
     pgeotrans_precomp operator()(pgeometric_trans pg,
-				 pstored_point_tab pspt) {
+                                 pstored_point_tab pspt) {
       pgeotrans_precomp p = geotrans_precomp(pg, pspt, 0);
       precomps.insert(p);
       return p;
     }
     ~geotrans_precomp_pool() {
       for (std::set<pgeotrans_precomp>::iterator it = precomps.begin();
-	   it != precomps.end(); ++it)
-	delete_geotrans_precomp(*it);
+           it != precomps.end(); ++it)
+        delete_geotrans_precomp(*it);
     }
   };
 
@@ -406,8 +416,8 @@ namespace bgeot {
     const base_matrix& G() const { return *G_; }
     /** get the Jacobian of the geometric trans (taken at point @c xref() ) */
     scalar_type J() const { if (J_ < scalar_type(0)) compute_J(); return J_; }
-    size_type N() const { if (have_G()) return G().nrows(); 
-      else if (have_xreal()) return xreal_.size(); 
+    size_type N() const { if (have_G()) return G().nrows();
+      else if (have_xreal()) return xreal_.size();
       else GMM_ASSERT2(false, "cannot get N"); return 0; }
     size_type ii() const { return ii_; }
     bgeot::pgeotrans_precomp pgp() const { return pgp_; }
@@ -416,16 +426,16 @@ namespace bgeot {
     /** change the current point (coordinates given in the reference convex) */
     void set_xref(const base_node& P);
     geotrans_interpolation_context();
-    geotrans_interpolation_context(bgeot::pgeotrans_precomp pgp__, 
-				   size_type ii__, 
-				   const base_matrix& G__); 
+    geotrans_interpolation_context(bgeot::pgeotrans_precomp pgp__,
+                                   size_type ii__,
+                                   const base_matrix& G__);
     geotrans_interpolation_context(bgeot::pgeometric_trans pgt__,
-				   bgeot::pstored_point_tab pspt__, 
-				   size_type ii__, 
-				   const base_matrix& G__); 
+                                   bgeot::pstored_point_tab pspt__,
+                                   size_type ii__,
+                                   const base_matrix& G__);
     geotrans_interpolation_context(bgeot::pgeometric_trans pgt__,
-				   const base_node& xref__,
-			 	   const base_matrix& G__);
+                                   const base_node& xref__,
+                                   const base_matrix& G__);
   };
 
 }  /* end of namespace bgeot.                                             */
diff --git a/src/getfem/bgeot_geotrans_inv.h b/src/getfem/bgeot_geotrans_inv.h
index 176ad7d..d93ecda 100644
--- a/src/getfem/bgeot_geotrans_inv.h
+++ b/src/getfem/bgeot_geotrans_inv.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file bgeot_geotrans_inv.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -96,7 +97,7 @@ namespace bgeot {
 		scalar_type IN_EPS=1e-12);
 
     /**
-       given the node on the real element, returne the node
+       given the node on the real element, returns the node
        on the reference element (even if it is outside of the ref. convex).
        
        This version will not throw an exception if the geometric
diff --git a/src/getfem/bgeot_imbricated_box.h b/src/getfem/bgeot_imbricated_box.h
index 7964f00..c9253ab 100644
--- a/src/getfem/bgeot_imbricated_box.h
+++ b/src/getfem/bgeot_imbricated_box.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file bgeot_imbricated_box.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/bgeot_kdtree.h b/src/getfem/bgeot_kdtree.h
index 1740e55..76356dc 100644
--- a/src/getfem/bgeot_kdtree.h
+++ b/src/getfem/bgeot_kdtree.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #ifndef BGEOT_KDTREE_H
 #define BGEOT_KDTREE_H
@@ -119,7 +120,7 @@ namespace bgeot {
     void points_in_box(kdtree_tab_type &ipts,
 		       const base_node &min, 
 		       const base_node &max);
-    /* assigns at ipt the index of the the nearest neighbor at location
+    /* assigns at ipt the index of the nearest neighbor at location
        pos and returns the square of the distance to this point*/
     scalar_type nearest_neighbor(index_node_pair &ipt,
                                  const base_node &pos);
diff --git a/src/getfem/bgeot_mesh.h b/src/getfem/bgeot_mesh.h
index 77cf6f7..ecfbd74 100644
--- a/src/getfem/bgeot_mesh.h
+++ b/src/getfem/bgeot_mesh.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file bgeot_mesh.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/bgeot_mesh_structure.h b/src/getfem/bgeot_mesh_structure.h
index 5f3fc25..6e55b83 100644
--- a/src/getfem/bgeot_mesh_structure.h
+++ b/src/getfem/bgeot_mesh_structure.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file bgeot_mesh_structure.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/bgeot_node_tab.h b/src/getfem/bgeot_node_tab.h
index f80a085..6de250a 100644
--- a/src/getfem/bgeot_node_tab.h
+++ b/src/getfem/bgeot_node_tab.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #ifndef BGEOT_NODE_TAB_H
 #define BGEOT_NODE_TAB_H
@@ -59,6 +60,7 @@ namespace bgeot {
       bool operator()(size_type i1, size_type i2) const;
       component_comp(const dal::dynamic_tas<base_node> &vbn_,
 		     const base_node &c_, unsigned dim);
+	  component_comp() : vbn(0), c(0) {}
     };
     typedef std::set<size_type, component_comp> sorter;
 
diff --git a/src/getfem/bgeot_permutations.h b/src/getfem/bgeot_permutations.h
index 6fe64b3..c837252 100644
--- a/src/getfem/bgeot_permutations.h
+++ b/src/getfem/bgeot_permutations.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 #include <vector>
 #include "bgeot_config.h"
 
diff --git a/src/getfem/bgeot_poly.h b/src/getfem/bgeot_poly.h
index b0d351b..1973644 100644
--- a/src/getfem/bgeot_poly.h
+++ b/src/getfem/bgeot_poly.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #ifndef BGEOT_POLY_H__
@@ -68,12 +69,21 @@ namespace bgeot
   public :
     typedef std::vector<short_type>::iterator iterator;
     typedef std::vector<short_type>::const_iterator const_iterator;
+    typedef std::vector<short_type>::reverse_iterator reverse_iterator;
+    typedef std::vector<short_type>::const_reverse_iterator const_reverse_iterator;
     short_type operator[](size_type idx) const { return v[idx]; }
     short_type& operator[](size_type idx) { dirty(); return v[idx]; }
+
     iterator begin() { dirty(); return v.begin(); }
     const_iterator begin() const { return v.begin(); }
     iterator end() { dirty(); return v.end(); }
     const_iterator end() const { return v.end(); }
+
+    reverse_iterator rbegin() { dirty(); return v.rbegin(); }
+    const_reverse_iterator rbegin() const { return v.rbegin(); }
+    reverse_iterator rend() { dirty(); return v.rend(); }
+    const_reverse_iterator rend() const { return v.rend(); }
+
     size_type size() const { return v.size(); }
     /// Gives the next power index 
     const power_index &operator ++();
@@ -177,7 +187,9 @@ namespace bgeot
     
     typedef typename std::vector<T>::iterator iterator;
     typedef typename std::vector<T>::const_iterator const_iterator;
-    
+    typedef typename std::vector<T>::reverse_iterator reverse_iterator;
+    typedef typename std::vector<T>::const_reverse_iterator const_reverse_iterator;
+
     /// Gives the degree of the polynomial
     short_type degree(void) const { return d; }
     /**  gives the degree of the polynomial, considering only non-zero
@@ -280,9 +292,9 @@ namespace bgeot
   { polynomial res = *this; res *= e; return res; }
   
   template<typename T> short_type polynomial<T>::real_degree(void) const {
-    const_iterator it = this->end() - 1, ite = this->begin() - 1;
+    const_reverse_iterator it = this->rbegin(), ite = this->rend();
     size_type l = this->size();
-    for ( ; it != ite; --it, --l) { if (*it != T(0)) break; }
+    for ( ; it != ite; ++it, --l) { if (*it != T(0)) break; }
     short_type dd = degree();
     while (dd > 0 && alpha(n, short_type(dd-1)) > l) --dd;
     return dd;
@@ -341,13 +353,13 @@ namespace bgeot
     
     power_index miq(Q.dim()), mia(dim()), mitot(dim());
     if (dim() > 0) miq[dim()-1] = Q.degree();
-    const_iterator itq = Q.end() - 1, ite = Q.begin() - 1;
-    for ( ; itq != ite; --itq, --miq)
+    const_reverse_iterator itq = Q.rbegin(), ite = Q.rend();
+    for ( ; itq != ite; ++itq, --miq) {
       if (*itq != T(0)) {
-	iterator ita = aux.end() - 1, itae = aux.begin() - 1;
+	reverse_iterator ita = aux.rbegin(), itae = aux.rend();
 	std::fill(mia.begin(), mia.end(), 0);
 	if (dim() > 0) mia[dim()-1] = aux.degree();
-	for ( ; ita != itae; --ita, --mia)
+	for ( ; ita != itae; ++ita, --mia)
 	  if (*ita != T(0)) {
 	    power_index::iterator mita = mia.begin(), mitq = miq.begin();
 	    power_index::iterator mit = mitot.begin(), mite = mia.end();
@@ -362,6 +374,7 @@ namespace bgeot
 	   
 	  }
       }
+    }
     return *this;
   }
 
@@ -373,13 +386,13 @@ namespace bgeot
     
     power_index miq(Q.dim()), mia(aux.dim()), mitot(dim());
     if (Q.dim() > 0) miq[Q.dim()-1] = Q.degree();
-    const_iterator itq = Q.end() - 1, ite = Q.begin() - 1;
-    for ( ; itq != ite; --itq, --miq)
+    const_reverse_iterator itq = Q.rbegin(), ite = Q.rend();
+    for ( ; itq != ite; ++itq, --miq)
       if (*itq != T(0)) {
-	iterator ita = aux.end() - 1, itae = aux.begin() - 1;
+	reverse_iterator ita = aux.rbegin(), itae = aux.rend();
 	std::fill(mia.begin(), mia.end(), 0); 
 	if (aux.dim() > 0) mia[aux.dim()-1] = aux.degree();
-	for ( ; ita != itae; --ita, --mia)
+	for ( ; ita != itae; ++ita, --mia)
 	  if (*ita != T(0)) {
 	    std::copy(mia.begin(), mia.end(), mitot.begin());
 	    std::copy(miq.begin(), miq.end(), mitot.begin() + aux.dim());
@@ -409,10 +422,11 @@ namespace bgeot
     
      iterator it = this->begin(), ite = this->end();
      power_index mi(dim()); 
-     for ( ; it != ite; ++it, ++mi) {
+     for ( ; it != ite; ++it) {
        if ((*it) != T(0) && mi[k] > 0)
          { mi[k]--; (*this)[mi.global_index()] = (*it) * T(mi[k] + 1); mi[k]++; }
        *it = T(0);
+       ++mi;
      }
      if (d > 0) change_degree(short_type(d-1));
   }
diff --git a/src/getfem/bgeot_poly_composite.h b/src/getfem/bgeot_poly_composite.h
index 89d99ea..0e1a1c2 100644
--- a/src/getfem/bgeot_poly_composite.h
+++ b/src/getfem/bgeot_poly_composite.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file bgeot_poly_composite.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/bgeot_rtree.h b/src/getfem/bgeot_rtree.h
index 259b7fe..c79ef49 100644
--- a/src/getfem/bgeot_rtree.h
+++ b/src/getfem/bgeot_rtree.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #ifndef BGEOT_RTREE_H
 #define BGEOT_RTREE_H
diff --git a/src/getfem/bgeot_small_vector.h b/src/getfem/bgeot_small_vector.h
index 6846662..9c646e5 100644
--- a/src/getfem/bgeot_small_vector.h
+++ b/src/getfem/bgeot_small_vector.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file bgeot_small_vector.h
    @author  Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/bgeot_sparse_tensors.h b/src/getfem/bgeot_sparse_tensors.h
index 9c8be1a..b187988 100644
--- a/src/getfem/bgeot_sparse_tensors.h
+++ b/src/getfem/bgeot_sparse_tensors.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file bgeot_sparse_tensors.h
    @author  Julien Pommier <Julien.Pommier at insa-toulouse.fr>
@@ -83,6 +84,13 @@ namespace bgeot {
     tensor_ranges() : std::vector<index_type>() {}
     tensor_ranges(size_type n) : std::vector<index_type>(n) {}
     tensor_ranges(size_type n, index_type V) : std::vector<index_type>(n,V) {}
+    bool is_zero_size() const
+    {
+      for (dim_type i=0; i < this->size(); ++i)
+        if ((*this)[i] == 0)
+          return true;
+      return false;
+    }
   };
   typedef std::vector<stride_type> tensor_strides;
   typedef std::vector<dim_type> index_set;
@@ -235,14 +243,14 @@ namespace bgeot {
       eval_strides();
     }
     void set_full(index_type dim, index_type range) {
-      assert(range);
+      // assert(range); // not sure if permitting range==0 can have any side effects
       r.resize(1); r[0] = range;
       idxs.resize(1); idxs[0] = dim_type(dim);
       m.assign(range, true); set_card(range);
       eval_strides();
     }
     void set_empty(index_type dim, index_type range) {
-      assert(range);
+      // assert(range); // not sure if permitting range==0 can have any side effects
       r.resize(1); r[0] = range;
       idxs.resize(1); idxs[0] = dim_type(dim);
       m.assign(range,false); set_card(0);
diff --git a/src/getfem/bgeot_tensor.h b/src/getfem/bgeot_tensor.h
index 2eabca7..ce028dc 100644
--- a/src/getfem/bgeot_tensor.h
+++ b/src/getfem/bgeot_tensor.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file bgeot_tensor.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -187,7 +188,7 @@ namespace bgeot {
 	sizes_ = c; coeff.resize(c.size());
 	multi_index::iterator p = coeff.begin(), pe = coeff.end();
 	for ( ; p != pe; ++p, ++it) { *p = short_type(d); d *= *it; }
-	resize(d);
+	this->resize(d);
       }
 
       void adjust_sizes(const multi_index &mi) {
diff --git a/src/getfem/bgeot_vector.h b/src/getfem/bgeot_vector.h
index 615567a..d24779c 100644
--- a/src/getfem/bgeot_vector.h
+++ b/src/getfem/bgeot_vector.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1995-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file bgeot_vector.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/dal_backtrace.h b/src/getfem/dal_backtrace.h
index d61561a..6d28196 100644
--- a/src/getfem/dal_backtrace.h
+++ b/src/getfem/dal_backtrace.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1995-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file dal_backtrace.h
    @author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/dal_basic.h b/src/getfem/dal_basic.h
index 675ebf1..b16926a 100644
--- a/src/getfem/dal_basic.h
+++ b/src/getfem/dal_basic.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1995-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file dal_basic.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/dal_bit_vector.h b/src/getfem/dal_bit_vector.h
index 87e3918..7728f06 100644
--- a/src/getfem/dal_bit_vector.h
+++ b/src/getfem/dal_bit_vector.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1995-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #ifndef DAL_BIT_VECTOR_H__
diff --git a/src/getfem/dal_config.h b/src/getfem/dal_config.h
index e1b2fcc..e803432 100644
--- a/src/getfem/dal_config.h
+++ b/src/getfem/dal_config.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file dal_config.h
    @brief defines and typedefs for namespace dal
@@ -41,6 +42,9 @@
 
 namespace dal {
 
+  using std::endl; using std::cout; using std::cerr;
+  using std::ends; using std::cin;
+
   // For compatibility with Getfem 2.0
 
   using gmm::dimension_error;
@@ -61,7 +65,6 @@ namespace dal {
   using gmm::lexicographical_less;
   using gmm::approx_less;
   using gmm::uclock_sec;
-
   
   inline void DAL_THROW() IS_DEPRECATED;
   inline void DAL_THROW() {}
diff --git a/src/getfem/dal_naming_system.h b/src/getfem/dal_naming_system.h
index 21e473e..d8bf5f9 100644
--- a/src/getfem/dal_naming_system.h
+++ b/src/getfem/dal_naming_system.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #ifndef DAL_NAMING_SYSTEM_H
 #define DAL_NAMING_SYSTEM_H
@@ -110,7 +111,7 @@ namespace dal {
 		   bool throw_if_not_found = true)
     { gmm::standard_locale sl; return method_(name, i, throw_if_not_found); }
     naming_system(std::string pr) : prefix(pr) {}
-
+    bool delete_method(std::string name);
   };
 
   template <class METHOD>
@@ -308,5 +309,22 @@ namespace dal {
 
   }
 
+  /**deletion of static_stored_object in the naming system*/
+  template <class METHOD>
+  bool naming_system<METHOD>::delete_method(std::string name) 
+  {
+
+    pmethod pm = 0;
+
+	method_key nname(name);
+	pstatic_stored_object o = search_stored_object(nname);
+
+	if (!o) return false;
+	pm = stored_cast<METHOD>(o);
+	pstatic_stored_object_key k = key_of_stored_object(pm);
+	dal::del_stored_object(pm, false);
+	return true;
+  }
+
 }
 #endif
diff --git a/src/getfem/dal_shared_ptr.h b/src/getfem/dal_shared_ptr.h
index ff4fc7f..501f133 100644
--- a/src/getfem/dal_shared_ptr.h
+++ b/src/getfem/dal_shared_ptr.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file dal_shared_ptr.h
    @author  Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/dal_singleton.h b/src/getfem/dal_singleton.h
index faf60af..21de9e1 100644
--- a/src/getfem/dal_singleton.h
+++ b/src/getfem/dal_singleton.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file dal_singleton.h
    @author  Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/dal_static_stored_objects.h b/src/getfem/dal_static_stored_objects.h
index ce53dce..8bc3d73 100644
--- a/src/getfem/dal_static_stored_objects.h
+++ b/src/getfem/dal_static_stored_objects.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /** @file dal_static_stored_objects.h 
     @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/dal_tas.h b/src/getfem/dal_tas.h
index 48224b3..5fdb912 100644
--- a/src/getfem/dal_tas.h
+++ b/src/getfem/dal_tas.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1995-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file dal_tas.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/dal_tree_sorted.h b/src/getfem/dal_tree_sorted.h
index 086754d..c07b437 100644
--- a/src/getfem/dal_tree_sorted.h
+++ b/src/getfem/dal_tree_sorted.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1995-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file dal_tree_sorted.h
    @author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_Coulomb_friction.h b/src/getfem/getfem_Coulomb_friction.h
index 87dd0d2..8c01dce 100644
--- a/src/getfem/getfem_Coulomb_friction.h
+++ b/src/getfem/getfem_Coulomb_friction.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /** @file getfem_Coulomb_friction.h
     @author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -38,356 +39,13 @@
 #define GETFEM_COULOMB_FRICTION_H__
 
 #include "getfem_modeling.h"
-#include "getfem_models.h"
-
-namespace getfem {
 
- typedef gmm::row_matrix<gmm::rsvector<scalar_type> > CONTACT_B_MATRIX;
-
-  /** Add a frictionless contact condition to the model. If U is the vector
-      of degrees of freedom on which the unilateral constraint is applied,
-      the matrix `BN` have to be such that this condition is defined by
-      $B_N U \le 0$. The constraint is prescribed thank to a multiplier
-      `multname_n` whose dimension should be equal to the number of lines of
-      `BN`. The augmentation parameter `r` should be chosen in a range of
-      acceptabe values (see Getfem user documentation). `dataname_gap` is an
-      optional parameter representing the initial gap. It can be a single value
-      or a vector of value. `dataname_alpha` is an optional homogenization
-      parameter for the augmentation parameter
-      (see Getfem user documentation). The parameter `symmetrized` indicates
-      that the symmetry of the tangent matrix will be kept or not. 
-  */
-  size_type add_basic_contact_brick
-  (model &md, const std::string &varname_u, const std::string &multname_n,
-   const std::string &dataname_r, CONTACT_B_MATRIX &BN,
-   std::string dataname_gap = "", std::string dataname_alpha = "",
-   bool symmetrized = false, bool Hughes_stabilized = false);
-
-
-  /** Add a contact with friction condition to the model. If U is the vector
-      of degrees of freedom on which the condition is applied,
-      the matrix `BN` have to be such that the contact condition is defined
-      by $B_N U \le 0$ and `BT` have to be such that the relative tangential
-      displacement is $B_T U$. The matrix `BT` should have as many rows as
-      `BN` multiplied b $d-1$ where $d$ is the domain dimension.
-      The contact condition is prescribed thank to a multiplier
-      `multname_n` whose dimension should be equal to the number of rows of
-      `BN` and the friction condition by a mutliplier `multname_t` whise size
-      should be the number of rows of `BT`.
-      The parameter `dataname_friction_coeff` describe the friction
-      coefficient. It could be a scalar or a vector describing the
-      coefficient on each contact condition. 
-      The augmentation parameter
-      `r` should be chosen in a range of acceptabe values
-      (see Getfem user documentation). `dataname_gap` is an
-      optional parameter representing the initial gap. It can be a single value
-      or a vector of value. `dataname_alpha` is an optional homogenization
-      parameter for the augmentation parameter
-      (see Getfem user documentation). The parameter `symmetrized` indicates
-      that a part of the symmetry of the tangent matrix will be kept or not
-      (except for the coupling bewteen contact and friction). 
-  */
-  size_type add_basic_contact_with_friction_brick
-  (model &md, const std::string &varname_u, const std::string &multname_n,
-   const std::string &multname_t, const std::string &dataname_r,
-   CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT,
-   std::string dataname_friction_coeff, 
-   std::string dataname_gap, std::string dataname_alpha,
-   bool symmetrized, bool Hughes_stabilized = false) ;
-
-  /** Can be used to change the matrix BN of a basic contact/friction brick
-   */
-  CONTACT_B_MATRIX &contact_brick_set_BN(model &md, size_type indbrick);
-  
-  /** Can be used to change the matrix DN of a basic contact/friction brick
-   */
-  CONTACT_B_MATRIX &contact_brick_set_DN(model &md, size_type indbrick);
+// header files for the new brick system
 
- /** Can be used to change the matrix DT of a basic contact/friction brick
-   */
-  CONTACT_B_MATRIX &contact_brick_set_DT(model &md, size_type indbrick);
+#include "getfem_contact_and_friction_nodal.h"
+#include "getfem_contact_and_friction_integral.h"
 
-  /** Can be used to change the matrix BT of a basic contact/friction brick
-   */
-  CONTACT_B_MATRIX &contact_brick_set_BT(model &md, size_type indbrick);
-
-/** Add Hughes stabilized frictionless contact condition to the model. If U 
-    is the vector of degrees of freedom on which the unilateral constraint is applied, 
-    and Lambda the multiplier Vector of contact force.Then Hughes stabilizedfrictionless
-    contact condition is difined by the matrix `BN` and 'DN' have to be such that this
-    condition is defined by $B_N U - DN Lambda \le 0$. where 'DN' is the masse matrix 
-    relative to stabilzed term.
-    The augmentation parameter `r` should be chosen in a range of acceptabe values. 
-    `dataname_gap` is an optional parameter representing the initial gap. It can be
-    a single value or a vector of value. `dataname_alpha` is an optional homogenization 
-    parameter for the augmentation parameter. The parameter `symmetrized` indicates that 
-    a part of the symmetry of the tangent matrix will be kept or not
-  */
-   inline size_type add_Hughes_stab_basic_contact_brick
-   (model &md, const std::string &varname_u, const std::string &multname_n,
-    const std::string &dataname_r, CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &DN,
-    std::string dataname_gap="", std::string dataname_alpha="",
-    bool symmetrized=false) {
-
-    size_type indbrick = add_basic_contact_brick
-      (md, varname_u, multname_n, dataname_r, BN,
-       dataname_gap, dataname_alpha, symmetrized, true);
-    gmm::resize(contact_brick_set_DN(md, indbrick),
-                gmm::mat_nrows(DN), gmm::mat_ncols(DN));
-    gmm::copy(DN, contact_brick_set_DN(md, indbrick));
-    return indbrick;
-   } 
-
-  /**  Add Hughes stabilized friction contact condition to the model. If U is the vector
-      of degrees of freedom on which the condition is applied,
-      the matrix `BN` have to be such that the contact condition is defined
-      by $B_N U+DN Lambda \le 0$ (where 'DN' is the masse matrix 
-      relative to stabilzed term) and `BT` have to be such that the relative tangential
-      displacement is $B_T U$. The matrix `BT` should have as many rows as
-      `BN` multiplied b $d-1$ where $d$ is the domain dimension.
-      The contact condition is prescribed thank to a multiplier
-      `multname_n` whose dimension should be equal to the number of rows of
-      `BN` and the friction condition by a mutliplier `multname_t` whise size
-      should be the number of rows of `BT`.
-      The parameter `dataname_friction_coeff` describe the friction
-      coefficient. It could be a scalar or a vector describing the
-      coefficient on each contact condition. 
-      The augmentation parameter
-      `r` should be chosen in a range of acceptabe values
-      (see Getfem user documentation). `dataname_gap` is an
-      optional parameter representing the initial gap. It can be a single value
-      or a vector of value. `dataname_alpha` is an optional homogenization
-      parameter for the augmentation parameter
-      (see Getfem user documentation). The parameter `symmetrized` indicates
-      that a part of the symmetry of the tangent matrix will be kept or not
-      (except for the coupling bewteen contact and friction). 
-   **/
-  inline size_type add_Hughes_stab_friction_contact_brick
-  (model &md, const std::string &varname_u, const std::string &multname_n,
-   const std::string &multname_t, const std::string &dataname_r,
-   CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT, CONTACT_B_MATRIX &DN,CONTACT_B_MATRIX &DT,
-   std::string dataname_friction_coeff, 
-   std::string dataname_gap="", std::string dataname_alpha="",
-   bool symmetrized=false){
-  
-    size_type indbrick =add_basic_contact_with_friction_brick
-      (md, varname_u, multname_n, multname_t, dataname_r, BN, BT,
-       dataname_friction_coeff, dataname_gap, dataname_alpha, symmetrized, true);
-    gmm::resize(contact_brick_set_DN(md, indbrick),
-		gmm::mat_nrows(DN), gmm::mat_ncols(DN));
-    gmm::copy(DN, contact_brick_set_DN(md, indbrick));
-    
-    gmm::resize(contact_brick_set_DT(md, indbrick),
-		gmm::mat_nrows(DT), gmm::mat_ncols(DT));
-    gmm::copy(DT, contact_brick_set_DT(md, indbrick));
-    return indbrick;
-  } 
-
-
-
-  /** Add a frictionless contact condition with a rigid obstacle
-      to the model. The condition is applied on the variable `varname_u`
-      on the boundary corresponding to `region`. The rigid obstacle should
-      be described with the string `obstacle` being a signed distance to
-      the obstacle. This string should be an expression where the coordinates
-      are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
-      obstacle correspond to $z \le 0$, the corresponding signed distance will
-      be simply "z". `multname_n` should be a fixed size variable whose size is
-      the number of degrees of freedom on boundary `region`. It represents the
-      contact equivalent nodal forces. 
-      The augmentation parameter `r` should be chosen in a
-      range of acceptabe values (close to the Young modulus of the elastic
-      body, see Getfem user documentation). The
-      parameter `symmetrized` indicates that the symmetry of the tangent
-      matrix will be kept or not. Basically, this brick computes the matrix BN
-      and the vectors gap and alpha and calls the basic contact brick.
-  */
-  size_type add_contact_with_rigid_obstacle_brick
-  (model &md, const mesh_im &mim, const std::string &varname_u,
-   const std::string &multname_n, const std::string &dataname_r,
-   size_type region, const std::string &obstacle, bool symmetrized = false);
-
-
-  /** Add a contact with friction condition with a rigid obstacle
-      to the model. The condition is applied on the variable `varname_u`
-      on the boundary corresponding to `region`. The rigid obstacle should
-      be described with the string `obstacle` being a signed distance to
-      the obstacle. This string should be an expression where the coordinates
-      are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
-      obstacle correspond to $z \le 0$, the corresponding signed distance will
-      be simply "z". `multname_n` should be a fixed size variable whose size is
-      the number of degrees of freedom on boundary `region`. It represents the
-      contact equivalent nodal forces. 
-      `multname_t` should be a fixed size variable whose size is
-      the number of degrees of freedom on boundary `region` multiplied by
-      $d-1$ where $d$ is the domain dimension. It represents the
-      friction equivalent nodal forces.
-      The augmentation parameter `r` should be chosen in a
-      range of acceptabe values (close to the Young modulus of the elastic
-      body, see Getfem user documentation). `dataname_friction_coeff` is
-      the friction coefficient. It could be a scalar or a vector of values
-      representing the friction coefficient on each contact node.
-      The parameter `symmetrized` indicates that the symmetry of the tangent
-      matrix will be kept or not. Basically, this brick computes the matrix BN
-      and the vectors gap and alpha and calls the basic contact brick.
-  */
-  size_type add_contact_with_friction_with_rigid_obstacle_brick
-  (model &md, const mesh_im &mim, const std::string &varname_u,
-   const std::string &multname_n, const std::string &multname_t,
-   const std::string &dataname_r, const std::string &dataname_friction_coeff,
-   size_type region, const std::string &obstacle, bool symmetrized); 
-
-
-  /** Add a frictionless contact condition between two faces of one or two
-      elastic bodies. The condition is applied on the variable `varname_u` or
-      the variables `varname_u1` and `varname_u2` depending if a single or
-      two distinct displacement fields are given. Vectors `rg1` and `rg2`
-      contain pairs of regions expected to come in contact with each other. In
-      case of a single region per side, `rg1` and `rg2` can be given as normal
-      integers. In the single displacement variable case the regions defined in
-      both `rg1` and `rg2` refer to the variable `varname_u`. In the case of
-      two displacement variables, `rg1` refers to `varname_u1` and `rg2` refers
-      to `varname_u2`. `multname_n` should be a fixed size variable whose size
-      is the number of degrees of freedom on those regions among the ones
-      defined in `rg1` and `rg2` which are characterized as "slaves". It
-      represents the contact equivalent nodal forces. The augmentation
-      parameter `r` should be chosen in a range of acceptabe values (close to
-      the Young modulus of the elastic body, see Getfem user documentation).
-      The optional parameters `slave1` and `slave2` declare if the regions
-      defined in `rg1` and `rg2` are correspondingly considered as "slaves".
-      By default `slave1` is true and `slave2` is false, i.e. `rg1` contains
-      the slave surfaces, while 'rg2' the master surfaces. Preferably only
-      one of `slave1` and `slave2` is set to true. The parameter `symmetrized`
-      indicates that the symmetry of the tangent matrix will be kept or not.
-      Basically, this brick computes the matrix BN and the vectors gap and
-      alpha and calls the basic contact brick.
-  */
-  size_type add_nonmatching_meshes_contact_brick
-  (model &md, const mesh_im &mim1, const mesh_im &mim2,
-   const std::string &varname_u1, const std::string &varname_u2,
-   std::string &multname_n, const std::string &dataname_r,
-   const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
-   bool slave1=true, bool slave2=false, bool symmetrized=false);
-
-  inline size_type add_nonmatching_meshes_contact_brick
-  (model &md, const mesh_im &mim1, const mesh_im &mim2,
-   const std::string &varname_u1, const std::string &varname_u2,
-   std::string &multname_n, const std::string &dataname_r,
-   size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
-   bool symmetrized=false) {
-
-    std::vector<size_type> vrg1(1,rg1);
-    std::vector<size_type> vrg2(1,rg2);
-    return add_nonmatching_meshes_contact_brick
-      (md, mim1, mim2, varname_u1, varname_u2, multname_n, dataname_r,
-       vrg1, vrg2, slave1, slave2, symmetrized);
-  }
-
-  inline size_type add_nonmatching_meshes_contact_brick
-  (model &md, const mesh_im &mim, const std::string &varname_u,
-   std::string &multname_n, const std::string &dataname_r,
-   const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
-   bool slave1=true, bool slave2=false, bool symmetrized=false) {
-
-    return add_nonmatching_meshes_contact_brick
-      (md, mim, mim, varname_u, varname_u, multname_n, dataname_r,
-       rg1, rg2, slave1, slave2, symmetrized);
-  }
-
-  inline size_type add_nonmatching_meshes_contact_brick
-  (model &md, const mesh_im &mim, const std::string &varname_u,
-   std::string &multname_n, const std::string &dataname_r,
-   size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
-   bool symmetrized=false) {
-
-    std::vector<size_type> vrg1(1,rg1);
-    std::vector<size_type> vrg2(1,rg2);
-    return add_nonmatching_meshes_contact_brick
-      (md, mim, mim, varname_u, varname_u, multname_n, dataname_r,
-       vrg1, vrg2, slave1, slave2, symmetrized);
-  }
-
-
-  /** Add a contact with friction condition between two faces of one or two
-      elastic bodies. The condition is applied on the variable `varname_u` or
-      the variables `varname_u1` and `varname_u2` depending if a single or
-      two distinct displacement fields are given. Vectors `rg1` and `rg2`
-      contain pairs of regions expected to come in contact with each other. In
-      case of a single region per side, `rg1` and `rg2` can be given as normal
-      integers. In the single displacement variable case the regions defined in
-      both `rg1` and `rg2` refer to the variable `varname_u`. In the case of
-      two displacement variables, `rg1` refers to `varname_u1` and `rg2` refers
-      to `varname_u2`. `multname_n` should be a fixed size variable whose size
-      is the number of degrees of freedom on those regions among the ones
-      defined in `rg1` and `rg2` which are characterized as "slaves". It
-      represents the contact equivalent nodal normal forces. `multname_t`
-      should be a fixed size variable whose size corresponds to the size of
-      `multname_n` multiplied by qdim - 1 . It represents the contact
-      equivalent nodal tangent (frictional) forces. The augmentation parameter
-      `r` should be chosen in a range of acceptabe values (close to the Young
-      modulus of the elastic body, see Getfem user documentation). The friction
-      coefficient stored in the parameter `friction_coeff` is either a single
-      value or a vector of the same size as `multname_n`. The optional
-      parameters `slave1` and `slave2` declare if the regions defined in `rg1`
-      and `rg2` are correspondingly considered as "slaves". By default `slave1`
-      is true and `slave2` is false, i.e. `rg1` contains the slave surfaces,
-      while 'rg2' the master surfaces. Preferably only one of `slave1` and
-      `slave2` is set to true. The parameter `symmetrized` indicates that the
-      symmetry of the tangent matrix will be kept or not.
-      Basically, this brick computes the matrices BN and BT as well the vectors
-      gap and alpha and calls the basic contact brick.
-  */
-  size_type add_nonmatching_meshes_contact_with_friction_brick
-  (model &md, const mesh_im &mim1, const mesh_im &mim2,
-   const std::string &varname_u1, const std::string &varname_u2,
-   std::string &multname_n, std::string &multname_t,
-   const std::string &dataname_r, const std::string &dataname_friction_coeff,
-   const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
-   bool slave1=true, bool slave2=false, bool symmetrized=false);
-
-  inline size_type add_nonmatching_meshes_contact_with_friction_brick
-  (model &md, const mesh_im &mim1, const mesh_im &mim2,
-   const std::string &varname_u1, const std::string &varname_u2,
-   std::string &multname_n, std::string &multname_t,
-   const std::string &dataname_r, const std::string &dataname_friction_coeff,
-   size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
-   bool symmetrized=false) {
-
-    std::vector<size_type> vrg1(1,rg1);
-    std::vector<size_type> vrg2(1,rg2);
-    return add_nonmatching_meshes_contact_with_friction_brick
-      (md, mim1, mim2, varname_u1, varname_u2, multname_n, multname_t,
-       dataname_r, dataname_friction_coeff,
-       vrg1, vrg2, slave1, slave2, symmetrized);
-  }
-
-  inline size_type add_nonmatching_meshes_contact_with_friction_brick
-  (model &md, const mesh_im &mim, const std::string &varname_u,
-   std::string &multname_n, std::string &multname_t,
-   const std::string &dataname_r, const std::string &dataname_friction_coeff,
-   const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
-   bool slave1=true, bool slave2=false, bool symmetrized=false) {
-
-    return add_nonmatching_meshes_contact_with_friction_brick
-      (md, mim, mim, varname_u, varname_u, multname_n, multname_t,
-       dataname_r, dataname_friction_coeff,
-       rg1, rg2, slave1, slave2, symmetrized);
-  }
-
-  inline size_type add_nonmatching_meshes_contact_with_friction_brick
-  (model &md, const mesh_im &mim, const std::string &varname_u,
-   std::string &multname_n, std::string &multname_t,
-   const std::string &dataname_r, const std::string &dataname_friction_coeff,
-   size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
-   bool symmetrized=false) {
-
-    std::vector<size_type> vrg1(1,rg1);
-    std::vector<size_type> vrg2(1,rg2);
-    return add_nonmatching_meshes_contact_with_friction_brick
-      (md, mim, mim, varname_u, varname_u, multname_n, multname_t,
-       dataname_r, dataname_friction_coeff,
-       vrg1, vrg2, slave1, slave2, symmetrized);
-  }
+namespace getfem {
 
 
 //===========================================================================
@@ -405,7 +63,7 @@ namespace getfem {
    */
   template<typename MODEL_STATE = standard_model_state>
   class mdbrick_Coulomb_friction : public mdbrick_abstract<MODEL_STATE>  {
-    
+
     TYPEDEF_MODEL_STATE_TYPES;
 
     mdbrick_abstract<MODEL_STATE> &sub_problem;
@@ -413,21 +71,23 @@ namespace getfem {
 
     T_MATRIX BN, BT;
     typedef gmm::row_matrix<gmm::rsvector<value_type> > RT_MATRIX;
+    typedef gmm::dense_matrix<bool> CH_MATRIX;
     RT_MATRIX AUG_M; // For Hansbo augmentation.
+    CH_MATRIX CH_M; // For determining the Jacobian manually; only for 2D.
     VECTOR gap, threshold, WT, WN, friction_coef, RLN, RLT;
     value_type r, alpha, beta;
     size_type d, nbc;
 
     const mesh_fem *mf_u;
     gmm::sub_interval SUBU, SUBN, SUBT;
-    
+
     bool Tresca_version, symmetrized, contact_only, really_stationary;
 
     template<typename VEC> static void ball_projection(const VEC &x,
                                                        value_type radius) {
       value_type a = gmm::vect_norm2(x);
       if (radius <= 0) gmm::clear(const_cast<VEC&>(x));
-      else if (a > radius) gmm::scale(const_cast<VEC&>(x), radius/a); 
+      else if (a > radius) gmm::scale(const_cast<VEC&>(x), radius/a);
     }
 
     template<class VEC, class VECR>
@@ -444,7 +104,7 @@ namespace getfem {
       if (radius <= value_type(0)) { gmm::clear(g); return; }
       gmm::copy(gmm::identity_matrix(), g);
       value_type a = gmm::vect_norm2(x);
-      if (a >= radius) { 
+      if (a >= radius) {
         gmm::scale(g, radius/a);
         // gmm::rank_one_update(g, gmm::scaled(x, -radius/(a*a*a)), x);
         for (size_type i = 0; i < x.size(); ++i)
@@ -461,7 +121,7 @@ namespace getfem {
       SUBN = gmm::sub_interval(i0 + sub_problem.nb_dof(), gmm::mat_nrows(BN));
       SUBT = gmm::sub_interval(i0 + sub_problem.nb_dof() + gmm::mat_nrows(BN),
                                gmm::mat_nrows(BT));
-      gmm::add(gmm::sub_vector(MS.state(), SUBN), gmm::scaled(gap, r), RLN);
+      gmm::add(gmm::sub_vector(MS.state(), SUBN), gmm::scaled(gap, r*alpha), RLN);
       if (gmm::vect_size(WN) > 0)
         gmm::mult_add(BN, gmm::scaled(WN, -r*alpha), RLN);
       gmm::mult_add(BN, gmm::scaled(gmm::sub_vector(MS.state(), SUBU),
@@ -495,21 +155,28 @@ namespace getfem {
     }
 
   public :
-    
+
     inline size_type nb_contact_nodes(void) const
     { return gmm::mat_nrows(BN); }
-    
+
     virtual void do_compute_tangent_matrix(MODEL_STATE &MS, size_type i0,
                                            size_type) {
       precomp(MS, i0);
-      
+
       RT_MATRIX BBN(gmm::mat_nrows(BN), gmm::mat_ncols(BN));
       RT_MATRIX MM(nb_contact_nodes(), nb_contact_nodes());
       gmm::copy(gmm::scaled(BN, -alpha), BBN);
       if (gmm::mat_nrows(AUG_M) > 0)
         gmm::copy(gmm::scaled(AUG_M, -value_type(1)), MM);
       for (size_type i=0; i < nb_contact_nodes(); ++i) {
-        if (RLN[i] >= value_type(0)) {
+        if (gmm::mat_nrows(CH_M) > 0) {
+          if (!CH_M(i, 0)) {
+            gmm::clear(BBN[i]);
+            if (gmm::mat_nrows(AUG_M) > 0) gmm::clear(MM[i]);
+            MM(i, i) = -value_type(1)/r;
+          }
+        }
+        else if (RLN[i] >= value_type(0)) {
           gmm::clear(BBN[i]);
           if (gmm::mat_nrows(AUG_M) > 0) gmm::clear(MM[i]);
           MM(i, i) = -value_type(1)/r;
@@ -535,37 +202,49 @@ namespace getfem {
 //        MS.tangent_matrix()(SUBN.first()+i, SUBN.first()+i)=-value_type(1)/r;
 //      }
 //       }
-      
+
       if (!contact_only) {
         base_matrix pg(d-1, d-1);
         base_vector vg(d-1);
 
         RT_MATRIX BBT(gmm::mat_nrows(BT), gmm::mat_ncols(BT));
         gmm::dense_matrix<value_type> BTi(d-1,  gmm::mat_ncols(BT));
-        
+
         for (size_type i=0; i < nb_contact_nodes(); ++i) {
           gmm::sub_interval SUBI(i*(d-1), d-1);
           gmm::sub_interval SUBJ(SUBT.first()+i*(d-1),(d-1));
           gmm::sub_interval SUBJJ(i*(d-1),(d-1));
           value_type th = Tresca_version ? threshold[i]
             : - (MS.state())[SUBN.first()+i] * friction_coef[i];
-          
-          ball_projection_grad(gmm::sub_vector(RLT, SUBI), th, pg);
+          std::vector<double> rlt_CH(1);
+
+          if (mat_nrows(CH_M) > 0) {
+            if (!CH_M(i, 0)) th = 0.0;
+            else th = 1.0;
+            if (!CH_M(i, 1)) rlt_CH[0] = -2.0;
+            else if (!CH_M(i, 2)) rlt_CH[0] = 2.0;
+            else rlt_CH[0] = 0.0;
+            ball_projection_grad(rlt_CH, th, pg);
+          } else
+            ball_projection_grad(gmm::sub_vector(RLT, SUBI), th, pg);
           if (!really_stationary)
-            gmm::mult(gmm::scaled(pg, -beta), 
+            gmm::mult(gmm::scaled(pg, -beta),
                       gmm::sub_matrix(BT, SUBI,
-                                      gmm::sub_interval(0,gmm::mat_ncols(BT))),
+                                      gmm::sub_interval(0, gmm::mat_ncols(BT))),
                       BTi);
           gmm::copy(BTi, gmm::sub_matrix(BBT, SUBJJ, SUBU));
 
           if (!Tresca_version) {
-            ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
+            if (mat_nrows(CH_M) > 0)
+              ball_projection_grad_r(rlt_CH, th, vg);
+            else
+              ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
             for (size_type k = 0; k < d-1; ++k)
               MS.tangent_matrix()(SUBT.first()+i*(d-1)+k, SUBN.first()+i)
                 = - friction_coef[i] * vg[k] / r;
           }
           for (size_type j = 0; j < d-1; ++j) pg(j,j) -= value_type(1);
-          gmm::copy(gmm::scaled(pg,value_type(1)/r), 
+          gmm::copy(gmm::scaled(pg,value_type(1)/r),
                     gmm::sub_matrix(MS.tangent_matrix(), SUBJ));
         }
         T_MATRIX BBBT(gmm::mat_nrows(BT), gmm::mat_ncols(BT));
@@ -576,20 +255,20 @@ namespace getfem {
 //       if (!contact_only) {
 //      base_matrix pg(d-1, d-1);
 //      base_vector vg(d-1);
-        
+
 //      for (size_type i=0; i < nb_contact_nodes(); ++i) {
 //        gmm::sub_interval SUBI(i*(d-1), d-1);
 //        gmm::sub_interval SUBJ(SUBT.first()+i*(d-1),(d-1));
 //        value_type th = Tresca_version ? threshold[i]
 //          : - (MS.state())[SUBN.first()+i] * friction_coef[i];
-          
+
 //        ball_projection_grad(gmm::sub_vector(RLT, SUBI), th, pg);
 //        if (!really_stationary)
-//          gmm::mult(gmm::scaled(pg, -beta), 
+//          gmm::mult(gmm::scaled(pg, -beta),
 //                    gmm::sub_matrix(BT, SUBI,
 //                                    gmm::sub_interval(0,gmm::mat_ncols(BT))),
 //                    gmm::sub_matrix(MS.tangent_matrix(), SUBJ, SUBU));
-          
+
 //        if (!Tresca_version) {
 //          ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
 //          for (size_type k = 0; k < d-1; ++k)
@@ -597,15 +276,15 @@ namespace getfem {
 //              = - friction_coef[i] * vg[k] / r;
 //        }
 //        for (size_type j = 0; j < d-1; ++j) pg(j,j) -= value_type(1);
-//        gmm::copy(gmm::scaled(pg,value_type(1)/r), 
+//        gmm::copy(gmm::scaled(pg,value_type(1)/r),
 //                  gmm::sub_matrix(MS.tangent_matrix(), SUBJ));
 //      }
 //       }
 
-      
+
       if (symmetrized) {
         T_MATRIX tmp(mf_u->nb_dof(), mf_u->nb_dof());
-        
+
         gmm::resize(tmp, mf_u->nb_dof(), gmm::mat_nrows(BN));
         gmm::copy(gmm::transposed(gmm::sub_matrix(MS.tangent_matrix(),
                                                   SUBN, SUBU)), tmp);
@@ -614,7 +293,7 @@ namespace getfem {
         gmm::mult(gmm::transposed(gmm::scaled(BN,-r*alpha)),
                   gmm::sub_matrix(MS.tangent_matrix(), SUBN, SUBU), tmp);
         gmm::add(tmp, gmm::sub_matrix(MS.tangent_matrix(), SUBU));
-        
+
         if (!contact_only) {
           gmm::mult(gmm::transposed(gmm::scaled(BT,-r*beta)),
                     gmm::sub_matrix(MS.tangent_matrix(), SUBT, SUBU), tmp);
@@ -629,15 +308,15 @@ namespace getfem {
         gmm::copy(gmm::scaled(gmm::transposed(BN), value_type(-1)),
                   gmm::sub_matrix(MS.tangent_matrix(), SUBU, SUBN));
         if (!contact_only)
-          gmm::copy(gmm::scaled(gmm::transposed(BT), value_type(-1)), 
+          gmm::copy(gmm::scaled(gmm::transposed(BT), value_type(-1)),
                     gmm::sub_matrix(MS.tangent_matrix(), SUBU, SUBT));
       }
     }
-    
+
     virtual void do_compute_residual(MODEL_STATE &MS, size_type i0,size_type) {
       precomp(MS, i0);
       value_type c1(1);
-      
+
       for (size_type i=0; i < nb_contact_nodes(); ++i) {
         RLN[i] = std::min(value_type(0), RLN[i]);
         if (!contact_only)
@@ -645,7 +324,7 @@ namespace getfem {
                           Tresca_version ? threshold[i]
                           : -friction_coef[i]*(MS.state())[SUBN.first()+i]);
       }
-      
+
       if (symmetrized) {
         gmm::mult_add(gmm::transposed(BN), gmm::scaled(RLN, -c1),
                       gmm::sub_vector(MS.residual(), SUBU));
@@ -661,7 +340,7 @@ namespace getfem {
                         gmm::scaled(gmm::sub_vector(MS.state(), SUBT),-c1),
                         gmm::sub_vector(MS.residual(), SUBU));
       }
-      
+
       /* residual on LN */
       gmm::add(gmm::scaled(gmm::sub_vector(MS.state(), SUBN), -c1/r),
                gmm::scaled(RLN, c1/r), gmm::sub_vector(MS.residual(), SUBN));
@@ -687,12 +366,20 @@ namespace getfem {
 
     void set_stationary(bool b) { really_stationary = b; }
     void set_beta(value_type a) { beta = a; }
+    value_type get_beta(void) const { return beta; }
     void set_alpha(value_type a) { alpha = a; }
+    value_type get_alpha(void) const { return alpha; }
     template<typename MAT> void set_augmented_matrix(const MAT &M) {
       gmm::resize(AUG_M, gmm::mat_nrows(M), gmm::mat_ncols(M));
       gmm::copy(M, AUG_M);
     }
 
+    void clear_character_matrix(void) { resize(CH_M, 0, 0); }
+    template<typename MAT> void set_character_matrix(const MAT &M) {
+      gmm::resize(CH_M, gmm::mat_nrows(M), gmm::mat_ncols(M));
+      gmm::copy(M, CH_M);
+    }
+
     void set_r(value_type r_) { r = r_; }
     value_type get_r(void) const { return r; }
     template <class VEC> void set_WT(const VEC &WT_)
@@ -703,6 +390,9 @@ namespace getfem {
     VECTOR &get_gap(void) { return gap; }
     const VECTOR &get_gap(void) const { return gap; }
 
+    VECTOR &get_friction_coef(void) { return friction_coef; }
+    const VECTOR &get_friction_coef(void) const { return friction_coef; }
+
     SUBVECTOR get_LN(MODEL_STATE &MS) {
       SUBN = gmm::sub_interval(this->first_index() + sub_problem.nb_dof(),
                                gmm::mat_nrows(BN));
diff --git a/src/getfem/getfem_Navier_Stokes.h b/src/getfem/getfem_Navier_Stokes.h
index 921dedd..e3c81f2 100644
--- a/src/getfem/getfem_Navier_Stokes.h
+++ b/src/getfem/getfem_Navier_Stokes.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_Navier_Stokes.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>, Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/getfem_Xfem.h b/src/getfem/getfem_Xfem.h
index 93aaf5d..720a241 100644
--- a/src/getfem/getfem_Xfem.h
+++ b/src/getfem/getfem_Xfem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_Xfem.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_arch_config.h b/src/getfem/getfem_arch_config.h
index 07e5a73..466afbc 100644
--- a/src/getfem/getfem_arch_config.h
+++ b/src/getfem/getfem_arch_config.h
@@ -21,7 +21,9 @@
 /* #undef GETFEM_HAVE_BOOST */
 
 /* Define to 1 if you have the <cmumps_c.h> header file. */
-/* #undef GETFEM_HAVE_CMUMPS_C_H */
+#ifndef GETFEM_HAVE_CMUMPS_C_H 
+#define GETFEM_HAVE_CMUMPS_C_H  1 
+#endif
 
 /* Define to 1 if you have the <cxxabi.h> header file. */
 #ifndef GETFEM_HAVE_CXXABI_H 
@@ -34,7 +36,9 @@
 #endif
 
 /* Define to 1 if you have the <dmumps_c.h> header file. */
-/* #undef GETFEM_HAVE_DMUMPS_C_H */
+#ifndef GETFEM_HAVE_DMUMPS_C_H 
+#define GETFEM_HAVE_DMUMPS_C_H  1 
+#endif
 
 /* glibc floating point exceptions control */
 #ifndef GETFEM_HAVE_FEENABLEEXCEPT 
@@ -46,9 +50,6 @@
 #define GETFEM_HAVE_INTTYPES_H  1 
 #endif
 
-/* Define to 1 if you have the `metis' library (-lmetis). */
-/* #undef GETFEM_HAVE_LIBMETIS */
-
 /* Define to 1 if you have the `mpich' library (-lmpich). */
 /* #undef GETFEM_HAVE_LIBMPICH */
 
@@ -73,14 +74,10 @@
 #define GETFEM_HAVE_MEMORY_H  1 
 #endif
 
-/* Define to 1 if you have the <mpich2/mpi.h> header file. */
-/* #undef GETFEM_HAVE_MPICH2_MPI_H */
-
-/* Define to 1 if you have the <mpi.h> header file. */
-/* #undef GETFEM_HAVE_MPI_H */
-
-/* Define to 1 if you have the <mpi/mpi.h> header file. */
-/* #undef GETFEM_HAVE_MPI_MPI_H */
+/* defined if the Metis library was found and is working */
+#ifndef GETFEM_HAVE_METIS 
+#define GETFEM_HAVE_METIS  1 
+#endif
 
 /* Define to 1 if you have the <muParser.h> header file. */
 /* #undef GETFEM_HAVE_MUPARSER_H */
@@ -109,7 +106,9 @@
 #endif
 
 /* Define to 1 if you have the <smumps_c.h> header file. */
-/* #undef GETFEM_HAVE_SMUMPS_C_H */
+#ifndef GETFEM_HAVE_SMUMPS_C_H 
+#define GETFEM_HAVE_SMUMPS_C_H  1 
+#endif
 
 /* Define to 1 if you have the <stdint.h> header file. */
 #ifndef GETFEM_HAVE_STDINT_H 
@@ -176,7 +175,9 @@
 #endif
 
 /* Define to 1 if you have the <zmumps_c.h> header file. */
-/* #undef GETFEM_HAVE_ZMUMPS_C_H */
+#ifndef GETFEM_HAVE_ZMUMPS_C_H 
+#define GETFEM_HAVE_ZMUMPS_C_H  1 
+#endif
 
 /* Define to the sub-directory in which libtool stores uninstalled libraries.
    */
@@ -201,7 +202,7 @@
 
 /* Define to the full name and version of this package. */
 #ifndef GETFEM_PACKAGE_STRING 
-#define GETFEM_PACKAGE_STRING  "getfem 4.1.1" 
+#define GETFEM_PACKAGE_STRING  "getfem 4.2" 
 #endif
 
 /* Define to the one symbol short name of this package. */
@@ -216,7 +217,7 @@
 
 /* Define to the version of this package. */
 #ifndef GETFEM_PACKAGE_VERSION 
-#define GETFEM_PACKAGE_VERSION  "4.1.1" 
+#define GETFEM_PACKAGE_VERSION  "4.2" 
 #endif
 
 /* defined if quad-doubles are to be used instead of double-double */
@@ -232,7 +233,7 @@
 
 /* Version number of package */
 #ifndef GETFEM_VERSION 
-#define GETFEM_VERSION  "4.1.1" 
+#define GETFEM_VERSION  "4.2" 
 #endif
  
 /* once: _SRC_GETFEM_GETFEM_ARCH_CONFIG_H */
diff --git a/src/getfem/getfem_assembling.h b/src/getfem/getfem_assembling.h
index a0a390c..2c0403b 100644
--- a/src/getfem/getfem_assembling.h
+++ b/src/getfem/getfem_assembling.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard, Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /** @file getfem_assembling.h
     @author  Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -41,9 +42,11 @@
 #define GETFEM_ASSEMBLING_H__
 
 #include "getfem_assembling_tensors.h"
+#include "getfem/getfem_mesh_im_level_set.h"
 
-namespace getfem {
 
+namespace getfem {
+  
   template <typename VEC>
   scalar_type asm_mean_value(const mesh_im &mim, const mesh_fem &mf,
 			     const VEC &U,
@@ -416,6 +419,10 @@ namespace getfem {
     generic_assembly assem;
     if (mf_u1.get_qdim() == 1 && mf_u2.get_qdim() == 1)
       assem.set("M(#1,#2)+=comp(Base(#1).Base(#2))");
+    else if (mf_u1.get_qdim() == 1)
+      assem.set("M(#1,#2)+=comp(Base(#1).vBase(#2))(:,:,1);"); // could be i in place of 1
+    else if (mf_u2.get_qdim() == 1)
+      assem.set("M(#1,#2)+=comp(vBase(#1).Base(#2))(:,1,:);");
     else
       assem.set("M(#1,#2)+=comp(vBase(#1).vBase(#2))(:,i,:,i);");
     assem.push_mi(mim);
@@ -467,6 +474,7 @@ namespace getfem {
     assem.assembly(rg);
   }
 
+    
   /** 
       source term (for both volumic sources and boundary (Neumann) sources).
       @ingroup asm
diff --git a/src/getfem/getfem_assembling_tensors.h b/src/getfem/getfem_assembling_tensors.h
index 6e9992e..9baf53f 100644
--- a/src/getfem/getfem_assembling_tensors.h
+++ b/src/getfem/getfem_assembling_tensors.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2009 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_assembling_tensors.h
    @author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
@@ -87,11 +88,12 @@ namespace getfem {
     size_type nchilds() { return childs_.size(); }
     /* reinit is called each time the object need to reset itself
        (when the shape of one of its childs has changed) */
-    virtual void reinit() = 0;   
+    void reinit() { if (!is_zero_size()) reinit_(); }
     /* do the computations for a given convex */
     void exec(size_type cv, dim_type face) {      
       if (cv != current_cv || face != current_face) {
-	exec_(cv,face);
+        if (!is_zero_size())
+          exec_(cv,face);
 	current_cv = cv;
 	current_face = face;
       }
@@ -103,11 +105,14 @@ namespace getfem {
      */
     virtual void update_childs_required_shape();
 
+    virtual bool is_zero_size();
+
     /* numbering og tensors, such that if i < j then tensor(j)
        cannot be in the sub-tree of tensor(i) */
     void set_number(unsigned &gcnt);
     unsigned number() const { return number_; }
   private:
+    virtual void reinit_() = 0;
     virtual void exec_(size_type , dim_type ) {}
   };
   
@@ -153,6 +158,8 @@ namespace getfem {
       return tr; 
     }
 
+    bool is_zero_size() { return r_.is_zero_size(); }
+
     void merge_required_shape(const tensor_shape& shape_from_parent) {
       req_shape.merge(shape_from_parent, false);
     }
@@ -210,7 +217,7 @@ namespace getfem {
 			       << strides[vdim.size()]);      
     }
   private:
-    void reinit() {
+    void reinit_() {
       mti = multi_tensor_iterator(child(0).tensor(),true);
     }
     void exec_(size_type cv, dim_type) {
@@ -296,7 +303,7 @@ namespace getfem {
       it.reserve(100);
     }
   private:
-    void reinit() {
+    void reinit_() {
       mti = multi_tensor_iterator(child(0).tensor(),true);
       it.resize(0);
     }
@@ -493,7 +500,7 @@ namespace getfem {
     : public base_mat_factory, private std::deque<asm_mat<MAT> > {
   public:
     base_asm_mat* create_mat(size_type m, size_type n) { 
-      push_back(asm_mat<MAT>(new MAT(m, n))); return &this->back();
+      this->push_back(asm_mat<MAT>(new MAT(m, n))); return &this->back();
     }
     ~mat_factory() { 
       for (size_type i=0; i < this->size(); ++i) {
diff --git a/src/getfem/getfem_config.h b/src/getfem/getfem_config.h
index b41bdf0..8ca692f 100644
--- a/src/getfem/getfem_config.h
+++ b/src/getfem/getfem_config.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /*! @mainpage Getfem++ reference documentation.
 
@@ -233,6 +234,10 @@ extern "C" void METIS_PartGraphKway(int *, int *, int *, int *, int *, int *,
 /// GEneric Tool for Finite Element Methods.
 namespace getfem {
 
+  using std::endl; using std::cout; using std::cerr;
+  using std::ends; using std::cin;
+
+
 #if GETFEM_PARA_LEVEL > 1
   template <typename T> inline T MPI_SUM_SCALAR(T a)
   { T b; MPI_Allreduce(&a,&b,1,gmm::mpi_type(a),MPI_SUM,MPI_COMM_WORLD); return b; }
@@ -259,8 +264,11 @@ namespace getfem {
   template <typename T> inline T MPI_SUM_SCALAR(T a) { return a; }
   template <typename VECT> inline void MPI_SUM_VECTOR(VECT) {}
   template <typename VECT1, typename VECT2>
-  inline void MPI_SUM_VECTOR(const VECT1 &V, const VECT2 &W)
-  { gmm::copy(V, gmm::linalg_const_cast(W)); }
+  inline void MPI_SUM_VECTOR(const VECT1 &V, const VECT2 &WW)
+  {
+    VECT2 &W = const_cast<VECT2 &>(WW);
+    gmm::copy(V, W);
+  }
   inline bool MPI_IS_MASTER(void) { return true; }
 #endif
 
diff --git a/src/getfem/getfem_contact_and_friction_common.h b/src/getfem/getfem_contact_and_friction_common.h
new file mode 100644
index 0000000..265a6d2
--- /dev/null
+++ b/src/getfem/getfem_contact_and_friction_common.h
@@ -0,0 +1,182 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2011-2012 Yves Renard, Konstantinos Poulios.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+
+/** @file getfem_contact_and_friction_common.h
+    @author Yves Renard <Yves.Renard at insa-lyon.fr>
+    @author Konstantinos Poulios <logari81 at googlemail.com>
+    @date November, 2011.
+    @brief Comomon tools for unilateral contact and Coulomb friction bricks.
+ */
+#ifndef GETFEM_CONTACT_AND_FRICTION_COMMON_H__
+#define GETFEM_CONTACT_AND_FRICTION_COMMON_H__
+
+#include "getfem_models.h"
+#include "getfem_assembling_tensors.h"
+
+namespace getfem {
+
+  //=========================================================================
+  //
+  //  Projection on a ball and gradient of the projection.
+  //
+  //=========================================================================
+
+  template<typename VEC> void ball_projection(const VEC &x,
+					      scalar_type radius) {
+    scalar_type a = gmm::vect_norm2(x);
+    if (radius <= 0) gmm::clear(const_cast<VEC&>(x));
+    else if (a > radius) gmm::scale(const_cast<VEC&>(x), radius/a);
+  }
+  
+  template<typename VEC, typename VECR>
+  void ball_projection_grad_r(const VEC &x, scalar_type radius,
+                                     VECR &g) {
+    scalar_type a = gmm::vect_norm2(x);
+    if (radius > 0 && a >= radius) {
+      gmm::copy(x, g); gmm::scale(g, scalar_type(1)/a);
+    }
+    else gmm::clear(g);
+  }
+
+  template <typename VEC, typename MAT>
+  void ball_projection_grad(const VEC &x, double radius, MAT &g) {
+    if (radius <= scalar_type(0)) { gmm::clear(g); return; }
+    gmm::copy(gmm::identity_matrix(), g);
+    scalar_type a = gmm::vect_norm2(x);
+    if (a >= radius) {
+      gmm::scale(g, radius/a);
+      // gmm::rank_one_update(g, gmm::scaled(x, -radius/(a*a*a)), x);
+      for (size_type i = 0; i < x.size(); ++i)
+        for (size_type j = 0; j < x.size(); ++j)
+          g(i,j) -= radius*x[i]*x[j] / (a*a*a);
+    }
+  }
+
+  //=========================================================================
+  //
+  //  De Saxce projection and its gradients.
+  //
+  //=========================================================================
+
+
+  template<typename VEC>
+  void De_Saxce_projection(const VEC &x, const VEC &n_, scalar_type f) {
+    static VEC n; // For more robustness, n_ is not supposed unitary
+    size_type N = gmm::vect_size(x);
+    gmm::resize(n, N);
+    gmm::copy(gmm::scaled(n_, scalar_type(1)/gmm::vect_norm2(n_)), n);
+    scalar_type xn = gmm::vect_sp(x, n);
+    scalar_type nxt = sqrt(gmm::abs(gmm::vect_norm2_sqr(x) - xn*xn));
+    if (xn >= scalar_type(0) && f * nxt <= xn) {
+      gmm::clear(const_cast<VEC&>(x));
+    } else if (xn > scalar_type(0) || nxt > -f*xn) {
+      gmm::add(gmm::scaled(n, -xn), const_cast<VEC&>(x));
+      gmm::scale(const_cast<VEC&>(x), -f / nxt);
+      gmm::add(n, const_cast<VEC&>(x));
+      gmm::scale(const_cast<VEC&>(x), (xn - f * nxt) / (f*f+scalar_type(1)));
+    }
+  }
+
+  template<typename VEC, typename MAT>
+  void De_Saxce_projection_grad(const VEC &x, const VEC &n_,
+				scalar_type f, MAT &g) {
+    static VEC n;
+    size_type N = gmm::vect_size(x);
+    gmm::resize(n, N);
+    gmm::copy(gmm::scaled(n_, scalar_type(1)/gmm::vect_norm2(n_)), n);
+    scalar_type xn = gmm::vect_sp(x, n);
+    scalar_type nxt = sqrt(gmm::abs(gmm::vect_norm2_sqr(x) - xn*xn));
+
+
+    if (xn > scalar_type(0) && f * nxt <= xn) {
+      gmm::clear(g);
+    } else if (xn > scalar_type(0) || nxt > -f*xn) {
+      static VEC xt;
+      gmm::resize(xt, N);
+      gmm::add(x, gmm::scaled(n, -xn), xt);
+      gmm::scale(xt, scalar_type(1)/nxt);
+
+      if (N > 2) {
+        gmm::copy(gmm::identity_matrix(), g);
+        gmm::rank_one_update(g, gmm::scaled(n, -scalar_type(1)), n);
+        gmm::rank_one_update(g, gmm::scaled(xt, -scalar_type(1)), xt);
+        gmm::scale(g, f*(f - xn/nxt));
+      } else {
+        gmm::clear(g);
+      }
+
+      gmm::scale(xt, -f); gmm::add(n, xt);
+      gmm::rank_one_update(g, xt, xt);
+      gmm::scale(g, scalar_type(1) / (f*f+scalar_type(1)));
+    } else {
+      gmm::copy(gmm::identity_matrix(), g);
+    }
+  }
+
+
+  template<typename VEC, typename MAT>
+  static void De_Saxce_projection_gradn(const VEC &x, const VEC &n_,
+					scalar_type f, MAT &g) {
+    static VEC n;
+    size_type N = gmm::vect_size(x);
+    scalar_type nn = gmm::vect_norm2(n_);
+    gmm::resize(n, N);
+    gmm::copy(gmm::scaled(n_, scalar_type(1)/nn), n);
+    scalar_type xn = gmm::vect_sp(x, n);
+    scalar_type nxt = sqrt(gmm::abs(gmm::vect_norm2_sqr(x) - xn*xn));
+    gmm::clear(g);
+
+    if (!(xn > scalar_type(0) && f * nxt <= xn)
+	&& (xn > scalar_type(0) || nxt > -f*xn)) {
+      static VEC xt, aux;
+      gmm::resize(xt, N); gmm::resize(aux, N);
+      gmm::add(x, gmm::scaled(n, -xn), xt);
+      gmm::scale(xt, scalar_type(1)/nxt);
+
+      scalar_type c = (scalar_type(1) + f*xn/nxt)/nn;
+      for (size_type i = 0; i < N; ++i) g(i,i) = c;
+      gmm::rank_one_update(g, gmm::scaled(n, -c), n);
+      gmm::rank_one_update(g, gmm::scaled(n, f/nn), xt);
+      gmm::rank_one_update(g, gmm::scaled(xt, -f*xn/(nn*nxt)), xt);
+      gmm::scale(g, xn - f*nxt);
+
+      gmm::add(gmm::scaled(xt, -f), n, aux);
+      gmm::rank_one_update(g, aux, gmm::scaled(xt, (nxt+f*xn)/nn));
+     
+      gmm::scale(g, scalar_type(1) / (f*f+scalar_type(1)));
+    }
+  }
+
+
+}  /* end of namespace getfem.                                             */
+
+
+#endif /* GETFEM_CONTACT_AND_FRICTION_COMMON_H__ */
diff --git a/src/getfem/getfem_contact_and_friction_integral.h b/src/getfem/getfem_contact_and_friction_integral.h
new file mode 100644
index 0000000..58b23e8
--- /dev/null
+++ b/src/getfem/getfem_contact_and_friction_integral.h
@@ -0,0 +1,773 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2011-2012 Yves Renard, Konstantinos Poulios.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+
+/** @file getfem_contact_and_friction_integral.h
+    @author Yves Renard <Yves.Renard at insa-lyon.fr>
+    @author Konstantinos Poulios <logari81 at googlemail.com>
+    @date November, 2011.
+    @brief Unilateral contact and Coulomb friction condition brick.
+ */
+#ifndef GETFEM_CONTACT_AND_FRICTION_INTEGRAL_H__
+#define GETFEM_CONTACT_AND_FRICTION_INTEGRAL_H__
+
+#include "getfem_models.h"
+#include "getfem_assembling_tensors.h"
+
+namespace getfem {
+
+
+  /** Add a frictionless contact condition with a rigid obstacle
+      to the model. This brick adds a contact which is defined
+      in an integral way. It is the direct approximation of an augmented
+      Lagrangian formulation (see Getfem user documentation) defined at the
+      continuous level. The advantage should be a better scalability:
+      the number of
+      Newton iterations should be more or less independent of the mesh size.
+      The condition is applied on the variable `varname_u`
+      on the boundary corresponding to `region`. The rigid obstacle should
+      be described with the data `dataname_obstacle` being a signed distance to
+      the obstacle (interpolated on a finite element method).
+      `multname_n` should be a fem variable representing the contact stress.
+      An inf-sup condition between `multname_n` and `varname_u` is required.
+      The augmentation parameter `dataname_r` should be chosen in a
+      range of acceptable values.
+      Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+      augmented Lagrangian method, 2 for the symmetric one, 3 for the
+      non-symmetric Alart-Curnier method with an additional augmentation
+      and 4 for a new unsymmetric method. The default value is 1.
+  */
+  size_type add_integral_contact_with_rigid_obstacle_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &multname_n, const std::string &dataname_obs,
+   const std::string &dataname_r, size_type region, int option = 1);
+
+  /** Add a contact with friction condition with a rigid obstacle
+      to the model. This brick adds a contact which is defined
+      in an integral way. It is the direct approximation of an augmented
+      Lagrangian formulation (see Getfem user documentation) defined at the
+      continuous level. The advantage should be a better scalability:
+      the number of the
+      Newton iterations should be more or less independent of the mesh size.
+      The condition is applied on the variable `varname_u`
+      on the boundary corresponding to `region`. The rigid obstacle should
+      be described with the data `dataname_obstacle` being a signed distance
+      to the obstacle (interpolated on a finite element method).
+      `multname` should be a fem variable representing the contact and
+      friction stress.
+      An inf-sup condition between `multname` and `varname_u` is required.
+      The augmentation parameter `dataname_r` should be chosen in a
+      range of acceptable values. `dataname_friction_coeff` is the friction
+      coefficient which could be constant or defined on a finite element
+      method.
+      Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+      augmented Lagrangian method, 2 for the symmetric one, 3 for the
+      non-symmetric Alart-Curnier method with an additional augmentation
+      and 4 for a new unsymmetric method. The default value is 1.
+      `dataname_alpha` and `dataname_wt` are optional parameters to solve
+      evolutionary friction problems. `dataname_gamma` and `dataname_vt`
+      represent optional data for adding a parameter-dependent sliding
+      velocity to the friction condition.
+  */
+  size_type add_integral_contact_with_rigid_obstacle_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &multname, const std::string &dataname_obs,
+   const std::string &dataname_r, const std::string &dataname_friction_coeff,
+   size_type region, int option = 1, const std::string &dataname_alpha = "",
+   const std::string &dataname_wt = "",
+   const std::string &dataname_gamma = "",
+   const std::string &dataname_vt = "");
+
+
+  /** Add a penalized contact frictionless condition with a rigid obstacle
+      to the model.
+      The condition is applied on the variable `varname_u`
+      on the boundary corresponding to `region`. The rigid obstacle should
+      be described with the data `dataname_obstacle` being a signed distance to
+      the obstacle (interpolated on a finite element method).
+      The penalization parameter `dataname_r` should be chosen
+      large enough to prescribe an approximate non-penetration condition
+      but not too large not to deteriorate too much the conditionning of
+      the tangent system. `dataname_n` is an optional parameter used if option
+      is 2. In that case, the penalization term is shifted by lambda_n (this
+      allows the use of an Uzawa algorithm on the corresponding augmented
+      Lagrangian formulation)
+  */
+  size_type add_penalized_contact_with_rigid_obstacle_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &dataname_obs, const std::string &dataname_r,
+   size_type region, int option = 1, const std::string &dataname_n = "");
+
+  /** Add a penalized contact condition with Coulomb friction with a
+      rigid obstacle to the model.
+      The condition is applied on the variable `varname_u`
+      on the boundary corresponding to `region`. The rigid obstacle should
+      be described with the data `dataname_obstacle` being a signed distance to
+      the obstacle (interpolated on a finite element method).
+      `dataname_friction_coeff`` is the friction coefficient which could
+      be constant or defined on a finite element method.
+      The penalization parameter `dataname_r` should be chosen
+      large enough to prescribe approximate non-penetration and friction
+      conditions but not too large not to deteriorate too much the
+      conditionning of the tangent system.
+      `dataname_lambda` is an optional parameter used if option
+      is 2. In that case, the penalization term is shifted by lambda (this
+      allows the use of an Uzawa algorithm on the corresponding augmented
+      Lagrangian formulation)
+      `dataname_alpha` and `dataname_wt` are optional parameters to solve
+      evolutionary friction problems.
+  */
+  size_type add_penalized_contact_with_rigid_obstacle_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &dataname_obs, const std::string &dataname_r,
+   const std::string &dataname_friction_coeff,
+   size_type region, int option = 1, const std::string &dataname_lambda = "",
+   const std::string &dataname_alpha = "",
+   const std::string &dataname_wt = "");
+
+
+  /** Add a frictionless contact condition between nonmatching meshes
+      to the model. This brick adds a contact which is defined
+      in an integral way. It is the direct approximation of an augmented
+      Lagrangian formulation (see Getfem user documentation) defined at the
+      continuous level. The advantage should be a better scalability:
+      the number of Newton iterations should be more or less independent
+      of the mesh size.
+      The condition is applied on the variables `varname_u1` and `varname_u2`
+      on the boundaries corresponding to `region1` and `region2`.
+      `multname_n` should be a fem variable representing the contact stress.
+      An inf-sup condition between `multname_n` and `varname_u1` and
+      `varname_u2` is required.
+      The augmentation parameter `dataname_r` should be chosen in a
+      range of acceptable values.
+      Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+      augmented Lagrangian method, 2 for the symmetric one, 3 for the
+      non-symmetric Alart-Curnier method with an additional augmentation
+      and 4 for a new unsymmetric method. The default value is 1.
+  */
+  size_type add_integral_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u1,
+   const std::string &varname_u2, const std::string &multname_n,
+   const std::string &dataname_r,
+   size_type region1, size_type region2, int option = 1);
+
+  /** Add a contact with friction condition between nonmatching meshes
+      to the model. This brick adds a contact which is defined
+      in an integral way. It is the direct approximation of an augmented
+      Lagrangian formulation (see Getfem user documentation) defined at the
+      continuous level. The advantage should be a better scalability:
+      the number of Newton iterations should be more or less independent
+      of the mesh size.
+      The condition is applied on the variables `varname_u1` and `varname_u2`
+      on the boundaries corresponding to `region1` and `region2`.
+      `multname` should be a fem variable representing the contact and
+      friction stress.
+      An inf-sup condition between `multname` and `varname_u1` and
+      `varname_u2` is required.
+      The augmentation parameter `dataname_r` should be chosen in a
+      range of acceptable values. `dataname_friction_coeff` is the friction
+      coefficient which could be constant or defined on a finite element
+      method on the same mesh as `varname_u1`.
+      Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+      augmented Lagrangian method, 2 for the symmetric one, 3 for the
+      non-symmetric Alart-Curnier method with an additional augmentation
+      and 4 for a new unsymmetric method. The default value is 1.
+      `dataname_alpha`, `dataname_wt1` and `dataname_wt2` are optional
+      parameters to solve evolutionary friction problems.
+  */
+  size_type add_integral_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u1,
+   const std::string &varname_u2, const std::string &multname,
+   const std::string &dataname_r, const std::string &dataname_friction_coeff,
+   size_type region1, size_type region2, int option = 1,
+   const std::string &dataname_alpha = "",
+   const std::string &dataname_wt1 = "",
+   const std::string &dataname_wt2 = "");
+
+
+  /** Add a penalized contact frictionless condition between nonmatching
+      meshes to the model.
+      The condition is applied on the variables `varname_u1` and  `varname_u2`
+      on the boundaries corresponding to `region1` and `region2`.
+      The penalization parameter `dataname_r` should be chosen
+      large enough to prescribe an approximate non-penetration condition
+      but not too large not to deteriorate too much the conditionning of
+      the tangent system. `dataname_n` is an optional parameter used if option
+      is 2. In that case, the penalization term is shifted by lambda_n (this
+      allows the use of an Uzawa algorithm on the corresponding augmented
+      Lagrangian formulation)
+  */
+  size_type add_penalized_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u1,
+   const std::string &varname_u2, const std::string &dataname_r,
+   size_type region1, size_type region2,
+   int option = 1, const std::string &dataname_n = "");
+
+
+  /** Add a penalized contact condition with Coulomb friction between
+      nonmatching meshes to the model.
+      The condition is applied on the variables `varname_u1` and  `varname_u2`
+      on the boundaries corresponding to `region1` and `region2`.
+      The penalization parameter `dataname_r` should be chosen
+      large enough to prescribe approximate non-penetration and friction
+      conditions but not too large not to deteriorate too much the
+      conditionning of the tangent system.
+      `dataname_friction_coeff` is the friction coefficient which could be constant
+      or defined on a finite element method on the same mesh as `varname_u1`.
+      `dataname_lambda` is an optional parameter used if option
+      is 2. In that case, the penalization term is shifted by lambda (this
+      allows the use of an Uzawa algorithm on the corresponding augmented
+      Lagrangian formulation)
+      `dataname_alpha`, `dataname_wt1` and `dataname_wt2` are optional parameters
+      to solve evolutionary friction problems.
+  */
+  size_type add_penalized_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u1,
+   const std::string &varname_u2, const std::string &dataname_r,
+   const std::string &dataname_friction_coeff,
+   size_type region1, size_type region2, int option = 1,
+   const std::string &dataname_lambda = "",
+   const std::string &dataname_alpha = "",
+   const std::string &dataname_wt1 = "",
+   const std::string &dataname_wt2 = "");
+
+
+  enum contact_nonlinear_term_version {  RHS_L_V1,
+                                         RHS_L_V2,
+                                         K_LL_V1,
+                                         K_LL_V2,
+                                         UZAWA_PROJ,
+                                         CONTACT_FLAG,
+
+                                         RHS_U_V1,
+                                         RHS_U_V2,
+                                         RHS_U_V4,
+                                         RHS_U_V5,
+                                         RHS_U_FRICT_V1,
+                                         RHS_U_FRICT_V4,
+                                         RHS_U_FRICT_V6,
+                                         RHS_U_FRICT_V7,
+                                         RHS_U_FRICT_V8,
+                                         RHS_U_FRICT_V5,
+                                         RHS_L_FRICT_V1,
+                                         RHS_L_FRICT_V2,
+                                         RHS_L_FRICT_V4,
+                                         K_UL_V1,
+                                         K_UL_V2,
+                                         K_UL_V3,
+                                         K_UL_V4,
+                                         UZAWA_PROJ_FRICT,
+                                         UZAWA_PROJ_FRICT_SAXCE,
+
+                                         K_UU_V1,
+                                         K_UU_V2,
+                                         K_UL_FRICT_V1, // EYE
+                                         K_UL_FRICT_V2,
+                                         K_UL_FRICT_V3,
+                                         K_UL_FRICT_V4,
+                                         K_UL_FRICT_V5,
+                                         K_UL_FRICT_V7,
+                                         K_UL_FRICT_V8,
+                                         K_LL_FRICT_V1,
+                                         K_LL_FRICT_V2,
+                                         K_LL_FRICT_V3,
+                                         K_LL_FRICT_V4,
+                                         K_UU_FRICT_V1,
+                                         K_UU_FRICT_V2,
+                                         K_UU_FRICT_V3,
+                                         K_UU_FRICT_V4,
+                                         K_UU_FRICT_V5
+  };
+
+  class contact_nonlinear_term : public nonlinear_elem_term {
+
+  protected:
+    // the following variables are used in the compute method and their values
+    // have to be calculated during the preceding calls to the prepare method
+    // at the current interpolation context
+    base_small_vector lnt, lt; // multiplier lambda and its tangential component lambda_t
+    scalar_type ln;            // normal component lambda_n of the multiplier
+    base_small_vector zt;      // tangential relative displacement
+    scalar_type un;            // normal relative displacement (positive when the first
+                               // elastic body surface moves outwards)
+    base_small_vector no;      // surface normal, pointing outwards with respect
+                               // to the (first) elastic body
+    scalar_type g, f_coeff;    // gap and coefficient of friction values
+
+    // these variables are used as temporary storage and they will usually contain
+    // garbage from previous calculations
+    base_small_vector aux1, auxN, V; // helper vectors of size 1, N and N respectively
+    base_matrix GP;                  // helper matrix of size NxN
+
+    void adjust_tensor_size(void);
+
+  public:
+    dim_type N;
+    size_type option;
+    scalar_type r;
+    bool contact_only;
+    scalar_type alpha;
+
+    bgeot::multi_index sizes_;
+
+    contact_nonlinear_term(dim_type N_, size_type option_, scalar_type r_,
+                           bool contact_only_ = true,
+                           scalar_type alpha_ = scalar_type(1)) :
+      N(N_), option(option_), r(r_), contact_only(contact_only_), alpha(alpha_) {
+
+      adjust_tensor_size();
+    }
+
+    const bgeot::multi_index &sizes() const { return sizes_; }
+
+    virtual void compute(fem_interpolation_context&, bgeot::base_tensor &t);
+    virtual void prepare(fem_interpolation_context& /*ctx*/, size_type /*nb*/)
+    { GMM_ASSERT1(false, "the prepare method has to be reimplemented in "
+                         "a derived class"); }
+
+  };
+
+
+  class contact_rigid_obstacle_nonlinear_term : public contact_nonlinear_term {
+
+    // temporary variables to be used inside the prepare method
+    base_small_vector vt; // of size N
+    base_vector coeff; // of variable size
+    base_matrix grad;  // of size 1xN
+
+  public:
+    // class specific objects to take into account inside the prepare method
+    const mesh_fem &mf_u;       // mandatory
+    const mesh_fem &mf_obs;     // mandatory
+    const mesh_fem *pmf_lambda; // optional for terms involving lagrange multipliers
+    const mesh_fem *pmf_coeff;  // optional for terms involving fem described coefficient of friction
+    base_vector U, obs, lambda, friction_coeff, WT, VT;
+    scalar_type gamma;
+
+    template <typename VECT1>
+    contact_rigid_obstacle_nonlinear_term
+    (size_type option_, scalar_type r_,
+     const mesh_fem &mf_u_, const VECT1 &U_,
+     const mesh_fem &mf_obs_, const VECT1 &obs_,
+     const mesh_fem *pmf_lambda_ = 0, const VECT1 *lambda_ = 0,
+     const mesh_fem *pmf_coeff_ = 0, const VECT1 *f_coeff_ = 0,
+     scalar_type alpha_ = scalar_type(1), const VECT1 *WT_ = 0,
+     scalar_type gamma_ = scalar_type(1), const VECT1 *VT_ = 0
+    )
+      : contact_nonlinear_term(mf_u_.linked_mesh().dim(), option_, r_,
+                               (f_coeff_ == 0), alpha_
+                              ),
+        mf_u(mf_u_), mf_obs(mf_obs_),
+        pmf_lambda(pmf_lambda_), pmf_coeff(pmf_coeff_), 
+        U(mf_u.nb_basic_dof()), obs(mf_obs.nb_basic_dof()),
+        lambda(0), friction_coeff(0), WT(0), VT(0), gamma(gamma_)
+    {
+
+      mf_u.extend_vector(U_, U);
+      mf_obs.extend_vector(obs_, obs);
+
+      if (pmf_lambda) {
+        lambda.resize(pmf_lambda->nb_basic_dof()); 
+        pmf_lambda->extend_vector(*lambda_, lambda);
+      }
+
+      if (!contact_only) {
+        if (!pmf_coeff)
+          f_coeff = (*f_coeff_)[0];
+        else {
+          friction_coeff.resize(pmf_coeff->nb_basic_dof());
+          pmf_coeff->extend_vector(*f_coeff_, friction_coeff);
+        }
+
+        if (WT_ && gmm::vect_size(*WT_)) {
+          WT.resize(mf_u.nb_basic_dof());
+          mf_u.extend_vector(*WT_, WT);
+        }
+
+        if (VT_ && gmm::vect_size(*VT_)) {
+          VT.resize(mf_u.nb_basic_dof());
+          mf_u.extend_vector(*VT_, VT);
+        }
+      }
+
+      vt.resize(N);
+      gmm::resize(grad, 1, N);
+
+      GMM_ASSERT1(mf_u.get_qdim() == N, "wrong qdim for the mesh_fem");
+    }
+
+    // this methode prepares all necessary data for the compute method
+    // of the base class
+    virtual void prepare(fem_interpolation_context& ctx, size_type nb);
+
+  };
+
+
+  class contact_nonmatching_meshes_nonlinear_term : public contact_nonlinear_term {
+
+    // temporary variables to be used inside the prepare method
+    base_vector coeff; // of variable size
+    base_matrix grad;  // of size 1xN
+
+  public:
+    const mesh_fem &mf_u1;      // displacements on the non-mortar side
+    const mesh_fem &mf_u2;      // displacements of the mortar side projected on the non-mortar side
+    const mesh_fem *pmf_lambda; // Lagrange multipliers defined on the non-mortar side
+    const mesh_fem *pmf_coeff;  // coefficient of friction defined on the non-mortar side
+    base_vector U1, U2, lambda, friction_coeff, WT1, WT2;
+
+    template <typename VECT1>
+    contact_nonmatching_meshes_nonlinear_term
+    (size_type option_, scalar_type r_,
+     const mesh_fem &mf_u1_, const VECT1 &U1_,
+     const mesh_fem &mf_u2_, const VECT1 &U2_,
+     const mesh_fem *pmf_lambda_ = 0, const VECT1 *lambda_ = 0,
+     const mesh_fem *pmf_coeff_ = 0, const VECT1 *f_coeff_ = 0,
+     scalar_type alpha_ = scalar_type(1),
+     const VECT1 *WT1_ = 0, const VECT1 *WT2_ = 0
+    )
+      : contact_nonlinear_term(mf_u1_.linked_mesh().dim(), option_, r_,
+                               (f_coeff_ == 0), alpha_
+                              ),
+        mf_u1(mf_u1_), mf_u2(mf_u2_),
+        pmf_lambda(pmf_lambda_), pmf_coeff(pmf_coeff_),
+        U1(mf_u1.nb_basic_dof()), U2(mf_u2.nb_basic_dof()),
+        lambda(0), friction_coeff(0), WT1(0), WT2(0)
+    {
+
+      GMM_ASSERT1(mf_u2.linked_mesh().dim() == N,
+                  "incompatible mesh dimensions for the given mesh_fem's");
+
+      mf_u1.extend_vector(U1_, U1);
+      mf_u2.extend_vector(U2_, U2);
+
+      if (pmf_lambda) {
+        lambda.resize(pmf_lambda->nb_basic_dof()); 
+        pmf_lambda->extend_vector(*lambda_, lambda);
+      }
+
+      if (!contact_only) {
+        if (!pmf_coeff)
+          f_coeff = (*f_coeff_)[0];
+        else {
+          friction_coeff.resize(pmf_coeff->nb_basic_dof());
+          pmf_coeff->extend_vector(*f_coeff_, friction_coeff);
+        }
+        if (WT1_ && WT2_ && gmm::vect_size(*WT1_) && gmm::vect_size(*WT2_)) {
+          WT1.resize(mf_u1.nb_basic_dof());
+          mf_u1.extend_vector(*WT1_, WT1);
+          WT2.resize(mf_u2.nb_basic_dof());
+          mf_u2.extend_vector(*WT2_, WT2);
+        }
+      }
+
+      gmm::resize(grad, 1, N);
+
+      GMM_ASSERT1(mf_u1.get_qdim() == N, "wrong qdim for the 1st mesh_fem");
+      GMM_ASSERT1(mf_u2.get_qdim() == N, "wrong qdim for the 2nd mesh_fem");
+    }
+
+    // this method prepares all necessary data for the compute method
+    // of the base class
+    virtual void prepare(fem_interpolation_context& ctx, size_type nb);
+
+  };
+
+
+  /** Specific assembly procedure for the use of an Uzawa algorithm to solve
+      contact with rigid obstacle problems with friction.
+  */
+  template<typename VECT1>
+  void asm_integral_contact_Uzawa_proj
+  (VECT1 &R, const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, const VECT1 &U,
+   const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+   const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+   const getfem::mesh_fem *pmf_coeff, const VECT1 &f_coeff, const VECT1 *WT,
+   scalar_type r, scalar_type alpha, const mesh_region &rg, int option = 1) {
+
+    contact_rigid_obstacle_nonlinear_term
+      nterm1((option == 1) ? UZAWA_PROJ_FRICT : UZAWA_PROJ_FRICT_SAXCE, r,
+             mf_u, U, mf_obs, obs, &mf_lambda, &lambda,
+             pmf_coeff, &f_coeff, alpha, WT);
+
+    getfem::generic_assembly assem;
+    if (pmf_coeff) // variable coefficient of friction
+      assem.set("V(#3)+=comp(NonLin$1(#1,#1,#2,#3,#4).vBase(#3))(i,:,i); ");
+    else // constant coefficient of friction
+      assem.set("V(#3)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#3))(i,:,i); ");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_mf(mf_obs);
+    assem.push_mf(mf_lambda);
+    if (pmf_coeff)
+      assem.push_mf(*pmf_coeff);
+    assem.push_nonlinear_term(&nterm1);
+    assem.push_vec(R);
+    assem.assembly(rg);
+  }
+
+  /** Specific assembly procedure for the use of an Uzawa algorithm to solve
+      contact problems.
+  */
+  template<typename VECT1>
+  void asm_integral_contact_Uzawa_proj
+  (VECT1 &R, const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, const VECT1 &U,
+   const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+   const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+   scalar_type r, const mesh_region &rg) {
+
+    contact_rigid_obstacle_nonlinear_term
+      nterm1(UZAWA_PROJ, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda);
+
+    getfem::generic_assembly assem;
+    assem.set("V(#3)+=comp(NonLin$1(#1,#1,#2,#3).Base(#3))(i,:); ");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_mf(mf_obs);
+    assem.push_mf(mf_lambda);
+    assem.push_nonlinear_term(&nterm1);
+    assem.push_vec(R);
+    assem.assembly(rg);
+  }
+
+
+  /** Specific assembly procedure for the use of an Uzawa algorithm to solve
+      contact problems.
+  */
+  template<typename VEC>
+  void asm_level_set_normal_source_term
+  (VEC &R, const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, // const VEC &U,
+   const getfem::mesh_fem &mf_obs, const VEC &obs,
+   const getfem::mesh_fem &mf_lambda, const VEC &lambda,
+   const mesh_region &rg) {
+
+    VEC U;
+    gmm::resize(U, mf_u.nb_dof());
+    scalar_type r(0.);
+    contact_rigid_obstacle_nonlinear_term
+      nterm(RHS_U_V1, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda);
+
+    getfem::generic_assembly assem;
+    assem.set("V(#1)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#1))(i,:,i); ");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_mf(mf_obs);
+    assem.push_mf(mf_lambda);
+    assem.push_nonlinear_term(&nterm);
+    assem.push_vec(R);
+    assem.assembly(rg);
+  }
+
+  template<typename VEC>
+  scalar_type asm_level_set_contact_area
+  (const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, const VEC &U,
+   const getfem::mesh_fem &mf_obs, const VEC &obs,
+   const mesh_region &rg, scalar_type threshold_factor=0.0) {
+
+    //FIXME: use an adapted integration method
+
+    // assemble an estimator of the mesh size
+    getfem::mesh_fem mf_mesh_size(mf_u.linked_mesh());
+    mf_mesh_size.set_qdim(1);
+    mf_mesh_size.set_classical_finite_element(1);
+    VEC vec_mesh_size(mf_mesh_size.nb_dof());
+
+    getfem::generic_assembly assem_mesh_size;
+    assem_mesh_size.set("V(#1)+=comp(Base(#1))");
+    assem_mesh_size.push_mi(mim);
+    assem_mesh_size.push_mf(mf_mesh_size);
+    assem_mesh_size.push_vec(vec_mesh_size);
+    assem_mesh_size.assembly(rg);
+    if (mf_u.get_qdim() == 3)
+      for (size_type i=0; i < gmm::vect_size(vec_mesh_size); i++)
+        vec_mesh_size[i] = sqrt(vec_mesh_size[i]);
+
+    // compute the total contact area
+    // remark: the CONTACT_FLAG option misuses r as threshold factor and mf_lambda
+    //         as mesh size estimation
+    scalar_type r(threshold_factor);
+    contact_rigid_obstacle_nonlinear_term
+      nterm(CONTACT_FLAG, r, mf_u, U, mf_obs, obs, &mf_mesh_size, &vec_mesh_size);
+
+    getfem::generic_assembly assem;
+    assem.set("V()+=comp(NonLin(#1,#1,#2,#3))(i)");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_mf(mf_obs);
+    assem.push_mf(mf_mesh_size);
+    assem.push_nonlinear_term(&nterm);
+    std::vector<scalar_type> v(1);
+    assem.push_vec(v);
+    assem.assembly(rg);
+    return v[0];
+  }
+
+
+  template<typename VEC>
+  void asm_nonmatching_meshes_normal_source_term
+  (VEC &R, const mesh_im &mim,
+   const getfem::mesh_fem &mf_u1, // const VEC &U1,
+   const getfem::mesh_fem &mf_u2_proj, // const VEC &U2_proj,
+   const getfem::mesh_fem &mf_lambda, const VEC &lambda,
+   const mesh_region &rg) {
+
+    VEC U1, U2_proj;
+    gmm::resize(U1, mf_u1.nb_dof());
+    gmm::resize(U2_proj, mf_u2_proj.nb_dof());
+    scalar_type r(0);
+    contact_nonmatching_meshes_nonlinear_term
+      nterm(RHS_U_V1, r, mf_u1, U1, mf_u2_proj, U2_proj, &mf_lambda, &lambda);
+
+    getfem::generic_assembly assem;
+    assem.set("V(#1)+=comp(NonLin(#1,#1,#2,#3).vBase(#1))(i,:,i)");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u1);
+    assem.push_mf(mf_u2_proj);
+    assem.push_mf(mf_lambda);
+    assem.push_nonlinear_term(&nterm);
+    assem.push_vec(R);
+    assem.assembly(rg);
+  }
+
+  template<typename VEC>
+  scalar_type asm_nonmatching_meshes_contact_area
+  (const mesh_im &mim,
+   const getfem::mesh_fem &mf_u1, const VEC &U1,
+   const getfem::mesh_fem &mf_u2_proj, const VEC &U2_proj,
+   const mesh_region &rg, scalar_type threshold_factor=0.0) {
+
+    //FIXME: use an adapted integration method
+
+    // assemble an estimator of the mesh size
+    getfem::mesh_fem mf_mesh_size(mf_u1.linked_mesh());
+    mf_mesh_size.set_qdim(1);
+    mf_mesh_size.set_classical_finite_element(1);
+    VEC vec_mesh_size(mf_mesh_size.nb_dof());
+
+    getfem::generic_assembly assem_mesh_size;
+    assem_mesh_size.set("V(#1)+=comp(Base(#1))");
+    assem_mesh_size.push_mi(mim);
+    assem_mesh_size.push_mf(mf_mesh_size);
+    assem_mesh_size.push_vec(vec_mesh_size);
+    assem_mesh_size.assembly(rg);
+    if (mf_u1.get_qdim() == 3)
+      for (size_type i=0; i < gmm::vect_size(vec_mesh_size); i++)
+        vec_mesh_size[i] = sqrt(vec_mesh_size[i]);
+    
+    // compute the total contact area
+    // remark: the CONTACT_FLAG option misuses r as threshold factor and mf_lambda
+    //         as mesh size estimation
+    scalar_type r(threshold_factor);
+    contact_nonmatching_meshes_nonlinear_term
+      nterm(CONTACT_FLAG, r, mf_u1, U1, mf_u2_proj, U2_proj, &mf_mesh_size, &vec_mesh_size);
+
+    getfem::generic_assembly assem;
+    assem.set("V()+=comp(NonLin(#1,#1,#2,#3))(i)");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u1);
+    assem.push_mf(mf_u2_proj);
+    assem.push_mf(mf_mesh_size);
+    assem.push_nonlinear_term(&nterm);
+    std::vector<scalar_type> v(1);
+    assem.push_vec(v);
+    assem.assembly(rg);
+    return v[0];
+  }
+
+
+  void compute_integral_contact_area_and_force
+  (model &md, size_type indbrick,
+   scalar_type &area, model_real_plain_vector &Forces);
+
+
+
+
+  /** Add a large sliding contact with friction brick to the model.
+      This brick is able to deal with auto-contact, contact between
+      several deformable bodies and contact with rigid obstacles.
+      The condition is applied on the variable `varname_u` on the
+      boundary corresponding to `region`. `dataname_r` is the augmentation
+      parameter of the augmented Lagrangian. `dataname_friction_coeff`
+      is the friction coefficient. `mim` is an integration method on the
+      boundary. `varname_u` is the variable on which the contact condition 
+      will be prescribed (should be of displacement type). `multname` is 
+      a multiplier defined on the boundary which will represent the contact
+      force. If no additional boundary or rigid
+      obstacle is added, only auto-contact will be detected. Use
+      `add_boundary_to_large_sliding_contact_brick` and
+      `add_rigid_obstacle_to_large_sliding_contact_brick` to add contact
+      boundaries and rigid obstacles.
+  */
+  size_type add_integral_large_sliding_contact_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &multname, const std::string &dataname_r,
+   const std::string &dataname_friction_coeff, size_type region);
+
+
+  /** Add a contact boundary to an existing large sliding contact brick.
+      `indbrick` is the brick index.
+  */
+  void add_boundary_to_large_sliding_contact_brick
+  (model &md, size_type indbrick, const mesh_im &mim,
+   const std::string &varname_u, const std::string &multname,
+   size_type region);
+
+  /** Add a rigid obstacle to an existing large sliding contact brick.
+      `indbrick` is the brick index, `obs` is the expression of a
+      function which should be closed to a signed distance to the obstacle.
+  */
+  void add_rigid_obstacle_to_large_sliding_contact_brick
+  (model &md, size_type indbrick, const std::string &obs);
+
+
+
+
+
+
+
+#ifdef EXPERIMENTAL_PURPOSE_ONLY
+  // Experimental implementation of contact condition with Nitsche method.
+  // To be deleted when a more general implementation will be designed.
+  size_type add_Nitsche_contact_with_rigid_obstacle_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &dataname_obs, const std::string &dataname_r,
+   const std::string &dataname_friction_coeff,
+   const std::string &dataname_lambda, const std::string &dataname_mu,
+   size_type region);
+#endif
+
+}  /* end of namespace getfem.                                             */
+
+
+#endif /* GETFEM_CONTACT_AND_FRICTION_INTEGRAL_H__ */
diff --git a/src/getfem/getfem_contact_and_friction_nodal.h b/src/getfem/getfem_contact_and_friction_nodal.h
new file mode 100644
index 0000000..488c971
--- /dev/null
+++ b/src/getfem/getfem_contact_and_friction_nodal.h
@@ -0,0 +1,546 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard, Konstantinos Poulios.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+
+/** @file getfem_contact_and_friction_nodal.h
+    @author Yves Renard <Yves.Renard at insa-lyon.fr>
+    @author Konstantinos Poulios <logari81 at googlemail.com>
+    @date July 6, 2004.
+    @brief Unilateral contact and Coulomb friction condition brick.
+ */
+#ifndef GETFEM_CONTACT_AND_FRICTION_NODAL_H__
+#define GETFEM_CONTACT_AND_FRICTION_NODAL_H__
+
+#include "getfem_models.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+namespace getfem {
+
+ typedef gmm::row_matrix<gmm::rsvector<scalar_type> > CONTACT_B_MATRIX;
+
+  /** Add a frictionless contact condition to the model. If U is the vector
+      of degrees of freedom on which the unilateral constraint is applied,
+      the matrix `BN` has to be such that this condition is defined by
+      $B_N U \le gap$. The constraint is prescribed thank to a multiplier
+      `multname_n` whose dimension should be equal to the number of lines of
+      `BN`. The augmentation parameter `r` should be chosen in a range of
+      acceptabe values (see Getfem user documentation). `dataname_gap` is an
+      optional parameter representing the initial gap. It can be a single value
+      or a vector of value. `dataname_alpha` is an optional homogenization
+      parameter for the augmentation parameter
+      (see Getfem user documentation). The parameter `aug_version` indicates
+      the augmentation strategy : 1 for the non-symmetric Alart-Curnier
+      augmented Lagrangian, 2 for the symmetric one, 3 for the unsymmetric
+      method with augmented multiplier.
+  */
+  size_type add_basic_contact_brick
+  (model &md, const std::string &varname_u, const std::string &multname_n,
+   const std::string &dataname_r, CONTACT_B_MATRIX &BN,
+   std::string dataname_gap = "", std::string dataname_alpha = "",
+   int aug_version=1, bool Hughes_stabilized=false);
+
+
+  /** Add a contact with friction condition to the model. If U is the vector
+      of degrees of freedom on which the condition is applied,
+      the matrix `BN` has to be such that the contact condition is defined
+      by $B_N U \le gap$ and `BT` have to be such that the relative tangential
+      displacement is $B_T U$. The matrix `BT` should have as many rows as
+      `BN` multiplied by $d-1$ where $d$ is the domain dimension.
+      The contact condition is prescribed thank to a multiplier
+      `multname_n` whose dimension should be equal to the number of rows of
+      `BN` and the friction condition by a mutliplier `multname_t` whose size
+      should be the number of rows of `BT`.
+      The parameter `dataname_friction_coeff` describes the friction
+      coefficient. It could be a scalar or a vector describing the
+      coefficient on each contact condition.
+      The augmentation parameter
+      `r` should be chosen in a range of acceptabe values
+      (see Getfem user documentation). `dataname_gap` is an
+      optional parameter representing the initial gap. It can be a single value
+      or a vector of value. `dataname_alpha` is an optional homogenization
+      parameter for the augmentation parameter
+      (see Getfem user documentation). The parameter `aug_version`
+      indicates the augmentation strategy : 1 for the non-symmetric
+      Alart-Curnier augmented Lagrangian, 2 for the symmetric one,
+      3 for the unsymmetric
+      method with augmented multiplier and 4 for the unsymmetric
+      method with augmented multiplier and De Saxce projection.
+  */
+  size_type add_basic_contact_brick
+  (model &md, const std::string &varname_u, const std::string &multname_n,
+   const std::string &multname_t, const std::string &dataname_r,
+   CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT,
+   std::string dataname_friction_coeff,
+   std::string dataname_gap="", std::string dataname_alpha="",
+   int aug_version=1, bool Tresca_version=false, std::string dataname_threshold = "", bool Hughes_stabilized=false);
+
+  /** Can be used to change the matrix BN of a basic contact/friction brick
+   */
+  CONTACT_B_MATRIX &contact_brick_set_BN(model &md, size_type indbrick);
+
+  /** Can be used to change the matrix DN of a basic contact/friction brick
+   */
+  CONTACT_B_MATRIX &contact_brick_set_DN(model &md, size_type indbrick);
+
+ /** Can be used to change the matrix DT of a basic contact/friction brick
+   */
+  CONTACT_B_MATRIX &contact_brick_set_DT(model &md, size_type indbrick);
+
+  /** Can be used to change the matrix BT of a basic contact/friction brick
+   */
+  CONTACT_B_MATRIX &contact_brick_set_BT(model &md, size_type indbrick);
+
+/** Add Hughes stabilized frictionless contact condition to the model. If U
+    is the vector of degrees of freedom on which the unilateral constraint is applied,
+    and Lambda the multiplier Vector of contact force.Then Hughes stabilized frictionless
+    contact condition is defined by the matrix `BN` and 'DN' have to be such that this
+    condition is defined by $B_N U - DN Lambda \le 0$. where 'DN' is the masse matrix
+    relative to stabilzed term.
+    The augmentation parameter `r` should be chosen in a range of acceptabe values.
+    `dataname_gap` is an optional parameter representing the initial gap. It can be
+    a single value or a vector of value. `dataname_alpha` is an optional homogenization
+    parameter for the augmentation parameter. The parameter `aug_version`
+    indicates the augmentation strategy : 1 for the non-symmetric
+      Alart-Curnier augmented Lagrangian, 2 for the symmetric one,
+      3 for the unsymmetric method with augmented multiplier.
+  */
+   inline size_type add_Hughes_stab_basic_contact_brick
+   (model &md, const std::string &varname_u, const std::string &multname_n,
+    const std::string &dataname_r, CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &DN,
+    std::string dataname_gap="", std::string dataname_alpha="",
+    int aug_version=1) {
+
+    size_type indbrick = add_basic_contact_brick
+      (md, varname_u, multname_n, dataname_r, BN,
+       dataname_gap, dataname_alpha, aug_version, true);
+    gmm::resize(contact_brick_set_DN(md, indbrick),
+                gmm::mat_nrows(DN), gmm::mat_ncols(DN));
+    gmm::copy(DN, contact_brick_set_DN(md, indbrick));
+    return indbrick;
+   }
+
+  /**  Add Hughes stabilized friction contact condition to the model (broken ?). If U is the vector
+      of degrees of freedom on which the condition is applied,
+      the matrix `BN` have to be such that the contact condition is defined
+      by $B_N U+DN Lambda \le 0$ (where 'DN' is the masse matrix
+      relative to stabilzed term) and `BT` have to be such that the relative
+      tangential displacement is $B_T U$. The matrix `BT` should have as many
+      rows as `BN` multiplied b $d-1$ where $d$ is the domain dimension.
+      The contact condition is prescribed thank to a multiplier
+      `multname_n` whose dimension should be equal to the number of rows of
+      `BN` and the friction condition by a mutliplier `multname_t` whise size
+      should be the number of rows of `BT`.
+      The parameter `dataname_friction_coeff` describe the friction
+      coefficient. It could be a scalar or a vector describing the
+      coefficient on each contact condition.
+      The augmentation parameter
+      `r` should be chosen in a range of acceptabe values
+      (see Getfem user documentation). `dataname_gap` is an
+      optional parameter representing the initial gap. It can be a single value
+      or a vector of value. `dataname_alpha` is an optional homogenization
+      parameter for the augmentation parameter
+      (see Getfem user documentation). The parameter `aug_version`
+      indicates the augmentation strategy : 1 for the non-symmetric
+      Alart-Curnier augmented Lagrangian, 2 for the symmetric one,
+      3 for the unsymmetric
+      method with augmented multiplier and 4 for the unsymmetric
+      method with augmented multiplier and De Saxce projection.
+   **/
+  inline size_type add_Hughes_stab_basic_contact_brick
+  (model &md, const std::string &varname_u, const std::string &multname_n,
+   const std::string &multname_t, const std::string &dataname_r,
+   CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT, CONTACT_B_MATRIX &DN,CONTACT_B_MATRIX &DT,
+   std::string dataname_friction_coeff,
+   std::string dataname_gap="", std::string dataname_alpha="",
+   int aug_version=1, bool Tresca_version=false, std::string dataname_threshold="") {
+
+    size_type indbrick = add_basic_contact_brick
+      (md, varname_u, multname_n, multname_t, dataname_r, BN, BT,
+       dataname_friction_coeff, dataname_gap, dataname_alpha,
+       aug_version, Tresca_version, dataname_threshold, true);
+    gmm::resize(contact_brick_set_DN(md, indbrick),
+                gmm::mat_nrows(DN), gmm::mat_ncols(DN));
+    gmm::copy(DN, contact_brick_set_DN(md, indbrick));
+
+    gmm::resize(contact_brick_set_DT(md, indbrick),
+                gmm::mat_nrows(DT), gmm::mat_ncols(DT));
+    gmm::copy(DT, contact_brick_set_DT(md, indbrick));
+    return indbrick;
+  }
+
+
+
+  /** Add a frictionless contact condition with a rigid obstacle
+      to the model. The condition is applied on the variable `varname_u`
+      on the boundary corresponding to `region`. The rigid obstacle should
+      be described with the string `obstacle` being a signed distance to
+      the obstacle. This string should be an expression where the coordinates
+      are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
+      obstacle correspond to $z \le 0$, the corresponding signed distance will
+      be simply "z". `multname_n` should be a fixed size variable whose size is
+      the number of degrees of freedom on boundary `region`. It represents the
+      contact equivalent nodal forces.
+      The augmentation parameter `r` should be chosen in a
+      range of acceptabe values (close to the Young modulus of the elastic
+      body, see Getfem user documentation). The parameter `aug_version`
+      indicates the augmentation strategy : 1 for the non-symmetric
+      Alart-Curnier augmented Lagrangian, 2 for the symmetric one,
+      3 for the unsymmetric
+      method with augmented multiplier.
+      Basically, this brick computes the matrix BN
+      and the vectors gap and alpha and calls the basic contact brick.
+  */
+  size_type add_nodal_contact_with_rigid_obstacle_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &multname_n, const std::string &dataname_r,
+   size_type region, const std::string &obstacle, int aug_version=1);
+
+
+  /** Add a contact with friction condition with a rigid obstacle
+      to the model. The condition is applied on the variable `varname_u`
+      on the boundary corresponding to `region`. The rigid obstacle should
+      be described with the string `obstacle` being a signed distance to
+      the obstacle. This string should be an expression where the coordinates
+      are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
+      obstacle correspond to $z \le 0$, the corresponding signed distance will
+      be simply "z". `multname_n` should be a fixed size variable whose size is
+      the number of degrees of freedom on boundary `region`. It represents the
+      contact equivalent nodal forces.
+      `multname_t` should be a fixed size variable whose size is
+      the number of degrees of freedom on boundary `region` multiplied by
+      $d-1$ where $d$ is the domain dimension. It represents the
+      friction equivalent nodal forces.
+      The augmentation parameter `r` should be chosen in a
+      range of acceptabe values (close to the Young modulus of the elastic
+      body, see Getfem user documentation). `dataname_friction_coeff` is
+      the friction coefficient. It could be a scalar or a vector of values
+      representing the friction coefficient on each contact node.
+      The parameter `aug_version`
+      indicates the augmentation strategy : 1 for the non-symmetric
+      Alart-Curnier augmented Lagrangian, 2 for the symmetric one,
+      3 for the unsymmetric
+      method with augmented multiplier and 4 for the unsymmetric
+      method with augmented multiplier and De Saxce projection.
+      Basically, this brick computes the matrix BN
+      and the vectors gap and alpha and calls the basic contact brick.
+  */
+  size_type add_nodal_contact_with_rigid_obstacle_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &multname_n, const std::string &multname_t,
+   const std::string &dataname_r, const std::string &dataname_friction_coeff,
+   size_type region, const std::string &obstacle, int aug_version=1);
+
+
+  /** Add a frictionless contact condition between two faces of one or two
+      elastic bodies. The condition is applied on the variable `varname_u` or
+      the variables `varname_u1` and `varname_u2` depending if a single or
+      two distinct displacement fields are given. Vectors `rg1` and `rg2`
+      contain pairs of regions expected to come in contact with each other. In
+      case of a single region per side, `rg1` and `rg2` can be given as normal
+      integers. In the single displacement variable case the regions defined in
+      both `rg1` and `rg2` refer to the variable `varname_u`. In the case of
+      two displacement variables, `rg1` refers to `varname_u1` and `rg2` refers
+      to `varname_u2`. `multname_n` should be a fixed size variable whose size
+      is the number of degrees of freedom on those regions among the ones
+      defined in `rg1` and `rg2` which are characterized as "slaves". It
+      represents the contact equivalent nodal forces. The augmentation
+      parameter `r` should be chosen in a range of acceptabe values (close to
+      the Young modulus of the elastic body, see Getfem user documentation).
+      The optional parameters `slave1` and `slave2` declare if the regions
+      defined in `rg1` and `rg2` are correspondingly considered as "slaves".
+      By default `slave1` is true and `slave2` is false, i.e. `rg1` contains
+      the slave surfaces, while 'rg2' the master surfaces. Preferably only
+      one of `slave1` and `slave2` is set to true. The parameter `aug_version`
+      indicates the augmentation strategy : 1 for the non-symmetric
+      Alart-Curnier augmented Lagrangian, 2 for the symmetric one,
+      3 for the unsymmetric
+      method with augmented multiplier.
+      Basically, this brick computes the matrix BN and the vectors gap and
+      alpha and calls the basic contact brick.
+  */
+  size_type add_nodal_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim1, const mesh_im &mim2,
+   const std::string &varname_u1, const std::string &varname_u2,
+   std::string &multname_n, const std::string &dataname_r,
+   const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+   bool slave1=true, bool slave2=false, int aug_version=1);
+
+  inline size_type add_nodal_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim1, const mesh_im &mim2,
+   const std::string &varname_u1, const std::string &varname_u2,
+   std::string &multname_n, const std::string &dataname_r,
+   size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+   int aug_version=0) {
+
+    std::vector<size_type> vrg1(1,rg1);
+    std::vector<size_type> vrg2(1,rg2);
+    return add_nodal_contact_between_nonmatching_meshes_brick
+      (md, mim1, mim2, varname_u1, varname_u2, multname_n, dataname_r,
+       vrg1, vrg2, slave1, slave2, aug_version);
+  }
+
+  inline size_type add_nodal_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   std::string &multname_n, const std::string &dataname_r,
+   const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+   bool slave1=true, bool slave2=false, int aug_version=1) {
+
+    return add_nodal_contact_between_nonmatching_meshes_brick
+      (md, mim, mim, varname_u, varname_u, multname_n, dataname_r,
+       rg1, rg2, slave1, slave2, aug_version);
+  }
+
+  inline size_type add_nodal_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   std::string &multname_n, const std::string &dataname_r,
+   size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+   int aug_version=1) {
+
+    std::vector<size_type> vrg1(1,rg1);
+    std::vector<size_type> vrg2(1,rg2);
+    return add_nodal_contact_between_nonmatching_meshes_brick
+      (md, mim, mim, varname_u, varname_u, multname_n, dataname_r,
+       vrg1, vrg2, slave1, slave2, aug_version);
+  }
+
+
+  /** Add a contact with friction condition between two faces of one or two
+      elastic bodies. The condition is applied on the variable `varname_u` or
+      the variables `varname_u1` and `varname_u2` depending if a single or
+      two distinct displacement fields are given. Vectors `rg1` and `rg2`
+      contain pairs of regions expected to come in contact with each other. In
+      case of a single region per side, `rg1` and `rg2` can be given as normal
+      integers. In the single displacement variable case the regions defined in
+      both `rg1` and `rg2` refer to the variable `varname_u`. In the case of
+      two displacement variables, `rg1` refers to `varname_u1` and `rg2` refers
+      to `varname_u2`. `multname_n` should be a fixed size variable whose size
+      is the number of degrees of freedom on those regions among the ones
+      defined in `rg1` and `rg2` which are characterized as "slaves". It
+      represents the contact equivalent nodal normal forces. `multname_t`
+      should be a fixed size variable whose size corresponds to the size of
+      `multname_n` multiplied by qdim - 1 . It represents the contact
+      equivalent nodal tangent (frictional) forces. The augmentation parameter
+      `r` should be chosen in a range of acceptabe values (close to the Young
+      modulus of the elastic body, see Getfem user documentation). The friction
+      coefficient stored in the parameter `friction_coeff` is either a single
+      value or a vector of the same size as `multname_n`. The optional
+      parameters `slave1` and `slave2` declare if the regions defined in `rg1`
+      and `rg2` are correspondingly considered as "slaves". By default `slave1`
+      is true and `slave2` is false, i.e. `rg1` contains the slave surfaces,
+      while 'rg2' the master surfaces. Preferably only one of `slave1` and
+      `slave2` is set to true.  The parameter `aug_version`
+      indicates the augmentation strategy : 1 for the non-symmetric
+      Alart-Curnier augmented Lagrangian, 2 for the symmetric one,
+      3 for the unsymmetric
+      method with augmented multiplier and 4 for the unsymmetric
+      method with augmented multiplier and De Saxce projection.
+      Basically, this brick computes the matrices BN and BT as well the vectors
+      gap and alpha and calls the basic contact brick.
+  */
+  size_type add_nodal_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim1, const mesh_im &mim2,
+   const std::string &varname_u1, const std::string &varname_u2,
+   std::string &multname_n, std::string &multname_t,
+   const std::string &dataname_r, const std::string &dataname_friction_coeff,
+   const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+   bool slave1=true, bool slave2=false, int aug_version=1);
+
+  inline size_type add_nodal_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim1, const mesh_im &mim2,
+   const std::string &varname_u1, const std::string &varname_u2,
+   std::string &multname_n, std::string &multname_t,
+   const std::string &dataname_r, const std::string &dataname_friction_coeff,
+   size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+   int aug_version=1) {
+
+    std::vector<size_type> vrg1(1,rg1);
+    std::vector<size_type> vrg2(1,rg2);
+    return add_nodal_contact_between_nonmatching_meshes_brick
+      (md, mim1, mim2, varname_u1, varname_u2, multname_n, multname_t,
+       dataname_r, dataname_friction_coeff,
+       vrg1, vrg2, slave1, slave2, aug_version);
+  }
+
+  inline size_type add_nodal_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   std::string &multname_n, std::string &multname_t,
+   const std::string &dataname_r, const std::string &dataname_friction_coeff,
+   const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+   bool slave1=true, bool slave2=false, int aug_version=1) {
+
+    return add_nodal_contact_between_nonmatching_meshes_brick
+      (md, mim, mim, varname_u, varname_u, multname_n, multname_t,
+       dataname_r, dataname_friction_coeff,
+       rg1, rg2, slave1, slave2, aug_version);
+  }
+
+  inline size_type add_nodal_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   std::string &multname_n, std::string &multname_t,
+   const std::string &dataname_r, const std::string &dataname_friction_coeff,
+   size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+   int aug_version=1) {
+
+    std::vector<size_type> vrg1(1,rg1);
+    std::vector<size_type> vrg2(1,rg2);
+    return add_nodal_contact_between_nonmatching_meshes_brick
+      (md, mim, mim, varname_u, varname_u, multname_n, multname_t,
+       dataname_r, dataname_friction_coeff,
+       vrg1, vrg2, slave1, slave2, aug_version);
+  }
+
+
+  // DEPRECATED FUNCTION NAMES
+
+  IS_DEPRECATED inline size_type add_basic_contact_with_friction_brick
+ (model &md, const std::string &varname_u, const std::string &multname_n,
+   const std::string &multname_t, const std::string &dataname_r,
+   CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT,
+   std::string dataname_friction_coeff,
+   std::string dataname_gap="", std::string dataname_alpha="",
+   int aug_version=1, bool Tresca_version=false, std::string dataname_threshold = "", bool Hughes_stabilized=false)
+  { return add_basic_contact_brick
+      (md, varname_u, multname_n, multname_t, dataname_r, BN, BT, dataname_friction_coeff,
+       dataname_gap, dataname_alpha, aug_version, Tresca_version, dataname_threshold, Hughes_stabilized); }
+
+  IS_DEPRECATED inline size_type add_Hughes_stab_with_friction_contact_brick
+    (model &md, const std::string &varname_u, const std::string &multname_n,
+     const std::string &multname_t, const std::string &dataname_r,
+     CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT, CONTACT_B_MATRIX &DN,CONTACT_B_MATRIX &DT,
+     std::string dataname_friction_coeff, std::string dataname_gap="",
+     std::string dataname_alpha="", int aug_version=1, bool Tresca_version=false, std::string dataname_threshold="")
+  { return add_Hughes_stab_basic_contact_brick
+      (md, varname_u, multname_n, multname_t, dataname_r, BN, BT, DN, DT,
+       dataname_friction_coeff, dataname_gap, dataname_alpha, aug_version, Tresca_version, dataname_threshold); }
+
+  // rigid obstacle
+  IS_DEPRECATED inline size_type add_contact_with_rigid_obstacle_brick
+    (model &md, const mesh_im &mim, const std::string &varname_u,
+     const std::string &multname_n, const std::string &dataname_r,
+     size_type region, const std::string &obstacle, int aug_version=1)
+  { return add_nodal_contact_with_rigid_obstacle_brick
+      (md, mim, varname_u, multname_n, dataname_r, region, obstacle, aug_version); }
+
+  IS_DEPRECATED inline size_type add_contact_with_friction_with_rigid_obstacle_brick
+    (model &md, const mesh_im &mim, const std::string &varname_u,
+     const std::string &multname_n, const std::string &multname_t,
+     const std::string &dataname_r, const std::string &dataname_friction_coeff,
+     size_type region, const std::string &obstacle, int aug_version=1)
+  { return add_nodal_contact_with_rigid_obstacle_brick
+      (md, mim, varname_u, multname_n, multname_t, dataname_r,
+       dataname_friction_coeff, region, obstacle, aug_version); }
+
+  // non-matching meshes
+  IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_brick
+    (model &md, const mesh_im &mim1, const mesh_im &mim2,
+     const std::string &varname_u1, const std::string &varname_u2,
+     std::string &multname_n, const std::string &dataname_r,
+     const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+     bool slave1=true, bool slave2=false, int aug_version=1)
+  { return add_nodal_contact_between_nonmatching_meshes_brick
+      (md, mim1, mim2, varname_u1, varname_u2, multname_n, dataname_r,
+       rg1, rg2, slave1, slave2, aug_version); }
+
+  IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_brick
+    (model &md, const mesh_im &mim1, const mesh_im &mim2,
+     const std::string &varname_u1, const std::string &varname_u2,
+     std::string &multname_n, const std::string &dataname_r,
+     size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+     int aug_version=0)
+  { return add_nodal_contact_between_nonmatching_meshes_brick
+      (md, mim1, mim2, varname_u1, varname_u2, multname_n, dataname_r,
+       rg1, rg2, slave1, slave2, aug_version); }
+
+  IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_brick
+    (model &md, const mesh_im &mim, const std::string &varname_u,
+     std::string &multname_n, const std::string &dataname_r,
+     const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+     bool slave1=true, bool slave2=false, int aug_version=1)
+  { return add_nodal_contact_between_nonmatching_meshes_brick
+      (md, mim, varname_u, multname_n, dataname_r,
+       rg1, rg2, slave1, slave2, aug_version); }
+
+  IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_brick
+    (model &md, const mesh_im &mim, const std::string &varname_u,
+     std::string &multname_n, const std::string &dataname_r,
+     size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+     int aug_version=1)
+  { return add_nodal_contact_between_nonmatching_meshes_brick
+      (md, mim, varname_u, multname_n, dataname_r,
+       rg1, rg2, slave1, slave2, aug_version); }
+
+  // non-matching meshes with friction
+  IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_with_friction_brick
+    (model &md, const mesh_im &mim1, const mesh_im &mim2,
+     const std::string &varname_u1, const std::string &varname_u2,
+     std::string &multname_n, std::string &multname_t,
+     const std::string &dataname_r, const std::string &dataname_friction_coeff,
+     const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+     bool slave1=true, bool slave2=false, int aug_version=1)
+  { return add_nodal_contact_between_nonmatching_meshes_brick
+      (md, mim1, mim2, varname_u1, varname_u2, multname_n, multname_t, dataname_r,
+       dataname_friction_coeff, rg1, rg2, slave1, slave2, aug_version); }
+
+  IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_with_friction_brick
+    (model &md, const mesh_im &mim1, const mesh_im &mim2,
+     const std::string &varname_u1, const std::string &varname_u2,
+     std::string &multname_n, std::string &multname_t,
+     const std::string &dataname_r, const std::string &dataname_friction_coeff,
+     size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+     int aug_version=1)
+  { return add_nodal_contact_between_nonmatching_meshes_brick
+      (md, mim1, mim2, varname_u1, varname_u2, multname_n, multname_t,
+       dataname_r, dataname_friction_coeff, rg1, rg2, slave1, slave2, aug_version); }
+
+  IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_with_friction_brick
+    (model &md, const mesh_im &mim, const std::string &varname_u,
+     std::string &multname_n, std::string &multname_t,
+     const std::string &dataname_r, const std::string &dataname_friction_coeff,
+     const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+     bool slave1=true, bool slave2=false, int aug_version=1)
+  { return add_nodal_contact_between_nonmatching_meshes_brick
+      (md, mim, varname_u, multname_n, multname_t, dataname_r,
+       dataname_friction_coeff, rg1, rg2, slave1, slave2, aug_version); }
+
+  IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_with_friction_brick
+    (model &md, const mesh_im &mim, const std::string &varname_u,
+     std::string &multname_n, std::string &multname_t,
+     const std::string &dataname_r, const std::string &dataname_friction_coeff,
+     size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+     int aug_version=1)
+  { return add_nodal_contact_between_nonmatching_meshes_brick
+      (md, mim, varname_u, multname_n, multname_t, dataname_r,
+       dataname_friction_coeff, rg1, rg2, slave1, slave2, aug_version); }
+
+}  /* end of namespace getfem.                                             */
+
+
+#endif /* GETFEM_CONTACT_AND_FRICTION_NODAL_H__ */
diff --git a/src/getfem/getfem_context.h b/src/getfem/getfem_context.h
index 15ab2f4..cd98189 100644
--- a/src/getfem/getfem_context.h
+++ b/src/getfem/getfem_context.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_context.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_continuation.h b/src/getfem/getfem_continuation.h
new file mode 100644
index 0000000..99c18e2
--- /dev/null
+++ b/src/getfem/getfem_continuation.h
@@ -0,0 +1,583 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2011-2012 Tomas Ligursky, Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+
+/** @file getfem_continuation.h
+    @author Tomas Ligursky <tomas.ligursky at gmail.com>
+    @author Yves Renard <Yves.Renard at insa-lyon.fr>
+    @date October 17, 2011.
+    @brief (approximate) Moore-Penrose (also called Gauss-Newton) continuation method.
+
+    NOTE: The bordered systems involved are solved by a block eliminiation
+    although the bordered matrix may be ill-conditioned in some cases!
+    Nevertheless, the algorithm seems to work well.
+*/
+#ifndef GETFEM_CONTINUATION_H__
+#define GETFEM_CONTINUATION_H__
+
+#include <getfem/getfem_model_solvers.h>
+
+namespace getfem {
+
+
+  //=========================================================================
+  // Abstract Moore-Penrose continuation method
+  //=========================================================================
+
+
+  const double tau_init = 1.e4;
+  enum build_data { BUILD_F = 1, BUILD_F_x = 2, BUILD_ALL = 3 };
+
+  template <typename CONT_S, typename VECT> 
+  double norm_(CONT_S &S, const VECT &x)
+  { return sqrt(S.sp(x, x)); }
+  
+  template <typename CONT_S, typename VECT> 
+  double w_sp_(CONT_S &S, const VECT &x1, const VECT &x2)
+  { return S.scfac() * S.sp(x1, x2); }
+
+  template <typename CONT_S, typename VECT> 
+  double sp_(CONT_S &S, const VECT &x1, const VECT &x2,
+	     double gamma1, double gamma2)
+  { return w_sp_(S, x1, x2) + gamma1 * gamma2; }
+
+  template <typename CONT_S, typename VECT> 
+  double norm_(CONT_S &S, const VECT &x, double gamma)
+  { return sqrt(sp_(S, x, x, gamma, gamma)); }
+
+
+  template <typename CONT_S, typename VECT>
+  void compute_tangent(CONT_S &S, const VECT &x, double gamma,
+		       VECT &t_x, double &t_gamma) {
+    VECT g(x), y(x);
+    S.F_gamma(x, gamma, g);
+    S.solve_grad(x, gamma, y, g);
+    t_gamma = 1. / (t_gamma - w_sp_(S, t_x, y));
+    S.scale(y, -t_gamma); S.copy(y, t_x);
+    
+    double no = norm_(S, t_x, t_gamma);
+    S.scale(t_x, 1./no); t_gamma /= no;
+
+//     if (S.noisy() > 1) {
+//       S.mult_grad(x, gamma, t_x, y); S.scaled_add(y, g, t_gamma, y);
+//       cout << "new tangent computed with the residual " 
+// 	   << norm_(S, y) << endl;
+//     }
+  }
+
+
+  template <typename CONT_S, typename MAT, typename VECT>
+  double test_function(CONT_S &S, const MAT &A, const VECT &g,
+		       const VECT &t_x, double t_gamma) {
+    double q, r, v_gamma, tau;
+    VECT v_x(g), y(g), z(g);
+
+    if (S.noisy() > 1) cout << "starting computing test function" << endl;
+    S.solve(A, y, z, g, S.b_x());
+    v_gamma = (S.b_gamma() - S.sp(t_x, z)) / (t_gamma - S.sp(t_x, y));
+    S.scaled_add(z, y, -v_gamma, v_x);
+    tau = 1. / (S.d() - S.sp(S.c_x(), v_x) - S.c_gamma() * v_gamma);
+    S.scale(v_x, -tau); v_gamma *= -tau;
+
+    // control of the norm of the residual
+    S.mult(A, v_x, y);
+    S.scaled_add(y, g, v_gamma, y); S.scaled_add(y, S.b_x(), tau, y); 
+    r = S.sp(y, y);
+    q = S.sp(t_x, v_x) + t_gamma * v_gamma + S.b_gamma() * tau; r += q * q;
+    q = S.sp(S.c_x(), v_x) + S.c_gamma() * v_gamma + S.d() * tau - 1.;
+    r += q * q; r = sqrt(r);
+    if (r > 1e-10)
+      GMM_WARNING1("Test function evaluated with the residual " << r);
+
+    return tau;
+  }
+
+  template <typename CONT_S, typename VECT>
+  double test_function(CONT_S &S, const VECT &x, double gamma,
+		       const VECT &t_x, double t_gamma) {
+    VECT g(x); S.F_gamma(x, gamma, g);
+    typename CONT_S::MAT A; S.F_x(x, gamma, A);
+    return test_function(S, A, g, t_x, t_gamma);
+  }
+
+  template <typename CONT_S, typename VECT>
+  bool test_smooth_bifurcation(CONT_S &S, const VECT &x, double gamma,
+			       const VECT &t_x, double t_gamma) {
+    double tau0 = S.tau1(), tau1 = S.tau2(),
+      tau2 = test_function(S, x, gamma, t_x, t_gamma);
+    S.set_tau1(tau1); S.set_tau2(tau2);
+    return (tau2 * tau1 < 0) & (S.abs(tau1) < S.abs(tau0));
+  }
+
+  template <typename CONT_S, typename VECT>
+  bool test_nonsmooth_bifurcation (CONT_S &S, const VECT &x1, double gamma1,
+				   const VECT &t_x1, double t_gamma1,
+				   const VECT &x2, double gamma2,
+				   const VECT &t_x2, double t_gamma2) {
+    unsigned long nb_changes = 0;
+    double alpha = 0, delta = 1. / S.nb_test(), t_gamma,
+      tau0, tau1 = tau_init, tau2 = S.tau2();
+    VECT g1(x1), g2(x1), g(x1), t_x(x1);
+    typename CONT_S::MAT A1, A2, A;
+    S.F_gamma(x2, gamma2, g2);
+    S.F_x(x1, gamma1, A1); S.F_gamma(x1, gamma1, g1);
+    S.F_x(x2, gamma2, A2); S.F_x(x2, gamma2, A);
+    S.init_tau_hist();
+
+    for(size_type i = 1; i < S.nb_test() + 1; ++i) {
+      alpha += delta;
+      S.scaled_add(A1, 1. - alpha, A2, alpha, A);
+      S.scaled_add(g1, 1. - alpha, g2, alpha, g);
+      S.scaled_add(t_x1, 1. - alpha, t_x2, alpha, t_x);
+      t_gamma = (1. - alpha) * t_gamma1 + alpha * t_gamma2;
+      
+      tau0 = tau1; tau1 = tau2; tau2 = test_function(S, A, g, t_x, t_gamma);
+      if ((tau2 * tau1 < 0) & (S.abs(tau1) < S.abs(tau0))) ++nb_changes;
+      S.set_tau_hist(i, tau2);
+    }
+    
+    S.set_tau1(tau_init); S.set_tau2(tau2);
+    return nb_changes % 2;
+  }
+  
+
+  template <typename CONT_S, typename VECT>
+  int test_direction(CONT_S &S, const VECT &x, double gamma,
+		     const VECT &t_x, double t_gamma,
+		     VECT &T_x, double &T_gamma, double h) {
+    int res = 1;
+    double Gamma, T_Gamma = T_gamma, ang;
+    VECT X(x), T_X(T_x);
+    
+    S.scaled_add(x, T_x, h, X); Gamma = gamma + h * T_gamma;
+    S.set_build(BUILD_ALL);
+    compute_tangent(S, X, Gamma, T_X, T_Gamma);
+    
+    ang = sp_(S, T_x, T_X, T_gamma, T_Gamma);
+    if (S.noisy() > 1)
+      cout << "the angle with the tested tangent " << ang << endl;
+    if (ang >=  0.996) res = (h > 0) ? 3 : 4;
+    else {
+      ang = sp_(S, t_x, T_X, t_gamma, T_Gamma);
+      if (S.noisy() > 1)
+	cout << "the angle with the starting tangent " << ang << endl;
+      if (ang < 0.86 && ang > -0.86) {
+	res = 2;
+	S.copy(T_X, T_x); T_gamma = T_Gamma; // try the new tangent next(?)
+      }
+    }
+    return res;
+  }
+
+  template <typename CONT_S, typename VECT>
+  void init_test_function(CONT_S &S, const VECT &x, double gamma,
+			  const VECT &t_x, double t_gamma) {
+    S.init_border(x);
+    double tau = test_function(S, x, gamma, t_x, t_gamma); S.set_tau2(tau);
+  }
+
+  template <typename CONT_S, typename VECT>
+  void init_Moore_Penrose_continuation(CONT_S &S, const VECT &x,
+				       double gamma, VECT &t_x,
+				       double &t_gamma, double &h) {
+    S.set_build(BUILD_ALL);
+    S.clear(t_x); t_gamma = (t_gamma >= 0) ? 1. : -1.;
+    if (S.noisy() > 0) cout << "computing initial tangent" << endl;
+    compute_tangent(S, x, gamma, t_x, t_gamma);
+    h = S.h_init();
+    init_test_function(S, x, gamma, t_x, t_gamma);
+  }
+
+  
+  /* Perform one step of the Moore-Penrose continuation. If a new point 
+     (x, gamma) is found, it has to be saved in the model in the end! */
+  template <typename CONT_S, typename VECT>
+    void Moore_Penrose_continuation(CONT_S &S, VECT &x, double &gamma,
+				    VECT &t_x, double &t_gamma, double &h) {
+    bool bifurcation_detected = false, converged, finished = false;
+    int tangent_status = 0;
+      /* 0: no manipulation with tangent direction (so far);
+	 1: current direction neither admitted nor rejected;
+	 2: direction rejected;
+	 3: direction admitted with plus sign;
+	 4: direction admitted with minus sign; */
+    unsigned long it, step_dec = 0;
+    double t_gamma0 = t_gamma,
+      Delta_Gamma, Gamma, T_gamma, r, no, res, diff, ang;
+    VECT t_x0(t_x), F(x), g(x), Delta_X(x), X(x), T_x(x), y(x);
+
+    do { // step control
+
+      // prediction
+      if (S.noisy() > 0) cout << "prediction with h = " << h << endl;
+      S.scaled_add(x, t_x, h, X); Gamma = gamma + h * t_gamma;
+      S.set_build(BUILD_ALL);
+      S.copy(t_x, T_x); T_gamma = t_gamma;
+      
+      // correction
+      if (S.noisy() > 0) cout << "starting correction " << endl;
+      it = 0;
+      S.F(X, Gamma, F);
+      
+      do { // Newton iterations
+	S.F_gamma(X, Gamma, g);
+	S.solve_grad(X, Gamma, Delta_X, y, F, g);
+	r = w_sp_(S, T_x, y);
+
+	Delta_Gamma = w_sp_(S, T_x, Delta_X) / (r - T_gamma);
+	S.scaled_add(Delta_X, y, -Delta_Gamma, Delta_X);
+	S.scaled_add(X, Delta_X, -1., X); Gamma -= Delta_Gamma;
+	S.set_build(BUILD_ALL);
+	
+	T_gamma = 1. / (T_gamma - r);
+	S.scale(y, -T_gamma); S.copy(y, T_x);
+	no = norm_(S, T_x, T_gamma);
+	S.scale(T_x, 1./no); T_gamma /= no;
+
+	S.F(X, Gamma, F); res = norm_(S, F); 
+	diff = norm_(S, Delta_X, Delta_Gamma);
+	converged = (res <= S.maxres() && diff <= S.maxdiff());
+	it++;
+
+	if (S.noisy() > 1)
+	  cout << "iter " << it << " residual " << res
+	       << " difference " << diff
+	       << " cos " << sp_(S, t_x, T_x, t_gamma, T_gamma) << endl;
+
+      } while (!converged && it < S.maxit() && res < 1.e8);
+
+      if (converged) {
+	ang = sp_(S, t_x, T_x, t_gamma, T_gamma);
+	if (S.noisy() > 0) cout << "cos " << ang << endl;
+// 	if (S.noisy() > 1) {
+// 	  S.F_gamma(X, Gamma, g);
+// 	  S.update_matrix(X, Gamma); S.mult_grad(X, Gamma, T_x, y);
+// 	  S.scaled_add(y, g, T_gamma, y);
+// 	  cout << "final tangent computed with the residual "
+// 	       << norm_(S, y) << endl;
+// 	}
+	if (ang >= S.minang()) { // accept the new couple
+	  S.clear_tau_hist();
+	  if (tangent_status == 0)
+	    bifurcation_detected =
+	      test_smooth_bifurcation(S, X, Gamma, T_x, T_gamma);
+	  else {
+	    bifurcation_detected = test_nonsmooth_bifurcation
+	      (S, x, gamma, t_x0, t_gamma0, X, Gamma, T_x, T_gamma);
+	  }
+	  if (bifurcation_detected) cout << "Bifurcation detected!" << endl;
+	  if (step_dec == 0 && it < S.thrit()) // elongate the step size
+	    h = (S.h_inc() * h < S.h_max()) ? S.h_inc() * h : S.h_max();
+	  finished = true;
+	}
+      }
+      
+      if (!finished) {
+	if (h > S.h_min()) { // diminish the step size
+	  h = (S.h_dec() * h > S.h_min()) ? S.h_dec() * h : S.h_min();
+	  step_dec++;
+	}
+	else if (tangent_status == 0) {
+	  if (S.noisy() > 1)
+	    cout << "Seeking a new tangent direction" << endl;
+	  unsigned long tan = 0;
+	  S.copy(t_x, T_x); T_gamma = t_gamma;
+	  S.scaled_add(x, T_x, h, X); Gamma = gamma + h * T_gamma;
+	  S.set_build(BUILD_ALL);
+	  compute_tangent(S, X, Gamma, T_x, T_gamma);
+
+	  do { // seek a new tangent
+	    if (S.noisy() > 1)
+	      cout << "Trying direction " << tan + 1 << endl;
+	    h = S.h_min();
+
+	    do { // test (T_x, T_gamma)
+	      tangent_status =
+		test_direction(S, x, gamma, t_x, t_gamma, T_x, T_gamma, h);
+	      if (tangent_status == 1) {
+		h *= -1.;
+		tangent_status =
+		  test_direction(S, x, gamma, t_x, t_gamma, T_x, T_gamma, h);
+	        h *= -2.;
+	      }
+	    } while (tangent_status == 1 && h <= 1e5);
+
+	    tan++;
+	  } while (tangent_status <= 2 && tan < 1); // tan >= 1?
+	  
+	  if (tangent_status >= 3) {
+	    if (S.noisy() > 1)
+	      cout << "Direction " << tan << " accepted" << endl;
+	    S.copy(T_x, t_x); t_gamma = T_gamma;
+	    if (tangent_status == 4) { 
+	      S.scale(t_x, -1.); t_gamma *= -1.; h /= 2.;
+	    }
+	    h = (h < S.h_init()) ? S.h_init() : h; step_dec = 0;
+	  } else break;
+	} else break;
+      }
+    } while (!finished);
+
+    if (finished) {
+      S.copy(X, x); gamma = Gamma;
+      S.copy(T_x, t_x); t_gamma = T_gamma;
+    } else h = 0;
+  }
+
+
+
+  //=========================================================================
+  // Moore-Penrose continuation method for Getfem models
+  //=========================================================================
+
+
+#ifdef GETFEM_MODELS_H__
+ 
+  struct cont_struct_getfem_model {
+    
+    typedef base_vector VECT;
+    typedef model_real_sparse_matrix MAT;
+    
+  private:
+    model *md;  // for real models only
+    std::string parameter_name_;
+    rmodel_plsolver_type lsolver;
+    double scfac_;
+    unsigned long maxit_, thrit_;
+    double maxres_, maxdiff_, minang_, h_init_, h_max_, h_min_, h_inc_,
+      h_dec_, epsilon_, maxres_solve_;
+    int noisy_;
+    unsigned long nb_test_;
+    bool with_parametrized_data;
+    std::string initdata_name_, finaldata_name_, currentdata_name_;
+    build_data build;
+    double tau1_, tau2_;
+    VECT tau_hist;
+    VECT b_x_, c_x_;
+    double b_gamma_, c_gamma_, d_;
+
+  public:
+    cont_struct_getfem_model
+    (model &m, const std::string &pn, rmodel_plsolver_type ls, double sfac,
+     unsigned long mit = 10, unsigned long tit = 8, double mres = 1.e-6,
+     double mdiff = 1.e-9, double mang = 0.9, double hin = 1.e-2,
+     double hmax = 1.e-1, double hmin = 1.e-5, double hinc = 1.3,
+     double hdec = 0.5, double eps = 1.e-8, double mress = 1.e-7,
+     int noi = 0, unsigned long ntest = 50)
+      : md(&m), parameter_name_(pn), lsolver(ls), scfac_(sfac), maxit_(mit),
+	thrit_(tit), maxres_(mres), maxdiff_(mdiff), minang_(mang),
+	h_init_(hin), h_max_(hmax), h_min_(hmin), h_inc_(hinc), h_dec_(hdec),
+	epsilon_(eps), maxres_solve_(mress), noisy_(noi), nb_test_(ntest),
+	with_parametrized_data(false), build(BUILD_ALL), tau1_(tau_init),
+	tau2_(tau_init), tau_hist(0)
+    {}
+    
+    cont_struct_getfem_model
+    (model &m, const std::string &pn, const std::string &in,
+     const std::string &fn, const std::string &cn, rmodel_plsolver_type ls,
+     double sfac, unsigned long mit = 10, unsigned long tit = 8,
+     double mres = 1.e-6, double mdiff = 1.e-9, double mang = 0.9,
+     double hin = 1.e-2, double hmax = 1.e-1, double hmin = 1.e-5,
+     double hinc = 1.3, double hdec = 0.5, double eps = 1.e-8,
+     double mress = 1.e-7, int noi = 0, unsigned long ntest = 50)
+      : md(&m), parameter_name_(pn), lsolver(ls), scfac_(sfac), maxit_(mit),
+	thrit_(tit), maxres_(mres), maxdiff_(mdiff), minang_(mang),
+	h_init_(hin), h_max_(hmax), h_min_(hmin), h_inc_(hinc), h_dec_(hdec),
+	epsilon_(eps), maxres_solve_(mress), noisy_(noi), nb_test_(ntest),
+	with_parametrized_data(true), initdata_name_(in),
+	finaldata_name_(fn), currentdata_name_(cn), build(BUILD_ALL),
+	tau1_(tau_init), tau2_(tau_init), tau_hist(0)
+    {}
+
+    cont_struct_getfem_model(void) {}
+    
+
+    // Linear algebra functions
+    double abs(double a)
+    { return gmm::abs(a); }
+    void clear(VECT &v)
+    { gmm::clear(v); }
+    void copy(const VECT &v1, VECT &v)
+    { gmm::copy(v1, v); }
+    void scale(VECT &v, double a)
+    { gmm::scale(v, a); }
+    void scaled_add(const VECT &v1, const VECT &v2, double a, VECT &v)
+    { gmm::add(v1, gmm::scaled(v2, a), v); }
+    void scaled_add(const VECT &v1, double a1,
+		    const VECT &v2, double a2, VECT &v)
+    { gmm::add(gmm::scaled(v1, a1), gmm::scaled(v2, a2), v); }
+    void scaled_add(const MAT &M1, double a1,
+		    const MAT &M2, double a2, MAT &M)
+    { gmm::add(gmm::scaled(M1, a1), gmm::scaled(M2, a2), M); }
+    double sp(const VECT &v1, const VECT &v2)
+    { return gmm::vect_sp(v1, v2); }
+    void mult(const MAT &A, const VECT &v1, VECT &v)
+    { gmm::mult(A, v1, v); }
+
+    void solve(const MAT &A, VECT &g, const VECT &L) { // A * g = L
+      if (noisy_ > 1) cout << "starting linear solver" << endl;
+      gmm::iteration iter(maxres_solve_, noisy_, 40000);
+      (*lsolver)(A, g, L, iter);
+      if (noisy_ > 1) cout << "linear solver done" << endl;
+    }
+
+    void solve(const MAT &A, VECT &g1, VECT &g2,
+	       const VECT &L1, const VECT &L2) { // A * (g1|g2) = (L1|L2)
+      if (noisy_ > 1) cout << "starting linear solver" << endl;
+      gmm::iteration iter(maxres_solve_, noisy_, 40000);
+      (*lsolver)(A, g1, L1, iter);
+      iter.init(); (*lsolver)(A, g2, L2, iter); // (can be optimised)
+      if (noisy_ > 1) cout << "linear solver done" << endl;
+    }
+
+
+    // Evaluation of  ...
+    void set_variables(const VECT &x, double gamma) {
+      md->set_real_variable(parameter_name_)[0] = gamma;
+      if (with_parametrized_data) {
+	gmm::add(gmm::scaled(md->real_variable(initdata_name_), 1. - gamma),
+		 gmm::scaled(md->real_variable(finaldata_name_), gamma),
+		 md->set_real_variable(currentdata_name_));
+      }
+      md->to_variables(x);
+    }
+
+    // F(x, gamma) --> f
+    void F(const VECT &x, double gamma, VECT &f) {
+      if (build == BUILD_ALL) set_variables(x, gamma);
+      if (build & BUILD_F) {
+	md->assembly(model::BUILD_RHS);
+	build = build_data(build ^ BUILD_F);
+      }
+      gmm::copy(gmm::scaled(md->real_rhs(), -1.), f);
+    }
+    
+    // (F(x, gamma + epsilon_) - F(x, gamma)) / epsilon_ --> g
+    void F_gamma(const VECT &x, double gamma, VECT &g) {
+      VECT F0(x), F1(x);
+      F(x, gamma, F0);
+      build = BUILD_ALL; F(x, gamma + epsilon_, F1); build = BUILD_ALL;
+      gmm::add(F1, gmm::scaled(F0, -1.), g);
+      gmm::scale(g, 1./epsilon_);
+    }
+
+    void update_matrix(const VECT &x, double gamma) {
+      if (build == BUILD_ALL) set_variables(x, gamma);
+      if (build & BUILD_F_x) {
+	if (noisy_ > 1) cout << "starting computing tangent matrix" << endl;
+	md->assembly(model::BUILD_MATRIX);
+	build = build_data(build ^ BUILD_F_x);
+      }
+    }
+    // F_x(x, gamma) --> A
+    void F_x(const VECT &x, double gamma, MAT &A) {
+      update_matrix(x, gamma);
+      unsigned long nbdof = md->nb_dof();
+      gmm::resize(A, nbdof, nbdof);
+      gmm::copy(md->real_tangent_matrix(), A);
+    }
+
+    // solve F_x(x, gamma) * g = L
+    void solve_grad(const VECT &x, double gamma,
+		    VECT &g, const VECT &L) {
+      update_matrix(x, gamma);
+      solve(md->real_tangent_matrix(), g, L);
+    }
+
+    // solve F_x(x, gamma) * (g1|g2) = (L1|L2)
+    void solve_grad(const VECT &x, double gamma, VECT &g1,VECT &g2,
+		    const VECT &L1, const VECT &L2) {
+      update_matrix(x, gamma);
+      solve(md->real_tangent_matrix(), g1, g2, L1, L2);
+    }
+
+    // F_x(x, gamma) * w --> y
+    void mult_grad(const VECT &x, double gamma,
+			const VECT &w, VECT &y) {
+      update_matrix(x, gamma);
+      mult(md->real_tangent_matrix(), w, y);
+    }
+
+    
+    // Misc.
+    model &linked_model(void) { return *md; }
+    std::string parameter_name(void) { return parameter_name_; }
+    double scfac(void) { return scfac_; }
+    unsigned long thrit(void) { return thrit_; }
+    unsigned long maxit(void) { return maxit_; }
+    double epsilon(void) { return epsilon_; }
+    double minang(void) { return minang_; }
+    double maxres(void) { return maxres_; }
+    double maxdiff(void) { return maxdiff_; }
+    double h_init(void) { return h_init_; }
+    double h_min(void) { return h_min_; }
+    double h_max(void) { return h_max_; }
+    double h_dec(void) { return h_dec_; }
+    double h_inc(void) { return h_inc_; }
+    int noisy(void) { return noisy_; }
+    unsigned long nb_test(void) { return nb_test_; }
+    void set_build(build_data build_) { build = build_; }
+    void set_tau1(double tau) { tau1_ = tau; }
+    double tau1(void) { return tau1_; }
+    void set_tau2(double tau) { tau2_ = tau; }
+    double tau2(void) { return tau2_; }
+
+    void init_border(const VECT &v) {
+      srand(unsigned(time(NULL)));
+      gmm::resize(b_x_, gmm::vect_size(v)); gmm::fill_random(b_x_);
+      gmm::resize(c_x_, gmm::vect_size(v)); gmm::fill_random(c_x_);
+      b_gamma_ = gmm::random(1.); c_gamma_ = gmm::random(1.);
+      d_ = gmm::random(1.);
+    }
+    VECT &b_x(void) { return b_x_; }
+    VECT &c_x(void) { return c_x_; }
+    double b_gamma(void) { return b_gamma_; }
+    double c_gamma(void) { return c_gamma_; }
+    double d(void) { return d_; }
+
+    void clear_tau_hist(void) { gmm::resize(tau_hist, 0); }
+    void init_tau_hist(void) {
+      gmm::resize(tau_hist, nb_test_ + 1);
+      tau_hist[0] = tau2_;
+    }
+    void set_tau_hist(unsigned long i, double a) {
+      GMM_ASSERT2(i < nb_test_ + 1, "out of range");
+      tau_hist[i] = a;
+    }
+    VECT &get_tau_hist(void) { return tau_hist; }
+  };
+
+#endif
+
+
+}  /* end of namespace getfem.                                             */
+
+
+#endif /* GETFEM_CONTINUATION_H__ */
diff --git a/src/getfem/getfem_convect.h b/src/getfem/getfem_convect.h
index 97e00b7..97d0024 100644
--- a/src/getfem/getfem_convect.h
+++ b/src/getfem/getfem_convect.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_convect.h
    @author Yves Renard <Yves.Renard at insa-lyon.fr>,
diff --git a/src/getfem/getfem_crack_sif.h b/src/getfem/getfem_crack_sif.h
index 1fb28cd..b979927 100644
--- a/src/getfem/getfem_crack_sif.h
+++ b/src/getfem/getfem_crack_sif.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard,  Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard,  Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_crack_sif.h
    @author  Julien Pommier
diff --git a/src/getfem/getfem_derivatives.h b/src/getfem/getfem_derivatives.h
index 8fd65cc..9f03e8e 100644
--- a/src/getfem/getfem_derivatives.h
+++ b/src/getfem/getfem_derivatives.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_derivatives.h
    @author Yves Renard <Yves.Renard at insa-lyon.fr>,
@@ -74,8 +75,8 @@ namespace getfem
 
     GMM_ASSERT1(&mf.linked_mesh() == &mf_target.linked_mesh(),
                 "meshes are different.");
-    GMM_ASSERT1(target_qdim == qdim || target_qdim == 1,
-                "invalid Qdim for gradient mesh_fem");
+    GMM_ASSERT1(target_qdim == qdim*N || target_qdim == qdim
+		|| target_qdim == 1, "invalid Qdim for gradient mesh_fem");
     
     base_matrix G;
     std::vector<T> coeff;
diff --git a/src/getfem/getfem_error_estimate.h b/src/getfem/getfem_error_estimate.h
index bd92870..3b91630 100644
--- a/src/getfem/getfem_error_estimate.h
+++ b/src/getfem/getfem_error_estimate.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard, Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 /**
diff --git a/src/getfem/getfem_export.h b/src/getfem/getfem_export.h
index 849dde7..7e0eb0f 100644
--- a/src/getfem/getfem_export.h
+++ b/src/getfem/getfem_export.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_export.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>,
diff --git a/src/getfem/getfem_external_data_fem.h b/src/getfem/getfem_external_data_fem.h
index dee7623..925c523 100644
--- a/src/getfem/getfem_external_data_fem.h
+++ b/src/getfem/getfem_external_data_fem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_external_data_fem.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_fem.h b/src/getfem/getfem_fem.h
index ebf8877..48eb376 100644
--- a/src/getfem/getfem_fem.h
+++ b/src/getfem/getfem_fem.h
@@ -1,34 +1,35 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
-
-/**@file getfem_fem.h 
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+
+/**@file getfem_fem.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
    @date December 21, 1999.
    @brief Definition of the finite element methods.
@@ -37,7 +38,7 @@
    base class of all FEM.
 
    @section fem_list List of FEM known by getfem::fem_descriptor :
-   
+
    - "FEM_PK(N,K)" : classical Lagrange element PK on a simplex.
 
    - "FEM_PK_DISCONTINUOUS(N,K,alpha)" : discontinuous Lagrange
@@ -49,7 +50,7 @@
    element QK on a parallelepiped.
 
    - "FEM_Q2_INCOMPLETE" : incomplete Q2 element with 8 dof (serendipity
-                           Quad 8 element) 
+                           Quad 8 element)
 
    - "FEM_PK_PRISM(N,K)" : classical Lagrange element PK on a prism.
 
@@ -134,39 +135,39 @@ namespace getfem {
 
   /// Type representing a pointer on a dof_description
   typedef dof_description *pdof_description;
-  
+
   /** @brief Description of a unique dof of lagrange type (value at the node).
    * @param d the dimension of the reference element (2 for triangles, 3 for tetrahedrons ...)
    */
   pdof_description lagrange_dof(dim_type d);
-  
-  /** Description of a unique dof of derivative type. 
+
+  /** Description of a unique dof of derivative type.
    *  (a derivative at the node).
    *  @param d the dimension of the reference element.
    *  @param r corresponds to the variable number for which the derivative is taken (0 <= r < d)
    */
   pdof_description derivative_dof(dim_type d, dim_type r);
 
-  /** Description of a unique dof of second derivative type. 
+  /** Description of a unique dof of second derivative type.
    *  @param d the dimension of the reference element.
    *  @param num_der1 corresponds to the variable number for which the first derivative is taken (0 <= r < d)
    *  @param num_der2 corresponds to the variable number for which the second derivative is taken (0 <= r < d)
    */
-  pdof_description second_derivative_dof(dim_type d, 
-					 dim_type num_der1, 
-					 dim_type num_der2);
-  
+  pdof_description second_derivative_dof(dim_type d,
+                                         dim_type num_der1,
+                                         dim_type num_der2);
+
   /** Description of a unique dof of normal derivative type
    *  (normal derivative at the node, regarding a face).
    *  @param d the dimension of the reference element.
-   */  
+   */
   pdof_description normal_derivative_dof(dim_type d);
 
   /** Description of a unique dof of mean value type.
    *  @param d the dimension of the reference element.
    */
   pdof_description mean_value_dof(dim_type d);
-  
+
   pdof_description bubble1_dof(dim_type ct);
 
   /** Description of a global dof, i.e. a numbered dof having a global scope.
@@ -203,11 +204,11 @@ namespace getfem {
 
 
   /* @} */
-  
+
   /* ******************************************************************** */
-  /*	Classes for description of a finite element.                      */
+  /*    Classes for description of a finite element.                      */
   /* ******************************************************************** */
-  
+
   /** @defgroup pfem Finite element description
    *
    * @{
@@ -216,25 +217,25 @@ namespace getfem {
 
   class virtual_fem;
 
-  /** type of pointer on a fem description @see getfem::virtual_fem */ 
+  /** type of pointer on a fem description @see getfem::virtual_fem */
   typedef boost::intrusive_ptr<const getfem::virtual_fem> pfem;
-  
-  struct fem_precomp_; 
+
+  class fem_precomp_;
   typedef boost::intrusive_ptr<const getfem::fem_precomp_> pfem_precomp;
 
   class fem_interpolation_context;
-  
+
   /** @brief Base class for finite element description */
   class virtual_fem : virtual public dal::static_stored_object {
   public :
     enum vec_type { VECTORIAL_NOTRANSFORM_TYPE, VECTORIAL_PRIMAL_TYPE,
-		    VECTORIAL_DUAL_TYPE };
+                    VECTORIAL_DUAL_TYPE };
 
   protected :
 
     mutable std::vector<pdof_description> dof_types_;
-    /* this convex structure is "owned" by the virtual_fem 
-       (a deep copy is made when virtual_fems are copied) 
+    /* this convex structure is "owned" by the virtual_fem
+       (a deep copy is made when virtual_fems are copied)
        But cvs_node has to be a pointer, as bgeot::convex_structure
        inherits from dal::static_stored_object
     */
@@ -242,22 +243,22 @@ namespace getfem {
     bgeot::convex<base_node> cv_node;
     mutable bgeot::pstored_point_tab pspt;
     mutable bool pspt_valid;
-    bgeot::pconvex_ref cvr; /// reference element.
-    dim_type ntarget_dim; /// dimension of the target space
-    mutable dim_type dim_; /// dimension of the reference element 
-    bool is_equiv; /// true if the FEM is equivalent
-    bool is_lag; /// true if the FEM is of Lagrange type
-    bool is_pol; /// true if the FEM is polynomial
-    bool is_polycomp; /// true if the FEM is polynomial composite
+    bgeot::pconvex_ref cvr; // reference element.
+    dim_type ntarget_dim;   // dimension of the target space
+    mutable dim_type dim_;  // dimension of the reference element
+    bool is_equiv;          // true if the FEM is equivalent
+    bool is_lag;            // true if the FEM is of Lagrange type
+    bool is_pol;            // true if the FEM is polynomial
+    bool is_polycomp;       // true if the FEM is polynomial composite
     bool real_element_defined;
-    short_type es_degree; // estimated polynomial degree of the FEM
-    short_type hier_raff; /// hierarchical refinement of the FEM
+    short_type es_degree;   // estimated polynomial degree of the FEM
+    short_type hier_raff;   // hierarchical refinement of the FEM
     vec_type vtype; // for vectorial elements, type of transformation
                     // from the reference element.
     std::string debug_name_;
-    
+
   public :
-    /** Number of degrees of freedom. 
+    /** Number of degrees of freedom.
 
        @param cv the convex number for this FEM. This information is
        rarely used, by is needed by some "special" FEMs, such as
@@ -274,7 +275,7 @@ namespace getfem {
     size_type nb_components(size_type cv) const
       { return nb_dof(cv) * ntarget_dim; }
     /// Get the array of pointer on dof description.
-    const std::vector<pdof_description> &dof_types(void) const 
+    const std::vector<pdof_description> &dof_types(void) const
       { return dof_types_; }
     short_type hierarchical_raff(void) const { return hier_raff; }
     /// dimension of the reference element.
@@ -299,18 +300,18 @@ namespace getfem {
     { return node_convex(cv).structure(); }
     const std::string &debug_name(void) const { return debug_name_; }
     std::string &debug_name(void) { return debug_name_; }
-    virtual bgeot::pstored_point_tab node_tab(size_type) const { 
+    virtual bgeot::pstored_point_tab node_tab(size_type) const {
       if (!pspt_valid) {
-	pspt = bgeot::store_point_tab(cv_node.points());
-	pspt_valid = true;
+        pspt = bgeot::store_point_tab(cv_node.points());
+        pspt_valid = true;
       }
       return pspt;
     }
     /** Gives the node corresponding to the dof i.
-	@param cv the convex number for this FEM. This information is
-	rarely used, by is needed by some "special" FEMs, such as
-	getfem::interpolated_fem.
-	@param i the local dof number (<tt>i < nb_dof(cv)</tt>)
+        @param cv the convex number for this FEM. This information is
+        rarely used, by is needed by some "special" FEMs, such as
+        getfem::interpolated_fem.
+        @param i the local dof number (<tt>i < nb_dof(cv)</tt>)
     */
     const base_node &node_of_dof(size_type cv, size_type i) const
       { return (*(node_tab(cv)))[i];}
@@ -329,55 +330,55 @@ namespace getfem {
     bool &is_polynomial(void) { return is_pol; }
     short_type estimated_degree(void) const { return es_degree; }
     short_type &estimated_degree(void) { return es_degree; }
-    
+
     virtual void mat_trans(base_matrix &, const base_matrix &,
-			   bgeot::pgeometric_trans) const
+                           bgeot::pgeometric_trans) const
     { GMM_ASSERT1(false, "This function should not be called."); }
     /** Interpolate at an arbitrary point x given on the reference
-	element.
-	
-	@param c the fem_interpolation_context, should have been
-	suitably initialized for the point of evaluation.
-
-	@param coeff is the vector of coefficient relatively to
-	the base functions, its length should be @c Qdim*this->nb_dof().
-
-	@param val contains the interpolated value, on output (its
-	size should be @c Qdim*this->target_dim()).
-	
-	@param Qdim is the optional Q dimension, if the FEM is
-	considered as a "vectorized" one.
+        element.
+
+        @param c the fem_interpolation_context, should have been
+        suitably initialized for the point of evaluation.
+
+        @param coeff is the vector of coefficient relatively to
+        the base functions, its length should be @c Qdim*this->nb_dof().
+
+        @param val contains the interpolated value, on output (its
+        size should be @c Qdim*this->target_dim()).
+
+        @param Qdim is the optional Q dimension, if the FEM is
+        considered as a "vectorized" one.
     */
-    template<typename CVEC, typename VVEC> 
-    void interpolation(const fem_interpolation_context& c, 
-		       const CVEC& coeff, VVEC &val, dim_type Qdim) const;
+    template<typename CVEC, typename VVEC>
+    void interpolation(const fem_interpolation_context& c,
+                       const CVEC& coeff, VVEC &val, dim_type Qdim) const;
 
     /** Build the interpolation matrix for the interpolation at a
-	fixed point x, given on the reference element.
+        fixed point x, given on the reference element.
 
-	The matrix @c M is filled, such that for a given @c coeff
-	vector, the interpolation is given by @c M*coeff.
+        The matrix @c M is filled, such that for a given @c coeff
+        vector, the interpolation is given by @c M*coeff.
      */
     template <typename MAT>
-    void interpolation(const fem_interpolation_context& c, 
-		       MAT &M, dim_type Qdim) const;
+    void interpolation(const fem_interpolation_context& c,
+                       MAT &M, dim_type Qdim) const;
 
     /** Interpolation of the gradient. The output is stored in the @f$
-	Q\times N at f$ matrix @c val.
+        Q\times N at f$ matrix @c val.
      */
-    template<typename CVEC, typename VMAT> 
-    void interpolation_grad(const fem_interpolation_context& c, 
-			    const CVEC& coeff, VMAT &val,
-			    dim_type Qdim=1) const;
+    template<typename CVEC, typename VMAT>
+    void interpolation_grad(const fem_interpolation_context& c,
+                            const CVEC& coeff, VMAT &val,
+                            dim_type Qdim=1) const;
 
     /** Interpolation of the hessian. The output is stored in the @f$
-	Q\times (N^2)@f$ matrix @c val.
+        Q\times (N^2)@f$ matrix @c val.
      */
-    template<typename CVEC, typename VMAT> 
-    void interpolation_hess(const fem_interpolation_context& c, 
-			    const CVEC& coeff, VMAT &val,
-			    dim_type Qdim) const;
-      
+    template<typename CVEC, typename VMAT>
+    void interpolation_hess(const fem_interpolation_context& c,
+                            const CVEC& coeff, VMAT &val,
+                            dim_type Qdim) const;
+
     /** Give the value of all components of the base functions at the
      *  point x of the reference element. Basic function used essentially
      *  by fem_precomp.
@@ -397,29 +398,29 @@ namespace getfem {
     virtual void hess_base_value(const base_node &x, base_tensor &t) const = 0;
 
     /** Give the value of all components of the base functions at the
-	current point of the fem_interpolation_context.  Used by
-	elementary computations.  if withM is false the matrix M for
-	non tau-equivalent elements is not taken into account.
+        current point of the fem_interpolation_context.  Used by
+        elementary computations.  if withM is false the matrix M for
+        non tau-equivalent elements is not taken into account.
     */
-    virtual void real_base_value(const fem_interpolation_context &c, 
-				 base_tensor &t, bool withM = true) const;
+    virtual void real_base_value(const fem_interpolation_context &c,
+                                 base_tensor &t, bool withM = true) const;
 
     /** Give the gradient of all components of the base functions at the
-	current point of the fem_interpolation_context.  Used by
-	elementary computations.  if withM is false the matrix M for
-	non tau-equivalent elements is not taken into account.
+        current point of the fem_interpolation_context.  Used by
+        elementary computations.  if withM is false the matrix M for
+        non tau-equivalent elements is not taken into account.
     */
-    virtual void real_grad_base_value(const fem_interpolation_context &c, 
-				      base_tensor &t, bool withM = true) const;
+    virtual void real_grad_base_value(const fem_interpolation_context &c,
+                                      base_tensor &t, bool withM = true) const;
 
     /** Give the hessian of all components of the base functions at the
-	current point of the fem_interpolation_context.  Used by
-	elementary computations. if withM is false the matrix M for
-	non tau-equivalent elements is not taken into account.
+        current point of the fem_interpolation_context.  Used by
+        elementary computations. if withM is false the matrix M for
+        non tau-equivalent elements is not taken into account.
     */
-    virtual void real_hess_base_value(const fem_interpolation_context &c, 
-				      base_tensor &t, bool withM = true) const;
-    
+    virtual void real_hess_base_value(const fem_interpolation_context &c,
+                                      base_tensor &t, bool withM = true) const;
+
     virtual size_type index_of_global_dof(size_type, size_type) const
       { GMM_ASSERT1(false, "internal error."); }
 
@@ -428,16 +429,17 @@ namespace getfem {
      * on which the corresponding base function is non zero.
      */
     void add_node(const pdof_description &d, const base_node &pt,
-		  const dal::bit_vector &faces);    
+                  const dal::bit_vector &faces);
     void add_node(const pdof_description &d, const base_node &pt);
     void init_cvs_node(void);
     void unfreeze_cvs_node(void);
 
-    virtual_fem &operator =(const virtual_fem &f) { 
+    virtual_fem &operator =(const virtual_fem &f) {
       copy(f); return *this;
     }
-    virtual_fem(void) { 
-      ntarget_dim = 1; dim_ = 1; 
+
+    virtual_fem(void) {
+      ntarget_dim = 1; dim_ = 1;
       is_equiv = is_pol = is_polycomp = is_lag = false;
       pspt_valid = false; hier_raff = 0; real_element_defined = false;
       es_degree = 5;
@@ -480,9 +482,9 @@ namespace getfem {
   template <class FUNC> class fem : public virtual_fem {
   protected :
     std::vector<FUNC> base_;
-    
+
   public :
-    
+
     /// Gives the array of basic functions (components).
     const std::vector<FUNC> &base(void) const { return base_; }
     std::vector<FUNC> &base(void) { return base_; }
@@ -493,7 +495,7 @@ namespace getfem {
       size_type R = nb_base_components(0);
       base_tensor::iterator it = t.begin();
       for (size_type  i = 0; i < R; ++i, ++it)
-	*it = base_[i].eval(x.begin());
+        *it = base_[i].eval(x.begin());
     }
     void grad_base_value(const base_node &x, base_tensor &t) const {
       bgeot::multi_index mi(3);
@@ -503,8 +505,8 @@ namespace getfem {
       size_type R = nb_base_components(0);
       base_tensor::iterator it = t.begin();
       for (dim_type j = 0; j < n; ++j)
-	for (size_type i = 0; i < R; ++i, ++it)
-	  { FUNC f = base_[i]; f.derivative(j); *it = f.eval(x.begin()); }
+        for (size_type i = 0; i < R; ++i, ++it)
+          { FUNC f = base_[i]; f.derivative(j); *it = f.eval(x.begin()); }
     }
     void hess_base_value(const base_node &x, base_tensor &t) const {
       bgeot::multi_index mi(4);
@@ -515,22 +517,21 @@ namespace getfem {
       size_type R = nb_base_components(0);
       base_tensor::iterator it = t.begin();
       for (dim_type k = 0; k < n; ++k)
-	for (dim_type j = 0; j < n; ++j)
-	  for (size_type i = 0; i < R; ++i, ++it) {
-	    FUNC f = base_[i];
-	    f.derivative(j); f.derivative(k);
-	    *it = f.eval(x.begin());
-	  }
+        for (dim_type j = 0; j < n; ++j)
+          for (size_type i = 0; i < R; ++i, ++it) {
+            FUNC f = base_[i];
+            f.derivative(j); f.derivative(k);
+            *it = f.eval(x.begin());
+          }
     }
-    
-    
+
   };
-  
+
   /** Classical polynomial FEM. */
   typedef const fem<base_poly> * ppolyfem;
   /** Polynomial composite FEM */
   typedef const fem<bgeot::polynomial_composite> * ppolycompfem;
-  
+
   /** Give a pointer on the structures describing the classical
       polynomial fem of degree k on a given convex type.
 
@@ -539,7 +540,7 @@ namespace getfem {
       @return a ppolyfem.
   */
   pfem classical_fem(bgeot::pgeometric_trans pgt, short_type k);
-  
+
   /** Give a pointer on the structures describing the classical
       polynomial discontinuous fem of degree k on a given convex type.
 
@@ -548,7 +549,7 @@ namespace getfem {
       @param k the degree of the fem.
 
       @param alpha the "inset" factor for the dof nodes: with alpha =
-      0, the nodes are located as usual (i.e. with node on the convex border), 
+      0, the nodes are located as usual (i.e. with node on the convex border),
       and for 0 < alpha < 1, they converge to the center of gravity of the convex.
 
       @return a ppolyfem.
@@ -565,36 +566,38 @@ namespace getfem {
   pfem QK_fem(size_type n, short_type k);
   pfem PK_prism_fem(size_type n, short_type k);
 
-
   /**
      Pre-computations on a fem (given a fixed set of points on the
      reference convex, this object computes the value/gradient/hessian
      of all base functions on this set of points and stores them.
   */
   class fem_precomp_ : virtual public dal::static_stored_object {
-  protected:      
+  protected:
     pfem pf;
     bgeot::pstored_point_tab pspt;
-    mutable std::vector<base_tensor> c; /// store values of base functions
-    mutable std::vector<base_tensor> pc; /// store gradients of base functions
-    mutable std::vector<base_tensor> hpc; /// store hessians of base functions
-  public:    
+    mutable std::vector<base_tensor> c;   // store values of base functions
+    mutable std::vector<base_tensor> pc;  // store gradients of base functions
+    mutable std::vector<base_tensor> hpc; // store hessians of base functions
+  public:
+    /// returns values of the base functions
     inline const base_tensor &val(size_type i) const
-    { if (c.empty()) init_val(); return c[i]; }
+      { if (c.empty()) init_val(); return c[i]; }
+    /// returns gradients of the base functions
     inline const base_tensor &grad(size_type i) const
-    { if (pc.empty()) init_grad(); return pc[i]; }
+      { if (pc.empty()) init_grad(); return pc[i]; }
+    /// returns hessians of the base functions
     inline const base_tensor &hess(size_type i) const
-    { if (hpc.empty()) init_hess(); return hpc[i]; }
+      { if (hpc.empty()) init_hess(); return hpc[i]; }
     inline pfem get_pfem() const { return pf; }
     inline const bgeot::stored_point_tab& get_point_tab() const
-    { return *pspt; }
+      { return *pspt; }
     fem_precomp_(pfem, bgeot::pstored_point_tab);
   private:
     void init_val() const;
     void init_grad() const;
-    void init_hess() const;    
+    void init_hess() const;
   };
-  
+
 
   /** @brief Handles precomputations for FEM.  statically allocates a
      fem-precomputation object, and returns a pointer to it. The
@@ -614,7 +617,7 @@ namespace getfem {
      them via a getfem::fem_precomp_pool structure. All memory will be
      freed when this structure will be destroyed.  */
   pfem_precomp fem_precomp(pfem pf, bgeot::pstored_point_tab pspt,
-			   dal::pstatic_stored_object dep);
+                           dal::pstatic_stored_object dep);
 
   /** Request for the removal of a pfem_precomp */
   inline void delete_fem_precomp(pfem_precomp pfp)
@@ -630,19 +633,19 @@ namespace getfem {
   */
   class fem_precomp_pool {
     std::set<pfem_precomp> precomps;
-    
+
   public :
-    
+
     /** Request a pfem_precomp. If not already in the pool, the
-	pfem_precomp is computed, and added to the pool.
-	
+        pfem_precomp is computed, and added to the pool.
+
         @param pf a pointer to the fem object.
-	@param pspt a pointer to a list of points in the reference convex.CAUTION:
-	this array must not be destroyed as long as the fem_precomp is used!!
-	
-	Moreover pspt is supposed to identify uniquely the set of
-	points. This means that you should NOT alter its content until
-	the fem_precomp_pool is destroyed.
+        @param pspt a pointer to a list of points in the reference convex.CAUTION:
+        this array must not be destroyed as long as the fem_precomp is used!!
+
+        Moreover pspt is supposed to identify uniquely the set of
+        points. This means that you should NOT alter its content until
+        the fem_precomp_pool is destroyed.
     */
     pfem_precomp operator()(pfem pf, bgeot::pstored_point_tab pspt) {
       pfem_precomp p = fem_precomp(pf, pspt, 0);
@@ -652,8 +655,8 @@ namespace getfem {
     void clear(void);
     ~fem_precomp_pool() { clear(); }
   };
- 
-    
+
+
   /** structure passed as the argument of fem interpolation
       functions. This structure can be partially filled (for example
       the xreal will be computed if needed as long as pgp+ii is known).
@@ -661,11 +664,11 @@ namespace getfem {
   class fem_interpolation_context :
     public bgeot::geotrans_interpolation_context {
 
-    mutable base_matrix M_; /// optional transformation matrix (for non tau-equivalent fems)
-    pfem pf_;               /// current fem 
-    pfem_precomp pfp_;      /// optional fem_precomp_ (speed up the computations)
-    size_type convex_num_;  /// the convex number (info needed by some specific FEMs)
-    size_type face_num_;    /// Face number for boundary integration
+    mutable base_matrix M_; // optional transformation matrix (for non tau-equivalent fems)
+    pfem pf_;               // current fem
+    pfem_precomp pfp_;      // optional fem_precomp_ (speed up the computations)
+    size_type convex_num_;  // the convex number (info needed by some specific FEMs)
+    size_type face_num_;    // Face number for boundary integration
   public:
     /// true if a fem_precomp_ has been supplied.
     bool have_pfp() const { return pfp_ != 0; }
@@ -674,15 +677,15 @@ namespace getfem {
     /// non tau-equivalent transformation matrix.
     const base_matrix& M() const;
     /** fill the tensor with the values of the base functions (taken
-	at point @c this->xref())
+        at point @c this->xref())
     */
     void base_value(base_tensor& t, bool withM = true) const;
     /** fill the tensor with the gradient of the base functions (taken
-	at point @c this->xref())
+        at point @c this->xref())
     */
     void grad_base_value(base_tensor& t, bool withM = true) const;
     /** fill the tensor with the hessian of the base functions (taken
-	at point @c this->xref())
+        at point @c this->xref())
     */
     void hess_base_value(base_tensor& t, bool withM = true) const;
     /** get the current FEM descriptor */
@@ -696,73 +699,76 @@ namespace getfem {
     void set_pfp(pfem_precomp newpfp);
     void set_pf(pfem newpf);
     fem_interpolation_context();
-    fem_interpolation_context(bgeot::pgeotrans_precomp pgp__, 
-			      pfem_precomp pfp__, size_type ii__, 
-			      const base_matrix& G__, 
-			      size_type convex_num__,
-			      size_type face_num__ = size_type(-1));
-    fem_interpolation_context(bgeot::pgeometric_trans pgt__, 
-			      pfem_precomp pfp__, size_type ii__, 
-			      const base_matrix& G__, 
-			      size_type convex_num__,
-			      size_type face_num__ = size_type(-1));
+    fem_interpolation_context(bgeot::pgeotrans_precomp pgp__,
+                              pfem_precomp pfp__, size_type ii__,
+                              const base_matrix& G__,
+                              size_type convex_num__,
+                              size_type face_num__ = size_type(-1));
+    fem_interpolation_context(bgeot::pgeometric_trans pgt__,
+                              pfem_precomp pfp__, size_type ii__,
+                              const base_matrix& G__,
+                              size_type convex_num__,
+                              size_type face_num__ = size_type(-1));
     fem_interpolation_context(bgeot::pgeometric_trans pgt__,
-			      pfem pf__,
-			      const base_node& xref__,
-			      const base_matrix& G__,
-			      size_type convex_num__,
-			      size_type face_num__ = size_type(-1));
+                              pfem pf__,
+                              const base_node& xref__,
+                              const base_matrix& G__,
+                              size_type convex_num__,
+                              size_type face_num__ = size_type(-1));
   };
 
   template <typename CVEC, typename VVEC>
-  void virtual_fem::interpolation(const fem_interpolation_context& c, 
-				  const CVEC& coeff, VVEC &val,
-				  dim_type Qdim) const {
+  void virtual_fem::interpolation(const fem_interpolation_context& c,
+                                  const CVEC& coeff, VVEC &val,
+                                  dim_type Qdim) const {
     size_type Qmult = size_type(Qdim) / target_dim();
-    GMM_ASSERT1(gmm::vect_size(val) == Qdim, "dimensions mismatch");
     size_type R = nb_dof(c.convex_num());
-    
+    GMM_ASSERT1(gmm::vect_size(val) == Qdim, "dimensions mismatch");
+    GMM_ASSERT1(gmm::vect_size(coeff) == R*Qmult,
+		"Wrong size for coeff vector");
+
     gmm::clear(val);
     base_tensor Z; real_base_value(c, Z);
+    
     for (size_type j = 0; j < R; ++j) {
       for (size_type q = 0; q < Qmult; ++q) {
-	typename gmm::linalg_traits<CVEC>::value_type co = 0.0;
-	co = coeff[j*Qmult+q];
-	for (size_type r = 0; r < target_dim(); ++r)
-	  val[r + q*target_dim()] += co * Z[j + r*R];
-      } 
+        typename gmm::linalg_traits<CVEC>::value_type co = 0.0;
+        co = coeff[j*Qmult+q];
+        for (size_type r = 0; r < target_dim(); ++r)
+          val[r + q*target_dim()] += co * Z[j + r*R];
+      }
     }
   }
 
   template <typename MAT>
-  void virtual_fem::interpolation(const fem_interpolation_context& c, 
-				  MAT &M, dim_type Qdim) const {
+  void virtual_fem::interpolation(const fem_interpolation_context& c,
+                                  MAT &M, dim_type Qdim) const {
     size_type Qmult = size_type(Qdim) / target_dim();
     size_type R = nb_dof(c.convex_num());
     GMM_ASSERT1(gmm::mat_nrows(M) == Qdim && gmm::mat_ncols(M) == R*Qmult,
-		"dimensions mismatch");
+                "dimensions mismatch");
 
     gmm::clear(M);
     base_tensor Z; real_base_value(c, Z);
     for (size_type j = 0; j < R; ++j) {
       for (size_type q = 0; q < Qmult; ++q) {
-	for (size_type r = 0; r < target_dim(); ++r)
-	  M(r+q*target_dim(), j*Qmult+q) = Z[j + r*R];
-      } 
+        for (size_type r = 0; r < target_dim(); ++r)
+          M(r+q*target_dim(), j*Qmult+q) = Z[j + r*R];
+      }
     }
   }
 
 
-  template<typename CVEC, typename VMAT> 
-  void virtual_fem::interpolation_grad(const fem_interpolation_context& c, 
-				       const CVEC& coeff, VMAT &val,
-				       dim_type Qdim) const {
+  template<typename CVEC, typename VMAT>
+  void virtual_fem::interpolation_grad(const fem_interpolation_context& c,
+                                       const CVEC& coeff, VMAT &val,
+                                       dim_type Qdim) const {
     typedef typename gmm::linalg_traits<CVEC>::value_type T;
     size_type Qmult = size_type(Qdim) / target_dim();
     dim_type N = dim_type(c.N());
     GMM_ASSERT1(gmm::mat_ncols(val) == N && gmm::mat_nrows(val) == Qdim,
-		"dimensions mismatch");
-    
+                "dimensions mismatch");
+
     base_tensor t;
     size_type R = nb_dof(c.convex_num());
 
@@ -771,23 +777,23 @@ namespace getfem {
     for (size_type q = 0; q < Qmult; ++q) {
       base_tensor::const_iterator it = t.begin();
       for (size_type k = 0; k < N; ++k)
-	for (size_type r = 0; r < target_dim(); ++r)
-	  for (size_type j = 0; j < R; ++j, ++it)	      
-	    val(r + q*target_dim(), k) += coeff[j*Qmult+q] * (*it);
+        for (size_type r = 0; r < target_dim(); ++r)
+          for (size_type j = 0; j < R; ++j, ++it)
+            val(r + q*target_dim(), k) += coeff[j*Qmult+q] * (*it);
     }
   }
 
 
-  template<typename CVEC, typename VMAT> 
-  void virtual_fem::interpolation_hess(const fem_interpolation_context& c, 
-				       const CVEC& coeff, VMAT &val,
-				       dim_type Qdim) const {
+  template<typename CVEC, typename VMAT>
+  void virtual_fem::interpolation_hess(const fem_interpolation_context& c,
+                                       const CVEC& coeff, VMAT &val,
+                                       dim_type Qdim) const {
     typedef typename gmm::linalg_traits<CVEC>::value_type T;
     size_type Qmult = size_type(Qdim) / target_dim();
     dim_type N = dim_type(c.N());
     GMM_ASSERT1(gmm::mat_ncols(val) == gmm::size_type(N*N)
-		&& gmm::mat_nrows(val) == Qdim, "dimensions mismatch");
-    
+                && gmm::mat_nrows(val) == Qdim, "dimensions mismatch");
+
     base_tensor t;
     size_type R = nb_dof(c.convex_num());
 
@@ -796,9 +802,9 @@ namespace getfem {
     for (size_type q = 0; q < Qmult; ++q) {
       base_tensor::const_iterator it = t.begin();
       for (size_type k = 0; k < size_type(N*N); ++k)
-	for (size_type r = 0; r < target_dim(); ++r)
-	  for (size_type j = 0; j < R; ++j, ++it)
-	    val(r + q*target_dim(), k) += coeff[j*Qmult+q] * (*it);
+        for (size_type r = 0; r < target_dim(); ++r)
+          for (size_type j = 0; j < R; ++j, ++it)
+            val(r + q*target_dim(), k) += coeff[j*Qmult+q] * (*it);
     }
   }
 
@@ -812,7 +818,7 @@ namespace getfem {
   { p = bgeot::read_base_poly(short_type(d), s); }
 
   void add_fem_name(std::string name,
-		    dal::naming_system<virtual_fem>::pfunction f);
+                    dal::naming_system<virtual_fem>::pfunction f);
 
 
   /* @} */
diff --git a/src/getfem/getfem_fem_level_set.h b/src/getfem/getfem_fem_level_set.h
index 8cddc4f..e597896 100644
--- a/src/getfem/getfem_fem_level_set.h
+++ b/src/getfem/getfem_fem_level_set.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_fem_level_set.h
    @author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_fourth_order.h b/src/getfem/getfem_fourth_order.h
index 0b91f3f..c7b2bdb 100644
--- a/src/getfem/getfem_fourth_order.h
+++ b/src/getfem/getfem_fourth_order.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_fourth_order.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>,
diff --git a/src/getfem/getfem_gauss_lobatto_fem_coef.h b/src/getfem/getfem_gauss_lobatto_fem_coef.h
index aece08d..be475c0 100644
--- a/src/getfem/getfem_gauss_lobatto_fem_coef.h
+++ b/src/getfem/getfem_gauss_lobatto_fem_coef.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_gauss_lobatto_fem_coef.h
    @author  Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/getfem_im_list.h b/src/getfem/getfem_im_list.h
index 6de018a..0b33019 100644
--- a/src/getfem/getfem_im_list.h
+++ b/src/getfem/getfem_im_list.h
@@ -1,27 +1,34 @@
-// This file is generated by make_getfem_list
-
-/* *********************************************************************** */
-/*                                                                         */
-/* Copyright (C) 2000-2003  Yves Renard.                                   */
-/*                                                                         */
-/* This file is a part of GETFEM++                                         */
-/*                                                                         */
-/* This program is free software; you can redistribute it and/or modify    */
-/* it under the terms of the GNU Lesser General Public License as          */
-/* published by the Free Software Foundation; version 2.1 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 Lesser General Public License for more details.                     */
-/*                                                                         */
-/* You should have received a copy of the GNU Lesser General Public        */
-/* License along with this program; if not, write to the Free Software     */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,  */
-/* USA.                                                                    */
-/*                                                                         */
-/* *********************************************************************** */
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+
 /**\file getfem_im_list.h
    \brief  This file is generated by make_getfem_list*/
 
diff --git a/src/getfem/getfem_import.h b/src/getfem/getfem_import.h
index 60d4164..ee5e118 100644
--- a/src/getfem/getfem_import.h
+++ b/src/getfem/getfem_import.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2009 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_import.h
    @author  Julien Pommier <Julien.Pommier at insa-toulouse.fr>
@@ -39,6 +40,8 @@
 
 #include <string>
 #include <iostream>
+#include <map>
+#include "bgeot_config.h" /* for bgeot::size_type */
 
 namespace getfem {
   class mesh;
@@ -81,6 +84,33 @@ namespace getfem {
 		   mesh& m);
   void import_mesh(const std::string& filename, mesh& m);
 
+  /** Import a mesh file in format generated by Gmsh.
+    
+      The function works exactly like impot_mesh() functions
+      except that they return additional mapping of physical 
+      region names to their numbers.
+
+      The example below shows how to print region names
+      and their numbers:
+      @code
+        getfem::mesh myMesh;
+        typedef std::map<std::string, bgeot::size_type> RegMap;
+        typedef RegMap::iterator RegMapIter;
+        RegMap regmap;
+        getfem::import_mesh_gmsh("mesh.msh", myMesh, regmap);
+        std::cout << regmap.size() << "\n";
+        for (RegMapIter i=regmap.begin(); i != regmap.end(); i++) { 
+           std::cout << i->first << " " << i->second << "\n";
+        }
+      @endcode
+
+  */
+  void import_mesh_gmsh(const std::string& filename, mesh& m, 
+                   std::map<std::string, bgeot::size_type> &region_map);
+  void import_mesh_gmsh(std::ifstream& f, mesh& m, 
+                   std::map<std::string, bgeot::size_type> &region_map);
+
+
   /** for gmsh and gid meshes, the mesh nodes are always 3D, so for a 2D mesh
       the z-component of nodes should be removed */
   void maybe_remove_last_dimension(mesh &msh);
diff --git a/src/getfem/getfem_integration.h b/src/getfem/getfem_integration.h
index 48e0a24..fcb4b54 100644
--- a/src/getfem/getfem_integration.h
+++ b/src/getfem/getfem_integration.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_integration.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_inter_element.h b/src/getfem/getfem_inter_element.h
index 93ba4e2..1af8e0e 100644
--- a/src/getfem/getfem_inter_element.h
+++ b/src/getfem/getfem_inter_element.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 /**
diff --git a/src/getfem/getfem_interpolated_fem.h b/src/getfem/getfem_interpolated_fem.h
index fa3971d..00d2e91 100644
--- a/src/getfem/getfem_interpolated_fem.h
+++ b/src/getfem/getfem_interpolated_fem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 /**@file getfem_interpolated_fem.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
    @date October 29, 2004.
diff --git a/src/getfem/getfem_interpolation.h b/src/getfem/getfem_interpolation.h
index aa53f23..5e775e9 100644
--- a/src/getfem/getfem_interpolation.h
+++ b/src/getfem/getfem_interpolation.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_interpolation.h
    @author Yves Renard    <Yves.Renard at insa-lyon.fr>
@@ -45,9 +46,9 @@
 namespace getfem {
 
   /* ********************************************************************* */
-  /*								   	   */
-  /*	I. Distribution of a set of points on a mesh.         		   */
-  /*									   */
+  /*                                                                       */
+  /*        I. Distribution of a set of points on a mesh.                  */
+  /*                                                                       */
   /* ********************************************************************* */
 
   class mesh_trans_inv : public bgeot::geotrans_inv {
@@ -84,62 +85,62 @@ namespace getfem {
   
 
   /* ********************************************************************* */
-  /*								   	   */
-  /*	II. Interpolation of functions.                     		   */
-  /*									   */
+  /*                                                                       */
+  /*        II. Interpolation of functions.                                */
+  /*                                                                       */
   /* ********************************************************************* */
 
 
   template <typename VECT, typename F, typename M>
   inline void interpolation_function__(const mesh_fem &mf, VECT &V,
-				       F &f, const dal::bit_vector &dofs,
-				       const M &, gmm::abstract_null_type) {
+                                       F &f, const dal::bit_vector &dofs,
+                                       const M &, gmm::abstract_null_type) {
     size_type Q = mf.get_qdim();
-    GMM_ASSERT1(gmm::vect_size(V) == mf.nb_dof() && Q == 1,
-		"Dof vector has not the right size");
+    GMM_ASSERT1(gmm::vect_size(V) == mf.nb_basic_dof() && Q == 1,
+                "Dof vector has not the right size");
     for (dal::bv_visitor i(dofs); !i.finished(); ++i)
       V[i] = f(mf.point_of_basic_dof(i));
   }
 
   template <typename VECT, typename F, typename M>
   inline void interpolation_function__(const mesh_fem &mf, VECT &V,
-				       F &f, const dal::bit_vector &dofs,
-				       const M &v, gmm::abstract_vector) {
+                                       F &f, const dal::bit_vector &dofs,
+                                       const M &v, gmm::abstract_vector) {
     size_type N = gmm::vect_size(v),  Q = mf.get_qdim();
-    GMM_ASSERT1(gmm::vect_size(V) == mf.nb_dof()*N/Q,
-		"Dof vector has not the right size");
+    GMM_ASSERT1(gmm::vect_size(V) == mf.nb_basic_dof()*N/Q,
+                "Dof vector has not the right size");
     for (dal::bv_visitor i(dofs); !i.finished(); ++i)
       if (i % Q == 0)
-	gmm::copy(f(mf.point_of_basic_dof(i)),
-		  gmm::sub_vector(V, gmm::sub_interval(i*N/Q, N)));
+        gmm::copy(f(mf.point_of_basic_dof(i)),
+                  gmm::sub_vector(V, gmm::sub_interval(i*N/Q, N)));
   }
 
   template <typename VECT, typename F, typename M>
   inline void interpolation_function__(const mesh_fem &mf, VECT &V,
-				       F &f, const dal::bit_vector &dofs,
-				       const M &mm, gmm::abstract_matrix) {
+                                       F &f, const dal::bit_vector &dofs,
+                                       const M &mm, gmm::abstract_matrix) {
     typedef typename gmm::linalg_traits<VECT>::value_type T;
     size_type Nr = gmm::mat_nrows(mm), Nc = gmm::mat_ncols(mm), N = Nr*Nc;
     size_type Q = mf.get_qdim();
     base_matrix m(Nr, Nc);
-    GMM_ASSERT1(gmm::vect_size(V) == mf.nb_dof()*N/Q,
-		"Dof vector has not the right size");
+    GMM_ASSERT1(gmm::vect_size(V) == mf.nb_basic_dof()*N/Q,
+                "Dof vector has not the right size");
     for (dal::bv_visitor i(dofs); !i.finished(); ++i)
       if (i % Q == 0) {
-	gmm::copy(f(mf.point_of_basic_dof(i)), m);
-	for (size_type j = 0; j < Nc; ++j)
-	  gmm::copy(gmm::mat_col(m, j),
-		    gmm::sub_vector(V, gmm::sub_interval(i*N/Q+j*Nr, Nr)));
+        gmm::copy(f(mf.point_of_basic_dof(i)), m);
+        for (size_type j = 0; j < Nc; ++j)
+          gmm::copy(gmm::mat_col(m, j),
+                    gmm::sub_vector(V, gmm::sub_interval(i*N/Q+j*Nr, Nr)));
       }
 
   }
 
   template <typename VECT, typename F, typename M>
   inline void interpolation_function_(const mesh_fem &mf, VECT &V,
-				      F &f, const dal::bit_vector &dofs,
-				      const M &m) {
+                                      F &f, const dal::bit_vector &dofs,
+                                      const M &m) {
     interpolation_function__(mf, V, f, dofs, m,
-			     typename gmm::linalg_traits<M>::linalg_type());
+                             typename gmm::linalg_traits<M>::linalg_type());
   }
 
 #if GETFEM_PARA_LEVEL > 0
@@ -173,7 +174,7 @@ namespace getfem {
   */
   template <typename VECT, typename F>
   void interpolation_function(mesh_fem &mf_target, const VECT &VV, F &f,
-			 mesh_region rg=mesh_region::all_convexes()) {
+                         mesh_region rg=mesh_region::all_convexes()) {
     typedef typename gmm::linalg_traits<VECT>::value_type T;
     size_type qqdimt = gmm::vect_size(VV) / mf_target.nb_dof();
     std::vector<T> V(mf_target.nb_basic_dof()*qqdimt);
@@ -181,26 +182,26 @@ namespace getfem {
     dal::bit_vector dofs = mf_target.basic_dof_on_region(rg);
     if (dofs.card() > 0)
       interpolation_function_(mf_target, V, f, dofs,
-			      f(mf_target.point_of_basic_dof(dofs.first())));
+                              f(mf_target.point_of_basic_dof(dofs.first())));
 
     if (mf_target.is_reduced()) {
       for (size_type k = 0; k < qqdimt; ++k)
-	gmm::mult(mf_target.reduction_matrix(),
-		  gmm::sub_vector(V,
-				  gmm::sub_slice(k, mf_target.nb_basic_dof(),
-						 qqdimt)),
-		  gmm::sub_vector(const_cast<VECT &>(VV),
-				  gmm::sub_slice(k, mf_target.nb_dof(),
-						 qqdimt)));
+        gmm::mult(mf_target.reduction_matrix(),
+                  gmm::sub_vector(V,
+                                  gmm::sub_slice(k, mf_target.nb_basic_dof(),
+                                                 qqdimt)),
+                  gmm::sub_vector(const_cast<VECT &>(VV),
+                                  gmm::sub_slice(k, mf_target.nb_dof(),
+                                                 qqdimt)));
     }
     else
       gmm::copy(V, const_cast<VECT &>(VV));
   }
 
   /* ********************************************************************* */
-  /*								   	   */
-  /*	III. Interpolation between two meshes.                		   */
-  /*									   */
+  /*                                                                       */
+  /*        III. Interpolation between two meshes.                         */
+  /*                                                                       */
   /* ********************************************************************* */
 
   /* ------------------------------ Interface -----------------------------*/
@@ -218,8 +219,8 @@ namespace getfem {
   */
   template<typename VECTU, typename VECTV>
   void interpolation(const mesh_fem &mf_source, const mesh_fem &mf_target,
-		     const VECTU &U, VECTV &V, int extrapolation = 0,
-		     double EPS = 1E-10);
+                     const VECTU &U, VECTV &V, int extrapolation = 0,
+                     double EPS = 1E-10);
 
   /**
      @brief Build the interpolation matrix of mf_source on mf_target.
@@ -230,7 +231,7 @@ namespace getfem {
    */
   template<typename MAT>
   void interpolation(const mesh_fem &mf_source, const mesh_fem &mf_target,
-		     MAT &M, int extrapolation = 0, double EPS = 1E-10);
+                     MAT &M, int extrapolation = 0, double EPS = 1E-10);
 
 
   /* --------------------------- Implementation ---------------------------*/
@@ -246,9 +247,9 @@ namespace getfem {
   */
   template<typename VECTU, typename VECTV, typename MAT>
     void interpolation_same_mesh(const mesh_fem &mf_source,
-				 const mesh_fem &mf_target,
-				 const VECTU &UU, VECTV &VV,
-				 MAT &MM, int version) {
+                                 const mesh_fem &mf_target,
+                                 const VECTU &UU, VECTV &VV,
+                                 MAT &MM, int version) {
 
     typedef typename gmm::linalg_traits<VECTU>::value_type T;
     base_matrix G;
@@ -258,9 +259,9 @@ namespace getfem {
     std::vector<std::vector<T> > coeff;
     std::vector<size_type> dof_source;
     GMM_ASSERT1(qdim == mf_target.get_qdim() || mf_target.get_qdim() == 1,
-		"Attempt to interpolate a field of dimension "
-		<< qdim << " on a mesh_fem whose Qdim is " << 
-		int(mf_target.get_qdim()));
+                "Attempt to interpolate a field of dimension "
+                << qdim << " on a mesh_fem whose Qdim is " << 
+                int(mf_target.get_qdim()));
     size_type qmult = mf_source.get_qdim()/mf_target.get_qdim();
     size_type qqdimt = qqdim * mf_source.get_qdim()/mf_target.get_qdim();
     fem_precomp_pool fppool;
@@ -279,7 +280,7 @@ namespace getfem {
       bgeot::pgeometric_trans pgt=mf_source.linked_mesh().trans_of_convex(cv);
       pfem pf_s = mf_source.fem_of_element(cv);
       if (!mf_target.convex_index().is_in(cv)) 
-	continue;
+        continue;
       pfem pf_t = mf_target.fem_of_element(cv);
       size_type nbd_s = pf_s->nb_dof(cv);
       size_type nbd_t = pf_t->nb_dof(cv);
@@ -292,46 +293,46 @@ namespace getfem {
           coeff[qq].resize(nbd_s*qdim);
           itdof = mf_source.ind_basic_dof_of_element(cv).begin();
           for (size_type k = 0; k < cvnbdof; ++k, ++itdof) {
-	    coeff[qq][k] = U[(*itdof)*qqdim+qq];
-	  }
+            coeff[qq][k] = U[(*itdof)*qqdim+qq];
+          }
         }
       }
       if (pf_s->need_G()) 
-	bgeot::vectors_to_base_matrix
-	  (G, mf_source.linked_mesh().points_of_convex(cv));
+        bgeot::vectors_to_base_matrix
+          (G, mf_source.linked_mesh().points_of_convex(cv));
 
       GMM_ASSERT1(pf_t->target_dim() == 1,
-		  "won't interpolate on a vector FEM... ");
+                  "won't interpolate on a vector FEM... ");
       pfem_precomp pfp = fppool(pf_s, pf_t->node_tab(cv));
       fem_interpolation_context ctx(pgt,pfp,size_type(-1), G, cv,
-				    size_type(-1));
+                                    size_type(-1));
       itdof = mf_target.ind_basic_dof_of_element(cv).begin();
       if (version != 0) {
-	const mesh_fem::ind_dof_ct &idct
-	  = mf_source.ind_basic_dof_of_element(cv);
-	dof_source.assign(idct.begin(), idct.end());
+        const mesh_fem::ind_dof_ct &idct
+          = mf_source.ind_basic_dof_of_element(cv);
+        dof_source.assign(idct.begin(), idct.end());
       }
       for (size_type i = 0; i < nbd_t; ++i, itdof+=mf_target.get_qdim()) {
-	size_type dof_t = *itdof*qmult;
+        size_type dof_t = *itdof*qmult;
         if (dof_t_done.is_in(*itdof)) continue;
         dof_t_done.add(*itdof);
-	ctx.set_ii(i);
-	if (version == 0) {
+        ctx.set_ii(i);
+        if (version == 0) {
           for (size_type qq=0; qq < qqdim; ++qq) {
             pf_s->interpolation(ctx, coeff[qq], val, qdim);
             for (size_type k=0; k < qdim; ++k)
-	      V[(dof_t + k)*qqdim+qq] = val[k];
+              V[(dof_t + k)*qqdim+qq] = val[k];
           }
-	}
-	else {
-	  base_matrix Mloc(qdim, mf_source.nb_basic_dof_of_element(cv));
-	  pf_s->interpolation(ctx, Mloc, qdim);
-	  for (size_type k=0; k < qdim; ++k) {
+        }
+        else {
+          base_matrix Mloc(qdim, mf_source.nb_basic_dof_of_element(cv));
+          pf_s->interpolation(ctx, Mloc, qdim);
+          for (size_type k=0; k < qdim; ++k) {
             for (size_type j=0; j < dof_source.size(); ++j) {
               M(dof_t + k, dof_source[j]) = Mloc(k, j);
             }
-	  }
-	}
+          }
+        }
       }
     }
 
@@ -340,34 +341,34 @@ namespace getfem {
       mf_target.reduce_vector(V, VV);
     else {
       if (mf_target.is_reduced())
-	if (mf_source.is_reduced()) {
-	  gmm::row_matrix<gmm::rsvector<scalar_type> >
-	    MMM(mf_target.nb_dof(), mf_source.nb_basic_dof());
-	  gmm::mult(mf_target.reduction_matrix(), M, MMM);
-	  gmm::mult(MMM, mf_source.extension_matrix(), MM);
-	}
-	else
-	  gmm::mult(mf_target.reduction_matrix(), M, MM); 
+        if (mf_source.is_reduced()) {
+          gmm::row_matrix<gmm::rsvector<scalar_type> >
+            MMM(mf_target.nb_dof(), mf_source.nb_basic_dof());
+          gmm::mult(mf_target.reduction_matrix(), M, MMM);
+          gmm::mult(MMM, mf_source.extension_matrix(), MM);
+        }
+        else
+          gmm::mult(mf_target.reduction_matrix(), M, MM); 
       else
-	if (mf_source.is_reduced())
-	  gmm::mult(M, mf_source.extension_matrix(), MM);
-	else
-	  gmm::copy(M, MM);
+        if (mf_source.is_reduced())
+          gmm::mult(M, mf_source.extension_matrix(), MM);
+        else
+          gmm::copy(M, MM);
     }
   }
 
   
   /*
      interpolation of a solution on another mesh.
-     - mti contains the points where to interpole.
+     - mti contains the points where to interpolate.
      - the solution should be continuous.
    */
   template<typename VECTU, typename VECTV, typename MAT>
   void interpolation(const mesh_fem &mf_source,
-		     mesh_trans_inv &mti,
-		     const VECTU &UU, VECTV &V, MAT &MM,
-		     int version, int extrapolation = 0,
-		     dal::bit_vector *dof_untouched = 0) {
+                     mesh_trans_inv &mti,
+                     const VECTU &UU, VECTV &V, MAT &MM,
+                     int version, int extrapolation = 0,
+                     dal::bit_vector *dof_untouched = 0) {
 
     typedef typename gmm::linalg_traits<VECTU>::value_type T;
     const mesh &msh(mf_source.linked_mesh());
@@ -398,84 +399,84 @@ namespace getfem {
 
       pfem pf_s = mf_source.fem_of_element(cv);
       if (pf_s->need_G()) 
-	bgeot::vectors_to_base_matrix(G, msh.points_of_convex(cv));
+        bgeot::vectors_to_base_matrix(G, msh.points_of_convex(cv));
 
       fem_interpolation_context ctx(pgt, pf_s, base_node(), G, cv,
-				    size_type(-1));
+                                    size_type(-1));
       if (version == 0) {
         coeff.resize(qqdim);
         for (size_type qq=0; qq < qqdim; ++qq) {
           coeff[qq].resize(mf_source.nb_basic_dof_of_element(cv));
-	  gmm::sub_index SUBI(mf_source.ind_basic_dof_of_element(cv));
+          gmm::sub_index SUBI(mf_source.ind_basic_dof_of_element(cv));
           gmm::copy(gmm::sub_vector(U, SUBI), coeff[qq]);
         }
       }
       if (version != 0) {
-	const mesh_fem::ind_dof_ct &idct
-	  = mf_source.ind_basic_dof_of_element(cv);
-	dof_source.assign(idct.begin(), idct.end());
+        const mesh_fem::ind_dof_ct &idct
+          = mf_source.ind_basic_dof_of_element(cv);
+        dof_source.assign(idct.begin(), idct.end());
       }
       for (size_type i = 0; i < itab.size(); ++i) {
-	size_type dof_t = itab[i];
-	if (dof_done.is_in(dof_t)) {
-	  dof_done.sup(dof_t);
-	  ctx.set_xref(mti.reference_coords()[dof_t]);
-	  size_type pos = dof_t * qdim_s;
-	  if (version == 0) {
+        size_type dof_t = itab[i];
+        if (dof_done.is_in(dof_t)) {
+          dof_done.sup(dof_t);
+          ctx.set_xref(mti.reference_coords()[dof_t]);
+          size_type pos = dof_t * qdim_s;
+          if (version == 0) {
             for (size_type qq=0; qq < qqdim; ++qq) {           
               pf_s->interpolation(ctx, coeff[qq], val, qdim_s);
               for (size_type k=0; k < qdim_s; ++k)
-		V[(pos + k)*qqdim+qq] = val[k];
+                V[(pos + k)*qqdim+qq] = val[k];
             }
-	    // Partie à arranger si on veut en option pouvoir interpoler
-	    // le gradient.
-	    //	  if (PVGRAD) {
-	    // base_matrix grad(mdim, qdim);
-	    // pf_s->interpolation_grad(ctx,coeff,gmm::transposed(grad), qdim);
-	    // std::copy(grad.begin(), grad.end(), V.begin()+dof_t*qdim*mdim);
-	    // }
-	  }
-	  else {
-	    base_matrix Mloc(qdim_s, mf_source.nb_basic_dof_of_element(cv));
-	    pf_s->interpolation(ctx, Mloc, qdim_s);
-	    for (size_type k=0; k < qdim_s; ++k) {
+            // Partie à arranger si on veut en option pouvoir interpoler
+            // le gradient.
+            //          if (PVGRAD) {
+            // base_matrix grad(mdim, qdim);
+            // pf_s->interpolation_grad(ctx,coeff,gmm::transposed(grad), qdim);
+            // std::copy(grad.begin(), grad.end(), V.begin()+dof_t*qdim*mdim);
+            // }
+          }
+          else {
+            base_matrix Mloc(qdim_s, mf_source.nb_basic_dof_of_element(cv));
+            pf_s->interpolation(ctx, Mloc, qdim_s);
+            for (size_type k=0; k < qdim_s; ++k) {
               for (size_type j=0; j < gmm::mat_ncols(Mloc); ++j)
                 M(pos+k, dof_source[j]) = Mloc(k,j);
                 /* does not work with col matrices
-		   gmm::clear(gmm::mat_row(M, pos+k));
-		   gmm::copy(gmm::mat_row(Mloc, k),
-		   gmm::sub_vector(gmm::mat_row(M, pos+k), isrc));
+                   gmm::clear(gmm::mat_row(M, pos+k));
+                   gmm::copy(gmm::mat_row(Mloc, k),
+                   gmm::sub_vector(gmm::mat_row(M, pos+k), isrc));
                 */
-	    }
-	  }
-	}
+            }
+          }
+        }
       }
     }
     if (dof_done.card() != 0) {
       if (dof_untouched)
-	*dof_untouched = dof_done;
+        *dof_untouched = dof_done;
       else
-	GMM_WARNING2("in interpolation (different meshes),"
-		     << dof_done.card() << " dof of target mesh_fem have "
-		     << " been missed\nmissing dofs : " << dof_done);
+        GMM_WARNING2("in interpolation (different meshes),"
+                     << dof_done.card() << " dof of target mesh_fem have "
+                     << " been missed\nmissing dofs : " << dof_done);
     }
 
     if (version != 0) {
       if (mf_source.is_reduced())
-	gmm::mult(M, mf_source.extension_matrix(), MM);
+        gmm::mult(M, mf_source.extension_matrix(), MM);
       else
-	gmm::copy(M, MM);
+        gmm::copy(M, MM);
     }
     
   }
 
   template<typename VECTU, typename VECTV>
   void interpolation(const mesh_fem &mf_source, mesh_trans_inv &mti,
-		     const VECTU &U, VECTV &V, int extrapolation = 0,
-		     dal::bit_vector *dof_untouched = 0) {
+                     const VECTU &U, VECTV &V, int extrapolation = 0,
+                     dal::bit_vector *dof_untouched = 0) {
     base_matrix M;
     GMM_ASSERT1((gmm::vect_size(U) % mf_source.nb_dof()) == 0 &&
-		gmm::vect_size(V)!=0, "Dimension of vector mismatch");
+                gmm::vect_size(V)!=0, "Dimension of vector mismatch");
     interpolation(mf_source, mti, U, V, M, 0, extrapolation, dof_untouched);
   }
 
@@ -488,9 +489,9 @@ namespace getfem {
    */
   template<typename VECTU, typename VECTV, typename MAT>
     void interpolation(const mesh_fem &mf_source, const mesh_fem &mf_target,
-		       const VECTU &U, VECTV &VV, MAT &MM,
-		       int version, int extrapolation,
-		       double EPS) {
+                       const VECTU &U, VECTV &VV, MAT &MM,
+                       int version, int extrapolation,
+                       double EPS) {
 
     typedef typename gmm::linalg_traits<VECTU>::value_type T;
     dim_type qqdim = dim_type(gmm::vect_size(U)/mf_source.nb_dof());
@@ -503,14 +504,14 @@ namespace getfem {
     getfem::mesh_trans_inv mti(msh, EPS);
     size_type qdim_s = mf_source.get_qdim(), qdim_t = mf_target.get_qdim();
     GMM_ASSERT1(qdim_s == qdim_t || qdim_t == 1,
-		"Attempt to interpolate a field of dimension "
-		<< qdim_s << " on a mesh_fem whose Qdim is " << qdim_t);
+                "Attempt to interpolate a field of dimension "
+                << qdim_s << " on a mesh_fem whose Qdim is " << qdim_t);
     
     /* test if the target mesh_fem is really of Lagrange type.         */
     for (dal::bv_visitor cv(mf_target.convex_index()); !cv.finished();++cv) {
       pfem pf_t = mf_target.fem_of_element(cv);
       GMM_ASSERT1(pf_t->target_dim() == 1 && pf_t->is_lagrange(),
-		  "Target fem not convenient for interpolation");
+                  "Target fem not convenient for interpolation");
     }
     /* initialisation of the mesh_trans_inv */
     size_type nbpts = mf_target.nb_basic_dof() / qdim_t;
@@ -522,21 +523,21 @@ namespace getfem {
       mf_target.reduce_vector(V, VV);
     else {
       if (mf_target.is_reduced())
-	gmm::mult(mf_target.reduction_matrix(), M, MM); 
+        gmm::mult(mf_target.reduction_matrix(), M, MM); 
       else
-	gmm::copy(M, MM);
+        gmm::copy(M, MM);
     }
 
   }
 
   template<typename VECTU, typename VECTV>
   void interpolation(const mesh_fem &mf_source, const mesh_fem &mf_target,
-		     const VECTU &U, VECTV &V, int extrapolation,
-		     double EPS = 1E-10) {
+                     const VECTU &U, VECTV &V, int extrapolation,
+                     double EPS) {
     base_matrix M;
     GMM_ASSERT1((gmm::vect_size(U) % mf_source.nb_dof()) == 0
-		&& (gmm::vect_size(V) % mf_target.nb_dof()) == 0
-		&& gmm::vect_size(V) != 0, "Dimensions mismatch");
+                && (gmm::vect_size(V) % mf_target.nb_dof()) == 0
+                && gmm::vect_size(V) != 0, "Dimensions mismatch");
     if (&mf_source.linked_mesh() == &mf_target.linked_mesh()) {
       interpolation_same_mesh(mf_source, mf_target, U, V, M, 0);
     }
@@ -546,10 +547,10 @@ namespace getfem {
 
   template<typename MAT>
   void interpolation(const mesh_fem &mf_source, const mesh_fem &mf_target,
-		     MAT &M, int extrapolation, double EPS = 1E-10) {
+                     MAT &M, int extrapolation, double EPS) {
     GMM_ASSERT1(mf_source.nb_dof() == gmm::mat_ncols(M)
-		&& (gmm::mat_nrows(M) % mf_target.nb_dof()) == 0
-		&& gmm::mat_nrows(M) != 0, "Dimensions mismatch");
+                && (gmm::mat_nrows(M) % mf_target.nb_dof()) == 0
+                && gmm::mat_nrows(M) != 0, "Dimensions mismatch");
     std::vector<scalar_type> U, V;
     if (&mf_source.linked_mesh() == &mf_target.linked_mesh())
       interpolation_same_mesh(mf_source, mf_target, U, V, M, 1);
diff --git a/src/getfem/getfem_level_set.h b/src/getfem/getfem_level_set.h
index 5a6c537..6391a18 100644
--- a/src/getfem/getfem_level_set.h
+++ b/src/getfem/getfem_level_set.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard, Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_level_set.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>, Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/getfem_linearized_plates.h b/src/getfem/getfem_linearized_plates.h
index 40a80b4..8ae1ebf 100644
--- a/src/getfem/getfem_linearized_plates.h
+++ b/src/getfem/getfem_linearized_plates.h
@@ -1,34 +1,35 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 /**@file getfem_linearized_plates.h
-   @author  Yves Renard <Yves.Renard at insa-lyon.fr>, Michel Salaun, msalaun at ensica.fr
+   @author  Yves Renard <Yves.Renard at insa-lyon.fr>
    @date November 1, 2004.
    @brief Define a linear plate model brick.
 */
@@ -834,14 +835,14 @@ namespace getfem {
 	(*ut_part, bound, dummy_mesh_fem(), num_fem+1);
       u3_part->set_constraints_type(cot);
 
-      bool mixed = false, symmetrized = false;
+      bool mixed = false; // , symmetrized = false;
       if (problem.get_mesh_fem_info(num_fem).brick_ident
 	  == MDBRICK_LINEAR_PLATE)
-	{ mixed = false; symmetrized = false; } 
+	{ mixed = false; /* symmetrized = false; */ } 
       else if (problem.get_mesh_fem_info(num_fem).brick_ident 
 	       == MDBRICK_MIXED_LINEAR_PLATE) {
 	mixed=true;
-	symmetrized = ((problem.get_mesh_fem_info(num_fem).info) & 2);
+	// symmetrized = ((problem.get_mesh_fem_info(num_fem).info) & 2);
       }
       else GMM_ASSERT1(false, "This brick should only be applied to "
 		       "a plate problem");
@@ -901,14 +902,14 @@ namespace getfem {
       u3_part.set_constraints_type(cot);
       theta_part.set_constraints_type(cot);
 
-      bool mixed = false, symmetrized = false;
+      bool mixed = false; // , symmetrized = false;
       if (problem.get_mesh_fem_info(num_fem).brick_ident
 	  == MDBRICK_LINEAR_PLATE)
-	{ mixed = false; symmetrized = false; } 
+	{ mixed = false; /* symmetrized = false; */ } 
       else if (problem.get_mesh_fem_info(num_fem).brick_ident 
 	       == MDBRICK_MIXED_LINEAR_PLATE) {
 	mixed=true;
-	symmetrized = ((problem.get_mesh_fem_info(num_fem).info) & 2);
+	// symmetrized = ((problem.get_mesh_fem_info(num_fem).info) & 2);
       }
       else GMM_ASSERT1(false, "This brick should only be applied to "
 		       "a plate problem");
diff --git a/src/getfem/getfem_mat_elem.h b/src/getfem/getfem_mat_elem.h
index 0f69292..3e50848 100644
--- a/src/getfem/getfem_mat_elem.h
+++ b/src/getfem/getfem_mat_elem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_mat_elem.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_mat_elem_type.h b/src/getfem/getfem_mat_elem_type.h
index d4c9200..0b02fc5 100644
--- a/src/getfem/getfem_mat_elem_type.h
+++ b/src/getfem/getfem_mat_elem_type.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 /**@file getfem_mat_elem_type.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
    @date December 21, 2000.
@@ -85,7 +86,7 @@ namespace getfem {
   struct constituant {
     constituant_type t;
     pfem pfi;
-    unsigned nl_part; /* only usefull with GETFEM_NONLINEAR_ : since the
+    unsigned nl_part; /* only useful with GETFEM_NONLINEAR_ : since the
 			 nonlinear term may use more than one pfem, it will
 			 be splitted into one "constituant" per fem
 			 for (nl_part = 0), the mat_elem_* computations will
@@ -100,8 +101,8 @@ namespace getfem {
    *  is not to be manipulate by itself. Use pmat_elem_type and
    *  the functions written to produce those descriptions.
    */ 
-  struct mat_elem_type
-    : virtual public dal::static_stored_object, std::vector<constituant> {
+  class mat_elem_type
+    : virtual public dal::static_stored_object, public std::vector<constituant> {
   protected :
     bgeot::multi_index mi;
   public :
diff --git a/src/getfem/getfem_mesh.h b/src/getfem/getfem_mesh.h
index 157e7f8..05d1b62 100644
--- a/src/getfem/getfem_mesh.h
+++ b/src/getfem/getfem_mesh.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_mesh.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -332,6 +333,12 @@ namespace getfem {
     template<class ITER>
     size_type add_prism_by_points(dim_type di, const ITER &ps);
 
+    size_type add_face_of_convex(size_type, short_type)
+    { GMM_ASSERT1(false, "Sorry, to be done"); }
+
+    void add_faces_of_convex(size_type)
+    { GMM_ASSERT1(false, "Sorry, to be done"); }
+
     /// Delete the convex of index ic from the mesh.
     void sup_convex(size_type ic, bool sup_points = false);
     /** Swap the indexes of the convex of indexes i and j
diff --git a/src/getfem/getfem_mesh_fem.h b/src/getfem/getfem_mesh_fem.h
index 6351fd0..17ae1de 100644
--- a/src/getfem/getfem_mesh_fem.h
+++ b/src/getfem/getfem_mesh_fem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_mesh_fem.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -379,7 +380,7 @@ namespace getfem {
      */
     void set_classical_discontinuous_finite_element(dim_type fem_degree,
 						    scalar_type alpha=0);   
-    /** Return the basic fem associated with an element (in no fem is
+    /** Return the basic fem associated with an element (if no fem is
      *	associated, the function will crash! use the convex_index() of
      *  the mesh_fem to check that a fem is associated to a given
      *  convex). This fem does not take into account the optional
@@ -475,11 +476,22 @@ namespace getfem {
     virtual const mesh::ind_cv_ct &convex_to_basic_dof(size_type d) const;
     const mesh::ind_cv_ct &convex_to_dof(size_type d) const IS_DEPRECATED
     { return convex_to_basic_dof(d); }
+
+    /** Give an array that contains the global dof indices corresponding
+     * to the mesh_fem dofs or size_type(-1) if a dof is not global.
+     *  @param ind the returned global dof indices array.
+     */
+    virtual void get_global_dof_index(std::vector<size_type> &ind) const;
     /** Renumber the degrees of freedom. You should not have
      * to call this function, as it is done automatically */
     void enumerate_dof(void) const;
+
+#if GETFEM_PARA_LEVEL > 1
+    void enumerate_dof_para(void)const;
+#endif
+
     /** Return the total number of basic degrees of freedom (before the
-     * optional redution). */
+     * optional reduction). */
     virtual size_type nb_basic_dof(void) const {
       context_check(); if (!dof_enumeration_made) enumerate_dof();
       return nb_total_dof;
diff --git a/src/getfem/getfem_mesh_fem_global_function.h b/src/getfem/getfem_mesh_fem_global_function.h
index c5d1e9d..17e5e2d 100644
--- a/src/getfem/getfem_mesh_fem_global_function.h
+++ b/src/getfem/getfem_mesh_fem_global_function.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file mesh_fem_global_function.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>, J. Pommier
@@ -43,7 +44,7 @@
 #include "getfem/getfem_arch_config.h"
 #if GETFEM_HAVE_MUPARSER_MUPARSER_H
 #include <muParser/muParser.h>
-#elif GETFEM_HAVE_MUPARSER_MUPARSER_H
+#elif GETFEM_HAVE_MUPARSER_H
 #include <muParser.h>
 #endif
 
@@ -161,7 +162,7 @@ namespace getfem {
     virtual ~abstract_xy_function() {}
   };
 
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
   struct parser_xy_function : public abstract_xy_function {
     mu::Parser pval;
     mu::Parser pXgrad,pYgrad;
@@ -260,7 +261,7 @@ namespace getfem {
   };
 
   /*
-   * some usefull global functions
+   * some useful global functions
    */
   class level_set;
 
diff --git a/src/getfem/getfem_mesh_fem_level_set.h b/src/getfem/getfem_mesh_fem_level_set.h
index 966a49b..2ce7f4c 100644
--- a/src/getfem/getfem_mesh_fem_level_set.h
+++ b/src/getfem/getfem_mesh_fem_level_set.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_mesh_fem_level_set.h
    @author Yves Renard <Yves.Renard at insa-lyon.fr>,
diff --git a/src/getfem/getfem_mesh_fem_product.h b/src/getfem/getfem_mesh_fem_product.h
index 1f23311..a7ed2ec 100644
--- a/src/getfem/getfem_mesh_fem_product.h
+++ b/src/getfem/getfem_mesh_fem_product.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 // To be corrected : dependencies. The mesh fem using this fem will not
 //                   depend on the mesh fem arguments.
 
diff --git a/src/getfem/getfem_mesh_fem_sum.h b/src/getfem/getfem_mesh_fem_sum.h
index 66e540b..084fb07 100644
--- a/src/getfem/getfem_mesh_fem_sum.h
+++ b/src/getfem/getfem_mesh_fem_sum.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 /**@file getfem_mesh_fem_sum.h
    @author Yves Renard <Yves.Renard at insa-lyon.fr>
    @author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/getfem_mesh_im.h b/src/getfem/getfem_mesh_im.h
index de3a0df..3ad398b 100644
--- a/src/getfem/getfem_mesh_im.h
+++ b/src/getfem/getfem_mesh_im.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_mesh_im.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_mesh_im_level_set.h b/src/getfem/getfem_mesh_im_level_set.h
index 9f135a3..d486cb0 100644
--- a/src/getfem/getfem_mesh_im_level_set.h
+++ b/src/getfem/getfem_mesh_im_level_set.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_mesh_im_level_set.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_mesh_level_set.h b/src/getfem/getfem_mesh_level_set.h
index 78c10c8..f4db6ee 100644
--- a/src/getfem/getfem_mesh_level_set.h
+++ b/src/getfem/getfem_mesh_level_set.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_mesh_level_set.h
    @author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/getfem_mesh_region.h b/src/getfem/getfem_mesh_region.h
index c9e898e..eba5928 100644
--- a/src/getfem/getfem_mesh_region.h
+++ b/src/getfem/getfem_mesh_region.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Yves Renard, Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_mesh_region.h
   @author  Yves Renard <Yves.Renard at insa-lyon.fr>, Julien Pommier <Julien.Pommier at insa-toulouse.fr>
@@ -131,6 +132,8 @@ namespace getfem {
     void error_if_not_faces() const;
     void error_if_not_convexes() const;
     void error_if_not_homogeneous() const;
+    const mesh *get_parent_mesh(void) const { return parent_mesh; }
+    void set_parent_mesh(mesh *pm) { parent_mesh = pm; }
     
     /** "iterator" class for regions. Usage similar to bv_visitor:
 	for (mr_visitor i(region); !i.finished(); ++i) {
diff --git a/src/getfem/getfem_mesh_slice.h b/src/getfem/getfem_mesh_slice.h
index ffbc743..8561870 100644
--- a/src/getfem/getfem_mesh_slice.h
+++ b/src/getfem/getfem_mesh_slice.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2009 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_mesh_slice.h
    @author  Julien Pommier <Julien.Pommier at insa-toulouse.fr>
@@ -133,20 +134,35 @@ namespace getfem {
          'discontinuous' meshes
     */
     void merge_nodes() const;
+
+    /** @brief Return the number of merged nodes in slice. */
     size_type nb_merged_nodes() const 
       { return merged_nodes_idx.size() - 1; }
+
+    /** @brief Return the physical position of the merged node.
+     	@param i_merged should be 0 <= i_merged < nb_merged_nodes()
+     */
     const base_node merged_point(size_type i_merged) const 
       { return merged_nodes[merged_nodes_idx[i_merged]].P->pt; }
+ 
     size_type merged_index(size_type ic, size_type ipt) const
       { return to_merged_index[global_index(ic,ipt)]; }
     size_type global_index(size_type ic, size_type ipt) const 
       { return cvlst[ic].global_points_count+ipt; }
+
+    /** @brief Return the number of nodes that were merged 
+       to form the merged one.
+      @param i_merged  index of the merged node: 
+                             0 <= i_merged < nb_merged_nodes()
+     */
     size_type merged_point_cnt(size_type i_merged) const 
       { return merged_nodes_idx[i_merged+1] - merged_nodes_idx[i_merged]; }
+    
     std::vector<merged_node_t>::const_iterator 
     merged_point_nodes(size_type i_merged) const { 
       return merged_nodes.begin() + merged_nodes_idx[i_merged]; 
     }
+
     void clear_merged_nodes() const;
 
     /** @brief Extract the list of mesh edges.
diff --git a/src/getfem/getfem_mesh_slicers.h b/src/getfem/getfem_mesh_slicers.h
index c3db638..c7a15ff 100644
--- a/src/getfem/getfem_mesh_slicers.h
+++ b/src/getfem/getfem_mesh_slicers.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_mesh_slicers.h
    @author  Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/getfem_mesher.h b/src/getfem/getfem_mesher.h
index 3208778..bce931e 100644
--- a/src/getfem/getfem_mesher.h
+++ b/src/getfem/getfem_mesher.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier, Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_mesher.h
    @author  Julien Pommier <Julien.Pommier at insa-toulouse.fr>, Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -167,45 +168,6 @@ namespace getfem {
   }
 
 
-  class mesher_tube : public mesher_signed_distance {
-    base_node x0; base_node n; scalar_type R;
-  public:
-      mesher_tube(base_node x0_, base_node n_, scalar_type R_)
-	: x0(x0_), n(n_), R(R_)
-    { n /= gmm::vect_norm2(n); }
-    bool bounding_box(base_node &, base_node &) const
-    { return false; }
-    virtual scalar_type operator()(const base_node &P) const {
-      base_node v(P); v -= x0;
-      gmm::add(gmm::scaled(n, -gmm::vect_sp(v, n)), v);
-      return gmm::vect_norm2(v) - R;
-    }
-    virtual scalar_type operator()(const base_node &P,
-				   dal::bit_vector &bv) const {
-      scalar_type d = (*this)(P);
-      bv[id] = (gmm::abs(d) < SEPS);
-      return d;
-    }
-    virtual void register_constraints(std::vector<const
-				      mesher_signed_distance*>& list) const {
-      id = list.size(); list.push_back(this);
-    }
-    scalar_type grad(const base_node &P, base_small_vector &G) const {
-      G = P; G -= x0;
-      gmm::add(gmm::scaled(n, -gmm::vect_sp(G, n)), G);
-      scalar_type e = gmm::vect_norm2(G), d = e - R;
-      while (e == scalar_type(0)) {
-	gmm::fill_random(G);
-	gmm::add(gmm::scaled(n, -gmm::vect_sp(G, n)), G);
-	e = gmm::vect_norm2(G);
-      }
-      G /= e;
-      return d;
-    }
-    void hess(const base_node &, base_matrix &) const {
-      GMM_ASSERT1(false, "Sorry, to be done");
-    }
-  };
 
 
   class mesher_ball : public mesher_signed_distance {
@@ -424,6 +386,10 @@ namespace getfem {
     mutable bool isin;
     bool with_min;
   public:
+    mesher_union(const std::vector<const mesher_signed_distance *>
+			&dists_) : dists(dists_) 
+    { vd.resize(dists.size()); }
+
     mesher_union(const mesher_signed_distance &a_,
 		 const mesher_signed_distance &b_,
 		 const mesher_signed_distance &c_ = void_signed_distance,
@@ -723,42 +689,164 @@ namespace getfem {
 
   };
   
+
+  class mesher_tube : public mesher_signed_distance {
+    base_node x0; base_node n; scalar_type R;
+  public:
+      mesher_tube(base_node x0_, base_node n_, scalar_type R_)
+	: x0(x0_), n(n_), R(R_)
+    { n /= gmm::vect_norm2(n); }
+    bool bounding_box(base_node &, base_node &) const
+    { return false; }
+    virtual scalar_type operator()(const base_node &P) const {
+      base_node v(P); v -= x0;
+      gmm::add(gmm::scaled(n, -gmm::vect_sp(v, n)), v);
+      return gmm::vect_norm2(v) - R;
+    }
+    virtual scalar_type operator()(const base_node &P,
+				   dal::bit_vector &bv) const {
+      scalar_type d = (*this)(P);
+      bv[id] = (gmm::abs(d) < SEPS);
+      return d;
+    }
+    virtual void register_constraints(std::vector<const
+				      mesher_signed_distance*>& list) const {
+      id = list.size(); list.push_back(this);
+    }
+    scalar_type grad(const base_node &P, base_small_vector &G) const {
+      G = P; G -= x0;
+      gmm::add(gmm::scaled(n, -gmm::vect_sp(G, n)), G);
+      scalar_type e = gmm::vect_norm2(G), d = e - R;
+      while (e == scalar_type(0)) {
+	gmm::fill_random(G);
+	gmm::add(gmm::scaled(n, -gmm::vect_sp(G, n)), G);
+	e = gmm::vect_norm2(G);
+      }
+      G /= e;
+      return d;
+    }
+    void hess(const base_node &, base_matrix &) const {
+      GMM_ASSERT1(false, "Sorry, to be done");
+    }
+  };
+
   class mesher_cylinder : public mesher_signed_distance {
     base_node x0; base_small_vector n;
     scalar_type L, R;
     mesher_tube t;
     mesher_half_space p1, p2;
-    mesher_intersection i1, i2;
+    mesher_intersection i1;
   public:
     mesher_cylinder(const base_node &c, const base_small_vector &no,
 		    scalar_type L_, scalar_type R_)
       : x0(c), n(no/gmm::vect_norm2(no)), L(L_), R(R_), t(x0, n, R),
-	p1(x0, n), p2(x0+n*L, -1.0 * n), i1(p1, p2), i2(i1, t) {}
+	p1(x0, n), p2(x0+n*L, -1.0 * n), i1(p1, p2, t) {}
     bool bounding_box(base_node &bmin, base_node &bmax) const {
       base_node x1(x0+n*L);
-      bmin = bmax = base_node(3);
-      for (unsigned i = 0; i < 3; ++i) {
+      bmin = bmax = x0;
+      for (unsigned i = 0; i < gmm::vect_size(x0); ++i) {
 	bmin[i] = std::min(x0[i], x1[i]) - R;
 	bmax[i] = std::max(x0[i], x1[i]) + R;
       }
       return true;
     }
-    virtual scalar_type operator()(const base_node &P) const { return i2(P); }
+    virtual scalar_type operator()(const base_node &P) const { return i1(P); }
     virtual scalar_type operator()(const base_node &P,
 				   dal::bit_vector& bv) const
-    { return i2(P, bv); }
+    { return i1(P, bv); }
     scalar_type grad(const base_node &P, base_small_vector &G) const
-      { return i2.grad(P, G); }
+      { return i1.grad(P, G); }
     void hess(const base_node &, base_matrix &) const {
       GMM_ASSERT1(false, "Sorry, to be done");
     }
     virtual void register_constraints(std::vector<const
 				      mesher_signed_distance*>& list) const
-    { i2.register_constraints(list); }
+    { i1.register_constraints(list); }
   };
 
 
-  class mesher_ellipse : public mesher_signed_distance { // TODO
+
+  class mesher_infinite_cone : public mesher_signed_distance {
+    // uses the true distance to a cone.
+    base_node x0; base_node n; scalar_type alpha;
+  public:
+      mesher_infinite_cone(base_node x0_, base_node n_, scalar_type alpha_)
+	: x0(x0_), n(n_), alpha(alpha_)
+    { n /= gmm::vect_norm2(n); }
+    bool bounding_box(base_node &, base_node &) const
+    { return false; }
+    virtual scalar_type operator()(const base_node &P) const {
+      base_node v(P); v -= x0;
+      scalar_type v_n = gmm::vect_sp(v, n);
+      gmm::add(gmm::scaled(n, -v_n), v);
+      return gmm::vect_norm2(v) * cos(alpha) - gmm::abs(v_n) * sin(alpha);
+    }
+    virtual scalar_type operator()(const base_node &P,
+				   dal::bit_vector &bv) const {
+      scalar_type d = (*this)(P);
+      bv[id] = (gmm::abs(d) < SEPS);
+      return d;
+    }
+    virtual void register_constraints(std::vector<const
+				      mesher_signed_distance*>& list) const {
+      id = list.size(); list.push_back(this);
+    }
+    scalar_type grad(const base_node &P, base_small_vector &v) const {
+      v = P; v -= x0;
+      scalar_type v_n = gmm::vect_sp(v, n);
+      gmm::add(gmm::scaled(n, -v_n), v);
+      scalar_type no = gmm::vect_norm2(v);
+      scalar_type d = no * cos(alpha) - gmm::abs(v_n) * sin(alpha);
+      while (no ==  scalar_type(0)) {
+	gmm::fill_random(v);
+	gmm::add(gmm::scaled(n, -gmm::vect_sp(v, n)), v);
+	no = gmm::vect_norm2(v);
+      }
+      v *= cos(alpha) / no;
+      v -= (sin(alpha) * gmm::sgn(v_n)) * n;
+      return d;
+    }
+    void hess(const base_node &, base_matrix &) const {
+      GMM_ASSERT1(false, "Sorry, to be done");
+    }
+  };
+
+  class mesher_cone : public mesher_signed_distance {
+    base_node x0; base_small_vector n;
+    scalar_type L, alpha;
+    mesher_infinite_cone t;
+    mesher_half_space p1, p2;
+    mesher_intersection i1;
+  public:
+    mesher_cone(const base_node &c, const base_small_vector &no,
+		    scalar_type L_, scalar_type alpha_)
+      : x0(c), n(no/gmm::vect_norm2(no)), L(L_), alpha(alpha_),
+	t(x0, n, alpha), p1(x0, n), p2(x0+n*L, -1.0 * n), i1(p1, p2, t) {}
+    bool bounding_box(base_node &bmin, base_node &bmax) const {
+      base_node x1(x0+n*L);
+      scalar_type R = L * sin(alpha);
+      bmin = bmax = x0;
+      for (unsigned i = 0; i < gmm::vect_size(x0); ++i) {
+	bmin[i] = std::min(x0[i], x1[i]) - R;
+	bmax[i] = std::max(x0[i], x1[i]) + R;
+      }
+      return true;
+    }
+    virtual scalar_type operator()(const base_node &P) const { return i1(P); }
+    virtual scalar_type operator()(const base_node &P,
+				   dal::bit_vector& bv) const
+    { return i1(P, bv); }
+    scalar_type grad(const base_node &P, base_small_vector &G) const
+      { return i1.grad(P, G); }
+    void hess(const base_node &, base_matrix &) const {
+      GMM_ASSERT1(false, "Sorry, to be done");
+    }
+    virtual void register_constraints(std::vector<const
+				      mesher_signed_distance*>& list) const
+    { i1.register_constraints(list); }
+  };
+
+  class mesher_ellipse : public mesher_signed_distance {
     base_node x0; base_small_vector n, t;
     scalar_type r, R, a;
   public:
@@ -798,7 +886,7 @@ namespace getfem {
       return d;
     }
     scalar_type grad(const base_node &, base_small_vector &) const
-    { assert(0); }
+    { GMM_ASSERT1(false, "Sorry, to be done"); return 0.; }
     void hess(const base_node &, base_matrix &) const {
       GMM_ASSERT1(false, "Sorry, to be done");
     }
@@ -867,7 +955,7 @@ namespace getfem {
   // mesher
   void build_mesh(mesh &m, const mesher_signed_distance& dist_,
 		  scalar_type h0, const std::vector<base_node> &fixed_points
-		  = std::vector<base_node>(), size_type K = 1, int noise = 1,
+		  = std::vector<base_node>(), size_type K = 1, int noise = -1,
 		  size_type iter_max = 500, int prefind = 1,
 		  scalar_type dist_point_hull = 4,
 		  scalar_type boundary_threshold_flatness = 0.11);
diff --git a/src/getfem/getfem_model_solvers.h b/src/getfem/getfem_model_solvers.h
index 575a358..d8d7607 100644
--- a/src/getfem/getfem_model_solvers.h
+++ b/src/getfem/getfem_model_solvers.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**
    @file getfem_model_solvers.h
@@ -40,7 +41,6 @@
 #define GETFEM_MODEL_SOLVERS_H__
 #include "getfem_models.h"
 #include "gmm/gmm_MUMPS_interface.h"
-#include "gmm/gmm_solver_Newton.h"
 #include "gmm/gmm_iter.h"
 #include "gmm/gmm_iter_solvers.h"
 #include "gmm/gmm_dense_qr.h"
@@ -76,100 +76,104 @@ namespace getfem {
   /*     Linear solvers definition                                     */
   /* ***************************************************************** */
 
-  template <typename MAT, typename VECT> 
+  template <typename MAT, typename VECT>
   struct abstract_linear_solver {
     virtual void operator ()(const MAT &, VECT &, const VECT &,
-			     gmm::iteration &) const  = 0;
+                             gmm::iteration &) const  = 0;
     virtual ~abstract_linear_solver() {}
   };
 
-  template <typename MAT, typename VECT> 
+  template <typename MAT, typename VECT>
   struct linear_solver_cg_preconditioned_ildlt
     : public abstract_linear_solver<MAT, VECT> {
     void operator ()(const MAT &M, VECT &x, const VECT &b,
-		     gmm::iteration &iter)  const {
+                     gmm::iteration &iter)  const {
       gmm::ildlt_precond<MAT> P(M);
       gmm::cg(M, x, b, P, iter);
       if (!iter.converged()) GMM_WARNING2("cg did not converge!");
     }
   };
 
-  template <typename MAT, typename VECT> 
+  template <typename MAT, typename VECT>
   struct linear_solver_gmres_preconditioned_ilu
     : public abstract_linear_solver<MAT, VECT> {
     void operator ()(const MAT &M, VECT &x, const VECT &b,
-		     gmm::iteration &iter)  const {
+                     gmm::iteration &iter)  const {
       gmm::ilu_precond<MAT> P(M);
       gmm::gmres(M, x, b, P, 500, iter);
       if (!iter.converged()) GMM_WARNING2("gmres did not converge!");
     }
   };
 
-  template <typename MAT, typename VECT> 
+  template <typename MAT, typename VECT>
   struct linear_solver_gmres_unpreconditioned
     : public abstract_linear_solver<MAT, VECT> {
     void operator ()(const MAT &M, VECT &x, const VECT &b,
-		     gmm::iteration &iter)  const {
+                     gmm::iteration &iter)  const {
       gmm::identity_matrix P;
       gmm::gmres(M, x, b, P, 500, iter);
       if (!iter.converged()) GMM_WARNING2("gmres did not converge!");
     }
   };
 
-  template <typename MAT, typename VECT> 
+  template <typename MAT, typename VECT>
   struct linear_solver_gmres_preconditioned_ilut
     : public abstract_linear_solver<MAT, VECT> {
     void operator ()(const MAT &M, VECT &x, const VECT &b,
-		     gmm::iteration &iter)  const {
+                     gmm::iteration &iter)  const {
       gmm::ilut_precond<MAT> P(M, 40, 1E-7);
       gmm::gmres(M, x, b, P, 500, iter);
       if (!iter.converged()) GMM_WARNING2("gmres did not converge!");
     }
   };
-  
-  template <typename MAT, typename VECT> 
+
+  template <typename MAT, typename VECT>
   struct linear_solver_gmres_preconditioned_ilutp
     : public abstract_linear_solver<MAT, VECT> {
     void operator ()(const MAT &M, VECT &x, const VECT &b,
-		     gmm::iteration &iter)  const {
+                     gmm::iteration &iter)  const {
       gmm::ilutp_precond<MAT> P(M, 20, 1E-7);
       gmm::gmres(M, x, b, P, 500, iter);
       if (!iter.converged()) GMM_WARNING2("gmres did not converge!");
     }
   };
-  
-  template <typename MAT, typename VECT> 
+
+  template <typename MAT, typename VECT>
   struct linear_solver_superlu
     : public abstract_linear_solver<MAT, VECT> {
     void operator ()(const MAT &M, VECT &x, const VECT &b,
-		     gmm::iteration &iter)  const {
+                     gmm::iteration &iter)  const {
       double rcond;
       /*gmm::HarwellBoeing_IO::write("test.hb", M);
-      std::fstream f("bbb", std::ios::out); 
+      std::fstream f("bbb", std::ios::out);
       for (unsigned i=0; i < gmm::vect_size(b); ++i) f << b[i] << "\n";*/
-      SuperLU_solve(M, x, b, rcond);
+      int info = SuperLU_solve(M, x, b, rcond);
+      iter.enforce_converged(info == 0);
       if (iter.get_noisy()) cout << "condition number: " << 1.0/rcond<< endl;
     }
   };
 
 
 #ifdef GMM_USES_MUMPS
-  template <typename MAT, typename VECT> 
+  template <typename MAT, typename VECT>
   struct linear_solver_mumps : public abstract_linear_solver<MAT, VECT> {
     void operator ()(const MAT &M, VECT &x, const VECT &b,
-		     gmm::iteration &) const 
-    { gmm::MUMPS_solve(M, x, b); }
+                     gmm::iteration &iter) const {
+      bool ok = gmm::MUMPS_solve(M, x, b);
+      iter.enforce_converged(ok);
+    }
   };
 #endif
 
 #if GETFEM_PARA_LEVEL > 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER
-  template <typename MAT, typename VECT> 
+  template <typename MAT, typename VECT>
   struct linear_solver_distributed_mumps
     : public abstract_linear_solver<MAT, VECT> {
     void operator ()(const MAT &M, VECT &x, const VECT &b,
-		     gmm::iteration &) const { 
+                     gmm::iteration &iter) const {
       double tt_ref=MPI_Wtime();
-      MUMPS_distributed_matrix_solve(M, x, b);
+      bool ok = MUMPS_distributed_matrix_solve(M, x, b);
+      iter.enforce_converged(ok);
       cout<<"temps MUMPS "<< MPI_Wtime() - tt_ref<<endl;
     }
   };
@@ -177,14 +181,170 @@ namespace getfem {
 
 
   /* ***************************************************************** */
+  /*     Newton Line search definition                                 */
+  /* ***************************************************************** */
+
+  struct abstract_newton_line_search {
+    double conv_alpha, conv_r;
+    size_t it, itmax, glob_it;
+    //  size_t tot_it;
+    virtual void init_search(double r, size_t git, double R0 = 0.0) = 0;
+    virtual double next_try(void) = 0;
+    virtual bool is_converged(double, double R1 = 0.0) = 0;
+    virtual double converged_value(void) {
+      // tot_it += it; cout << "tot_it = " << tot_it << endl; it = 0;
+      return conv_alpha;
+    };
+    virtual double converged_residual(void) { return conv_r; };
+    virtual ~abstract_newton_line_search() { }
+  };
+
+
+  struct quadratic_newton_line_search : public abstract_newton_line_search {
+    double R0_, R1_;
+
+    double alpha, alpha_mult, first_res, alpha_max_ratio, alpha_min;
+    virtual void init_search(double r, size_t git, double R0 = 0.0) {
+      GMM_ASSERT1(R0 != 0.0, "You have to specify R0");
+      glob_it = git;
+      conv_alpha = alpha = double(1); conv_r = first_res = r; it = 0;
+      R0_ = R0;
+    }
+    virtual double next_try(void) {
+      ++it;
+      if (it == 1) return double(1);
+      GMM_ASSERT1(R1_ != 0.0, "You have to specify R1");
+      double a = R0_ / R1_;
+      return (a < 0) ? (a*0.5 + sqrt(a*a*0.25-a)) : a*0.5;
+    }
+    virtual bool is_converged(double r, double R1 = 0.0) {
+      conv_r = r;
+      R1_ = R1; return ((gmm::abs(R1_) < gmm::abs(R0_*0.5)) || it >= itmax);
+    }
+    quadratic_newton_line_search(size_t imax = size_t(-1))  { itmax = imax; }
+  };
+
+
+  struct simplest_newton_line_search : public abstract_newton_line_search {
+    double alpha, alpha_mult, first_res, alpha_max_ratio, alpha_min;
+    virtual void init_search(double r, size_t git, double = 0.0) {
+      glob_it = git;
+      conv_alpha = alpha = double(1); conv_r = first_res = r; it = 0;
+    }
+    virtual double next_try(void)
+    { conv_alpha = alpha; alpha *= alpha_mult; ++it; return conv_alpha; }
+    virtual bool is_converged(double r, double = 0.0) {
+      conv_r = r;
+      return ((it <= 1 && r < first_res)
+	      || (r <= first_res * alpha_max_ratio)
+	      || (conv_alpha <= alpha_min)
+	      || it >= itmax);
+    }
+    simplest_newton_line_search
+    (size_t imax = size_t(-1), double a_max_ratio = 6.0/5.0,
+     double a_min = 1.0/1000.0, double a_mult = 3.0/5.0)
+      : alpha_mult(a_mult), alpha_max_ratio(a_max_ratio), alpha_min(a_min)
+      { itmax = imax; }
+  };
+
+  struct default_newton_line_search : public abstract_newton_line_search {
+    // This line search try to detect where is the minimum, dividing the step
+    // by a factor two each time.
+    //    - it stops if the residual is less than the previous residual
+    //      times alpha_min_ratio (= 0.9).
+    //    - if the minimal step is reached with a residual greater than
+    //      the previous residual times alpha_min_ratio then it decides
+    //      between two options :
+    //        - return with the step corresponding to the smallest residual
+    //        - return with a greater residual corresponding to a residual
+    //          less than the previous residual times alpha_max_ratio.
+    //      the decision is taken regarding the previous iterations.
+    //    - in order to shorten the line search, the process stops when
+    //      the residual increases three times consecutively.
+    // possible improvment : detect the curvature at the origin
+    // (only one evaluation) and take it into account.
+    // Fitted to some experiments in contrib/tests_newton
+
+    double alpha, alpha_old, alpha_mult, first_res, alpha_max_ratio;
+    double alpha_min_ratio, alpha_min;
+    size_type count, count_pat;
+    bool max_ratio_reached;
+    double alpha_max_ratio_reached, r_max_ratio_reached;
+    size_type it_max_ratio_reached;
+
+    virtual void init_search(double r, size_t git, double = 0.0);
+    virtual double next_try(void);
+    virtual bool is_converged(double r, double = 0.0);
+    default_newton_line_search(void) { count_pat = 0; }
+  };
+
+  /* the former default_newton_line_search */
+  struct basic_newton_line_search : public abstract_newton_line_search {
+    double alpha, alpha_mult, first_res, alpha_max_ratio;
+    double alpha_min, prev_res, alpha_max_augment;
+    virtual void init_search(double r, size_t git, double = 0.0) {
+      glob_it = git;
+      conv_alpha = alpha = double(1);
+      prev_res = conv_r = first_res = r; it = 0;
+    }
+    virtual double next_try(void)
+    { conv_alpha = alpha; alpha *= alpha_mult; ++it; return conv_alpha; }
+    virtual bool is_converged(double r, double = 0.0) {
+      if (glob_it == 0 || (r < first_res / double(2))
+	  || (conv_alpha <= alpha_min && r < first_res * alpha_max_augment)
+	  || it >= itmax)
+	{ conv_r = r; return true; }
+      if (it > 1 && r > prev_res && prev_res < alpha_max_ratio * first_res)
+	return true;
+      prev_res = conv_r = r;
+      return false;
+    }
+    basic_newton_line_search
+    (size_t imax = size_t(-1),
+     double a_max_ratio = 5.0/3.0,
+     double a_min = 1.0/1000.0, double a_mult = 3.0/5.0, double a_augm = 2.0)
+      : alpha_mult(a_mult), alpha_max_ratio(a_max_ratio),
+	alpha_min(a_min), alpha_max_augment(a_augm) { itmax = imax; }
+  };
+
+
+  struct systematic_newton_line_search : public abstract_newton_line_search {
+    double alpha, alpha_mult, first_res;
+    double alpha_min, prev_res;
+    bool first;
+    virtual void init_search(double r, size_t git, double = 0.0) {
+      glob_it = git;
+      conv_alpha = alpha = double(1);
+      prev_res = conv_r = first_res = r; it = 0; first = true;
+    }
+    virtual double next_try(void)
+    { double a = alpha; alpha *= alpha_mult; ++it; return a; }
+    virtual bool is_converged(double r, double = 0.0) {
+      // cout << "a = " << alpha / alpha_mult << " r = " << r << endl;
+      if (r < conv_r || first)
+	{ conv_r = r; conv_alpha = alpha / alpha_mult; first = false; }
+      if ((alpha <= alpha_min*alpha_mult) || it >= itmax) return true;
+      return false;
+    }
+    systematic_newton_line_search
+    (size_t imax = size_t(-1),
+     double a_min = 1.0/10000.0, double a_mult = 3.0/5.0)
+      : alpha_mult(a_mult), alpha_min(a_min)  { itmax = imax; }
+  };
+
+
+
+
+
+  /* ***************************************************************** */
   /*     Newton algorithm.                                             */
   /* ***************************************************************** */
 
-  template <typename PB> 
+  template <typename PB>
   void classical_Newton(PB &pb, gmm::iteration &iter,
-			const abstract_linear_solver<typename PB::MATRIX,
-			typename PB::VECTOR> &linear_solver) {
-    // TODO : take iter into account for the Newton. compute a consistent 
+                        const abstract_linear_solver<typename PB::MATRIX,
+                        typename PB::VECTOR> &linear_solver) {
+    // TODO : take iter into account for the Newton. compute a consistent
     //        max residu.
     typedef typename gmm::linalg_traits<typename PB::VECTOR>::value_type T;
     typedef typename gmm::number_traits<T>::magnitude_type R;
@@ -201,15 +361,37 @@ namespace getfem {
     while (!iter.finished(pb.residual_norm())) {
       gmm::iteration iter_linsolv = iter_linsolv0;
       if (iter.get_noisy() > 1)
-	cout << "starting computing tangent matrix" << endl;
-      pb.compute_tangent_matrix();
-      gmm::clear(dr);
-      gmm::copy(gmm::scaled(pb.residual(), pb.scale_residual()), b);
-      if (iter.get_noisy() > 1) cout << "starting linear solver" << endl;
-      linear_solver(pb.tangent_matrix(), dr, b, iter_linsolv);
-      if (iter.get_noisy() > 1) cout << "linear solver done" << endl;      
-      R alpha = pb.line_search(dr, iter); // it is assumed that the line
-      // search execute a pb.compute_residual();
+        cout << "starting computing tangent matrix" << endl;
+
+      int is_singular = 1;
+      while (is_singular) {
+        pb.compute_tangent_matrix();
+        gmm::clear(dr);
+        gmm::copy(gmm::scaled(pb.residual(), pb.scale_residual()), b);
+        if (iter.get_noisy() > 1) cout << "starting linear solver" << endl;
+	iter_linsolv.init();
+        linear_solver(pb.tangent_matrix(), dr, b, iter_linsolv);
+        if (!iter_linsolv.converged()) {
+          is_singular++;
+          if (is_singular <= 4) {
+            if (iter.get_noisy())
+              cout << "Singular tangent matrix:"
+                " perturbation of the state vector." << endl;
+            pb.perturbation();
+	    pb.compute_residual();
+          } else {
+            if (iter.get_noisy())
+              cout << "Singular tangent matrix: perturbation failed, aborting."
+                   << endl;
+            return;
+          }
+        }
+        else is_singular = 0;
+      }
+
+      if (iter.get_noisy() > 1) cout << "linear solver done" << endl;
+      R alpha = pb.line_search(dr, iter); //it is assumed that the linesearch
+                                          //executes a pb.compute_residual();
       if (iter.get_noisy()) cout << "alpha = " << alpha << " ";
       ++iter;
     }
@@ -217,14 +399,14 @@ namespace getfem {
 
 
   //---------------------------------------------------------------------
-  // Default linear solver.   
+  // Default linear solver.
   //---------------------------------------------------------------------
 
   typedef abstract_linear_solver<model_real_sparse_matrix,
-				 model_real_plain_vector> rmodel_linear_solver;
+                                 model_real_plain_vector> rmodel_linear_solver;
   typedef std::auto_ptr<rmodel_linear_solver> rmodel_plsolver_type;
   typedef abstract_linear_solver<model_complex_sparse_matrix,
-				 model_complex_plain_vector>
+                                 model_complex_plain_vector>
           cmodel_linear_solver;
   typedef std::auto_ptr<cmodel_linear_solver> cmodel_plsolver_type;
 
@@ -233,7 +415,7 @@ namespace getfem {
   std::auto_ptr<abstract_linear_solver<MATRIX, VECTOR> >
   default_linear_solver(const model &md) {
     std::auto_ptr<abstract_linear_solver<MATRIX, VECTOR> > p;
-    
+
 #if GETFEM_PARA_LEVEL == 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER
       p.reset(new linear_solver_mumps<MATRIX, VECTOR>);
 #elif GETFEM_PARA_LEVEL > 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER
@@ -241,7 +423,7 @@ namespace getfem {
 #else
     size_type ndof = md.nb_dof(), max3d = 15000, dim = md.leading_dimension();
 # ifdef GMM_USES_MUMPS
-    max3d = 100000;
+    max3d = 250000;
 # endif
     if ((ndof<300000 && dim<=2) || (ndof<max3d && dim<=3) || (ndof<1000)) {
 # ifdef GMM_USES_MUMPS
@@ -251,15 +433,15 @@ namespace getfem {
 # endif
     }
     else {
-      if (md.is_coercive()) 
-	p.reset(new linear_solver_cg_preconditioned_ildlt<MATRIX, VECTOR>);
+      if (md.is_coercive())
+        p.reset(new linear_solver_cg_preconditioned_ildlt<MATRIX, VECTOR>);
       else {
-	if (dim <= 2)
-	  p.reset(new
-		  linear_solver_gmres_preconditioned_ilut<MATRIX,VECTOR>);
-	else
-	  p.reset(new
-		  linear_solver_gmres_preconditioned_ilu<MATRIX,VECTOR>);
+        if (dim <= 2)
+          p.reset(new
+                  linear_solver_gmres_preconditioned_ilut<MATRIX,VECTOR>);
+        else
+          p.reset(new
+                  linear_solver_gmres_preconditioned_ilu<MATRIX,VECTOR>);
       }
     }
 #endif
@@ -299,23 +481,23 @@ namespace getfem {
   }
 
   inline rmodel_plsolver_type rselect_linear_solver(const model &md,
-					     const std::string &name) {
+                                             const std::string &name) {
     return select_linear_solver<model_real_sparse_matrix,
                                 model_real_plain_vector>(md, name);
   }
 
   inline cmodel_plsolver_type cselect_linear_solver(const model &md,
-					     const std::string &name) {
+                                             const std::string &name) {
     return select_linear_solver<model_complex_sparse_matrix,
                                 model_complex_plain_vector>(md, name);
-  } 
+  }
 
   //---------------------------------------------------------------------
-  // Standard solve.      
+  // Standard solve.
   //---------------------------------------------------------------------
 
 
-  /** A default solver for the model brick system.  
+  /** A default solver for the model brick system.
   Of course it could be not very well suited for a particular
   problem, so it could be copied and adapted to change solvers,
   add a special traitement on the problem, etc ...  This is in
@@ -329,28 +511,34 @@ namespace getfem {
   When MPI/METIS is enabled, a partition is done via METIS, and a parallel
   solver can be used.
 
+  Note that it is possible to disable some variables
+  (see the md.disable_variable(varname) method) in order to
+  solve the problem only with respect to a subset of variables (the
+  disabled variables are the considered as data) for instance to
+  replace the global Newton strategy with a fixed point one.
+
   @ingroup bricks
   */
   void standard_solve(model &md, gmm::iteration &iter,
-		      rmodel_plsolver_type lsolver,
-		      gmm::abstract_newton_line_search &ls,
-		      bool with_pseudo_potential = false);
+                      rmodel_plsolver_type lsolver,
+                      abstract_newton_line_search &ls,
+                      bool with_pseudo_potential = false);
 
   void standard_solve(model &md, gmm::iteration &iter,
-		      cmodel_plsolver_type lsolver,
-		      gmm::abstract_newton_line_search &ls,
-		      bool with_pseudo_potential = false);
-  
+                      cmodel_plsolver_type lsolver,
+                      abstract_newton_line_search &ls,
+                      bool with_pseudo_potential = false);
+
   void standard_solve(model &md, gmm::iteration &iter,
-		      rmodel_plsolver_type lsolver,
-		      bool with_pseudo_potential = false);
+                      rmodel_plsolver_type lsolver,
+                      bool with_pseudo_potential = false);
 
   void standard_solve(model &md, gmm::iteration &iter,
-		      cmodel_plsolver_type lsolver,
-		      bool with_pseudo_potential = false);
+                      cmodel_plsolver_type lsolver,
+                      bool with_pseudo_potential = false);
 
   void standard_solve(model &md, gmm::iteration &iter,
-		      bool with_pseudo_potential = false);
+                      bool with_pseudo_potential = false);
 
 
 }
@@ -361,9 +549,9 @@ namespace getfem {
 
 
 //---------------------------------------------------------------------
-//           
+//
 // Solvers for the old brick system. Kept for compatibility reasons.
-//           
+//
 //---------------------------------------------------------------------
 
 
@@ -372,7 +560,7 @@ namespace getfem {
 namespace getfem {
 
 #if GETFEM_PARA_LEVEL > 1 && GETFEM_PARA_SOLVER == SCHWARZADD_PARA_SOLVER
-  template <typename MODEL_STATE, typename MAT, typename VECT> 
+  template <typename MODEL_STATE, typename MAT, typename VECT>
   struct linear_solver_para_schwarzadd
     : public abstract_linear_solver<MAT, VECT> {
 
@@ -381,18 +569,18 @@ namespace getfem {
     const mdbrick_abstract<MODEL_STATE> &problem;
     int nblocsubdom; // Number of sub-domains per process
 
-    linear_solver_para_schwarzadd(const mdbrick_abstract<MODEL_STATE> &problem_, 
-				  int nblocsubdom_)
+    linear_solver_para_schwarzadd(const mdbrick_abstract<MODEL_STATE> &problem_,
+                                  int nblocsubdom_)
       : problem(problem_), nblocsubdom(nblocsubdom_) {}
 
     void operator ()(const MAT &M, VECT &x, const VECT &b,
-		     gmm::iteration &iter) const { 
+                     gmm::iteration &iter) const {
       double tt_ref=MPI_Wtime();
 
       // Meshes sub-partition.
       std::set<const mesh *> mesh_set;
       for (size_type i = 0; i < problem.nb_mesh_fems(); ++i)
-	mesh_set.insert(&(problem.get_mesh_fem(i).linked_mesh()));
+        mesh_set.insert(&(problem.get_mesh_fem(i).linked_mesh()));
 
       std::vector< std::vector<int> > eparts(mesh_set.size());
 
@@ -402,91 +590,91 @@ namespace getfem {
       MPI_Comm_size(MPI_COMM_WORLD, &size);
 
       for (std::set<const mesh *>::iterator it = mesh_set.begin();
-	   it != mesh_set.end(); ++it, ++nset) {
-
-	int ne = int((*it)->get_mpi_region().nb_convex());
-	std::vector<int> xadj(ne+1), adjncy, numelt((*it)->convex_index().last_true()+1), numeltinv(ne), npart(ne);
-
-	int j = 0, k = 0;
-	bgeot::mesh_structure::ind_set s;
-	for (mr_visitor ic((*it)->get_mpi_region()); !ic.finished();++ic,++j) 
-	  { numelt[ic.cv()] = j; numeltinv[j] = ic.cv(); }
-
-	j = 0;
-	for (mr_visitor ic((*it)->get_mpi_region()); !ic.finished();++ic,++j) {
-	  xadj[j] = k;
-	  (*it)->neighbours_of_convex(ic.cv(), s);
-	  for (bgeot::mesh_structure::ind_set::iterator iti = s.begin();
-	       iti != s.end(); ++iti)
-	    if ((*it)->get_mpi_region().is_in(*iti)) 
-	      { adjncy.push_back(numelt[*iti]); ++k; }  
-	}
-	xadj[j] = k;
-
-	int wgtflag = 0, edgecut, numflag = 0, options[5] = {0,0,0,0,0};
-	int nbbl = nblocsubdom/size;
-
-	// The mpi region is partitionned into nblocsubdom sub-domains.
-	METIS_PartGraphKway(&ne, &(xadj[0]), &(adjncy[0]), 0, 0, &wgtflag,
-			    &numflag, &nbbl, options, &edgecut,
-			    &(npart[0]));
-
-	eparts[nset].resize(0);
-	eparts[nset].resize((*it)->convex_index().last()+1, size_type(-1));
-	
-	for (size_type i = 0; i < size_type(ne); ++i)
-	  eparts[nset][numeltinv[i]] = npart[i];
+           it != mesh_set.end(); ++it, ++nset) {
+
+        int ne = int((*it)->get_mpi_region().nb_convex());
+        std::vector<int> xadj(ne+1), adjncy, numelt((*it)->convex_index().last_true()+1), numeltinv(ne), npart(ne);
+
+        int j = 0, k = 0;
+        bgeot::mesh_structure::ind_set s;
+        for (mr_visitor ic((*it)->get_mpi_region()); !ic.finished();++ic,++j)
+          { numelt[ic.cv()] = j; numeltinv[j] = ic.cv(); }
+
+        j = 0;
+        for (mr_visitor ic((*it)->get_mpi_region()); !ic.finished();++ic,++j) {
+          xadj[j] = k;
+          (*it)->neighbours_of_convex(ic.cv(), s);
+          for (bgeot::mesh_structure::ind_set::iterator iti = s.begin();
+               iti != s.end(); ++iti)
+            if ((*it)->get_mpi_region().is_in(*iti))
+              { adjncy.push_back(numelt[*iti]); ++k; }
+        }
+        xadj[j] = k;
+
+        int wgtflag = 0, edgecut, numflag = 0, options[5] = {0,0,0,0,0};
+        int nbbl = nblocsubdom/size;
+
+        // The mpi region is partitionned into nblocsubdom sub-domains.
+        METIS_PartGraphKway(&ne, &(xadj[0]), &(adjncy[0]), 0, 0, &wgtflag,
+                            &numflag, &nbbl, options, &edgecut,
+                            &(npart[0]));
+
+        eparts[nset].resize(0);
+        eparts[nset].resize((*it)->convex_index().last()+1, size_type(-1));
+
+        for (size_type i = 0; i < size_type(ne); ++i)
+          eparts[nset][numeltinv[i]] = npart[i];
       }
-      
+
       // To be completeted for non-finite element dofs
-      // nblocsubdom is number of sub dom per proc  
+      // nblocsubdom is number of sub dom per proc
 //       std::vector<dal::bit_vector> Bidof(nblocsubdom);
-      // nblocsubdom is the global number of  sub dom        
+      // nblocsubdom is the global number of  sub dom
       std::vector<dal::bit_vector> Bidof(nblocsubdom/size);
       size_type apos = 0;
       for (size_type i = 0; i < problem.nb_mesh_fems(); ++i) {
-	const mesh_fem &mf = problem.get_mesh_fem(i);
-	nset = 0;
-	for (std::set<const mesh *>::iterator it = mesh_set.begin();
-	     it != mesh_set.end(); ++it, ++nset)
-	  if (*it == &(mf.linked_mesh())) break; 
-	size_type pos = problem.get_mesh_fem_position(i);
-	GMM_ASSERT1(pos == apos, "Multipliers are not taken into account");
-	size_type length = mf.nb_dof();
-	apos += length;
-	for (dal::bv_visitor j(mf.convex_index()); !j.finished(); ++j) {
-	  size_type k = eparts[nset][j];
-	  if (k != size_type(-1))
-	    for (size_type l = 0; l < mf.nb_dof_of_element(j); ++l)
-	      Bidof[k].add(mf.ind_dof_of_element(j)[l] + pos);
-	}
-	GMM_ASSERT1(apos == ndof, "Multipliers are not taken into account");
+        const mesh_fem &mf = problem.get_mesh_fem(i);
+        nset = 0;
+        for (std::set<const mesh *>::iterator it = mesh_set.begin();
+             it != mesh_set.end(); ++it, ++nset)
+          if (*it == &(mf.linked_mesh())) break;
+        size_type pos = problem.get_mesh_fem_position(i);
+        GMM_ASSERT1(pos == apos, "Multipliers are not taken into account");
+        size_type length = mf.nb_dof();
+        apos += length;
+        for (dal::bv_visitor j(mf.convex_index()); !j.finished(); ++j) {
+          size_type k = eparts[nset][j];
+          if (k != size_type(-1))
+            for (size_type l = 0; l < mf.nb_dof_of_element(j); ++l)
+              Bidof[k].add(mf.ind_dof_of_element(j)[l] + pos);
+        }
+        GMM_ASSERT1(apos == ndof, "Multipliers are not taken into account");
       }
-      // nblocsubdom is number of sub dom per proc        
-//       std::vector< gmm::row_matrix< gmm::rsvector<value_type> > > Bi(nblocsubdom*size);   
-      // nblocsubdom is the global number of  sub dom             
-      std::vector< gmm::row_matrix< gmm::rsvector<value_type> > > Bi(nblocsubdom);     
-      // nblocsubdom is number of sub dom per proc        
+      // nblocsubdom is number of sub dom per proc
+//       std::vector< gmm::row_matrix< gmm::rsvector<value_type> > > Bi(nblocsubdom*size);
+      // nblocsubdom is the global number of  sub dom
+      std::vector< gmm::row_matrix< gmm::rsvector<value_type> > > Bi(nblocsubdom);
+      // nblocsubdom is number of sub dom per proc
 //       for (size_type i = 0; i < size_type(nblocsubdom); ++i) {
-      // nblocsubdom is the global number of  sub dom        
+      // nblocsubdom is the global number of  sub dom
       for (size_type i = 0; i < size_type(nblocsubdom/size); ++i) {
-     // nblocsubdom is number of sub dom per proc        
-// 	gmm::resize(Bi[size*rank + i], ndof, Bidof[i].card());
-     // nblocsubdom is the global number of  sub dom     
-	gmm::resize(Bi[(nblocsubdom/size)*rank + i], ndof, Bidof[i].card());
-	size_type k = 0;
-	for (dal::bv_visitor j(Bidof[i]); !j.finished(); ++j, ++k)
-    // nblocsubdom is number of sub dom per proc      
-// 	  Bi[size*rank + i](j, k) = value_type(1);
-     // nblocsubdom is the global number of  sub dom    
-	  Bi[(nblocsubdom/size)*rank + i](j, k) = value_type(1);
+     // nblocsubdom is number of sub dom per proc
+//         gmm::resize(Bi[size*rank + i], ndof, Bidof[i].card());
+     // nblocsubdom is the global number of  sub dom
+        gmm::resize(Bi[(nblocsubdom/size)*rank + i], ndof, Bidof[i].card());
+        size_type k = 0;
+        for (dal::bv_visitor j(Bidof[i]); !j.finished(); ++j, ++k)
+    // nblocsubdom is number of sub dom per proc
+//           Bi[size*rank + i](j, k) = value_type(1);
+     // nblocsubdom is the global number of  sub dom
+          Bi[(nblocsubdom/size)*rank + i](j, k) = value_type(1);
       }
 
       gmm::mpi_distributed_matrix<MAT> mpiM(ndof, ndof);
       gmm::copy(M, mpiM.local_matrix());
-      
+
       additive_schwarz(mpiM, x, b, gmm::identity_matrix(), Bi, iter,
-		       gmm::using_superlu(), gmm::using_cg());
+                       gmm::using_superlu(), gmm::using_cg());
 
       cout<<"temps SCHWARZ ADD "<< MPI_Wtime() - tt_ref<<endl;
     }
@@ -494,21 +682,21 @@ namespace getfem {
 #endif
 
   template <typename MODEL_STATE> struct useful_types {
-    
+
     TYPEDEF_MODEL_STATE_TYPES;
     typedef abstract_linear_solver<T_MATRIX, VECTOR> lsolver_type;
     typedef std::auto_ptr<lsolver_type> plsolver_type;
   };
 
 
-  template <typename MODEL_STATE> 
+  template <typename MODEL_STATE>
   typename useful_types<MODEL_STATE>::plsolver_type
   default_linear_solver(const mdbrick_abstract<MODEL_STATE> &problem) {
     typedef typename MODEL_STATE::tangent_matrix_type T_MATRIX;
     typedef typename MODEL_STATE::vector_type VECTOR;
 
     typename useful_types<MODEL_STATE>::plsolver_type p;
-  
+
 #if GETFEM_PARA_LEVEL == 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER
     p.reset(new linear_solver_mumps<T_MATRIX, VECTOR>);
 #elif GETFEM_PARA_LEVEL > 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER
@@ -531,23 +719,23 @@ namespace getfem {
 # endif
     }
     else {
-      if (problem.is_coercive()) 
-	p.reset(new linear_solver_cg_preconditioned_ildlt<T_MATRIX, VECTOR>);
+      if (problem.is_coercive())
+        p.reset(new linear_solver_cg_preconditioned_ildlt<T_MATRIX, VECTOR>);
       else if (problem.mixed_variables().card() == 0) {
-	if (dim <= 2)
-	  p.reset(new
-		  linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
-	else
-	  p.reset(new
-		  linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
+        if (dim <= 2)
+          p.reset(new
+                  linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
+        else
+          p.reset(new
+                  linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
       }
       else {
-	if (dim <= 2)
-	  p.reset(new
-		  linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
-	else
-	  p.reset(new
-		  linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
+        if (dim <= 2)
+          p.reset(new
+                  linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
+        else
+          p.reset(new
+                  linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
       }
     }
 #endif
@@ -558,10 +746,10 @@ namespace getfem {
   template <typename MODEL_STATE>
   typename useful_types<MODEL_STATE>::plsolver_type
   select_linear_solver(const mdbrick_abstract<MODEL_STATE> &problem,
-		       const std::string &name) {
+                       const std::string &name) {
     typedef typename MODEL_STATE::tangent_matrix_type T_MATRIX;
     typedef typename MODEL_STATE::vector_type VECTOR;
-    
+
     typename useful_types<MODEL_STATE>::plsolver_type p;
 
     if (bgeot::casecmp(name, "superlu") == 0)
@@ -596,7 +784,7 @@ namespace getfem {
   /*     Intermediary structure for Newton algorithms.                 */
   /* ***************************************************************** */
 
-  template <typename MODEL_STATE> 
+  template <typename MODEL_STATE>
   struct model_problem {
 
     TYPEDEF_MODEL_STATE_TYPES;
@@ -606,22 +794,30 @@ namespace getfem {
 
     MODEL_STATE &MS;
     mdbrick_abstract<MODEL_STATE> &pb;
-    gmm::abstract_newton_line_search &ls;
+    abstract_newton_line_search &ls;
     VECTOR stateinit, d;
 
     void compute_tangent_matrix(void) {
       pb.compute_tangent_matrix(MS);
       if (pb.nb_constraints() > 0) {
-	pb.compute_residual(MS);
-	MS.compute_reduced_system();
+        pb.compute_residual(MS);
+        MS.compute_reduced_system();
       }
     }
 
+    void perturbation(void) {
+      R res = gmm::vect_norm2(MS.state()), ampl = res / R(1000);
+      if (res == R(0)) ampl = 1E-30;
+      VECTOR V(gmm::vect_size(MS.state()));
+      gmm::fill_random(V);
+      gmm::add(gmm::scaled(V, ampl), MS.state());
+    }
+
     inline T scale_residual(void) const { return T(-1); }
 
     const T_MATRIX &tangent_matrix(void)
     { return MS.reduced_tangent_matrix(); }
-    
+
     void compute_residual(void) {
       pb.compute_residual(MS);
       if (pb.nb_constraints() > 0) MS.compute_reduced_residual();
@@ -636,27 +832,29 @@ namespace getfem {
       gmm::resize(stateinit, pb.nb_dof());
       gmm::copy(MS.state(), stateinit);
       MS.unreduced_solution(dr, d);
-      R alpha(1), res;
-      
-      ls.init_search(MS.reduced_residual_norm(), iter.get_iteration());
+      R alpha(1), res, R0;
+      R0 = gmm::real(gmm::vect_sp(dr, residual()));
+
+      ls.init_search(MS.reduced_residual_norm(), iter.get_iteration(), R0);
       do {
-	alpha = ls.next_try();
-	gmm::add(stateinit, gmm::scaled(d, alpha), MS.state());
-	compute_residual();
-	res = MS.reduced_residual_norm();
+        alpha = ls.next_try();
+        gmm::add(stateinit, gmm::scaled(d, alpha), MS.state());
+        compute_residual();
+        res = MS.reduced_residual_norm();
+        R0 = gmm::real(gmm::vect_sp(dr, residual()));
       } while (!ls.is_converged(res));
 
       if (alpha != ls.converged_value()) {
-	alpha = ls.converged_value();
-	gmm::add(stateinit, gmm::scaled(d, alpha), MS.state());
-	res = ls.converged_residual();
-	compute_residual();
+        alpha = ls.converged_value();
+        gmm::add(stateinit, gmm::scaled(d, alpha), MS.state());
+        res = ls.converged_residual();
+        compute_residual();
       }
       return alpha;
     }
 
     model_problem(MODEL_STATE &MS_, mdbrick_abstract<MODEL_STATE> &pb_,
-		  gmm::abstract_newton_line_search &ls_)
+                  abstract_newton_line_search &ls_)
       : MS(MS_), pb(pb_), ls(ls_) {}
 
   };
@@ -665,8 +863,8 @@ namespace getfem {
   /*     Standard solve.                                               */
   /* ***************************************************************** */
 
-  /** A default solver for the old model brick system.  
-      
+  /** A default solver for the old model brick system.
+
   Of course it could be not very well suited for a particular
   problem, so it could be copied and adapted to change solvers,
   add a special traitement on the problem, etc ...  This is in
@@ -687,7 +885,7 @@ namespace getfem {
   (MODEL_STATE &MS, mdbrick_abstract<MODEL_STATE> &problem,
    gmm::iteration &iter,
    typename useful_types<MODEL_STATE>::plsolver_type lsolver,
-   gmm::abstract_newton_line_search &ls) {
+   abstract_newton_line_search &ls) {
 
     TYPEDEF_MODEL_STATE_TYPES;
     model_problem<MODEL_STATE> mdpb(MS, problem, ls);
@@ -712,17 +910,17 @@ namespace getfem {
 
   template <typename MODEL_STATE> void
   standard_solve(MODEL_STATE &MS, mdbrick_abstract<MODEL_STATE> &problem,
-		 gmm::iteration &iter,
-		 typename useful_types<MODEL_STATE>::plsolver_type lsolver) {
-    gmm::default_newton_line_search ls;
+                 gmm::iteration &iter,
+                 typename useful_types<MODEL_STATE>::plsolver_type lsolver) {
+    default_newton_line_search ls;
     standard_solve(MS, problem, iter, lsolver, ls);
   }
 
 
   template <typename MODEL_STATE> void
   standard_solve(MODEL_STATE &MS, mdbrick_abstract<MODEL_STATE> &problem,
-		 gmm::iteration &iter) {
-    gmm::default_newton_line_search ls;
+                 gmm::iteration &iter) {
+    getfem::default_newton_line_search ls;
     standard_solve(MS, problem, iter, default_linear_solver(problem), ls);
   }
 
diff --git a/src/getfem/getfem_modeling.h b/src/getfem/getfem_modeling.h
index 4014ced..83867b3 100644
--- a/src/getfem/getfem_modeling.h
+++ b/src/getfem/getfem_modeling.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**
    @file getfem_modeling.h
@@ -863,7 +864,7 @@ namespace getfem {
 				     const mesh_fem &mf_vm, 
 				     VECTVM &VM, bool tresca) {
       getfem::interpolation_von_mises_or_tresca
-	(this->mf_u,mf_vm,get_solution(MS),VM,
+	(this->mf_u,mf_vm,this->get_solution(MS),VM,
 	 lambda().mf(),lambda().get(),mu().mf(),mu().get(),tresca);
     }
   };
diff --git a/src/getfem/getfem_models.h b/src/getfem/getfem_models.h
index 1660010..732baa8 100644
--- a/src/getfem/getfem_models.h
+++ b/src/getfem/getfem_models.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**
    @file getfem_models.h
@@ -43,12 +44,12 @@
 namespace getfem {
 
   class virtual_brick;
-  /** type of pointer on a brick */ 
+  /** type of pointer on a brick */
   typedef boost::intrusive_ptr<const getfem::virtual_brick> pbrick;
 
   class virtual_dispatcher;
   typedef boost::intrusive_ptr<const getfem::virtual_dispatcher> pdispatcher;
-  
+
   // Event management : The model has to react when something has changed in
   //    the context and ask for corresponding (linear) bricks to recompute
   //    some terms.
@@ -83,9 +84,9 @@ namespace getfem {
 
   // utiliser le même type que l'interface matlab/python pour représenter
   // les vecteurs/matrices ?
-  // Cela faciliterait les échanges et réduirait les composantes de la 
+  // Cela faciliterait les échanges et réduirait les composantes de la
   // classe model.
-  
+
   typedef gmm::col_matrix<model_real_sparse_vector> model_real_sparse_matrix;
   typedef gmm::col_matrix<model_complex_sparse_vector>
   model_complex_sparse_matrix;
@@ -115,15 +116,19 @@ namespace getfem {
     enum  var_description_filter {
       VDESCRFILTER_NO,     // Variable being directly the dofs of a given fem
       VDESCRFILTER_REGION, /* Variable being the dofs of a fem on a mesh region
-			    * (uses mf.dof_on_region). */
-      VDESCRFILTER_INFSUP  /* Variable being the dofs of a fem on a mesh region
-			    * with an additional filter on a mass matrix with
+                            * (uses mf.dof_on_region). */
+      VDESCRFILTER_INFSUP, /* Variable being the dofs of a fem on a mesh region
+                            * with an additional filter on a mass matrix with
                             * respect to another fem. */
+      VDESCRFILTER_CTERM   /* Variable being the dofs of a fem on a mesh region
+                            * with an additional filter with the coupling
+			    * termson with respect to another variable. */
     };
 
     struct var_description {
-     
+
       bool is_variable;  // This is a variable or a parameter.
+      bool is_disabled;  // For a variable, to be solved or not
       bool is_complex;   // The variable is complex numbers
       bool is_fem_dofs;  // The variable is the dofs of a fem
       var_description_filter filter; // A filter on the dofs is applied or not.
@@ -133,8 +138,9 @@ namespace getfem {
       size_type default_iter; // default iteration number.
 
       // fem description of the variable
-      const mesh_fem *mf;           // Principal fem of the variable.
-      size_type m_region;           // Optional region for the filter
+      const mesh_fem *mf;        // Principal fem of the variable.
+      size_type m_region;        // Optional region for the filter
+      const mesh_im *mim;        // Optional integration method for the filter
       ppartial_mesh_fem partial_mf; // Filter with respect to mf.
       std::string filter_var;       // Optional variable name for the filter
 
@@ -143,25 +149,27 @@ namespace getfem {
       gmm::uint64_type v_num, v_num_data;
 
       gmm::sub_interval I; // For a variable : indices on the whole system
-  
+
       std::vector<model_real_plain_vector> real_value;
       std::vector<model_complex_plain_vector> complex_value;
       std::vector<gmm::uint64_type> v_num_var_iter;
       std::vector<gmm::uint64_type> v_num_iter;
 
       var_description(bool is_var = false, bool is_com = false,
-		      bool is_fem = false, size_type n_it = 1,
-		      var_description_filter fil = VDESCRFILTER_NO,
-		      const mesh_fem *mmf = 0,
-		      size_type m_reg = size_type(-1), dim_type Q = 1,
-		      const std::string &filter_v = std::string(""))
-	: is_variable(is_var), is_complex(is_com), is_fem_dofs(is_fem),
-	  filter(fil), n_iter(std::max(size_type(1),n_it)), n_temp_iter(0),
-	  default_iter(0), mf(mmf), m_region(m_reg), filter_var(filter_v),
-	  qdim(Q), v_num(0), v_num_data(act_counter()) {
-	if (filter != VDESCRFILTER_NO && mf != 0)
-	  partial_mf = new partial_mesh_fem(*mf);
-	// v_num_data = v_num;
+                      bool is_fem = false, size_type n_it = 1,
+                      var_description_filter fil = VDESCRFILTER_NO,
+                      const mesh_fem *mmf = 0,
+                      size_type m_reg = size_type(-1), dim_type Q = 1,
+                      const std::string &filter_v = std::string(""),
+		      const mesh_im *mim_ = 0)
+        : is_variable(is_var), is_disabled(false), is_complex(is_com),
+	  is_fem_dofs(is_fem), filter(fil),
+	  n_iter(std::max(size_type(1),n_it)), n_temp_iter(0),
+          default_iter(0), mf(mmf), m_region(m_reg), mim(mim_),
+	  filter_var(filter_v), qdim(Q), v_num(0), v_num_data(act_counter()) {
+        if (filter != VDESCRFILTER_NO && mf != 0)
+          partial_mf = new partial_mesh_fem(*mf);
+        // v_num_data = v_num;
       }
 
       // add a temporary version for time integration schemes. Automatically
@@ -172,14 +180,14 @@ namespace getfem {
       void clear_temporaries(void);
 
       const mesh_fem &associated_mf(void) const {
-	GMM_ASSERT1(is_fem_dofs, "This variable is not linked to a fem");
-	if (filter == VDESCRFILTER_NO) return *mf; else return *partial_mf; 
+        GMM_ASSERT1(is_fem_dofs, "This variable is not linked to a fem");
+        if (filter == VDESCRFILTER_NO) return *mf; else return *partial_mf;
       }
 
       const mesh_fem *passociated_mf(void) const {
-	if (!is_fem_dofs) return 0;
-	if (filter == VDESCRFILTER_NO) return mf;
-	else return partial_mf.get(); 
+        if (!is_fem_dofs) return 0;
+        if (filter == VDESCRFILTER_NO) return mf;
+        else return partial_mf.get();
       }
 
       size_type size(void) const // Should control that the variable is
@@ -204,21 +212,21 @@ namespace getfem {
       bool is_symmetric;   // Term have to be symmetrized.
       std::string var1, var2;
       term_description(const std::string &v)
-	: is_matrix_term(false), is_symmetric(false), var1(v) {}
+        : is_matrix_term(false), is_symmetric(false), var1(v) {}
       term_description(const std::string &v1, const std::string &v2,
-		       bool issym)
-	: is_matrix_term(true), is_symmetric(issym), var1(v1), var2(v2) {}
+                       bool issym)
+        : is_matrix_term(true), is_symmetric(issym), var1(v1), var2(v2) {}
     };
 
     typedef std::vector<term_description> termlist;
 
     enum build_version { BUILD_RHS = 1,
-			 BUILD_MATRIX = 2,
-			 BUILD_ALL = 3,
-			 BUILD_ON_DATA_CHANGE = 4,
+                         BUILD_MATRIX = 2,
+                         BUILD_ALL = 3,
+                         BUILD_ON_DATA_CHANGE = 4,
                          BUILD_WITH_COMPLETE_RHS = 8,
                          BUILD_COMPLETE_RHS = 9,
-			 BUILD_PSEUDO_POTENTIAL = 16
+                         BUILD_PSEUDO_POTENTIAL = 16
                        };
 
   private :
@@ -240,7 +248,7 @@ namespace getfem {
       mutable scalar_type matrix_coeff;
       mutable real_matlist rmatlist;    // Matrices the brick have to fill in
                                         // (real version).
-      mutable std::vector<real_veclist> rveclist; // Rhs the brick have to 
+      mutable std::vector<real_veclist> rveclist; // Rhs the brick have to
                                         // fill in (real version).
       mutable std::vector<real_veclist> rveclist_sym; // additional rhs for
                                         //  symmetric terms (real version).
@@ -250,16 +258,16 @@ namespace getfem {
                                         // fill in (complex version).
       mutable std::vector<complex_veclist> cveclist_sym;  // additional rhs
                                         // for symmetric terms (real version).
-      
+
       brick_description(pbrick p, const varnamelist &vl,
-			const varnamelist &dl, const termlist &tl,
-			const mimlist &mms, size_type reg)
-	: terms_to_be_computed(true), v_num(0), pbr(p), pdispatch(0), nbrhs(1),
-	  vlist(vl), dlist(dl), tlist(tl), mims(mms), region(reg),
-	  rveclist(1), rveclist_sym(1), cveclist(1),
-	  cveclist_sym(1)  { }
+                        const varnamelist &dl, const termlist &tl,
+                        const mimlist &mms, size_type reg)
+        : terms_to_be_computed(true), v_num(0), pbr(p), pdispatch(0), nbrhs(1),
+          vlist(vl), dlist(dl), tlist(tl), mims(mms), region(reg),
+          rveclist(1), rveclist_sym(1), cveclist(1),
+          cveclist_sym(1)  { }
     };
-    
+
     typedef std::map<std::string, var_description> VAR_SET;
     mutable VAR_SET variables;
     std::vector<brick_description> bricks;
@@ -267,42 +275,57 @@ namespace getfem {
 
     void actualize_sizes(void) const;
     bool check_name_valitity(const std::string &name,
-			     bool assert = true) const;
+                             bool assert = true) const;
     void brick_init(size_type ib, build_version version,
-		      size_type rhs_ind = 0) const;
+                      size_type rhs_ind = 0) const;
 
     void init(void) { complex_version = false; act_size_to_be_done = false; }
 
   public :
 
-    // call the brick if necessary 
+    // call the brick if necessary
     void update_brick(size_type ib, build_version version) const;
     void linear_brick_add_to_rhs(size_type ib, size_type ind_data,
-				 size_type n_iter) const;
+                                 size_type n_iter) const;
+    bool build_reduced_index(std::vector<size_type> &ind);
     void brick_call(size_type ib, build_version version,
-		    size_type rhs_ind = 0) const;
+                    size_type rhs_ind = 0) const;
     model_real_plain_vector &rhs_coeffs_of_brick(size_type ib) const
     { return bricks[ib].coeffs; }
     scalar_type &matrix_coeff_of_brick(size_type ib) const
     { return bricks[ib].matrix_coeff; }
     bool is_var_newer_than_brick(const std::string &varname,
-				 size_type ib) const;
+                                 size_type ib) const;
     bool is_var_mf_newer_than_brick(const std::string &varname,
-				    size_type ib) const;
-    pbrick get_brick(size_type ib) const { return bricks[ib].pbr; }
-    
+                                    size_type ib) const;
+    pbrick get_brick(size_type ib) const IS_DEPRECATED {
+      GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
+      return bricks[ib].pbr;
+    }
+    pbrick brick_pointer(size_type ind_brick) const { 
+      GMM_ASSERT1(ind_brick < bricks.size(), "Inexistent brick");
+      return bricks[ind_brick].pbr;
+    }
+
+
     void add_temporaries(const varnamelist &vl, gmm::uint64_type id_num) const;
 
+    const mimlist &mimlist_of_brick(size_type ib) const
+    { return bricks[ib].mims; }
+
     const varnamelist &varnamelist_of_brick(size_type ib) const
     { return bricks[ib].vlist; }
-    
+
     const varnamelist &datanamelist_of_brick(size_type ib) const
     { return bricks[ib].dlist; }
-    
+
+    size_type region_of_brick(size_type ib) const
+    { return bricks[ib].region; }
+
     bool temporary_uptodate(const std::string &varname,
-			    gmm::uint64_type  id_num, size_type &ind) const;
+                            gmm::uint64_type  id_num, size_type &ind) const;
     void set_default_iter_of_variable(const std::string &varname,
-				      size_type ind) const;
+                                      size_type ind) const;
     void reset_default_iter_of_variables(const varnamelist &vl) const;
 
     void update_from_context(void) const {  act_size_to_be_done = true; }
@@ -315,34 +338,44 @@ namespace getfem {
 
     /** Disable a brick.  */
     void disable_brick(size_type ib) {
-      GMM_ASSERT1(ib < bricks.size(), "Unexistent brick");
+      GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
       active_bricks.sup(ib);
     }
 
-    /** Disable a brick.  */
-    void unable_brick(size_type ib) {
-      GMM_ASSERT1(ib < bricks.size(), "Unexistent brick");
+    /** Enable a brick.  */
+    void enable_brick(size_type ib) {
+      GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
       active_bricks.add(ib);
     }
-    
+
+    /** Disable a variable.  */
+    void disable_variable(const std::string &name) {
+      variables[name].is_disabled = true;
+    }
+
+    /** Enable a variable.  */
+    void enable_variable(const std::string &name) {
+      variables[name].is_disabled = false;
+    }
+
     /** Boolean which says if the model deals with real or complex unknowns
-	and data. */
+        and data. */
     bool is_complex(void) const { return complex_version; }
 
     /** Return true if all the model terms do not affect the coercivity of
-	the whole tangent system. */    
+        the whole tangent system. */
     bool is_coercive(void) const { return is_coercive_; }
 
-    /** Return true if all the model terms are linear. */    
+    /** Return true if all the model terms are linear. */
     bool is_linear(void) const { return is_linear_; }
 
     /** Total number of degrees of freedom in the model. */
     size_type nb_dof(void) const {
       context_check(); if (act_size_to_be_done) actualize_sizes();
       if (complex_version)
-	return gmm::vect_size(crhs);
+        return gmm::vect_size(crhs);
       else
-	return gmm::vect_size(rrhs);
+        return gmm::vect_size(rrhs);
     }
 
     /** Leading dimension of the meshes used in the model. */
@@ -356,45 +389,45 @@ namespace getfem {
     { return variables[name].I; }
 
     /** Gives the access to the vector value of a variable. For the real
-	version. */
+        version. */
     const model_real_plain_vector &
     real_variable(const std::string &name,
-		  size_type niter = size_type(-1)) const;
+                  size_type niter = size_type(-1)) const;
 
     /** Gives the access to the vector value of a variable. For the complex
-	version. */
+        version. */
     const model_complex_plain_vector &
     complex_variable(const std::string &name,
-		     size_type niter = size_type(-1)) const;
+                     size_type niter = size_type(-1)) const;
 
     /** Gives the write access to the vector value of a variable. Make a
-	change flag of the variable set. For the real version. */
+        change flag of the variable set. For the real version. */
     model_real_plain_vector &
     set_real_variable(const std::string &name,
-		      size_type niter = size_type(-1)) const;
+                      size_type niter = size_type(-1)) const;
 
     /** Gives the write access to the vector value of a variable. Make a
-	change flag of the variable set. For the complex version. */
+        change flag of the variable set. For the complex version. */
     model_complex_plain_vector &
     set_complex_variable(const std::string &name,
-			 size_type niter = size_type(-1)) const;
+                         size_type niter = size_type(-1)) const;
 
     template<typename VECTOR, typename T>
     void from_variables(VECTOR &V, T) const {
       for (VAR_SET::iterator it = variables.begin();
-	   it != variables.end(); ++it)
-	if (it->second.is_variable)
-	  gmm::copy(it->second.real_value[0],
-		    gmm::sub_vector(V, it->second.I));
+           it != variables.end(); ++it)
+        if (it->second.is_variable)
+          gmm::copy(it->second.real_value[0],
+                    gmm::sub_vector(V, it->second.I));
     }
 
     template<typename VECTOR, typename T>
     void from_variables(VECTOR &V, std::complex<T>) const {
       for (VAR_SET::iterator it = variables.begin();
-	   it != variables.end(); ++it)
-	if (it->second.is_variable)
-	  gmm::copy(it->second.complex_value[0],
-		    gmm::sub_vector(V, it->second.I));
+           it != variables.end(); ++it)
+        if (it->second.is_variable)
+          gmm::copy(it->second.complex_value[0],
+                    gmm::sub_vector(V, it->second.I));
     }
 
     template<typename VECTOR> void from_variables(VECTOR &V) const {
@@ -407,23 +440,23 @@ namespace getfem {
     template<typename VECTOR, typename T>
     void to_variables(VECTOR &V, T) {
       for (VAR_SET::iterator it = variables.begin();
-	   it != variables.end(); ++it)
-	if (it->second.is_variable) {
-	  gmm::copy(gmm::sub_vector(V, it->second.I),
-		    it->second.real_value[0]);
-	  it->second.v_num_data = act_counter();
-	}
+           it != variables.end(); ++it)
+        if (it->second.is_variable) {
+          gmm::copy(gmm::sub_vector(V, it->second.I),
+                    it->second.real_value[0]);
+          it->second.v_num_data = act_counter();
+        }
     }
 
     template<typename VECTOR, typename T>
     void to_variables(VECTOR &V, std::complex<T>) {
       for (VAR_SET::iterator it = variables.begin();
-	   it != variables.end(); ++it)
-	if (it->second.is_variable) {
-	  gmm::copy(gmm::sub_vector(V, it->second.I),
-		    it->second.complex_value[0]);
-	  it->second.v_num_data = act_counter();
-	}
+           it != variables.end(); ++it)
+        if (it->second.is_variable) {
+          gmm::copy(gmm::sub_vector(V, it->second.I),
+                    it->second.complex_value[0]);
+          it->second.v_num_data = act_counter();
+        }
     }
 
     template<typename VECTOR> void to_variables(VECTOR &V) {
@@ -433,14 +466,14 @@ namespace getfem {
     }
 
     /** Add a fixed size variable to the model. niter is the number of version
-	of the variable stored, for time integration schemes. */
+        of the variable stored, for time integration schemes. */
     void add_fixed_size_variable(const std::string &name, size_type size,
-				 size_type niter = 1);
+                                 size_type niter = 1);
 
     /** Add a fixed size data to the model. niter is the number of version
-	of the data stored, for time integration schemes. */
+        of the data stored, for time integration schemes. */
     void add_fixed_size_data(const std::string &name, size_type size,
-			     size_type niter = 1);
+                             size_type niter = 1);
 
     /** Resize a fixed size variable (or data) of the model. */
     void resize_fixed_size_variable(const std::string &name, size_type size);
@@ -449,12 +482,12 @@ namespace getfem {
     /** Add a fixed size data to the model initialized with V. */
     template <typename VECT>
     void add_initialized_fixed_size_data(const std::string &name,
-					 const VECT &v) {
+                                         const VECT &v) {
       this->add_fixed_size_data(name, gmm::vect_size(v), 1);
       if (this->is_complex()) // to be templated .. see later
-	gmm::copy(v, this->set_complex_variable(name));
+        gmm::copy(v, this->set_complex_variable(name));
       else
-	gmm::copy(gmm::real_part(v), this->set_real_variable(name));
+        gmm::copy(gmm::real_part(v), this->set_real_variable(name));
     }
 
     /** Add a scalar data (i.e. of size 1) to the model initialized with e. */
@@ -462,48 +495,65 @@ namespace getfem {
     void add_initialized_scalar_data(const std::string &name, T e) {
       this->add_fixed_size_data(name, 1, 1);
       if (this->is_complex()) // to be templated .. see later
-	this->set_complex_variable(name)[0] = e;
+        this->set_complex_variable(name)[0] = e;
       else
-	this->set_real_variable(name)[0] = gmm::real(e);
+        this->set_real_variable(name)[0] = gmm::real(e);
     }
 
 
     /** Add a variable being the dofs of a finite element method to the model.
-	niter is the number of version of the variable stored, for time
-	integration schemes. */
+        niter is the number of version of the variable stored, for time
+        integration schemes. */
     void add_fem_variable(const std::string &name, const mesh_fem &mf,
-			  size_type niter = 1);
+                          size_type niter = 1);
+
+    /** Add a variable linked to a fem with the dof filtered with respect 
+	to a mesh region. Only the dof returned by the dof_on_region
+	method of `mf` will be kept. niter is the number of version
+	of the data stored, for time integration schemes. */
+    void add_filtered_fem_variable(const std::string &name, const mesh_fem &mf,
+				   size_type region, size_type niter = 1);
 
     /** Add a data being the dofs of a finite element method to the model.
-	The data is initialized with V. */
+        The data is initialized with V. */
     void add_fem_data(const std::string &name, const mesh_fem &mf,
-		      dim_type qdim = 1, size_type niter = 1);
+                      dim_type qdim = 1, size_type niter = 1);
 
     /** Add a fixed size data to the model. niter is the number of version
-	of the data stored, for time integration schemes. */
+        of the data stored, for time integration schemes. */
     template <typename VECT>
     void add_initialized_fem_data(const std::string &name, const mesh_fem &mf,
-				  const VECT &v) {
+                                  const VECT &v) {
       this->add_fem_data(name, mf,
-			 dim_type(gmm::vect_size(v) / mf.nb_dof()), 1);
+                         dim_type(gmm::vect_size(v) / mf.nb_dof()), 1);
       if (this->is_complex()) // to be templated .. see later
-	gmm::copy(v, this->set_complex_variable(name));
+        gmm::copy(v, this->set_complex_variable(name));
       else
-	gmm::copy(gmm::real_part(v), this->set_real_variable(name));
+        gmm::copy(gmm::real_part(v), this->set_real_variable(name));
     }
-    
+
     /** Add a particular variable linked to a fem being a multiplier with
-	respect to a primal variable. The dof will be filtered with the
-	gmm::range_basis function applied on the terms of the model which
-	link the multiplier and the primal variable. Optimized for boundary
-	multipliers. niter is the number of version of the data stored,
-	for time integration schemes. */
+        respect to a primal variable. The dof will be filtered with the
+        gmm::range_basis function applied on the terms of the model which
+        link the multiplier and the primal variable. Optimized for boundary
+        multipliers. niter is the number of version of the data stored,
+        for time integration schemes. */
     void add_multiplier(const std::string &name, const mesh_fem &mf,
-			const std::string &primal_name,
-			size_type niter = 1);
-    
+                        const std::string &primal_name,
+                        size_type niter = 1);
+
+    /** Add a particular variable linked to a fem being a multiplier with
+        respect to a primal variable. The dof will be filtered with the
+        gmm::range_basis function applied on the mass matrix between the fem
+	of the multiplier and the one of the primal variable.
+	Optimized for boundary multipliers. niter is the number of version
+	of the data stored, for time integration schemes. */
+    void add_multiplier(const std::string &name, const mesh_fem &mf,
+                        const std::string &primal_name, const mesh_im &mim,
+			size_type region, size_type niter = 1);
+
     /** Gives the access to the mesh_fem of a variable if any. Throw an
-	exception otherwise. */
+        exception otherwise. */
     const mesh_fem &mesh_fem_of_variable(const std::string &name) const;
 
     /** Gives a pointer to the mesh_fem of a variable if any. 0 otherwise.*/
@@ -516,61 +566,99 @@ namespace getfem {
       context_check(); if (act_size_to_be_done) actualize_sizes();
       return rTM;
     }
-    
+
     /** Gives the access to the tangent matrix. For the complex version. */
     const model_complex_sparse_matrix &complex_tangent_matrix(void) const {
       GMM_ASSERT1(complex_version, "This model is a real one");
       context_check(); if (act_size_to_be_done) actualize_sizes();
       return cTM;
     }
-    
+
     /** Gives the access to the right hand side of the tangent linear system.
-	For the real version. */
+        For the real version. An assembly of the rhs has to be done first. */
     const model_real_plain_vector &real_rhs(void) const {
       GMM_ASSERT1(!complex_version, "This model is a complex one");
       context_check(); if (act_size_to_be_done) actualize_sizes();
       return rrhs;
     }
 
+    /** Gives the access to the part of the right hand side of a term of a particular nonlinear brick. Does not account of the eventual time dispatcher. An assembly of the rhs has to be done first. For the real version. */
+    const model_real_plain_vector &real_brick_term_rhs(size_type ib, size_type ind_term = 0, bool sym = false, size_type ind_iter = 0) const {
+      GMM_ASSERT1(!complex_version, "This model is a complex one");
+      context_check(); if (act_size_to_be_done) actualize_sizes();
+      GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
+      GMM_ASSERT1(ind_term < bricks[ib].tlist.size(), "Inexistent term");
+      GMM_ASSERT1(ind_iter < bricks[ib].nbrhs, "Inexistent iter");
+      GMM_ASSERT1(!sym || bricks[ib].tlist[ind_term].is_symmetric,
+                  "Term is not symmetric");
+
+      if (sym)
+        return bricks[ib].rveclist_sym[ind_iter][ind_term];
+      else
+        return bricks[ib].rveclist[ind_iter][ind_term];
+    }
+
     /** Gives the access to the pseudo potential. It has to be computed first
-	by the call of assembly(model::BUILD_PSEUDO_POTENTIAL); */
+        by the call of assembly(model::BUILD_PSEUDO_POTENTIAL); */
     scalar_type pseudo_potential(void) const {
       return pseudo_potential_;
     }
-    
+
     /** Gives the access to the right hand side of the tangent linear system.
-	For the complex version. */
+        For the complex version. */
     const model_complex_plain_vector &complex_rhs(void) const {
       GMM_ASSERT1(complex_version, "This model is a real one");
       context_check(); if (act_size_to_be_done) actualize_sizes();
       return crhs;
     }
 
+    /** Gives the access to the part of the right hand side of a term of a particular nonlinear brick. Does not account of the eventual time dispatcher. An assembly of the rhs has to be done first. For the real version. */
+    const model_complex_plain_vector &complex_brick_term_rhs(size_type ib, size_type ind_term = 0, bool sym = false, size_type ind_iter = 0) const {
+      GMM_ASSERT1(!complex_version, "This model is a complex one");
+      context_check(); if (act_size_to_be_done) actualize_sizes();
+      GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
+      GMM_ASSERT1(ind_term < bricks[ib].tlist.size(), "Inexistent term");
+      GMM_ASSERT1(ind_iter < bricks[ib].nbrhs, "Inexistent iter");
+      GMM_ASSERT1(!sym || bricks[ib].tlist[ind_term].is_symmetric,
+                  "Term is not symmetric");
+
+      if (sym)
+        return bricks[ib].cveclist_sym[ind_iter][ind_term];
+      else
+        return bricks[ib].cveclist[ind_iter][ind_term];
+    }
+
     /** List the model variables and constant. */
     void listvar(std::ostream &ost) const;
 
     /** List the model bricks. */
     void listbricks(std::ostream &ost, size_type base_id = 0) const;
 
-    /** Force the re-computation of a brick for the next assembly. */ 
+    /** Force the re-computation of a brick for the next assembly. */
     void touch_brick(size_type ind_brick) {
       GMM_ASSERT1(ind_brick < bricks.size(), "Inexistent brick");
       bricks[ind_brick].terms_to_be_computed = true;
     }
 
-    pbrick brick_pointer(size_type ind_brick) {
-      GMM_ASSERT1(ind_brick < bricks.size(), "Inexistent brick");
-      return bricks[ind_brick].pbr;
-    }
-
     /** Add a brick to the model. varname is the list of variable used
         and datanames the data used. If a variable is used as a data, it
         should be declared in the datanames (it will depend on the value of
-	the variable not only on the fem). */
+        the variable not only on the fem). */
     size_type add_brick(pbrick pbr, const varnamelist &varnames,
-			const varnamelist &datanames,
-			const termlist &terms, const mimlist &mims, 
-			size_type region);
+                        const varnamelist &datanames,
+                        const termlist &terms, const mimlist &mims,
+                        size_type region);
+    
+    /** Add an integration method to a brick. */
+    void add_mim_to_brick(size_type ib, const mesh_im &mim);
+
+    /** Change the term list of a brick. Used for very special bricks only. */
+    void change_terms_of_brick(size_type ib, const termlist &terms);
+
+    /** Change the variable list of a brick. Used for very special bricks only.
+     */
+    void change_variables_of_brick(size_type ib, const varnamelist &vl);
+
 
     /** Add a time dispacther to a brick. */
     void add_time_dispatcher(size_type ibrick, pdispatcher pdispatch);
@@ -581,22 +669,22 @@ namespace getfem {
     void first_iter(void);
 
     /** For transient problems. Prepare the next iterations. In particular
-	shift the version of the variables. 
+        shift the version of the variables.
     */
     void next_iter(void);
 
     /** Gives the name of the variable of index `ind_var` of the brick
-	of index `ind_brick`. */
+        of index `ind_brick`. */
     const std::string &varname_of_brick(size_type ind_brick,
-					size_type ind_var);
+                                        size_type ind_var);
 
     /** Gives the name of the data of index `ind_data` of the brick
-	of index `ind_brick`. */
+        of index `ind_brick`. */
     const std::string &dataname_of_brick(size_type ind_brick,
-					 size_type ind_data);
+                                         size_type ind_data);
 
     /** Assembly of the tangent system taking into account the terms
-	from all bricks. */
+        from all bricks. */
     void assembly(build_version version);
 
     void clear(void) {
@@ -614,6 +702,12 @@ namespace getfem {
       leading_dim = 0;
     }
 
+	/**check consistency of RHS and Stiffness matrix for brick with 
+	* @param  ind_brick  - index of the brick
+	*/
+	void check_brick_stiffness_rhs(size_type ind_brick) const;
+
+
   };
 
   //=========================================================================
@@ -636,11 +730,11 @@ namespace getfem {
     { for (size_type i = 0; i < v.size(); ++i) gmm::clear(v[i]); }
 
     void transfert(model::real_veclist &v1,
-		   model::real_veclist &v2) const
+                   model::real_veclist &v2) const
     { for (size_type i = 0; i < v1.size(); ++i) gmm::copy(v1[i], v2[i]); }
 
     void transfert(model::complex_veclist &v1,
-		   model::complex_veclist &v2) const
+                   model::complex_veclist &v2) const
     { for (size_type i = 0; i < v1.size(); ++i) gmm::copy(v1[i], v2[i]); }
 
     size_type nbrhs_;
@@ -681,7 +775,7 @@ namespace getfem {
      std::vector<model::real_veclist> &,
      build_version) const {
       GMM_ASSERT1(false, "Time dispatcher with not defined real tangent "
-		  "terms !");
+                  "terms !");
     }
 
     virtual void asm_complex_tangent_terms
@@ -690,13 +784,13 @@ namespace getfem {
      std::vector<model::complex_veclist> &,
      build_version) const {
       GMM_ASSERT1(false, "Time dispatcher with not defined complex tangent "
-		  "terms !");
+                  "terms !");
     }
 
     virtual_dispatcher(size_type _nbrhs) : nbrhs_(_nbrhs) {
       GMM_ASSERT1(_nbrhs > 0, "Time dispatcher with no rhs");
     }
-    
+
   };
 
   //=========================================================================
@@ -710,7 +804,7 @@ namespace getfem {
       $\theta K U^{n+1} + (1-\theta) K U^{n}$.
   */
   void add_theta_method_dispatcher(model &md, dal::bit_vector ibricks,
-				   const std::string &THETA);
+                                   const std::string &THETA);
 
   /** Function which udpate the velocity $v^{n+1}$ after the computation
       of the displacement $u^{n+1}$ and before the next iteration. Specific
@@ -750,29 +844,32 @@ namespace getfem {
       The virtual methods asm_real_tangent_terms and/or
       asm_complex_tangent_terms have to be defined.
       The brick should not store data. The data have to be stored in the
-      model object. 
+      model object.
   **/
   class virtual_brick : virtual public dal::static_stored_object {
   private :
     bool islinear;    // The brick add a linear term or not.
     bool issymmetric; // The brick add a symmetric term or not.
-    bool iscoercive;  // The brick add a potentialy coercive terms or not. 
+    bool iscoercive;  // The brick add a potentialy coercive terms or not.
     //   (in particular, not a term involving a multiplier)
     bool isreal;      // The brick admits a real version or not.
     bool iscomplex;   // The brick admits a complex version or not.
     bool isinit;      // internal flag.
+    bool compute_each_time; // The brick is linear but needs to be computed
+                            // each time it is evaluated.
     std::string name; // Name of the brick.
-   
+
   public :
 
     typedef model::build_version build_version;
-    
+
     virtual_brick(void) { isinit = false; }
     void set_flags(const std::string &bname, bool islin, bool issym,
-		   bool iscoer, bool ire, bool isco) {
+                   bool iscoer, bool ire, bool isco, bool each_time = false) {
       name = bname;
       islinear = islin; issymmetric = issym; iscoercive = iscoer;
       isreal = ire; iscomplex = isco; isinit = true;
+      compute_each_time = each_time;
     }
 
 #   define BRICK_NOT_INIT GMM_ASSERT1(isinit, "Set brick flags !")
@@ -781,66 +878,83 @@ namespace getfem {
     bool is_coercive(void)  const { BRICK_NOT_INIT; return iscoercive;  }
     bool is_real(void)      const { BRICK_NOT_INIT; return isreal;      }
     bool is_complex(void)   const { BRICK_NOT_INIT; return iscomplex;   }
+    bool is_to_be_computed_each_time(void) const
+    { BRICK_NOT_INIT; return compute_each_time; }
     const std::string &brick_name(void) const { BRICK_NOT_INIT; return name; }
 
     virtual void asm_real_tangent_terms(const model &, size_type,
-					const model::varnamelist &,
-					const model::varnamelist &,
-					const model::mimlist &,
-					model::real_matlist &,
-					model::real_veclist &,
-					model::real_veclist &,
-					size_type, build_version) const
+                                        const model::varnamelist &,
+                                        const model::varnamelist &,
+                                        const model::mimlist &,
+                                        model::real_matlist &,
+                                        model::real_veclist &,
+                                        model::real_veclist &,
+                                        size_type, build_version) const
     { GMM_ASSERT1(false, "Brick has no real tangent terms !"); }
 
     virtual void asm_complex_tangent_terms(const model &, size_type,
-					   const model::varnamelist &,
-					   const model::varnamelist &,
-					   const model::mimlist &,
-					   model::complex_matlist &,
-					   model::complex_veclist &,
-					   model::complex_veclist &,
-					   size_type, build_version) const
+                                           const model::varnamelist &,
+                                           const model::varnamelist &,
+                                           const model::mimlist &,
+                                           model::complex_matlist &,
+                                           model::complex_veclist &,
+                                           model::complex_veclist &,
+                                           size_type, build_version) const
     { GMM_ASSERT1(false, "Brick has no complex tangent terms !"); }
 
 
     virtual scalar_type asm_real_pseudo_potential(const model &, size_type,
-						  const model::varnamelist &,
-						  const model::varnamelist &,
-						  const model::mimlist &,
-						  model::real_matlist &,
-						  model::real_veclist &,
-						  model::real_veclist &,
-						  size_type) const {
+                                                  const model::varnamelist &,
+                                                  const model::varnamelist &,
+                                                  const model::mimlist &,
+                                                  model::real_matlist &,
+                                                  model::real_veclist &,
+                                                  model::real_veclist &,
+                                                  size_type) const {
       GMM_WARNING1("Brick " << name << " has no contribution to the "
-		   << "pseudo potential !");
+                   << "pseudo potential !");
       return scalar_type(0);
     }
-    
+
     virtual scalar_type asm_complex_pseudo_potential(const model &, size_type,
-						     const model::varnamelist&,
-						     const model::varnamelist&,
-						     const model::mimlist &,
-						     model::complex_matlist &,
-						     model::complex_veclist &,
-						     model::complex_veclist &,
-						     size_type) const { 
+                                                     const model::varnamelist&,
+                                                     const model::varnamelist&,
+                                                     const model::mimlist &,
+                                                     model::complex_matlist &,
+                                                     model::complex_veclist &,
+                                                     model::complex_veclist &,
+                                                     size_type) const {
       GMM_WARNING1("Brick " << name << " has no contribution to the "
-		   << "pseudo potential !");
+                   << "pseudo potential !");
       return scalar_type(0);
     }
-    
-    
+
+	/**check consistency of stiffness matrix and rhs*/
+	void check_stiffness_matrix_and_rhs(const model &, size_type,
+                                        const model::varnamelist &,
+                                        const model::varnamelist &,
+                                        const model::mimlist &,
+                                        model::real_matlist &,
+                                        model::real_veclist &,
+                                        model::real_veclist &, size_type rg,
+										const scalar_type delta = 1e-8) const;
+
+
+
+
   };
 
+
+
   //=========================================================================
   //
   //  Functions adding standard bricks to the model.
   //
   //=========================================================================
 
-  
-  /** Add a Laplacian term on the variable `varname`. If it is a vector
+
+  /** Add a Laplacian term on the variable `varname` (in fact with a minus :
+      :math:`-\text{div}(\nabla u)`). If it is a vector
       valued variable, the Laplacian term is componentwise. `region` is an
       optional mesh region on which the term is added. Return the brick index
       in the model.
@@ -848,7 +962,7 @@ namespace getfem {
   size_type add_Laplacian_brick
   (model &md, const mesh_im &mim, const std::string &varname,
    size_type region = size_type(-1));
-  
+
 
   /** Add an elliptic term on the variable `varname`. The shape of the elliptic
       term depends both on the variable and the data. This corresponds to a
@@ -869,7 +983,7 @@ namespace getfem {
   size_type add_generic_elliptic_brick
   (model &md, const mesh_im &mim, const std::string &varname,
    const std::string &dataname, size_type region = size_type(-1));
-  
+
 
   /** Add a source term on the variable `varname`. The source term is
       represented by the data `dataname` which could be constant or described
@@ -898,7 +1012,7 @@ namespace getfem {
   /** Add a Dirichlet condition on the variable `varname` and the mesh
       region `region`. This region should be a boundary. The Dirichlet
       condition is prescribed with a multiplier variable `multname` which
-      should be first declared as a multiplier 
+      should be first declared as a multiplier
       variable on the mesh region in the model. `dataname` is the optional
       right hand side of  the Dirichlet condition. It could be constant or
       described on a fem; scalar or vector valued, depending on the variable
@@ -910,7 +1024,7 @@ namespace getfem {
    const std::string &multname, size_type region,
    const std::string &dataname = std::string());
 
-  /** Same function as the preceeding one but the multipliers variable will
+  /** Same function as the previous one but the multipliers variable will
       be declared to the brick by the function. `mf_mult` is the finite element
       method on which the multiplier will be build (it will be restricted to
       the mesh region `region` and eventually some conflicting dofs with some
@@ -921,7 +1035,7 @@ namespace getfem {
    const mesh_fem &mf_mult, size_type region,
    const std::string &dataname = std::string());
 
-  /** Same function as the preceeding one but the `mf_mult` parameter is
+  /** Same function as the previous one but the `mf_mult` parameter is
       replaced by `degree`. The multiplier will be described on a standard
       finite element method of the corresponding degree.
    */
@@ -946,7 +1060,7 @@ namespace getfem {
       on which the Dirichlet condition is prescribed.
       `mf_mult` is an optional parameter which allows to weaken the
       Dirichlet condition specifying a multiplier space.
-      Return the brick index in the model.
+      Returns the brick index in the model.
   */
   size_type add_Dirichlet_condition_with_penalization
   (model &md, const mesh_im &mim, const std::string &varname,
@@ -954,19 +1068,147 @@ namespace getfem {
    const std::string &dataname = std::string(),
    const mesh_fem *mf_mult = 0);
 
+  /** Add a Dirichlet condition to the normal component of the vector
+     (or tensor) valued variable `varname` and the mesh
+      region `region`. This region should be a boundary. The Dirichlet
+      condition is prescribed with a multiplier variable `multname` which
+      should be first declared as a multiplier
+      variable on the mesh region in the model. `dataname` is the optional
+      right hand side of  the normal Dirichlet condition.
+      It could be constant or
+      described on a fem; scalar or vector valued, depending on the variable
+      on which the Dirichlet condition is prescribed (scalar if the variable
+      is vector valued, vector if the variable is tensor valued).
+      Returns the brick index in the model.
+  */
+  size_type add_normal_Dirichlet_condition_with_multipliers
+  (model &md, const mesh_im &mim, const std::string &varname,
+   const std::string &multname, size_type region,
+   const std::string &dataname = std::string());
+
+  /** Same function as the previous one but the multipliers variable will
+      be declared to the brick by the function. `mf_mult` is the finite element
+      method on which the multiplier will be build (it will be restricted to
+      the mesh region `region` and eventually some conflicting dofs with some
+      other multiplier variables will be suppressed).
+  */
+  size_type add_normal_Dirichlet_condition_with_multipliers
+  (model &md, const mesh_im &mim, const std::string &varname,
+   const mesh_fem &mf_mult, size_type region,
+   const std::string &dataname = std::string());
+
+  /** Same function as the previous one but the `mf_mult` parameter is
+      replaced by `degree`. The multiplier will be described on a standard
+      finite element method of the corresponding degree.
+   */
+  size_type add_normal_Dirichlet_condition_with_multipliers
+  (model &md, const mesh_im &mim, const std::string &varname,
+   dim_type degree, size_type region,
+   const std::string &dataname = std::string());
+
+  /** Add a Dirichlet condition to the normal component of the vector
+     (or tensor) valued variable `varname` and the mesh
+      region `region`. This region should be a boundary. The Dirichlet
+      condition is prescribed with penalization. The penalization coefficient
+      is intially `penalization_coeff` and will be added to the data of
+      the model. `dataname` is the optional
+      right hand side of  the Dirichlet condition. It could be constant or
+      described on a fem; scalar or vector valued, depending on the variable
+      on which the Dirichlet condition is prescribed (scalar if the variable
+      is vector valued, vector if the variable is tensor valued).
+      `mf_mult` is an optional parameter which allows to weaken the
+      Dirichlet condition specifying a multiplier space.
+      Return the brick index in the model.
+  */
+  size_type add_normal_Dirichlet_condition_with_penalization
+  (model &md, const mesh_im &mim, const std::string &varname,
+   scalar_type penalization_coeff, size_type region,
+   const std::string &dataname = std::string(),
+   const mesh_fem *mf_mult = 0);
+
+
+  /** Add some pointwise constraints on the variable `varname` thanks to
+      a penalization. The penalization coefficient is initially
+      `penalization_coeff` and will be added to the data of the model.
+      The conditions are prescribed on a set of points given in the data
+      `dataname_pt` whose dimension is the number of points times the dimension
+      of the mesh. If the variable represents a vector field, the data
+      `dataname_unitv` represents a vector of dimension the number of points
+      times the dimension of the vector field which should store some
+      unit vectors. In that case the prescribed constraint is the scalar
+      product of the variable at the corresponding point with the corresponding
+      unit vector.
+      The optional data `dataname_val` is the vector of values to be prescribed
+      at the different points.
+      This brick is specifically designed to kill rigid displacement
+      in a Neumann problem.
+  */
+  size_type add_pointwise_constraints_with_penalization
+  (model &md, const std::string &varname,
+   scalar_type penalisation_coeff, const std::string &dataname_pt,
+   const std::string &dataname_unitv = std::string(),
+   const std::string &dataname_val = std::string());
+
+
+  /** Add some pointwise constraints on the variable `varname` using a given
+      multiplier `multname`.
+      The conditions are prescribed on a set of points given in the data
+      `dataname_pt` whose dimension is the number of points times the dimension
+      of the mesh.
+      The multiplier variable should be a fixed size variable of size the
+      number of points.
+      If the variable represents a vector field, the data
+      `dataname_unitv` represents a vector of dimension the number of points
+      times the dimension of the vector field which should store some
+      unit vectors. In that case the prescribed constraint is the scalar
+      product of the variable at the corresponding point with the corresponding
+      unit vector.
+      The optional data `dataname_val` is the vector of values to be prescribed
+      at the different points.
+      This brick is specifically designed to kill rigid displacement
+      in a Neumann problem.
+  */
+  size_type add_pointwise_constraints_with_given_multipliers
+  (model &md, const std::string &varname,
+   const std::string &multname, const std::string &dataname_pt,
+   const std::string &dataname_unitv = std::string(),
+   const std::string &dataname_val = std::string());
+
+  /** Add some pointwise constraints on the variable `varname` using
+      multiplier. The multiplier variable is automatically added to the model.
+      The conditions are prescribed on a set of points given in the data
+      `dataname_pt` whose dimension is the number of points times the dimension
+      of the mesh.
+      If the variable represents a vector field, the data
+      `dataname_unitv` represents a vector of dimension the number of points
+      times the dimension of the vector field which should store some
+      unit vectors. In that case the prescribed constraint is the scalar
+      product of the variable at the corresponding point with the corresponding
+      unit vector.
+      The optional data `dataname_val` is the vector of values to be prescribed
+      at the different points.
+      This brick is specifically designed to kill rigid displacement
+      in a Neumann problem.
+  */
+  size_type add_pointwise_constraints_with_multipliers
+  (model &md, const std::string &varname, const std::string &dataname_pt,
+   const std::string &dataname_unitv = std::string(),
+   const std::string &dataname_val = std::string());
+
+
   /** Change the penalization coefficient of a Dirichlet condition with
       penalization brick. If the brick is not of this kind,
       this function has an undefined behavior.
   */
   void change_penalization_coeff(model &md, size_type ind_brick,
-				 scalar_type penalisation_coeff); 
+                                 scalar_type penalisation_coeff);
 
   /** Add a generalized Dirichlet condition on the variable `varname` and
       the mesh region `region`. This version is for vector field.
       It prescribes a condition @f$ Hu = r @f$ where `H` is a matrix field.
       This region should be a boundary. The Dirichlet
       condition is prescribed with a multiplier variable `multname` which
-      should be first declared as a multiplier 
+      should be first declared as a multiplier
       variable on the mesh region in the model. `dataname` is the
       right hand side of  the Dirichlet condition. It could be constant or
       described on a fem; scalar or vector valued, depending on the variable
@@ -1031,9 +1273,9 @@ namespace getfem {
       complex, fem dependant or not.
   */
   size_type add_Helmholtz_brick(model &md, const mesh_im &mim,
-				const std::string &varname,
-				const std::string &dataname,
-				size_type region = size_type(-1));
+                                const std::string &varname,
+                                const std::string &dataname,
+                                size_type region = size_type(-1));
 
 
   /** Add a Fourier-Robin brick to the model. This correspond to the weak term
@@ -1046,9 +1288,27 @@ namespace getfem {
       side can be added with a source term brick.
   */
   size_type add_Fourier_Robin_brick(model &md, const mesh_im &mim,
-				    const std::string &varname,
-				    const std::string &dataname,
-				    size_type region);
+                                    const std::string &varname,
+                                    const std::string &dataname,
+                                    size_type region);
+
+
+  /** Add a brick representing a scalar term (@f$f(u)@f$) to the left-hand
+      side of the model. In the weak form, one adds (@f$ +\int f(u)v at f$). The
+      function $f$ may optionally depend on $\lambda$, i.e.,
+      $f(u) = f(u, \lambda)$.
+
+      `f` and `dfdu` should contain the expressions for $f(u)$ and
+      $\frac{df}{du}(u)$, respectively. `region` is an
+      optional mesh region on which the term is added. `dataname` represents
+      the optional real scalar parameter $\lambda$ in the model. Return the
+      brick index in the model.
+   */
+  size_type add_basic_nonlinear_brick
+  (model &md, const mesh_im &mim, const std::string &varname,
+   const std::string &f, const std::string &dfdu,
+   size_type region = size_type(-1),
+   const std::string &dataname = std::string());
 
   // Constraint brick.
   model_real_sparse_matrix &set_private_data_brick_real_matrix
@@ -1066,7 +1326,7 @@ namespace getfem {
 
   template <typename VECT, typename T>
   void set_private_data_rhs(model &md, size_type ind,
-				const VECT &L, T) {
+                                const VECT &L, T) {
     model_real_plain_vector &LL = set_private_data_brick_real_rhs(md, ind);
     gmm::resize(LL, gmm::vect_size(L));
     gmm::copy(L, LL);
@@ -1074,15 +1334,15 @@ namespace getfem {
 
   template <typename VECT, typename T>
   void set_private_data_rhs(model &md, size_type ind, const VECT &L,
-			   std::complex<T>) {
-    model_complex_plain_vector &LL = set_private_data_brick_complex_rhs(md, ind);
+                           std::complex<T>) {
+    model_complex_plain_vector &LL=set_private_data_brick_complex_rhs(md, ind);
     gmm::resize(LL, gmm::vect_size(L));
     gmm::copy(L, LL);
   }
 
   /** For some specific bricks having an internal right hand side vector
       (explicit bricks: 'constraint brick' and 'explicit rhs brick'),
-      set this rhs. 
+      set this rhs.
   */
   template <typename VECT>
   void set_private_data_rhs(model &md, size_type indbrick, const VECT &L) {
@@ -1092,7 +1352,7 @@ namespace getfem {
 
   template <typename MAT, typename T>
   void set_private_data_matrix(model &md, size_type ind,
-				   const MAT &B, T) {
+                                   const MAT &B, T) {
     model_real_sparse_matrix &BB = set_private_data_brick_real_matrix(md, ind);
     gmm::resize(BB, gmm::mat_nrows(B), gmm::mat_ncols(B));
     gmm::copy(B, BB);
@@ -1100,7 +1360,7 @@ namespace getfem {
 
   template <typename MAT, typename T>
   void set_private_data_matrix(model &md, size_type ind, const MAT &B,
-			      std::complex<T>) {
+                              std::complex<T>) {
     model_complex_sparse_matrix &BB
       = set_private_data_brick_complex_matrix(md, ind);
     gmm::resize(BB, gmm::mat_nrows(B), gmm::mat_ncols(B));
@@ -1112,7 +1372,7 @@ namespace getfem {
       set this matrix. @*/
   template <typename MAT>
   void set_private_data_matrix(model &md, size_type indbrick,
-				   const MAT &B) {
+                                   const MAT &B) {
     typedef typename gmm::linalg_traits<MAT>::value_type T;
     set_private_data_matrix(md, indbrick, B, T());
   }
@@ -1120,7 +1380,7 @@ namespace getfem {
   /** Add an additional explicit penalized constraint on the variable
       `varname`. The constraint is $BU=L$ with `B` being a rectangular
       sparse matrix.
-      Be aware that `B` should not contain a palin row, otherwise the whole
+      Be aware that `B` should not contain a plain row, otherwise the whole
       tangent matrix will be plain. It is possible to change the constraint
       at any time whith the methods set_private_matrix and set_private_rhs.
       The method change_penalization_coeff can also be used.
@@ -1156,13 +1416,13 @@ namespace getfem {
   }
 
   size_type add_explicit_matrix(model &md, const std::string &varname1,
-				const std::string &varname2,
-				bool issymmetric, bool iscoercive); 
+                                const std::string &varname2,
+                                bool issymmetric, bool iscoercive);
   size_type add_explicit_rhs(model &md, const std::string &varname);
-  
+
   /** Add a brick reprenting an explicit matrix to be added to the tangent
       linear system relatively to the variables 'varname1' and 'varname2'.
-      The given matrix should have has many rows as the dimension of
+      The given matrix should have as many rows as the dimension of
       'varname1' and as many columns as the dimension of 'varname2'.
       If the two variables are different and if `issymmetric' is set to true
       then the transpose of the matrix is also added to the tangent system
@@ -1172,11 +1432,11 @@ namespace getfem {
   */
   template <typename MAT>
   size_type add_explicit_matrix(model &md, const std::string &varname1,
-				const std::string &varname2, const MAT &B,
-				bool issymmetric = false,
-				bool iscoercive = false) {
+                                const std::string &varname2, const MAT &B,
+                                bool issymmetric = false,
+                                bool iscoercive = false) {
     size_type ind = add_explicit_matrix(md, varname1, varname2,
-					issymmetric, iscoercive);
+                                        issymmetric, iscoercive);
     set_private_data_matrix(md, ind, B);
     return ind;
   }
@@ -1186,18 +1446,18 @@ namespace getfem {
        linear system relatively to the variable 'varname'.
        The given rhs should have the same size than the dimension of
        'varname'. The rhs can be changed by the command set_private_rhs.
-  */  
+  */
   template <typename VECT>
   size_type add_explicit_rhs(model &md, const std::string &varname,
-			     const VECT &L) {
+                             const VECT &L) {
     size_type ind = add_explicit_rhs(md, varname);
     set_private_data_rhs(md, ind, L);
     return ind;
   }
-  
+
 
   /** Linear elasticity brick ( @f$ \int \sigma(u):\varepsilon(v) @f$ ).
-      for isotropic material. Parametrized by the lamé coefficients
+      for isotropic material. Parametrized by the Lamé coefficients
       lambda and mu.
   */
   size_type add_isotropic_linearized_elasticity_brick
@@ -1211,7 +1471,7 @@ namespace getfem {
   (model &md, const std::string &varname, const std::string &dataname_lambda,
    const std::string &dataname_mu, const mesh_fem &mf_vm,
    model_real_plain_vector &VM, bool tresca);
-    
+
   /**
      Compute the Von-Mises stress or the Tresca stress of a field
      (only valid for isotropic linearized elasticity in 3D)
@@ -1232,7 +1492,7 @@ namespace getfem {
 
      Update the tangent matrix with a pressure term:
      @f[
-     T \longrightarrow 
+     T \longrightarrow
      \begin{array}{ll} T & B \\ B^t & M \end{array}
      @f]
      with @f$ B = - \int p.div u @f$ and
@@ -1242,7 +1502,7 @@ namespace getfem {
      Be aware that an inf-sup condition between the finite element method
      describing the rpressure and the primal variable has to be satisfied.
 
-     For nearly incompressible elasticity, 
+     For nearly incompressible elasticity,
      @f[ p = -\lambda \textrm{div}~u @f]
      @f[ \sigma = 2 \mu \varepsilon(u) -p I @f]
      @see asm_stokes_B
@@ -1265,7 +1525,7 @@ namespace getfem {
       Add the standard discretization of a first order time derivative. The
       parameter $rho$ is the density which could be omitted (the defaul value
       is 1). This brick should be used in addition to a time dispatcher for the
-      other terms. 
+      other terms.
   */
   size_type add_basic_d_on_dt_brick
   (model &md, const mesh_im &mim, const std::string &varname,
diff --git a/src/getfem/getfem_nonlinear_elasticity.h b/src/getfem/getfem_nonlinear_elasticity.h
index e67fdf1..157ec16 100644
--- a/src/getfem/getfem_nonlinear_elasticity.h
+++ b/src/getfem/getfem_nonlinear_elasticity.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard, Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_nonlinear_elasticity.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>,
@@ -52,7 +53,8 @@ namespace getfem {
   /** Base class for material law. 
       Inherit from this class to define a new law.
   */
-  struct abstract_hyperelastic_law {
+  class abstract_hyperelastic_law {
+  public:
     mutable int uvflag;
     size_type nb_params_;
     getfem::abstract_hyperelastic_law *pl; /* optional reference */
@@ -64,12 +66,28 @@ namespace getfem {
                                                         // default assembly
     
     virtual scalar_type strain_energy(const base_matrix &E,
-				      const base_vector &params) const = 0;
+				      const base_vector &params,
+				      scalar_type det_trans) const = 0;
+	/**True Cauchy stress (for Updated Lagrangian formulation)*/
+	virtual void cauchy_updated_lagrangian(const base_matrix& F, 
+			const base_matrix &E, 
+			base_matrix &cauchy_stress,
+			const base_vector &params,
+			scalar_type det_trans) const;
     virtual void sigma(const base_matrix &E, base_matrix &result,
-		       const base_vector &params) const = 0;
+		       const base_vector &params,
+		       scalar_type det_trans) const = 0;
     // the result of grad_sigma has to be completely symmetric.
     virtual void grad_sigma(const base_matrix &E, base_tensor &result, 
-			    const base_vector &params) const = 0;
+		 const base_vector &params, scalar_type det_trans) const = 0;
+
+	/**cauchy-truesdel tangent moduli, used in updated lagrangian*/
+	virtual void grad_sigma_updated_lagrangian(const base_matrix& F, 
+			const base_matrix& E,
+			const base_vector &params,
+			scalar_type det_trans,
+			base_tensor &grad_sigma_ul)const;
+
     size_type nb_params(void) const { return nb_params_; }
     abstract_hyperelastic_law() { nb_params_ = 0; pl = 0; }
     virtual ~abstract_hyperelastic_law() {}
@@ -87,12 +105,18 @@ namespace getfem {
     public abstract_hyperelastic_law {
     /* W = lambda*0.5*trace(E)^2 + mu*tr(E^2) */
     virtual scalar_type strain_energy(const base_matrix &E,
-				      const base_vector &params) const;
+				      const base_vector &params,
+				      scalar_type det_trans) const;
     /* sigma = lambda*trace(E) + 2 mu * E */
     virtual void sigma(const base_matrix &E, base_matrix &result,
-		       const base_vector &params) const;
+		       const base_vector &params, scalar_type det_trans) const;
     virtual void grad_sigma(const base_matrix &E, base_tensor &result,
-			    const base_vector &params) const;
+		      const base_vector &params, scalar_type det_trans) const;
+	virtual void grad_sigma_updated_lagrangian(const base_matrix& F, 
+				const base_matrix& E,
+				const base_vector &params,
+				scalar_type det_trans,
+				base_tensor &grad_sigma_ul)const;
     SaintVenant_Kirchhoff_hyperelastic_law(void);
   };
 
@@ -105,11 +129,12 @@ namespace getfem {
   struct membrane_elastic_law : 
     public abstract_hyperelastic_law {
     virtual scalar_type strain_energy(const base_matrix &E,
-				      const base_vector &params) const;
+				      const base_vector &params,
+				      scalar_type det_trans) const;
     virtual void sigma(const base_matrix &E, base_matrix &result,
-		       const base_vector &params) const;
+		       const base_vector &params, scalar_type det_trans) const;
     virtual void grad_sigma(const base_matrix &E, base_tensor &result,
-			    const base_vector &params) const;
+		       const base_vector &params, scalar_type det_trans) const;
     membrane_elastic_law(void) { nb_params_ = 6; }
   };
 
@@ -120,38 +145,54 @@ namespace getfem {
   */
   struct Mooney_Rivlin_hyperelastic_law : public abstract_hyperelastic_law {
     virtual scalar_type strain_energy(const base_matrix &E,
-				      const base_vector &params) const;
+				      const base_vector &params, scalar_type det_trans) const;
     virtual void sigma(const base_matrix &E, base_matrix &result,
-		       const base_vector &params) const;
+		       const base_vector &params, scalar_type det_trans) const;
     virtual void grad_sigma(const base_matrix &E, base_tensor &result,
-			    const base_vector &params) const;
+			    const base_vector &params, scalar_type det_trans) const;
     Mooney_Rivlin_hyperelastic_law(void);
   };
 
+
+  /** Blatz_Ko hyperelastic law 
+      
+      To be used for compressible problems.
+  */
+  struct generalized_Blatz_Ko_hyperelastic_law : public abstract_hyperelastic_law {
+    virtual scalar_type strain_energy(const base_matrix &E,
+				      const base_vector &params, scalar_type det_trans) const;
+    virtual void sigma(const base_matrix &E, base_matrix &result,
+		       const base_vector &params, scalar_type det_trans) const;
+    virtual void grad_sigma(const base_matrix &E, base_tensor &result,
+			    const base_vector &params, scalar_type det_trans) const;
+    generalized_Blatz_Ko_hyperelastic_law(void);
+  };
+
+
   /** Ciarlet-Geymonat hyperelastic law ( @f$ W=~_1i_1(L) + \frac{~}{2}i_2(L) + 8ci_3(L) - \frac{~_1}{2} \textrm{log}~\textrm{det}~C @f$ )
       
    */
   struct Ciarlet_Geymonat_hyperelastic_law : public abstract_hyperelastic_law {
     // parameters are lambda=params[0], mu=params[1], gamma'(1)=params[2]
-    // The parameters gamma'(1) has to verify gamma'(1) in ]-lambda/2-mu, -mu[
+    // The parameter gamma'(1) has to verify gamma'(1) in ]max{-lambda/2-mu, -2mu}, -mu[
     virtual scalar_type strain_energy(const base_matrix &E,
-				      const base_vector &params) const;
+				      const base_vector &params, scalar_type det_trans) const;
     virtual void sigma(const base_matrix &E, base_matrix &result,
-		       const base_vector &params) const;
+		       const base_vector &params, scalar_type det_trans) const;
     virtual void grad_sigma(const base_matrix &E, base_tensor &result,
-			    const base_vector &params) const;
+			    const base_vector &params, scalar_type det_trans) const;
     Ciarlet_Geymonat_hyperelastic_law(void) { nb_params_ = 3; }
   };
 
-  /** Plane strain hyperelastic law (take another law as a parameter)
+  /** Plane strain hyperelastic law (takes another law as a parameter)
    */
   struct plane_strain_hyperelastic_law : public abstract_hyperelastic_law {
     virtual scalar_type strain_energy(const base_matrix &E,
-				      const base_vector &params) const;
+				      const base_vector &params, scalar_type det_trans) const;
     virtual void sigma(const base_matrix &E, base_matrix &result,
-		       const base_vector &params) const;
+		       const base_vector &params, scalar_type det_trans) const;
     virtual void grad_sigma(const base_matrix &E, base_tensor &result,
-			    const base_vector &params) const;
+			    const base_vector &params, scalar_type det_trans) const;
     plane_strain_hyperelastic_law(getfem::abstract_hyperelastic_law *pl_)
     { pl = pl_; nb_params_ = pl->nb_params(); }
   };
@@ -220,15 +261,17 @@ namespace getfem {
 	E(alpha, alpha) -= scalar_type(1);
       gmm::scale(E, scalar_type(0.5));
 
+      scalar_type det_trans = gmm::lu_det(gradU);
+
       if (version == 2) {
-	t[0] = AHL.strain_energy(E, params);
+	t[0] = AHL.strain_energy(E, params, det_trans);
 	return;
       }
 
-      AHL.sigma(E, Sigma, params);
+      AHL.sigma(E, Sigma, params, det_trans);
 
       if (version == 0) {	  
-	AHL.grad_sigma(E, tt, params);	
+	AHL.grad_sigma(E, tt, params, det_trans);	
 	for (size_type n = 0; n < NFem; ++n)
 	  for (size_type m = 0; m < N; ++m)
 	    for (size_type l = 0; l < N; ++l)
@@ -241,8 +284,7 @@ namespace getfem {
 		t(n, m, k, l) = aux;
 	      }
       } else {
-        if (gmm::lu_det(gradU) < 0) AHL.inc_unvalid_flag();
-
+        if (det_trans < scalar_type(0)) AHL.inc_unvalid_flag();
 	for (size_type i = 0; i < NFem; ++i)
 	  for (size_type j = 0; j < N; ++j) {
 	    scalar_type aux(0);
@@ -543,6 +585,15 @@ namespace getfem {
    const std::string &dataname, const mesh_fem &mf_vm,
    model_real_plain_vector &VM, bool tresca);
 
+
+  void compute_sigmahathat(model &md,
+			   const std::string &varname, 
+			   const abstract_hyperelastic_law &AHL,
+			   const std::string &dataname,
+			   const mesh_fem &mf_sigma,
+			   model_real_plain_vector &SIGMA);
+
+
   /**
      Compute the Von-Mises stress or the Tresca stress of a field
      with respect to the constitutive elasticity law AHL (only valid in 3D).
@@ -683,7 +734,7 @@ namespace getfem {
 	  gmm::add(gmm::scaled(Id, -scalar_type(1)), E);
 	  gmm::scale(E, scalar_type(1)/scalar_type(2));
 	  gmm::copy(gmm::sub_vector(PARAMS, gmm::sub_interval(i*NP,NP)), p);
-	  AHL.sigma(E, sigmahathat, p);
+	  AHL.sigma(E, sigmahathat, p, scalar_type(1));
 	  if (NFem == 3 && N == 2) {
 	    //jyh : compute ez, normal on deformed surface
 	    for (unsigned int l = 0; l <NFem; ++l)  {
diff --git a/src/getfem/getfem_norm.h b/src/getfem/getfem_norm.h
index ecab73c..67341e8 100644
--- a/src/getfem/getfem_norm.h
+++ b/src/getfem/getfem_norm.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 #ifndef GETFEM_NORM_H__
 #define GETFEM_NORM_H__
diff --git a/src/getfem/getfem_partial_mesh_fem.h b/src/getfem/getfem_partial_mesh_fem.h
index afcfc09..eda31af 100644
--- a/src/getfem/getfem_partial_mesh_fem.h
+++ b/src/getfem/getfem_partial_mesh_fem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_partial_mesh_fem.h
    @author Yves Renard <Yves.Renard at insa-lyon.fr>,
@@ -46,7 +47,7 @@
 #include "getfem_mesh_im.h"
 
 
-// a ajuster : mesh, qdim, qdim_mn, 
+// a ajuster : mesh, qdim, qdim_mn,
 
 
 namespace getfem {
@@ -55,7 +56,7 @@ namespace getfem {
      of the original mesh_fem.
   */
   class partial_mesh_fem : public mesh_fem, public boost::noncopyable,
-			   public dal::static_stored_object {
+                           public dal::static_stored_object {
   protected :
     const mesh_fem &mf;
     mutable bool is_adapted;
@@ -65,9 +66,9 @@ namespace getfem {
     { mf.context_check(); is_adapted = false; }
 
     /** build the mesh_fem keeping only the dof of the original
-	mesh_fem which are listed in kept_dof. */
+        mesh_fem which are listed in kept_dof. */
     void adapt(const dal::bit_vector &kept_dof,
-	       const dal::bit_vector &rejected_elt = dal::bit_vector());
+               const dal::bit_vector &rejected_elt = dal::bit_vector());
     void clear(void);
 
     pfem fem_of_element(size_type cv) const
@@ -76,13 +77,13 @@ namespace getfem {
     virtual dim_type get_qdim() const { return  mf.get_qdim(); }
 
     virtual void set_qdim(dim_type) {
-      GMM_ASSERT1(false, "The Qdim of a partial_mesh_fem is the same than "
-		  "the original fem"); 
+      GMM_ASSERT1(false, "The Qdim of a partial_mesh_fem is the same as "
+                  "the original fem");
     }
 
     virtual void set_qdim_mn(dim_type, dim_type) {
-      GMM_ASSERT1(false, "The Qdim of a partial_mesh_fem is the same than "
-		  "the original fem"); 
+      GMM_ASSERT1(false, "The Qdim of a partial_mesh_fem is the same as "
+                  "the original fem");
     }
 
     ind_dof_ct ind_basic_dof_of_element(size_type cv) const
@@ -94,7 +95,7 @@ namespace getfem {
 
     size_type nb_basic_dof_of_face_of_element(size_type cv, short_type f) const
     { return  mf.nb_basic_dof_of_face_of_element(cv, f); }
-    
+
     size_type nb_basic_dof_of_element(size_type cv) const
     { return  mf.nb_basic_dof_of_element(cv); }
 
@@ -115,7 +116,7 @@ namespace getfem {
 
     size_type nb_dof(void) const {
       context_check();
-      return use_reduction ? gmm::mat_nrows(R_) : mf.nb_dof(); 
+      return use_reduction ? gmm::mat_nrows(R_) : mf.nb_dof();
     }
 
     size_type nb_basic_dof(void) const
@@ -123,9 +124,9 @@ namespace getfem {
 
     dal::bit_vector basic_dof_on_region(const mesh_region &b) const
     { return mf.basic_dof_on_region(b); }
-    
+
     void read_from_file(std::istream &)
-    { GMM_ASSERT1(false, "You cannot directely read this kind of mesh_fem"); }
+    { GMM_ASSERT1(false, "You cannot directly read this kind of mesh_fem"); }
     void write_to_file(std::ostream &ost) const;
     void write_to_file(const std::string &name, bool with_mesh=false) const;
 
@@ -148,10 +149,10 @@ namespace getfem {
      A more efficient algorithm is now present in gmm_range_basis.h
    */
   dal::bit_vector select_dofs_from_im(const mesh_fem &mf, const mesh_im &mim,
-				      unsigned P = unsigned(-1));
-  
-  
+                                      unsigned P = unsigned(-1));
+
+
 }  /* end of namespace getfem.                                            */
 
 #endif
-  
+
diff --git a/src/getfem/getfem_plasticity.h b/src/getfem/getfem_plasticity.h
index 83f428d..d2a91ad 100644
--- a/src/getfem/getfem_plasticity.h
+++ b/src/getfem/getfem_plasticity.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2010 Amandine Cottaz, Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Amandine Cottaz, Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_plasticity.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>,
diff --git a/src/getfem/getfem_projected_fem.h b/src/getfem/getfem_projected_fem.h
new file mode 100644
index 0000000..2b63a05
--- /dev/null
+++ b/src/getfem/getfem_projected_fem.h
@@ -0,0 +1,183 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2012-2012 Yves Renard, Konstantinos Poulios
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+/**@file getfem_projected_fem.h
+   @author Konstantinos Poulios <logari81 at googlemail.com>
+   @date January 12, 2012.
+   @brief FEM which projects a mesh_fem on a different mesh.
+*/
+
+
+#ifndef GETFEM_PROJECTED_FEM_H__
+#define GETFEM_PROJECTED_FEM_H__
+
+#include "getfem_fem.h"
+#include "getfem_mesh_fem.h"
+#include "getfem_mesh_im.h"
+#include "bgeot_kdtree.h"
+#include "bgeot_geotrans_inv.h"
+
+namespace getfem {
+
+  struct gausspt_projection_data {
+    size_type cv; // convex of the source mesh_fem opposite to the gauss point
+    short_type f; // convex face of the source mesh_fem opposite to the gauss point
+    size_type iflags;     // flags & 1 : there is an element or not
+                          // flags & 2 : base_val is stored
+                          // flags & 4 : grad_val is stored
+    base_node ptref;      // coords on reference element of mf_source element
+    base_node normal;     // normal vector at the projected point on the mf_source element
+    scalar_type gap;      // gap distance from the gauss point to the projected point
+    base_tensor base_val; // optional storage of the base values
+    base_tensor grad_val; // optional storage of the grad base values
+    std::map<size_type,size_type> local_dof; // correspondance between dof of the
+                                             // mf_source element and dof of the projected element.
+    gausspt_projection_data() :
+      cv(size_type(-1)), f(short_type(-1)), iflags(size_type(-1)) {}
+  };
+
+  /** FEM which interpolates the projection of a mesh_fem on a different mesh.
+
+    Note that the memory cost of this method is extremely high!
+  */
+  class projected_fem : public virtual_fem, public context_dependencies {
+
+  protected :
+
+    struct elt_projection_data {
+      short_type f;    // face number on the target mesh
+      size_type nb_dof;
+      std::map<size_type,gausspt_projection_data> gausspt;
+      std::vector<size_type> inddof;
+      pintegration_method pim; // for DEBUG
+      elt_projection_data() : f(-1), nb_dof(0), pim(0) {}
+    };
+
+    const mesh_fem &mf_source; // mf_source represents the original finite
+                               // element method to be projected.
+    const mesh_im &mim_target; // mesh on which mf_source is projected.
+                               // Contains also the integration method.
+    mesh_region rg_source;
+    mesh_region rg_target;
+
+    bool store_values;
+    dal::bit_vector blocked_dofs;
+
+    // auxiliary variables
+    mutable std::map<size_type,elt_projection_data> elements;
+    mutable bgeot::kdtree tree; // Tree containing the nodes of the
+                                // projected mf_source dofs
+    mutable std::vector<size_type> ind_dof; /* all functions using this work
+                                               array should keep it full of
+                                               size_type(-1) */
+    mutable bgeot::geotrans_inv_convex gic;
+    mutable base_tensor taux;
+    mutable fem_interpolation_context fictx;
+    mutable size_type fictx_cv;
+    mutable base_matrix G;
+    mutable std::vector<base_node> node_tab_;
+    mutable bgeot::multi_index mi2, mi3;
+    mutable base_node ptref;
+
+    void build_kdtree(void) const;
+
+    bool find_a_projected_point(base_node pt, base_node &ptr_proj,
+                                size_type &cv_proj, short_type &fc_proj) const;
+
+    void update_from_context(void) const;
+    inline void actualize_fictx(pfem pf, size_type cv,
+                                const base_node &ptr) const;
+
+  public :
+
+    virtual size_type nb_dof(size_type cv) const;
+    virtual size_type index_of_global_dof(size_type cv, size_type i) const;
+    virtual bgeot::pconvex_ref ref_convex(size_type cv) const;
+    virtual const bgeot::convex<base_node> &node_convex(size_type cv) const;
+    virtual bgeot::pstored_point_tab node_tab(size_type) const;
+    void base_value(const base_node &, base_tensor &) const;
+    void grad_base_value(const base_node &, base_tensor &) const;
+    void hess_base_value(const base_node &, base_tensor &) const;
+    void real_base_value(const fem_interpolation_context& c,
+                         base_tensor &t, bool = true) const;
+    void real_grad_base_value(const fem_interpolation_context& c,
+                              base_tensor &t, bool = true) const;
+    void real_hess_base_value(const fem_interpolation_context&,
+                              base_tensor &, bool = true) const;
+
+    void projection_data(const fem_interpolation_context& c,
+                         base_node &normal, scalar_type &gap) const;
+
+    /** return the list of convexes of the projected mesh_fem which
+     *  contain at least one gauss point (should be all convexes)! */
+    dal::bit_vector projected_convexes() const;
+
+    /** return the min/max/mean number of gauss points in the convexes
+     *  of the projected mesh_fem */
+    void gauss_pts_stats(unsigned &ming, unsigned &maxg,
+                         scalar_type &meang) const;
+    size_type memsize() const;
+  private:
+
+    projected_fem(const mesh_fem &mf_source_, const mesh_im &mim_target_,
+                  size_type rg_source_, size_type rg_target_,
+                  dal::bit_vector blocked_dofs_,
+                  bool store_val = true);
+
+    friend pfem new_projected_fem(const mesh_fem &mf_source_,
+                                  const mesh_im &mim_target_,
+                                  size_type rg_source_,
+                                  size_type rg_target_,
+                                  dal::bit_vector blocked_dofs_,
+                                  bool store_val);
+  };
+
+
+  /** create a new projected FEM.
+      @param mf_source the mesh_fem that will be projected.
+      @param mim_target the integration method on the final mesh (not the mesh
+             of mf_source!).
+      @param blocked_dofs list of dof of mf_source which won't be projected.
+      @param store_val if true, the values/gradients of interpolated base
+             function are cached at each gauss point (eats much memory).
+  */
+  pfem new_projected_fem(const mesh_fem &mf_source, const mesh_im &mim_target,
+                         size_type rg_source_ = size_type(-1),
+                         size_type rg_target_ = size_type(-1),
+                         dal::bit_vector blocked_dofs = dal::bit_vector(),
+                         bool store_val = true);
+
+  /** release a projected fem */
+  inline void del_projected_fem(pfem pf) { dal::del_stored_object(pf); }
+
+
+}  /* end of namespace getfem.                                            */
+
+#endif
diff --git a/src/getfem/getfem_regular_meshes.h b/src/getfem/getfem_regular_meshes.h
index 45be561..f3b2642 100644
--- a/src/getfem/getfem_regular_meshes.h
+++ b/src/getfem/getfem_regular_meshes.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_regular_meshes.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_spider_fem.h b/src/getfem/getfem_spider_fem.h
index e5f4c51..34f4d2d 100644
--- a/src/getfem/getfem_spider_fem.h
+++ b/src/getfem/getfem_spider_fem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_spider_fem.h
    @author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_superlu.h b/src/getfem/getfem_superlu.h
index 63e786a..5377430 100644
--- a/src/getfem/getfem_superlu.h
+++ b/src/getfem/getfem_superlu.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file getfem_superlu.h
    @author  Julien Pommier <Julien.Pommier at insa-toulouse.fr>
@@ -49,7 +50,7 @@
 namespace gmm {
 
   template<typename T>
-  void SuperLU_solve(const gmm::csc_matrix<T> &A, T *X_, T *B, double& rcond_, int permc_spec = 3);
+  int SuperLU_solve(const gmm::csc_matrix<T> &A, T *X_, T *B, double& rcond_, int permc_spec = 3);
   /** solve a sparse linear system AX=B (float, double, complex<float>
       or complex<double>) via SuperLU.
 
@@ -60,7 +61,7 @@ namespace gmm {
       @param permc_spec specify the kind of renumbering than SuperLU should do.
   */
   template<typename MAT, typename V1, typename V2>
-  void SuperLU_solve(const MAT &A, const V1& X, const V2& B, double& rcond_, int permc_spec = 3) {
+  int SuperLU_solve(const MAT &A, const V1& X, const V2& B, double& rcond_, int permc_spec = 3) {
     typedef typename gmm::linalg_traits<MAT>::value_type T;
     
     int m = int(mat_nrows(A)), n = int(mat_ncols(A));
@@ -69,11 +70,12 @@ namespace gmm {
     std::vector<T> rhs(m), sol(m);
     gmm::copy(B, rhs);
     
-    SuperLU_solve(csc_A, &sol[0], &rhs[0], rcond_, permc_spec);
+    int info = SuperLU_solve(csc_A, &sol[0], &rhs[0], rcond_, permc_spec);
     gmm::copy(sol, const_cast<V1 &>(X));
+    return info;
   }
   
-  class SuperLU_factor_impl_common;
+  struct SuperLU_factor_impl_common;
 
   /** Factorization of a sparse matrix with SuperLU.
       
diff --git a/src/getfem_Coulomb_friction.cc b/src/getfem_Coulomb_friction.cc
deleted file mode 100644
index 68ec345..0000000
--- a/src/getfem_Coulomb_friction.cc
+++ /dev/null
@@ -1,1679 +0,0 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2010 Yves Renard, Konstantinos Poulios.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
-
-
-#include "getfem/getfem_Coulomb_friction.h"
-
-#include <getfem/getfem_arch_config.h>
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
-#include <muParser/muParser.h>
-#elif GETFEM_HAVE_MUPARSER_H
-#include <muParser.h>
-#endif
-
-#ifdef GETFEM_HAVE_QHULL_QHULL_H
-#include <getfem/getfem_mesher.h>
-#else
-#include <getfem/bgeot_kdtree.h>
-#endif
-
-namespace getfem {
-
-  typedef bgeot::convex<base_node>::ref_convex_pt_ct ref_convex_pt_ct;
-  typedef bgeot::convex<base_node>::dref_convex_pt_ct dref_convex_pt_ct;
-  typedef bgeot::basic_mesh::ref_mesh_face_pt_ct ref_mesh_face_pt_ct;
-
-  //=========================================================================
-  //
-  //  Projection on a ball and gradient of the projection.
-  //
-  //=========================================================================
-
-  template<typename VEC> static void ball_projection(const VEC &x,
-                                                     scalar_type radius) {
-    scalar_type a = gmm::vect_norm2(x);
-    if (radius <= 0) gmm::clear(const_cast<VEC&>(x));
-    else if (a > radius) gmm::scale(const_cast<VEC&>(x), radius/a); 
-  }
-  
-  template<class VEC, class VECR>
-  static void ball_projection_grad_r(const VEC &x, scalar_type radius,
-                                     VECR &g) {
-    scalar_type a = gmm::vect_norm2(x);
-    if (radius > 0 && a >= radius)
-      gmm::copy(gmm::scaled(x, scalar_type(1)/a), g);
-    else gmm::clear(g);
-  }
-  
-  template <class VEC, class MAT>
-  static void ball_projection_grad(const VEC &x, double radius, MAT &g) {
-    if (radius <= scalar_type(0)) { gmm::clear(g); return; }
-    gmm::copy(gmm::identity_matrix(), g);
-    scalar_type a = gmm::vect_norm2(x);
-    if (a >= radius) { 
-      gmm::scale(g, radius/a);
-      // gmm::rank_one_update(g, gmm::scaled(x, -radius/(a*a*a)), x);
-      for (size_type i = 0; i < x.size(); ++i)
-        for (size_type j = 0; j < x.size(); ++j)
-          g(i,j) -= radius*x[i]*x[j] / (a*a*a);
-    }
-  }
-
-  // Computation of an orthonormal basis to a unit vector.
-  static void orthonormal_basis_to_unit_vec(size_type d, const base_node &un,
-                                            base_node *ut) {
-    size_type n = 0;
-    for (size_type k = 0; k <= d && n < d; ++k) {
-      gmm::resize(ut[n], d+1);
-      gmm::clear(ut[n]);
-      ut[n][k] = scalar_type(1);
-
-      ut[n] -= gmm::vect_sp(un, ut[n]) * un;
-      for (size_type nn = 0; nn < n; ++nn)
-        ut[n] -= gmm::vect_sp(ut[nn], ut[n]) * ut[nn];
-
-      if (gmm::vect_norm2(ut[n]) < 1e-3) continue;
-      ut[n] /= gmm::vect_norm2(ut[n]);
-      ++n;
-    }
-    GMM_ASSERT1(n == d, "Gram-Schmidt algorithm to find an "
-      "orthonormal basis for the tangential displacement failed");
-  }
-
-  // "contact_node" is an object which contains data about nodes expected
-  // to participate in a contact condition. A contact node refers to a
-  // specific mesh_fem.
-  struct contact_node {
-    const mesh_fem *mf;          // Pointer to the mesh_fem the contact node is
-                                 // associated with
-    size_type dof;               // first dof id of the node in the considered mesh_fem
-    std::vector<size_type> cvs;  // list of ids of neigbouring convexes
-    std::vector<short_type> fcs; // list of local ids of neigbouring faces
-
-    contact_node() : mf(0), cvs(0), fcs(0) {}
-    contact_node(const mesh_fem &mf_) {mf = &mf_;}
-  };
-
-  // contact_node's pair
-  struct contact_node_pair {
-    contact_node cn_s, cn_m;  // Slave and master contact_node's
-    scalar_type dist2;        // Square of distance between slave and master nodes
-    bool is_active;
-    contact_node_pair(scalar_type threshold=10.) : cn_s(), cn_m()
-      {dist2 = threshold * threshold; is_active = false;}
-  };
-
-  // contact_node's pair list
-  class contact_node_pair_list : public std::vector<contact_node_pair> {
-
-    void contact_node_list_from_region
-      (const mesh_fem &mf, size_type contact_region,
-       std::vector<contact_node> &cnl) {
-
-      cnl.clear();
-      const mesh &m = mf.linked_mesh();
-      size_type qdim = mf.get_qdim();
-      std::map<size_type, size_type> dof_to_cnid;
-      size_type cnid = 0;
-      dal::bit_vector dofs = mf.basic_dof_on_region(contact_region);
-      for (dal::bv_visitor dof(dofs); !dof.finished(); ++dof)
-        if ( dof % qdim == 0) {
-          dof_to_cnid[dof] = cnid++;
-          contact_node new_cn(mf);
-          new_cn.dof = dof;
-          cnl.push_back(new_cn);
-        }
-      for (mr_visitor face(m.region(contact_region));
-           !face.finished(); ++face) {
-        assert(face.is_face());
-        mesh_fem::ind_dof_face_ct
-          face_dofs = mf.ind_basic_dof_of_face_of_element(face.cv(),face.f());
-        for (size_type it=0; it < face_dofs.size(); it += qdim ) {
-          size_type dof = face_dofs[it];
-          cnid = dof_to_cnid[dof];
-          cnl[cnid].cvs.push_back(face.cv());
-          cnl[cnid].fcs.push_back(face.f());
-        } // for:it
-      } // for:face
-    } // append
-
-  public:
-    contact_node_pair_list() : std::vector<contact_node_pair>() {}
-
-    void append_min_dist_cn_pairs(const mesh_fem &mf1, const mesh_fem &mf2,
-                                  size_type rg1, size_type rg2,
-                                  bool slave1=true, bool slave2=false) {
-
-      std::vector<contact_node> cnl1(0), cnl2(0);
-      contact_node_list_from_region(mf1, rg1, cnl1);
-      contact_node_list_from_region(mf2, rg2, cnl2);
-
-      // Find minimum distance node pairs
-      size_type size0 = this->size();
-      size_type size1 = slave1 ? cnl1.size() : 0;
-      size_type size2 = slave2 ? cnl2.size() : 0;
-      this->resize( size0 + size1 + size2 );
-# ifndef GETFEM_HAVE_QHULL_QHULL_H
-      bgeot::kdtree tree1, tree2;
-      for (size_type i1 = 0; i1 < cnl1.size(); ++i1) {
-        contact_node *cn1 = &cnl1[i1];
-        tree1.add_point_with_id(cn1->mf->point_of_basic_dof(cn1->dof), i1);
-      }
-      for (size_type i2 = 0; i2 < cnl2.size(); ++i2) {
-        contact_node *cn2 = &cnl2[i2];
-        tree2.add_point_with_id(cn2->mf->point_of_basic_dof(cn2->dof), i2);
-      }
-      if (slave1) {
-        size_type ii1=size0;
-        for (size_type i1 = 0; i1 < cnl1.size(); ++i1, ++ii1) {
-          contact_node *cn1 = &cnl1[i1];
-          base_node node1 = cn1->mf->point_of_basic_dof(cn1->dof);
-          bgeot::index_node_pair ipt;
-          scalar_type dist2 = tree2.nearest_neighbor(ipt, node1);
-          if (ipt.i > 0 && dist2 < (*this)[ii1].dist2) {
-            (*this)[ii1].cn_s = *cn1;
-            (*this)[ii1].cn_m = cnl2[ipt.i];
-            (*this)[ii1].dist2 = dist2;
-            (*this)[ii1].is_active = true;
-          }
-        }
-      }
-      if (slave2) {
-        size_type ii2=size0+size1;
-        for (size_type i2 = 0; i2 < cnl2.size(); ++i2, ++ii2) {
-          contact_node *cn2 = &cnl2[i2];
-          base_node node2 = cn2->mf->point_of_basic_dof(cn2->dof);
-          bgeot::index_node_pair ipt;
-          scalar_type dist2 = tree1.nearest_neighbor(ipt, node2);
-          if (ipt.i > 0 && dist2 < (*this)[ii2].dist2) {
-            (*this)[ii2].cn_s = *cn2;
-            (*this)[ii2].cn_m = cnl1[ipt.i];
-            (*this)[ii2].dist2 = dist2;
-            (*this)[ii2].is_active = true;
-          }
-        }
-      }
-# else
-      std::vector<base_node> pts;
-      for (size_type i1 = 0; i1 < cnl1.size(); ++i1) {
-        contact_node *cn1 = &cnl1[i1];
-        pts.push_back(cn1->mf->point_of_basic_dof(cn1->dof));
-      }
-      for (size_type i2 = 0; i2 < cnl2.size(); ++i2) {
-        contact_node *cn2 = &cnl2[i2];
-        pts.push_back(cn2->mf->point_of_basic_dof(cn2->dof));
-      }
-      gmm::dense_matrix<size_type> simplexes;
-
-      getfem::delaunay(pts, simplexes);
-
-      size_type nb_vertices = gmm::mat_nrows(simplexes);
-      std::vector<size_type> facet_vertices(nb_vertices);
-      std::vector< std::vector<size_type> > pt1_neighbours(size1);
-      for (size_type i = 0; i < gmm::mat_ncols(simplexes); ++i) {
-        gmm::copy(gmm::mat_col(simplexes, i), facet_vertices);
-        for (size_type iv1 = 0; iv1 < nb_vertices-1; ++iv1) {
-          size_type v1 = facet_vertices[iv1];
-          bool v1_on_surface1 = (v1 < size1);
-          for (size_type iv2 = iv1 + 1; iv2 < nb_vertices; ++iv2) {
-            size_type v2 = facet_vertices[iv2];
-            bool v2_on_surface1 = (v2 < size1);
-            if (v1_on_surface1 xor v2_on_surface1) {
-              bool already_in = false;
-              size_type vv1 = (v1_on_surface1 ? v1 : v2);
-              size_type vv2 = (v2_on_surface1 ? v1 : v2);
-              for (size_type j = 0; j < pt1_neighbours[vv1].size(); ++j)
-                if (pt1_neighbours[vv1][j] == vv2) {
-                  already_in = true;
-                  break;
-                }
-              if (!already_in) pt1_neighbours[vv1].push_back(vv2);
-            }
-          }
-        }
-      }
-
-      for (size_type i1 = 0; i1 < size1; ++i1)
-        for (size_type j = 0; j < pt1_neighbours[i1].size(); ++j) {
-          size_type i2 = pt1_neighbours[i1][j] - size1;
-          size_type ii1 = size0 + i1;
-          size_type ii2 = size0 + size1 + i2;
-          contact_node *cn1 = &cnl1[i1];
-          base_node node1 = cn1->mf->point_of_basic_dof(cn1->dof);
-          contact_node *cn2 = &cnl2[i2];
-          base_node node2 = cn2->mf->point_of_basic_dof(cn2->dof);
-          scalar_type dist2 = gmm::vect_norm2_sqr(node1-node2);
-          if (slave1 && dist2 < (*this)[ii1].dist2) {
-            (*this)[ii1].cn_s = *cn1;
-            (*this)[ii1].cn_m = *cn2;
-            (*this)[ii1].dist2 = dist2;
-            (*this)[ii1].is_active = true;
-          }
-          if (slave2 && dist2 < (*this)[ii2].dist2) {
-            (*this)[ii2].cn_s = *cn2;
-            (*this)[ii2].cn_m = *cn1;
-            (*this)[ii2].dist2 = dist2;
-            (*this)[ii2].is_active = true;
-          }
-        }
-#endif
-    }
-
-    void append_min_dist_cn_pairs(const mesh_fem &mf,
-                                  size_type rg1, size_type rg2,
-                                  bool slave1=true, bool slave2=false) {
-      append_min_dist_cn_pairs(mf, mf, rg1, rg2, slave1, slave2);
-    }
-  };
-
-  scalar_type projection_on_convex_face
-    (const mesh &m, const size_type cv, const short_type fc,
-     const base_node &master_node, const base_node &slave_node,
-     base_node &un, base_node &proj_node, base_node &proj_node_ref) {
-
-    bgeot::pgeometric_trans pgt = m.trans_of_convex(cv);
-
-    if (pgt->is_linear()) {  //this condition is practically too strict
-
-      un = m.normal_of_face_of_convex(cv,fc);
-      un /= gmm::vect_norm2(un);
-      //proj_node = slave_node - [(slave_node-master_node)*n] * n
-      gmm::add(master_node, gmm::scaled(slave_node, -1.), proj_node);
-      gmm::copy(gmm::scaled(un, gmm::vect_sp(proj_node, un)), proj_node);
-      gmm::add(slave_node, proj_node);
-
-      bgeot::geotrans_inv_convex gic;
-      gic.init(m.points_of_convex(cv), pgt);
-      gic.invert(proj_node, proj_node_ref);
-      return pgt->convex_ref()->is_in(proj_node_ref);
-
-    } else {
-
-      size_type N = m.dim();
-      size_type P = pgt->structure()->dim();
-      size_type nb_pts_cv = pgt->nb_points();
-      size_type nb_pts_fc = pgt->structure()->nb_points_of_face(fc);
-      bgeot::convex_ind_ct ind_pts_fc = pgt->structure()->ind_points_of_face(fc);
-      ref_mesh_face_pt_ct pts_fc = m.points_of_face_of_convex(cv, fc);
-      ref_convex_pt_ct ref_pts_fc = pgt->convex_ref()->points_of_face(fc);
-      dref_convex_pt_ct dref_pts_fc = pgt->convex_ref()->dir_points_of_face(fc);
-      GMM_ASSERT1( dref_pts_fc.size() == P, "Dimensions mismatch");
-
-      // Local base on reference face
-      std::vector<base_node> base_vecs_fc(P-1);
-      for (size_type i = 0; i < P-1; ++i)
-        base_vecs_fc[i] = dref_pts_fc[i+1] - dref_pts_fc[0];
-
-      base_vector val(nb_pts_cv);
-      base_matrix pc_cv(nb_pts_cv, P);
-      base_matrix pc_fc(nb_pts_fc, P-1), G(N, nb_pts_fc);
-      base_matrix K(N,P-1), KK(N,P), B(N,P-1), BB(N,P), CS(P-1,P-1);
-      base_matrix base_mat_fc(P-1,N);
-      vectors_to_base_matrix(G, pts_fc);
-      vectors_to_base_matrix(K, base_vecs_fc);
-      gmm::copy(gmm::transposed(K),base_mat_fc);
-      gmm::clear(K);
-
-      GMM_ASSERT1( slave_node.size() == N, "Dimensions mismatch");
-      const base_node &xx = slave_node;
-      base_node &xxp = proj_node;  xxp.resize(N);
-      base_node &xp = proj_node_ref;  xp.resize(P);
-      base_node vres(P);
-      scalar_type res= 1.;
-
-      xp = gmm::mean_value(ref_pts_fc);
-      gmm::clear(xxp);
-      pgt->poly_vector_val(xp, val);
-      for (size_type l = 0; l < nb_pts_fc; ++l)
-        gmm::add(gmm::scaled(pts_fc[l], val[ ind_pts_fc[l] ] ), xxp);
-
-      scalar_type EPS = 10E-12;
-      unsigned cnt = 50;
-      while (res > EPS && --cnt) {
-        // computation of the pseudo inverse matrix B at point xp
-        pgt->poly_vector_grad(xp, pc_cv);                // Non-optimized
-        for (size_type i = 0; i < nb_pts_fc; ++i)        // computation
-          for (size_type j = 0; j < P-1; ++j)            // of pc_fc
-            pc_fc(i,j) = gmm::vect_sp(gmm::mat_row(pc_cv, ind_pts_fc[i]),
-                                      base_vecs_fc[j]);
-        gmm::mult(G,pc_fc,K);
-        gmm::mult(gmm::transposed(K), K, CS);
-        gmm::lu_inverse(CS);
-        gmm::mult(K, CS, B);
-        gmm::mult(B, base_mat_fc, BB);
-
-        // Projection onto the face of convex
-        gmm::mult_add(gmm::transposed(BB), xx-xxp, xp);
-        gmm::clear(xxp);
-        pgt->poly_vector_val(xp, val);
-        for (size_type l = 0; l < nb_pts_fc; ++l)
-          gmm::add(gmm::scaled(pts_fc[l], val[ind_pts_fc[l]]), xxp);
-
-        gmm::mult(gmm::transposed(BB), xx - xxp, vres);
-        res = gmm::vect_norm2(vres);
-      }
-      GMM_ASSERT1( res <= EPS,
-                  "Iterative pojection on convex face did not converge");
-
-      // computation of normal vector
-      un.resize(N);
-//    un = xx - xxp;
-//    gmm::scale(un, 1/gmm::vect_norm2(un));
-
-      gmm::clear(un);
-      gmm::sub_index SUB_PTS_FC = gmm::sub_index(ind_pts_fc);
-      gmm::mult(G, gmm::sub_matrix(pc_cv, SUB_PTS_FC, gmm::sub_interval(0, P)), KK);
-      base_matrix bases_product(P-1, P);
-      gmm::mult(gmm::transposed(K), KK, bases_product);
-      for (size_type i = 0; i < P; ++i) {
-        std::vector<size_type> ind(0);
-        for (size_type j = 0; j < P; ++j)
-          if (j != i ) ind.push_back(j);
-        scalar_type
-          det = gmm::lu_det(gmm::sub_matrix(bases_product,
-                                            gmm::sub_interval(0, P-1),
-                                            gmm::sub_index(ind)       ) );
-        gmm::add(gmm::scaled(gmm::mat_col(KK, i), (i % 2) ? -det : +det ), un);
-      }
-      gmm::scale(un, 1/gmm::vect_norm2(un));
-
-      if (gmm::vect_sp(un, gmm::mean_value(pts_fc) -
-                           gmm::mean_value(m.points_of_convex(cv))) < 0)
-        gmm::scale(un,scalar_type(-1));
-
-      return pgt->convex_ref()->is_in(proj_node_ref);
-    }
-  }
-
-  void compute_contact_matrices
-         (const mesh_fem &mf_disp1, const mesh_fem &mf_disp2,
-          contact_node_pair_list &cnpl, model_real_plain_vector &gap,
-          CONTACT_B_MATRIX *BN1, CONTACT_B_MATRIX *BN2 = 0,
-          CONTACT_B_MATRIX *BT1 = 0, CONTACT_B_MATRIX *BT2 = 0) {
-
-    GMM_ASSERT1(gmm::vect_size(gap) == cnpl.size(),
-                "Wrong number of contact node pairs or wrong size of gap");
-    gmm::clear(*BN1);
-    GMM_ASSERT1( gmm::mat_nrows(*BN1) == cnpl.size(), "Wrong size of BN1");
-    if (BN2) {
-      gmm::clear(*BN2);
-      GMM_ASSERT1( gmm::mat_nrows(*BN2) == cnpl.size(), "Wrong size of BN2");
-    }
-    dim_type qdim = mf_disp1.get_qdim();
-    size_type d = qdim - 1;
-    if (BT1) {
-      gmm::clear(*BT1);
-      GMM_ASSERT1( gmm::mat_nrows(*BT1) == cnpl.size() * d, "Wrong size of BT1");
-    }
-    if (BT2) {
-      gmm::clear(*BT2);
-      GMM_ASSERT1( gmm::mat_nrows(*BT2) == cnpl.size() * d, "Wrong size of BT2");
-    }
-    gmm::fill(gap, scalar_type(10));  //FIXME: Needs a threshold value
-    for (size_type row = 0; row < cnpl.size(); ++row) {
-      contact_node_pair *cnp = &cnpl[row];
-      if (cnp->is_active) {
-        contact_node *cn_s = &cnp->cn_s;  //slave contact node
-        contact_node *cn_m = &cnp->cn_m;  //master contact node
-        const mesh &mesh_m = cn_m->mf->linked_mesh();
-        base_node slave_node = cn_s->mf->point_of_basic_dof(cn_s->dof);
-        base_node master_node = cn_m->mf->point_of_basic_dof(cn_m->dof);
-        base_node un_sel(3), proj_node_sel(3), proj_node_ref_sel(3);
-        scalar_type is_in_min = 1e5;  //FIXME
-        size_type cv_sel = 0, fc_sel = 0;
-        std::vector<size_type>::iterator cv;
-        std::vector<short_type>::iterator fc;
-        for (cv = cn_m->cvs.begin(), fc = cn_m->fcs.begin();
-             cv != cn_m->cvs.end() && fc != cn_m->fcs.end(); cv++, fc++) {
-          base_node un(3), proj_node(3), proj_node_ref(3);
-          scalar_type is_in = projection_on_convex_face
-            (mesh_m, *cv, *fc, master_node, slave_node, un, proj_node, proj_node_ref);
-          if (is_in < is_in_min) {
-            is_in_min = is_in;
-            cv_sel = *cv;
-            fc_sel = *fc;
-            un_sel = un;
-            proj_node_sel = proj_node;
-            proj_node_ref_sel = proj_node_ref;
-          }
-        }
-        if (is_in_min < 0.05) {  //FIXME
-          gap[row] = gmm::vect_sp(slave_node-proj_node_sel, un_sel);
-
-          base_node ut[3];
-          if (BT1) orthonormal_basis_to_unit_vec(d, un_sel, ut);
-
-          CONTACT_B_MATRIX *BN = 0;
-          CONTACT_B_MATRIX *BT = 0;
-          if (cn_s->mf == &mf_disp1) {
-            BN = BN1;
-            BT = BT1;
-          } else if (cn_s->mf == &mf_disp2) {
-            BN = BN2;
-            BT = BT2;
-          }
-          if (BN)
-            for (size_type k = 0; k <= d; ++k)
-              (*BN)(row, cn_s->dof + k) -= un_sel[k];
-          if (BT)
-            for (size_type k = 0; k <= d; ++k)
-              for (size_type n = 0; n < d; ++n)
-                (*BT)(row * d + n, cn_s->dof + k) -= ut[n][k];
-
-          BN = 0;
-          const mesh_fem *mf_disp = 0;
-          if (cn_m->mf == &mf_disp1) {
-            BN = BN1;
-            BT = BT1;
-            mf_disp = &mf_disp1;
-          } else if (cn_m->mf == &mf_disp2) {
-            BN = BN2;
-            BT = BT2;
-            mf_disp = &mf_disp2;
-          }
-          if (BN) {
-            base_matrix G;
-            base_matrix M(qdim, mf_disp->nb_basic_dof_of_element(cv_sel));
-            bgeot::vectors_to_base_matrix(G, mesh_m.points_of_convex(cv_sel));
-            pfem pf = mf_disp->fem_of_element(cv_sel);
-            bgeot::pgeometric_trans pgt = mesh_m.trans_of_convex(cv_sel);
-            fem_interpolation_context
-              ctx(pgt, pf, proj_node_ref_sel, G, cv_sel, fc_sel);
-            pf->interpolation (ctx, M, qdim);
-
-            mesh_fem::ind_dof_ct
-              master_dofs = mf_disp->ind_basic_dof_of_element(cv_sel);
-
-            model_real_plain_vector MT_u(mf_disp->nb_basic_dof_of_element(cv_sel));
-            gmm::mult(gmm::transposed(M), un_sel, MT_u);
-            for (size_type j = 0; j < master_dofs.size(); ++j)
-              (*BN)(row, master_dofs[j]) += MT_u[j];
-
-            if (BT) {
-              for (size_type n = 0; n < d; ++n) {
-                gmm::mult(gmm::transposed(M), ut[n], MT_u);
-                for (size_type j = 0; j < master_dofs.size(); ++j)
-                  (*BT)(row * d + n, master_dofs[j]) += MT_u[j];
-              }
-            }
-          } // BN
-
-        }
-      } // if:cnp->cn_s
-    } // cnp
-
-  } // compute_contact_matrices
-
-
-
-  //=========================================================================
-  //
-  //  Basic Brick (with given BN, BT, gap) and possibly two bodies
-  //
-  //=========================================================================
-
-  struct Coulomb_friction_brick : public virtual_brick {
-
-    mutable CONTACT_B_MATRIX BN1, BT1, BN2, BT2;
-    mutable CONTACT_B_MATRIX DN, DDN, DT, DDT; // For Hughes stabilization
-    mutable CONTACT_B_MATRIX BBN1, BBT1, BBN2, BBT2;
-    mutable model_real_plain_vector gap, threshold, friction_coeff, alpha;
-    mutable model_real_plain_vector RLN, RLT; 
-    mutable scalar_type r, gamma;
-    mutable bool is_init;
-    bool Tresca_version, symmetrized, contact_only;
-    bool really_stationary, friction_dynamic_term;
-    bool two_variables, Hughes_stabilized;
-
-    void init_BBN_BBT(void) const {
-      gmm::resize(BBN1, gmm::mat_nrows(BN1), gmm::mat_ncols(BN1));
-      gmm::copy(BN1, BBN1);
-      if (Hughes_stabilized) {
-        gmm::resize(DDN, gmm::mat_nrows(DN), gmm::mat_ncols(DN));
-        gmm::copy(DN, DDN);
-      }
-      if (two_variables) {
-        gmm::resize(BBN2, gmm::mat_nrows(BN2), gmm::mat_ncols(BN2));
-        gmm::copy(BN2, BBN2);
-      }
-      if (!contact_only) {
-	if (Hughes_stabilized) {
-	  gmm::resize(DDT, gmm::mat_nrows(DT), gmm::mat_ncols(DT));
-	  gmm::copy(DT, DDT);
-	}
-        gmm::resize(BBT1, gmm::mat_nrows(BT1), gmm::mat_ncols(BT1));
-        gmm::copy(BT1, BBT1);
-        if (two_variables) {
-          gmm::resize(BBT2, gmm::mat_nrows(BT2), gmm::mat_ncols(BT2));
-          gmm::copy(BT2, BBT2);
-        }
-      }
-      size_type nbc = gmm::mat_nrows(BN1);
-      size_type d = gmm::mat_nrows(BT1)/nbc;
-      for (size_type i = 0; i < nbc; ++i) {
-        gmm::scale(gmm::mat_row(BBN1, i), alpha[i]);
-        if (Hughes_stabilized) gmm::scale(gmm::mat_row(DDN, i), alpha[i]);
-        if (two_variables)
-          gmm::scale(gmm::mat_row(BBN2, i), alpha[i]);
-        if (!contact_only)
-          for (size_type k = 0; k < d; ++k) {
-	    if (Hughes_stabilized)
-	      gmm::scale(gmm::mat_row(DDT, d*i+k), alpha[i]);
-            gmm::scale(gmm::mat_row(BBT1, d*i+k), alpha[i]);
-            if (two_variables)
-              gmm::scale(gmm::mat_row(BBT2, d*i+k), alpha[i]);
-          }
-      }
-      is_init = true;
-    }
-
-    void precomp(const model_real_plain_vector &u1,
-                 const model_real_plain_vector &u2,
-                 const model_real_plain_vector &lambda_n,
-                 const model_real_plain_vector &lambda_t,
-                 const model_real_plain_vector &wt1,
-                 const model_real_plain_vector &wt2) const {
-      gmm::resize(RLN, gmm::mat_nrows(BN1));
-      if (!contact_only) gmm::resize(RLT, gmm::mat_nrows(BT1));
-
-      gmm::copy(gmm::scaled(gap, r), RLN);
-      for (size_type i = 0; i < gmm::mat_nrows(BN1); ++i) RLN[i] *= alpha[i];
-      gmm::add(lambda_n, RLN);
-      gmm::mult_add(BBN1, gmm::scaled(u1, -r), RLN);
-      if (Hughes_stabilized)
-        gmm::mult_add(DDN, gmm::scaled(lambda_n, -r), RLN);
-      if (two_variables) gmm::mult_add(BBN2, gmm::scaled(u2, -r), RLN);
-      if (!contact_only) {
-        gmm::copy(lambda_t, RLT);
-        if (friction_dynamic_term) {
-          gmm::mult_add(BBT1, gmm::scaled(wt1, -r*gamma), RLT);
-          if (two_variables)
-            gmm::mult_add(BBT2, gmm::scaled(wt2, -r*gamma), RLT);
-        }
-        if (!really_stationary) {
-          gmm::mult_add(BBT1, gmm::scaled(u1, -r), RLT);
-          if (two_variables) gmm::mult_add(BBT2, gmm::scaled(u2, -r), RLT);
-        }
-	if (Hughes_stabilized)
-	  gmm::mult_add(DDT, gmm::scaled(lambda_t, -r), RLT);
-      }
-    }
-
-    // Common part for all contact with friction bricks
-    void basic_asm_real_tangent_terms(const model_real_plain_vector &u1,
-                                      const model_real_plain_vector &u2,
-                                      const model_real_plain_vector &lambda_n,
-                                      const model_real_plain_vector &lambda_t,
-                                      const model_real_plain_vector &wt1,
-                                      const model_real_plain_vector &wt2,
-                                      model::real_matlist &matl,
-                                      model::real_veclist &vecl,
-                                      build_version version) const {
-      size_type nbt = 4 + (contact_only ? 0 : 4) + (two_variables ? 3 : 0)
-        + (two_variables && !contact_only ? 2 : 0);
-      GMM_ASSERT1(matl.size() == nbt,
-                  "Wrong number of terms for the contact brick");
-
-      const scalar_type vt1 = scalar_type(1);
-      size_type nbc = gmm::mat_nrows(BN1);
-      size_type d = gmm::mat_nrows(BT1)/nbc;
-
-      // Matrices to be filled
-      size_type nt = 0;
-      model_real_sparse_matrix &T_u1_u1 = matl[nt++], &T_u2_u2 = matl[nt++];
-      if (!two_variables) nt--;
-      model_real_sparse_matrix &T_u1_n = matl[nt++], &T_n_u1 = matl[nt++];
-      if (!two_variables) nt -= 2;
-      model_real_sparse_matrix &T_u2_n = matl[nt++], &T_n_u2 = matl[nt++];
-      size_type nvec_lambda_n = nt;
-      model_real_sparse_matrix &T_n_n = matl[nt++];
-      if (contact_only) nt -= 2;
-      model_real_sparse_matrix &T_u1_t = matl[nt++], &T_t_u1 = matl[nt++];
-      if (contact_only || !two_variables) nt -= 2;
-      model_real_sparse_matrix &T_u2_t = matl[nt++], &T_t_u2 = matl[nt++];
-      if (contact_only) nt -= 2;
-      size_type nvec_lambda_t = nt;
-      model_real_sparse_matrix &T_t_t = matl[nt++], &T_t_n = matl[nt++];
-
-      // Rhs to be filled
-      model_real_plain_vector &ru1 = vecl[0];
-      model_real_plain_vector &ru2 = vecl[1];
-      model_real_plain_vector &rlambda_n = vecl[nvec_lambda_n];
-      model_real_plain_vector &rlambda_t = vecl[nvec_lambda_t];
-
-      // pre-computations
-      if (!is_init) init_BBN_BBT();
-      precomp(u1, u2, lambda_n, lambda_t, wt1, wt2);
-
-      if (version & model::BUILD_MATRIX) {
-        // Unilateral contact
-        gmm::clear(T_n_n); gmm::clear(T_u1_u1);
-        if (two_variables) gmm::clear(T_u2_u2);
-        gmm::copy(gmm::scaled(gmm::transposed(BBN1), -vt1), T_u1_n);
-        if (two_variables)
-          gmm::copy(gmm::scaled(gmm::transposed(BBN2), -vt1), T_u2_n);
-        for (size_type i=0; i < nbc; ++i) {
-          if (RLN[i] >= scalar_type(0)) {
-            gmm::clear(gmm::mat_col(T_u1_n, i));
-            if (two_variables) gmm::clear(gmm::mat_col(T_u2_n, i));
-            T_n_n(i, i) = -vt1/r;
-          }
-          else {
-            if (Hughes_stabilized)
-              gmm::copy(gmm::scaled(gmm::mat_row(DDN, i), -vt1), gmm::mat_col(T_n_n, i));
-          }
-        }
-        if (Hughes_stabilized) {
-          model_real_sparse_matrix aux(gmm::mat_nrows(T_n_n), gmm::mat_nrows(T_n_n));
-          gmm::copy(gmm::transposed(T_n_n), aux);
-          gmm::copy(aux, T_n_n);
-        }
-        gmm::copy(gmm::transposed(T_u1_n), T_n_u1);
-        if (two_variables) gmm::copy(gmm::transposed(T_u2_n), T_n_u2);
-
-        // Friction
-        if (!contact_only) {
-          base_matrix pg(d, d);
-          base_vector vg(d);
-          gmm::clear(T_u1_t); gmm::clear(T_t_n); gmm::clear(T_t_t);
-          if (two_variables) gmm::clear(T_u2_t);
-
-          for (size_type i=0; i < nbc; ++i) {
-            gmm::sub_interval SUBI(i*d, d);
-            scalar_type th = Tresca_version ? threshold[i]
-              : - lambda_n[i] * friction_coeff[i];
-            ball_projection_grad(gmm::sub_vector(RLT, SUBI), th, pg);
-            if (!really_stationary)
-              for (size_type k1 = 0; k1 < d; ++k1)
-                for (size_type k2 = 0; k2 < d; ++k2) {
-                  gmm::add(gmm::scaled(gmm::mat_row(BBT1, i*d+k1), -pg(k2,k1)),
-                           gmm::mat_col(T_u1_t, i*d+k2));
-                  if (two_variables)
-                    gmm::add(gmm::scaled(gmm::mat_row(BBT2, i*d+k1), -pg(k2,k1)),
-                             gmm::mat_col(T_u2_t, i*d+k2));
-                }
-
-            if (!Tresca_version) {
-              ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
-              for (size_type k = 0; k < d; ++k)
-                T_t_n(i*d+k, i) = - friction_coeff[i] * vg[k] / r;
-            }
-            for (size_type k = 0; k < d; ++k) pg(k,k) -= vt1;
-            if (Hughes_stabilized) {
-	      for (size_type k = 0; k < d; ++k)
-		for (size_type l = 0; l < d; ++l) {
-		  gmm::add(gmm::scaled(gmm::mat_row(DDT, d*i+l), -pg(k,l)),
-			   gmm::mat_col(T_t_t, d*i+k));
-		  T_t_t(d*i+l, d*i+k) += pg(k,l) / r;
-		}
-	    } else
-	      gmm::copy(gmm::scaled(pg, vt1/r), gmm::sub_matrix(T_t_t, SUBI));
-
-          }
-	  if (Hughes_stabilized) {
-	    model_real_sparse_matrix aux(gmm::mat_nrows(T_t_t), gmm::mat_nrows(T_t_t));
-	    gmm::copy(gmm::transposed(T_t_t), aux);
-	    gmm::copy(aux, T_t_t);
-	  }
-          gmm::copy(gmm::transposed(T_u1_t), T_t_u1);
-          if (two_variables) gmm::copy(gmm::transposed(T_u2_t), T_t_u2);
-        }
-
-        if (symmetrized) {
-          // gmm::copy(gmm::transposed(T_n_u1), T_u1_n);  // already done
-          // gmm::copy(gmm::transposed(T_n_u2), T_u2_n);  // already done
-          model_real_sparse_matrix tmp1(gmm::mat_ncols(BN1),
-                                        gmm::mat_ncols(BN1));
-          model_real_sparse_matrix tmp2(gmm::mat_ncols(BN2),
-                                        gmm::mat_ncols(BN2));
-          gmm::mult(gmm::transposed(gmm::scaled(BBN1,-r)), T_n_u1, tmp1);
-          gmm::add(tmp1, T_u1_u1);
-          if (two_variables) {
-            gmm::mult(gmm::transposed(gmm::scaled(BBN2,-r)), T_n_u2, tmp2);
-            gmm::add(tmp2, T_u2_u2);
-          }
-
-          if (!contact_only) {
-            // gmm::copy(gmm::transposed(T_t_u1), T_u1_t);  // already done
-            // gmm::copy(gmm::transposed(T_t_u2), T_u2_t);  // already done
-            gmm::mult(gmm::transposed(gmm::scaled(BBT1,-r)), T_t_u1, tmp1);
-            gmm::add(tmp1, T_u1_u1);
-            if (two_variables) {
-              gmm::mult(gmm::transposed(gmm::scaled(BBT2,-r)), T_t_u2, tmp2);
-              gmm::add(tmp2, T_u2_u2);
-            }
-          }
-        }
-        else {
-          gmm::copy(gmm::scaled(gmm::transposed(BN1), -vt1), T_u1_n);
-          if (two_variables)
-            gmm::copy(gmm::scaled(gmm::transposed(BN2), -vt1), T_u2_n);
-          if (!contact_only) {
-            gmm::copy(gmm::scaled(gmm::transposed(BT1), -vt1), T_u1_t);
-            if (two_variables)
-              gmm::copy(gmm::scaled(gmm::transposed(BT2), -vt1), T_u2_t);
-          }
-        }
-      }
-
-      if (version & model::BUILD_RHS) {
-        for (size_type i=0; i < nbc; ++i) {
-          RLN[i] = std::min(scalar_type(0), RLN[i]);
-          if (!contact_only) {
-            scalar_type radius = Tresca_version ? threshold[i]
-              : -friction_coeff[i]*lambda_n[i];
-            ball_projection
-              (gmm::sub_vector(RLT, gmm::sub_interval(i*d,d)), radius);
-          }
-        }
-
-        if (symmetrized) {
-          gmm::mult_add(gmm::transposed(BN1), RLN, ru1);
-          if (two_variables) gmm::mult_add(gmm::transposed(BN2), RLN, ru2);
-          if (!contact_only) {
-            gmm::mult_add(gmm::transposed(BT1), RLT, ru1);
-            if (two_variables) gmm::mult_add(gmm::transposed(BT2), RLT, ru2);
-          }
-        } else {
-          gmm::mult_add(gmm::transposed(BN1), lambda_n, ru1);
-          if (two_variables)
-            gmm::mult_add(gmm::transposed(BN2), lambda_n, ru2);
-          if (!contact_only) {
-            gmm::mult_add(gmm::transposed(BT1), lambda_t, ru1);
-            if (two_variables)
-              gmm::mult_add(gmm::transposed(BT2), lambda_t, ru2);
-          }
-        }
-
-        gmm::add(gmm::scaled(lambda_n, vt1/r), gmm::scaled(RLN,-vt1/r),
-                 rlambda_n);
-
-        if (!contact_only)
-          gmm::add(gmm::scaled(lambda_t, vt1/r), gmm::scaled(RLT,-vt1/r),
-                   rlambda_t);
-      }
-    }
-
-    // specific part for the basic bricks : BN, BT, gap, r, alpha are given.
-    virtual void asm_real_tangent_terms(const model &md, size_type ib,
-                                        const model::varnamelist &vl,
-                                        const model::varnamelist &dl,
-                                        const model::mimlist &mims,
-                                        model::real_matlist &matl,
-                                        model::real_veclist &vecl,
-                                        model::real_veclist &,
-                                        size_type /* region */,
-                                        build_version version) const {
-      GMM_ASSERT1(mims.size() == 0, "Contact brick need no mesh_im");
-      size_type nbvar = 2 + (contact_only ? 0 : 1) + (two_variables ? 1 : 0); 
-      GMM_ASSERT1(vl.size() == nbvar,
-                  "Wrong number of variables for contact brick");
-      size_type nbdl = 3 + (contact_only ? 0 : 1) + (Tresca_version ? 1 : 0)
-        + (friction_dynamic_term ? 1 : 0);      
-      GMM_ASSERT1(dl.size() == nbdl, "Wrong number of data for contact brick, "
-                  << dl.size() << " should be " << nbdl);
-
-      size_type nbc = gmm::mat_nrows(BN1);
-
-      // Variables
-      // Without friction and one displacement  : u1, lambda_n
-      // Without friction and two displacements : u1, u2, lambda_n
-      // With friction and one displacement     : u1, lambda_n, lambda_t 
-      // With friction and two displacements    : u1, u2, lambda_n, lambda_t
-      size_type nv = 0;
-      const model_real_plain_vector &u1 = md.real_variable(vl[nv++]);
-      const model_real_plain_vector &u2 = md.real_variable(vl[nv++]);
-      if (!two_variables) nv--;
-      const model_real_plain_vector &lambda_n = md.real_variable(vl[nv++]);
-      if (contact_only) nv--;
-      const model_real_plain_vector &lambda_t = md.real_variable(vl[nv]);
-
-      // Parameters
-      // (order : r, gap, alpha, friction_coeff, gamma, wt, threshold)
-      size_type np = 0, np_wt1 = 0, np_wt2 = 0, np_alpha = 0;
-      const model_real_plain_vector &vr = md.real_variable(dl[np++]);
-      GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
-      r = vr[0];
-      const model_real_plain_vector &vgap = md.real_variable(dl[np++]);
-      GMM_ASSERT1(gmm::vect_size(vgap) == 1 || gmm::vect_size(vgap) == nbc,
-                  "Parameter gap has a wrong size");
-      gmm::resize(gap, nbc);
-      if (gmm::vect_size(vgap) == 1)
-        gmm::fill(gap, vgap[0]);
-      else
-        gmm::copy(vgap, gap);
-      np_alpha = np++;
-      const model_real_plain_vector &valpha = md.real_variable(dl[np_alpha]);
-      GMM_ASSERT1(gmm::vect_size(valpha)== 1 || gmm::vect_size(valpha) == nbc,
-                  "Parameter alpha has a wrong size");
-      gmm::resize(alpha, nbc);
-      if (gmm::vect_size(valpha) == 1)
-        gmm::fill(alpha, valpha[0]);
-      else
-        gmm::copy(valpha, alpha);
-      if (!contact_only) {
-        const model_real_plain_vector &vfr = md.real_variable(dl[np++]);
-        GMM_ASSERT1(gmm::vect_size(vfr)==1 || gmm::vect_size(vfr) == nbc,
-                    "Parameter friction_coeff has a wrong size");
-        gmm::resize(friction_coeff, nbc);
-        if (gmm::vect_size(vfr) == 1)
-          gmm::fill(friction_coeff, vfr[0]);
-        else
-          gmm::copy(vfr, friction_coeff);
-        if (friction_dynamic_term) {
-          const model_real_plain_vector &vg = md.real_variable(dl[np++]);
-          GMM_ASSERT1(gmm::vect_size(vg) == 1,
-                      "Parameter gamma should be a scalar");
-          gamma = vg[0];
-          np_wt1 = np++;
-          if (two_variables) np_wt2 = np++;
-        }
-        if (Tresca_version) {
-          const model_real_plain_vector &vth = md.real_variable(dl[np++]);
-          GMM_ASSERT1(gmm::vect_size(vth) == 1 || gmm::vect_size(vth) == nbc,
-                      "Parameter threshold has a wrong size");
-          gmm::resize(threshold, nbc);
-          if (gmm::vect_size(vth) == 1)
-            gmm::fill(threshold, vth[0]);
-          else
-            gmm::copy(vth, threshold);
-        }
-      }
-
-      if (md.is_var_newer_than_brick(dl[np_alpha], ib)) is_init = false;
-
-      basic_asm_real_tangent_terms
-        (u1, u2, lambda_n, lambda_t, md.real_variable(dl[np_wt1]),
-         md.real_variable(dl[np_wt2]), matl, vecl, version); 
-
-    }
-
-    Coulomb_friction_brick(bool symmetrized_, bool contact_only_,
-                           bool two_variables_=false,
-                           bool Hughes_stabilized_=false) {
-      symmetrized = symmetrized_;
-      contact_only = contact_only_;
-      is_init = false;
-      Tresca_version = false;   // for future version ...
-      really_stationary = false;   // for future version ...
-      friction_dynamic_term = false;  // for future version ...
-      two_variables = two_variables_;
-      Hughes_stabilized = Hughes_stabilized_;
-      set_flags("Coulomb friction brick", false /* is linear*/,
-                /* is symmetric */
-                symmetrized && (contact_only || Tresca_version),
-                false /* is coercive */, true /* is real */,
-                false /* is complex */);
-    }
-
-    void set_BN1(CONTACT_B_MATRIX &BN1_) {
-      gmm::resize(BN1, gmm::mat_nrows(BN1_), gmm::mat_ncols(BN1_));
-      gmm::copy(BN1_, BN1);
-      is_init = false;
-    }
-
-    void set_DN(CONTACT_B_MATRIX &DN_) {
-      gmm::resize(DN, gmm::mat_nrows(DN_), gmm::mat_ncols(DN_));
-      gmm::copy(DN_, DN);
-      is_init = false;
-    }
-
-    void set_DT(CONTACT_B_MATRIX &DT_) {
-      gmm::resize(DT, gmm::mat_nrows(DT_), gmm::mat_ncols(DT_));
-      gmm::copy(DT_, DT);
-      is_init = false;
-    }
-
-    void set_BT1(CONTACT_B_MATRIX &BT1_) {
-      gmm::resize(BT1, gmm::mat_nrows(BT1_), gmm::mat_ncols(BT1_));
-      gmm::copy(BT1_, BT1);
-      is_init = false;
-    }
-
-    CONTACT_B_MATRIX &get_BN1(void) { return BN1; }
-    CONTACT_B_MATRIX &get_DN(void) { return DN; }
-    CONTACT_B_MATRIX &get_DT(void) { return DT; }
-    CONTACT_B_MATRIX &get_BT1(void) { return BT1; }
-    const CONTACT_B_MATRIX &get_BN1(void) const { return BN1; }
-    const CONTACT_B_MATRIX &get_DN(void) const { return DN; }
-    const CONTACT_B_MATRIX &get_BT1(void) const { return BT1; }
-
-  };
-
-
-  CONTACT_B_MATRIX &contact_brick_set_BN
-  (model &md, size_type indbrick) {
-    pbrick pbr = md.brick_pointer(indbrick);
-    md.touch_brick(indbrick);
-    Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
-      (const_cast<virtual_brick *>(pbr.get()));
-    GMM_ASSERT1(p, "Wrong type of brick");
-    return p->get_BN1();
-  }
-
-
-  CONTACT_B_MATRIX &contact_brick_set_DN
-  (model &md, size_type indbrick) {
-    pbrick pbr = md.brick_pointer(indbrick);
-    md.touch_brick(indbrick);
-    Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
-      (const_cast<virtual_brick *>(pbr.get()));
-    GMM_ASSERT1(p, "Wrong type of brick");
-    return p->get_DN();
-  }
-
-  CONTACT_B_MATRIX &contact_brick_set_DT
-  (model &md, size_type indbrick) {
-    pbrick pbr = md.brick_pointer(indbrick);
-    md.touch_brick(indbrick);
-    Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
-      (const_cast<virtual_brick *>(pbr.get()));
-    GMM_ASSERT1(p, "Wrong type of brick");
-    return p->get_DT();
-  }
-
-
-  CONTACT_B_MATRIX &contact_brick_set_BT
-  (model &md, size_type indbrick) {
-    pbrick pbr = md.brick_pointer(indbrick);
-    md.touch_brick(indbrick);
-    Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
-      (const_cast<virtual_brick *>(pbr.get()));
-    GMM_ASSERT1(p, "Wrong type of brick");
-    return p->get_BT1();
-  }
-
-
-  //=========================================================================
-  //  Add a frictionless contact condition with BN, r, alpha given.  
-  //=========================================================================
-
-  size_type add_basic_contact_brick
-  (model &md, const std::string &varname_u, const std::string &multname_n,
-   const std::string &dataname_r, CONTACT_B_MATRIX &BN,
-   std::string dataname_gap, std::string dataname_alpha,
-   bool symmetrized, bool Hughes_stabilized) {
-    Coulomb_friction_brick *pbr_=new Coulomb_friction_brick(symmetrized, true, false,
-                                                            Hughes_stabilized);
-    pbr_->set_BN1(BN);
-    pbrick pbr = pbr_;
-
-    model::termlist tl;
-    tl.push_back(model::term_description(varname_u, varname_u, false));
-    tl.push_back(model::term_description(varname_u, multname_n, false));
-    tl.push_back(model::term_description(multname_n, varname_u, false));
-    tl.push_back(model::term_description(multname_n, multname_n, false));
-    model::varnamelist dl(1, dataname_r);
-
-    if (dataname_gap.size() == 0) {
-      dataname_gap = md.new_name("contact_gap_on_" + varname_u);
-      md.add_initialized_fixed_size_data
-        (dataname_gap, model_real_plain_vector(1, scalar_type(0)));
-    }
-    dl.push_back(dataname_gap);
-    
-    if (dataname_alpha.size() == 0) {
-      dataname_alpha = md.new_name("contact_parameter_alpha_on_"+ multname_n);
-      md.add_initialized_fixed_size_data
-        (dataname_alpha, model_real_plain_vector(1, scalar_type(1)));
-    }
-    dl.push_back(dataname_alpha);
-
-    model::varnamelist vl(1, varname_u);
-    vl.push_back(multname_n);
-    
-    return md.add_brick(pbr, vl, dl, tl, model::mimlist(), size_type(-1));
-  }
-
-
-  //=========================================================================
-  //  Add a contact with friction condition with BN, r, alpha given.  
-  //=========================================================================
-
-  size_type add_basic_contact_with_friction_brick
-  (model &md, const std::string &varname_u, const std::string &multname_n,
-   const std::string &multname_t, const std::string &dataname_r,
-   CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT,
-   std::string dataname_friction_coeff, 
-   std::string dataname_gap, std::string dataname_alpha,
-   bool symmetrized, bool Hughes_stabilized) {
-    Coulomb_friction_brick *pbr_=new Coulomb_friction_brick(symmetrized, false, false,
-                                                            Hughes_stabilized);
-    pbr_->set_BN1(BN);
-    pbr_->set_BT1(BT);
-    pbrick pbr = pbr_;
-
-    model::termlist tl;
-    tl.push_back(model::term_description(varname_u, varname_u, false));
-    tl.push_back(model::term_description(varname_u, multname_n, false));
-    tl.push_back(model::term_description(multname_n, varname_u, false));
-    tl.push_back(model::term_description(multname_n, multname_n, false));
-    tl.push_back(model::term_description(varname_u, multname_t, false));
-    tl.push_back(model::term_description(multname_t, varname_u, false));
-    tl.push_back(model::term_description(multname_t, multname_t, false));
-    tl.push_back(model::term_description(multname_t, multname_n, false));
-    model::varnamelist dl(1, dataname_r);
-    if (dataname_gap.size() == 0) {
-      dataname_gap = md.new_name("contact_gap_on_" + varname_u);
-      md.add_initialized_fixed_size_data
-        (dataname_gap, model_real_plain_vector(1, scalar_type(0)));
-    }
-    dl.push_back(dataname_gap);
-    
-    if (dataname_alpha.size() == 0) {
-      dataname_alpha = md.new_name("contact_parameter_alpha_on_"+ multname_n);
-      md.add_initialized_fixed_size_data
-        (dataname_alpha, model_real_plain_vector(1, scalar_type(1)));
-    }
-    dl.push_back(dataname_alpha);
-    dl.push_back(dataname_friction_coeff);
-
-    model::varnamelist vl(1, varname_u);
-    vl.push_back(multname_n);
-    vl.push_back(multname_t);
-    
-    return md.add_brick(pbr, vl, dl, tl, model::mimlist(), size_type(-1));
-  }
-  
-
-  //=========================================================================
-  //
-  //  Brick with a given rigid obstacle (one body, build BN, BT, gap, alpha)
-  //
-  //=========================================================================
-  // TODO : add an option for a weak contact condition
-
-  struct Coulomb_friction_brick_rigid_obstacle
-    : public Coulomb_friction_brick {
-
-    std::string obstacle; // obstacle given with a signed distance expression.
-
-  public :
-    
-    virtual void asm_real_tangent_terms(const model &md, size_type ib,
-                                        const model::varnamelist &vl,
-                                        const model::varnamelist &dl,
-                                        const model::mimlist &mims,
-                                        model::real_matlist &matl,
-                                        model::real_veclist &vecl,
-                                        model::real_veclist &,
-                                        size_type region,
-                                        build_version version) const {
-      GMM_ASSERT1(mims.size() == 1, "This contact brick needs one mesh_im");
-      size_type nbvar = 2 + (contact_only ? 0 : 1);
-      GMM_ASSERT1(vl.size() == nbvar,
-                  "Wrong number of variables for contact brick: "
-                  << vl.size() << " should be " << nbvar);
-      size_type nbdl = 1 + (contact_only ? 0 : 1) + (Tresca_version ? 1 : 0)
-        + (friction_dynamic_term ? 1 : 0);
-      GMM_ASSERT1(dl.size() == nbdl,
-                  "Wrong number of data for contact brick: "
-                  << dl.size() << " should be " << nbdl);
-      GMM_ASSERT1(!two_variables, "internal error");
-      const mesh_im &mim = *mims[0];
-
-      // Variables
-      // Without friction and one displacement  : u1, lambda_n
-      // With friction and one displacement     : u1, lambda_n, lambda_t
-      size_type nv = 0;
-      const model_real_plain_vector &u1 = md.real_variable(vl[nv++]);
-      const mesh_fem &mf_u1 = md.mesh_fem_of_variable(vl[0]);
-      const model_real_plain_vector &lambda_n = md.real_variable(vl[nv++]);
-      if (contact_only) nv--;
-      const model_real_plain_vector &lambda_t = md.real_variable(vl[nv]);
-
-
-      // Parameters (order : r, friction_coeff, gamma, wt, threshold)
-      size_type np = 0, np_wt1 = 0, nbc;
-      const model_real_plain_vector &vr = md.real_variable(dl[np++]);
-      GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
-      r = vr[0];
-
-      // Computation of BN, BT, gap and alpha
-      if (md.is_var_mf_newer_than_brick(vl[0], ib)) {
-
-        // Verification that mf_u1 is a pure Lagrange fem.
-        GMM_ASSERT1(!(mf_u1.is_reduced()),
-                    "This contact brick works only for pure Lagrange fems");
-        dal::bit_vector dofs = mf_u1.basic_dof_on_region(region);
-        for (dal::bv_visitor id(dofs); !id.finished(); ++id) {
-          size_type cv = mf_u1.first_convex_of_basic_dof(id);
-          GMM_ASSERT1(mf_u1.fem_of_element(cv)->is_lagrange(),
-                      "This contact brick works only for pure Lagrange fems");
-        }
-        size_type d = mf_u1.get_qdim() - 1, i = 0, j = 0;
-        nbc = dofs.card() / (d+1);
-
-        // computation of alpha vector.
-        base_node Pmin, Pmax;
-        mf_u1.linked_mesh().bounding_box(Pmin, Pmax);
-        scalar_type l = scalar_type(0);
-        for (i = 0; i < Pmin.size(); ++i)
-          l = std::max(l, gmm::abs(Pmax[i] - Pmin[i]));
-
-        CONTACT_B_MATRIX MM(mf_u1.nb_dof(), mf_u1.nb_dof());
-        asm_mass_matrix(MM, mim, mf_u1, region);
-        gmm::resize(alpha, nbc);
-        i = 0; j = 0;
-        for (dal::bv_visitor id(dofs); !id.finished(); ++id, ++i)
-          if ((i % (d+1)) == 0) alpha[j++] = MM(id, id) / l;
-
-
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
-
-
-        mu::Parser parser;
-        parser.SetExpr(obstacle);
-
-        gmm::resize(gap, nbc);
-        gmm::resize(BN1, nbc, mf_u1.nb_dof());
-        gmm::clear(BN1);
-        if (!contact_only) {
-          gmm::resize(BT1, d*nbc, mf_u1.nb_dof());
-          gmm::clear(BT1);
-        }
-        base_node pt(d+1), grad(d+1), ut[3];
-
-        static std::string varn[4] = {"x", "y", "z", "w"};
-        for (size_type k = 0; k <= d; ++k)
-          parser.DefineVar(varn[k], &pt[k]);
-
-        i = 0; j = 0;
-        for (dal::bv_visitor id(dofs); !id.finished(); ++id, ++i) {
-          if ((i % (d+1)) == 0) {
-            gmm::copy(mf_u1.point_of_basic_dof(id), pt);
-            try {
-
-              // Computation of gap
-              gap[j] = scalar_type(parser.Eval());
-              
-              // computation of BN
-              size_type cv = mf_u1.first_convex_of_basic_dof(id);
-              scalar_type eps
-                = mf_u1.linked_mesh().convex_radius_estimate(cv) * 1E-3;
-              for (size_type k = 0; k <= d; ++k) {
-                pt[k] += eps;
-                grad[k] = (scalar_type(parser.Eval()) - gap[j]) / eps;
-                pt[k] -= eps;
-              }
-              // unit normal vector
-              base_node un = - grad / gmm::vect_norm2(grad);
-
-              for (size_type k = 0; k <= d; ++k)
-                BN1(j, id + k) = un[k];
-              
-              // computation of BT
-              if (!contact_only) {
-
-                orthonormal_basis_to_unit_vec(d, un, ut);
-                
-                for (size_type k = 0; k <= d; ++k)
-                  for (size_type nn = 0; nn < d; ++nn)
-                    BT1(j*d+nn, id + k) = ut[nn][k];
-              }
-              
-            } catch (mu::Parser::exception_type &e) {
-              std::cerr << "Message  : " << e.GetMsg()   << std::endl;
-              std::cerr << "Formula  : " << e.GetExpr()  << std::endl;
-              std::cerr << "Token    : " << e.GetToken() << std::endl;
-              std::cerr << "Position : " << e.GetPos()   << std::endl;
-              std::cerr << "Errc     : " << e.GetCode()  << std::endl;
-              GMM_ASSERT1(false, "Error in signed distance expression");
-            }
-            ++j;
-          }
-          
-        }
-
-        GMM_ASSERT1(gmm::vect_size(md.real_variable(vl[1])) == nbc, 
-                    "Wrong size of multiplier for the contact condition");
-
-        if (!contact_only)
-          GMM_ASSERT1(gmm::vect_size(md.real_variable(vl[2])) == nbc*d, 
-                      "Wrong size of multiplier for the friction condition");
-
-#else
-
-        GMM_ASSERT1(false, "Muparser is not installed, "
-                    "You cannot use this contact brick");
-        
-#endif
-
-        is_init = false;
-      }
-      else 
-        nbc = gmm::mat_nrows(BN1);
-
-      if (!contact_only) {
-        const model_real_plain_vector &vfr = md.real_variable(dl[np++]);
-        GMM_ASSERT1(gmm::vect_size(vfr)==1 || gmm::vect_size(vfr) == nbc,
-                    "Parameter friction_coeff has a wrong size");
-        gmm::resize(friction_coeff, nbc);
-        if (gmm::vect_size(vfr) == 1)
-          gmm::fill(friction_coeff, vfr[0]);
-        else
-          gmm::copy(vfr, friction_coeff);
-        if (friction_dynamic_term) {
-          const model_real_plain_vector &vg = md.real_variable(dl[np++]);
-          GMM_ASSERT1(gmm::vect_size(vg) == 1,
-                      "Parameter gamma should be a scalar");
-          gamma = vg[0];
-          np_wt1 = np++;
-        }
-        if (Tresca_version) {
-          const model_real_plain_vector &vth = md.real_variable(dl[np++]);
-          GMM_ASSERT1(gmm::vect_size(vth) == 1 || gmm::vect_size(vth) == nbc,
-                      "Parameter threshold has a wrong size");
-          gmm::resize(threshold, nbc);
-          if (gmm::vect_size(vth) == 1)
-            gmm::fill(threshold, vth[0]);
-          else
-            gmm::copy(vth, threshold);
-        }
-      }
-
-      basic_asm_real_tangent_terms
-        (u1, u1, lambda_n, lambda_t, md.real_variable(dl[np_wt1]),
-         md.real_variable(dl[np_wt1]), matl, vecl, version);
-
-    }
-
-    Coulomb_friction_brick_rigid_obstacle
-    (bool symmetrized_, bool contact_only_, const std::string &obs)
-      : Coulomb_friction_brick(symmetrized_, contact_only_), obstacle(obs) {}
-
-  };
-
-
-  //=========================================================================
-  //  Add a frictionless contact condition with a rigid obstacle given
-  //  by a signed distance.  
-  //=========================================================================
-
-  size_type add_contact_with_rigid_obstacle_brick
-  (model &md, const mesh_im &mim, const std::string &varname_u,
-   const std::string &multname_n, const std::string &dataname_r,
-   size_type region, const std::string &obstacle, bool symmetrized) {
-    pbrick pbr
-      = new Coulomb_friction_brick_rigid_obstacle(symmetrized, true, obstacle);
-
-    model::termlist tl;
-    tl.push_back(model::term_description(varname_u, varname_u, false));
-    tl.push_back(model::term_description(varname_u, multname_n, false));
-    tl.push_back(model::term_description(multname_n, varname_u, false));
-    tl.push_back(model::term_description(multname_n, multname_n, false));
-    model::varnamelist dl(1, dataname_r);
-
-    model::varnamelist vl(1, varname_u);
-    vl.push_back(multname_n);
-    
-    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
-  }
-
-
-  //=========================================================================
-  //  Add a contact with friction condition with a rigid obstacle given
-  //  by a signed distance.  
-  //=========================================================================
-
-  size_type add_contact_with_friction_with_rigid_obstacle_brick
-  (model &md, const mesh_im &mim, const std::string &varname_u,
-   const std::string &multname_n, const std::string &multname_t,
-   const std::string &dataname_r, const std::string &dataname_friction_coeff,
-   size_type region, const std::string &obstacle, bool symmetrized) {
-    pbrick pbr
-      = new Coulomb_friction_brick_rigid_obstacle(symmetrized,false,obstacle);
-
-    model::termlist tl;
-    tl.push_back(model::term_description(varname_u, varname_u, false));
-    tl.push_back(model::term_description(varname_u, multname_n, false));
-    tl.push_back(model::term_description(multname_n, varname_u, false));
-    tl.push_back(model::term_description(multname_n, multname_n, false));
-    tl.push_back(model::term_description(varname_u, multname_t, false));
-    tl.push_back(model::term_description(multname_t, varname_u, false));
-    tl.push_back(model::term_description(multname_t, multname_t, false));
-    tl.push_back(model::term_description(multname_t, multname_n, false));
-    model::varnamelist dl(1, dataname_r);
-    dl.push_back(dataname_friction_coeff);
-
-    model::varnamelist vl(1, varname_u);
-    vl.push_back(multname_n);
-    vl.push_back(multname_t);
-    
-    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
-  }
-
-
-  //=========================================================================
-  //
-  //  Brick with elastic bodies (one or two bodies, build BN, BT, Gap, alpha)
-  //
-  //=========================================================================
-  // To be done:
-  // - Large deformations: what happens when cnpl and nbc change during
-  //   the iterative solution?
-
-  struct Coulomb_friction_brick_nonmatching_meshes
-    : public Coulomb_friction_brick {
-
-    std::vector<size_type> rg1, rg2; // ids of mesh regions expected to come in
-                                     // contact. For one displacement they refer
-                                     // both to u1. For two displacements they
-                                     // respectively refer to u1, u2.
-    bool slave1, slave2; // if true, then rg1 or respectively rg2 are treated
-                         // as slave surfaces (the contact multipliers are
-                         // defined on these surfaces)
-
-    virtual void asm_real_tangent_terms(const model &md, size_type ib,
-                                        const model::varnamelist &vl,
-                                        const model::varnamelist &dl,
-                                        const model::mimlist &mims,
-                                        model::real_matlist &matl,
-                                        model::real_veclist &vecl,
-                                        model::real_veclist &,
-                                        size_type region,
-                                        build_version version) const {
-
-      GMM_ASSERT1(mims.size() == 2, "This contact brick needs two mesh_im");
-      const mesh_im &mim1 = *mims[0];
-      const mesh_im &mim2 = *mims[1];
-
-      // Variables
-      // Without friction and one displacement  : u1, lambda_n
-      // With friction and one displacement     : u1, lambda_n, lambda_t
-      // Without friction and two displacements : u1, u2, lambda_n
-      // With friction and two displacements    : u1, u2, lambda_n, lambda_t
-      size_type nv = 0;
-      std::string varname_u1 = vl[nv];
-      const model_real_plain_vector &u1 = md.real_variable(varname_u1);
-      const mesh_fem &mf_u1 = md.mesh_fem_of_variable(varname_u1);
-      if (two_variables) nv++;
-      std::string varname_u2 = vl[nv++];
-      const model_real_plain_vector &u2 = md.real_variable(varname_u2);
-      const mesh_fem &mf_u2 = md.mesh_fem_of_variable(varname_u2);
-      const model_real_plain_vector &lambda_n = md.real_variable(vl[nv]);
-      if (!contact_only) nv++;
-      const model_real_plain_vector &lambda_t = md.real_variable(vl[nv]);
-
-      size_type nbc = lambda_n.size();
-
-      // Parameters (order: r, friction_coeff)
-      const model_real_plain_vector &vr = md.real_variable(dl[0]);
-      GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
-      r = vr[0];
-      if (!contact_only) {
-        const model_real_plain_vector &vfr = md.real_variable(dl[1]);
-        GMM_ASSERT1(gmm::vect_size(vfr)==1 || gmm::vect_size(vfr) == nbc,
-                    "Parameter friction_coeff has a wrong size");
-        gmm::resize(friction_coeff, nbc);
-        if (gmm::vect_size(vfr) == 1)
-          gmm::fill(friction_coeff, vfr[0]);
-        else
-          gmm::copy(vfr, friction_coeff);
-      }
-
-      // Computation of BN, BT, gap and alpha
-      if (  md.is_var_mf_newer_than_brick(varname_u1, ib)
-         || md.is_var_mf_newer_than_brick(varname_u2, ib)) {
-
-        for (size_type i = 0; i <= two_variables ? 1 : 0; i++) {
-          const mesh_fem &mf_u = i ? mf_u2 : mf_u1;
-          // Verification that mf_u is a pure Lagrange fem.
-          GMM_ASSERT1(!(mf_u.is_reduced()),
-                "This contact brick works only for pure Lagrange fems");
-          dal::bit_vector dofs = mf_u.basic_dof_on_region(region);
-          for (dal::bv_visitor id(dofs); !id.finished(); ++id) {
-            size_type cv = mf_u.first_convex_of_basic_dof(id);
-            GMM_ASSERT1(mf_u.fem_of_element(cv)->is_lagrange(),
-                "This contact brick works only for pure Lagrange fems");
-          }
-        }
-
-        contact_node_pair_list cnpl;
-        for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it)
-          cnpl.append_min_dist_cn_pairs
-                 (mf_u1, mf_u2, rg1[it], rg2[it], slave1, slave2);
-
-        // Computation of gap, BN and BT
-        gmm::resize(gap, nbc);
-        gmm::resize(BN1, nbc, mf_u1.nb_dof());
-        if (contact_only) {
-          if (!two_variables) {
-            compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1);
-          } else {
-            gmm::resize(BN2, nbc, mf_u2.nb_dof());
-            compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1, &BN2);
-          }
-        } else {
-          size_type d = mf_u1.get_qdim() - 1;
-          gmm::resize(BT1, nbc * d, mf_u1.nb_dof());
-          if (!two_variables) {
-            compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1,    0, &BT1);
-          } else {
-            // d == mf_u2.get_qdim() - 1;
-            gmm::resize(BN2, nbc, mf_u2.nb_dof());
-            gmm::resize(BT2, nbc * d, mf_u2.nb_dof());
-            compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1, &BN2, &BT1, &BT2);
-          }
-        }
-
-        // computation of alpha vector.
-        scalar_type l = scalar_type(0);
-        for (size_type i = 0; i <= two_variables ? 1 : 0; i++) {
-          const mesh_fem &mf_u = i ? mf_u2 : mf_u1;
-          base_node Pmin, Pmax;
-          mf_u.linked_mesh().bounding_box(Pmin, Pmax);
-          for (size_type j = 0; j < Pmin.size(); ++j)
-            l = std::max(l, gmm::abs(Pmax[j] - Pmin[j]));
-        }
-        gmm::resize(alpha, nbc);
-        size_type mult_id = 0;
-        for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it) {
-          for (size_type swap = 0; swap <= 1; ++swap) {
-            if (swap ? slave2 : slave1) {
-              size_type rg = swap ? rg2[it] : rg1[it];
-              const mesh_fem &mf_u = swap ? mf_u2 : mf_u1;
-              const mesh_im &mim = swap ? mim2 : mim1;
-              CONTACT_B_MATRIX MM(mf_u.nb_dof(), mf_u.nb_dof());
-              asm_mass_matrix(MM, mim, mf_u, rg);
-              size_type qdim = mf_u.get_qdim();
-              dal::bit_vector rg_dofs = mf_u.basic_dof_on_region(rg);
-              for (dal::bv_visitor id(rg_dofs); !id.finished(); ++id)
-                if (id % qdim == 0) alpha[mult_id++] = MM(id, id) / l;
-            }
-          }
-        }
-      }
-
-      const model_real_plain_vector dummy_wt;
-      basic_asm_real_tangent_terms
-        (u1, u2, lambda_n, lambda_t, dummy_wt, dummy_wt, matl, vecl, version);
-    }
-
-    Coulomb_friction_brick_nonmatching_meshes
-      (bool symmetrized_, bool contact_only_, bool two_variables_,
-       const std::vector<size_type> &rg1_, const std::vector<size_type> &rg2_,
-       bool slave1_=true, bool slave2_=false)
-      : Coulomb_friction_brick(symmetrized_, contact_only_, two_variables_),
-        rg1(rg1_), rg2(rg2_), slave1(slave1_), slave2(slave2_) {}
-
-  };
-
-
-  //=========================================================================
-  //  Add a frictionless contact condition between two faces of one or two
-  //  elastic bodies.
-  //=========================================================================
-
-  size_type add_nonmatching_meshes_contact_brick
-  (model &md, const mesh_im &mim1, const mesh_im &mim2,
-   const std::string &varname_u1, const std::string &varname_u2,
-   std::string &multname_n, const std::string &dataname_r,
-   const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
-   bool slave1, bool slave2, bool symmetrized) {
-
-    bool two_variables = (varname_u1.compare(varname_u2) != 0);
-
-    pbrick pbr = new Coulomb_friction_brick_nonmatching_meshes
-           (symmetrized, true, two_variables, rg1, rg2, slave1, slave2);
-
-    // Calculate multipliers size
-    const mesh_fem &mf_u1 = md.mesh_fem_of_variable(varname_u1);
-    const mesh_fem &mf_u2 = md.mesh_fem_of_variable(varname_u2);
-    size_type nbc = 0;
-    for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it) {
-      for (size_type swap = 0; swap <= 1; ++swap) {
-        if (swap ? slave2 : slave1) {
-          const mesh_fem &mf = swap ? mf_u2 : mf_u1;
-          size_type rg = swap ? rg2[it] : rg1[it];
-          dal::bit_vector rg_dofs = mf.basic_dof_on_region(rg);
-          nbc += rg_dofs.card() / mf.get_qdim();
-        }
-      }
-    }
-
-    if (multname_n.size() == 0)
-      multname_n = md.new_name("contact_multiplier");
-    else
-      GMM_ASSERT1(multname_n.compare(md.new_name(multname_n)) == 0,
-                  "The given name for the multiplier is alraedy reserved in the model");
-    md.add_fixed_size_variable(multname_n, nbc);
-
-    model::termlist tl;
-    tl.push_back(model::term_description(varname_u1, varname_u1, false));
-    if (two_variables) {
-      tl.push_back(model::term_description(varname_u2, varname_u2, false));
-    }
-    tl.push_back(model::term_description(varname_u1, multname_n, false));
-    tl.push_back(model::term_description(multname_n, varname_u1, false));
-    if (two_variables) {
-      tl.push_back(model::term_description(varname_u2, multname_n, false));
-      tl.push_back(model::term_description(multname_n, varname_u2, false));
-    }
-    tl.push_back(model::term_description(multname_n, multname_n, false));
-
-    // Variables (order: varname_u, multname_n)
-    model::varnamelist vl;
-    vl.push_back(varname_u1);
-    if (two_variables) vl.push_back(varname_u2);
-    vl.push_back(multname_n);
-
-    // Parameters (order: r, ...)
-    model::varnamelist dl;
-    dl.push_back(dataname_r);
-
-    model::mimlist ml;
-    ml.push_back(&mim1);
-    ml.push_back(&mim2);
-
-    return md.add_brick(pbr, vl, dl, tl, ml, size_type(-1));
-  }
-
-
-  //=========================================================================
-  //  Add a contact with friction condition between two faces of one or two
-  //  elastic bodies.
-  //=========================================================================
-
-  size_type add_nonmatching_meshes_contact_with_friction_brick
-  (model &md, const mesh_im &mim1, const mesh_im &mim2,
-   const std::string &varname_u1, const std::string &varname_u2,
-   std::string &multname_n, std::string &multname_t,
-   const std::string &dataname_r, const std::string &dataname_friction_coeff,
-   const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
-   bool slave1, bool slave2, bool symmetrized) {
-
-    bool two_variables = (varname_u1.compare(varname_u2) != 0);
-
-    pbrick pbr = new Coulomb_friction_brick_nonmatching_meshes
-           (symmetrized, false, two_variables, rg1, rg2, slave1, slave2);
-
-    // Calculate multipliers size
-    const mesh_fem &mf_u1 = md.mesh_fem_of_variable(varname_u1);
-    const mesh_fem &mf_u2 = md.mesh_fem_of_variable(varname_u2);
-    size_type nbc = 0;
-    for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it) {
-      for (size_type swap = 0; swap <= 1; ++swap) {
-        if (swap ? slave2 : slave1) {
-          const mesh_fem &mf = swap ? mf_u2 : mf_u1;
-          size_type rg = swap ? rg2[it] : rg1[it];
-          dal::bit_vector rg_dofs = mf.basic_dof_on_region(rg);
-          nbc += rg_dofs.card() / mf.get_qdim();
-        }
-      }
-    }
-
-    if (multname_n.size() == 0)
-      multname_n = md.new_name("contact_normal_multiplier");
-    else
-      GMM_ASSERT1(multname_n.compare(md.new_name(multname_n)) == 0,
-                  "The given name for the multiplier is alraedy reserved in the model");
-    md.add_fixed_size_variable(multname_n, nbc);
-    if (multname_t.size() == 0)
-      multname_t = md.new_name("contact_tangent_multiplier");
-    else
-      GMM_ASSERT1(multname_t.compare(md.new_name(multname_t)) == 0,
-                  "The given name for the multiplier is alraedy reserved in the model");
-    md.add_fixed_size_variable(multname_t, nbc * (mf_u1.get_qdim() - 1) ); // ??
-
-    model::termlist tl;
-    tl.push_back(model::term_description(varname_u1, varname_u1, false));
-    if (two_variables) {
-      tl.push_back(model::term_description(varname_u2, varname_u2, false));
-    }
-
-    tl.push_back(model::term_description(varname_u1, multname_n, false));
-    tl.push_back(model::term_description(multname_n, varname_u1, false));
-    if (two_variables) {
-      tl.push_back(model::term_description(varname_u2, multname_n, false));
-      tl.push_back(model::term_description(multname_n, varname_u2, false));
-    }
-    tl.push_back(model::term_description(multname_n, multname_n, false));
-
-    tl.push_back(model::term_description(varname_u1, multname_t, false));
-    tl.push_back(model::term_description(multname_t, varname_u1, false));
-    if (two_variables) {
-      tl.push_back(model::term_description(varname_u2, multname_t, false));
-      tl.push_back(model::term_description(multname_t, varname_u2, false));
-    }
-    tl.push_back(model::term_description(multname_t, multname_t, false));
-    tl.push_back(model::term_description(multname_t, multname_n, false));
-
-    // Variables (order: varname_u, multname_n, multname_t)
-    model::varnamelist vl;
-    vl.push_back(varname_u1);
-    if (two_variables) vl.push_back(varname_u2);
-    vl.push_back(multname_n);
-    vl.push_back(multname_t);
-
-    // Parameters (order: r, friction_coeff)
-    model::varnamelist dl;
-    dl.push_back(dataname_r);
-    dl.push_back(dataname_friction_coeff);
-
-    model::mimlist ml;
-    ml.push_back(&mim1);
-    ml.push_back(&mim2);
-
-    return md.add_brick(pbr, vl, dl, tl, ml, size_type(-1));
-  }
-
-}  /* end of namespace getfem.                                             */
diff --git a/src/getfem_Xfem.cc b/src/getfem_Xfem.cc
index 19d3584..5277909 100644
--- a/src/getfem_Xfem.cc
+++ b/src/getfem_Xfem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_Xfem.h"
 
diff --git a/src/getfem_assembling_tensors.cc b/src/getfem_assembling_tensors.cc
index 97583d1..43ff0c4 100644
--- a/src/getfem_assembling_tensors.cc
+++ b/src/getfem_assembling_tensors.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2010 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_assembling_tensors.h"
 #include "getfem/getfem_mat_elem.h"
@@ -72,6 +72,10 @@ namespace getfem {
     }
   }
 
+  bool ATN::is_zero_size() {
+    return child(0).is_zero_size();
+  }
+
   /* 
      general class for tensor who store their data
   */
@@ -79,14 +83,13 @@ namespace getfem {
     TDIter data_base;
   protected:
     std::vector<scalar_type> data;
-  public:
-    void reinit();
+    void reinit_();
     void reinit0()
-    { ATN_tensor_w_data::reinit(); std::fill(data.begin(), data.end(),0); }
+    { ATN_tensor_w_data::reinit_(); std::fill(data.begin(), data.end(),0); }
   };
 
   /* note that the data is NOT filled with zeros */
-  void ATN_tensor_w_data::reinit() {
+  void ATN_tensor_w_data::reinit_() {
     tr.assign_shape(req_shape);
     tr.init_strides();
     if (tr.card() > 10000000) {
@@ -97,7 +100,7 @@ namespace getfem {
     if (tr.card() == 0) {
       cerr << "WARNING: tensor " << name()
 	   << " will be created with a size of " 
-	   << ranges() << " and 0 non-nul elements!" << endl;
+	   << ranges() << " and 0 non-null elements!" << endl;
     }
     data.resize(tr.card());
     data_base = &data[0];
@@ -189,7 +192,9 @@ namespace getfem {
 	s.append(red[n].first->ranges().size(), ' ');
       return s;
     }
-    void reinit() {
+
+  private:
+    void reinit_() {
       tred.clear();
       for (dim_type i=0; i < red.size(); ++i) {
 	// cerr << "ATN_reduced_tensor::reinit : insertion of r(" << red_n(i) 
@@ -212,8 +217,7 @@ namespace getfem {
       /* on fournit notre propre tenseur pour stocker les resultats */
       tred.prepare(&tensor());
     }
-  private:
-    
+
     void exec_(size_type , dim_type ) {
       std::fill(data.begin(), data.end(), 0.); /* do_reduction ne peut pas */
       /* le faire puisque ce n'est pas lui le proprietaire du tenseur de   */
@@ -253,11 +257,11 @@ namespace getfem {
 		   tensor_mask::Slice(slice_dim, index_type(slice_idx))));
       child(0).merge_required_shape(ts);
     }
-    void reinit() {
+  private:
+    void reinit_() {
       tensor() = tensor_ref(child(0).tensor(),
 		   tensor_mask::Slice(slice_dim, index_type(slice_idx)));
     }
-  private:
     void exec_(size_type, dim_type) {}
   };
 
@@ -294,7 +298,7 @@ namespace getfem {
       ts.permute(reorder, true);
       child(0).merge_required_shape(ts);
     }
-    void reinit() {
+    void reinit_() {
       tensor() = child(0).tensor();
       tensor().permute(reorder);
     }
@@ -327,7 +331,7 @@ namespace getfem {
       tensor_shape ts = req_shape.diag_shape(tensor_mask::Diagonal(i1,i2));
       child(0).merge_required_shape(ts);
     }
-    void reinit() {
+    void reinit_() {
       tensor() = tensor_ref(child(0).tensor(), tensor_mask::Diagonal(i1,i2));
     }
     void exec_(size_type, dim_type) {}
@@ -866,7 +870,7 @@ namespace getfem {
       }
     }
 
-    void reinit() {
+    void reinit_() {
       if (!shape_updated_) return;
       tensor().clear();
       tsize = 1;
@@ -971,12 +975,12 @@ namespace getfem {
       }
     }
     virtual void init_required_shape() { req_shape = tensor_shape(ranges()); }
-    void reinit() {
-      ATN_tensor_w_data::reinit();
-      mti.assign(tensor(), true);
-    }
 
   private:
+    void reinit_() {
+      ATN_tensor_w_data::reinit_();
+      mti.assign(tensor(), true);
+    }
     void exec_(size_type cv, dim_type ) {
       vdim.build_strides_for_cv(cv, e_r, e_str);
       assert(e_r == ranges());
@@ -1012,12 +1016,12 @@ namespace getfem {
       child(0).merge_required_shape(ts);
     }
 
-    void reinit() {
+  private:
+    void reinit_() {
       req_shape.set_full(ranges()); // c'est plus simple comme ça
       ATN_tensor_w_data::reinit0();
       mti.assign(child(0).tensor(),true);
     }
-  private:
     void exec_(size_type, dim_type) {
       std::fill(data.begin(), data.end(), 0.);
       mti.rewind();
@@ -1039,11 +1043,11 @@ namespace getfem {
       if ((shape_updated_ = (ranges() != child(0).ranges())))      
 	r_ = child(0).ranges();
     }
-    void reinit() {
+  private:
+    void reinit_() {
       ATN_tensor_w_data::reinit0();
       mti.assign(tensor(), child(0).tensor(),false);
     }
-  private:
     void update_cv_(size_type, dim_type) {
       mti.rewind();
       do {
@@ -1072,17 +1076,17 @@ namespace getfem {
 	  ASM_THROW_TENSOR_ERROR("can't add two tensors of sizes " << 
 				 ranges() << " and " << child(i).ranges());
     }
-    void reinit() {
-      ATN_tensor_w_data::reinit0();
-      mti.resize(nchilds());
-      for (size_type i=0; i < nchilds(); ++i)
-	mti[i].assign(tensor(), child(i).tensor(),false);
-    }
     void apply_scale(scalar_type s) { 
       for (size_type i=0; i < scales.size(); ++i) scales[i] *= s; 
     }
     ATN_tensors_sum_scaled* is_tensors_sum_scaled() { return this; }
   private:
+    void reinit_() {
+      ATN_tensor_w_data::reinit0();
+      mti.resize(nchilds());
+      for (size_type i=0; i < nchilds(); ++i)
+	mti[i].assign(tensor(), child(i).tensor(),false);
+    }
     void exec_(size_type, dim_type) {
       //if (cv == 0) {
       // cerr << "ATN_tensors_sum["<< name() << "] req_shape="
@@ -1113,11 +1117,11 @@ namespace getfem {
       if ((shape_updated_ = child(0).is_shape_updated()))
 	r_ = child(0).ranges();
     }
-    void reinit() {
-      ATN_tensor_w_data::reinit();
+  private:
+    void reinit_() {
+      ATN_tensor_w_data::reinit_();
       mti.assign(tensor(), child(0).tensor(),false);
     }
-  private:
     void exec_(size_type, dim_type) {
       std::fill(data.begin(), data.end(), v);
       mti.rewind();
@@ -1134,8 +1138,8 @@ namespace getfem {
   public:
     ATN_print_tensor(ATN_tensor& a, std::string n_) 
       : name(n_) { add_child(a); }
-    void reinit() {}
   private:
+    void reinit_() {}
     void exec_(size_type cv, dim_type face) {
       multi_tensor_iterator mti(child(0).tensor(), true);
       cout << "------- > evaluation of " << name << ", at" << endl;
@@ -1374,7 +1378,7 @@ namespace getfem {
       advance(); 
     }
     if (datanum >= indata.size())
-      ASM_THROW_PARSE_ERROR("wong dataset number: " << datanum);
+      ASM_THROW_PARSE_ERROR("wrong dataset number: " << datanum);
     
     vdim_specif_list sz;
     do_dim_spec(sz);
diff --git a/src/getfem_boost/intrusive_ptr.hpp b/src/getfem_boost/intrusive_ptr.hpp
index 70bf118..5d479b2 100755
--- a/src/getfem_boost/intrusive_ptr.hpp
+++ b/src/getfem_boost/intrusive_ptr.hpp
@@ -1,10 +1,7 @@
-#ifndef BOOST_INTRUSIVE_PTR_HPP_INCLUDED
-#define BOOST_INTRUSIVE_PTR_HPP_INCLUDED
-
 //
 //  intrusive_ptr.hpp
 //
-//  Copyright (c) 2001, 2002 Peter Dimov
+//  Copyright (c) 2001-2002 Peter Dimov
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -14,6 +11,10 @@
 //  for documentation.
 //
 
+#ifndef BOOST_INTRUSIVE_PTR_HPP_INCLUDED
+#define BOOST_INTRUSIVE_PTR_HPP_INCLUDED
+
+
 // #include <getfem_boost/config.hpp>
 
 #ifdef BOOST_MSVC  // moved here to work around VC++ compiler crash
diff --git a/src/getfem_boost/noncopyable.hpp b/src/getfem_boost/noncopyable.hpp
index 7770bdb..f54c170 100755
--- a/src/getfem_boost/noncopyable.hpp
+++ b/src/getfem_boost/noncopyable.hpp
@@ -1,10 +1,16 @@
 //  Boost noncopyable.hpp header file  --------------------------------------//
 
-//  (C) Copyright Beman Dawes 1999-2003. Distributed under the Boost
-//  Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
+//
+//  Copyright (c) 1999-2003 Beman Dawes
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
 //  See http://www.boost.org/libs/utility for documentation.
+//
+
+
 
 #ifndef BOOST_NONCOPYABLE_HPP_INCLUDED
 #define BOOST_NONCOPYABLE_HPP_INCLUDED
diff --git a/src/getfem_boost/workaround.hpp b/src/getfem_boost/workaround.hpp
index b5ecad7..ae6e186 100755
--- a/src/getfem_boost/workaround.hpp
+++ b/src/getfem_boost/workaround.hpp
@@ -1,7 +1,11 @@
-// Copyright David Abrahams 2002.
+
+//  Copyright (c) 2002 David Abrahams
+//
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
+//
+
 #ifndef WORKAROUND_DWA2002126_HPP
 # define WORKAROUND_DWA2002126_HPP
 
diff --git a/src/getfem_contact_and_friction_integral.cc b/src/getfem_contact_and_friction_integral.cc
new file mode 100644
index 0000000..859d420
--- /dev/null
+++ b/src/getfem_contact_and_friction_integral.cc
@@ -0,0 +1,3982 @@
+/*===========================================================================
+ 
+ Copyright (C) 2011-2012 Yves Renard, Konstantinos Poulios.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+#include "getfem/bgeot_rtree.h"
+#include "getfem/getfem_contact_and_friction_integral.h"
+#include "getfem/getfem_contact_and_friction_common.h"
+#include "getfem/getfem_projected_fem.h"
+
+#include <getfem/getfem_arch_config.h>
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#include <muParser/muParser.h>
+#elif GETFEM_HAVE_MUPARSER_H
+#include <muParser.h>
+#endif
+
+namespace getfem {
+
+
+
+  template <typename T> inline static T Heav(T a)
+  { return (a < T(0)) ? T(0) : T(1); }
+
+
+  //=========================================================================
+  //
+  //  Basic non linear term used for contact bricks.
+  //
+  //=========================================================================
+
+  void contact_nonlinear_term::adjust_tensor_size(void) {
+    sizes_.resize(1); sizes_[0] = 1;
+    switch (option) {
+      // one-dimensional tensors [N]
+    case RHS_U_V1:       case RHS_U_V2:       case RHS_U_V4:
+    case RHS_U_V5:       case RHS_U_FRICT_V6: case RHS_U_FRICT_V7:
+    case RHS_U_FRICT_V8: case RHS_U_FRICT_V1:
+    case RHS_U_FRICT_V4: case RHS_U_FRICT_V5:
+    case RHS_L_FRICT_V1: case RHS_L_FRICT_V2: case RHS_L_FRICT_V4:
+    case K_UL_V1:        case K_UL_V2:        case K_UL_V3:  case K_UL_V4:
+    case UZAWA_PROJ_FRICT: case UZAWA_PROJ_FRICT_SAXCE:
+      sizes_[0] = N; break;
+      // two-dimensional tensors [N x N]
+    case K_UU_V1: case K_UU_V2:
+    case K_UL_FRICT_V1: case K_UL_FRICT_V2: case K_UL_FRICT_V3:
+    case K_UL_FRICT_V4: case K_UL_FRICT_V5:
+    case K_UL_FRICT_V7: case K_UL_FRICT_V8:
+    case K_LL_FRICT_V1: case K_LL_FRICT_V2: case K_LL_FRICT_V4:
+    case K_UU_FRICT_V1: case K_UU_FRICT_V2:
+    case K_UU_FRICT_V3: case K_UU_FRICT_V4: case K_UU_FRICT_V5:
+      sizes_.resize(2); sizes_[0] = sizes_[1] = N;  break;
+    }
+
+    // adjust temporary variables sizes
+    lnt.resize(N); lt.resize(N); zt.resize(N); no.resize(N);
+    aux1.resize(1); auxN.resize(N); V.resize(N);
+    gmm::resize(GP, N, N);
+  }
+
+  void contact_nonlinear_term::compute
+  (fem_interpolation_context &/* ctx */, bgeot::base_tensor &t) {
+
+    t.adjust_sizes(sizes_);
+    scalar_type e, f, augm_ln;
+    dim_type i, j;
+
+    switch (option) {
+
+    // scalar tensors [1]
+
+    case RHS_L_V1:
+      t[0] = (ln+gmm::neg(ln-r*(un - g)))/r; break;
+    case RHS_L_V2:
+      t[0] = (un-g) + gmm::pos(ln)/r; break;
+
+    case K_LL_V1:
+      t[0] = (Heav(r*(un-g)-ln) - scalar_type(1))/r; break;
+    case K_LL_V2:
+      t[0] = -Heav(ln)/r; break;
+
+    case UZAWA_PROJ:
+      t[0] = -gmm::neg(ln - r*(un - g)); break;
+
+    case CONTACT_FLAG:
+      // here ln is expected to be an estimation of the mesh size
+      // and r should be a threshold coefficient expressing a penetration
+      // or separation distance as percentage of the mesh size 
+      t[0] = Heav(un-g - r*ln);  break;
+
+    // one-dimensional tensors [N]
+
+    case RHS_U_V1:
+      for (i=0; i<N; ++i) t[i] = ln * no[i]; break;
+    case RHS_U_V2:
+      e = -gmm::neg(ln-r*(un - g));
+      for (i=0; i<N; ++i) t[i] = e * no[i];
+      break;
+    case RHS_U_V4:
+      e = -gmm::neg(ln);
+      for (i=0; i<N; ++i) t[i] = e * no[i];
+      break;
+    case RHS_U_V5:
+      e = - gmm::pos(un-g) * r;
+      for (i=0; i<N; ++i) t[i] = e * no[i];
+      break;
+    case RHS_U_FRICT_V6:
+      e = gmm::neg(ln-r*(un - g));
+      auxN = lt - zt;  ball_projection(auxN, f_coeff*e );
+      for (i=0; i<N; ++i) t[i] = (auxN[i] - e*no[i]);
+      break;
+    case RHS_U_FRICT_V7:
+      e = - gmm::neg(-r*(un - g));
+      auxN = - zt;  ball_projection(auxN, -f_coeff *e );
+      for (i=0; i<N; ++i) t[i] = (e*no[i] + auxN[i]);
+      break;
+    case RHS_U_FRICT_V8:
+      auxN = lnt - (r*(un-g) - f_coeff * gmm::vect_norm2(zt)) * no - zt;
+      De_Saxce_projection(auxN, no, f_coeff);
+      for (i=0; i<N; ++i) t[i] = auxN[i];
+      break;
+    case RHS_U_FRICT_V1:
+      for (i=0; i<N; ++i) t[i] = lnt[i]; break;
+    case RHS_U_FRICT_V4:
+      e = -gmm::neg(ln);
+      // if (e < 0. && ctx.xreal()[1] > 1.)
+      //        cout << "x = " << ctx.xreal() << " e = " << e << endl;
+      auxN = lt;  ball_projection(auxN, f_coeff * gmm::neg(ln));
+      // if (gmm::vect_norm2(auxN) > 0. && ctx.xreal()[1] > 1.)
+      //        cout << "x = " << ctx.xreal() << " auxN = " << auxN << endl;
+      for (i=0; i<N; ++i) t[i] = no[i]*e + auxN[i];
+      break;
+    case RHS_U_FRICT_V5:
+      auxN = lnt; De_Saxce_projection(auxN, no, f_coeff);
+      for (i=0; i<N; ++i) t[i] = auxN[i];
+      break;
+    case RHS_L_FRICT_V1:
+      e = gmm::neg(ln-r*(un-g));
+      auxN = zt - lt;  ball_projection(auxN, f_coeff * e); auxN += lt;
+      for (i=0; i<N; ++i) t[i] = ((e+ln)*no[i] + auxN[i])/ r;
+      break;
+    case RHS_L_FRICT_V2:
+      e = r*(un-g) + gmm::pos(ln);
+      auxN = lt;  ball_projection(auxN, f_coeff * gmm::neg(ln));
+      for (i=0; i<N; ++i) t[i] = (no[i]*e + zt[i] + lt[i] - auxN[i])/r;
+      break;
+    case RHS_L_FRICT_V4:
+      auxN = lnt;
+      De_Saxce_projection(auxN, no, f_coeff);
+      auxN -= lnt + (r*(un-g) - f_coeff * gmm::vect_norm2(zt)) * no + zt;
+      for (i=0; i<N; ++i) t[i] = -auxN[i]/r;
+      break;
+    case K_UL_V1:
+      for (i=0; i<N; ++i) t[i] = -no[i];
+      break;
+    case K_UL_V2 :
+      e = -Heav(-ln); //Heav(ln)-scalar_type(1);
+      for (i=0; i<N; ++i) t[i] = e*no[i];
+      break;
+    case K_UL_V3:
+      e = -Heav(r*(un-g)-ln);
+      for (i=0; i<N; ++i) t[i] = e*no[i];
+      break;
+    case K_UL_V4:
+      for (i=0; i<N; ++i) t[i] = -no[i];
+      break;
+    case UZAWA_PROJ_FRICT:
+      e = -gmm::neg(ln - r*(un - g));
+      auxN = lt - zt;  ball_projection(auxN, -f_coeff * e);
+      for (i=0; i<N; ++i) t[i] = e*no[i] + auxN[i];
+      break;
+    case UZAWA_PROJ_FRICT_SAXCE:
+      auxN = lnt - (r*(un-g) - f_coeff * gmm::vect_norm2(zt)) * no - zt;
+      De_Saxce_projection(auxN, no, f_coeff);
+      for (i=0; i<N; ++i) t[i] = auxN[i];
+      break;
+
+    // two-dimensional tensors [N x N]
+
+    case K_UU_V1:
+      e = Heav(un - g) * r;
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j) t[i*N+j] = e * no[i] * no[j];
+      break;
+    case K_UU_V2:
+      e = r*Heav(r*(un - g)-ln);
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j) t[i*N+j] = e * no[i] * no[j];
+      break;
+
+    case K_UL_FRICT_V1:
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+        t[i*N+j] = ((i == j) ? -scalar_type(1) : scalar_type(0));
+      break;
+    case K_UL_FRICT_V2:
+      e = -Heav(-ln); //Heav(ln)-scalar_type(1);
+      ball_projection_grad(lt, f_coeff * gmm::neg(ln), GP);
+       e += gmm::vect_sp(GP, no, no);
+      ball_projection_grad_r(lt, f_coeff * gmm::neg(ln), V);
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+        t[i*N+j] = no[i]*no[j]*e - GP(i,j) + f_coeff*Heav(-ln)*no[i]*V[j];
+      break;
+    case K_UL_FRICT_V3:
+      f = Heav(r*(un-g)-ln);
+      augm_ln = gmm::neg(ln - r*(un-g));
+      auxN = lt - zt; ball_projection_grad(auxN, f_coeff * augm_ln, GP);
+      e = gmm::vect_sp(GP, no, no) - f;
+      ball_projection_grad_r(auxN, f_coeff * augm_ln, V);
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+        t[i*N+j] = no[i]*no[j]*e - GP(i,j) + f_coeff*f*V[j]*no[i];
+      break;
+    case K_UL_FRICT_V4:
+      f = Heav(r*(un-g)-ln);
+      augm_ln = gmm::neg(ln - r*(un-g));
+      auxN = lt - zt; ball_projection_grad(auxN, f_coeff * augm_ln, GP);
+      e = alpha * gmm::vect_sp(GP, no, no) - f;
+      ball_projection_grad_r(auxN, f_coeff * augm_ln, V);
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+        t[i*N+j] = no[i]*no[j]*e - alpha*GP(i,j) + f_coeff * f * V[i] * no[j];
+      break;
+    case K_UL_FRICT_V5:
+      e = (alpha-scalar_type(1));
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+        t[i*N+j] = no[i]*no[j]*e - ((i == j) ? alpha : scalar_type(0));
+      break;
+    case K_UL_FRICT_V7:
+      De_Saxce_projection_grad(lnt, no, f_coeff, GP);
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j) t[i*N+j] = -GP(j,i);
+      break;
+    case K_UL_FRICT_V8:
+      {
+        scalar_type nzt = gmm::vect_norm2(zt);
+        gmm::copy(gmm::identity_matrix(), GP); gmm::scale(GP, alpha);
+        gmm::rank_one_update(GP, gmm::scaled(no, scalar_type(1)-alpha), no);
+        if (nzt != scalar_type(0))
+          gmm::rank_one_update(GP, gmm::scaled(no, -f_coeff*alpha/nzt), zt);
+        for (i=0; i<N; ++i) for (j=0; j<N; ++j) t[i*N+j] = - GP(i,j);
+      }
+      break;
+    case K_LL_FRICT_V1:
+      f = Heav(r*(un-g)-ln);
+      augm_ln = gmm::neg(ln - r*(un-g));
+      auxN = lt - zt; ball_projection_grad(auxN, f_coeff * augm_ln, GP);
+      e = f/r - gmm::vect_sp(GP, no, no) / r;
+      ball_projection_grad_r(auxN, f_coeff * augm_ln, V);
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+        t[i*N+j] = no[i]*no[j]*e
+          - (((i == j) ? scalar_type(1) : scalar_type(0)) - GP(i,j))/r
+          - f_coeff * f * V[j] * no[i] / r;
+      break;
+    case K_LL_FRICT_V2:
+      e = -Heav(ln) + scalar_type(1);
+      ball_projection_grad(lt, f_coeff * gmm::neg(ln), GP);
+      e -= gmm::vect_sp(GP, no, no);
+      ball_projection_grad_r(lt, f_coeff * gmm::neg(ln), V);
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+        t[i*N+j] = (no[i]*no[j]*e - ((i == j) ? scalar_type(1) : scalar_type(0)) + GP(i,j) - f_coeff*Heav(-ln)*no[i]*V[j])/r;
+      break;
+    case K_LL_FRICT_V4:
+      De_Saxce_projection_grad(lnt, no, f_coeff, GP);
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+        t[i*N+j] = (GP(i,j) - ((i == j) ? scalar_type(1) : scalar_type(0)))/r;
+      break;
+    case K_UU_FRICT_V1:
+      e = r*Heav(r*(un-g)-ln);
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j) t[i*N+j] = no[i]*no[j]*e;
+      break;
+    case K_UU_FRICT_V2:
+      e = Heav(r*(un-g)-ln);
+      auxN = lt - zt; ball_projection_grad(auxN, -f_coeff * ln, GP);
+      e -= alpha*gmm::vect_sp(GP, no, no);
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+        t[i*N+j] = r*(no[i]*no[j]*e + alpha*GP(i,j));
+      break;
+    case K_UU_FRICT_V3:
+      f = Heav(r*(un-g)-ln);
+      augm_ln = gmm::neg(ln - r*(un-g));
+      auxN = lt - zt; ball_projection_grad(auxN, f_coeff * augm_ln, GP);
+      e = f - alpha*gmm::vect_sp(GP, no, no);
+      ball_projection_grad_r(auxN, f_coeff * augm_ln, V);
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+        t[i*N+j] = r*(no[i]*no[j]*e + alpha*GP(i,j) - f_coeff*f*no[i]*V[j]);
+      break;
+    case K_UU_FRICT_V4:
+      e = Heav(r*(un-g));
+      augm_ln = gmm::neg(- r*(un-g));
+      auxN = - zt; ball_projection_grad(auxN, f_coeff * augm_ln, GP);
+      e -= alpha*gmm::vect_sp(GP, no, no);
+      ball_projection_grad_r(auxN, f_coeff * augm_ln, V);
+      for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+        t[i*N+j] = r*(no[i]*no[j]*e + alpha*GP(i,j)
+                      - f_coeff*Heav(r*(un-g))*no[i]*V[j]);
+      break;
+    case K_UU_FRICT_V5:
+      {
+        scalar_type nzt = gmm::vect_norm2(zt);
+        auxN = lnt - (r*(un-g) - f_coeff * nzt) * no - zt;
+        base_matrix A(N, N), B(N, N);
+        De_Saxce_projection_grad(auxN, no, f_coeff, A);
+        gmm::copy(gmm::identity_matrix(), B); gmm::scale(B, alpha);
+        gmm::rank_one_update(B, gmm::scaled(no, scalar_type(1)-alpha), no);
+        if (nzt != scalar_type(0))
+          gmm::rank_one_update(B, gmm::scaled(no, -f_coeff*alpha/nzt), zt);
+        gmm::mult(A, B, GP);
+        for (i=0; i<N; ++i) for (j=0; j<N; ++j) t[i*N+j] = r*GP(j,i);
+      }
+      break;
+    default : GMM_ASSERT1(false, "Invalid option");
+    }
+  }
+
+
+  //=========================================================================
+  //
+  //  Non linear term used for contact with rigid obstacle bricks.
+  //
+  //=========================================================================
+
+  void contact_rigid_obstacle_nonlinear_term::prepare
+  (fem_interpolation_context& ctx, size_type nb) {
+    size_type cv = ctx.convex_num();
+
+    switch (nb) { // last is computed first
+    case 1 : // calculate [un] and [zt] interpolating [U],[WT],[VT] on [mf_u]
+      coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector
+                (U, gmm::sub_index
+                 (mf_u.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation(ctx, coeff, V, N);
+      un = gmm::vect_sp(V, no);
+      if (!contact_only) {
+        if (gmm::vect_size(WT) == gmm::vect_size(U)) {
+          gmm::copy(gmm::sub_vector
+                    (WT, gmm::sub_index
+                     (mf_u.ind_basic_dof_of_element(cv))), coeff);
+          ctx.pf()->interpolation(ctx, coeff, auxN, N);
+          auxN -= gmm::vect_sp(auxN, no) * no;
+          if (gmm::vect_size(VT) == gmm::vect_size(U)) {
+            gmm::copy(gmm::sub_vector
+                      (VT, gmm::sub_index
+                       (mf_u.ind_basic_dof_of_element(cv))), coeff);
+            ctx.pf()->interpolation(ctx, coeff, vt, N);
+            vt -= gmm::vect_sp(vt, no) * no;
+            // zt = r*(alpha*(u_T-w_T) + (1-gamma)*v_T)
+            zt = (((V - un * no) - auxN) * alpha + vt * (1 - gamma)) * r;
+          } else {
+            // zt = r*alpha*(u_T-w_T)
+            zt = ((V - un * no) - auxN) * (r * alpha);
+          }
+        } else {
+          // zt = r*alpha*u_T
+          zt = (V - un * no) * (r * alpha);
+        }
+      }
+      break;
+
+    case 2 : // calculate [g] and [no] interpolating [obs] on [mf_obs]
+             // calculate [ln] and [lt] from [lnt] and [no]
+      coeff.resize(mf_obs.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector
+                (obs, gmm::sub_index
+                 (mf_obs.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation_grad(ctx, coeff, grad, 1);
+      gmm::copy(gmm::mat_row(grad, 0), no);
+      no /= -gmm::vect_norm2(no);
+      ctx.pf()->interpolation(ctx, coeff, aux1, 1);
+      g = aux1[0];
+
+      if (!contact_only && pmf_lambda) {
+        ln = gmm::vect_sp(lnt, no);
+        lt = lnt - ln * no;
+      }
+
+      break;
+
+    case 3 : // calculate [ln] or [lnt] interpolating [lambda] on [mf_lambda]
+      if (pmf_lambda) {
+        coeff.resize(pmf_lambda->nb_basic_dof_of_element(cv));
+        gmm::copy(gmm::sub_vector
+                  (lambda, gmm::sub_index
+                   (pmf_lambda->ind_basic_dof_of_element(cv))), coeff);
+        if (contact_only) {
+          ctx.pf()->interpolation(ctx, coeff, aux1, 1);
+          ln = aux1[0];
+        } else {
+          ctx.pf()->interpolation(ctx, coeff, lnt, N);
+        }
+      }
+      break;
+
+    case 4 :// calculate [f_coeff] interpolating [friction_coeff] on [mf_coeff]
+      GMM_ASSERT1(!contact_only, "Invalid friction option");
+      if (pmf_coeff) {
+        coeff.resize(pmf_coeff->nb_basic_dof_of_element(cv));
+        gmm::copy(gmm::sub_vector
+                  (friction_coeff, gmm::sub_index
+                   (pmf_coeff->ind_basic_dof_of_element(cv))), coeff);
+        ctx.pf()->interpolation(ctx, coeff, aux1, 1);
+        f_coeff = aux1[0];
+      }
+      break;
+
+    default : GMM_ASSERT1(false, "Invalid option");
+    }
+
+  }
+
+
+  //=========================================================================
+  //
+  //  Non linear term used for contact between non-matching meshes bricks.
+  //
+  //=========================================================================
+
+  void contact_nonmatching_meshes_nonlinear_term::prepare
+  (fem_interpolation_context& ctx, size_type nb) {
+
+    size_type cv = ctx.convex_num();
+
+    // - this method is called for nb=4,3,2,1 corresponding to
+    //   NonLin(#i0,#i1,#i2,#i3,#i4) before the compute() method is called
+    //   for i0
+    // - in each call ctx.pf() corresponds to the fem of the cv convex
+    //   on the i4,i3,i2 and i1 mesh_fem respectively
+    // - this method expects that i1,i2,i3 and i4 mesh_fems will correspond
+    //   to mf_u1, mf_u2, mf_lambda and mf_coeff
+
+    switch (nb) { // last is computed first
+    case 1 : // calculate [un] and [zt] interpolating [U1],[WT1] on [mf_u1]
+             // and subtracting [un] and [zt] calculated on [mf_u2]
+      coeff.resize(mf_u1.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector
+                (U1, gmm::sub_index
+                 (mf_u1.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation(ctx, coeff, V, N);
+      un = gmm::vect_sp(V, no) - un;
+      if (!contact_only) {
+        if (gmm::vect_size(WT1) == gmm::vect_size(U1)) {
+          gmm::copy(gmm::sub_vector
+                    (WT1, gmm::sub_index
+                     (mf_u1.ind_basic_dof_of_element(cv))), coeff);
+          ctx.pf()->interpolation(ctx, coeff, auxN, N);
+          auxN -= gmm::vect_sp(auxN, no) * no;
+          zt = ((V - un * no) - auxN) * (r * alpha) - zt; // zt = r*alpha*(u_T-w_T)
+        } else {
+          zt = (V - un * no) * (r * alpha) - zt;          // zt = r*alpha*u_T
+        }
+      }
+      break;
+
+    case 2 : // calculate [g] and [no]
+             // calculate [ln] and [lt] from [lnt] and [no]
+             // calculate [un] and [zt] interpolating [U2],[WT2] on [mf_u2]
+      {
+        const projected_fem &pfe = dynamic_cast<const projected_fem&>(*ctx.pf());
+        pfe.projection_data(ctx, no, g);
+        gmm::scale(no, scalar_type(-1)); // pointing outwards from mf_u1
+      }
+
+      if (!contact_only && pmf_lambda) {
+        ln = gmm::vect_sp(lnt, no);
+        lt = lnt - ln * no;
+      }
+
+      coeff.resize(mf_u2.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector
+                (U2, gmm::sub_index
+                 (mf_u2.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation(ctx, coeff, V, N);
+      un = gmm::vect_sp(V, no);
+      if (!contact_only) {
+        if (gmm::vect_size(WT2) == gmm::vect_size(U2)) {
+          gmm::copy(gmm::sub_vector
+                    (WT2, gmm::sub_index
+                     (mf_u2.ind_basic_dof_of_element(cv))), coeff);
+          ctx.pf()->interpolation(ctx, coeff, auxN, N);
+          auxN -= gmm::vect_sp(auxN, no) * no;
+          zt = ((V - un * no) - auxN) * (r * alpha); // zt = r*alpha*(u_T-w_T)
+        } else {
+          zt = (V - un * no) * (r * alpha);          // zt = r*alpha*u_T
+        }
+      }
+      break;
+
+    case 3 : // calculate [ln] or [lnt] interpolating [lambda] on [mf_lambda]
+      if (pmf_lambda) {
+        coeff.resize(pmf_lambda->nb_basic_dof_of_element(cv));
+        gmm::copy(gmm::sub_vector
+                  (lambda, gmm::sub_index
+                   (pmf_lambda->ind_basic_dof_of_element(cv))), coeff);
+        if (contact_only) {
+          ctx.pf()->interpolation(ctx, coeff, aux1, 1);
+          ln = aux1[0];
+        } else {
+          ctx.pf()->interpolation(ctx, coeff, lnt, N);
+        }
+      }
+      break;
+
+    case 4 :// calculate [f_coeff] interpolating [friction_coeff] on [mf_coeff]
+      GMM_ASSERT1(!contact_only, "Invalid friction option");
+      if (pmf_coeff) {
+        coeff.resize(pmf_coeff->nb_basic_dof_of_element(cv));
+        gmm::copy(gmm::sub_vector
+                  (friction_coeff, gmm::sub_index
+                   (pmf_coeff->ind_basic_dof_of_element(cv))), coeff);
+        ctx.pf()->interpolation(ctx, coeff, aux1, 1);
+        f_coeff = aux1[0];
+      }
+      break;
+
+    default : GMM_ASSERT1(false, "Invalid option");
+    }
+
+  }
+
+
+  //=========================================================================
+  //
+  //  Integral augmented Lagrangian brick (given obstacle, u, lambda).
+  //
+  //=========================================================================
+
+  template<typename MAT, typename VECT1>
+  void asm_Alart_Curnier_contact_rigid_obstacle_tangent_matrix // frictionless
+  (MAT &Kul, MAT &Klu, MAT &Kll, MAT &Kuu,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, const VECT1 &U,
+   const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+   const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+   scalar_type r, const mesh_region &rg, int option = 1) {
+
+    size_type subterm1 = (option == 3) ? K_UL_V2 : K_UL_V1;
+    size_type subterm2 = (option == 3) ? K_UL_V4 : K_UL_V3;
+    size_type subterm3 = (option == 3) ? K_LL_V2 : K_LL_V1;
+    size_type subterm4 = (option == 2) ? K_UU_V2 : K_UU_V1;
+
+    contact_rigid_obstacle_nonlinear_term
+      nterm1(subterm1, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda),
+      nterm2(subterm2, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda),
+      nterm3(subterm3, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda),
+      nterm4(subterm4, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda);
+
+    getfem::generic_assembly assem;
+    switch (option) {
+    case 1: case 3:
+      assem.set
+       ("M$1(#1,#3)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#1).Base(#3))(i,:,i,:); " // UL
+        "M$2(#3,#1)+=comp(NonLin$2(#1,#1,#2,#3).Base(#3).vBase(#1))(i,:,:,i); " // LU
+        "M$3(#3,#3)+=comp(NonLin$3(#1,#1,#2,#3).Base(#3).Base(#3))(i,:,:)");    // LL
+      break;
+    case 2:
+      assem.set
+       ("M$1(#1,#3)+=comp(NonLin$2(#1,#1,#2,#3).vBase(#1).Base(#3))(i,:,i,:); "      // UL
+        "M$3(#3,#3)+=comp(NonLin$3(#1,#1,#2,#3).Base(#3).Base(#3))(i,:,:);"          // LL
+        "M$4(#1,#1)+=comp(NonLin$4(#1,#1,#2,#3).vBase(#1).vBase(#1))(i,j,:,i,:,j)"); // UU
+      break;
+    }
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_mf(mf_obs);
+    assem.push_mf(mf_lambda);
+    assem.push_nonlinear_term(&nterm1);
+    assem.push_nonlinear_term(&nterm2);
+    assem.push_nonlinear_term(&nterm3);
+    assem.push_nonlinear_term(&nterm4);
+    assem.push_mat(Kul);
+    assem.push_mat(Klu);
+    assem.push_mat(Kll);
+    assem.push_mat(Kuu);
+    assem.assembly(rg);
+  }
+
+  template<typename MAT, typename VECT1>
+  void asm_Alart_Curnier_contact_rigid_obstacle_tangent_matrix // with friction
+  (MAT &Kul, MAT &Klu, MAT &Kll, MAT &Kuu,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, const VECT1 &U,
+   const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+   const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+   const getfem::mesh_fem *pmf_coeff, const VECT1 *f_coeff, scalar_type r,
+   scalar_type alpha, const VECT1 *WT,
+   scalar_type gamma, const VECT1 *VT,
+   const mesh_region &rg, int option = 1) {
+
+    size_type subterm1, subterm2, subterm3;
+    switch (option) {
+    case 1 : subterm1 = K_UL_FRICT_V1; subterm2 = K_UL_FRICT_V4;
+      subterm3 = K_LL_FRICT_V1; break;
+    case 2 : subterm1 = K_UL_FRICT_V3; subterm2 = K_UL_FRICT_V4;
+      subterm3 = K_LL_FRICT_V1; break;
+    case 3 : subterm1 = K_UL_FRICT_V2; subterm2 = K_UL_FRICT_V5;
+      subterm3 = K_LL_FRICT_V2; break;
+    case 4 : subterm1 = K_UL_FRICT_V7; subterm2 = K_UL_FRICT_V8;
+      subterm3 = K_LL_FRICT_V4; break;
+    default : GMM_ASSERT1(false, "Incorrect option");
+    }
+
+    size_type subterm4 = K_UU_FRICT_V3;
+
+    contact_rigid_obstacle_nonlinear_term
+      nterm1(subterm1, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda,
+             pmf_coeff, f_coeff, alpha, WT, gamma, VT),
+      nterm2(subterm2, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda,
+             pmf_coeff, f_coeff, alpha, WT, gamma, VT),
+      nterm3(subterm3, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda,
+             pmf_coeff, f_coeff, alpha, WT, gamma, VT),
+      nterm4(subterm4, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda,
+             pmf_coeff, f_coeff, alpha, WT, gamma, VT);
+
+    const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4" : "#1,#2,#3";
+
+    getfem::generic_assembly assem;
+    switch (option) {
+    case 1: case 3: case 4:
+      assem.set
+       ("M$1(#1,#3)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1).vBase(#3))(i,j,:,i,:,j); " // UL
+        "M$2(#3,#1)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3).vBase(#1))(i,j,:,j,:,i); " // LU
+        "M$3(#3,#3)+=comp(NonLin$3(#1," + aux_fems + ").vBase(#3).vBase(#3))(i,j,:,i,:,j)"); // LL
+      break;
+    case 2:
+      assem.set
+       ("M$1(#1,#3)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1).vBase(#3))(i,j,:,i,:,j); " // UL
+        "M$2(#3,#1)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3).vBase(#1))(i,j,:,j,:,i); " // LU
+        "M$3(#3,#3)+=comp(NonLin$3(#1," + aux_fems + ").vBase(#3).vBase(#3))(i,j,:,i,:,j);"  // LL
+        "M$4(#1,#1)+=comp(NonLin$4(#1," + aux_fems + ").vBase(#1).vBase(#1))(i,j,:,i,:,j)"); // UU
+      break;
+    }
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_mf(mf_obs);
+    assem.push_mf(mf_lambda);
+    if (pmf_coeff)
+      assem.push_mf(*pmf_coeff);
+    assem.push_nonlinear_term(&nterm1);
+    assem.push_nonlinear_term(&nterm2);
+    assem.push_nonlinear_term(&nterm3);
+    assem.push_nonlinear_term(&nterm4);
+    assem.push_mat(Kul);
+    assem.push_mat(Klu);
+    assem.push_mat(Kll);
+    assem.push_mat(Kuu);
+    assem.assembly(rg);
+  }
+
+  template<typename VECT1>
+  void asm_Alart_Curnier_contact_rigid_obstacle_rhs // frictionless
+  (VECT1 &Ru, VECT1 &Rl,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, const VECT1 &U,
+   const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+   const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+   scalar_type r, const mesh_region &rg, int option = 1) {
+
+    size_type subterm1;
+    switch (option) {
+    case 1 : subterm1 = RHS_U_V1; break;
+    case 2 : subterm1 = RHS_U_V2; break;
+    case 3 : subterm1 = RHS_U_V4; break;
+    default : GMM_ASSERT1(false, "Incorrect option");
+    }
+    size_type subterm2 = (option == 3) ? RHS_L_V2 : RHS_L_V1;
+
+    contact_rigid_obstacle_nonlinear_term
+      nterm1(subterm1, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda),
+      nterm2(subterm2, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda);
+
+    getfem::generic_assembly assem;
+    assem.set("V$1(#1)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#1))(i,:,i); "
+              "V$2(#3)+=comp(NonLin$2(#1,#1,#2,#3).Base(#3))(i,:)");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_mf(mf_obs);
+    assem.push_mf(mf_lambda);
+    assem.push_nonlinear_term(&nterm1);
+    assem.push_nonlinear_term(&nterm2);
+    assem.push_vec(Ru);
+    assem.push_vec(Rl);
+    assem.assembly(rg);
+
+  }
+
+  template<typename VECT1>
+  void asm_Alart_Curnier_contact_rigid_obstacle_rhs // with friction
+  (VECT1 &Ru, VECT1 &Rl,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, const VECT1 &U,
+   const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+   const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+   const getfem::mesh_fem *pmf_coeff, const VECT1 *f_coeff, scalar_type r,
+   scalar_type alpha, const VECT1 *WT,
+   scalar_type gamma, const VECT1 *VT,
+   const mesh_region &rg, int option = 1) {
+
+    size_type subterm1, subterm2;
+    switch (option) {
+    case 1 : subterm1 = RHS_U_FRICT_V1; subterm2 = RHS_L_FRICT_V1; break;
+    case 2 : subterm1 = RHS_U_FRICT_V6; subterm2 = RHS_L_FRICT_V1; break;
+    case 3 : subterm1 = RHS_U_FRICT_V4; subterm2 = RHS_L_FRICT_V2; break;
+    case 4 : subterm1 = RHS_U_FRICT_V5; subterm2 = RHS_L_FRICT_V4; break;
+    default : GMM_ASSERT1(false, "Incorrect option");
+    }
+
+    contact_rigid_obstacle_nonlinear_term
+      nterm1(subterm1, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda,
+             pmf_coeff, f_coeff, alpha, WT, gamma, VT),
+      nterm2(subterm2, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda,
+             pmf_coeff, f_coeff, alpha, WT, gamma, VT);
+
+    const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4" : "#1,#2,#3";
+
+    getfem::generic_assembly assem;
+    assem.set("V$1(#1)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1))(i,:,i); "
+              "V$2(#3)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3))(i,:,i)");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_mf(mf_obs);
+    assem.push_mf(mf_lambda);
+    if (pmf_coeff)
+      assem.push_mf(*pmf_coeff);
+    assem.push_nonlinear_term(&nterm1);
+    assem.push_nonlinear_term(&nterm2);
+    assem.push_vec(Ru);
+    assem.push_vec(Rl);
+    assem.assembly(rg);
+  }
+
+  struct integral_contact_rigid_obstacle_brick : public virtual_brick {
+
+    bool Tresca_version, contact_only;
+    int option;
+
+    // option = 1 : Alart-Curnier
+    // option = 2 : symmetric Alart-Curnier (with friction, almost symmetric),
+    // option = 3 : Unsymmetric method based on augmented multipliers
+    // option = 4 : Unsymmetric method based on augmented multipliers 
+    //              with De-Saxce projection.
+
+    virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version version) const {
+      GMM_ASSERT1(mims.size() == 1,
+                  "Integral contact with rigid obstacle bricks need a single mesh_im");
+      GMM_ASSERT1(vl.size() == 2,
+                  "Integral contact with rigid obstacle bricks need two variables");
+      GMM_ASSERT1(dl.size() >= 2 && dl.size() <= 7,
+                  "Wrong number of data for integral contact with rigid obstacle "
+                  << "brick, " << dl.size() << " should be between 2 and 7.");
+      GMM_ASSERT1(matl.size() == size_type(3 + (option == 2 && !contact_only)),
+                  "Wrong number of terms for "
+                  "integral contact with rigid obstacle brick");
+
+      // variables : u, lambda. The variable lambda should be scalar in the
+      //             frictionless case and vector valued in the case with
+      //             friction.
+      // data      : obstacle, r for the version without friction
+      //           : obstacle, r, friction_coeff, alpha, w_t, gamma, v_t for
+      //             the version with friction. alpha, w_t , gamma and v_t
+      //             are optional and equal to 1, 0, 1 and 0 by default,
+      //             respectively.
+
+      const model_real_plain_vector &u = md.real_variable(vl[0]);
+      const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+      const model_real_plain_vector &lambda = md.real_variable(vl[1]);
+      const mesh_fem &mf_lambda = md.mesh_fem_of_variable(vl[1]);
+      GMM_ASSERT1(mf_lambda.get_qdim() == (contact_only ? 1 : mf_u.get_qdim()),
+                  "The contact stress has not the right dimension");
+      const model_real_plain_vector &obstacle = md.real_variable(dl[0]);
+      const mesh_fem &mf_obstacle = md.mesh_fem_of_variable(dl[0]);
+      size_type sl = gmm::vect_size(obstacle) * mf_obstacle.get_qdim()
+        / mf_obstacle.nb_dof();
+      GMM_ASSERT1(sl == 1, "the data corresponding to the obstacle has not "
+                  "the right format");
+
+      const model_real_plain_vector &vr = md.real_variable(dl[1]);
+      GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+      const mesh_im &mim = *mims[0];
+
+      const model_real_plain_vector &friction_coeff
+        = contact_only ? u : md.real_variable(dl[2]);
+      const mesh_fem *pmf_coeff = contact_only ? 0 : md.pmesh_fem_of_variable(dl[2]);
+      sl = gmm::vect_size(friction_coeff);
+      if (pmf_coeff) { sl *= pmf_coeff->get_qdim(); sl /= pmf_coeff->nb_dof(); }
+      GMM_ASSERT1(sl == 1 || contact_only,
+                  "the data corresponding to the friction coefficient "
+                  "has not the right format");
+
+      scalar_type alpha = 1;
+      if (!contact_only && dl.size() >= 4) {
+        alpha = md.real_variable(dl[3])[0];
+        GMM_ASSERT1(gmm::vect_size(md.real_variable(dl[3])) == 1,
+                    "Parameter alpha should be a scalar");
+      }
+
+      const model_real_plain_vector *WT
+        = (!contact_only && dl.size()>=5) ? &(md.real_variable(dl[4])) : 0;
+
+      scalar_type gamma = 1;
+      if (!contact_only && dl.size() >= 6) {
+        gamma = md.real_variable(dl[5])[0];
+        GMM_ASSERT1(gmm::vect_size(md.real_variable(dl[5])) == 1,
+                    "Parameter gamma should be a scalar");
+      }
+
+      const model_real_plain_vector *VT
+        = (!contact_only && dl.size()>=7) ? &(md.real_variable(dl[6])) : 0;
+
+      mesh_region rg(region);
+      mf_u.linked_mesh().intersect_with_mpi_region(rg);
+
+      if (version & model::BUILD_MATRIX) {
+        GMM_TRACE2("Integral contact with rigid obstacle friction tangent term");
+        gmm::clear(matl[0]); gmm::clear(matl[1]); gmm::clear(matl[2]);
+        if (matl.size() >= 4) gmm::clear(matl[3]);
+        size_type fourthmat = (matl.size() >= 4) ? 3 : 1;
+        if (contact_only)
+          asm_Alart_Curnier_contact_rigid_obstacle_tangent_matrix
+            (matl[0], matl[1], matl[2], matl[fourthmat], mim,
+             mf_u, u, mf_obstacle, obstacle, mf_lambda, lambda, vr[0],
+             rg, option);
+        else
+          asm_Alart_Curnier_contact_rigid_obstacle_tangent_matrix
+            (matl[0], matl[1], matl[2], matl[fourthmat], mim,
+             mf_u, u, mf_obstacle, obstacle, mf_lambda, lambda,
+             pmf_coeff, &friction_coeff, vr[0], alpha, WT, gamma, VT,
+             rg, option);
+      }
+
+      if (version & model::BUILD_RHS) {
+        gmm::clear(vecl[0]); gmm::clear(vecl[1]); gmm::clear(vecl[2]);
+        if (matl.size() >= 4) gmm::clear(vecl[3]);
+
+        if (contact_only)
+          asm_Alart_Curnier_contact_rigid_obstacle_rhs
+            (vecl[0], vecl[2], mim,
+             mf_u, u, mf_obstacle, obstacle, mf_lambda, lambda, vr[0],
+             rg, option);
+        else
+          asm_Alart_Curnier_contact_rigid_obstacle_rhs
+            (vecl[0], vecl[2], mim,
+             mf_u, u, mf_obstacle, obstacle, mf_lambda, lambda,
+             pmf_coeff, &friction_coeff, vr[0], alpha, WT, gamma, VT,
+             rg, option);
+      }
+
+    }
+
+    integral_contact_rigid_obstacle_brick(bool contact_only_, int option_) {
+      Tresca_version = false;   // for future version ...
+      option = option_;
+      contact_only = contact_only_;
+      set_flags(contact_only
+                ? "Integral contact with rigid obstacle brick"
+                : "Integral contact and friction with rigid obstacle brick",
+                false /* is linear*/,
+                (option==2) && contact_only /* is symmetric */,
+                false /* is coercive */,
+                true /* is real */, false /* is complex */);
+    }
+
+  };
+
+
+  //=========================================================================
+  //  Add a frictionless contact condition with a rigid obstacle given
+  //  by a level set.
+  //=========================================================================
+
+  size_type add_integral_contact_with_rigid_obstacle_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &multname_n, const std::string &dataname_obs,
+   const std::string &dataname_r, size_type region, int option) {
+
+    pbrick pbr = new integral_contact_rigid_obstacle_brick(true, option);
+
+    model::termlist tl;
+
+    switch (option) {
+    case 1 : case 3 :
+      tl.push_back(model::term_description(varname_u, multname_n, false)); // UL
+      tl.push_back(model::term_description(multname_n, varname_u, false)); // LU
+      tl.push_back(model::term_description(multname_n, multname_n, true)); // LL
+      break;
+    case 2 :
+      tl.push_back(model::term_description(varname_u, multname_n, true));  // UL
+      tl.push_back(model::term_description(varname_u, varname_u, true));   // UU (fourthmat == 1)
+      tl.push_back(model::term_description(multname_n, multname_n, true)); // LL
+      break;
+    default :GMM_ASSERT1(false,
+                         "Incorrect option for integral contact brick");
+
+    }
+    model::varnamelist dl(1, dataname_obs);
+    dl.push_back(dataname_r);
+
+    model::varnamelist vl(1, varname_u);
+    vl.push_back(multname_n);
+
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+  }
+
+
+  //=========================================================================
+  //  Add a contact condition with Coulomb friction with a rigid obstacle
+  //  given by a level set.
+  //=========================================================================
+
+  size_type add_integral_contact_with_rigid_obstacle_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &multname, const std::string &dataname_obs,
+   const std::string &dataname_r, const std::string &dataname_friction_coeff,
+   size_type region, int option,
+   const std::string &dataname_alpha, const std::string &dataname_wt,
+   const std::string &dataname_gamma, const std::string &dataname_vt) {
+
+    pbrick pbr
+      = new integral_contact_rigid_obstacle_brick(false, option);
+
+    model::termlist tl;
+
+    switch (option) {
+    case 1: case 3: case 4:
+      tl.push_back(model::term_description(varname_u, multname, false)); // UL
+      tl.push_back(model::term_description(multname, varname_u, false)); // LU
+      tl.push_back(model::term_description(multname, multname, true));   // LL
+      break;
+    case 2:
+      tl.push_back(model::term_description(varname_u, multname, false)); // UL
+      tl.push_back(model::term_description(multname, varname_u, false)); // LU
+      tl.push_back(model::term_description(multname, multname, true));   // LL
+      tl.push_back(model::term_description(varname_u, varname_u, true)); // UU
+      break;
+    default :GMM_ASSERT1(false,
+                         "Incorrect option for integral contact brick");
+    }
+    model::varnamelist dl(1, dataname_obs);
+    dl.push_back(dataname_r);
+    dl.push_back(dataname_friction_coeff);
+    if (dataname_alpha.size()) {
+      dl.push_back(dataname_alpha);
+      if (dataname_wt.size()) {
+        dl.push_back(dataname_wt);
+        if (dataname_gamma.size()) {
+          dl.push_back(dataname_gamma);
+          if (dataname_vt.size()) dl.push_back(dataname_vt);
+        }
+      }
+    }
+
+    model::varnamelist vl(1, varname_u);
+    vl.push_back(multname);
+
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+  }
+
+
+  //=========================================================================
+  //
+  //  Integral penalized contact with friction (given obstacle, u, lambda).
+  //
+  //=========================================================================
+
+  template<typename MAT, typename VECT1>
+  void asm_penalized_contact_rigid_obstacle_tangent_matrix // frictionless
+  (MAT &Kuu,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, const VECT1 &U,
+   const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+   const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+   scalar_type r, const mesh_region &rg, int option = 1) {
+
+    contact_rigid_obstacle_nonlinear_term
+      nterm((option == 1) ? K_UU_V1 : K_UU_V2, r,
+            mf_u, U, mf_obs, obs, pmf_lambda, lambda);
+
+    const std::string aux_fems = pmf_lambda ? "#1,#2,#3": "#1,#2";
+    getfem::generic_assembly assem;
+    assem.set("M(#1,#1)+=comp(NonLin(#1," + aux_fems + ").vBase(#1).vBase(#1))(i,j,:,i,:,j)");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_mf(mf_obs);
+    if (pmf_lambda)
+      assem.push_mf(*pmf_lambda);
+    assem.push_nonlinear_term(&nterm);
+    assem.push_mat(Kuu);
+    assem.assembly(rg);
+  }
+
+
+  template<typename VECT1>
+  void asm_penalized_contact_rigid_obstacle_rhs // frictionless
+  (VECT1 &Ru,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, const VECT1 &U,
+   const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+   const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+   scalar_type r, const mesh_region &rg, int option = 1) {
+
+    contact_rigid_obstacle_nonlinear_term
+      nterm((option == 1) ? RHS_U_V5 : RHS_U_V2, r,
+            mf_u, U, mf_obs, obs, pmf_lambda, lambda);
+
+    const std::string aux_fems = pmf_lambda ? "#1,#2,#3": "#1,#2";
+    getfem::generic_assembly assem;
+    assem.set("V(#1)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1))(i,:,i); ");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_mf(mf_obs);
+    if (pmf_lambda)
+      assem.push_mf(*pmf_lambda);
+    assem.push_nonlinear_term(&nterm);
+    assem.push_vec(Ru);
+    assem.assembly(rg);
+  }
+
+  template<typename MAT, typename VECT1>
+  void asm_penalized_contact_rigid_obstacle_tangent_matrix // with friction
+  (MAT &Kuu,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, const VECT1 &U,
+   const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+   const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+   const getfem::mesh_fem *pmf_coeff, const VECT1 *f_coeff, scalar_type r,
+   scalar_type alpha, const VECT1 *WT,
+   const mesh_region &rg, int option = 1) {
+
+    size_type subterm = 0;
+    switch (option) {
+    case 1 : subterm =  K_UU_FRICT_V4; break;
+    case 2 : subterm =  K_UU_FRICT_V3; break;
+    case 3 : subterm =  K_UU_FRICT_V5; break;
+    }
+
+    contact_rigid_obstacle_nonlinear_term
+      nterm(subterm, r, mf_u, U, mf_obs, obs, pmf_lambda, lambda,
+            pmf_coeff, f_coeff, alpha, WT);
+
+    const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4"
+                                           : (pmf_lambda ? "#1,#2,#3": "#1,#2");
+    getfem::generic_assembly assem;
+    assem.set("M(#1,#1)+=comp(NonLin(#1," + aux_fems + ").vBase(#1).vBase(#1))(i,j,:,i,:,j)");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_mf(mf_obs);
+
+    if (pmf_lambda)
+      assem.push_mf(*pmf_lambda);
+    else if (pmf_coeff)
+      assem.push_mf(*pmf_coeff); // dummy
+
+    if (pmf_coeff)
+      assem.push_mf(*pmf_coeff);
+
+    assem.push_nonlinear_term(&nterm);
+    assem.push_mat(Kuu);
+    assem.assembly(rg);
+  }
+
+
+  template<typename VECT1>
+  void asm_penalized_contact_rigid_obstacle_rhs // with friction
+  (VECT1 &Ru,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, const VECT1 &U,
+   const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+   const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+   const getfem::mesh_fem *pmf_coeff, const VECT1 *f_coeff, scalar_type r,
+   scalar_type alpha, const VECT1 *WT,
+   const mesh_region &rg, int option = 1) {
+
+    size_type subterm = 0;
+    switch (option) {
+    case 1 : subterm =  RHS_U_FRICT_V7; break;
+    case 2 : subterm =  RHS_U_FRICT_V6; break;
+    case 3 : subterm =  RHS_U_FRICT_V8; break;
+    }
+
+    contact_rigid_obstacle_nonlinear_term
+      nterm(subterm, r, mf_u, U, mf_obs, obs, pmf_lambda, lambda,
+            pmf_coeff, f_coeff, alpha, WT);
+
+    const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4"
+                                           : (pmf_lambda ? "#1,#2,#3": "#1,#2");
+    getfem::generic_assembly assem;
+    assem.set("V(#1)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1))(i,:,i); ");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_mf(mf_obs);
+
+    if (pmf_lambda)
+      assem.push_mf(*pmf_lambda);
+    else if (pmf_coeff)
+      assem.push_mf(*pmf_coeff); // dummy
+
+    if (pmf_coeff)
+      assem.push_mf(*pmf_coeff);
+
+    assem.push_nonlinear_term(&nterm);
+    assem.push_vec(Ru);
+    assem.assembly(rg);
+  }
+
+
+  struct penalized_contact_rigid_obstacle_brick : public virtual_brick {
+
+    bool Tresca_version, contact_only;
+    int option;
+
+    virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version version) const {
+      // Integration method
+      GMM_ASSERT1(mims.size() == 1,
+                  "Penalized contact with rigid obstacle bricks need a single mesh_im");
+      const mesh_im &mim = *mims[0];
+
+      // Variables : u
+      GMM_ASSERT1(vl.size() == 1,
+                  "Penalized contact with rigid obstacle bricks need a single variable");
+      const model_real_plain_vector &u = md.real_variable(vl[0]);
+      const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+
+      size_type N = mf_u.linked_mesh().dim();
+
+      // Data : obs, r, [lambda,] [friction_coeff,] [alpha,] [WT]
+      size_type nb_data_1 = ((option == 1) ? 2 : 3) + (contact_only ? 0 : 1);
+      size_type nb_data_2 = nb_data_1 + (contact_only ? 0 : 2);
+      GMM_ASSERT1(dl.size() >= nb_data_1 && dl.size() <= nb_data_2,
+                  "Wrong number of data for penalized contact with rigid obstacle  "
+                  << "brick, " << dl.size() << " should be between "
+                  << nb_data_1 << " and " << nb_data_2 << ".");
+
+      size_type nd = 0;
+      const model_real_plain_vector &obs = md.real_variable(dl[nd]);
+      const mesh_fem &mf_obs = md.mesh_fem_of_variable(dl[nd]);
+      size_type sl = gmm::vect_size(obs) * mf_obs.get_qdim() / mf_obs.nb_dof();
+      GMM_ASSERT1(sl == 1, "the data corresponding to the obstacle has not "
+                  "the right format");
+
+      nd++;
+      const model_real_plain_vector &vr = md.real_variable(dl[nd]);
+      GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+
+      const model_real_plain_vector *lambda = 0;
+      const mesh_fem *pmf_lambda = 0;
+      if (option != 1) {
+        nd++;
+        lambda = &(md.real_variable(dl[nd]));
+        pmf_lambda = md.pmesh_fem_of_variable(dl[nd]);
+        sl = gmm::vect_size(*lambda) * pmf_lambda->get_qdim() / pmf_lambda->nb_dof();
+        GMM_ASSERT1(sl == (contact_only ? 1 : N),
+                    "the data corresponding to the contact stress "
+                    "has not the right format");
+      }
+
+      const model_real_plain_vector *f_coeff = 0;
+      const mesh_fem *pmf_coeff = 0;
+      scalar_type alpha = 1;
+      const model_real_plain_vector *WT = 0;
+      if (!contact_only) {
+        nd++;
+        f_coeff = &(md.real_variable(dl[nd]));
+        pmf_coeff = md.pmesh_fem_of_variable(dl[nd]);
+        sl = gmm::vect_size(*f_coeff);
+        if (pmf_coeff) { sl *= pmf_coeff->get_qdim(); sl /= pmf_coeff->nb_dof(); }
+        GMM_ASSERT1(sl == 1,
+                    "the data corresponding to the friction coefficient "
+                    "has not the right format");
+        if (dl.size() > nd+1) {
+          nd++;
+          alpha = md.real_variable(dl[nd])[0];
+          GMM_ASSERT1(gmm::vect_size(md.real_variable(dl[nd])) == 1,
+                      "Parameter alpha should be a scalar");
+        }
+
+        if (dl.size() > nd+1) {
+          nd++;
+          WT = &(md.real_variable(dl[nd]));
+        }
+      }
+
+      GMM_ASSERT1(matl.size() == 1, "Wrong number of terms for "
+                  "penalized contact with rigid obstacle brick");
+
+      mesh_region rg(region);
+      mf_u.linked_mesh().intersect_with_mpi_region(rg);
+
+      if (version & model::BUILD_MATRIX) {
+        GMM_TRACE2("Penalized contact with rigid obstacle tangent term");
+        gmm::clear(matl[0]);
+        if (contact_only)
+          asm_penalized_contact_rigid_obstacle_tangent_matrix
+            (matl[0], mim, mf_u, u, mf_obs, obs, pmf_lambda, lambda,
+             vr[0], rg, option);
+        else
+          asm_penalized_contact_rigid_obstacle_tangent_matrix
+            (matl[0], mim, mf_u, u, mf_obs, obs, pmf_lambda, lambda,
+             pmf_coeff, f_coeff, vr[0], alpha, WT, rg, option);
+      }
+
+      if (version & model::BUILD_RHS) {
+        gmm::clear(vecl[0]);
+        if (contact_only)
+          asm_penalized_contact_rigid_obstacle_rhs
+            (vecl[0], mim, mf_u, u, mf_obs, obs, pmf_lambda, lambda,
+             vr[0], rg, option);
+        else
+          asm_penalized_contact_rigid_obstacle_rhs
+            (vecl[0], mim, mf_u, u, mf_obs, obs, pmf_lambda, lambda,
+             pmf_coeff, f_coeff, vr[0], alpha, WT, rg, option);
+      }
+
+    }
+
+    penalized_contact_rigid_obstacle_brick(bool contact_only_, int option_) {
+      Tresca_version = false;   // for future version ...
+      contact_only = contact_only_;
+      option = option_;
+      set_flags(contact_only
+                ? "Integral penalized contact with rigid obstacle brick"
+                : "Integral penalized contact and friction with rigid obstacle brick",
+                false /* is linear*/, contact_only /* is symmetric */,
+                true /* is coercive */, true /* is real */,
+                false /* is complex */);
+    }
+
+  };
+
+
+  //=========================================================================
+  //  Add a frictionless contact condition with a rigid obstacle given
+  //  by a level set.
+  //=========================================================================
+
+  size_type add_penalized_contact_with_rigid_obstacle_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &dataname_obs, const std::string &dataname_r,
+   size_type region, int option, const std::string &dataname_n) {
+
+    pbrick pbr = new penalized_contact_rigid_obstacle_brick(true, option);
+
+    model::termlist tl;
+    tl.push_back(model::term_description(varname_u, varname_u, true));
+
+    model::varnamelist dl(1, dataname_obs);
+    dl.push_back(dataname_r);
+    switch (option) {
+    case 1: break;
+    case 2: dl.push_back(dataname_n); break;
+    default: GMM_ASSERT1(false, "Penalized contact brick : invalid option");
+    }
+
+    model::varnamelist vl(1, varname_u);
+
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+  }
+
+  //=========================================================================
+  //  Add a contact condition with friction with a rigid obstacle given
+  //  by a level set.
+  //=========================================================================
+
+  size_type add_penalized_contact_with_rigid_obstacle_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &dataname_obs, const std::string &dataname_r,
+   const std::string &dataname_friction_coeff,
+   size_type region, int option, const std::string &dataname_lambda,
+   const std::string &dataname_alpha, const std::string &dataname_wt) {
+
+    pbrick pbr = new penalized_contact_rigid_obstacle_brick(false, option);
+
+    model::termlist tl;
+    tl.push_back(model::term_description(varname_u, varname_u, false));
+
+    model::varnamelist dl(1, dataname_obs);
+    dl.push_back(dataname_r);
+    switch (option) {
+    case 1: break;
+    case 2: case 3: dl.push_back(dataname_lambda); break;
+    default: GMM_ASSERT1(false, "Penalized contact brick : invalid option");
+    }
+    dl.push_back(dataname_friction_coeff);
+    if (dataname_alpha.size() > 0) {
+      dl.push_back(dataname_alpha);
+      if (dataname_wt.size() > 0) dl.push_back(dataname_wt);
+    }
+
+    model::varnamelist vl(1, varname_u);
+
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+  }
+
+
+  //=========================================================================
+  //
+  //  Integral contact (with friction) between non-matching meshes.
+  //
+  //=========================================================================
+
+  template<typename MAT, typename VEC>
+  void asm_Alart_Curnier_contact_nonmatching_meshes_tangent_matrix // frictionless
+  (MAT &Ku1l, MAT &Klu1, MAT &Ku2l, MAT &Klu2, MAT &Kll,
+   MAT &Ku1u1, MAT &Ku2u2, MAT &Ku1u2,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u1, const VEC &U1,
+   const getfem::mesh_fem &mf_u2, const VEC &U2,
+   const getfem::mesh_fem &mf_lambda, const VEC &lambda,
+   scalar_type r, const mesh_region &rg, int option = 1) {
+
+    size_type subterm1 = (option == 3) ? K_UL_V2 : K_UL_V1;
+    size_type subterm2 = (option == 3) ? K_UL_V4 : K_UL_V3;
+    size_type subterm3 = (option == 3) ? K_LL_V2 : K_LL_V1;
+    size_type subterm4 = (option == 2) ? K_UU_V2 : K_UU_V1;
+
+    contact_nonmatching_meshes_nonlinear_term
+      nterm1(subterm1, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda),
+      nterm2(subterm2, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda),
+      nterm3(subterm3, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda),
+      nterm4(subterm4, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda);
+
+    getfem::generic_assembly assem;
+    switch (option) {
+    case 1: case 3:
+      assem.set
+       ("M$1(#1,#3)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#1).Base(#3))(i,:,i,:); " // U1L
+        "M$2(#3,#1)+=comp(NonLin$2(#1,#1,#2,#3).Base(#3).vBase(#1))(i,:,:,i); " // LU1
+        "M$3(#2,#3)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#2).Base(#3))(i,:,i,:); " // U2L
+        "M$4(#3,#2)+=comp(NonLin$2(#1,#1,#2,#3).Base(#3).vBase(#2))(i,:,:,i); " // LU2
+        "M$5(#3,#3)+=comp(NonLin$3(#1,#1,#2,#3).Base(#3).Base(#3))(i,:,:)");    // LL
+      break;
+    case 2:
+      assem.set
+       ("M$1(#1,#3)+=comp(NonLin$2(#1,#1,#2,#3).vBase(#1).Base(#3))(i,:,i,:); "      // U1L
+        "M$3(#2,#3)+=comp(NonLin$2(#1,#1,#2,#3).vBase(#2).Base(#3))(i,:,i,:); "      // U2L
+        "M$5(#3,#3)+=comp(NonLin$3(#1,#1,#2,#3).Base(#3).Base(#3))(i,:,:); "         // LL
+        "M$6(#1,#1)+=comp(NonLin$4(#1,#1,#2,#3).vBase(#1).vBase(#1))(i,j,:,i,:,j); " // U1U1
+        "M$7(#2,#2)+=comp(NonLin$4(#1,#1,#2,#3).vBase(#2).vBase(#2))(i,j,:,i,:,j); " // U2U2
+        "M$8(#1,#2)+=comp(NonLin$4(#1,#1,#2,#3).vBase(#1).vBase(#2))(i,j,:,i,:,j)"); // U1U2
+      break;
+    }
+    assem.push_mi(mim);
+    assem.push_mf(mf_u1);
+    assem.push_mf(mf_u2);
+    assem.push_mf(mf_lambda);
+    assem.push_nonlinear_term(&nterm1);
+    assem.push_nonlinear_term(&nterm2);
+    assem.push_nonlinear_term(&nterm3);
+    assem.push_nonlinear_term(&nterm4);
+    assem.push_mat(Ku1l);
+    assem.push_mat(Klu1);
+    assem.push_mat(Ku2l);
+    assem.push_mat(Klu2);
+    assem.push_mat(Kll);
+    assem.push_mat(Ku1u1);
+    assem.push_mat(Ku2u2);
+    assem.push_mat(Ku1u2);
+    assem.assembly(rg);
+
+    gmm::scale(Ku2l, scalar_type(-1));
+    if (option != 2) // Klu2 was calculated
+      gmm::scale(Klu2, scalar_type(-1));
+    gmm::scale(Ku1u2, scalar_type(-1));
+  }
+
+  template<typename MAT, typename VEC>
+  void asm_Alart_Curnier_contact_nonmatching_meshes_tangent_matrix // with friction
+  (MAT &Ku1l, MAT &Klu1, MAT &Ku2l, MAT &Klu2, MAT &Kll,
+   MAT &Ku1u1, MAT &Ku2u2, MAT &Ku1u2,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u1, const VEC &U1,
+   const getfem::mesh_fem &mf_u2, const VEC &U2,
+   const getfem::mesh_fem &mf_lambda, const VEC &lambda,
+   const getfem::mesh_fem *pmf_coeff, const VEC *f_coeff,
+   scalar_type r, scalar_type alpha,
+   const VEC *WT1, const VEC *WT2,
+   const mesh_region &rg, int option = 1) {
+
+    size_type subterm1, subterm2, subterm3;
+    switch (option) {
+    case 1 :
+      subterm1 = K_UL_FRICT_V1; subterm2 = K_UL_FRICT_V4; subterm3 = K_LL_FRICT_V1;
+      break;
+    case 2 :
+      subterm1 = K_UL_FRICT_V3; subterm2 = K_UL_FRICT_V4; subterm3 = K_LL_FRICT_V1;
+      break;
+    case 3 :
+      subterm1 = K_UL_FRICT_V2; subterm2 = K_UL_FRICT_V5; subterm3 = K_LL_FRICT_V2;
+      break;
+    case 4 :
+      subterm1 = K_UL_FRICT_V7; subterm2 = K_UL_FRICT_V8; subterm3 = K_LL_FRICT_V4;
+      break;
+    default : GMM_ASSERT1(false, "Incorrect option");
+    }
+
+    size_type subterm4 = K_UU_FRICT_V3;
+
+    contact_nonmatching_meshes_nonlinear_term
+      nterm1(subterm1, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda,
+             pmf_coeff, f_coeff, alpha, WT1, WT2),
+      nterm2(subterm2, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda,
+             pmf_coeff, f_coeff, alpha, WT1, WT2),
+      nterm3(subterm3, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda,
+             pmf_coeff, f_coeff, alpha, WT1, WT2),
+      nterm4(subterm4, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda,
+             pmf_coeff, f_coeff, alpha, WT1, WT2);
+
+    const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4" : "#1,#2,#3";
+
+    getfem::generic_assembly assem;
+    switch (option) {
+    case 1: case 3: case 4:
+      assem.set
+       ("M$1(#1,#3)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1).vBase(#3))(i,j,:,i,:,j); " // U1L
+        "M$2(#3,#1)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3).vBase(#1))(i,j,:,j,:,i); " // LU1
+        "M$3(#2,#3)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#2).vBase(#3))(i,j,:,i,:,j); " // U2L
+        "M$4(#3,#2)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3).vBase(#2))(i,j,:,j,:,i); " // LU2
+        "M$5(#3,#3)+=comp(NonLin$3(#1," + aux_fems + ").vBase(#3).vBase(#3))(i,j,:,i,:,j)"); // LL
+      break;
+    case 2:
+      assem.set
+       ("M$1(#1,#3)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1).vBase(#3))(i,j,:,i,:,j); " // U1L
+        "M$2(#3,#1)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3).vBase(#1))(i,j,:,j,:,i); " // LU1
+        "M$3(#2,#3)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#2).vBase(#3))(i,j,:,i,:,j); " // U2L
+        "M$4(#3,#2)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3).vBase(#2))(i,j,:,j,:,i); " // LU2
+        "M$5(#3,#3)+=comp(NonLin$3(#1," + aux_fems + ").vBase(#3).vBase(#3))(i,j,:,i,:,j); " // LL
+        "M$6(#1,#1)+=comp(NonLin$4(#1," + aux_fems + ").vBase(#1).vBase(#1))(i,j,:,i,:,j); " // U1U1
+        "M$7(#2,#2)+=comp(NonLin$4(#1," + aux_fems + ").vBase(#2).vBase(#2))(i,j,:,i,:,j); " // U2U2
+        "M$8(#1,#2)+=comp(NonLin$4(#1," + aux_fems + ").vBase(#1).vBase(#2))(i,j,:,i,:,j)"); // U1U2
+      break;
+    }
+    assem.push_mi(mim);
+    assem.push_mf(mf_u1);
+    assem.push_mf(mf_u2);
+    assem.push_mf(mf_lambda);
+    if (pmf_coeff)
+      assem.push_mf(*pmf_coeff);
+    assem.push_nonlinear_term(&nterm1);
+    assem.push_nonlinear_term(&nterm2);
+    assem.push_nonlinear_term(&nterm3);
+    assem.push_nonlinear_term(&nterm4);
+    assem.push_mat(Ku1l);
+    assem.push_mat(Klu1);
+    assem.push_mat(Ku2l);
+    assem.push_mat(Klu2);
+    assem.push_mat(Kll);
+    assem.push_mat(Ku1u1);
+    assem.push_mat(Ku2u2);
+    assem.push_mat(Ku1u2);
+    assem.assembly(rg);
+
+    gmm::scale(Ku2l, scalar_type(-1));
+    gmm::scale(Klu2, scalar_type(-1));
+    gmm::scale(Ku1u2, scalar_type(-1));
+  }
+
+  template<typename VECT1>
+  void asm_Alart_Curnier_contact_nonmatching_meshes_rhs // frictionless
+  (VECT1 &Ru1, VECT1 &Ru2, VECT1 &Rl,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u1, const VECT1 &U1,
+   const getfem::mesh_fem &mf_u2, const VECT1 &U2,
+   const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+   scalar_type r, const mesh_region &rg, int option = 1) {
+
+    size_type subterm1;
+    switch (option) {
+    case 1 : subterm1 = RHS_U_V1; break;
+    case 2 : subterm1 = RHS_U_V2; break;
+    case 3 : subterm1 = RHS_U_V4; break;
+    default : GMM_ASSERT1(false, "Incorrect option");
+    }
+    size_type subterm2 = (option == 3) ? RHS_L_V2 : RHS_L_V1;
+
+    contact_nonmatching_meshes_nonlinear_term
+      nterm1(subterm1, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda),
+      nterm2(subterm2, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda);
+
+    getfem::generic_assembly assem;
+    assem.set("V$1(#1)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#1))(i,:,i); "
+              "V$2(#2)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#2))(i,:,i); "
+              "V$3(#3)+=comp(NonLin$2(#1,#1,#2,#3).Base(#3))(i,:)");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u1);
+    assem.push_mf(mf_u2);
+    assem.push_mf(mf_lambda);
+    assem.push_nonlinear_term(&nterm1);
+    assem.push_nonlinear_term(&nterm2);
+    assem.push_vec(Ru1);
+    assem.push_vec(Ru2);
+    assem.push_vec(Rl);
+    assem.assembly(rg);
+
+    gmm::scale(Ru2, scalar_type(-1));
+  }
+
+  template<typename VECT1>
+  void asm_Alart_Curnier_contact_nonmatching_meshes_rhs // with friction
+  (VECT1 &Ru1, VECT1 &Ru2, VECT1 &Rl,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u1, const VECT1 &U1,
+   const getfem::mesh_fem &mf_u2, const VECT1 &U2,
+   const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+   const getfem::mesh_fem *pmf_coeff, const VECT1 *f_coeff,
+   scalar_type r, scalar_type alpha,
+   const VECT1 *WT1, const VECT1 *WT2,
+   const mesh_region &rg, int option = 1) {
+
+    size_type subterm1, subterm2;
+    switch (option) {
+    case 1 : subterm1 = RHS_U_FRICT_V1; subterm2 = RHS_L_FRICT_V1; break;
+    case 2 : subterm1 = RHS_U_FRICT_V6; subterm2 = RHS_L_FRICT_V1; break;
+    case 3 : subterm1 = RHS_U_FRICT_V4; subterm2 = RHS_L_FRICT_V2; break;
+    case 4 : subterm1 = RHS_U_FRICT_V5; subterm2 = RHS_L_FRICT_V4; break;
+    default : GMM_ASSERT1(false, "Incorrect option");
+    }
+
+    contact_nonmatching_meshes_nonlinear_term
+      nterm1(subterm1, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda,
+             pmf_coeff, f_coeff, alpha, WT1, WT2),
+      nterm2(subterm2, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda,
+             pmf_coeff, f_coeff, alpha, WT1, WT2);
+
+    const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4" : "#1,#2,#3";
+
+    getfem::generic_assembly assem;
+    assem.set("V$1(#1)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1))(i,:,i); "
+              "V$2(#2)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#2))(i,:,i); "
+              "V$3(#3)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3))(i,:,i)");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u1);
+    assem.push_mf(mf_u2);
+    assem.push_mf(mf_lambda);
+    if (pmf_coeff)
+      assem.push_mf(*pmf_coeff);
+    assem.push_nonlinear_term(&nterm1);
+    assem.push_nonlinear_term(&nterm2);
+    assem.push_vec(Ru1);
+    assem.push_vec(Ru2);
+    assem.push_vec(Rl);
+    assem.assembly(rg);
+
+    gmm::scale(Ru2, scalar_type(-1));
+  }
+
+  struct integral_contact_nonmatching_meshes_brick : public virtual_brick {
+
+    size_type rg1, rg2; // ids of mesh regions on mf_u1 and mf_u2 that are
+                        // expected to come in contact.
+    mutable getfem::pfem pfem_proj;        // cached fem and mesh_fem for the
+    mutable getfem::mesh_fem *pmf_u2_proj; // projection between nonmatching meshes
+    bool Tresca_version, contact_only;
+    int option;
+
+    // option = 1 : Alart-Curnier
+    // option = 2 : symmetric Alart-Curnier (almost symmetric with friction)
+    // option = 3 : New method
+    // option = 4 : New method based on De-Saxce.
+
+    virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version version) const {
+      // Integration method
+      GMM_ASSERT1(mims.size() == 1,
+                  "Integral contact between nonmatching meshes bricks need a single mesh_im");
+      const mesh_im &mim = *mims[0];
+
+      // Variables : u1, u2, lambda
+      //       the variable lambda should be scalar in the frictionless
+      //       case and vector valued in the case with friction.
+      GMM_ASSERT1(vl.size() == 3,
+                  "Integral contact between nonmatching meshes bricks need three variables");
+      const model_real_plain_vector &u1 = md.real_variable(vl[0]);
+      const model_real_plain_vector &u2 = md.real_variable(vl[1]);
+      const mesh_fem &mf_u1 = md.mesh_fem_of_variable(vl[0]);
+      const mesh_fem &mf_u2 = md.mesh_fem_of_variable(vl[1]);
+      const model_real_plain_vector &lambda = md.real_variable(vl[2]);
+      const mesh_fem &mf_lambda = md.mesh_fem_of_variable(vl[2]);
+      GMM_ASSERT1(mf_lambda.get_qdim() == (contact_only ? 1 : mf_u1.get_qdim()),
+                  "The contact stress variable has not the right dimension");
+
+      // Data : r, [friction_coeff,] [alpha,] [WT1, WT2]
+      //     alpha, WT1, WT2 are optional and equal to 1, 0 and 0 by default respectively.
+      if (contact_only) {
+        GMM_ASSERT1(dl.size() == 1,
+                    "Wrong number of data for integral contact between nonmatching meshes "
+                    << "brick, the number of data should be equal to 1 .");
+      }
+      else {
+        GMM_ASSERT1(dl.size() >= 2 && dl.size() <= 5,
+                    "Wrong number of data for integral contact between nonmatching meshes "
+                    << "brick, it should be between 2 and 5 instead of "  << dl.size() << " .");
+      }
+      const model_real_plain_vector &vr = md.real_variable(dl[0]);
+      GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+
+      const model_real_plain_vector *f_coeff = 0, *WT1 = 0, *WT2 = 0;
+      const mesh_fem *pmf_coeff = 0;
+      scalar_type alpha = 1;
+      if (!contact_only) {
+        f_coeff = &(md.real_variable(dl[1]));
+        pmf_coeff = md.pmesh_fem_of_variable(dl[1]);
+
+        size_type sl = gmm::vect_size(*f_coeff);
+        if (pmf_coeff) { sl *= pmf_coeff->get_qdim(); sl /= pmf_coeff->nb_dof(); }
+        GMM_ASSERT1(sl == 1,
+                    "the data corresponding to the friction coefficient "
+                    "has not the right format");
+
+        if (dl.size() >= 3) {
+          alpha = md.real_variable(dl[2])[0];
+          GMM_ASSERT1(gmm::vect_size(md.real_variable(dl[2])) == 1,
+                      "Parameter alpha should be a scalar");
+        }
+
+        if (dl.size() >= 4)
+          WT1 = &(md.real_variable(dl[3]));
+
+        if (dl.size() >= 5)
+          WT2 = &(md.real_variable(dl[4]));
+      }
+
+      // Matrix terms (T_u1l, T_lu1, T_u2l, T_lu2, T_ll, T_u1u1, T_u2u2, T_u1u2)
+      GMM_ASSERT1(matl.size() == size_type(3 +                                // U1L, U2L, LL
+                                           2 * !is_symmetric() +              // LU1, LU2
+                                           3 * (option == 2)), // U1U1, U2U2, U1U2
+                  "Wrong number of terms for "
+                  "integral contact between nonmatching meshes brick");
+
+      mesh_region rg(region);
+      mf_u1.linked_mesh().intersect_with_mpi_region(rg);
+
+      size_type N = mf_u1.linked_mesh().dim();
+
+      // projection of the second mesh_fem onto the mesh of the first mesh_fem
+      if (!pmf_u2_proj) {
+        pmf_u2_proj = new getfem::mesh_fem(mim.linked_mesh(), dim_type(N));
+        pfem_proj = new_projected_fem(mf_u2, mim, rg2, rg1);
+        pmf_u2_proj->set_finite_element(mim.linked_mesh().convex_index(), pfem_proj);
+      }
+
+      size_type nbdof1 = mf_u1.nb_dof();
+      size_type nbdof_lambda = mf_lambda.nb_dof();
+      size_type nbdof2 = mf_u2.nb_dof();
+      size_type nbsub = pmf_u2_proj->nb_basic_dof();
+
+      std::vector<size_type> ind;
+      pmf_u2_proj->get_global_dof_index(ind);
+      gmm::unsorted_sub_index SUBI(ind);
+
+      gmm::csc_matrix<scalar_type> Rsub(nbdof2, nbsub), Esub(nbsub, nbdof2);
+      if (mf_u2.is_reduced()) {
+          gmm::copy(gmm::sub_matrix(mf_u2.reduction_matrix(),
+                                    gmm::sub_interval(0, nbdof2), SUBI),
+                    Rsub);
+          gmm::copy(gmm::sub_matrix(mf_u2.extension_matrix(),
+                                    SUBI, gmm::sub_interval(0, nbdof2)),
+                    Esub);
+      }
+
+      model_real_plain_vector u2_proj(nbsub);
+      if (mf_u2.is_reduced())
+        gmm::mult(Esub, u2, u2_proj);
+      else
+        gmm::copy(gmm::sub_vector(u2, SUBI), u2_proj);
+
+      size_type U1L = 0;
+      size_type LU1 = U1L + (is_symmetric() ? 0 : 1);
+      size_type U2L = LU1 + 1;
+      size_type LU2 = U2L + (is_symmetric() ? 0 : 1);
+      size_type LL  = LU2 + 1;
+      size_type U1U1 = (option == 1 || option == 3) ? U1L : LL + 1;
+      size_type U2U2 = (option == 1 || option == 3) ? U2L : LL + 2;
+      size_type U1U2 = (option == 1 || option == 3) ? U1L : LL + 3;
+
+      if (version & model::BUILD_MATRIX) {
+        GMM_TRACE2("Integral contact between nonmatching meshes "
+                   "tangent term");
+        for (size_type i = 0; i < matl.size(); i++) gmm::clear(matl[i]);
+
+        model_real_sparse_matrix Ku2l(nbsub, nbdof_lambda);
+        model_real_sparse_matrix Klu2(nbdof_lambda, nbsub);
+        model_real_sparse_matrix Ku2u2(nbsub, nbsub);
+        model_real_sparse_matrix Ku1u2(nbdof1, nbsub);
+
+        if (contact_only)
+          asm_Alart_Curnier_contact_nonmatching_meshes_tangent_matrix
+            (matl[U1L], matl[LU1], Ku2l, Klu2, matl[LL], matl[U1U1], Ku2u2, Ku1u2,
+             mim, mf_u1, u1, *pmf_u2_proj, u2_proj, mf_lambda, lambda,
+             vr[0], rg, option);
+        else
+          asm_Alart_Curnier_contact_nonmatching_meshes_tangent_matrix
+            (matl[U1L], matl[LU1], Ku2l, Klu2, matl[LL], matl[U1U1], Ku2u2, Ku1u2,
+             mim, mf_u1, u1, *pmf_u2_proj, u2_proj, mf_lambda, lambda,
+             pmf_coeff, f_coeff, vr[0], alpha, WT1, WT2, rg, option);
+
+        if (mf_u2.is_reduced()) {
+          gmm::mult(Rsub, Ku2l, matl[U2L]);
+          if (LU2 != U2L) gmm::mult(Klu2, Esub, matl[LU2]);
+          if (U2U2 != U2L) {
+            model_real_sparse_matrix tmp(nbsub, nbdof2);
+            gmm::mult(Ku2u2, Esub, tmp);
+            gmm::mult(Rsub, tmp, matl[U2U2]);
+            gmm::mult(Ku1u2, Esub, matl[U1U2]);
+          }
+        }
+        else {
+          gmm::copy(Ku2l, gmm::sub_matrix(matl[U2L], SUBI, gmm::sub_interval(0, nbdof_lambda)));
+          if (LU2 != U2L)
+            gmm::copy(Klu2, gmm::sub_matrix(matl[LU2], gmm::sub_interval(0, nbdof_lambda), SUBI));
+          if (U2U2 != U2L) {
+            gmm::copy(Ku2u2, gmm::sub_matrix(matl[U2U2], SUBI));
+            gmm::copy(Ku1u2, gmm::sub_matrix(matl[U1U2], gmm::sub_interval(0, nbdof1), SUBI));
+          }
+        }
+      }
+
+      if (version & model::BUILD_RHS) {
+        for (size_type i = 0; i < matl.size(); i++) gmm::clear(vecl[i]);
+
+        model_real_plain_vector Ru2(nbsub);
+
+        if (contact_only)
+          asm_Alart_Curnier_contact_nonmatching_meshes_rhs
+            (vecl[U1L], Ru2, vecl[LL], // u1, u2, lambda
+             mim, mf_u1, u1, *pmf_u2_proj, u2_proj, mf_lambda, lambda,
+             vr[0], rg, option);
+        else
+          asm_Alart_Curnier_contact_nonmatching_meshes_rhs
+            (vecl[U1L], Ru2, vecl[LL], // u1, u2, lambda
+             mim, mf_u1, u1, *pmf_u2_proj, u2_proj, mf_lambda, lambda,
+             pmf_coeff, f_coeff, vr[0], alpha, WT1, WT2, rg, option);
+
+        if (mf_u2.is_reduced())
+          gmm::mult(Rsub, Ru2, vecl[U2L]);
+        else
+          gmm::copy(Ru2, gmm::sub_vector(vecl[U2L], SUBI));
+      }
+
+    }
+
+    integral_contact_nonmatching_meshes_brick(size_type rg1_, size_type rg2_,
+                                                bool contact_only_, int option_)
+    : rg1(rg1_), rg2(rg2_), pfem_proj(0), pmf_u2_proj(0),
+      contact_only(contact_only_), option(option_)
+    {
+      Tresca_version = false;   // for future version ...
+      set_flags(contact_only
+                ? "Integral contact between nonmatching meshes brick"
+                : "Integral contact and friction between nonmatching "
+                  "meshes brick",
+                false /* is linear*/,
+                (option==2) && contact_only /* is symmetric */,
+                false /* is coercive */, true /* is real */,
+                false /* is complex */);
+    }
+
+    ~integral_contact_nonmatching_meshes_brick()
+    { if (pmf_u2_proj) delete pmf_u2_proj; }
+
+  };
+
+
+  //=========================================================================
+  //  Add a frictionless contact condition between two bodies discretized
+  //  with nonmatching meshes.
+  //=========================================================================
+
+  size_type add_integral_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u1,
+   const std::string &varname_u2, const std::string &multname_n,
+   const std::string &dataname_r,
+   size_type region1, size_type region2, int option) {
+
+    pbrick pbr = new integral_contact_nonmatching_meshes_brick
+                     (region1, region2, true /* contact_only */, option);
+
+    model::termlist tl;
+
+    switch (option) {
+    case 1 : case 3 :
+      tl.push_back(model::term_description(varname_u1, multname_n, false)); // U1L
+      tl.push_back(model::term_description(multname_n, varname_u1, false)); // LU1
+      tl.push_back(model::term_description(varname_u2, multname_n, false)); // U2L
+      tl.push_back(model::term_description(multname_n, varname_u2, false)); // LU2
+      tl.push_back(model::term_description(multname_n, multname_n, true));  // LL
+      break;
+    case 2 :
+      tl.push_back(model::term_description(varname_u1, multname_n, true)); // U1L
+      tl.push_back(model::term_description(varname_u2, multname_n, true)); // U2L
+      tl.push_back(model::term_description(multname_n, multname_n, true)); // LL
+      tl.push_back(model::term_description(varname_u1, varname_u1, true)); // U1U1
+      tl.push_back(model::term_description(varname_u2, varname_u2, true)); // U2U2
+      tl.push_back(model::term_description(varname_u1, varname_u2, true)); // U1U2
+      break;
+    default : GMM_ASSERT1(false,
+                          "Incorrect option for integral contact brick");
+    }
+
+    model::varnamelist dl(1, dataname_r);
+
+    model::varnamelist vl(1, varname_u1);
+    vl.push_back(varname_u2);
+    vl.push_back(multname_n);
+
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region1);
+  }
+
+
+  //=========================================================================
+  //  Add a contact condition with Coulomb friction between two bodies
+  //  discretized with nonmatching meshes.
+  //=========================================================================
+
+  size_type add_integral_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u1,
+   const std::string &varname_u2, const std::string &multname,
+   const std::string &dataname_r, const std::string &dataname_friction_coeff,
+   size_type region1, size_type region2, int option,
+   const std::string &dataname_alpha,
+   const std::string &dataname_wt1, const std::string &dataname_wt2) {
+
+    pbrick pbr = new integral_contact_nonmatching_meshes_brick
+                     (region1, region2, false /* contact_only */, option);
+
+    model::termlist tl;
+
+    switch (option) {
+    case 1 : case 3 : case 4 :
+      tl.push_back(model::term_description(varname_u1, multname, false));  // 0: U1L
+      tl.push_back(model::term_description(multname, varname_u1, false));  // 1: LU1
+      tl.push_back(model::term_description(varname_u2, multname, false));  // 2: U2L
+      tl.push_back(model::term_description(multname, varname_u2, false));  // 3: LU2
+      tl.push_back(model::term_description(multname, multname, true));     // 4: LL
+      break;
+    case 2 :
+      tl.push_back(model::term_description(varname_u1, multname, false));  // 0: U1L
+      tl.push_back(model::term_description(multname, varname_u1, false));  // 1: LU1
+      tl.push_back(model::term_description(varname_u2, multname, false));  // 2: U2L
+      tl.push_back(model::term_description(multname, varname_u2, false));  // 3: LU2
+      tl.push_back(model::term_description(multname, multname, true));     // 4: LL
+      tl.push_back(model::term_description(varname_u1, varname_u1, true)); // 5: U1U1
+      tl.push_back(model::term_description(varname_u2, varname_u2, true)); // 6: U2U2
+      tl.push_back(model::term_description(varname_u1, varname_u2, true)); // 7: U1U2
+      tl.push_back(model::term_description(varname_u2, varname_u1, true)); // 8: U2U1
+      break;
+    default : GMM_ASSERT1(false,
+                          "Incorrect option for integral contact brick");
+    }
+
+    model::varnamelist dl(1, dataname_r);  // 0 -> r
+    dl.push_back(dataname_friction_coeff); // 1 -> f_coeff
+    if (dataname_alpha.size()) {
+      dl.push_back(dataname_alpha);        // 2 -> alpha
+      if (dataname_wt1.size()) {
+        dl.push_back(dataname_wt1);        // 3 -> WT1
+        if (dataname_wt2.size()) {
+          dl.push_back(dataname_wt2);      // 4 -> WT2
+          // TODO: VT1, VT2, gamma
+        }
+      }
+    }
+
+    model::varnamelist vl(1, varname_u1);
+    vl.push_back(varname_u2);
+    vl.push_back(multname);
+
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region1);
+  }
+
+
+  //=========================================================================
+  //
+  //  Integral penalized contact (with friction) between non-matching meshes.
+  //
+  //=========================================================================
+
+  template<typename MAT, typename VECT1>
+  void asm_penalized_contact_nonmatching_meshes_tangent_matrix // frictionless
+  (MAT &Ku1u1, MAT &Ku2u2, MAT &Ku1u2,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u1, const VECT1 &U1,
+   const getfem::mesh_fem &mf_u2, const VECT1 &U2,
+   const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+   const scalar_type r, const mesh_region &rg, int option = 1) {
+
+    contact_nonmatching_meshes_nonlinear_term
+      nterm((option == 1) ? K_UU_V1 : K_UU_V2, r,
+            mf_u1, U1, mf_u2, U2, pmf_lambda, lambda);
+
+    const std::string aux_fems = pmf_lambda ? "#1,#2,#3" : "#1,#2";
+
+    getfem::generic_assembly assem;
+    assem.set("M$1(#1,#1)+=comp(NonLin(#1," + aux_fems + ").vBase(#1).vBase(#1))(i,j,:,i,:,j); "
+              "M$2(#2,#2)+=comp(NonLin(#1," + aux_fems + ").vBase(#2).vBase(#2))(i,j,:,i,:,j); "
+              "M$3(#1,#2)+=comp(NonLin(#1," + aux_fems + ").vBase(#1).vBase(#2))(i,j,:,i,:,j)");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u1);
+    assem.push_mf(mf_u2);
+    if (pmf_lambda)
+      assem.push_mf(*pmf_lambda);
+    assem.push_nonlinear_term(&nterm);
+    assem.push_mat(Ku1u1);
+    assem.push_mat(Ku2u2);
+    assem.push_mat(Ku1u2);
+    assem.assembly(rg);
+
+    gmm::scale(Ku1u2, scalar_type(-1));
+  }
+
+  template<typename VECT1>
+  void asm_penalized_contact_nonmatching_meshes_rhs // frictionless
+  (VECT1 &Ru1, VECT1 &Ru2,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u1, const VECT1 &U1,
+   const getfem::mesh_fem &mf_u2, const VECT1 &U2,
+   const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+   scalar_type r, const mesh_region &rg, int option = 1) {
+
+    contact_nonmatching_meshes_nonlinear_term
+      nterm((option == 1) ? RHS_U_V5 : RHS_U_V2, r,
+            mf_u1, U1, mf_u2, U2, pmf_lambda, lambda);
+
+    const std::string aux_fems = pmf_lambda ? "#1,#2,#3": "#1,#2";
+    getfem::generic_assembly assem;
+    assem.set("V$1(#1)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1))(i,:,i); "
+              "V$2(#2)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#2))(i,:,i)");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u1);
+    assem.push_mf(mf_u2);
+    if (pmf_lambda)
+      assem.push_mf(*pmf_lambda);
+    assem.push_nonlinear_term(&nterm);
+    assem.push_vec(Ru1);
+    assem.push_vec(Ru2);
+    assem.assembly(rg);
+
+    gmm::scale(Ru2, scalar_type(-1));
+  }
+
+
+  template<typename MAT, typename VECT1>
+  void asm_penalized_contact_nonmatching_meshes_tangent_matrix // with friction
+  (MAT &Ku1u1, MAT &Ku2u2, MAT &Ku1u2, MAT &Ku2u1,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u1, const VECT1 &U1,
+   const getfem::mesh_fem &mf_u2, const VECT1 &U2,
+   const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+   const getfem::mesh_fem *pmf_coeff, const VECT1 *f_coeff, scalar_type r,
+   scalar_type alpha, const VECT1 *WT1, const VECT1 *WT2,
+   const mesh_region &rg, int option = 1) {
+
+    size_type subterm = 0;
+    switch (option) {
+    case 1 : subterm =  K_UU_FRICT_V4; break;
+    case 2 : subterm =  K_UU_FRICT_V3; break;
+    case 3 : subterm =  K_UU_FRICT_V5; break;
+    }
+
+    contact_nonmatching_meshes_nonlinear_term
+      nterm(subterm, r, mf_u1, U1, mf_u2, U2, pmf_lambda, lambda,
+            pmf_coeff, f_coeff, alpha, WT1, WT2);
+
+    const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4"
+                                           : (pmf_lambda ? "#1,#2,#3": "#1,#2");
+
+    getfem::generic_assembly assem;
+    assem.set("M$1(#1,#1)+=comp(NonLin(#1," + aux_fems + ").vBase(#1).vBase(#1))(i,j,:,i,:,j); "
+              "M$2(#2,#2)+=comp(NonLin(#1," + aux_fems + ").vBase(#2).vBase(#2))(i,j,:,i,:,j); "
+              "M$3(#1,#2)+=comp(NonLin(#1," + aux_fems + ").vBase(#1).vBase(#2))(i,j,:,i,:,j); "
+              "M$4(#2,#1)+=comp(NonLin(#1," + aux_fems + ").vBase(#2).vBase(#1))(i,j,:,i,:,j)");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u1);
+    assem.push_mf(mf_u2);
+
+    if (pmf_lambda)
+      assem.push_mf(*pmf_lambda);
+    else if (pmf_coeff)
+      assem.push_mf(*pmf_coeff); // dummy
+
+    if (pmf_coeff)
+      assem.push_mf(*pmf_coeff);
+
+    assem.push_nonlinear_term(&nterm);
+    assem.push_mat(Ku1u1);
+    assem.push_mat(Ku2u2);
+    assem.push_mat(Ku1u2);
+    assem.push_mat(Ku2u1);
+    assem.assembly(rg);
+
+    gmm::scale(Ku1u2, scalar_type(-1));
+    gmm::scale(Ku2u1, scalar_type(-1));
+  }
+
+
+  template<typename VECT1>
+  void asm_penalized_contact_nonmatching_meshes_rhs // with friction
+  (VECT1 &Ru1, VECT1 &Ru2,
+   const mesh_im &mim,
+   const getfem::mesh_fem &mf_u1, const VECT1 &U1,
+   const getfem::mesh_fem &mf_u2, const VECT1 &U2,
+   const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+   const getfem::mesh_fem *pmf_coeff, const VECT1 *f_coeff, scalar_type r,
+   scalar_type alpha, const VECT1 *WT1, const VECT1 *WT2,
+   const mesh_region &rg, int option = 1) {
+
+    size_type subterm = 0;
+    switch (option) {
+    case 1 : subterm =  RHS_U_FRICT_V7; break;
+    case 2 : subterm =  RHS_U_FRICT_V6; break;
+    case 3 : subterm =  RHS_U_FRICT_V8; break;
+    }
+
+    contact_nonmatching_meshes_nonlinear_term
+      nterm(subterm, r, mf_u1, U1, mf_u2, U2, pmf_lambda, lambda,
+            pmf_coeff, f_coeff, alpha, WT1, WT2);
+
+    const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4"
+                                           : (pmf_lambda ? "#1,#2,#3": "#1,#2");
+    getfem::generic_assembly assem;
+    assem.set("V$1(#1)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1))(i,:,i); "
+              "V$2(#2)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#2))(i,:,i)");
+
+    assem.push_mi(mim);
+    assem.push_mf(mf_u1);
+    assem.push_mf(mf_u2);
+
+    if (pmf_lambda)
+      assem.push_mf(*pmf_lambda);
+    else if (pmf_coeff)
+      assem.push_mf(*pmf_coeff); // dummy
+
+    if (pmf_coeff)
+      assem.push_mf(*pmf_coeff);
+
+    assem.push_nonlinear_term(&nterm);
+    assem.push_vec(Ru1);
+    assem.push_vec(Ru2);
+    assem.assembly(rg);
+
+    gmm::scale(Ru2, scalar_type(-1));
+  }
+
+
+  struct penalized_contact_nonmatching_meshes_brick : public virtual_brick {
+
+    size_type rg1, rg2; // ids of mesh regions on mf_u1 and mf_u2 that are
+                        // expected to come in contact.
+    mutable getfem::pfem pfem_proj;        // cached fem and mesh_fem for the
+    mutable getfem::mesh_fem *pmf_u2_proj; // projection between nonmatching meshes
+    bool Tresca_version, contact_only;
+    int option;
+
+    virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version version) const {
+      // Integration method
+      GMM_ASSERT1(mims.size() == 1,
+                  "Penalized contact between nonmatching meshes bricks need a single mesh_im");
+      const mesh_im &mim = *mims[0];
+
+      // Variables : u1, u2
+      GMM_ASSERT1(vl.size() == 2,
+                  "Penalized contact between nonmatching meshes bricks need two variables");
+      const model_real_plain_vector &u1 = md.real_variable(vl[0]);
+      const model_real_plain_vector &u2 = md.real_variable(vl[1]);
+      const mesh_fem &mf_u1 = md.mesh_fem_of_variable(vl[0]);
+      const mesh_fem &mf_u2 = md.mesh_fem_of_variable(vl[1]);
+
+      size_type N = mf_u1.linked_mesh().dim();
+
+      // Data : r, [lambda,] [friction_coeff,] [alpha,] [WT1, WT2]
+      size_type nb_data_1 = ((option == 1) ? 1 : 2) + (contact_only ? 0 : 1);
+      size_type nb_data_2 = nb_data_1 + (contact_only ? 0 : 3);
+      GMM_ASSERT1(dl.size() >= nb_data_1 && dl.size() <= nb_data_2,
+                  "Wrong number of data for penalized contact between nonmatching meshes "
+                  << "brick, " << dl.size() << " should be between "
+                  << nb_data_1 << " and " << nb_data_2 << ".");
+
+      size_type nd = 0;
+      const model_real_plain_vector &vr = md.real_variable(dl[nd]);
+      GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+
+      size_type sl;
+      const model_real_plain_vector *lambda = 0;
+      const mesh_fem *pmf_lambda = 0;
+      if (option != 1) {
+        nd++;
+        lambda = &(md.real_variable(dl[nd]));
+        pmf_lambda = md.pmesh_fem_of_variable(dl[nd]);
+        sl = gmm::vect_size(*lambda) * pmf_lambda->get_qdim() / pmf_lambda->nb_dof();
+        GMM_ASSERT1(sl == (contact_only ? 1 : N),
+                    "the data corresponding to the contact stress "
+                    "has not the right format");
+      }
+
+      const model_real_plain_vector *f_coeff = 0;
+      const mesh_fem *pmf_coeff = 0;
+      scalar_type alpha = 1;
+      const model_real_plain_vector *WT1 = 0;
+      const model_real_plain_vector *WT2 = 0;
+      if (!contact_only) {
+        nd++;
+        f_coeff = &(md.real_variable(dl[nd]));
+        pmf_coeff = md.pmesh_fem_of_variable(dl[nd]);
+        sl = gmm::vect_size(*f_coeff);
+        if (pmf_coeff) { sl *= pmf_coeff->get_qdim(); sl /= pmf_coeff->nb_dof(); }
+        GMM_ASSERT1(sl == 1,
+                  "the data corresponding to the friction coefficient "
+                  "has not the right format");
+
+        if (dl.size() > nd) {
+          nd++;
+          alpha = md.real_variable(dl[nd])[0];
+          GMM_ASSERT1(gmm::vect_size(md.real_variable(dl[nd])) == 1,
+                      "Parameter alpha should be a scalar");
+        }
+
+        if (dl.size() > nd) {
+          nd++;
+          WT1 = &(md.real_variable(dl[nd]));
+        }
+
+        if (dl.size() > nd) {
+          nd++;
+          WT2 = &(md.real_variable(dl[nd]));
+        }
+      }
+
+      GMM_ASSERT1(matl.size() == contact_only ? 3 : 4,
+                  "Wrong number of terms for penalized contact "
+                  "between nonmatching meshes brick");
+
+      mesh_region rg(region);
+      mf_u1.linked_mesh().intersect_with_mpi_region(rg); // FIXME: mfu_2?
+
+      // projection of the second mesh_fem onto the mesh of the first mesh_fem
+      if (!pmf_u2_proj) {
+        pmf_u2_proj = new getfem::mesh_fem(mim.linked_mesh(), dim_type(N));
+        pfem_proj = new_projected_fem(mf_u2, mim, rg2, rg1);
+        pmf_u2_proj->set_finite_element(mim.linked_mesh().convex_index(), pfem_proj);
+      }
+
+      size_type nbdof1 = mf_u1.nb_dof();
+      size_type nbdof2 = mf_u2.nb_dof();
+      size_type nbsub = pmf_u2_proj->nb_dof();
+
+      std::vector<size_type> ind;
+      pmf_u2_proj->get_global_dof_index(ind);
+      gmm::unsorted_sub_index SUBI(ind);
+
+      gmm::csc_matrix<scalar_type> Rsub(nbdof2, nbsub), Esub(nbsub, nbdof2);
+      if (mf_u2.is_reduced()) {
+          gmm::copy(gmm::sub_matrix(mf_u2.reduction_matrix(),
+                                    gmm::sub_interval(0, nbdof2), SUBI),
+                    Rsub);
+          gmm::copy(gmm::sub_matrix(mf_u2.extension_matrix(),
+                                    SUBI, gmm::sub_interval(0, nbdof2)),
+                    Esub);
+      }
+
+      model_real_plain_vector u2_proj(nbsub);
+      if (mf_u2.is_reduced())
+        gmm::mult(Esub, u2, u2_proj);
+      else
+        gmm::copy(gmm::sub_vector(u2, SUBI), u2_proj);
+
+      if (version & model::BUILD_MATRIX) {
+        GMM_TRACE2("Penalized contact between nonmatching meshes tangent term");
+        gmm::clear(matl[0]);
+        gmm::clear(matl[1]);
+        gmm::clear(matl[2]);
+
+        model_real_sparse_matrix Ku2u2(nbsub,nbsub);
+        model_real_sparse_matrix Ku1u2(nbdof1,nbsub);
+
+        if (contact_only) {
+          asm_penalized_contact_nonmatching_meshes_tangent_matrix
+            (matl[0], Ku2u2, Ku1u2, mim, mf_u1, u1, *pmf_u2_proj, u2_proj,
+             pmf_lambda, lambda, vr[0], rg, option);
+        }
+        else {
+          gmm::clear(matl[3]);
+          model_real_sparse_matrix Ku2u1(nbsub,nbdof1);
+          asm_penalized_contact_nonmatching_meshes_tangent_matrix
+            (matl[0], Ku2u2, Ku1u2, Ku2u1, mim, mf_u1, u1, *pmf_u2_proj, u2_proj,
+             pmf_lambda, lambda, pmf_coeff, f_coeff, vr[0], alpha, WT1, WT1, rg, option);
+          gmm::copy(Ku2u1, gmm::sub_matrix(matl[3], SUBI, gmm::sub_interval(0, nbdof1)));
+        }
+
+        if (mf_u2.is_reduced()) {
+          model_real_sparse_matrix tmp(nbsub, nbdof2);
+          gmm::mult(Ku2u2, Esub, tmp);
+          gmm::mult(Rsub, tmp, matl[1]);
+          gmm::mult(Ku1u2, Esub, matl[2]);
+        }
+        else {
+          gmm::copy(Ku2u2, gmm::sub_matrix(matl[1], SUBI));
+          gmm::copy(Ku1u2, gmm::sub_matrix(matl[2], gmm::sub_interval(0, nbdof1), SUBI));
+        }
+      }
+
+      if (version & model::BUILD_RHS) {
+        gmm::clear(vecl[0]);
+        gmm::clear(vecl[1]);
+
+        model_real_plain_vector Ru2(nbsub);
+
+        if (contact_only)
+          asm_penalized_contact_nonmatching_meshes_rhs
+            (vecl[0], Ru2, mim, mf_u1, u1, *pmf_u2_proj, u2_proj, pmf_lambda, lambda,
+             vr[0], rg, option);
+        else
+          asm_penalized_contact_nonmatching_meshes_rhs
+            (vecl[0], Ru2, mim, mf_u1, u1, *pmf_u2_proj, u2_proj, pmf_lambda, lambda,
+             pmf_coeff, f_coeff, vr[0], alpha, WT1, WT2, rg, option);
+
+        if (mf_u2.is_reduced())
+          gmm::mult(Rsub, Ru2, vecl[1]);
+        else
+          gmm::copy(Ru2, gmm::sub_vector(vecl[1], SUBI));
+      }
+    }
+
+    penalized_contact_nonmatching_meshes_brick(size_type rg1_, size_type rg2_,
+                                               bool contact_only_, int option_)
+    : rg1(rg1_), rg2(rg2_), pfem_proj(0), pmf_u2_proj(0),
+      contact_only(contact_only_), option(option_) {
+      Tresca_version = false;   // for future version ...
+      set_flags(contact_only
+                ? "Integral penalized contact between nonmatching meshes brick"
+                : "Integral penalized contact and friction between nonmatching "
+                  "meshes brick",
+                false /* is linear*/, contact_only /* is symmetric */,
+                true /* is coercive */, true /* is real */,
+                false /* is complex */);
+    }
+
+    ~penalized_contact_nonmatching_meshes_brick()
+    { if (pmf_u2_proj) delete pmf_u2_proj; }
+
+  };
+
+
+  //=========================================================================
+  //  Add a frictionless contact condition between two bodies discretized
+  //  with nonmatching meshes.
+  //=========================================================================
+
+  size_type add_penalized_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u1,
+   const std::string &varname_u2, const std::string &dataname_r,
+   size_type region1, size_type region2,
+   int option, const std::string &dataname_n) {
+
+    pbrick pbr = new penalized_contact_nonmatching_meshes_brick
+                     (region1, region2, true /* contact_only */, option);
+    model::termlist tl;
+    tl.push_back(model::term_description(varname_u1, varname_u1, true));
+    tl.push_back(model::term_description(varname_u2, varname_u2, true));
+    tl.push_back(model::term_description(varname_u1, varname_u2, true));
+
+    model::varnamelist dl(1, dataname_r);
+    switch (option) {
+    case 1: break;
+    case 2: dl.push_back(dataname_n); break;
+    default: GMM_ASSERT1(false, "Penalized contact brick : invalid option");
+    }
+
+    model::varnamelist vl(1, varname_u1);
+    vl.push_back(varname_u2);
+
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region1);
+  }
+
+
+  //=========================================================================
+  //  Add a contact condition with friction between two bodies discretized
+  //  with nonmatching meshes.
+  //=========================================================================
+
+  size_type add_penalized_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u1,
+   const std::string &varname_u2, const std::string &dataname_r,
+   const std::string &dataname_friction_coeff,
+   size_type region1, size_type region2, int option,
+   const std::string &dataname_lambda, const std::string &dataname_alpha,
+   const std::string &dataname_wt1, const std::string &dataname_wt2) {
+
+    pbrick pbr = new penalized_contact_nonmatching_meshes_brick
+                     (region1, region2, false /* contact_only */, option);
+    model::termlist tl;
+    tl.push_back(model::term_description(varname_u1, varname_u1, true)); // 0: U1U1
+    tl.push_back(model::term_description(varname_u2, varname_u2, true)); // 1: U2U2
+    tl.push_back(model::term_description(varname_u1, varname_u2, true)); // 2: U1U2
+    tl.push_back(model::term_description(varname_u2, varname_u1, true)); // 3: U2U1
+
+    model::varnamelist dl(1, dataname_r);
+    switch (option) {
+    case 1: break;
+    case 2: case 3: dl.push_back(dataname_lambda); break;
+    default: GMM_ASSERT1(false, "Penalized contact brick : invalid option");
+    }
+    dl.push_back(dataname_friction_coeff);
+    if (dataname_alpha.size() > 0) {
+      dl.push_back(dataname_alpha);
+      if (dataname_wt1.size() > 0) {
+        dl.push_back(dataname_wt1);
+        if (dataname_wt2.size() > 0)
+          dl.push_back(dataname_wt2);
+      }
+    }
+
+    model::varnamelist vl(1, varname_u1);
+    vl.push_back(varname_u2);
+
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region1);
+  }
+
+
+  // Computation of contact area and contact forces
+  void compute_integral_contact_area_and_force
+  (model &md, size_type indbrick, scalar_type &area,
+   model_real_plain_vector &F) {
+
+    pbrick pbr = md.brick_pointer(indbrick);
+    const model::mimlist &ml = md.mimlist_of_brick(indbrick);
+    const model::varnamelist &vl = md.varnamelist_of_brick(indbrick);
+    const model::varnamelist &dl = md.datanamelist_of_brick(indbrick);
+    size_type reg = md.region_of_brick(indbrick);
+
+    GMM_ASSERT1(ml.size() == 1, "Wrong size");
+
+    if (pbr->brick_name() == "Integral contact with rigid obstacle brick" ||
+        pbr->brick_name() == "Integral contact and friction with rigid obstacle brick") {
+      integral_contact_rigid_obstacle_brick *p
+        = dynamic_cast<integral_contact_rigid_obstacle_brick *>
+         (const_cast<virtual_brick *>(pbr.get()));
+      GMM_ASSERT1(p, "Wrong type of brick");
+
+      GMM_ASSERT1(vl.size() >= 2, "Wrong size");
+      const model_real_plain_vector &u = md.real_variable(vl[0]);
+      const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+      const model_real_plain_vector &lambda = md.real_variable(vl[1]);
+      const mesh_fem &mf_lambda = md.mesh_fem_of_variable(vl[1]);
+      GMM_ASSERT1(dl.size() >= 1, "Wrong size");
+      const model_real_plain_vector &obs = md.real_variable(dl[0]);
+      const mesh_fem &mf_obs = md.mesh_fem_of_variable(dl[0]);
+
+      area = asm_level_set_contact_area(*ml[0], mf_u, u, mf_obs, obs, reg, -1e-3);
+
+      gmm::resize(F, mf_u.nb_dof());
+      asm_level_set_normal_source_term
+        (F, *ml[0], mf_u, mf_obs, obs, mf_lambda, lambda, reg);
+    }
+    else if (pbr->brick_name() == "Integral penalized contact with rigid obstacle brick" ||
+             pbr->brick_name() == "Integral penalized contact and friction with rigid "
+                                  "obstacle brick") {
+      penalized_contact_rigid_obstacle_brick *p
+        = dynamic_cast<penalized_contact_rigid_obstacle_brick *>
+         (const_cast<virtual_brick *>(pbr.get()));
+      GMM_ASSERT1(p, "Wrong type of brick");
+    }
+    else if (pbr->brick_name() == "Integral contact between nonmatching meshes brick" ||
+             pbr->brick_name() == "Integral contact and friction between nonmatching "
+                                  "meshes brick") {
+      integral_contact_nonmatching_meshes_brick *p
+        = dynamic_cast<integral_contact_nonmatching_meshes_brick *>
+         (const_cast<virtual_brick *>(pbr.get()));
+      GMM_ASSERT1(p, "Wrong type of brick");
+
+      GMM_ASSERT1(vl.size() == 3, "Wrong size");
+      const model_real_plain_vector &u1 = md.real_variable(vl[0]);
+      const model_real_plain_vector &u2 = md.real_variable(vl[1]);
+      const mesh_fem &mf_u1 = md.mesh_fem_of_variable(vl[0]);
+      const mesh_fem &mf_u2 = md.mesh_fem_of_variable(vl[1]);
+      const model_real_plain_vector &lambda = md.real_variable(vl[2]);
+      const mesh_fem &mf_lambda = md.mesh_fem_of_variable(vl[2]);
+
+      std::vector<size_type> ind;
+      p->pmf_u2_proj->get_global_dof_index(ind);
+      gmm::unsorted_sub_index SUBI(ind);
+
+      size_type nbdof2 = mf_u2.nb_dof();
+      size_type nbsub = p->pmf_u2_proj->nb_basic_dof();
+      model_real_plain_vector u2_proj(nbsub);
+
+      if (mf_u2.is_reduced()) {
+        gmm::csc_matrix<scalar_type> Esub(nbsub, nbdof2);
+        gmm::copy(gmm::sub_matrix(mf_u2.extension_matrix(),
+                                  SUBI, gmm::sub_interval(0, nbdof2)),
+                  Esub);
+        gmm::mult(Esub, u2, u2_proj);
+      }
+      else
+        gmm::copy(gmm::sub_vector(u2, SUBI), u2_proj);
+
+      area = asm_nonmatching_meshes_contact_area
+             (*ml[0], mf_u1, u1, *(p->pmf_u2_proj), u2_proj, reg, -1e-3);
+
+      gmm::resize(F, mf_u1.nb_dof());
+      asm_nonmatching_meshes_normal_source_term
+        (F, *ml[0], mf_u1, *(p->pmf_u2_proj), mf_lambda, lambda, reg);
+
+    }
+    else if (pbr->brick_name() == "Integral penalized contact between nonmatching meshes brick" ||
+             pbr->brick_name() == "Integral penalized contact and friction between nonmatching "
+                                  "meshes brick") {
+      penalized_contact_nonmatching_meshes_brick *p
+        = dynamic_cast<penalized_contact_nonmatching_meshes_brick *>
+         (const_cast<virtual_brick *>(pbr.get()));
+      GMM_ASSERT1(p, "Wrong type of brick");
+    }
+
+  }
+
+
+
+#ifdef EXPERIMENTAL_PURPOSE_ONLY
+
+
+  // Experimental implementation of contact condition with Nitsche method.
+  // To be deleted when a more general implementation will be designed.
+
+
+  class contact_nitsche_nonlinear_term : public nonlinear_elem_term {
+
+  protected:
+    base_small_vector lnt, lt; // multiplier lambda and its tangential component lambda_t
+    scalar_type ln;            // normal component lambda_n of the multiplier
+    base_small_vector ut;      // tangential relative displacement
+    scalar_type un;            // normal relative displacement (positive when the first
+                               // elastic body surface moves outwards)
+    base_small_vector no, n;   // surface normal, pointing outwards with respect
+                               // to the (first) elastic body
+    scalar_type g, f_coeff;    // gap and coefficient of friction values
+    scalar_type lambda, mu;    // Lame coefficients
+
+    base_small_vector aux1, auxN, V;
+    base_matrix GP, grad;
+    base_vector coeff;
+    const mesh_fem &mf_u;       // mandatory
+    const mesh_fem &mf_obs;     // mandatory
+    const mesh_fem *pmf_coeff;
+    base_vector U, obs, friction_coeff;
+
+    void adjust_tensor_size(void) {
+      sizes_.resize(4); sizes_[0] = sizes_[1] = sizes_[2] = sizes_[3] = N;
+      switch (option) {
+      case 1 : sizes_.resize(1); break;
+      case 2 : case 3 :  sizes_.resize(2); break;
+      case 4 : case 5 :  sizes_.resize(3); break;
+      }
+      gmm::resize(grad, 1, N);
+      lnt.resize(N); lt.resize(N); ut.resize(N); no.resize(N); n.resize(N);
+      aux1.resize(1); auxN.resize(N); V.resize(N);
+      gmm::resize(GP, N, N);
+    }
+
+  public:
+    dim_type N;
+    size_type option;
+    scalar_type r;
+
+    bgeot::multi_index sizes_;
+
+    template <typename VECT1>
+    contact_nitsche_nonlinear_term(size_type option_, scalar_type r_,
+				   scalar_type lambda_, scalar_type mu_,
+				   const mesh_fem &mf_u_, const VECT1 &U_,
+				   const mesh_fem &mf_obs_, const VECT1 &obs_,
+				   const mesh_fem *pmf_coeff_ = 0,
+				   const VECT1 *f_coeff_ = 0)		  
+      : lambda(lambda_), mu(mu_), mf_u(mf_u_),
+      mf_obs(mf_obs_), pmf_coeff(pmf_coeff_), U(mf_u.nb_basic_dof()),
+	obs(mf_obs.nb_basic_dof()), friction_coeff(0), option(option_), r(r_) {
+      N = mf_u_.linked_mesh().dim();
+      adjust_tensor_size();
+
+      mf_u.extend_vector(U_, U);
+      mf_obs.extend_vector(obs_, obs);
+
+      if (!pmf_coeff)
+	f_coeff = (*f_coeff_)[0];
+      else {
+	friction_coeff.resize(pmf_coeff->nb_basic_dof());
+	pmf_coeff->extend_vector(*f_coeff_, friction_coeff);
+      }
+    }
+
+    const bgeot::multi_index &sizes() const { return sizes_; }
+
+    virtual void compute(fem_interpolation_context&, bgeot::base_tensor &t);
+    virtual void prepare(fem_interpolation_context& /*ctx*/, size_type /*nb*/);
+
+  };
+
+  void contact_nitsche_nonlinear_term::compute
+  (fem_interpolation_context &/* ctx */, bgeot::base_tensor &t) {
+
+    t.adjust_sizes(sizes_);
+    scalar_type e;
+    dim_type i, j, k, l;
+
+    if (option >= 3) { // computation of matrix A
+      e = f_coeff*gmm::neg(ln-r*(un-g));
+      auxN = lt - r*ut;
+      ball_projection_grad(auxN, e, GP);
+      ball_projection_grad_r(auxN, e, V);
+      e = Heav(r*(un-g) - ln);
+      gmm::rank_one_update(GP, no, gmm::scaled(V, -e*f_coeff));
+      gmm::rank_one_update(GP, gmm::scaled(no, e-gmm::vect_sp(GP,no,no)), no);
+      gmm::scale(GP, 1./r);
+    } else { // computation of vector W
+      e = gmm::neg(ln-r*(un-g));
+      V = lt - r*ut;
+      ball_projection(V, f_coeff*e);
+      V -= e*no;
+    }
+
+    switch (option) {
+      // one-dimensional tensors [N]
+    case 1:
+      for (i=0; i < N; ++i) t[i] = V[i];
+      break;
+
+      // two-dimensional tensors [N x N]
+    case 2:
+      V -= lnt;
+      gmm::scale(V, -1./r);
+      e = gmm::vect_sp(V, n);
+      for (i=0; i < N; ++i)
+	for (j=0; j < N; ++j) {
+	  t(i,j) = mu*(V[i]*n[j]+V[j]*n[i]);
+	  if (i == j) t(i,j) += lambda*e;
+	}
+      break;
+
+    case 3:
+      for (i=0; i < N; ++i)
+	for (j=0; j < N; ++j)
+	  t(i,j) = r*r*GP(j,i);
+      break;
+
+    // three-dimensional tensors [N x N x N]
+    case 4:
+      gmm::mult(gmm::transposed(GP), n, V);
+      for (i=0; i < N; ++i)
+	for (j=0; j < N; ++j)
+	  for (k=0; k < N; ++k) {
+	    t(i,j,k) = -r*mu*(GP(j,i)*n[k] + GP(k,i)*n[j]);
+	    if (j == k) t(i,j,k) -= r*lambda*V[i];
+	  } 
+      break;
+       
+    case 5:
+      gmm::mult(GP, n, V);
+      for (i=0; i < N; ++i)
+	for (j=0; j < N; ++j)
+	  for (k=0; k < N; ++k) {
+	    t(i,j,k) = -r*mu*(GP(k,i)*n[j] + GP(k,j)*n[i]);
+	    if (i == j) t(i,j,k) -= r*lambda*V[k];
+	  } 
+      break;
+      
+    // four-dimensional tensors [N x N x N x N]
+
+    case 6:
+
+      for (i=0; i < N; ++i) GP(i,i) -= 1./r;  // matrix B
+
+      e = gmm::vect_sp(GP, n, n);
+      gmm::mult(gmm::transposed(GP), n, auxN);
+      gmm::mult(GP, n, V);
+
+      for (i=0; i < N; ++i)
+	for (j=0; j < N; ++j)
+	  for (k=0; k < N; ++k)
+	    for (l=0; l < N; ++l) {
+	      t(i,j,k,l) = mu*mu*(n[i]*GP(k,j)*n[l] + n[j]*GP(k,i)*n[l]
+				  + n[j]*GP(l,i)*n[k] + n[i]*GP(l,j)*n[k]);
+	      if (i == j && k == l) t(i,j,k,l) += lambda*lambda*e;
+	      if (i == j) t(i,j,k,l) += lambda*mu*(V[k]*n[l] + V[l]*n[k]);
+	      if (k == l) t(i,j,k,l) += lambda*mu*(auxN[j]*n[i]+auxN[i]*n[j]);
+	    }
+
+      break;
+    default : GMM_ASSERT1(false, "Invalid option");
+    }
+  }
+
+
+  void contact_nitsche_nonlinear_term::prepare
+  (fem_interpolation_context& ctx, size_type nb) {
+    size_type cv = ctx.convex_num();
+
+    switch (nb) { // last is computed first
+    case 1 : // calculate [un] and [ut] interpolating [U] on [mf_u]
+      coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector(U, gmm::sub_index
+				(mf_u.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation(ctx, coeff, V, N);
+      un = gmm::vect_sp(V, no);
+      ut = V - un * no;
+      ctx.pf()->interpolation_grad(ctx, coeff, GP, N);
+      lnt = lambda*(gmm::mat_trace(GP))*n;
+      gmm::mult_add(GP, gmm::scaled(n, mu), lnt);
+      gmm::mult_add(gmm::transposed(GP), gmm::scaled(n, mu), lnt);      
+      ln = gmm::vect_sp(lnt, no);
+      lt = lnt - ln * no;
+      break;
+
+    case 2 : // calculate [g] and [no] interpolating [obs] on [mf_obs]
+             // calculate [ln] and [lt] from [lnt] and [no]
+      coeff.resize(mf_obs.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector
+                (obs, gmm::sub_index
+                 (mf_obs.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation_grad(ctx, coeff, grad, 1);
+      gmm::copy(gmm::mat_row(grad, 0), no);
+      no /= -gmm::vect_norm2(no);
+      ctx.pf()->interpolation(ctx, coeff, aux1, 1);
+      g = aux1[0];
+      n = bgeot::compute_normal(ctx, ctx.face_num());
+      n /= gmm::vect_norm2(n);
+      break;
+
+    case 3 :// calculate [f_coeff] interpolating [friction_coeff] on [mf_coeff]
+      if (pmf_coeff) {
+        coeff.resize(pmf_coeff->nb_basic_dof_of_element(cv));
+        gmm::copy(gmm::sub_vector
+                  (friction_coeff, gmm::sub_index
+                   (pmf_coeff->ind_basic_dof_of_element(cv))), coeff);
+        ctx.pf()->interpolation(ctx, coeff, aux1, 1);
+        f_coeff = aux1[0];
+      }
+      break;
+
+    default : GMM_ASSERT1(false, "Invalid option");
+    }
+  }
+
+
+
+
+  template<typename MAT, typename VECT1>
+  void asm_Nitsche_contact_rigid_obstacle_tangent_matrix
+  (MAT &K, const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, const VECT1 &U,
+   const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+   const getfem::mesh_fem *pmf_coeff, const VECT1 &f_coeff,
+   scalar_type gamma, scalar_type lambda, scalar_type mu,
+   const mesh_region &rg, int option = 1) {
+
+    contact_nitsche_nonlinear_term
+      nterm1(6, gamma, lambda, mu, mf_u, U, mf_obs, obs, pmf_coeff, &f_coeff),
+      nterm2(3, gamma, lambda, mu, mf_u, U, mf_obs, obs, pmf_coeff, &f_coeff),
+      nterm3(4, gamma, lambda, mu, mf_u, U, mf_obs, obs, pmf_coeff, &f_coeff),
+      nterm4(5, gamma, lambda, mu, mf_u, U, mf_obs, obs, pmf_coeff, &f_coeff);
+
+    const std::string aux_fems = pmf_coeff ? "#1,#2,#3" : "#1,#2";
+
+    getfem::generic_assembly assem;
+    std::string as_str 
+      = ((option == 0) ? "w1=comp(NonLin$1(#1,"+aux_fems+")(i,j,k,l).vGrad(#1)(:,i,j).vGrad(#1)(:,k,l));" : "")
+      + "w2=comp(NonLin$2(#1,"+aux_fems+").vBase(#1).vBase(#1))(i,j,:,i,:,j);"
+      + "w3=comp(NonLin$3(#1,"+aux_fems+").vBase(#1).vGrad(#1))(i,j,k,:,i,:,j,k);"
+      + ((option == 0) ? "w4=comp(NonLin$4(#1,"+aux_fems+").vGrad(#1).vBase(#1))(i,j,k,:,i,j,:,k);" : "")
+      + ((option == 0) ? "M(#1,#1)+=w1+w2+w3+w4;" : "M(#1,#1)+=w2+w3;");
+
+    assem.set(as_str);
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_mf(mf_obs);
+    if (pmf_coeff) assem.push_mf(*pmf_coeff);
+    assem.push_nonlinear_term(&nterm1);
+    assem.push_nonlinear_term(&nterm2);
+    assem.push_nonlinear_term(&nterm3);
+    assem.push_nonlinear_term(&nterm4);
+    assem.push_mat(K);
+    assem.assembly(rg);
+  }
+
+
+
+  template<typename VECT1>
+  void asm_Nitsche_contact_rigid_obstacle_rhs
+  (VECT1 &R, const mesh_im &mim,
+   const getfem::mesh_fem &mf_u, const VECT1 &U,
+   const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+   const getfem::mesh_fem *pmf_coeff, const VECT1 &f_coeff,
+   scalar_type gamma, scalar_type lambda, scalar_type mu,
+   const mesh_region &rg, int option = 1) {
+
+    contact_nitsche_nonlinear_term
+      nterm1(1, gamma, lambda, mu, mf_u, U, mf_obs, obs, pmf_coeff, &f_coeff),
+      nterm2(2, gamma, lambda, mu, mf_u, U, mf_obs, obs, pmf_coeff, &f_coeff);
+    
+    const std::string aux_fems = pmf_coeff ? "#1,#2,#3" : "#1,#2";
+    
+    getfem::generic_assembly assem;
+    std::string as_str = 
+      "V(#1)+=comp(NonLin$1(#1,"+aux_fems+").vBase(#1))(i,:,i); "
+      + ((option == 0) ? "V(#1)+=comp(NonLin$2(#1,"+aux_fems+").vGrad(#1))(i,j,:,i,j)" : "");
+
+    assem.set(as_str);
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_mf(mf_obs);
+    if (pmf_coeff) assem.push_mf(*pmf_coeff);
+    assem.push_nonlinear_term(&nterm1);
+    assem.push_nonlinear_term(&nterm2);
+    assem.push_vec(R);
+    assem.assembly(rg);
+  }
+
+
+  struct Nitsche_contact_rigid_obstacle_brick : public virtual_brick {
+
+    virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version version) const {
+      // Integration method
+      GMM_ASSERT1(mims.size() == 1, "Nitsche contact with rigid obstacle "
+		  "bricks need a single mesh_im");
+      const mesh_im &mim = *mims[0];
+
+      // Variables : u
+      GMM_ASSERT1(vl.size() == 1,
+                  "Nitsche contact with rigid obstacle bricks need a "
+		  "single variable");
+      const model_real_plain_vector &u = md.real_variable(vl[0]);
+      const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+
+      // Data : obs, r, [lambda,] [friction_coeff,] [alpha,] [WT]
+      GMM_ASSERT1(dl.size() == 5, "Wrong number of data for Nitsche "
+		  "contact with rigid obstacle brick");
+
+      const model_real_plain_vector &obs = md.real_variable(dl[0]);
+      const mesh_fem &mf_obs = md.mesh_fem_of_variable(dl[0]);
+      size_type sl = gmm::vect_size(obs) * mf_obs.get_qdim() / mf_obs.nb_dof();
+      GMM_ASSERT1(sl == 1, "the data corresponding to the obstacle has not "
+                  "the right format");
+
+      const model_real_plain_vector &vr = md.real_variable(dl[1]);
+      GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+
+      const model_real_plain_vector *f_coeff = 0;
+      const mesh_fem *pmf_coeff = 0;
+      
+      f_coeff = &(md.real_variable(dl[2]));
+      pmf_coeff = md.pmesh_fem_of_variable(dl[2]);
+      sl = gmm::vect_size(*f_coeff);
+      if (pmf_coeff) { sl*= pmf_coeff->get_qdim(); sl /= pmf_coeff->nb_dof(); }
+      GMM_ASSERT1(sl == 1, "the data corresponding to the friction "
+		  "coefficient has not the right format");
+      
+      const model_real_plain_vector &vlambda = md.real_variable(dl[3]);
+      GMM_ASSERT1(gmm::vect_size(vlambda) == 1,
+		  "Parameter lambda should be a scalar");
+      const model_real_plain_vector &vmu = md.real_variable(dl[4]);
+      GMM_ASSERT1(gmm::vect_size(vmu) == 1, "Parameter mu should be a scalar");
+
+
+      GMM_ASSERT1(matl.size() == 1, "Wrong number of terms for "
+                  "Nitsche contact with rigid obstacle brick");
+
+      mesh_region rg(region);
+      mf_u.linked_mesh().intersect_with_mpi_region(rg);
+
+      if (version & model::BUILD_MATRIX) {
+        GMM_TRACE2("Nitsche contact with rigid obstacle tangent term");
+        gmm::clear(matl[0]);
+	asm_Nitsche_contact_rigid_obstacle_tangent_matrix
+	  (matl[0], mim, mf_u, u, mf_obs, obs,  pmf_coeff, *f_coeff,
+	   vr[0], vlambda[0], vmu[0], rg);
+      }
+
+      if (version & model::BUILD_RHS) {
+        gmm::clear(vecl[0]);
+	asm_Nitsche_contact_rigid_obstacle_rhs
+	  (vecl[0], mim, mf_u, u, mf_obs, obs, pmf_coeff, *f_coeff,
+	   vr[0], vlambda[0], vmu[0], rg);
+      }
+
+    }
+
+    Nitsche_contact_rigid_obstacle_brick(void) {
+      set_flags("Integral Nitsche contact and friction with rigid "
+                "obstacle brick",
+                false /* is linear*/, false /* is symmetric */,
+                true /* is coercive */, true /* is real */,
+                false /* is complex */);
+    }
+
+  };
+
+
+  size_type add_Nitsche_contact_with_rigid_obstacle_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &dataname_obs, const std::string &dataname_r,
+   const std::string &dataname_friction_coeff,
+   const std::string &dataname_lambda, const std::string &dataname_mu,
+   size_type region) {
+
+    pbrick pbr = new Nitsche_contact_rigid_obstacle_brick;
+
+    model::termlist tl;
+    tl.push_back(model::term_description(varname_u, varname_u, false));
+
+    model::varnamelist dl(1, dataname_obs);
+    dl.push_back(dataname_r);
+    dl.push_back(dataname_friction_coeff);
+    dl.push_back(dataname_lambda);
+    dl.push_back(dataname_mu);
+
+    model::varnamelist vl(1, varname_u);
+
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+  }
+
+#endif
+
+
+
+  //=========================================================================
+  //
+  //  Large sliding brick.
+  //
+  //=========================================================================
+
+  //=========================================================================
+  // 0)- Some basic assembly functions
+  //=========================================================================
+
+  template <typename MAT1, typename MAT2>
+  void mat_elem_assembly(const MAT1 &M_, const MAT2 &Melem,
+			 const mesh_fem &mf1, size_type cv1,
+			 const mesh_fem &mf2, size_type cv2) {
+    MAT1 &M = const_cast<MAT1 &>(M_);
+    typedef typename gmm::linalg_traits<MAT1>::value_type T;
+    T val;
+    std::vector<size_type> cvdof1(mf1.ind_basic_dof_of_element(cv1).begin(),
+				  mf1.ind_basic_dof_of_element(cv1).end());
+    std::vector<size_type> cvdof2(mf2.ind_basic_dof_of_element(cv2).begin(),
+				  mf2.ind_basic_dof_of_element(cv2).end());
+
+    GMM_ASSERT1(cvdof1.size() == gmm::mat_nrows(Melem)
+		&& cvdof2.size() == gmm::mat_ncols(Melem),
+		"Dimensions mismatch");
+    
+    if (mf1.is_reduced()) {
+      if (mf2.is_reduced()) {
+	for (size_type i = 0; i < cvdof1.size(); ++i)
+	  for (size_type j = 0; j < cvdof2.size(); ++j)
+	    if ((val = Melem(i,j)) != T(0))
+	      asmrankoneupdate
+		(M, gmm::mat_row(mf1.extension_matrix(), cvdof1[i]),
+		 gmm::mat_row(mf2.extension_matrix(), cvdof2[j]), val);
+      } else {
+	for (size_type i = 0; i < cvdof1.size(); ++i)
+	  for (size_type j = 0; j < cvdof2.size(); ++j)
+	    if ((val = Melem(i,j)) != T(0))
+	      asmrankoneupdate
+		(M, gmm::mat_row(mf1.extension_matrix(), cvdof1[i]),
+		 cvdof2[j], val);
+      }
+    } else {
+      if (mf2.is_reduced()) {
+	for (size_type i = 0; i < cvdof1.size(); ++i)
+	  for (size_type j = 0; j < cvdof2.size(); ++j)
+	    if ((val = Melem(i,j)) != T(0))
+	      asmrankoneupdate
+		(M, cvdof1[i],
+		 gmm::mat_row(mf2.extension_matrix(), cvdof2[j]), val);
+      } else {
+	for (size_type i = 0; i < cvdof1.size(); ++i)
+	  for (size_type j = 0; j < cvdof2.size(); ++j)
+	    if ((val = Melem(i,j)) != T(0))
+	      M(cvdof1[i], cvdof2[j]) += val;
+      }
+    }
+  }
+
+
+  template <typename VEC1, typename VEC2>
+  void vec_elem_assembly(const VEC1 &V_, const VEC2 &Velem,
+			 const mesh_fem &mf, size_type cv) {
+    VEC1 &V = const_cast<VEC1 &>(V_);
+    typedef typename gmm::linalg_traits<VEC1>::value_type T;
+    std::vector<size_type> cvdof(mf.ind_basic_dof_of_element(cv).begin(),
+				 mf.ind_basic_dof_of_element(cv).end());
+
+    GMM_ASSERT1(cvdof.size() == gmm::vect_size(Velem), "Dimensions mismatch");
+    
+    if (mf.is_reduced()) {
+      T val;
+      for (size_type i = 0; i < cvdof.size(); ++i)
+	if ((val = Velem[i]) != T(0))
+	  gmm::add(gmm::scaled(gmm::mat_row(mf.extension_matrix(), cvdof[i]),
+			       val), V);
+    } else {
+      for (size_type i = 0; i < cvdof.size(); ++i) V[cvdof[i]] += Velem[i];
+    }
+  }
+  
+
+  //=========================================================================
+  // 1)- Structure which stores the contact boundaries and rigid obstacles
+  //=========================================================================
+
+  struct contact_frame {
+    bool frictionless;
+    size_type N;
+    scalar_type friction_coef;
+    std::vector<const model_real_plain_vector *> Us;
+    std::vector<model_real_plain_vector> ext_Us;
+    std::vector<const model_real_plain_vector *> lambdas;
+    std::vector<model_real_plain_vector> ext_lambdas;
+    struct contact_boundary {
+      size_type region;                 // Boundary number
+      const getfem::mesh_fem *mfu;      // F.e.m. for the displacement.
+      size_type ind_U;                  // Index of displacement.
+      const getfem::mesh_fem *mflambda; // F.e.m. for the multiplier.
+      size_type ind_lambda;             // Index of multiplier.
+    };
+    std::vector<contact_boundary> contact_boundaries;
+
+    gmm::dense_matrix< model_real_sparse_matrix * > UU;
+    gmm::dense_matrix< model_real_sparse_matrix * > UL;
+    gmm::dense_matrix< model_real_sparse_matrix * > LU;
+    gmm::dense_matrix< model_real_sparse_matrix * > LL;
+
+    std::vector< model_real_plain_vector *> Urhs;
+    std::vector< model_real_plain_vector *> Lrhs;
+    
+    
+
+    std::vector<std::string> coordinates;
+    base_node pt_eval;
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
+    std::vector<mu::Parser> obstacles_parsers;
+#endif
+    std::vector<std::string> obstacles;
+    std::vector<std::string> obstacles_velocities;
+
+    size_type add_U(const getfem::mesh_fem &mfu,
+		    const model_real_plain_vector &U) {
+      size_type i = 0;
+      for (; i < Us.size(); ++i) if (Us[i] == &U) return i;
+      Us.push_back(&U);
+      model_real_plain_vector ext_U(mfu.nb_basic_dof()); // means that the structure has to be build each time ... to be changed. ATTENTION : la même variable ne doit pas être étendue dans deux vecteurs différents.
+      mfu.extend_vector(U, ext_U);
+      ext_Us.push_back(ext_U);
+      return i;
+    }
+
+    size_type add_lambda(const getfem::mesh_fem &mfl,
+			 const model_real_plain_vector &l) {
+      size_type i = 0;
+      for (; i < lambdas.size(); ++i) if (lambdas[i] == &l) return i;
+      lambdas.push_back(&l);
+      model_real_plain_vector ext_l(mfl.nb_basic_dof()); // means that the structure has to be build each time ... to be changed. ATTENTION : la même variable ne doit pas être étendue dans deux vecteurs différents.
+      mfl.extend_vector(l, ext_l);
+      ext_lambdas.push_back(ext_l);
+      return i;
+    }
+
+
+    const getfem::mesh_fem &mfu_of_boundary(size_type n) const
+    { return *(contact_boundaries[n].mfu); }
+    const getfem::mesh_fem &mflambda_of_boundary(size_type n) const
+    { return *(contact_boundaries[n].mflambda); }
+    const model_real_plain_vector &disp_of_boundary(size_type n) const
+    { return ext_Us[contact_boundaries[n].ind_U]; }
+    const model_real_plain_vector &lambda_of_boundary(size_type n) const
+    { return ext_lambdas[contact_boundaries[n].ind_lambda]; }
+    size_type region_of_boundary(size_type n) const
+    { return contact_boundaries[n].region; }
+    model_real_sparse_matrix &UU_matrix(size_type n, size_type m) const
+    { return *(UU(contact_boundaries[n].ind_U, contact_boundaries[m].ind_U)); }
+    model_real_sparse_matrix &LU_matrix(size_type n, size_type m) const {
+      return *(LU(contact_boundaries[n].ind_lambda,
+		  contact_boundaries[m].ind_U));
+    }
+    model_real_sparse_matrix &UL_matrix(size_type n, size_type m) const {
+      return *(UL(contact_boundaries[n].ind_U,
+		  contact_boundaries[m].ind_lambda));
+    }
+    model_real_sparse_matrix &LL_matrix(size_type n, size_type m) const {
+      return *(LL(contact_boundaries[n].ind_lambda,
+		  contact_boundaries[m].ind_lambda));
+    }
+    model_real_plain_vector &U_vector(size_type n) const
+    { return *(Urhs[contact_boundaries[n].ind_U]); }
+    model_real_plain_vector &L_vector(size_type n) const
+    { return *(Lrhs[contact_boundaries[n].ind_lambda]); }
+
+    contact_frame(size_type NN) : N(NN), coordinates(N), pt_eval(N) {
+      if (N > 0) coordinates[0] = "x";
+      if (N > 1) coordinates[1] = "y";
+      if (N > 2) coordinates[2] = "z";
+      if (N > 3) coordinates[3] = "w";
+      GMM_ASSERT1(N <= 4, "Complete the definition for contact in "
+		  "dimension greater than 4");
+    }
+
+    size_type add_obstacle(const std::string &obs) {
+      size_type ind = obstacles.size();
+      obstacles.push_back(obs);
+      obstacles_velocities.push_back("");
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H 
+      mu::Parser mu;
+      obstacles_parsers.push_back(mu);
+      obstacles_parsers[ind].SetExpr(obstacles[ind]);
+      for (size_type k = 0; k < N; ++k)
+	obstacles_parsers[ind].DefineVar(coordinates[k], &pt_eval[k]);
+#else
+      GMM_ASSERT1(false, "You have to link muparser with getfem to deal "
+		  "with rigid body obstacles");
+#endif
+      return ind;
+    }
+
+    size_type add_boundary(const getfem::mesh_fem &mfu,
+			   const model_real_plain_vector &U,
+			   const getfem::mesh_fem &mfl,
+			   const model_real_plain_vector &l,
+			   size_type reg) {
+      contact_boundary cb;
+      cb.region = reg;
+      cb.mfu = &mfu;
+      cb.mflambda = &mfl;
+      cb.ind_U = add_U(mfu, U);
+      cb.ind_lambda = add_lambda(mfl, l);
+      size_type ind = contact_boundaries.size();
+      contact_boundaries.push_back(cb);
+      gmm::resize(UU, ind+1, ind+1);
+      gmm::resize(UL, ind+1, ind+1);
+      gmm::resize(LU, ind+1, ind+1);
+      gmm::resize(LL, ind+1, ind+1);
+      gmm::resize(Urhs, ind+1);
+      gmm::resize(Lrhs, ind+1);
+      return ind;
+    }
+
+  };
+
+
+  //=========================================================================
+  // 2)- Structure which computes the contact pairs, rhs and tangent terms
+  //=========================================================================
+
+  struct contact_elements {
+
+    contact_frame &cf;   // contact frame description.
+    
+    // list des enrichissements pour ses points : y0, d0, element ...
+    bgeot::rtree element_boxes;  // influence regions of boundary elements
+    // list des enrichissements of boundary elements
+    std::vector<size_type> boundary_of_elements;
+    std::vector<size_type> ind_of_elements;
+    std::vector<size_type> face_of_elements;
+    std::vector<base_node> unit_normal_of_elements;
+
+    contact_elements(contact_frame &ccf) : cf(ccf) {}
+    void init(void);
+    bool add_point_contribution(size_type boundary_num,
+				getfem::fem_interpolation_context &ctxu,
+				getfem::fem_interpolation_context &ctxl,
+				scalar_type weight, scalar_type f_coeff,
+				scalar_type r, model::build_version version);
+  };
+
+
+  void contact_elements::init(void) {
+    fem_precomp_pool fppool;
+    // compute the influence regions of boundary elements. To be run
+    // before the assembly of contact terms.
+    element_boxes.clear();
+    unit_normal_of_elements.resize(0);
+    boundary_of_elements.resize(0);
+    ind_of_elements.resize(0);
+    face_of_elements.resize(0);
+    
+    size_type N = 0;
+    base_matrix G;
+    model_real_plain_vector coeff;
+    for (size_type i = 0; i < cf.contact_boundaries.size(); ++i) {
+      size_type bnum = cf.region_of_boundary(i);
+      const mesh_fem &mfu = cf.mfu_of_boundary(i);
+      const model_real_plain_vector &U = cf.disp_of_boundary(i);
+      const mesh &m = mfu.linked_mesh();
+      if (i == 0) N = m.dim();
+      GMM_ASSERT1(m.dim() == N,
+		  "Meshes are of mixed dimensions, cannot deal with that");
+      base_node val(N), bmin(N), bmax(N), n0(N), n(N), n_mean(N);
+      base_matrix grad(N,N);
+      mesh_region region = m.region(bnum);
+      GMM_ASSERT1(mfu.get_qdim() == N,
+		  "Wrong mesh_fem qdim to compute contact pairs");
+      
+      dal::bit_vector points_already_interpolated;
+      std::vector<base_node> transformed_points(m.nb_max_points());
+      for (getfem::mr_visitor v(region,m); !v.finished(); ++v) {
+	size_type cv = v.cv();
+	bgeot::pgeometric_trans pgt = m.trans_of_convex(cv);
+	pfem pf_s = mfu.fem_of_element(cv);
+	size_type nbd_t = pgt->nb_points();
+	size_type cvnbdof = mfu.nb_basic_dof_of_element(cv);
+	coeff.resize(cvnbdof);
+	mesh_fem::ind_dof_ct::const_iterator
+	  itdof = mfu.ind_basic_dof_of_element(cv).begin();
+	for (size_type k = 0; k < cvnbdof; ++k, ++itdof) coeff[k]=U[*itdof];
+	bgeot::vectors_to_base_matrix
+	  (G, mfu.linked_mesh().points_of_convex(cv));
+	
+	pfem_precomp pfp = fppool(pf_s, &(pgt->geometric_nodes()));
+	fem_interpolation_context ctx(pgt,pfp,size_type(-1), G, cv,
+				      size_type(-1));
+	
+	size_type nb_pt_on_face = 0;
+	gmm::clear(n_mean);
+	for (short_type ip = 0; ip < nbd_t; ++ip) {
+	  size_type ind = m.ind_points_of_convex(cv)[ip];
+	  
+	  // computation of transformed vertex
+	  if (!(points_already_interpolated.is_in(ind))) {
+	    ctx.set_ii(ip);
+	    pf_s->interpolation(ctx, coeff, val, dim_type(N));
+	    val += ctx.xreal();
+	    transformed_points[ind] = val;
+	    points_already_interpolated.add(ind);	  
+	  } else {
+	    val = transformed_points[ind];
+	  }
+	  // computation of unit normal vector if the vertex is on the face
+	  bool is_on_face = false;
+	  bgeot::pconvex_structure cvs = pgt->structure();
+	  for (size_type k = 0; k < cvs->nb_points_of_face(v.f()); ++k)
+	    if (cvs->ind_points_of_face(v.f())[k] == ip) is_on_face = true;
+	  if (is_on_face) {
+	    ctx.set_ii(ip); 
+	    n0 = bgeot::compute_normal(ctx, v.f());
+	    pf_s->interpolation_grad(ctx, coeff, grad, dim_type(N));
+	    gmm::add(gmm::identity_matrix(), grad);
+	    scalar_type J = gmm::lu_inverse(grad);
+	    if (J <= scalar_type(0)) GMM_WARNING1("Inverted element ! " << J);
+	    gmm::mult(gmm::transposed(grad), n0, n);
+	    n /= gmm::vect_norm2(n);
+	    n_mean += n;
+	    ++nb_pt_on_face;
+	  }
+	  
+	  if (ip == 0) // computation of bounding box
+	    bmin = bmax = val;
+	  else {
+	    for (size_type k = 0; k < N; ++k) {
+	      bmin[k] = std::min(bmin[k], val[k]);
+	      bmax[k] = std::max(bmax[k], val[k]);
+	    }
+	  }
+	}
+	
+	GMM_ASSERT1(nb_pt_on_face,
+		    "This element has not vertex on considered face !");
+	
+	// Computation of influence box :
+	// offset of the bounding box relatively to its "diameter"
+	scalar_type h = bmax[0] - bmin[0];
+	for (size_type k = 1; k < N; ++k)
+	  h = std::max(h, bmax[k] - bmin[k]);
+	for (size_type k = 0; k < N; ++k)
+	  { bmin[k] -= h; bmax[k] += h; }
+	
+	// Store the influence box and additional information.
+	element_boxes.add_box(bmin, bmax, unit_normal_of_elements.size());
+	n_mean /= gmm::vect_norm2(n_mean);
+	unit_normal_of_elements.push_back(n_mean);
+	boundary_of_elements.push_back(i);
+	ind_of_elements.push_back(cv);
+	face_of_elements.push_back(v.f());
+      }
+    }
+  }
+  
+
+
+  bool contact_elements::add_point_contribution
+  (size_type boundary_num, getfem::fem_interpolation_context &ctxu,
+   getfem::fem_interpolation_context &ctxl, scalar_type weight,
+   scalar_type f_coeff, scalar_type r, model::build_version version) {
+    const mesh_fem &mfu = cf.mfu_of_boundary(boundary_num);
+    const mesh_fem &mfl = cf.mflambda_of_boundary(boundary_num);
+    const model_real_plain_vector &U = cf.disp_of_boundary(boundary_num);
+    const model_real_plain_vector &L = cf.lambda_of_boundary(boundary_num);
+    size_type N = mfu.get_qdim();
+    base_node x0 = ctxu.xreal();
+    bool noisy = false;
+
+    // ----------------------------------------------------------
+    // Computation of the point coordinates and the unit normal
+    // vector in real configuration
+    // ----------------------------------------------------------
+    
+    base_node n0 = bgeot::compute_normal(ctxu, ctxu.face_num());
+    scalar_type face_factor = gmm::vect_norm2(n0);
+    size_type cv = ctxu.convex_num();
+    base_small_vector n(N), val(N), h(N);
+    base_matrix gradinv(N,N), grad(N,N), gradtot(N,N), G;
+    size_type cvnbdofu = mfu.nb_basic_dof_of_element(cv);
+    size_type cvnbdofl = mfl.nb_basic_dof_of_element(cv);
+    base_vector coeff(cvnbdofu);
+    gmm::copy(gmm::sub_vector
+	      (U, gmm::sub_index
+	       (mfu.ind_basic_dof_of_element(cv))), coeff);
+    ctxu.pf()->interpolation(ctxu, coeff, val, dim_type(N));
+    base_node x = x0 + val;
+    
+    ctxu.pf()->interpolation_grad(ctxu, coeff, gradinv, dim_type(N));
+    gmm::add(gmm::identity_matrix(), gradinv);
+    scalar_type J = gmm::lu_inverse(gradinv); // remplacer par une résolution...
+    if (J <= scalar_type(0)) {
+      GMM_WARNING1("Inverted element !");
+      
+      GMM_ASSERT1(!(version & model::BUILD_MATRIX), "Impossible to build "
+		  "tangent matrix for large sliding contact");
+      if (version & model::BUILD_RHS) {
+	base_vector Velem(cvnbdofl);
+	for (size_type i = 0; i < cvnbdofl; ++i) Velem[i] = 1E200;
+	vec_elem_assembly(cf.L_vector(boundary_num), Velem, mfl, cv);
+	return false;
+      }
+    }
+
+    gmm::mult(gmm::transposed(gradinv), n0, n);
+    n /= gmm::vect_norm2(n);
+    
+    // ----------------------------------------------------------
+    // Selection of influence boxes
+    // ----------------------------------------------------------
+    
+    bgeot::rtree::pbox_set bset;
+    element_boxes.find_boxes_at_point(x, bset);
+    
+    if (noisy) cout << "Number of boxes found : " << bset.size() << endl; 
+    
+    // ----------------------------------------------------------
+    // Eliminates some influence boxes with the mean normal
+    // criterion : should at least eliminate the original element.
+    // ----------------------------------------------------------
+    
+    bgeot::rtree::pbox_set::iterator it = bset.begin(), itnext;
+    for (; it != bset.end(); it = itnext) {
+      itnext = it; ++itnext;
+      if (gmm::vect_sp(unit_normal_of_elements[(*it)->id], n)
+	  >= -scalar_type(1)/scalar_type(20)) bset.erase(it);
+    }
+    
+    if (noisy)
+      cout << "Number of boxes satisfying the unit normal criterion : "
+	   << bset.size() << endl; 
+    
+    
+    // ----------------------------------------------------------
+    // For each remaining influence box, compute y0, the corres-
+    // ponding unit normal vector and eliminate wrong auto-contact
+    // situations with a test on |x0-y0|
+    // ----------------------------------------------------------
+    
+    it = bset.begin();
+    std::vector<base_node> y0s, y0_refs;
+    std::vector<base_small_vector> n0_y0s;
+    std::vector<scalar_type> d0s;
+    std::vector<scalar_type> d1s;
+    std::vector<size_type> elt_nums;
+    std::vector<fem_interpolation_context> ctx_y0s;
+    for (; it != bset.end(); ++it) {
+      size_type boundary_num_y0 = boundary_of_elements[(*it)->id];
+      size_type cv_y0 = ind_of_elements[(*it)->id];
+      short_type face_y0 = short_type(face_of_elements[(*it)->id]);
+      const mesh_fem &mfu_y0 = cf.mfu_of_boundary(boundary_num_y0);
+      pfem pf_s = mfu_y0.fem_of_element(cv_y0);
+      const model_real_plain_vector &U_y0
+	= cf.disp_of_boundary(boundary_num_y0);
+      const mesh &m = mfu_y0.linked_mesh();
+      bgeot::pgeometric_trans pgt_y0 = m.trans_of_convex(cv_y0);
+      bgeot::pconvex_structure cvs_y0 = pgt_y0->structure();
+      
+      // Find an interior point (in order to promote the more interior
+      // y0 in case of locally non invertible transformation.
+      size_type ind_dep_point = 0;
+      for (; ind_dep_point < cvs_y0->nb_points(); ++ind_dep_point) {
+	bool is_on_face = false;
+	for (size_type k = 0;
+	     k < cvs_y0->nb_points_of_face(face_y0); ++k)
+	  if (cvs_y0->ind_points_of_face(face_y0)[k]
+	      == ind_dep_point) is_on_face = true;
+	if (!is_on_face) break;
+      }
+      GMM_ASSERT1(ind_dep_point < cvs_y0->nb_points(), 
+		  "No interior point found !");
+      
+      base_node y0_ref = pgt_y0->convex_ref()->points()[ind_dep_point];
+      
+      size_type cvnbdof_y0 = mfu_y0.nb_basic_dof_of_element(cv_y0);
+      coeff.resize(cvnbdof_y0);
+      mesh_fem::ind_dof_ct::const_iterator
+	itdof = mfu_y0.ind_basic_dof_of_element(cv_y0).begin();
+      for (size_type k = 0; k < cvnbdof_y0; ++k, ++itdof)
+	coeff[k] = U_y0[*itdof];
+      // if (pf_s->need_G()) 
+      bgeot::vectors_to_base_matrix
+	(G, mfu_y0.linked_mesh().points_of_convex(cv_y0));
+      
+      fem_interpolation_context ctx_y0(pgt_y0, pf_s, y0_ref, G, cv_y0,
+				       size_type(-1));
+      
+      size_type newton_iter = 0;
+      for(;;) { // Newton algorithm to invert geometric transformation
+	
+	pf_s->interpolation(ctx_y0, coeff, val, dim_type(N));
+	val += ctx_y0.xreal() - x;
+	scalar_type init_res = gmm::vect_norm2(val);
+	
+	if (init_res < 1E-12) break;
+	if (newton_iter > 100) {
+	  GMM_WARNING1("Newton has failed to invert transformation"); // il faudrait faire qlq chose d'autre ... !
+	  GMM_ASSERT1(!(version & model::BUILD_MATRIX), "Impossible to build "
+		    "tangent matrix for large sliding contact");
+	  if (version & model::BUILD_RHS) {
+	    base_vector Velem(cvnbdofl);
+	    for (size_type i = 0; i < cvnbdofl; ++i) Velem[i] = 1E200;
+	    vec_elem_assembly(cf.L_vector(boundary_num), Velem, mfl, cv);
+	    return false;
+	  }
+	}
+	
+	pf_s->interpolation_grad(ctx_y0, coeff, grad, dim_type(N));
+	
+	gmm::add(gmm::identity_matrix(), grad);
+	
+	gmm::mult(grad, ctx_y0.K(), gradtot);
+	
+	std::vector<int> ipvt(N);
+	size_type info = gmm::lu_factor(gradtot, ipvt);
+	GMM_ASSERT1(!info, "Singular system, pivot = " << info); // il faudrait faire qlq chose d'autre ... perturber par exemple
+	gmm::lu_solve(gradtot, ipvt, h, val);
+	
+	// line search
+	bool ok = false;
+	scalar_type alpha;
+	for (alpha = 1; alpha >= 1E-5; alpha/=scalar_type(2)) {
+	  
+	  ctx_y0.set_xref(y0_ref - alpha*h);
+	  pf_s->interpolation(ctx_y0, coeff, val, dim_type(N));
+	  val += ctx_y0.xreal() - x;
+	  
+	  if (gmm::vect_norm2(val) < init_res) { ok = true; break; }
+	}
+	if (!ok)
+	  GMM_WARNING1("Line search has failed to invert transformation");
+	y0_ref -= alpha*h;
+	ctx_y0.set_xref(y0_ref);
+	newton_iter++;
+      }
+      
+      base_node y0 = ctx_y0.xreal();
+      base_node n0_y0 = bgeot::compute_normal(ctx_y0, face_y0);
+      scalar_type d0_ref = pgt_y0->convex_ref()->is_in_face(face_y0, y0_ref);
+      scalar_type d0 = d0_ref / gmm::vect_norm2(n0_y0);
+
+
+	
+
+      scalar_type d1 = d0_ref; // approximatively a distance to the element
+      short_type ifd = short_type(-1);
+
+      for (short_type k = 0; k <  pgt_y0->structure()->nb_faces(); ++k) {
+	scalar_type dd = pgt_y0->convex_ref()->is_in_face(k, y0_ref);
+	if (dd > scalar_type(0) && dd > gmm::abs(d1)) { d1 = dd; ifd = k; }
+      }
+      
+      if (ifd != short_type(-1)) {
+	d1 /= gmm::vect_norm2(bgeot::compute_normal(ctx_y0, ifd));
+	if (gmm::abs(d1) < gmm::abs(d0)) d1 = d0;
+      } else d1 = d0;
+
+      
+//       size_type iptf = m.ind_points_of_face_of_convex(cv_y0, face_y0)[0];
+//       base_node ptf = x0 - m.points()[iptf];
+//       scalar_type d2 = gmm::vect_sp(ptf, n0_y0) / gmm::vect_norm2(n0_y0);
+
+
+      
+      if (noisy) cout << "gmm::vect_norm2(n0_y0) = " << gmm::vect_norm2(n0_y0) << endl;
+      // Eliminates wrong auto-contact situations
+      if (noisy) cout << "autocontact status : x0 = " << x0 << " y0 = " << y0 << "  " <<  gmm::vect_dist2(y0, x0) << " : " << d0*0.75 << " : " << d1*0.75 << endl;
+      if (noisy) cout << "n = " << n << " unit_normal_of_elements[(*it)->id] = " << unit_normal_of_elements[(*it)->id] << endl;
+
+
+
+      if (d0 < scalar_type(0)
+	  && ((&(U_y0) == &U
+	       && (gmm::vect_dist2(y0, x0) < gmm::abs(d1)*scalar_type(3)/scalar_type(4)))
+	      || gmm::abs(d1) > 0.05)) {
+	if (noisy)  cout << "Eliminated x0 = " << x0 << " y0 = " << y0
+			<< " d0 = " << d0 << endl;
+	continue;
+      }
+
+
+//       if (d0 < scalar_type(0) && &(U_y0) == &U
+// 	  && gmm::vect_dist2(y0, x0) < gmm::abs(d1) * scalar_type(2)
+// 	  && d2 < -ctxu.J() / scalar_type(2)) {
+// 	/*if (noisy) */ cout << "Eliminated x0 = " << x0 << " y0 = " << y0
+// 			<< " d0 = " << d0 << endl;
+// 	continue;
+//       }
+      
+      y0s.push_back(ctx_y0.xreal()); // useful ?
+      y0_refs.push_back(y0_ref);
+      elt_nums.push_back((*it)->id);
+      d0s.push_back(d0);
+      d1s.push_back(d1);
+      ctx_y0s.push_back(ctx_y0);
+      n0_y0 /= gmm::vect_norm2(n0_y0);
+      n0_y0s.push_back(n0_y0);
+      
+      if (noisy) cout << "dist0 = " << d0 << " dist1 = "
+		      << pgt_y0->convex_ref()->is_in(y0_ref) << endl;
+    }
+    
+    // ----------------------------------------------------------
+    // Compute the distance to rigid obstacles and selects the
+    // nearest boundary/obstacle.
+    // ----------------------------------------------------------
+    
+    dim_type state = 0;
+    scalar_type d0 = 1E100, d1 = 1E100;
+    base_small_vector grad_obs(N);
+    
+    size_type ibound = size_type(-1);
+    for (size_type k = 0; k < y0_refs.size(); ++k)
+      if (d1s[k] < d1) { d0 = d0s[k]; d1 = d1s[k]; ibound = k; state = 1; }
+    
+    
+    size_type irigid_obstacle = size_type(-1);
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
+    gmm::copy(x, cf.pt_eval);
+    for (size_type i = 0; i < cf.obstacles.size(); ++i) {
+      scalar_type d0_o = scalar_type(cf.obstacles_parsers[i].Eval());
+      if (d0_o < d0) { d0 = d0_o; irigid_obstacle = i; state = 2; }
+    }
+    if (state == 2) {
+      scalar_type EPS = face_factor * 1E-9;
+      for (size_type k = 0; k < N; ++k) {
+	cf.pt_eval[k] += EPS;
+	grad_obs[k] = 
+	  (scalar_type(cf.obstacles_parsers[irigid_obstacle].Eval())-d0)/EPS;
+	cf.pt_eval[k] -= EPS;
+      }
+    }
+    
+#else
+    if (cf.obstacles.size() > 0)
+      GMM_WARNING1("Rigid obstacles are ignored. Recompile with "
+		   "muParser to account for rigid obstacles");
+#endif
+    
+    
+    // ----------------------------------------------------------
+    // Print the found contact state ...
+    // ----------------------------------------------------------
+    
+    
+    if (noisy && state == 1) {
+      cout  << "Point : " << x0 << " of boundary " << boundary_num
+	    << " and element " << cv << " state = " << int(state);
+      if (version & model::BUILD_RHS) cout << " RHS";
+      if (version & model::BUILD_MATRIX) cout << " MATRIX";
+    }
+    if (state == 1) {
+      size_type nbo = boundary_of_elements[elt_nums[ibound]];
+      const mesh_fem &mfu_y0 = cf.mfu_of_boundary(nbo);
+      const mesh &m = mfu_y0.linked_mesh();
+      size_type icv = ind_of_elements[elt_nums[ibound]];
+      
+      if (noisy) cout << " y0 = " << y0s[ibound] << " of element "
+			    << icv  << " of boundary " << nbo << endl;
+      for (size_type k = 0; k < m.nb_points_of_convex(icv); ++k)
+	if (noisy) cout << "point " << k << " : "
+			<< m.points()[m.ind_points_of_convex(icv)[k]] << endl;
+      if (nbo == 0 && boundary_num == 0 && d0 < 0.0 && (version & model::BUILD_MATRIX)) GMM_ASSERT1(false, "oups");
+    }
+    if (noisy) cout << " d0 = " << d0 << endl;
+    
+    
+    // ----------------------------------------------------------
+    // Add the contributions to the tangent matrices and rhs
+    // ----------------------------------------------------------
+    
+    GMM_ASSERT1(ctxu.pf()->target_dim() == 1 && ctxl.pf()->target_dim() == 1,
+		"Large sliding contact assembly procedure has to be adapted "
+		"to intrinsic vectorial elements. To be done.");
+    
+    // Éviter les calculs inutiles dans le cas state == 2 ... à voir à la fin
+    // regarder aussi si on peut factoriser des mat_elem_assembly ...
+    
+    base_matrix Melem;
+    base_vector Velem;
+    base_tensor tl, tu;
+    base_small_vector lambda(N), zeta(N), vv(N);
+    ctxl.base_value(tl);
+    ctxu.base_value(tu);
+    
+    coeff.resize(cvnbdofl);
+    gmm::copy(gmm::sub_vector
+	      (L, gmm::sub_index
+	       (mfl.ind_basic_dof_of_element(cv))), coeff);
+    ctxl.pf()->interpolation(ctxl, coeff, lambda, dim_type(N));
+    GMM_ASSERT1(!(std::isnan(lambda[0])), "internal error");
+
+    // Tangent term -(1/r)\int \delta\lambda.\mu
+    if (version & model::BUILD_MATRIX) {
+      gmm::resize(Melem, cvnbdofl, cvnbdofl); gmm::clear(Melem);
+      for (size_type i = 0; i < cvnbdofl; ++i)
+	for (size_type j = 0; j < cvnbdofl; ++j)
+	  if (i%N == j%N) Melem(i,j) = -tl[i/N]*tl[j/N]*weight/r;
+      mat_elem_assembly(cf.LL_matrix(boundary_num, boundary_num),
+			Melem, mfl, cv, mfl, cv);
+    }
+    
+    // Rhs term (1/r)\int (\lambda - P(\zeta)).\mu
+    // Unstabilized frictionless case for the moment
+    if (state) gmm::add(lambda, gmm::scaled(n, r*d0), zeta);
+    if (version & model::BUILD_RHS) {
+      gmm::clear(vv);
+      if (state) {
+	gmm::copy(zeta, vv);
+	De_Saxce_projection(vv, n, scalar_type(0));
+	gmm::scale(vv, -scalar_type(1));
+	gmm::add(lambda, vv);
+      } else gmm::copy(lambda, vv);
+      gmm::resize(Velem,  cvnbdofl); gmm::clear(Velem);
+      for (size_type i = 0; i < cvnbdofl; ++i)
+	Velem[i] = (tl[i/N] * vv[i%N])*weight/r;
+      vec_elem_assembly(cf.L_vector(boundary_num), Velem, mfl, cv);
+    }
+
+    if (state) {
+      base_matrix grad_y0(N, N), gradinv_y0(N, N), gradaux(N,N);
+      base_vector coeff_y0;
+      base_small_vector vvv(N), ntilde_y0(N);
+      base_tensor tgradu, tu_y0, tgradu_y0;
+      size_type cv_y0 = 0, cvnbdofu_y0 = 0;
+      size_type boundary_num_y0
+	= (state == 1) ? boundary_of_elements[elt_nums[ibound]] : 0;
+      const mesh_fem &mfu_y0
+	= (state == 1) ? cf.mfu_of_boundary(boundary_num_y0) : mfu;
+      ctxu.grad_base_value(tgradu);
+      
+      if (state == 1) {
+	cv_y0 = ind_of_elements[elt_nums[ibound]];
+	cvnbdofu_y0 = mfu_y0.nb_basic_dof_of_element(cv_y0);
+	const model_real_plain_vector &U_y0
+	  = cf.disp_of_boundary(boundary_num_y0);
+	//mesh_fem::ind_dof_ct::const_iterator
+	//  itdof = mfu_y0.ind_basic_dof_of_element(cv_y0).begin();
+	coeff_y0.resize(cvnbdofu_y0);
+	gmm::copy(gmm::sub_vector
+		  (U_y0, gmm::sub_index
+		   (mfu_y0.ind_basic_dof_of_element(cv_y0))), coeff_y0);
+	ctx_y0s[ibound].pf()->interpolation_grad(ctx_y0s[ibound], coeff_y0,
+						 grad_y0, dim_type(N));
+	gmm::add(gmm::identity_matrix(), grad_y0);
+	gmm::copy(grad_y0, gradinv_y0);
+	gmm::lu_inverse(gradinv_y0);// à proteger contre la non-inversibilité
+	ctx_y0s[ibound].base_value(tu_y0);
+	ctx_y0s[ibound].grad_base_value(tgradu_y0);
+	gmm::mult(gmm::transposed(gradinv_y0), n0_y0s[ibound], ntilde_y0); // (not unit) normal vector
+      }
+      
+      // Rhs term \int \lambda.(\psi(x_0) - \psi(y_0))
+      if (version & model::BUILD_RHS) {
+	gmm::resize(Velem,  cvnbdofu);gmm::clear(Velem);
+	for (size_type i = 0; i < cvnbdofu; ++i)
+	  Velem[i] = tu[i/N] * lambda[i%N]*weight;
+	vec_elem_assembly(cf.U_vector(boundary_num), Velem, mfu, cv);
+	
+	if (state == 1) {
+	  gmm::resize(Velem,  cvnbdofu_y0); gmm::clear(Velem);
+	  for (size_type i = 0; i < cvnbdofu_y0; ++i)
+	    Velem[i] = -tu_y0[i/N] * lambda[i%N]*weight;
+	  vec_elem_assembly(cf.U_vector(boundary_num_y0), Velem, mfu_y0,cv_y0);
+	}
+      }	
+      
+      if (version & model::BUILD_MATRIX) {
+	// Tangent term \int (\delta \lambda).(\psi(y_0) - \psi(x_0))
+	gmm::resize(Melem, cvnbdofu, cvnbdofl); gmm::clear(Melem);
+	for (size_type i = 0; i < cvnbdofu; ++i)
+	  for (size_type j = 0; j < cvnbdofl; ++j)
+	    if (i%N == j%N) Melem(i,j) = -tu[i/N]*tl[j/N]*weight;
+	mat_elem_assembly(cf.UL_matrix(boundary_num, boundary_num),
+			  Melem, mfu, cv, mfl, cv);
+	
+	if (state == 1) {
+	  gmm::resize(Melem, cvnbdofu_y0, cvnbdofl); gmm::clear(Melem);
+	  for (size_type i = 0; i < cvnbdofu_y0; ++i)
+	    for (size_type j = 0; j < cvnbdofl; ++j)
+	      if (i%N == j%N) Melem(i,j) = tu_y0[i/N]*tl[j/N]*weight;
+	  mat_elem_assembly(cf.UL_matrix(boundary_num_y0, boundary_num),
+			    Melem, mfu_y0, cv_y0, mfl, cv);
+	}
+	
+	// Tangent term \int \lambda.((\nabla \psi(y_0))(I+\nabla u(y_0))^{-1}(\delta u(x_0) - \delta u(y_0)))
+	if (state == 1) {
+	  gmm::resize(Melem, cvnbdofu_y0, cvnbdofu); gmm::clear(Melem);
+	  for (size_type i = 0; i < cvnbdofu_y0; ++i)
+	    for (size_type j = 0; j < cvnbdofu; ++j)
+	      for (size_type k = 0; k < N; ++k)
+		Melem(i, j) += lambda[i%N] * tgradu_y0[i-(i%N)+k]
+		  * gradinv_y0(k, j%N) * tu[j/N]*weight;
+	  mat_elem_assembly(cf.UU_matrix(boundary_num_y0, boundary_num),
+			    Melem, mfu_y0, cv_y0, mfu, cv);
+	  
+	  gmm::resize(Melem, cvnbdofu_y0, cvnbdofu_y0); gmm::clear(Melem);
+	  for (size_type i = 0; i < cvnbdofu_y0; ++i)
+	    for (size_type j = 0; j < cvnbdofu_y0; ++j)
+	      for (size_type k = 0; k < N; ++k)
+		Melem(i, j) -= lambda[i%N] * tgradu_y0[i-(i%N)+k]
+		  * gradinv_y0(k, j%N) * tu_y0[j/N]*weight;
+	  mat_elem_assembly(cf.UU_matrix(boundary_num_y0, boundary_num_y0),
+			    Melem, mfu_y0, cv_y0, mfu_y0, cv_y0);
+	}
+	
+	// Tangent term (1/r)\int \nabla P(zeta) (dzeta/dlambda)(\delta lambda) . \mu
+	De_Saxce_projection_grad(zeta, n, scalar_type(0), grad);
+	gmm::resize(Melem, cvnbdofl, cvnbdofl); gmm::clear(Melem);
+	for (size_type i = 0; i < cvnbdofl; ++i)
+	  for (size_type j = 0; j < cvnbdofl; ++j)
+	    Melem(i,j) = tl[i/N]*tl[j/N]*grad(i%N,j%N)*weight/r;
+	mat_elem_assembly(cf.LL_matrix(boundary_num, boundary_num),
+			  Melem, mfl, cv, mfl, cv);
+
+      
+	// Tangent term \int (I+\nabla u(y_0))^{-T}\nabla delta(y_0).\delta u(x_0)(\nabla P(zeta) n . \mu)
+	gmm::mult(grad, n, vv);
+	gmm::resize(Melem, cvnbdofl, cvnbdofu); gmm::clear(Melem);
+	for (size_type i = 0; i < cvnbdofl; ++i)
+	  for (size_type j = 0; j < cvnbdofu; ++j)
+	    Melem(i, j) = tl[i/N]*vv[i%N]*tu[j/N]
+	      *((state == 1) ? ntilde_y0[j%N] : grad_obs[j%N])*weight;
+	mat_elem_assembly(cf.LU_matrix(boundary_num, boundary_num),
+			  Melem, mfl, cv, mfu, cv);
+	
+	// Tangent term -\int (I+\nabla u(y_0))^{-T}\nabla delta(y_0).\delta u(y_0)(\nabla P(zeta) n . \mu)
+	if (state == 1) {
+	  gmm::resize(Melem, cvnbdofl, cvnbdofu_y0); gmm::clear(Melem);
+	  for (size_type i = 0; i < cvnbdofl; ++i)
+	    for (size_type j = 0; j < cvnbdofu_y0; ++j)
+	      Melem(i, j) = -tl[i/N]*vv[i%N]*tu_y0[j/N]*ntilde_y0[j%N]*weight;
+	  mat_elem_assembly(cf.LU_matrix(boundary_num, boundary_num_y0),
+			    Melem, mfl, cv, mfu_y0, cv_y0);
+	}
+	
+	// Tangent term \int d_0(\nabla P)(dn/du)(\delta u).\mu
+	gmm::resize(Melem, cvnbdofl, cvnbdofu); gmm::clear(Melem);
+	gmm::mult(grad, n, vv);
+	gmm::mult(gradinv, n, vvv);
+	gmm::mult(gradinv, gmm::transposed(grad), gradaux);
+	for (size_type i = 0; i < cvnbdofl; ++i)
+	  for (size_type j = 0; j < cvnbdofu; ++j)
+	    for (size_type k = 0; k < N; ++k)
+	      Melem(i,j) += d0*tl[i/N]*vv[i%N]
+		*tgradu[j-(j%N)+k]*n[j%N]*vvv[k]*weight;
+	for (size_type i = 0; i < cvnbdofl; ++i)
+	  for (size_type j = 0; j < cvnbdofu; ++j)
+	    for (size_type k = 0; k < N; ++k)
+	      Melem(i,j) -= d0*tl[i/N]*gradaux(k,i%N)*tgradu[j-(j%N)+k]
+		*n[j%N]*weight;
+
+	
+	
+	// Tangent term (1/r)\int \nabla_n P(zeta) (dn/du)(\delta u) . \mu
+	// On peut certainement factoriser d'avantage ce terme avec le
+	// précédent. Attendre la version avec frottement.
+	De_Saxce_projection_gradn(zeta, n, scalar_type(0), grad);
+	gmm::mult(gradinv, gmm::transposed(grad), gradaux);
+	gmm::mult(grad, n, vv);
+	gmm::mult(gradinv, n, vvv);
+	// gmm::resize(Melem, cvnbdofl, cvnbdofu); gmm::clear(Melem);factorised
+	for (size_type i = 0; i < cvnbdofl; ++i)
+	  for (size_type j = 0; j < cvnbdofu; ++j)
+	    for (size_type k = 0; k < N; ++k)
+	      Melem(i,j) += tl[i/N]*vv[i%N]
+		*tgradu[j-(j%N)+k]*n[j%N]*vvv[k]*weight/r;
+	for (size_type i = 0; i < cvnbdofl; ++i)
+	  for (size_type j = 0; j < cvnbdofu; ++j)
+	    for (size_type k = 0; k < N; ++k)
+	      Melem(i,j) -= tl[i/N]*gradaux(k,i%N)*tgradu[j-(j%N)+k]
+		*n[j%N]*weight/r;
+	mat_elem_assembly(cf.LU_matrix(boundary_num, boundary_num),
+			  Melem, mfl, cv, mfu, cv);
+      }
+    }
+    return true;
+  }
+
+  //=========================================================================
+  // 3)- Large sliding contact brick
+  //=========================================================================
+
+  struct integral_large_sliding_contact_brick : public virtual_brick {
+
+    
+    struct contact_boundary {
+      size_type region;
+      std::string varname;
+      std::string multname;
+      const mesh_im *mim;
+    };
+
+    std::vector<contact_boundary> boundaries;
+    std::vector<std::string> obstacles;
+
+    void add_boundary(const std::string &varn, const std::string &multn,
+		      const mesh_im &mim, size_type region) {
+      contact_boundary cb;
+      cb.region = region; cb.varname = varn; cb.multname = multn; cb.mim=&mim;
+      boundaries.push_back(cb);
+    }
+
+    void add_obstacle(const std::string &obs) 
+    { obstacles.push_back(obs); }
+
+    void build_contact_frame(const model &md, contact_frame &cf) const {
+      for (size_type i = 0; i < boundaries.size(); ++i) {
+	const contact_boundary &cb = boundaries[i];
+	cf.add_boundary(md.mesh_fem_of_variable(cb.varname),
+			md.real_variable(cb.varname),
+			md.mesh_fem_of_variable(cb.multname),
+			md.real_variable(cb.multname), cb.region);
+      }
+      for (size_type i = 0; i < obstacles.size(); ++i)
+	cf.add_obstacle(obstacles[i]);
+    }
+
+
+    virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version version) const;
+
+    integral_large_sliding_contact_brick() {
+      set_flags("Integral large sliding contact brick",
+                false /* is linear*/, false /* is symmetric */,
+                false /* is coercive */, true /* is real */,
+                false /* is complex */);
+    }
+
+  };
+
+
+
+
+  void integral_large_sliding_contact_brick::asm_real_tangent_terms
+  (const model &md, size_type /* ib */, const model::varnamelist &vl,
+   const model::varnamelist &dl, const model::mimlist &/* mims */,
+   model::real_matlist &matl, model::real_veclist &vecl,
+   model::real_veclist &, size_type /* region */,
+   build_version version) const {
+
+    fem_precomp_pool fppool;
+    base_matrix G;
+    size_type N = md.mesh_fem_of_variable(vl[0]).linked_mesh().dim();
+    contact_frame cf(N);
+    build_contact_frame(md, cf);
+    
+    size_type Nvar = vl.size(), Nu = cf.Urhs.size(), Nl = cf.Lrhs.size();
+    GMM_ASSERT1(Nvar == Nu+Nl, "Wrong size of variable list for integral "
+		"large sliding contact brick");
+    GMM_ASSERT1(matl.size() == Nvar*Nvar, "Wrong size of terms for "
+		"integral large sliding contact brick");
+    
+    if (version & model::BUILD_MATRIX) {
+      for (size_type i = 0; i < Nvar; ++i)
+	for (size_type j = 0; j < Nvar; ++j) {
+	  gmm::clear(matl[i*Nvar+j]);
+	  if (i <  Nu && j <  Nu) cf.UU(i,j)       = &(matl[i*Nvar+j]);
+	  if (i >= Nu && j <  Nu) cf.LU(i-Nu,j)    = &(matl[i*Nvar+j]);
+	  if (i <  Nu && j >= Nu) cf.UL(i,j-Nu)    = &(matl[i*Nvar+j]);
+	  if (i >= Nu && j >= Nu) cf.LL(i-Nu,j-Nu) = &(matl[i*Nvar+j]);
+	}
+    }
+    if (version & model::BUILD_RHS) {
+      for (size_type i = 0; i < vl.size(); ++i) {
+	if (i < Nu) cf.Urhs[i] = &(vecl[i*Nvar]);
+	else cf.Lrhs[i-Nu] = &(vecl[i*Nvar]);
+      }
+    }
+    
+    // Data : r, [friction_coeff,]
+    GMM_ASSERT1(dl.size() == 2, "Wrong number of data for integral large "
+		"sliding contact brick");
+    
+    const model_real_plain_vector &vr = md.real_variable(dl[0]);
+    GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+    
+    const model_real_plain_vector &f_coeff = md.real_variable(dl[1]);
+    GMM_ASSERT1(gmm::vect_size(f_coeff) == 1,
+		"Friction coefficient should be a scalar");
+    
+    contact_elements ce(cf);
+    ce.init();
+    
+    for (size_type bnum = 0; bnum < boundaries.size(); ++bnum) {
+      mesh_region rg(boundaries[bnum].region);
+      const mesh_fem &mfu=md.mesh_fem_of_variable(boundaries[bnum].varname);
+      const mesh_fem &mfl=md.mesh_fem_of_variable(boundaries[bnum].multname);
+      const mesh_im &mim = *(boundaries[bnum].mim);
+      const mesh &m = mfu.linked_mesh();
+      mfu.linked_mesh().intersect_with_mpi_region(rg);
+      
+      for (getfem::mr_visitor v(rg, m); !v.finished(); ++v) {
+	// cout << "boundary " << bnum << " element " << v.cv() << endl;
+	size_type cv = v.cv();
+	bgeot::pgeometric_trans pgt = m.trans_of_convex(cv);
+	pfem pf_s = mfu.fem_of_element(cv);
+	pfem pf_sl = mfl.fem_of_element(cv);
+	pintegration_method pim = mim.int_method_of_element(cv);
+	bgeot::vectors_to_base_matrix(G, m.points_of_convex(cv));
+	
+	pfem_precomp pfpu
+	  = fppool(pf_s,&(pim->approx_method()->integration_points()));
+	pfem_precomp pfpl
+	  = fppool(pf_sl,&(pim->approx_method()->integration_points()));
+	fem_interpolation_context ctxu(pgt,pfpu,size_type(-1), G, cv, v.f());
+	fem_interpolation_context ctxl(pgt,pfpl,size_type(-1), G, cv, v.f());
+	
+	for (size_type k = 0;
+	     k < pim->approx_method()->nb_points_on_face(v.f()); ++k) {
+	  size_type ind
+	    = pim->approx_method()->ind_first_point_on_face(v.f()) + k;
+	  ctxu.set_ii(ind);
+	  ctxl.set_ii(ind);
+	  if (!(ce.add_point_contribution
+	       (bnum, ctxu, ctxl,pim->approx_method()->coeff(ind),
+		f_coeff[0], vr[0], version))) return;
+	}
+      }
+    }
+  }
+  
+
+  // r ne peut pas être variable pour le moment.
+  // dataname_friction_coeff ne peut pas être variable non plus ...
+
+  size_type add_integral_large_sliding_contact_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &multname, const std::string &dataname_r,
+   const std::string &dataname_friction_coeff, size_type region) {
+
+    integral_large_sliding_contact_brick *pbr
+      = new integral_large_sliding_contact_brick();
+    
+    pbr->add_boundary(varname_u, multname, mim, region);
+
+    model::termlist tl;
+    tl.push_back(model::term_description(varname_u, varname_u, false));
+    tl.push_back(model::term_description(varname_u, multname,  false));
+    tl.push_back(model::term_description(multname,  varname_u, false));
+    tl.push_back(model::term_description(multname,  multname,  false));
+
+    model::varnamelist dl(1, dataname_r);
+    dl.push_back(dataname_friction_coeff);
+
+    model::varnamelist vl(1, varname_u);
+    vl.push_back(multname);
+    
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+  }
+
+
+  void add_boundary_to_large_sliding_contact_brick
+  (model &md, size_type indbrick, const mesh_im &mim,
+   const std::string &varname_u, const std::string &multname,
+   size_type region) {
+    dim_type N = md.mesh_fem_of_variable(varname_u).linked_mesh().dim();
+    pbrick pbr = md.brick_pointer(indbrick);
+    md.touch_brick(indbrick);
+    integral_large_sliding_contact_brick *p
+      = dynamic_cast<integral_large_sliding_contact_brick *>
+      (const_cast<virtual_brick *>(pbr.get()));
+    GMM_ASSERT1(p, "Wrong type of brick");
+    p->add_boundary(varname_u, multname, mim, region);
+    md.add_mim_to_brick(indbrick, mim);
+
+    contact_frame cf(N);
+    p->build_contact_frame(md, cf);
+
+    model::varnamelist vl;
+    size_type nvaru = 0;
+    for (size_type i = 0; i < cf.contact_boundaries.size(); ++i)
+      if (cf.contact_boundaries[i].ind_U >= nvaru)
+	{ vl.push_back(p->boundaries[i].varname); ++nvaru; }
+
+    size_type nvarl = 0;
+    for (size_type i = 0; i < cf.contact_boundaries.size(); ++i)
+      if (cf.contact_boundaries[i].ind_lambda >= nvarl)
+	{ vl.push_back(p->boundaries[i].multname); ++nvarl; }
+    md.change_variables_of_brick(indbrick, vl);
+
+    model::termlist tl;
+    for (size_type i = 0; i < vl.size(); ++i)
+      for (size_type j = 0; j < vl.size(); ++j)
+	tl.push_back(model::term_description(vl[i], vl[j], false));
+
+    md.change_terms_of_brick(indbrick, tl);
+  }
+
+  void add_rigid_obstacle_to_large_sliding_contact_brick
+  (model &md, size_type indbrick, const std::string &obs) { // The velocity field should be added to an (optional) parameter ... (and optionaly represented by a rigid motion only ... the velocity should be modifiable ...
+    pbrick pbr = md.brick_pointer(indbrick);
+    md.touch_brick(indbrick);
+     integral_large_sliding_contact_brick *p
+       = dynamic_cast<integral_large_sliding_contact_brick *>
+       (const_cast<virtual_brick *>(pbr.get()));
+    GMM_ASSERT1(p, "Wrong type of brick");
+    p->add_obstacle(obs);
+  }
+
+}  /* end of namespace getfem.                                             */
diff --git a/src/getfem_contact_and_friction_nodal.cc b/src/getfem_contact_and_friction_nodal.cc
new file mode 100644
index 0000000..8aebc3a
--- /dev/null
+++ b/src/getfem_contact_and_friction_nodal.cc
@@ -0,0 +1,1962 @@
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard, Konstantinos Poulios.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+
+#include "getfem/getfem_contact_and_friction_nodal.h"
+#include "getfem/getfem_contact_and_friction_common.h"
+#include "getfem/getfem_assembling.h"
+
+#include <getfem/getfem_arch_config.h>
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#include <muParser/muParser.h>
+#elif GETFEM_HAVE_MUPARSER_H
+#include <muParser.h>
+#endif
+
+#ifdef GETFEM_HAVE_QHULL_QHULL_H
+#include <getfem/getfem_mesher.h>
+#else
+#include <getfem/bgeot_kdtree.h>
+#endif
+
+#ifdef _MSC_VER
+#define xor ^
+#endif
+
+namespace getfem {
+
+  typedef bgeot::convex<base_node>::dref_convex_pt_ct dref_convex_pt_ct;
+  typedef bgeot::basic_mesh::ref_mesh_face_pt_ct ref_mesh_face_pt_ct;
+
+
+  // Computation of an orthonormal basis to a unit vector.
+  static void orthonormal_basis_to_unit_vec(size_type d, const base_node &un,
+                                            base_node *ut) {
+    size_type n = 0;
+    for (size_type k = 0; k <= d && n < d; ++k) {
+      gmm::resize(ut[n], d+1);
+      gmm::clear(ut[n]);
+      ut[n][k] = scalar_type(1);
+
+      ut[n] -= gmm::vect_sp(un, ut[n]) * un;
+      for (size_type nn = 0; nn < n; ++nn)
+        ut[n] -= gmm::vect_sp(ut[nn], ut[n]) * ut[nn];
+
+      if (gmm::vect_norm2(ut[n]) < 1e-3) continue;
+      ut[n] /= gmm::vect_norm2(ut[n]);
+      ++n;
+    }
+    GMM_ASSERT1(n == d, "Gram-Schmidt algorithm to find an "
+      "orthonormal basis for the tangential displacement failed");
+  }
+
+  // "contact_node" is an object which contains data about nodes expected
+  // to participate in a contact condition. A contact node refers to a
+  // specific mesh_fem.
+  struct contact_node {
+    const mesh_fem *mf;          // Pointer to the mesh_fem the contact node is
+                                 // associated with
+    size_type dof;               // first dof id of the node in the considered mesh_fem
+    std::vector<size_type> cvs;  // list of ids of neigbouring convexes
+    std::vector<short_type> fcs; // list of local ids of neigbouring faces
+
+    contact_node() : mf(0), cvs(0), fcs(0) {}
+    contact_node(const mesh_fem &mf_) {mf = &mf_;}
+  };
+
+  // contact_node's pair
+  struct contact_node_pair {
+    contact_node cn_s, cn_m;  // Slave and master contact_node's
+    scalar_type dist2;        // Square of distance between slave and master nodes
+    bool is_active;
+    contact_node_pair(scalar_type threshold=10.) : cn_s(), cn_m()
+      {dist2 = threshold * threshold; is_active = false;}
+  };
+
+  // contact_node's pair list
+  class contact_node_pair_list : public std::vector<contact_node_pair> {
+
+    void contact_node_list_from_region
+      (const mesh_fem &mf, size_type contact_region,
+       std::vector<contact_node> &cnl) {
+
+      cnl.clear();
+      const mesh &m = mf.linked_mesh();
+      size_type qdim = mf.get_qdim();
+      std::map<size_type, size_type> dof_to_cnid;
+      size_type cnid = 0;
+      dal::bit_vector dofs = mf.basic_dof_on_region(contact_region);
+      for (dal::bv_visitor dof(dofs); !dof.finished(); ++dof)
+        if ( dof % qdim == 0) {
+          dof_to_cnid[dof] = cnid++;
+          contact_node new_cn(mf);
+          new_cn.dof = dof;
+          cnl.push_back(new_cn);
+        }
+      for (mr_visitor face(m.region(contact_region));
+           !face.finished(); ++face) {
+        assert(face.is_face());
+        mesh_fem::ind_dof_face_ct
+          face_dofs = mf.ind_basic_dof_of_face_of_element(face.cv(),face.f());
+        for (size_type it=0; it < face_dofs.size(); it += qdim ) {
+          size_type dof = face_dofs[it];
+          cnid = dof_to_cnid[dof];
+          cnl[cnid].cvs.push_back(face.cv());
+          cnl[cnid].fcs.push_back(face.f());
+        } // for:it
+      } // for:face
+    } // append
+
+  public:
+    contact_node_pair_list() : std::vector<contact_node_pair>() {}
+
+    void append_min_dist_cn_pairs(const mesh_fem &mf1, const mesh_fem &mf2,
+                                  size_type rg1, size_type rg2,
+                                  bool slave1=true, bool slave2=false) {
+
+      std::vector<contact_node> cnl1(0), cnl2(0);
+      contact_node_list_from_region(mf1, rg1, cnl1);
+      contact_node_list_from_region(mf2, rg2, cnl2);
+
+      // Find minimum distance node pairs
+      size_type size0 = this->size();
+      size_type size1 = slave1 ? cnl1.size() : 0;
+      size_type size2 = slave2 ? cnl2.size() : 0;
+      this->resize( size0 + size1 + size2 );
+# ifndef GETFEM_HAVE_QHULL_QHULL_H
+      bgeot::kdtree tree1, tree2;
+      for (size_type i1 = 0; i1 < cnl1.size(); ++i1) {
+        contact_node *cn1 = &cnl1[i1];
+        tree1.add_point_with_id(cn1->mf->point_of_basic_dof(cn1->dof), i1);
+      }
+      for (size_type i2 = 0; i2 < cnl2.size(); ++i2) {
+        contact_node *cn2 = &cnl2[i2];
+        tree2.add_point_with_id(cn2->mf->point_of_basic_dof(cn2->dof), i2);
+      }
+      if (slave1) {
+        size_type ii1=size0;
+        for (size_type i1 = 0; i1 < cnl1.size(); ++i1, ++ii1) {
+          contact_node *cn1 = &cnl1[i1];
+          base_node node1 = cn1->mf->point_of_basic_dof(cn1->dof);
+          bgeot::index_node_pair ipt;
+          scalar_type dist2 = tree2.nearest_neighbor(ipt, node1);
+          if (ipt.i >= 0 && dist2 < (*this)[ii1].dist2) {
+            (*this)[ii1].cn_s = *cn1;
+            (*this)[ii1].cn_m = cnl2[ipt.i];
+            (*this)[ii1].dist2 = dist2;
+            (*this)[ii1].is_active = true;
+          }
+        }
+      }
+      if (slave2) {
+        size_type ii2=size0+size1;
+        for (size_type i2 = 0; i2 < cnl2.size(); ++i2, ++ii2) {
+          contact_node *cn2 = &cnl2[i2];
+          base_node node2 = cn2->mf->point_of_basic_dof(cn2->dof);
+          bgeot::index_node_pair ipt;
+          scalar_type dist2 = tree1.nearest_neighbor(ipt, node2);
+          if (ipt.i >= 0 && dist2 < (*this)[ii2].dist2) {
+            (*this)[ii2].cn_s = *cn2;
+            (*this)[ii2].cn_m = cnl1[ipt.i];
+            (*this)[ii2].dist2 = dist2;
+            (*this)[ii2].is_active = true;
+          }
+        }
+      }
+# else
+      std::vector<base_node> pts;
+      for (size_type i1 = 0; i1 < cnl1.size(); ++i1) {
+        contact_node *cn1 = &cnl1[i1];
+        pts.push_back(cn1->mf->point_of_basic_dof(cn1->dof));
+      }
+      for (size_type i2 = 0; i2 < cnl2.size(); ++i2) {
+        contact_node *cn2 = &cnl2[i2];
+        pts.push_back(cn2->mf->point_of_basic_dof(cn2->dof));
+      }
+      gmm::dense_matrix<size_type> simplexes;
+
+      getfem::delaunay(pts, simplexes);
+
+      size_type nb_vertices = gmm::mat_nrows(simplexes);
+      std::vector<size_type> facet_vertices(nb_vertices);
+      std::vector< std::vector<size_type> > pt1_neighbours(size1);
+      for (size_type i = 0; i < gmm::mat_ncols(simplexes); ++i) {
+        gmm::copy(gmm::mat_col(simplexes, i), facet_vertices);
+        for (size_type iv1 = 0; iv1 < nb_vertices-1; ++iv1) {
+          size_type v1 = facet_vertices[iv1];
+          bool v1_on_surface1 = (v1 < size1);
+          for (size_type iv2 = iv1 + 1; iv2 < nb_vertices; ++iv2) {
+            size_type v2 = facet_vertices[iv2];
+            bool v2_on_surface1 = (v2 < size1);
+            if (v1_on_surface1 xor v2_on_surface1) {
+              bool already_in = false;
+              size_type vv1 = (v1_on_surface1 ? v1 : v2);
+              size_type vv2 = (v2_on_surface1 ? v1 : v2);
+              for (size_type j = 0; j < pt1_neighbours[vv1].size(); ++j)
+                if (pt1_neighbours[vv1][j] == vv2) {
+                  already_in = true;
+                  break;
+                }
+              if (!already_in) pt1_neighbours[vv1].push_back(vv2);
+            }
+          }
+        }
+      }
+
+      for (size_type i1 = 0; i1 < size1; ++i1)
+        for (size_type j = 0; j < pt1_neighbours[i1].size(); ++j) {
+          size_type i2 = pt1_neighbours[i1][j] - size1;
+          size_type ii1 = size0 + i1;
+          size_type ii2 = size0 + size1 + i2;
+          contact_node *cn1 = &cnl1[i1];
+          base_node node1 = cn1->mf->point_of_basic_dof(cn1->dof);
+          contact_node *cn2 = &cnl2[i2];
+          base_node node2 = cn2->mf->point_of_basic_dof(cn2->dof);
+          scalar_type dist2 = gmm::vect_norm2_sqr(node1-node2);
+          if (slave1 && dist2 < (*this)[ii1].dist2) {
+            (*this)[ii1].cn_s = *cn1;
+            (*this)[ii1].cn_m = *cn2;
+            (*this)[ii1].dist2 = dist2;
+            (*this)[ii1].is_active = true;
+          }
+          if (slave2 && dist2 < (*this)[ii2].dist2) {
+            (*this)[ii2].cn_s = *cn2;
+            (*this)[ii2].cn_m = *cn1;
+            (*this)[ii2].dist2 = dist2;
+            (*this)[ii2].is_active = true;
+          }
+        }
+#endif
+    }
+
+    void append_min_dist_cn_pairs(const mesh_fem &mf,
+                                  size_type rg1, size_type rg2,
+                                  bool slave1=true, bool slave2=false) {
+      append_min_dist_cn_pairs(mf, mf, rg1, rg2, slave1, slave2);
+    }
+  };
+
+  scalar_type projection_on_convex_face
+    (const mesh &m, const size_type cv, const short_type fc,
+     const base_node &master_node, const base_node &slave_node,
+     base_node &un, base_node &proj_node, base_node &proj_node_ref) {
+
+    bgeot::pgeometric_trans pgt = m.trans_of_convex(cv);
+
+    if (pgt->is_linear()) {  //this condition is practically too strict
+
+      un = m.normal_of_face_of_convex(cv,fc);
+      un /= gmm::vect_norm2(un);
+      //proj_node = slave_node - [(slave_node-master_node)*n] * n
+      gmm::add(master_node, gmm::scaled(slave_node, -1.), proj_node);
+      gmm::copy(gmm::scaled(un, gmm::vect_sp(proj_node, un)), proj_node);
+      gmm::add(slave_node, proj_node);
+
+      bgeot::geotrans_inv_convex gic;
+      gic.init(m.points_of_convex(cv), pgt);
+      gic.invert(proj_node, proj_node_ref);
+      return pgt->convex_ref()->is_in(proj_node_ref);
+
+    } else {
+
+      size_type N = m.dim();
+      size_type P = pgt->structure()->dim();
+
+      size_type nb_pts_cv = pgt->nb_points();
+      size_type nb_pts_fc = pgt->structure()->nb_points_of_face(fc);
+
+      bgeot::convex_ind_ct ind_pts_fc = pgt->structure()->ind_points_of_face(fc);
+      ref_mesh_face_pt_ct pts_fc = m.points_of_face_of_convex(cv, fc);
+
+      // Local base on reference face
+      base_matrix base_ref_fc(P-1,N);
+      {
+        dref_convex_pt_ct dref_pts_fc = pgt->convex_ref()->dir_points_of_face(fc);
+        GMM_ASSERT1( dref_pts_fc.size() == P, "Dimensions mismatch");
+        base_node vec(dref_pts_fc[0].size());
+        for (size_type i = 0; i < P-1; ++i) {
+          vec = dref_pts_fc[i+1] - dref_pts_fc[0];
+          gmm::copy(vec,gmm::mat_row(base_ref_fc,i));
+        }
+      }
+
+      GMM_ASSERT1( slave_node.size() == N, "Dimensions mismatch");
+      const base_node &xx = slave_node;
+      base_node &xxp = proj_node;  xxp.resize(N);
+      base_node &xp = proj_node_ref;  xp.resize(P);
+      base_node vres(P);
+      scalar_type res= 1.;
+
+      // initial guess
+      xp = gmm::mean_value(pgt->convex_ref()->points_of_face(fc));
+
+      gmm::clear(xxp);
+      base_vector val(nb_pts_fc);
+      pgt->poly_vector_val(xp, ind_pts_fc, val);
+      for (size_type l = 0; l < nb_pts_fc; ++l)
+        gmm::add(gmm::scaled(pts_fc[l], val[l] ), xxp);
+
+      base_matrix G(N, nb_pts_fc);
+      vectors_to_base_matrix(G, pts_fc);
+
+      base_matrix K(N,P-1);
+
+      base_matrix grad_fc(nb_pts_fc, P);
+      base_matrix grad_fc1(nb_pts_fc, P-1);
+      base_matrix B(N,P-1), BB(N,P), CS(P-1,P-1);
+
+      scalar_type EPS = 10E-12;
+      unsigned cnt = 50;
+      while (res > EPS && --cnt) {
+        // computation of the pseudo inverse matrix B at point xp
+        pgt->poly_vector_grad(xp, ind_pts_fc, grad_fc);
+        gmm::mult(grad_fc, gmm::transposed(base_ref_fc), grad_fc1);
+        gmm::mult(G, grad_fc1, K);
+        gmm::mult(gmm::transposed(K), K, CS);
+        gmm::lu_inverse(CS);
+        gmm::mult(K, CS, B);
+        gmm::mult(B, base_ref_fc, BB);
+
+        // Projection onto the face of the convex
+        gmm::mult_add(gmm::transposed(BB), xx-xxp, xp);
+        gmm::clear(xxp);
+        pgt->poly_vector_val(xp, ind_pts_fc, val);
+        for (size_type l = 0; l < nb_pts_fc; ++l)
+          gmm::add(gmm::scaled(pts_fc[l], val[l]), xxp);
+
+        gmm::mult(gmm::transposed(BB), xx - xxp, vres);
+        res = gmm::vect_norm2(vres);
+      }
+      GMM_ASSERT1( res <= EPS,
+                  "Iterative pojection on convex face did not converge");
+      { // calculate K at the final point
+        pgt->poly_vector_grad(xp, ind_pts_fc, grad_fc);
+        gmm::mult(grad_fc, gmm::transposed(base_ref_fc), grad_fc1);
+        gmm::mult(G, grad_fc1, K);
+      }
+
+      // computation of normal vector
+      un.resize(N);
+      // un = xx - xxp;
+      // gmm::scale(un, 1/gmm::vect_norm2(un));
+      gmm::clear(un);
+      {
+        base_matrix KK(N,P);
+        { // calculate KK
+          base_matrix grad_cv(nb_pts_cv, P);
+          pgt->poly_vector_grad(xp, grad_cv);
+
+          base_matrix GG(N, nb_pts_cv);
+          vectors_to_base_matrix(GG, m.points_of_convex(cv));
+
+          gmm::mult(GG, grad_cv, KK);
+        }
+
+        base_matrix bases_product(P-1, P);
+        gmm::mult(gmm::transposed(K), KK, bases_product);
+
+        for (size_type i = 0; i < P; ++i) {
+          std::vector<size_type> ind(0);
+          for (size_type j = 0; j < P; ++j)
+            if (j != i ) ind.push_back(j);
+          scalar_type det = gmm::lu_det(gmm::sub_matrix(bases_product,
+                                                        gmm::sub_interval(0, P-1),
+                                                        gmm::sub_index(ind)      ) );
+          gmm::add(gmm::scaled(gmm::mat_col(KK, i), (i % 2) ? -det : +det ), un);
+        }
+      }
+      // normalizing
+      gmm::scale(un, 1/gmm::vect_norm2(un));
+      // ensure that normal points outwards
+      if (gmm::vect_sp(un, gmm::mean_value(pts_fc) -
+                           gmm::mean_value(m.points_of_convex(cv))) < 0)
+        gmm::scale(un,scalar_type(-1));
+
+      return pgt->convex_ref()->is_in(proj_node_ref);
+    }
+  }
+
+  void compute_contact_matrices
+         (const mesh_fem &mf_disp1, const mesh_fem &mf_disp2,
+          contact_node_pair_list &cnpl, model_real_plain_vector &gap,
+          CONTACT_B_MATRIX *BN1, CONTACT_B_MATRIX *BN2 = 0,
+          CONTACT_B_MATRIX *BT1 = 0, CONTACT_B_MATRIX *BT2 = 0) {
+
+    GMM_ASSERT1(gmm::vect_size(gap) == cnpl.size(),
+                "Wrong number of contact node pairs or wrong size of gap");
+    gmm::clear(*BN1);
+    GMM_ASSERT1( gmm::mat_nrows(*BN1) == cnpl.size(), "Wrong size of BN1");
+    if (BN2) {
+      gmm::clear(*BN2);
+      GMM_ASSERT1( gmm::mat_nrows(*BN2) == cnpl.size(), "Wrong size of BN2");
+    }
+    dim_type qdim = mf_disp1.get_qdim();
+    size_type d = qdim - 1;
+    if (BT1) {
+      gmm::clear(*BT1);
+      GMM_ASSERT1( gmm::mat_nrows(*BT1) == cnpl.size() * d, "Wrong size of BT1");
+    }
+    if (BT2) {
+      gmm::clear(*BT2);
+      GMM_ASSERT1( gmm::mat_nrows(*BT2) == cnpl.size() * d, "Wrong size of BT2");
+    }
+    gmm::fill(gap, scalar_type(10));  //FIXME: Needs a threshold value
+    for (size_type row = 0; row < cnpl.size(); ++row) {
+      contact_node_pair *cnp = &cnpl[row];
+      if (cnp->is_active) {
+        contact_node *cn_s = &cnp->cn_s;  //slave contact node
+        contact_node *cn_m = &cnp->cn_m;  //master contact node
+        const mesh &mesh_m = cn_m->mf->linked_mesh();
+        base_node slave_node = cn_s->mf->point_of_basic_dof(cn_s->dof);
+        base_node master_node = cn_m->mf->point_of_basic_dof(cn_m->dof);
+        base_node un_sel(3), proj_node_sel(3), proj_node_ref_sel(3);
+        scalar_type is_in_min = 1e5;  //FIXME
+        size_type cv_sel = 0, fc_sel = 0;
+        std::vector<size_type>::iterator cv;
+        std::vector<short_type>::iterator fc;
+        for (cv = cn_m->cvs.begin(), fc = cn_m->fcs.begin();
+             cv != cn_m->cvs.end() && fc != cn_m->fcs.end(); cv++, fc++) {
+          base_node un(3), proj_node(3), proj_node_ref(3);
+          scalar_type is_in = projection_on_convex_face
+            (mesh_m, *cv, *fc, master_node, slave_node, un, proj_node, proj_node_ref);
+          if (is_in < is_in_min) {
+            is_in_min = is_in;
+            cv_sel = *cv;
+            fc_sel = *fc;
+            un_sel = un;
+            proj_node_sel = proj_node;
+            proj_node_ref_sel = proj_node_ref;
+          }
+        }
+        if (is_in_min < 0.05) {  //FIXME
+          gap[row] = gmm::vect_sp(slave_node-proj_node_sel, un_sel);
+
+          base_node ut[3];
+          if (BT1) orthonormal_basis_to_unit_vec(d, un_sel, ut);
+
+          CONTACT_B_MATRIX *BN = 0;
+          CONTACT_B_MATRIX *BT = 0;
+          if (cn_s->mf == &mf_disp1) {
+            BN = BN1;
+            BT = BT1;
+          } else if (cn_s->mf == &mf_disp2) {
+            BN = BN2;
+            BT = BT2;
+          }
+          if (BN)
+            for (size_type k = 0; k <= d; ++k)
+              (*BN)(row, cn_s->dof + k) -= un_sel[k];
+          if (BT)
+            for (size_type k = 0; k <= d; ++k)
+              for (size_type n = 0; n < d; ++n)
+                (*BT)(row * d + n, cn_s->dof + k) -= ut[n][k];
+
+          BN = 0;
+          const mesh_fem *mf_disp = 0;
+          if (cn_m->mf == &mf_disp1) {
+            BN = BN1;
+            BT = BT1;
+            mf_disp = &mf_disp1;
+          } else if (cn_m->mf == &mf_disp2) {
+            BN = BN2;
+            BT = BT2;
+            mf_disp = &mf_disp2;
+          }
+          if (BN) {
+            base_matrix G;
+            base_matrix M(qdim, mf_disp->nb_basic_dof_of_element(cv_sel));
+            bgeot::vectors_to_base_matrix(G, mesh_m.points_of_convex(cv_sel));
+            pfem pf = mf_disp->fem_of_element(cv_sel);
+            bgeot::pgeometric_trans pgt = mesh_m.trans_of_convex(cv_sel);
+            fem_interpolation_context
+              ctx(pgt, pf, proj_node_ref_sel, G, cv_sel, fc_sel);
+            pf->interpolation (ctx, M, int(qdim));
+
+            mesh_fem::ind_dof_ct
+              master_dofs = mf_disp->ind_basic_dof_of_element(cv_sel);
+
+            model_real_plain_vector MT_u(mf_disp->nb_basic_dof_of_element(cv_sel));
+            gmm::mult(gmm::transposed(M), un_sel, MT_u);
+            for (size_type j = 0; j < master_dofs.size(); ++j)
+              (*BN)(row, master_dofs[j]) += MT_u[j];
+
+            if (BT) {
+              for (size_type n = 0; n < d; ++n) {
+                gmm::mult(gmm::transposed(M), ut[n], MT_u);
+                for (size_type j = 0; j < master_dofs.size(); ++j)
+                  (*BT)(row * d + n, master_dofs[j]) += MT_u[j];
+              }
+            }
+          } // BN
+
+        }
+      } // if:cnp->cn_s
+    } // cnp
+
+  } // compute_contact_matrices
+
+
+
+  //=========================================================================
+  //
+  //  Basic Brick (with given BN, BT, gap) and possibly two bodies
+  //
+  //=========================================================================
+
+  struct Coulomb_friction_brick : public virtual_brick {
+
+    mutable CONTACT_B_MATRIX BN1, BT1, BN2, BT2;
+    mutable CONTACT_B_MATRIX DN, DDN, DT, DDT; // For Hughes stabilization
+    mutable CONTACT_B_MATRIX BBN1, BBT1, BBN2, BBT2;
+    mutable model_real_plain_vector gap, threshold, friction_coeff, alpha;
+    mutable model_real_plain_vector RLN, RLT;
+    mutable scalar_type r, gamma;
+    mutable bool is_init;
+    bool Tresca_version, contact_only;
+    bool really_stationary, friction_dynamic_term;
+    bool two_variables, Hughes_stabilized;
+    int augmentation_version; // 0 for non-symmetric Alart-Curnier version
+                              // 1 for symmetric Alart-Curnier version
+                              // 2 for new version (augmented multipliers)
+                              // 3 for new version with De Saxcé projection
+
+    void init_BBN_BBT(void) const {
+      gmm::resize(BBN1, gmm::mat_nrows(BN1), gmm::mat_ncols(BN1));
+      gmm::copy(BN1, BBN1);
+      if (Hughes_stabilized) {
+        gmm::resize(DDN, gmm::mat_nrows(DN), gmm::mat_ncols(DN));
+        gmm::copy(DN, DDN);
+      }
+      if (two_variables) {
+        gmm::resize(BBN2, gmm::mat_nrows(BN2), gmm::mat_ncols(BN2));
+        gmm::copy(BN2, BBN2);
+      }
+      if (!contact_only) {
+        if (Hughes_stabilized) {
+          gmm::resize(DDT, gmm::mat_nrows(DT), gmm::mat_ncols(DT));
+          gmm::copy(DT, DDT);
+        }
+        gmm::resize(BBT1, gmm::mat_nrows(BT1), gmm::mat_ncols(BT1));
+        gmm::copy(BT1, BBT1);
+        if (two_variables) {
+          gmm::resize(BBT2, gmm::mat_nrows(BT2), gmm::mat_ncols(BT2));
+          gmm::copy(BT2, BBT2);
+        }
+      }
+      size_type nbc = gmm::mat_nrows(BN1);
+      size_type d = gmm::mat_nrows(BT1)/nbc;
+      for (size_type i = 0; i < nbc; ++i) {
+        gmm::scale(gmm::mat_row(BBN1, i), alpha[i]);
+        if (Hughes_stabilized) gmm::scale(gmm::mat_row(DDN, i), alpha[i]);
+        if (two_variables)
+          gmm::scale(gmm::mat_row(BBN2, i), alpha[i]);
+        if (!contact_only)
+          for (size_type k = 0; k < d; ++k) {
+            if (Hughes_stabilized)
+              gmm::scale(gmm::mat_row(DDT, d*i+k), alpha[i]);
+            gmm::scale(gmm::mat_row(BBT1, d*i+k), alpha[i]);
+            if (two_variables)
+              gmm::scale(gmm::mat_row(BBT2, d*i+k), alpha[i]);
+          }
+      }
+      is_init = true;
+    }
+
+    void precomp(const model_real_plain_vector &u1,
+                 const model_real_plain_vector &u2,
+                 const model_real_plain_vector &lambda_n,
+                 const model_real_plain_vector &lambda_t,
+                 const model_real_plain_vector &wt1,
+                 const model_real_plain_vector &wt2) const {
+      gmm::copy(gmm::scaled(gap, r), RLN);
+      for (size_type i = 0; i < gmm::mat_nrows(BN1); ++i) RLN[i] *= alpha[i];
+      gmm::add(lambda_n, RLN);
+      gmm::mult_add(BBN1, gmm::scaled(u1, -r), RLN);
+      if (Hughes_stabilized)
+        gmm::mult_add(DDN, gmm::scaled(lambda_n, -r), RLN);
+      if (two_variables) gmm::mult_add(BBN2, gmm::scaled(u2, -r), RLN);
+      if (!contact_only) {
+        gmm::copy(lambda_t, RLT);
+        if (friction_dynamic_term) {
+          gmm::mult_add(BBT1, gmm::scaled(wt1, -r*gamma), RLT);
+          if (two_variables)
+            gmm::mult_add(BBT2, gmm::scaled(wt2, -r*gamma), RLT);
+        }
+        if (!really_stationary) {
+          gmm::mult_add(BBT1, gmm::scaled(u1, -r), RLT);
+          if (two_variables) gmm::mult_add(BBT2, gmm::scaled(u2, -r), RLT);
+        }
+        if (Hughes_stabilized)
+          gmm::mult_add(DDT, gmm::scaled(lambda_t, -r), RLT);
+      }
+    }
+
+    // Common part for all contact with friction bricks
+    void basic_asm_real_tangent_terms(const model_real_plain_vector &u1,
+                                      const model_real_plain_vector &u2,
+                                      const model_real_plain_vector &lambda_n,
+                                      const model_real_plain_vector &lambda_t,
+                                      const model_real_plain_vector &wt1,
+                                      const model_real_plain_vector &wt2,
+                                      model::real_matlist &matl,
+                                      model::real_veclist &vecl,
+                                      build_version version) const {
+      size_type nbt = 4 + (contact_only ? 0 : 4) + (two_variables ? 3 : 0)
+        + (two_variables && !contact_only ? 2 : 0);
+      GMM_ASSERT1(matl.size() == nbt,
+                  "Wrong number of terms for the contact brick");
+
+      const scalar_type vt1 = scalar_type(1), vt0 = scalar_type(0);
+      size_type nbc = gmm::mat_nrows(BN1);
+      size_type d = gmm::mat_nrows(BT1)/nbc;
+
+      // Matrices to be filled
+      size_type nt = 0;
+      model_real_sparse_matrix &T_u1_u1 = matl[nt++], &T_u2_u2 = matl[nt++];
+      if (!two_variables) nt--;
+      model_real_sparse_matrix &T_u1_n = matl[nt++], &T_n_u1 = matl[nt++];
+      if (!two_variables) nt -= 2;
+      model_real_sparse_matrix &T_u2_n = matl[nt++], &T_n_u2 = matl[nt++];
+      size_type nvec_lambda_n = nt;
+      model_real_sparse_matrix &T_n_n = matl[nt++];
+      if (contact_only) nt -= 2;
+      model_real_sparse_matrix &T_u1_t = matl[nt++], &T_t_u1 = matl[nt++];
+      if (contact_only || !two_variables) nt -= 2;
+      model_real_sparse_matrix &T_u2_t = matl[nt++], &T_t_u2 = matl[nt++];
+      if (contact_only) nt -= 2;
+      size_type nvec_lambda_t = nt;
+      model_real_sparse_matrix &T_t_t = matl[nt++], &T_t_n = matl[nt++];
+
+      // Rhs to be filled
+      model_real_plain_vector &ru1 = vecl[0];
+      model_real_plain_vector &ru2 = vecl[1];
+      model_real_plain_vector &rlambda_n = vecl[nvec_lambda_n];
+      model_real_plain_vector &rlambda_t = vecl[nvec_lambda_t];
+
+      // pre-computations
+      if (!is_init) init_BBN_BBT();
+      gmm::resize(RLN, nbc);
+      if (!contact_only) gmm::resize(RLT, nbc*d);
+      if (augmentation_version <= 2)
+        precomp(u1, u2, lambda_n, lambda_t, wt1, wt2);
+
+      if (version & model::BUILD_MATRIX) {
+        base_matrix pg(d, d);
+        base_vector vg(d);
+
+        gmm::clear(T_n_n); gmm::clear(T_n_u1);
+        gmm::clear(T_u1_n); gmm::clear(T_u1_u1);
+        if (two_variables)
+          { gmm::clear(T_u2_u2); gmm::clear(T_n_u2); gmm::clear(T_u2_n); }
+        if (!contact_only) {
+          gmm::clear(T_u1_t); gmm::clear(T_t_n); gmm::clear(T_t_t);
+          if (two_variables) gmm::clear(T_u2_t);
+        }
+
+        switch (augmentation_version) {
+        case 1: case 2:
+          gmm::copy(gmm::scaled(gmm::transposed(BN1), -vt1), T_u1_n);
+          if (two_variables)
+            gmm::copy(gmm::scaled(gmm::transposed(BN2), -vt1), T_u2_n);
+          for (size_type i=0; i < nbc; ++i) {
+            if (RLN[i] > vt0) {
+              gmm::clear(gmm::mat_col(T_u1_n, i));
+              if (two_variables) gmm::clear(gmm::mat_col(T_u2_n, i));
+              T_n_n(i, i) = -vt1/(r*alpha[i]);
+            }
+            if (Hughes_stabilized && RLN[i] <= vt0)
+              gmm::copy(gmm::scaled(gmm::mat_row(DN, i), -vt1),
+                        gmm::mat_col(T_n_n, i));
+          }
+          if (Hughes_stabilized) {
+            model_real_sparse_matrix aux(nbc, nbc);
+            gmm::copy(gmm::transposed(T_n_n), aux);
+            gmm::copy(aux, T_n_n);
+          }
+          gmm::copy(gmm::transposed(T_u1_n), T_n_u1);
+          if (two_variables) gmm::copy(gmm::transposed(T_u2_n), T_n_u2);
+          if (!contact_only) {
+            for (size_type i=0; i < nbc; ++i) {
+              gmm::sub_interval SUBI(i*d, d);
+              scalar_type th = Tresca_version ? threshold[i]
+                : - (std::min(vt0, RLN[i])) * friction_coeff[i];
+              ball_projection_grad(gmm::sub_vector(RLT, SUBI), th, pg);
+              if (!really_stationary)
+                for (size_type k1 = 0; k1 < d; ++k1)
+                  for (size_type k2 = 0; k2 < d; ++k2) {
+                    gmm::add(gmm::scaled(gmm::mat_row(BT1,i*d+k1),-pg(k2,k1)),
+                             gmm::mat_col(T_u1_t, i*d+k2));
+                    if (two_variables)
+                      gmm::add(gmm::scaled(gmm::mat_row(BT2,i*d+k1),
+                                           -pg(k2,k1)),
+                               gmm::mat_col(T_u2_t, i*d+k2));
+                  }
+
+              if (!Tresca_version) {
+                if (RLN[i] <= vt0) {
+                  ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
+                  for (size_type k = 0; k < d; ++k)
+                    T_t_n(i*d+k, i) = - friction_coeff[i] * vg[k]/(r*alpha[i]);
+                }
+              }
+              for (size_type k = 0; k < d; ++k) pg(k,k) -= vt1;
+	      gmm::copy(gmm::scaled(pg, vt1/(r*alpha[i])),
+			gmm::sub_matrix(T_t_t,SUBI));
+              if (Hughes_stabilized) {
+                for (size_type k = 0; k < d; ++k)
+                  for (size_type l = 0; l < d; ++l) {
+                    gmm::add(gmm::scaled(gmm::mat_row(DT, d*i+l), -pg(k,l)),
+                             gmm::mat_col(T_t_t, d*i+k));
+                  }
+              }
+
+            }
+            if (Hughes_stabilized) {
+              model_real_sparse_matrix aux(gmm::mat_nrows(T_t_t),
+					   gmm::mat_nrows(T_t_t));
+              gmm::copy(gmm::transposed(T_t_t), aux);
+              gmm::copy(aux, T_t_t);
+            }
+            gmm::copy(gmm::transposed(T_u1_t), T_t_u1);
+            if (two_variables) gmm::copy(gmm::transposed(T_u2_t), T_t_u2);
+          }
+
+          if (augmentation_version == 1) {
+            gmm::copy(gmm::scaled(gmm::transposed(BN1), -vt1), T_u1_n);
+            if (two_variables)
+              gmm::copy(gmm::scaled(gmm::transposed(BN2), -vt1), T_u2_n);
+            if (!contact_only) {
+              gmm::copy(gmm::scaled(gmm::transposed(BT1), -vt1), T_u1_t);
+              if (two_variables)
+                gmm::copy(gmm::scaled(gmm::transposed(BT2), -vt1), T_u2_t);
+            }
+          } else {
+            model_real_sparse_matrix tmp1(gmm::mat_ncols(BN1),
+                                          gmm::mat_ncols(BN1));
+            gmm::mult(gmm::transposed(gmm::scaled(BBN1,-r)), T_n_u1, tmp1);
+            gmm::add(tmp1, T_u1_u1);
+            if (two_variables) {
+              gmm::mult(gmm::transposed(gmm::scaled(BBN2,-r)), T_n_u2, tmp1);
+              gmm::add(tmp1, T_u2_u2);
+            }
+
+            if (!contact_only) {
+              gmm::mult(gmm::transposed(gmm::scaled(BBT1,-r)), T_t_u1, tmp1);
+              gmm::add(tmp1, T_u1_u1);
+              if (two_variables) {
+                gmm::mult(gmm::transposed(gmm::scaled(BBT2,-r)), T_t_u2, tmp1);
+                gmm::add(tmp1, T_u2_u2);
+              }
+            }
+	  }
+
+	  if (!contact_only && !Tresca_version) {
+	    // should be simplified ... !
+	    model_real_sparse_matrix tmp5(gmm::mat_ncols(BT1),
+					  gmm::mat_ncols(BT1));
+	    model_real_sparse_matrix tmp6(gmm::mat_ncols(BT1),
+					  gmm::mat_ncols(BT1));
+	    model_real_sparse_matrix tmp7(gmm::mat_ncols(BT2),
+					  gmm::mat_ncols(BT2));
+	    model_real_sparse_matrix tmp8(gmm::mat_ncols(BT2),
+					  gmm::mat_ncols(BT2));
+	    model_real_sparse_matrix tmp3(gmm::mat_ncols(T_t_u1),
+					  gmm::mat_nrows(T_t_u1));
+	    model_real_sparse_matrix tmp4(gmm::mat_ncols(T_t_u2),
+					  gmm::mat_nrows(T_t_u2));
+	    
+	    for (size_type i=0; i < nbc; ++i) {
+	      gmm::sub_interval SUBI(i*d, d);
+	      scalar_type th = - (std::min(vt0, RLN[i])) * friction_coeff[i];
+	      if (RLN[i] <= vt0) {
+		ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
+		for (size_type k = 0; k < d; ++k) {
+		  gmm::add(gmm::scaled(gmm::mat_row(BN1,i),
+			 vg[k]*friction_coeff[i]), gmm::mat_col(tmp3, i*d+k));
+		  if (two_variables)
+		    gmm::add(gmm::scaled(gmm::mat_row(BN2,i),
+			 vg[k]*friction_coeff[i]), gmm::mat_col(tmp4, i*d+k));
+
+		  if (augmentation_version == 2) {
+
+		    gmm::add(gmm::scaled(gmm::mat_row(BT1,i*d+k),
+			   vg[k]*friction_coeff[i]), gmm::mat_col(T_u1_n, i));
+		    if (two_variables)
+		      gmm::add(gmm::scaled(gmm::mat_row(BT2,i*d+k),
+			   vg[k]*friction_coeff[i]), gmm::mat_col(T_u2_n, i));
+		  
+		    gmm::copy(gmm::scaled(gmm::mat_row(BBT1,i*d+k),
+					  -r*friction_coeff[i]*vg[k]),
+			      gmm::mat_col(tmp5, i*d+k));
+		    gmm::copy(gmm::mat_row(BN1,i),
+			      gmm::mat_col(tmp6, i*d+k));
+		    if (two_variables) {
+		      gmm::copy(gmm::scaled(gmm::mat_row(BBT2,i*d+k),
+					    -r*friction_coeff[i]*vg[k]),
+				gmm::mat_col(tmp7, i*d+k));
+		      gmm::copy(gmm::mat_row(BN2,i),
+				gmm::mat_col(tmp8, i*d+k));
+		    }
+		  }
+		}
+	      }
+	    }
+
+	    gmm::add(gmm::transposed(tmp3), T_t_u1);
+	    if (two_variables)
+	      gmm::add(gmm::transposed(tmp4), T_t_u2);
+	    
+	    if (augmentation_version == 2) {
+	      model_real_sparse_matrix tmp1(gmm::mat_ncols(BN1),
+					    gmm::mat_ncols(BN1));
+	      gmm::mult(tmp5, gmm::transposed(tmp6), gmm::transposed(tmp1));
+	      gmm::add(gmm::transposed(tmp1), T_u1_u1);
+	      if (two_variables) {
+		gmm::mult(tmp7, gmm::transposed(tmp8),gmm::transposed(tmp1));
+		gmm::add(gmm::transposed(tmp1), T_u2_u2);
+	      }
+	    }
+          }
+          break;
+
+        case 3:
+          gmm::copy(gmm::scaled(gmm::transposed(BN1), -vt1), T_u1_n);
+          if (two_variables)
+            gmm::copy(gmm::scaled(gmm::transposed(BN2), -vt1), T_u2_n);
+          for (size_type i=0; i < nbc; ++i) {
+            if (lambda_n[i] > vt0) {
+              gmm::clear(gmm::mat_col(T_u1_n, i));
+              if (two_variables) gmm::clear(gmm::mat_col(T_u2_n, i));
+              T_n_n(i, i) = -vt1/r;
+            }
+          }
+          gmm::copy(gmm::scaled(BN1, -vt1), T_n_u1);
+          if (two_variables) gmm::copy(gmm::scaled(BN2, -r), T_n_u2);
+          if (!contact_only) {
+            for (size_type i=0; i < nbc; ++i) {
+              gmm::sub_interval SUBI(i*d, d);
+              scalar_type th = Tresca_version ? threshold[i]
+                : gmm::neg(lambda_n[i]) * friction_coeff[i];
+              ball_projection_grad(gmm::sub_vector(lambda_t, SUBI), th, pg);
+              if (!really_stationary)
+                for (size_type k1 = 0; k1 < d; ++k1)
+                  for (size_type k2 = 0; k2 < d; ++k2) {
+                    gmm::add(gmm::scaled(gmm::mat_row(BT1,i*d+k1),-pg(k2,k1)),
+                             gmm::mat_col(T_u1_t, i*d+k2));
+                    if (two_variables)
+                      gmm::add(gmm::scaled(gmm::mat_row(BT2,i*d+k1),
+                                           -pg(k2,k1)),
+                               gmm::mat_col(T_u2_t, i*d+k2));
+                  }
+              if (!Tresca_version) {
+                ball_projection_grad_r(gmm::sub_vector(lambda_t, SUBI),th,vg);
+                for (size_type k1 = 0; k1 < d; ++k1) {
+                  gmm::add(gmm::scaled(gmm::mat_row(BT1,i*d+k1),
+                                       friction_coeff[i]*vg[k1]),
+                           gmm::mat_col(T_u1_n, i));
+                  if (two_variables)
+                    gmm::add(gmm::scaled(gmm::mat_row(BT2,i*d+k1),
+                                         friction_coeff[i]*vg[k1]),
+                             gmm::mat_col(T_u2_n, i));
+                  T_t_n(i*d+k1, i) = friction_coeff[i] * vg[k1] / (r*alpha[i]);
+                }
+              }
+              for (size_type k = 0; k < d; ++k) pg(k,k) -= vt1;
+
+              gmm::copy(gmm::scaled(pg, vt1/(r*alpha[i])),
+			gmm::sub_matrix(T_t_t, SUBI));
+
+            }
+            gmm::copy(gmm::scaled(BT1, -vt1), T_t_u1);
+            if (two_variables) gmm::copy(gmm::scaled(BT2, -r), T_t_u2);
+          }
+          break;
+
+        case 4: // Desaxce projection
+          base_small_vector x(d+1), n(d+1), u(d); n[0] = vt1;
+          base_matrix g(d+1, d+1);
+          model_real_sparse_matrix T_n_u1_transp(gmm::mat_ncols(T_n_u1), nbc);
+          model_real_sparse_matrix T_n_u2_transp(gmm::mat_ncols(T_n_u2), nbc);
+
+          gmm::mult(BT1, u1, RLT);
+          if (two_variables) gmm::mult_add(BT2, u2, RLT);
+
+          for (size_type i=0; i < nbc; ++i) {
+            x[0] = lambda_n[i];
+            for (size_type j=0; j < d; ++j) x[1+j] = lambda_t[i*d+j];
+            De_Saxce_projection_grad(x, n, friction_coeff[i], g);
+
+            gmm::add(gmm::scaled(gmm::mat_row(BN1, i), -g(0,0)),
+                     gmm::mat_col(T_u1_n, i));
+            if (two_variables)
+              gmm::add(gmm::scaled(gmm::mat_row(BN2, i), -g(0,0)),
+                       gmm::mat_col(T_u2_n, i));
+            T_n_n(i, i) = (g(0,0) - vt1)/(r*alpha[i]);
+
+            gmm::copy(gmm::sub_vector(RLT, gmm::sub_interval(i*d,d)), u);
+            scalar_type nu = gmm::vect_norm2(u);
+            if (nu != vt0)
+              for (size_type j=0; j < d; ++j) {
+                gmm::add(gmm::scaled(gmm::mat_row(BT1, i*d+j),
+                                     friction_coeff[i] * u[j] / nu),
+                         gmm::mat_col(T_n_u1_transp, i));
+                if (two_variables)
+                  gmm::add(gmm::scaled(gmm::mat_row(BT2, i*d+j),
+                                       friction_coeff[i] * u[j] / nu),
+                           gmm::mat_col(T_n_u2_transp, i));
+              }
+
+            for (size_type j=0; j < d; ++j) {
+              gmm::add(gmm::scaled(gmm::mat_row(BT1, i*d+j), -g(0,j+1)),
+                     gmm::mat_col(T_u1_n, i));
+              if (two_variables)
+                gmm::add(gmm::scaled(gmm::mat_row(BT2, i*d+j), -g(0,j+1)),
+                         gmm::mat_col(T_u2_n, i));
+
+              gmm::add(gmm::scaled(gmm::mat_row(BN1, i), -g(j+1,0)),
+                       gmm::mat_col(T_u1_t, i*d+j));
+              if (two_variables)
+                gmm::add(gmm::scaled(gmm::mat_row(BN2, i), -g(j+1,0)),
+                         gmm::mat_col(T_u2_t, i*d+j));
+
+              for (size_type k=0; k < d; ++k) {
+                gmm::add(gmm::scaled(gmm::mat_row(BT1, i*d+k), -g(1+j,1+k)),
+                         gmm::mat_col(T_u1_t, i*d+j));
+                if (two_variables)
+                  gmm::add(gmm::scaled(gmm::mat_row(BT2, i*d+k), -g(1+j,1+k)),
+                           gmm::mat_col(T_u2_t, i*d+j));
+                T_t_t(i*d+j, i*d+k) = g(1+j, 1+k)/r;
+              }
+              T_t_t(i*d+j, i*d+j) -= vt1/(r*alpha[i]);
+              T_t_n(i*d+j, i) = g(1+j,0)/(r*alpha[i]);
+              // T_n_t(i, i*d+j) = g(0,1+j)/(r*alpha[i]);
+            }
+          }
+          gmm::copy(gmm::scaled(BN1, -vt1), T_n_u1);
+          if (two_variables) gmm::copy(gmm::scaled(BN2, -vt1), T_n_u2);
+          gmm::add(gmm::transposed(T_n_u1_transp), T_n_u1);
+	  if (two_variables) gmm::add(gmm::transposed(T_n_u2_transp), T_n_u2);
+          gmm::copy(gmm::scaled(BT1, -vt1), T_t_u1);
+          if (two_variables) gmm::copy(gmm::scaled(BT2, -vt1), T_t_u2);
+          break;
+        }
+      }
+
+      if (version & model::BUILD_RHS) {
+
+        switch (augmentation_version) {
+        case 1: // unsymmetric Alart-Curnier
+          for (size_type i=0; i < nbc; ++i) {
+            RLN[i] = std::min(scalar_type(0), RLN[i]);
+            if (!contact_only) {
+              scalar_type radius = Tresca_version ? threshold[i]
+                : -friction_coeff[i]*RLN[i];
+              ball_projection
+                (gmm::sub_vector(RLT, gmm::sub_interval(i*d,d)), radius);
+            }
+          }
+          gmm::mult_add(gmm::transposed(BN1), lambda_n, ru1);
+          if (two_variables)
+            gmm::mult_add(gmm::transposed(BN2), lambda_n, ru2);
+          if (!contact_only) {
+            gmm::mult_add(gmm::transposed(BT1), lambda_t, ru1);
+            if (two_variables)
+              gmm::mult_add(gmm::transposed(BT2), lambda_t, ru2);
+          }
+	  for (size_type i = 0; i < nbc; ++i) {
+	    rlambda_n[i] = (lambda_n[i] - RLN[i]) / (r * alpha[i]);
+	    if (!contact_only) 
+	      for (size_type k = 0; k < d; ++k)
+		rlambda_t[i*d+k]
+		  = (lambda_t[i*d+k] - RLT[i*d+k]) / (r * alpha[i]);
+	  }
+          break;
+        case 2: // symmetric Alart-Curnier
+          for (size_type i=0; i < nbc; ++i) {
+            RLN[i] = std::min(vt0, RLN[i]);
+            if (!contact_only) {
+              scalar_type radius = Tresca_version ? threshold[i]
+                : -friction_coeff[i]*RLN[i];
+              ball_projection
+                (gmm::sub_vector(RLT, gmm::sub_interval(i*d,d)), radius);
+            }
+          }
+          gmm::mult_add(gmm::transposed(BN1), RLN, ru1);
+          if (two_variables) gmm::mult_add(gmm::transposed(BN2), RLN, ru2);
+          if (!contact_only) {
+            gmm::mult_add(gmm::transposed(BT1), RLT, ru1);
+            if (two_variables) gmm::mult_add(gmm::transposed(BT2), RLT, ru2);
+          }
+	  for (size_type i = 0; i < nbc; ++i) {
+	    rlambda_n[i] = (lambda_n[i] - RLN[i]) / (r * alpha[i]);
+	    if (!contact_only) 
+	      for (size_type k = 0; k < d; ++k)
+		rlambda_t[i*d+k]
+		  = (lambda_t[i*d+k] - RLT[i*d+k]) / (r * alpha[i]);
+	  }
+          break;
+        case 3: // New unsymmetric method
+          if (!contact_only) gmm::copy(lambda_t, RLT);
+          for (size_type i=0; i < nbc; ++i) {
+            RLN[i] = -gmm::neg(lambda_n[i]);
+            rlambda_n[i] = gmm::pos(lambda_n[i])/r - alpha[i]*gap[i];
+
+            if (!contact_only) {
+              scalar_type radius = Tresca_version ? threshold[i]
+                : friction_coeff[i]*gmm::neg(lambda_n[i]);
+              ball_projection
+                (gmm::sub_vector(RLT, gmm::sub_interval(i*d,d)), radius);
+            }
+          }
+          gmm::mult(gmm::transposed(BN1), RLN, ru1);
+          if (two_variables) gmm::mult(gmm::transposed(BN2), RLN, ru2);
+          gmm::mult_add(BBN1, u1, rlambda_n);
+          if (two_variables) gmm::mult_add(BBN2, u2, rlambda_n);
+          if (!contact_only) {
+            gmm::mult_add(gmm::transposed(BT1), RLT, ru1);
+            if (two_variables) gmm::mult_add(gmm::transposed(BT2), RLT, ru2);
+            gmm::add(gmm::scaled(lambda_t, vt1/r), gmm::scaled(RLT,-vt1/r),
+                      rlambda_t);
+            gmm::mult_add(BBT1, u1, rlambda_t);
+            if (two_variables) gmm::mult_add(BBT2, u2, rlambda_t);
+          }
+	  for (size_type i = 0; i < nbc; ++i) {
+	    rlambda_n[i] /= alpha[i];
+	    if (!contact_only) 
+	      for (size_type k = 0; k < d; ++k) rlambda_t[i*d+k] /= alpha[i];
+	  }
+          break;
+        case 4:  // New unsymmetric method with De Saxce projection
+          base_small_vector x(d+1), n(d+1);
+          n[0] = vt1;
+          GMM_ASSERT1(!Tresca_version,
+               "Augmentation version incompatible with Tresca friction law");
+          gmm::mult(BBT1, u1, rlambda_t);
+          if (two_variables)
+              gmm::mult_add(BBT2, u2, rlambda_t);
+          for (size_type i=0; i < nbc; ++i) {
+            x[0] = lambda_n[i];
+            gmm::copy(gmm::sub_vector(lambda_t, gmm::sub_interval(i*d,d)),
+                      gmm::sub_vector(x, gmm::sub_interval(1, d)));
+            De_Saxce_projection(x, n, friction_coeff[i]);
+            RLN[i] = x[0];
+            gmm::copy(gmm::sub_vector(x, gmm::sub_interval(1, d)),
+                      gmm::sub_vector(RLT, gmm::sub_interval(i*d,d)));
+            rlambda_n[i] = lambda_n[i]/r - x[0]/r - alpha[i]*gap[i]
+              - friction_coeff[i] * gmm::vect_norm2(gmm::sub_vector(rlambda_t,
+                                                    gmm::sub_interval(i*d,d)));
+          }
+          gmm::mult_add(gmm::transposed(BT1), RLT, ru1);
+          if (two_variables) gmm::mult_add(gmm::transposed(BT2), RLT, ru2);
+          gmm::mult_add(gmm::transposed(BN1), RLN, ru1);
+          if (two_variables) gmm::mult_add(gmm::transposed(BN2), RLN, ru2);
+          gmm::add(gmm::scaled(lambda_t, vt1/r), rlambda_t);
+          gmm::add(gmm::scaled(RLT, -vt1/r), rlambda_t);
+          gmm::mult_add(BBN1, u1, rlambda_n);
+          if (two_variables) gmm::mult_add(BBN2, u2, rlambda_n);
+	  for (size_type i = 0; i < nbc; ++i) {
+	    rlambda_n[i] /= alpha[i];
+	    if (!contact_only) 
+	      for (size_type k = 0; k < d; ++k) rlambda_t[i*d+k] /= alpha[i];
+	  }
+          break;
+        }
+      }
+    }
+
+    // specific part for the basic bricks : BN, BT, gap, r, alpha are given.
+    virtual void asm_real_tangent_terms(const model &md, size_type ib,
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type /* region */,
+                                        build_version version) const {
+      GMM_ASSERT1(mims.size() == 0, "Contact brick need no mesh_im");
+      size_type nbvar = 2 + (contact_only ? 0 : 1) + (two_variables ? 1 : 0);
+      GMM_ASSERT1(vl.size() == nbvar,
+                  "Wrong number of variables for contact brick");
+           size_type nbdl = 3 + (contact_only ? 0 : 1) + (Tresca_version ? 1 : 0)
+        + (friction_dynamic_term ? 1 : 0);
+     
+      GMM_ASSERT1(dl.size() == nbdl, "Wrong number of data for contact brick, "
+                  << dl.size() << " should be " << nbdl);
+
+      size_type nbc = gmm::mat_nrows(BN1);
+
+      // Variables
+      // Without friction and one displacement  : u1, lambda_n
+      // Without friction and two displacements : u1, u2, lambda_n
+      // With friction and one displacement     : u1, lambda_n, lambda_t
+      // With friction and two displacements    : u1, u2, lambda_n, lambda_t
+      size_type nv = 0;
+      const model_real_plain_vector &u1 = md.real_variable(vl[nv++]);
+      const model_real_plain_vector &u2 = md.real_variable(vl[nv++]);
+      if (!two_variables) nv--;
+      const model_real_plain_vector &lambda_n = md.real_variable(vl[nv++]);
+      if (contact_only) nv--;
+      const model_real_plain_vector &lambda_t = md.real_variable(vl[nv]);
+
+      // Parameters
+      // (order : r, gap, alpha, friction_coeff, gamma, wt, threshold)
+      size_type np = 0, np_wt1 = 0, np_wt2 = 0, np_alpha = 0;
+      const model_real_plain_vector &vr = md.real_variable(dl[np++]);
+      GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+      r = vr[0];
+      const model_real_plain_vector &vgap = md.real_variable(dl[np++]);
+      GMM_ASSERT1(gmm::vect_size(vgap) == 1 || gmm::vect_size(vgap) == nbc,
+                  "Parameter gap has a wrong size");
+      gmm::resize(gap, nbc);
+      if (gmm::vect_size(vgap) == 1)
+        gmm::fill(gap, vgap[0]);
+      else
+        gmm::copy(vgap, gap);
+      np_alpha = np++;
+      const model_real_plain_vector &valpha = md.real_variable(dl[np_alpha]);
+      GMM_ASSERT1(gmm::vect_size(valpha)== 1 || gmm::vect_size(valpha) == nbc,
+                  "Parameter alpha has a wrong size");
+      gmm::resize(alpha, nbc);
+      if (gmm::vect_size(valpha) == 1)
+        gmm::fill(alpha, valpha[0]);
+      else
+        gmm::copy(valpha, alpha);
+      if (!contact_only) {
+        const model_real_plain_vector &vfr = md.real_variable(dl[np++]);
+        GMM_ASSERT1(gmm::vect_size(vfr)==1 || gmm::vect_size(vfr) == nbc,
+                    "Parameter friction_coeff has a wrong size");
+        gmm::resize(friction_coeff, nbc);
+        if (gmm::vect_size(vfr) == 1)
+          gmm::fill(friction_coeff, vfr[0]);
+        else
+          gmm::copy(vfr, friction_coeff);
+        if (friction_dynamic_term) {
+          const model_real_plain_vector &vg = md.real_variable(dl[np++]);
+          GMM_ASSERT1(gmm::vect_size(vg) == 1,
+                      "Parameter gamma should be a scalar");
+          gamma = vg[0];
+          np_wt1 = np++;
+          if (two_variables) np_wt2 = np++;
+        }
+        if (Tresca_version) {
+          const model_real_plain_vector &vth = md.real_variable(dl[np++]);
+          GMM_ASSERT1(gmm::vect_size(vth) == 1 || gmm::vect_size(vth) == nbc,
+                      "Parameter threshold has a wrong size");
+          gmm::resize(threshold, nbc);
+          if (gmm::vect_size(vth) == 1)
+            gmm::fill(threshold, vth[0]);
+          else
+            gmm::copy(vth, threshold);
+        }
+      }
+
+      if (md.is_var_newer_than_brick(dl[np_alpha], ib)) is_init = false;
+
+      basic_asm_real_tangent_terms
+        (u1, u2, lambda_n, lambda_t, md.real_variable(dl[np_wt1]),
+         md.real_variable(dl[np_wt2]), matl, vecl, version);
+
+    }
+
+    Coulomb_friction_brick(int aug_version, bool contact_only_,
+                           bool two_variables_=false,
+                           bool Tresca_version_=false,
+                           bool Hughes_stabilized_=false) {
+      if (aug_version == 4 && contact_only_) aug_version = 3;
+      augmentation_version = aug_version;
+      GMM_ASSERT1(aug_version >= 1 && aug_version <= 4,
+                  "Wrong augmentation version");
+      GMM_ASSERT1(!Hughes_stabilized_ || aug_version <= 2,
+                  "The Hughes stabilized version is only for Alart-Curnier "
+                  "version");
+      contact_only = contact_only_;
+      is_init = false;
+      Tresca_version = Tresca_version_;
+      really_stationary = false;   // for future version ...
+      friction_dynamic_term = false;  // for future version ...
+      two_variables = two_variables_;
+      Hughes_stabilized = Hughes_stabilized_;
+      set_flags("Coulomb friction brick", false /* is linear*/,
+                /* is symmetric */
+                (augmentation_version == 2) && (contact_only||Tresca_version),
+                false /* is coercive */, true /* is real */,
+                false /* is complex */);
+    }
+
+    void set_BN1(CONTACT_B_MATRIX &BN1_) {
+      gmm::resize(BN1, gmm::mat_nrows(BN1_), gmm::mat_ncols(BN1_));
+      gmm::copy(BN1_, BN1);
+      is_init = false;
+    }
+
+    void set_DN(CONTACT_B_MATRIX &DN_) {
+      gmm::resize(DN, gmm::mat_nrows(DN_), gmm::mat_ncols(DN_));
+      gmm::copy(DN_, DN);
+      is_init = false;
+    }
+
+    void set_DT(CONTACT_B_MATRIX &DT_) {
+      gmm::resize(DT, gmm::mat_nrows(DT_), gmm::mat_ncols(DT_));
+      gmm::copy(DT_, DT);
+      is_init = false;
+    }
+
+    void set_BT1(CONTACT_B_MATRIX &BT1_) {
+      gmm::resize(BT1, gmm::mat_nrows(BT1_), gmm::mat_ncols(BT1_));
+      gmm::copy(BT1_, BT1);
+      is_init = false;
+    }
+
+    CONTACT_B_MATRIX &get_BN1(void) { return BN1; }
+    CONTACT_B_MATRIX &get_DN(void) { return DN; }
+    CONTACT_B_MATRIX &get_DT(void) { return DT; }
+    CONTACT_B_MATRIX &get_BT1(void) { return BT1; }
+    const CONTACT_B_MATRIX &get_BN1(void) const { return BN1; }
+    const CONTACT_B_MATRIX &get_DN(void) const { return DN; }
+    const CONTACT_B_MATRIX &get_BT1(void) const { return BT1; }
+
+  };
+
+
+  CONTACT_B_MATRIX &contact_brick_set_BN
+  (model &md, size_type indbrick) {
+    pbrick pbr = md.brick_pointer(indbrick);
+    md.touch_brick(indbrick);
+    Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
+      (const_cast<virtual_brick *>(pbr.get()));
+    GMM_ASSERT1(p, "Wrong type of brick");
+    return p->get_BN1();
+  }
+
+
+  CONTACT_B_MATRIX &contact_brick_set_DN
+  (model &md, size_type indbrick) {
+    pbrick pbr = md.brick_pointer(indbrick);
+    md.touch_brick(indbrick);
+    Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
+      (const_cast<virtual_brick *>(pbr.get()));
+    GMM_ASSERT1(p, "Wrong type of brick");
+    return p->get_DN();
+  }
+
+  CONTACT_B_MATRIX &contact_brick_set_DT
+  (model &md, size_type indbrick) {
+    pbrick pbr = md.brick_pointer(indbrick);
+    md.touch_brick(indbrick);
+    Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
+      (const_cast<virtual_brick *>(pbr.get()));
+    GMM_ASSERT1(p, "Wrong type of brick");
+    return p->get_DT();
+  }
+
+
+  CONTACT_B_MATRIX &contact_brick_set_BT
+  (model &md, size_type indbrick) {
+    pbrick pbr = md.brick_pointer(indbrick);
+    md.touch_brick(indbrick);
+    Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
+      (const_cast<virtual_brick *>(pbr.get()));
+    GMM_ASSERT1(p, "Wrong type of brick");
+    return p->get_BT1();
+  }
+
+  //=========================================================================
+  //  Add a frictionless contact condition with BN, r, alpha given.
+  //=========================================================================
+
+  size_type add_basic_contact_brick
+  (model &md, const std::string &varname_u, const std::string &multname_n,
+   const std::string &dataname_r, CONTACT_B_MATRIX &BN,
+   std::string dataname_gap, std::string dataname_alpha,
+   int aug_version, bool Hughes_stabilized) {
+    Coulomb_friction_brick *pbr_
+      = new Coulomb_friction_brick(aug_version, true, false,false, Hughes_stabilized);
+    pbr_->set_BN1(BN);
+    pbrick pbr = pbr_;
+
+    model::termlist tl;
+    tl.push_back(model::term_description(varname_u, varname_u, false));
+    tl.push_back(model::term_description(varname_u, multname_n, false));
+    tl.push_back(model::term_description(multname_n, varname_u, false));
+    tl.push_back(model::term_description(multname_n, multname_n, false));
+    model::varnamelist dl(1, dataname_r);
+
+    if (dataname_gap.size() == 0) {
+      dataname_gap = md.new_name("contact_gap_on_" + varname_u);
+      md.add_initialized_fixed_size_data
+        (dataname_gap, model_real_plain_vector(1, scalar_type(0)));
+    }
+    dl.push_back(dataname_gap);
+
+    if (dataname_alpha.size() == 0) {
+      dataname_alpha = md.new_name("contact_parameter_alpha_on_"+ multname_n);
+      md.add_initialized_fixed_size_data
+        (dataname_alpha, model_real_plain_vector(1, scalar_type(1)));
+    }
+    dl.push_back(dataname_alpha);
+
+    model::varnamelist vl(1, varname_u);
+    vl.push_back(multname_n);
+
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(), size_type(-1));
+  }
+
+
+  //=========================================================================
+  //  Add a contact with friction condition with BN, r, alpha given.
+  //=========================================================================
+
+  size_type add_basic_contact_brick
+  (model &md, const std::string &varname_u, const std::string &multname_n,
+   const std::string &multname_t, const std::string &dataname_r,
+   CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT,
+   std::string dataname_friction_coeff,
+   std::string dataname_gap, std::string dataname_alpha,
+   int aug_version, bool Tresca_version, std::string dataname_threshold, bool Hughes_stabilized) {
+    Coulomb_friction_brick *pbr_
+      = new Coulomb_friction_brick(aug_version,false, false,
+                                   Tresca_version, Hughes_stabilized);
+    pbr_->set_BN1(BN);
+    pbr_->set_BT1(BT);
+    pbrick pbr = pbr_;
+
+    model::termlist tl;
+    tl.push_back(model::term_description(varname_u, varname_u, false));
+    tl.push_back(model::term_description(varname_u, multname_n, false));
+    tl.push_back(model::term_description(multname_n, varname_u, false));
+    tl.push_back(model::term_description(multname_n, multname_n, false));
+    tl.push_back(model::term_description(varname_u, multname_t, false));
+    tl.push_back(model::term_description(multname_t, varname_u, false));
+    tl.push_back(model::term_description(multname_t, multname_t, false));
+    tl.push_back(model::term_description(multname_t, multname_n,
+                                         (aug_version == 4)));
+    model::varnamelist dl(1, dataname_r);
+    if (dataname_gap.size() == 0) {
+      dataname_gap = md.new_name("contact_gap_on_" + varname_u);
+      md.add_initialized_fixed_size_data
+        (dataname_gap, model_real_plain_vector(1, scalar_type(0)));
+    }
+    dl.push_back(dataname_gap);
+
+    if (dataname_alpha.size() == 0) {
+      dataname_alpha = md.new_name("contact_parameter_alpha_on_"+ multname_n);
+      md.add_initialized_fixed_size_data
+        (dataname_alpha, model_real_plain_vector(1, scalar_type(1)));
+    }
+    dl.push_back(dataname_alpha);
+    dl.push_back(dataname_friction_coeff);
+    if (Tresca_version)
+      dl.push_back(dataname_threshold);
+
+    model::varnamelist vl(1, varname_u);
+    vl.push_back(multname_n);
+    vl.push_back(multname_t);
+
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(), size_type(-1));
+  }
+
+
+  //=========================================================================
+  //
+  //  Brick with a given rigid obstacle (one body, build BN, BT, gap, alpha)
+  //
+  //=========================================================================
+  // TODO : add an option for a weak contact condition
+
+  struct Coulomb_friction_brick_rigid_obstacle
+    : public Coulomb_friction_brick {
+
+    std::string obstacle; // obstacle given with a signed distance expression.
+
+  public :
+
+    virtual void asm_real_tangent_terms(const model &md, size_type ib,
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version version) const {
+      GMM_ASSERT1(mims.size() == 1, "This contact brick needs one mesh_im");
+      size_type nbvar = 2 + (contact_only ? 0 : 1);
+      GMM_ASSERT1(vl.size() == nbvar,
+                  "Wrong number of variables for contact brick: "
+                  << vl.size() << " should be " << nbvar);
+      size_type nbdl = 1 + (contact_only ? 0 : 1) + (Tresca_version ? 1 : 0)
+        + (friction_dynamic_term ? 1 : 0);
+      GMM_ASSERT1(dl.size() == nbdl,
+                  "Wrong number of data for contact brick: "
+                  << dl.size() << " should be " << nbdl);
+      GMM_ASSERT1(!two_variables, "internal error");
+      const mesh_im &mim = *mims[0];
+
+      // Variables
+      // Without friction and one displacement  : u1, lambda_n
+      // With friction and one displacement     : u1, lambda_n, lambda_t
+      size_type nv = 0;
+      const model_real_plain_vector &u1 = md.real_variable(vl[nv++]);
+      const mesh_fem &mf_u1 = md.mesh_fem_of_variable(vl[0]);
+      const model_real_plain_vector &lambda_n = md.real_variable(vl[nv++]);
+      if (contact_only) nv--;
+      const model_real_plain_vector &lambda_t = md.real_variable(vl[nv]);
+
+
+      // Parameters (order : r, friction_coeff, gamma, wt, threshold)
+      size_type np = 0, np_wt1 = 0, nbc;
+      const model_real_plain_vector &vr = md.real_variable(dl[np++]);
+      GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+      r = vr[0];
+
+      // Computation of BN, BT, gap and alpha
+      if (md.is_var_mf_newer_than_brick(vl[0], ib)) {
+
+        // Verification that mf_u1 is a pure Lagrange fem.
+        GMM_ASSERT1(!(mf_u1.is_reduced()),
+                    "This contact brick works only for pure Lagrange fems");
+        dal::bit_vector dofs = mf_u1.basic_dof_on_region(region);
+        for (dal::bv_visitor id(dofs); !id.finished(); ++id) {
+          size_type cv = mf_u1.first_convex_of_basic_dof(id);
+          GMM_ASSERT1(mf_u1.fem_of_element(cv)->is_lagrange(),
+                      "This contact brick works only for pure Lagrange fems");
+        }
+        size_type d = mf_u1.get_qdim() - 1, i = 0, j = 0;
+        nbc = dofs.card() / (d+1);
+
+        // computation of alpha vector.
+        base_node Pmin, Pmax;
+        mf_u1.linked_mesh().bounding_box(Pmin, Pmax);
+        scalar_type l = scalar_type(0);
+        for (i = 0; i < Pmin.size(); ++i)
+          l = std::max(l, gmm::abs(Pmax[i] - Pmin[i]));
+
+        CONTACT_B_MATRIX MM(mf_u1.nb_dof(), mf_u1.nb_dof());
+        asm_mass_matrix(MM, mim, mf_u1, region);
+        gmm::resize(alpha, nbc);
+        i = 0; j = 0;
+        for (dal::bv_visitor id(dofs); !id.finished(); ++id, ++i)
+          if ((i % (d+1)) == 0) alpha[j++] = MM(id, id) / l;
+
+
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
+
+
+        mu::Parser parser;
+        parser.SetExpr(obstacle);
+
+        gmm::resize(gap, nbc);
+        gmm::resize(BN1, nbc, mf_u1.nb_dof());
+        gmm::clear(BN1);
+        if (!contact_only) {
+          gmm::resize(BT1, d*nbc, mf_u1.nb_dof());
+          gmm::clear(BT1);
+        }
+        base_node pt(d+1), grad(d+1), ut[3];
+
+        static std::string varn[4] = {"x", "y", "z", "w"};
+        for (size_type k = 0; k <= d; ++k)
+          parser.DefineVar(varn[k], &pt[k]);
+
+        i = 0; j = 0;
+        for (dal::bv_visitor id(dofs); !id.finished(); ++id, ++i) {
+          if ((i % (d+1)) == 0) {
+            gmm::copy(mf_u1.point_of_basic_dof(id), pt);
+            try {
+
+              // Computation of gap
+              gap[j] = scalar_type(parser.Eval());
+
+              // computation of BN
+              size_type cv = mf_u1.first_convex_of_basic_dof(id);
+              scalar_type eps
+                = mf_u1.linked_mesh().convex_radius_estimate(cv) * 1E-3;
+              for (size_type k = 0; k <= d; ++k) {
+                pt[k] += eps;
+                grad[k] = (scalar_type(parser.Eval()) - gap[j]) / eps;
+                pt[k] -= eps;
+              }
+              // unit normal vector
+              base_node un = - grad / gmm::vect_norm2(grad);
+
+              for (size_type k = 0; k <= d; ++k)
+                BN1(j, id + k) = un[k];
+
+              // computation of BT
+              if (!contact_only) {
+
+                orthonormal_basis_to_unit_vec(d, un, ut);
+
+                for (size_type k = 0; k <= d; ++k)
+                  for (size_type nn = 0; nn < d; ++nn)
+                    BT1(j*d+nn, id + k) = ut[nn][k];
+              }
+
+            } catch (mu::Parser::exception_type &e) {
+              std::cerr << "Message  : " << e.GetMsg()   << std::endl;
+              std::cerr << "Formula  : " << e.GetExpr()  << std::endl;
+              std::cerr << "Token    : " << e.GetToken() << std::endl;
+              std::cerr << "Position : " << e.GetPos()   << std::endl;
+              std::cerr << "Errc     : " << e.GetCode()  << std::endl;
+              GMM_ASSERT1(false, "Error in signed distance expression");
+            }
+            ++j;
+          }
+
+        }
+
+        GMM_ASSERT1(gmm::vect_size(md.real_variable(vl[1])) == nbc,
+                    "Wrong size of multiplier for the contact condition");
+
+        if (!contact_only)
+          GMM_ASSERT1(gmm::vect_size(md.real_variable(vl[2])) == nbc*d,
+                      "Wrong size of multiplier for the friction condition");
+
+#else
+
+        GMM_ASSERT1(false, "Muparser is not installed, "
+                    "You cannot use this contact brick");
+
+#endif
+
+        is_init = false;
+      }
+      else
+        nbc = gmm::mat_nrows(BN1);
+
+      if (!contact_only) {
+        const model_real_plain_vector &vfr = md.real_variable(dl[np++]);
+        GMM_ASSERT1(gmm::vect_size(vfr)==1 || gmm::vect_size(vfr) == nbc,
+                    "Parameter friction_coeff has a wrong size");
+        gmm::resize(friction_coeff, nbc);
+        if (gmm::vect_size(vfr) == 1)
+          gmm::fill(friction_coeff, vfr[0]);
+        else
+          gmm::copy(vfr, friction_coeff);
+        if (friction_dynamic_term) {
+          const model_real_plain_vector &vg = md.real_variable(dl[np++]);
+          GMM_ASSERT1(gmm::vect_size(vg) == 1,
+                      "Parameter gamma should be a scalar");
+          gamma = vg[0];
+          np_wt1 = np++;
+        }
+        if (Tresca_version) {
+          const model_real_plain_vector &vth = md.real_variable(dl[np++]);
+          GMM_ASSERT1(gmm::vect_size(vth) == 1 || gmm::vect_size(vth) == nbc,
+                      "Parameter threshold has a wrong size");
+          gmm::resize(threshold, nbc);
+          if (gmm::vect_size(vth) == 1)
+            gmm::fill(threshold, vth[0]);
+          else
+            gmm::copy(vth, threshold);
+        }
+      }
+
+      basic_asm_real_tangent_terms
+        (u1, u1, lambda_n, lambda_t, md.real_variable(dl[np_wt1]),
+         md.real_variable(dl[np_wt1]), matl, vecl, version);
+
+    }
+
+    Coulomb_friction_brick_rigid_obstacle
+    (int aug_version, bool contact_only_, const std::string &obs)
+      : Coulomb_friction_brick(aug_version, contact_only_), obstacle(obs) {}
+
+  };
+
+
+  //=========================================================================
+  //  Add a frictionless contact condition with a rigid obstacle given
+  //  by a signed distance.
+  //=========================================================================
+
+  size_type add_nodal_contact_with_rigid_obstacle_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &multname_n, const std::string &dataname_r,
+   size_type region, const std::string &obstacle, int aug_version) {
+    pbrick pbr
+      = new Coulomb_friction_brick_rigid_obstacle(aug_version, true, obstacle);
+
+    model::termlist tl;
+    tl.push_back(model::term_description(varname_u, varname_u, false));
+    tl.push_back(model::term_description(varname_u, multname_n, false));
+    tl.push_back(model::term_description(multname_n, varname_u, false));
+    tl.push_back(model::term_description(multname_n, multname_n, false));
+    model::varnamelist dl(1, dataname_r);
+
+    model::varnamelist vl(1, varname_u);
+    vl.push_back(multname_n);
+
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+  }
+
+
+  //=========================================================================
+  //  Add a contact with friction condition with a rigid obstacle given
+  //  by a signed distance.
+  //=========================================================================
+
+  size_type add_nodal_contact_with_rigid_obstacle_brick
+  (model &md, const mesh_im &mim, const std::string &varname_u,
+   const std::string &multname_n, const std::string &multname_t,
+   const std::string &dataname_r, const std::string &dataname_friction_coeff,
+   size_type region, const std::string &obstacle, int aug_version) {
+    pbrick pbr
+      = new Coulomb_friction_brick_rigid_obstacle(aug_version,false,obstacle);
+
+    model::termlist tl;
+    tl.push_back(model::term_description(varname_u, varname_u, false));
+    tl.push_back(model::term_description(varname_u, multname_n, false));
+    tl.push_back(model::term_description(multname_n, varname_u, false));
+    tl.push_back(model::term_description(multname_n, multname_n, false));
+    tl.push_back(model::term_description(varname_u, multname_t, false));
+    tl.push_back(model::term_description(multname_t, varname_u, false));
+    tl.push_back(model::term_description(multname_t, multname_t, false));
+    tl.push_back(model::term_description(multname_t, multname_n,
+                                         (aug_version == 4)));
+    model::varnamelist dl(1, dataname_r);
+    dl.push_back(dataname_friction_coeff);
+
+    model::varnamelist vl(1, varname_u);
+    vl.push_back(multname_n);
+    vl.push_back(multname_t);
+
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+  }
+
+
+  //=========================================================================
+  //
+  //  Brick with elastic bodies (one or two bodies, build BN, BT, Gap, alpha)
+  //
+  //=========================================================================
+  // To be done:
+  // - Large deformations: what happens when cnpl and nbc change during
+  //   the iterative solution?
+
+  struct Coulomb_friction_brick_nonmatching_meshes
+    : public Coulomb_friction_brick {
+
+    std::vector<size_type> rg1, rg2; // ids of mesh regions expected to come in
+                                     // contact. For one displacement they refer
+                                     // both to u1. For two displacements they
+                                     // respectively refer to u1, u2.
+    bool slave1, slave2; // if true, then rg1 or respectively rg2 are treated
+                         // as slave surfaces (the contact multipliers are
+                         // defined on these surfaces)
+
+    virtual void asm_real_tangent_terms(const model &md, size_type ib,
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version version) const {
+
+      GMM_ASSERT1(mims.size() == 2, "This contact brick needs two mesh_im");
+      const mesh_im &mim1 = *mims[0];
+      const mesh_im &mim2 = *mims[1];
+
+      // Variables
+      // Without friction and one displacement  : u1, lambda_n
+      // With friction and one displacement     : u1, lambda_n, lambda_t
+      // Without friction and two displacements : u1, u2, lambda_n
+      // With friction and two displacements    : u1, u2, lambda_n, lambda_t
+      size_type nv = 0;
+      std::string varname_u1 = vl[nv];
+      const model_real_plain_vector &u1 = md.real_variable(varname_u1);
+      const mesh_fem &mf_u1 = md.mesh_fem_of_variable(varname_u1);
+      if (two_variables) nv++;
+      std::string varname_u2 = vl[nv++];
+      const model_real_plain_vector &u2 = md.real_variable(varname_u2);
+      const mesh_fem &mf_u2 = md.mesh_fem_of_variable(varname_u2);
+      const model_real_plain_vector &lambda_n = md.real_variable(vl[nv]);
+      if (!contact_only) nv++;
+      const model_real_plain_vector &lambda_t = md.real_variable(vl[nv]);
+
+      size_type nbc = lambda_n.size();
+
+      // Parameters (order: r, friction_coeff)
+      const model_real_plain_vector &vr = md.real_variable(dl[0]);
+      GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+      r = vr[0];
+      if (!contact_only) {
+        const model_real_plain_vector &vfr = md.real_variable(dl[1]);
+        GMM_ASSERT1(gmm::vect_size(vfr)==1 || gmm::vect_size(vfr) == nbc,
+                    "Parameter friction_coeff has a wrong size");
+        gmm::resize(friction_coeff, nbc);
+        if (gmm::vect_size(vfr) == 1)
+          gmm::fill(friction_coeff, vfr[0]);
+        else
+          gmm::copy(vfr, friction_coeff);
+      }
+
+      // Computation of BN, BT, gap and alpha
+      if (  md.is_var_mf_newer_than_brick(varname_u1, ib)
+         || md.is_var_mf_newer_than_brick(varname_u2, ib)) {
+
+        for (size_type i = 0; i <= size_type(two_variables ? 1 : 0); i++) {
+          const mesh_fem &mf_u = i ? mf_u2 : mf_u1;
+          // Verification that mf_u is a pure Lagrange fem.
+          GMM_ASSERT1(!(mf_u.is_reduced()),
+                "This contact brick works only for pure Lagrange fems");
+          dal::bit_vector dofs = mf_u.basic_dof_on_region(region);
+          for (dal::bv_visitor id(dofs); !id.finished(); ++id) {
+            size_type cv = mf_u.first_convex_of_basic_dof(id);
+            GMM_ASSERT1(mf_u.fem_of_element(cv)->is_lagrange(),
+                "This contact brick works only for pure Lagrange fems");
+          }
+        }
+
+        contact_node_pair_list cnpl;
+        for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it)
+          cnpl.append_min_dist_cn_pairs
+                 (mf_u1, mf_u2, rg1[it], rg2[it], slave1, slave2);
+
+        // Computation of gap, BN and BT
+        gmm::resize(gap, nbc);
+        gmm::resize(BN1, nbc, mf_u1.nb_dof());
+        if (contact_only) {
+          if (!two_variables) {
+            compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1);
+          } else {
+            gmm::resize(BN2, nbc, mf_u2.nb_dof());
+            compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1, &BN2);
+          }
+        } else {
+          size_type d = mf_u1.get_qdim() - 1;
+          gmm::resize(BT1, nbc * d, mf_u1.nb_dof());
+          if (!two_variables) {
+            compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1,    0, &BT1);
+          } else {
+            // d == mf_u2.get_qdim() - 1;
+            gmm::resize(BN2, nbc, mf_u2.nb_dof());
+            gmm::resize(BT2, nbc * d, mf_u2.nb_dof());
+            compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1, &BN2, &BT1, &BT2);
+          }
+        }
+
+        // computation of alpha vector.
+        scalar_type l = scalar_type(0);
+        for (size_type i = 0; i <= size_type(two_variables ? 1 : 0); i++) {
+          const mesh_fem &mf_u = i ? mf_u2 : mf_u1;
+          base_node Pmin, Pmax;
+          mf_u.linked_mesh().bounding_box(Pmin, Pmax);
+          for (size_type j = 0; j < Pmin.size(); ++j)
+            l = std::max(l, gmm::abs(Pmax[j] - Pmin[j]));
+        }
+        gmm::resize(alpha, nbc);
+        size_type mult_id = 0;
+        for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it) {
+          for (size_type swap = 0; swap <= 1; ++swap) {
+            if (swap ? slave2 : slave1) {
+              size_type rg = swap ? rg2[it] : rg1[it];
+              const mesh_fem &mf_u = swap ? mf_u2 : mf_u1;
+              const mesh_im &mim = swap ? mim2 : mim1;
+              CONTACT_B_MATRIX MM(mf_u.nb_dof(), mf_u.nb_dof());
+              asm_mass_matrix(MM, mim, mf_u, rg);
+              size_type qdim = mf_u.get_qdim();
+              dal::bit_vector rg_dofs = mf_u.basic_dof_on_region(rg);
+              for (dal::bv_visitor id(rg_dofs); !id.finished(); ++id)
+                if (id % qdim == 0) alpha[mult_id++] = MM(id, id) / l;
+            }
+          }
+        }
+      }
+
+      const model_real_plain_vector dummy_wt;
+      basic_asm_real_tangent_terms
+        (u1, u2, lambda_n, lambda_t, dummy_wt, dummy_wt, matl, vecl, version);
+    }
+
+    Coulomb_friction_brick_nonmatching_meshes
+      (int aug_version, bool contact_only_, bool two_variables_,
+       const std::vector<size_type> &rg1_, const std::vector<size_type> &rg2_,
+       bool slave1_=true, bool slave2_=false)
+      : Coulomb_friction_brick(aug_version, contact_only_, two_variables_),
+        rg1(rg1_), rg2(rg2_), slave1(slave1_), slave2(slave2_) {}
+
+  };
+
+
+  //=========================================================================
+  //  Add a frictionless contact condition between two faces of one or two
+  //  elastic bodies.
+  //=========================================================================
+
+  size_type add_nodal_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim1, const mesh_im &mim2,
+   const std::string &varname_u1, const std::string &varname_u2,
+   std::string &multname_n, const std::string &dataname_r,
+   const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+   bool slave1, bool slave2, int aug_version) {
+
+    bool two_variables = (varname_u1.compare(varname_u2) != 0);
+
+    pbrick pbr = new Coulomb_friction_brick_nonmatching_meshes
+           (aug_version, true, two_variables, rg1, rg2, slave1, slave2);
+
+    // Calculate multipliers size
+    const mesh_fem &mf_u1 = md.mesh_fem_of_variable(varname_u1);
+    const mesh_fem &mf_u2 = md.mesh_fem_of_variable(varname_u2);
+    size_type nbc = 0;
+    for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it) {
+      for (size_type swap = 0; swap <= 1; ++swap) {
+        if (swap ? slave2 : slave1) {
+          const mesh_fem &mf = swap ? mf_u2 : mf_u1;
+          size_type rg = swap ? rg2[it] : rg1[it];
+          dal::bit_vector rg_dofs = mf.basic_dof_on_region(rg);
+          nbc += rg_dofs.card() / mf.get_qdim();
+        }
+      }
+    }
+
+    if (multname_n.size() == 0)
+      multname_n = md.new_name("contact_multiplier");
+    else
+      GMM_ASSERT1(multname_n.compare(md.new_name(multname_n)) == 0,
+                  "The given name for the multiplier is alraedy reserved in the model");
+    md.add_fixed_size_variable(multname_n, nbc);
+
+    model::termlist tl;
+    tl.push_back(model::term_description(varname_u1, varname_u1, false));
+    if (two_variables) {
+      tl.push_back(model::term_description(varname_u2, varname_u2, false));
+    }
+    tl.push_back(model::term_description(varname_u1, multname_n, false));
+    tl.push_back(model::term_description(multname_n, varname_u1, false));
+    if (two_variables) {
+      tl.push_back(model::term_description(varname_u2, multname_n, false));
+      tl.push_back(model::term_description(multname_n, varname_u2, false));
+    }
+    tl.push_back(model::term_description(multname_n, multname_n, false));
+
+    // Variables (order: varname_u, multname_n)
+    model::varnamelist vl;
+    vl.push_back(varname_u1);
+    if (two_variables) vl.push_back(varname_u2);
+    vl.push_back(multname_n);
+
+    // Parameters (order: r, ...)
+    model::varnamelist dl;
+    dl.push_back(dataname_r);
+
+    model::mimlist ml;
+    ml.push_back(&mim1);
+    ml.push_back(&mim2);
+
+    return md.add_brick(pbr, vl, dl, tl, ml, size_type(-1));
+  }
+
+
+  //=========================================================================
+  //  Add a contact with friction condition between two faces of one or two
+  //  elastic bodies.
+  //=========================================================================
+
+  size_type add_nodal_contact_between_nonmatching_meshes_brick
+  (model &md, const mesh_im &mim1, const mesh_im &mim2,
+   const std::string &varname_u1, const std::string &varname_u2,
+   std::string &multname_n, std::string &multname_t,
+   const std::string &dataname_r, const std::string &dataname_friction_coeff,
+   const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+   bool slave1, bool slave2, int aug_version) {
+
+    bool two_variables = (varname_u1.compare(varname_u2) != 0);
+
+    pbrick pbr = new Coulomb_friction_brick_nonmatching_meshes
+           (aug_version, false, two_variables, rg1, rg2, slave1, slave2);
+
+    // Calculate multipliers size
+    const mesh_fem &mf_u1 = md.mesh_fem_of_variable(varname_u1);
+    const mesh_fem &mf_u2 = md.mesh_fem_of_variable(varname_u2);
+    size_type nbc = 0;
+    for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it) {
+      for (size_type swap = 0; swap <= 1; ++swap) {
+        if (swap ? slave2 : slave1) {
+          const mesh_fem &mf = swap ? mf_u2 : mf_u1;
+          size_type rg = swap ? rg2[it] : rg1[it];
+          dal::bit_vector rg_dofs = mf.basic_dof_on_region(rg);
+          nbc += rg_dofs.card() / mf.get_qdim();
+        }
+      }
+    }
+
+    if (multname_n.size() == 0)
+      multname_n = md.new_name("contact_normal_multiplier");
+    else
+      GMM_ASSERT1(multname_n.compare(md.new_name(multname_n)) == 0,
+                  "The given name for the multiplier is alraedy reserved in the model");
+    md.add_fixed_size_variable(multname_n, nbc);
+    if (multname_t.size() == 0)
+      multname_t = md.new_name("contact_tangent_multiplier");
+    else
+      GMM_ASSERT1(multname_t.compare(md.new_name(multname_t)) == 0,
+                  "The given name for the multiplier is alraedy reserved in the model");
+    md.add_fixed_size_variable(multname_t, nbc * (mf_u1.get_qdim() - 1) ); // ??
+
+    model::termlist tl;
+    tl.push_back(model::term_description(varname_u1, varname_u1, false));
+    if (two_variables) {
+      tl.push_back(model::term_description(varname_u2, varname_u2, false));
+    }
+
+    tl.push_back(model::term_description(varname_u1, multname_n, false));
+    tl.push_back(model::term_description(multname_n, varname_u1, false));
+    if (two_variables) {
+      tl.push_back(model::term_description(varname_u2, multname_n, false));
+      tl.push_back(model::term_description(multname_n, varname_u2, false));
+    }
+    tl.push_back(model::term_description(multname_n, multname_n, false));
+
+    tl.push_back(model::term_description(varname_u1, multname_t, false));
+    tl.push_back(model::term_description(multname_t, varname_u1, false));
+    if (two_variables) {
+      tl.push_back(model::term_description(varname_u2, multname_t, false));
+      tl.push_back(model::term_description(multname_t, varname_u2, false));
+    }
+    tl.push_back(model::term_description(multname_t, multname_t, false));
+    tl.push_back(model::term_description(multname_t, multname_n,
+                                         (aug_version == 4)));
+
+    // Variables (order: varname_u, multname_n, multname_t)
+    model::varnamelist vl;
+    vl.push_back(varname_u1);
+    if (two_variables) vl.push_back(varname_u2);
+    vl.push_back(multname_n);
+    vl.push_back(multname_t);
+
+    // Parameters (order: r, friction_coeff)
+    model::varnamelist dl;
+    dl.push_back(dataname_r);
+    dl.push_back(dataname_friction_coeff);
+
+    model::mimlist ml;
+    ml.push_back(&mim1);
+    ml.push_back(&mim2);
+
+    return md.add_brick(pbr, vl, dl, tl, ml, size_type(-1));
+  }
+
+}  /* end of namespace getfem.                                             */
diff --git a/src/getfem_context.cc b/src/getfem_context.cc
index fbe6557..0442dc1 100644
--- a/src/getfem_context.cc
+++ b/src/getfem_context.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 
diff --git a/src/getfem_export.cc b/src/getfem_export.cc
index 48e3769..d88db66 100644
--- a/src/getfem_export.cc
+++ b/src/getfem_export.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <iomanip>
 #include "getfem/dal_singleton.h"
diff --git a/src/getfem_fem.cc b/src/getfem_fem.cc
index a138ea0..7551a7e 100644
--- a/src/getfem_fem.cc
+++ b/src/getfem_fem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /** @file getfem_fem.cc
     @author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -30,8 +30,8 @@
 #include "gmm/gmm_algobase.h"
 #include "getfem/dal_naming_system.h"
 #include "getfem/getfem_fem.h"
-#include "getfem/getfem_gauss_lobatto_fem_coef.h"
-#include "getfem/getfem_integration.h" /* for gauss-lobatto points */
+#include "getfem/getfem_gauss_lobatto_fem_coef.h" /* for gauss-lobatto points*/
+#include "getfem/getfem_integration.h"
 
 namespace getfem {
 
@@ -51,7 +51,8 @@ namespace getfem {
   }
 
   size_type fem_interpolation_context::face_num() const {
-    GMM_ASSERT3(face_num_ != size_type(-1), "");
+    GMM_ASSERT3(face_num_ != size_type(-1),
+		"Face number is asked but not defined");
     return face_num_; 
   }
 
@@ -945,48 +946,121 @@ namespace getfem {
 
 
   /* ******************************************************************** */
-  /*	Quad8 SERENDIPITY ELEMENT (dim 2) (incomplete Q2)                 */
+  /*	Quad8/Hexa20 SERENDIPITY ELEMENT (dim 2 or 3) (incomplete Q2)     */
   /* ******************************************************************** */
 
-  // local dof numeration:
-  // 6--5--4 
+  // local dof numeration for 2D:
+  // 6--5--4
   // |     |
   // 7     3
   // |     |
   // 0--1--2
-
-   static pfem incomplete_Q2_fem(fem_param_list &params,
+  //
+  // local dof numeration for 3D:
+  //
+  //      18---17----16
+  //      /|        /|
+  //     /19       / 15
+  //   11  |      10 |
+  //   /  12---13/---14
+  //  /   /     /   /
+  // 6----5----4   /
+  // |  8      |  9
+  // 7 /       3 /
+  // |/        |/
+  // 0----1----2
+
+   static pfem Q2_incomplete_fem(fem_param_list &params,
 	std::vector<dal::pstatic_stored_object> &dependencies) {
-    GMM_ASSERT1(params.size() == 0, "Bad number of parameters");
+    GMM_ASSERT1(params.size() <= 1, "Bad number of parameters");
+    dim_type n = 2;
+    if (params.size() > 0) {
+      GMM_ASSERT1(params[0].type() == 0, "Bad type of parameters");
+      n = dim_type(::floor(params[0].num() + 0.01));
+       GMM_ASSERT1(n == 2 || n == 3, "Bad parameter, expected value 2 or 3");
+    }
     fem<base_poly> *p = new fem<base_poly>;
-    p->mref_convex() = bgeot::parallelepiped_of_reference(2);
-    p->dim() = 2;
+    p->mref_convex() = bgeot::parallelepiped_of_reference(n);
+    p->dim() = n;
     p->is_equivalent() = p->is_polynomial() = p->is_lagrange() = true;
     p->estimated_degree() = 2;
     p->init_cvs_node();
-    p->base().resize(8);
-
-    std::stringstream s
-      ( "1 - 2*x^2*y - 2*x*y^2 + 2*x^2 + 5*x*y + 2*y^2 - 3*x - 3*y;"
-	"4*(x^2*y - x^2 - x*y + x);"
-	"2*x*y*y - 2*x*x*y + 2*x*x - x*y - x;"
-	"4*(x*y - x*y*y);"
-	"2*x*x*y + 2*x*y*y - 3*x*y;"
-	"4*(x*y - x*x*y);"
-	"2*x*x*y - 2*x*y*y - x*y + 2*y*y - y;"
-	"4*(x*y*y - x*y - y*y + y);");
-
-    for (int i = 0; i < 8; ++i) p->base()[i] = bgeot::read_base_poly(2, s);
-
-    p->add_node(lagrange_dof(2), base_small_vector(0.0, 0.0));
-    p->add_node(lagrange_dof(2), base_small_vector(0.5, 0.0));
-    p->add_node(lagrange_dof(2), base_small_vector(1.0, 0.0));
-    p->add_node(lagrange_dof(2), base_small_vector(1.0, 0.5));
-    p->add_node(lagrange_dof(2), base_small_vector(1.0, 1.0));
-    p->add_node(lagrange_dof(2), base_small_vector(0.5, 1.0));
-    p->add_node(lagrange_dof(2), base_small_vector(0.0, 1.0));
-    p->add_node(lagrange_dof(2), base_small_vector(0.0, 0.5));
-   
+    p->base().resize(n == 2 ? 8 : 20);
+
+    if (n == 2) {
+      std::stringstream s
+        ( "1 - 2*x^2*y - 2*x*y^2 + 2*x^2 + 5*x*y + 2*y^2 - 3*x - 3*y;"
+          "4*(x^2*y - x^2 - x*y + x);"
+          "2*x*y*y - 2*x*x*y + 2*x*x - x*y - x;"
+          "4*(x*y - x*y*y);"
+          "2*x*x*y + 2*x*y*y - 3*x*y;"
+          "4*(x*y - x*x*y);"
+          "2*x*x*y - 2*x*y*y - x*y + 2*y*y - y;"
+          "4*(x*y*y - x*y - y*y + y);");
+
+      for (int i = 0; i < 8; ++i) p->base()[i] = bgeot::read_base_poly(2, s);
+
+      p->add_node(lagrange_dof(2), base_small_vector(0.0, 0.0));
+      p->add_node(lagrange_dof(2), base_small_vector(0.5, 0.0));
+      p->add_node(lagrange_dof(2), base_small_vector(1.0, 0.0));
+      p->add_node(lagrange_dof(2), base_small_vector(1.0, 0.5));
+      p->add_node(lagrange_dof(2), base_small_vector(1.0, 1.0));
+      p->add_node(lagrange_dof(2), base_small_vector(0.5, 1.0));
+      p->add_node(lagrange_dof(2), base_small_vector(0.0, 1.0));
+      p->add_node(lagrange_dof(2), base_small_vector(0.0, 0.5));
+    } else {
+      std::stringstream s
+        ("1 + 2*x^2*y*z + 2*x*y^2*z + 2*x*y*z^2"
+           " - 2*x^2*y - 2*x^2*z - 2*x*y^2 - 2*y^2*z - 2*y*z^2 - 2*x*z^2 - 7*x*y*z"
+           " + 2*x^2 + 2*y^2 + 2*z^2 + 5*y*z + 5*x*z + 5*x*y - 3*x - 3*y - 3*z;"
+         "4*( - x^2*y*z + x*y*z + x^2*z - x*z + x^2*y - x*y - x^2 + x);"
+         "2*x^2*y*z - 2*x*y^2*z - 2*x*y*z^2"
+           " - 2*x^2*y - 2*x^2*z + 2*x*y^2 + 2*x*z^2 + 3*x*y*z + 2*x^2 - x*y - x*z - x;"
+         "4*(x*y^2*z - x*y^2 - x*y*z + x*y);"
+         " - 2*x^2*y*z - 2*x*y^2*z + 2*x*y*z^2 + 2*x^2*y + 2*x*y^2 + x*y*z - 3*x*y;"
+         "4*(x^2*y*z - x^2*y - x*y*z + x*y);"
+         " - 2*x^2*y*z + 2*x*y^2*z - 2*x*y*z^2"
+           " + 2*x^2*y - 2*x*y^2 - 2*y^2*z + 2*y*z^2 + 3*x*y*z - x*y + 2*y^2 - y*z - y;"
+         "4*( - x*y^2*z + x*y^2 + y^2*z + x*y*z - x*y - y^2 - y*z + y);"
+         "4*( - x*y*z^2 + x*z^2 + y*z^2 + x*y*z - x*z - y*z - z^2 + z);"
+         "4*(x*y*z^2 - x*y*z - x*z^2 + x*z);"
+         "4*( - x*y*z^2 + x*y*z);"
+         "4*(x*y*z^2 - x*y*z - y*z^2 + y*z);"
+         " - 2*x^2*y*z - 2*x*y^2*z + 2*x*y*z^2"
+           " + 2*x^2*z + 2*y^2*z - 2*x*z^2 - 2*y*z^2 + 3*x*y*z - x*z - y*z + 2*z^2 - z;"
+         "4*(x^2*y*z - x^2*z - x*y*z + x*z);"
+         " - 2*x^2*y*z + 2*x*y^2*z - 2*x*y*z^2 + 2*x^2*z + 2*x*z^2 + x*y*z - 3*x*z;"
+         "4*( - x*y^2*z + x*y*z);"
+         "2*x^2*y*z + 2*x*y^2*z + 2*x*y*z^2 - 5*x*y*z;"
+         "4*( - x^2*y*z + x*y*z);"
+         "2*x^2*y*z - 2*x*y^2*z - 2*x*y*z^2 + 2*y^2*z + 2*y*z^2 + x*y*z - 3*y*z;"
+         "4*(x*y^2*z - y^2*z - x*y*z + y*z);");
+
+      for (int i = 0; i < 20; ++i) p->base()[i] = bgeot::read_base_poly(3, s);
+
+      p->add_node(lagrange_dof(3), base_small_vector(0.0, 0.0, 0.0));
+      p->add_node(lagrange_dof(3), base_small_vector(0.5, 0.0, 0.0));
+      p->add_node(lagrange_dof(3), base_small_vector(1.0, 0.0, 0.0));
+      p->add_node(lagrange_dof(3), base_small_vector(1.0, 0.5, 0.0));
+      p->add_node(lagrange_dof(3), base_small_vector(1.0, 1.0, 0.0));
+      p->add_node(lagrange_dof(3), base_small_vector(0.5, 1.0, 0.0));
+      p->add_node(lagrange_dof(3), base_small_vector(0.0, 1.0, 0.0));
+      p->add_node(lagrange_dof(3), base_small_vector(0.0, 0.5, 0.0));
+
+      p->add_node(lagrange_dof(3), base_small_vector(0.0, 0.0, 0.5));
+      p->add_node(lagrange_dof(3), base_small_vector(1.0, 0.0, 0.5));
+      p->add_node(lagrange_dof(3), base_small_vector(1.0, 1.0, 0.5));
+      p->add_node(lagrange_dof(3), base_small_vector(0.0, 1.0, 0.5));
+
+      p->add_node(lagrange_dof(3), base_small_vector(0.0, 0.0, 1.0));
+      p->add_node(lagrange_dof(3), base_small_vector(0.5, 0.0, 1.0));
+      p->add_node(lagrange_dof(3), base_small_vector(1.0, 0.0, 1.0));
+      p->add_node(lagrange_dof(3), base_small_vector(1.0, 0.5, 1.0));
+      p->add_node(lagrange_dof(3), base_small_vector(1.0, 1.0, 1.0));
+      p->add_node(lagrange_dof(3), base_small_vector(0.5, 1.0, 1.0));
+      p->add_node(lagrange_dof(3), base_small_vector(0.0, 1.0, 1.0));
+      p->add_node(lagrange_dof(3), base_small_vector(0.0, 0.5, 1.0));
+    }
     dependencies.push_back(p->ref_convex(0));
     dependencies.push_back(p->node_tab(0));
 
@@ -1389,8 +1463,14 @@ namespace getfem {
     init_cvs_node();
     std::stringstream sstr; sstr << "IM_GAUSSLOBATTO1D(" << k*2-1 << ")";
     pintegration_method gl_im = int_method_descriptor(sstr.str());
+    std::vector<base_node> points(k+1);
+    for (size_type i = 0; i < k+1; ++i) {
+      points[i] = gl_im->approx_method()->point(i); 
+    }
+    std::sort(points.begin(),points.end());
     for (size_type i = 0; i < k+1; ++i) {
-      add_node(lagrange_dof(1), gl_im->approx_method()->point(i));
+      // cout << points[i][0] << endl;
+      add_node(lagrange_dof(1), points[i]);
     }
     base_.resize(k+1);
     const double *coefs = fem_coeff_gausslob[k];
@@ -1926,12 +2006,12 @@ namespace getfem {
   struct PK_discont_ : public PK_fem_ {
   public :
     
-    PK_discont_(dim_type nc, short_type k, scalar_type alpha=0.)
+    PK_discont_(dim_type nc, short_type k, scalar_type alpha=scalar_type(0))
       : PK_fem_(nc, k) {
       std::fill(dof_types_.begin(), dof_types_.end(),
 		lagrange_nonconforming_dof(nc));
 
-      if (alpha != 0.) {
+      if (alpha != scalar_type(0)) {
 	base_node G = 
 	  gmm::mean_value(cv_node.points().begin(), cv_node.points().end());
       for (size_type i=0; i < cv_node.nb_points(); ++i) 
@@ -2026,11 +2106,13 @@ namespace getfem {
     static bgeot::pgeometric_trans pgt_last = 0;
     static short_type k_last = short_type(-1);
     static pfem fm_last = 0;
-    bool found = false;
+    static char isuffix_last = 0;
+    bool found = false, isuffix = suffix[0];
 
-    if (pgt_last == pgt && k_last == k)
+    if (pgt_last == pgt && k_last == k && isuffix == isuffix_last)
       return fm_last;
 
+    isuffix_last = isuffix;
 
     size_type n = pgt->structure()->dim();
     size_type nbp = pgt->basic_structure()->nb_points();
@@ -2122,7 +2204,7 @@ namespace getfem {
       add_suffix("PK_FULL_HIERARCHICAL_COMPOSITE",
 		 PK_composite_full_hierarch_fem);
       add_suffix("PK_GAUSSLOBATTO1D", PK_GL_fem);
-      add_suffix("INCOMPLETE_Q2", incomplete_Q2_fem);
+      add_suffix("Q2_INCOMPLETE", Q2_incomplete_fem);
       add_suffix("HCT_TRIANGLE", HCT_triangle_fem);
       add_suffix("REDUCED_HCT_TRIANGLE", reduced_HCT_triangle_fem);
       add_suffix("QUADC1_COMPOSITE", quadc1p3_fem);
diff --git a/src/getfem_fem_composite.cc b/src/getfem_fem_composite.cc
index e86ac78..2fca7b1 100644
--- a/src/getfem_fem_composite.cc
+++ b/src/getfem_fem_composite.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/bgeot_poly_composite.h"
diff --git a/src/getfem_fem_level_set.cc b/src/getfem_fem_level_set.cc
index 28849a1..286a464 100644
--- a/src/getfem_fem_level_set.cc
+++ b/src/getfem_fem_level_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 /** \file getfem_fem_level_set.cc
     \brief a FEM which should be used with getfem::mesh_fem_level_set.
 */
@@ -104,7 +104,7 @@ namespace getfem {
 	mls_of_convex(c.convex_num());
       scalar_type v = eval(c.xref());
       // z[i] = (v > 1e-9) ? '+' : ((v < -1e-9) ? '-' : '0');
-      z[i] = (v > 0.) ? '+' : '-';
+      z[(size_t)i] = (v > 0.) ? '+' : '-';
     }
     unsigned cnt = 0;
     for (unsigned d = 0; d < dofzones.size(); ++d) {
diff --git a/src/getfem_fourth_order.cc b/src/getfem_fourth_order.cc
index b0f87bc..1b55e3c 100644
--- a/src/getfem_fourth_order.cc
+++ b/src/getfem_fourth_order.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/getfem_fourth_order.h"
diff --git a/src/getfem_import.cc b/src/getfem_import.cc
index 27e844a..b66e65e 100644
--- a/src/getfem_import.cc
+++ b/src/getfem_import.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <iostream>
 #include <iomanip>
@@ -136,7 +136,8 @@ namespace getfem {
      structure: $Nodes list_of_nodes $EndNodes $Elements list_of_elt
      $EndElements
   */
-  static void import_gmsh_msh_file(std::ifstream& f, mesh& m, int deprecate=0)
+  static void import_gmsh_msh_file(std::ifstream& f, mesh& m, int deprecate=0,
+                            std::map<std::string, size_type> *region_map=NULL)
   {
     gmm::stream_standard_locale sl(f);
     /* print general warning */
@@ -166,6 +167,28 @@ namespace getfem {
     else
       GMM_ASSERT1(false, "can't read Gmsh format: " << header);
 
+    /* read the region names */
+    if (region_map != NULL) {
+      if (version == 2) {
+        bgeot::read_until(f, "$PhysicalNames");
+        size_type nb_regions;
+        f >> nb_regions;
+        size_type rt,ri;
+        std::string region_name;
+        for (size_type region_cnt=0; region_cnt < nb_regions; ++ region_cnt) {
+          f >> rt >> ri;
+          std::getline(f, region_name);
+          /* trim the string to the quote character front and back*/
+          size_t pos = region_name.find_first_of("\"");
+          if (pos != region_name.npos) {
+            region_name.erase(0, pos+1);
+            pos = region_name.find_last_of("\"");
+            region_name.erase(pos); 
+          }
+          (*region_map)[region_name] = ri;
+        }
+      }
+    }
     /* read the node list */
     if (version == 2)
       bgeot::read_until(f, "$Nodes"); /* Format version 2 */
@@ -692,6 +715,33 @@ namespace getfem {
     }
   }
 
+  void import_mesh_gmsh(std::ifstream& f, mesh &m, 
+                  std::map<std::string, size_type> &region_map) {
+    import_gmsh_msh_file(f,m, 0, &region_map);
+  }
+
+  void import_mesh_gmsh(const std::string& filename,
+                   mesh& m, std::map<std::string, size_type> &region_map) {
+    m.clear();
+    try {
+      std::ifstream f(filename.c_str());
+      GMM_ASSERT1(f.good(), "can't open file " << filename);
+      /* throw exceptions when an error occurs */
+      f.exceptions(std::ifstream::badbit | std::ifstream::failbit);
+      import_mesh_gmsh(f,m,region_map);
+      f.close();
+    }
+    catch (failure_error& exc) {
+      m.clear();
+      throw exc;
+    }
+    catch (std::ios_base::failure& exc) {
+      m.clear();
+      GMM_ASSERT1(false, "error while importing " << "gmsh"
+                  << " mesh file \"" << filename << "\" : " << exc.what());
+    }
+  }
+                                                     
   void import_mesh(std::ifstream& f, const std::string& format,
                    mesh& m) {
     if (bgeot::casecmp(format,"gmsh")==0)
diff --git a/src/getfem_integration.cc b/src/getfem_integration.cc
index b0fdd17..e9d9d32 100644
--- a/src/getfem_integration.cc
+++ b/src/getfem_integration.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/dal_singleton.h"
diff --git a/src/getfem_integration_composite.cc b/src/getfem_integration_composite.cc
index 30bc544..f366c96 100644
--- a/src/getfem_integration_composite.cc
+++ b/src/getfem_integration_composite.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/bgeot_poly_composite.h"
diff --git a/src/getfem_inter_element.cc b/src/getfem_inter_element.cc
index 0235741..17333be 100644
--- a/src/getfem_inter_element.cc
+++ b/src/getfem_inter_element.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/getfem_inter_element.h"
diff --git a/src/getfem_interpolated_fem.cc b/src/getfem_interpolated_fem.cc
index 7f7c500..a02bc1c 100644
--- a/src/getfem_interpolated_fem.cc
+++ b/src/getfem_interpolated_fem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_interpolated_fem.h"
 
@@ -296,7 +296,7 @@ namespace getfem {
 	actualize_fictx(pf, cv, ptref);
 	pf->real_grad_base_value(fictx, taux);
 	for (size_type i = 0; i < nbdof; ++i)
-	  ind_dof.at(elements.at(cv).inddof.at(i)) = i;
+	  ind_dof.at(e.inddof.at(i)) = i;
 	if (pif) {
 	  pif->grad(c.xreal(), trans);
 	  for (size_type i = 0; i < pf->nb_dof(cv); ++i)
diff --git a/src/getfem_interpolation.cc b/src/getfem_interpolation.cc
index fad4181..132df23 100644
--- a/src/getfem_interpolation.cc
+++ b/src/getfem_interpolation.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2001-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/getfem_interpolation.h"
@@ -25,7 +25,7 @@
 namespace getfem {
 
   void mesh_trans_inv::points_on_convex(size_type i,
-					std::vector<size_type> &itab) const {
+                                        std::vector<size_type> &itab) const {
     itab.resize(pts_cvx[i].size()); size_type j = 0;
     for (map_iterator it = pts_cvx[i].begin(); it != pts_cvx[i].end(); ++it)
       itab[j++] = it->first;
@@ -44,50 +44,50 @@ namespace getfem {
 
     do {
       for (dal::bv_visitor j(msh.convex_index()); !j.finished(); ++j) {
-	if (mult > scalar_type(1) && !(cv_on_bound.is_in(j))) continue;
-	bgeot::pgeometric_trans pgt = msh.trans_of_convex(j);
-	bounding_box(min, max, msh.points_of_convex(j), pgt);
-	for (size_type k=0; k < min.size(); ++k) { min[k]-=EPS; max[k]+=EPS; }
-	if (extrapolation == 2) {
-	  if (mult == scalar_type(1))
-	    for (short_type f = 0; f < msh.nb_faces_of_convex(j); ++f)
-	      if (!(msh.is_convex_having_neighbour(j, f))) cv_on_bound.add(j);
-	  if (cv_on_bound.is_in(j)) {
-	    scalar_type h = scalar_type(0);
-	    for (size_type k=0; k < min.size(); ++k)
-	      h = std::max(h, max[k] - min[k]);
-	    for (size_type k=0; k < min.size(); ++k)
-	      { min[k]-=mult*h; max[k]+=mult*h; }
-	  }
-	}
-	points_in_box(boxpts, min, max);
+        if (mult > scalar_type(1) && !(cv_on_bound.is_in(j))) continue;
+        bgeot::pgeometric_trans pgt = msh.trans_of_convex(j);
+        bounding_box(min, max, msh.points_of_convex(j), pgt);
+        for (size_type k=0; k < min.size(); ++k) { min[k]-=EPS; max[k]+=EPS; }
+        if (extrapolation == 2) {
+          if (mult == scalar_type(1))
+            for (short_type f = 0; f < msh.nb_faces_of_convex(j); ++f)
+              if (!(msh.is_convex_having_neighbour(j, f))) cv_on_bound.add(j);
+          if (cv_on_bound.is_in(j)) {
+            scalar_type h = scalar_type(0);
+            for (size_type k=0; k < min.size(); ++k)
+              h = std::max(h, max[k] - min[k]);
+            for (size_type k=0; k < min.size(); ++k)
+              { min[k]-=mult*h; max[k]+=mult*h; }
+          }
+        }
+        points_in_box(boxpts, min, max);
 
-	if (boxpts.size() > 0) gic.init(msh.points_of_convex(j), pgt);
-	
-	for (size_type l = 0; l < boxpts.size(); ++l) {
-	  size_type ind = boxpts[l].i;
-	  if (npt[ind] || dist[ind] > 0) {
-	    bool converged;
-	    bool gicisin = gic.invert(boxpts[l].n, pt_ref, converged, EPS);
-	    bool toadd = extrapolation || gicisin;
-	    double isin = pgt->convex_ref()->is_in(pt_ref);
-	    
-	    if (toadd && !(npt[ind])) {
-	      if (isin < dist[ind]) pts_cvx[cvx_pts[ind]].erase(ind);
-	      else toadd = false;
-	    }
-	    if (toadd) {
-// 	      if (mult > 1.5) {
-// 		cout << "adding " << ind << "ref_coord = " << pt_ref
-// 		     << " cv = " << j << " mult = " << mult << endl;
-// 	      }
-	      ref_coords[ind] = pt_ref;
-	      dist[ind] = isin; cvx_pts[ind] = j;
-	      pts_cvx[j][ind] = void_type();
-	      npt.sup(ind);
-	    }
-	  }
-	}
+        if (boxpts.size() > 0) gic.init(msh.points_of_convex(j), pgt);
+        
+        for (size_type l = 0; l < boxpts.size(); ++l) {
+          size_type ind = boxpts[l].i;
+          if (npt[ind] || dist[ind] > 0) {
+            bool converged;
+            bool gicisin = gic.invert(boxpts[l].n, pt_ref, converged, EPS);
+            bool toadd = extrapolation || gicisin;
+            double isin = pgt->convex_ref()->is_in(pt_ref);
+            
+            if (toadd && !(npt[ind])) {
+              if (isin < dist[ind]) pts_cvx[cvx_pts[ind]].erase(ind);
+              else toadd = false;
+            }
+            if (toadd) {
+//               if (mult > 1.5) {
+//                 cout << "adding " << ind << "ref_coord = " << pt_ref
+//                      << " cv = " << j << " mult = " << mult << endl;
+//               }
+              ref_coords[ind] = pt_ref;
+              dist[ind] = isin; cvx_pts[ind] = j;
+              pts_cvx[j][ind] = void_type();
+              npt.sup(ind);
+            }
+          }
+        }
       }
       mult *= scalar_type(2);
     } while (npt.card() > 0 && extrapolation == 2);
diff --git a/src/getfem_level_set.cc b/src/getfem_level_set.cc
index a738b1e..186d12a 100644
--- a/src/getfem_level_set.cc
+++ b/src/getfem_level_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/getfem_level_set.h"
diff --git a/src/getfem_mat_elem.cc b/src/getfem_mat_elem.cc
index 5e61a15..0a475b9 100644
--- a/src/getfem_mat_elem.cc
+++ b/src/getfem_mat_elem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include <deque>
@@ -568,6 +568,13 @@ namespace getfem {
 	  }	  
 	  add_elem(t, ctx, J, first, true, icb, sizes);
 	}
+
+	// GMM_ASSERT1(!first, "No integration point on this element.");
+	if (first) {
+	  GMM_WARNING3("No integration point on this element. "
+		       "Caution, returning a null tensor");
+	  t.adjust_sizes(sizes); gmm::clear(t.as_vector());
+	}
       }
 
       /* Applying linear transformation for non tau-equivalent elements.   */
diff --git a/src/getfem_mat_elem_type.cc b/src/getfem_mat_elem_type.cc
index 0bdca5d..38bbf13 100644
--- a/src/getfem_mat_elem_type.cc
+++ b/src/getfem_mat_elem_type.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/dal_singleton.h"
 #include "getfem/getfem_mat_elem_type.h"
diff --git a/src/getfem_mesh.cc b/src/getfem_mesh.cc
index 2b5e9a4..9881f37 100644
--- a/src/getfem_mesh.cc
+++ b/src/getfem_mesh.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/dal_singleton.h"
 #include "gmm/gmm_condition_number.h"
@@ -83,7 +83,7 @@ namespace getfem {
 		giv.invert(pt, barycentre);
 
 	
-		if (pgt->convex_ref()->is_in_face(f, barycentre) < 0.1)
+		if (gmm::abs(pgt->convex_ref()->is_in_face(f, barycentre)) < 0.1)
 		  r.add(icv[jc], fsub);
 	      }
 	    }
@@ -108,7 +108,7 @@ namespace getfem {
 	      giv.invert(pt, barycentre);
 	
 	      for (short_type f = 0; f < pgt->structure()->nb_faces(); ++f)
-		if (pgt->convex_ref()->is_in_face(f, barycentre) < 0.1)
+		if (gmm::abs(pgt->convex_ref()->is_in_face(f, barycentre)) < 0.1)
 		  { r.add(ic, f); break; }
 	  }
 	}
@@ -138,6 +138,7 @@ namespace getfem {
       else {
 	int ne = int(nb_convex());
 	std::vector<int> xadj(ne+1), adjncy, numelt(ne), npart(ne);
+	std::vector<int> indelt(convex_index().last_true()+1);
 	
 	double t_ref = MPI_Wtime();
 
@@ -145,10 +146,14 @@ namespace getfem {
 	ind_set s;
 	for (dal::bv_visitor ic(convex_index()); !ic.finished(); ++ic, ++j) {
 	  numelt[j] = ic;
+	  indelt[ic] = j;
+	}
+	j = 0;
+	for (dal::bv_visitor ic(convex_index()); !ic.finished(); ++ic, ++j) {
 	  xadj[j] = k;
 	  neighbours_of_convex(ic, s);
 	  for (ind_set::iterator it = s.begin();
-	       it != s.end(); ++it) { adjncy.push_back(*it); ++k; }
+	       it != s.end(); ++it) { adjncy.push_back(indelt[*it]); ++k; }
 	}
 	xadj[j] = k;
 
@@ -376,6 +381,11 @@ namespace getfem {
   void mesh::copy_from(const mesh& m) {
     clear();
     bgeot::basic_mesh::operator=(m);
+    cvf_sets = m.cvf_sets;
+    valid_cvf_sets = m.valid_cvf_sets;
+    for (std::map<size_type, mesh_region>::iterator it = cvf_sets.begin();
+	 it != cvf_sets.end(); ++it)
+      if (it->second.get_parent_mesh() != 0) it->second.set_parent_mesh(this);
     cvs_v_num.clear();
     gmm::uint64_type d = act_counter();
     for (dal::bv_visitor i(convex_index()); !i.finished(); ++i)
diff --git a/src/getfem_mesh_fem.cc b/src/getfem_mesh_fem.cc
index 26cf0aa..a3bddd3 100644
--- a/src/getfem_mesh_fem.cc
+++ b/src/getfem_mesh_fem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include <queue>
@@ -271,6 +271,22 @@ namespace getfem {
     }
   };
 
+  void mesh_fem::get_global_dof_index(std::vector<size_type> &ind) const {
+    context_check(); if (!dof_enumeration_made) enumerate_dof();
+    ind.resize(nb_total_dof);
+    for (size_type i=0; i < nb_total_dof; i++) {
+      size_type cv = first_convex_of_basic_dof(i) ;
+      pfem pf = fem_of_element(cv);
+      for (size_type j=0; j < nb_basic_dof_of_element(cv); j++) {
+        if (pf->dof_types()[j] == global_dof(pf->dim()))
+          if (ind_basic_dof_of_element(cv)[j] == i) {
+            ind[i] = pf->index_of_global_dof(cv,j);
+            break;
+          }
+      }
+    }
+  }
+
   typedef std::map<fem_dof, size_type, dof_comp_> dof_sort_type;
 
   /// Enumeration of dofs
@@ -364,7 +380,7 @@ namespace getfem {
     gmm::row_matrix<gmm::rsvector<scalar_type> >
       RR(kept_dof.size(), nb_basic_dof());
     size_type j = 0;
-    for (std::set<size_type>::iterator it = kept_dof.begin();
+    for (std::set<size_type>::const_iterator it = kept_dof.begin();
 	 it != kept_dof.end(); ++it, ++j)
       RR(j, *it) = scalar_type(1);
     set_reduction_matrices(RR, gmm::transposed(RR));
diff --git a/src/getfem_mesh_fem_global_function.cc b/src/getfem_mesh_fem_global_function.cc
index 0065b71..4e1fcb3 100644
--- a/src/getfem_mesh_fem_global_function.cc
+++ b/src/getfem_mesh_fem_global_function.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <getfem/getfem_mesh_fem_global_function.h>
 #include <getfem/getfem_level_set.h>
@@ -146,7 +146,7 @@ namespace getfem {
   }
 
 
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
 
   parser_xy_function::parser_xy_function(const std::string &sval,
 					 const std::string &sgrad,
diff --git a/src/getfem_mesh_fem_level_set.cc b/src/getfem_mesh_fem_level_set.cc
old mode 100755
new mode 100644
index 9ced619..1e7eb85
--- a/src/getfem_mesh_fem_level_set.cc
+++ b/src/getfem_mesh_fem_level_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_mesh_fem_level_set.h"
 
diff --git a/src/getfem_mesh_fem_product.cc b/src/getfem_mesh_fem_product.cc
index 3ee77fc..c7a12e2 100644
--- a/src/getfem_mesh_fem_product.cc
+++ b/src/getfem_mesh_fem_product.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/getfem_mesh_fem_product.h"
diff --git a/src/getfem_mesh_fem_sum.cc b/src/getfem_mesh_fem_sum.cc
index 7bdd48f..c272ddf 100644
--- a/src/getfem_mesh_fem_sum.cc
+++ b/src/getfem_mesh_fem_sum.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/getfem_mesh_fem_sum.h"
diff --git a/src/getfem_mesh_im.cc b/src/getfem_mesh_im.cc
index d86d0bc..55e003c 100644
--- a/src/getfem_mesh_im.cc
+++ b/src/getfem_mesh_im.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_mesh_im.h"
 
diff --git a/src/getfem_mesh_im_level_set.cc b/src/getfem_mesh_im_level_set.cc
index 92e70c1..c6b62d2 100644
--- a/src/getfem_mesh_im_level_set.cc
+++ b/src/getfem_mesh_im_level_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_mesh_im_level_set.h"
 #include "getfem/getfem_mesher.h"
@@ -342,9 +342,19 @@ namespace getfem {
 	  B = gmm::mean_value(msh.points_of_face_of_convex(i, f));
 	  if (pgt->convex_ref()->is_in(B) < -1E-7) continue;
 	  for (short_type fi = 0; fi < pgt->structure()->nb_faces(); ++fi) {
-	    if (gmm::abs(pgt->convex_ref()->is_in_face(fi, B)) < 1E-6) ff = fi;
+	    if (gmm::abs(pgt->convex_ref()->is_in_face(fi, B)) < 2E-6) ff = fi;
+	  }
+
+	  if (ff == short_type(-1)) {
+	    cout << "Distance to the element : "
+		 << pgt->convex_ref()->is_in(B) << endl;
+	    for (short_type fi = 0; fi < pgt->structure()->nb_faces(); ++fi) {
+	      cout << "Distance to face " << fi << " : "
+		   << gmm::abs(pgt->convex_ref()->is_in_face(fi, B)) << endl;
+	    }
+	    GMM_ASSERT3(false, "the point is neither in the interior nor "
+			"the boundary of the element");
 	  }
-	  GMM_ASSERT3(ff != short_type(-1), "");
 	}
 	  
 	vectors_to_base_matrix(G, msh.points_of_convex(i));
diff --git a/src/getfem_mesh_level_set.cc b/src/getfem_mesh_level_set.cc
index 20f5ca9..56795d2 100644
--- a/src/getfem_mesh_level_set.cc
+++ b/src/getfem_mesh_level_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_mesh_level_set.h"
 
@@ -118,23 +118,36 @@ struct Chrono {
 			 constraints, list_constraints);
       }
     }
+
+    // cout << "ipts.size() = " << ipts.size() << endl;
+    // cout << " nb_vertices = " <<  nb_vertices << endl;
+
     dal::bit_vector cts; size_type cnt = 0;
     for (size_type i=0; i < ipts.size(); ++i) {
-      if (ipts[i] < nb_vertices) { 
+      // cout << "ipts[i] = " << ipts[i] << endl;
+      if (ipts[i] < nb_vertices) {
+	// cout << "point " << i << " constraints[ipts[i]] = " << constraints[ipts[i]] << endl;
 	if (cnt == 0) cts = constraints[ipts[i]];
 	else cts &= constraints[ipts[i]];
 	++cnt;
       }
     }
+
     if (cts.card()) {
+      // cout << "cts = " << cts << endl;
       // dal::bit_vector new_cts;
       for (size_type i=0; i < ipts.size(); ++i) {
-	if (ipts[i] >= nb_vertices && !ptdone[ipts[i]]) { 
-	  base_node &P = m.points()[ipts[i]];
+	if (ipts[i] >= nb_vertices && !ptdone[ipts[i]]) {
+	  base_node P = m.points()[ipts[i]];
 	  // if (cts.card() > 1)
 	  //   cout << "WARNING, projection sur " << cts << endl;
-	  if (!pure_multi_constraint_projection(list_constraints, P, cts))
-	    GMM_WARNING1("Pure multi has failed in interpolate_face !!");
+	  if (!pure_multi_constraint_projection(list_constraints, P, cts)) {
+	    GMM_WARNING1("Pure multi has failed in interpolate_face !! Original point " << m.points()[ipts[i]] << " projection " << P);
+	    // GMM_ASSERT1(false, "");
+	  } else {
+	    m.points()[ipts[i]] = P;
+	  }
+	  ptdone[ipts[i]] = true;
 	  // dist(P, new_cts);
 	}
       }
diff --git a/src/getfem_mesh_region.cc b/src/getfem_mesh_region.cc
index dc28f23..de3c816 100644
--- a/src/getfem_mesh_region.cc
+++ b/src/getfem_mesh_region.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2005-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_mesh_region.h"
 #include "getfem/getfem_mesh.h"
diff --git a/src/getfem_mesh_slice.cc b/src/getfem_mesh_slice.cc
index 84c5831..86fdfd0 100644
--- a/src/getfem_mesh_slice.cc
+++ b/src/getfem_mesh_slice.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_mesh_slice.h"
 #include "getfem/bgeot_geotrans_inv.h"
@@ -142,7 +142,7 @@ namespace getfem {
 	    ist >> nod[i].pt_ref[j];
 	  ist >> bgeot::skip(";");
 	  unsigned long ul; ist >> ul;
-	  nod[i].faces = slice_node::faces_ct(ul);
+	  nod[i].faces = slice_node::faces_ct(int(ul));
 	}
 	for (unsigned i=0; i < nbs; ++i) {
 	  unsigned np(0);
diff --git a/src/getfem_mesh_slicers.cc b/src/getfem_mesh_slicers.cc
index fff251e..1d031f9 100644
--- a/src/getfem_mesh_slicers.cc
+++ b/src/getfem_mesh_slicers.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/dal_singleton.h"
 #include "getfem/getfem_mesh_slicers.h"
@@ -790,7 +790,7 @@ namespace getfem {
     
     dal::bit_vector pt_in_face; pt_in_face.sup(0, cvm.points().index().last_true()+1);
     for (dal::bv_visitor ip(cvm.points().index()); !ip.finished(); ++ip)
-      if (cvr->is_in_face(short_type(f), cvm.points()[ip])) pt_in_face.add(ip);
+      if (gmm::abs(cvr->is_in_face(short_type(f), cvm.points()[ip]))) pt_in_face.add(ip);
 
     for (dal::bv_visitor_c ic(cvm.convex_index()); !ic.finished(); ++ic) {
       for (short_type ff=0; ff < cvm.nb_faces_of_convex(ic); ++ff) {
diff --git a/src/getfem_mesher.cc b/src/getfem_mesher.cc
index d1150f7..53e9b7a 100644
--- a/src/getfem_mesher.cc
+++ b/src/getfem_mesher.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier, Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_mesher.h"
 
@@ -106,6 +106,7 @@ namespace getfem {
    base_node &X, const dal::bit_vector &cts) {
     size_type nbco = cts.card(), i(0), info, N = X.size();
     if (!nbco) return true;
+    // cout << "nbco = " << nbco << endl;
     std::vector<const mesher_signed_distance*> ls(nbco);
     std::vector<scalar_type> d(nbco), v(nbco);
     std::vector<int> ipvt(nbco);
@@ -114,41 +115,100 @@ namespace getfem {
     base_small_vector dd(N);
     for (dal::bv_visitor ic(cts); !ic.finished(); ++ic, ++i)
       { ls[i] = list_constraints[ic]; d[i] = -(ls[i]->grad(X, G[i])); }
-    base_node oldX;
+    base_node oldX, aux(N);
     size_type iter = 0;
-    scalar_type residual(0), alpha;
-    do {
-      oldX = X;
-      gmm::mult(gmm::transposed(G), G, H);
-      info = lu_factor(H, ipvt);
-      scalar_type det(1);
-      for (i = 0; i < nbco; ++i) det *= H(i,i);
-      if (info || gmm::abs(det) < 1E-40) {
-	for (i = 0; i < nbco; ++i)
-	  try_projection(*(ls[i]), X, true);
-	for (i = 0; i < nbco; ++i) d[i] = -(ls[i]->grad(X, G[i]));
-      }
-      else {
-	lu_solve(H, ipvt, v, d);
-	gmm::mult(G, v, dd);
-	gmm::add(dd, X);
-	for (i = 0; i < nbco; ++i) d[i] = -(ls[i]->grad(X, G[i]));
-	alpha = 1.;
-	if (iter > 0)
-	  while (gmm::vect_norm2(d) > residual && alpha > 1E-15) {
-	    alpha /= 2.;
-	    gmm::add(gmm::scaled(dd, -alpha), X);
+    scalar_type residual(0), alpha(0), det(0);
+
+    if (nbco == 1) {
+      // cout << "one constraint" << endl;
+      try_projection(*(ls[0]), X, true);
+      d[0] = -(ls[0]->grad(X, G[0]));
+    } else {
+      do {
+	oldX = X;
+	det = scalar_type(0); info = 1;
+	alpha = -scalar_type(1);
+	
+	if (nbco <= N) {
+	  if (nbco < N)
+	    gmm::mult(gmm::transposed(G), G, H);
+	  else
+	    gmm::copy(gmm::transposed(G), H);
+	  // cout << "H = " << H << endl;
+	  info = gmm::lu_factor(H, ipvt);
+	  det = scalar_type(1);
+	  for (i = 0; i < nbco; ++i) det *= H(i,i);
+	}
+	// cout << "G = " << G << endl;
+	
+	if (info || gmm::abs(det) < 1E-40) {
+	  dal::bit_vector cts_red = cts;
+	  int eliminated = 0;
+	  i = 0;
+	  for (dal::bv_visitor ic(cts); !ic.finished(); ++ic, ++i) {
+	    for (size_type j = 0; j < i; ++j)
+	      gmm::add(gmm::scaled(G[j], -gmm::vect_sp(G[j], G[i])), G[i]);
+	    scalar_type norm_gi = gmm::vect_norm2(G[i]);
+	    // cout << "norm_gi = " << norm_gi << endl;
+	    if (norm_gi < 1E-10)
+	      { cts_red[ic] = false; eliminated++; }
+	    else
+	      gmm::scale(G[i], scalar_type(1)/norm_gi);
+	  }
+	  // cout << "G after = " << G << endl;
+	  if (eliminated >= 1) {
+	    // cout << "rec call with " << eliminated << " eliminated constraints" << endl;
+	    pure_multi_constraint_projection(list_constraints, X, cts_red); 
 	    for (i = 0; i < nbco; ++i) d[i] = -(ls[i]->grad(X, G[i]));
+	    
+	    det = scalar_type(0); info = 1;
+	    if (nbco <= N) {
+	      if (nbco < N)
+		gmm::mult(gmm::transposed(G), G, H);
+	      else
+		gmm::copy(G, H);
+	      info = gmm::lu_factor(H, ipvt);
+	      det = scalar_type(1);
+	      for (i = 0; i < nbco; ++i) det *= H(i,i);
+	    }
+	    
 	  }
-	if (alpha < 1E-15) break;
-      }
-      for (i = 0; i < nbco; ++i) d[i] = -(ls[i]->grad(X, G[i]));
-      ++iter;
-      residual = gmm::vect_norm2(d);
-    } while ((residual > 1e-14 || gmm::vect_dist2(oldX,X) > 1e-14)
-	     && iter < 1000);
-//     cout << "nb iter de pure_multi : " << iter
-//   	 << " norm(d) = " << gmm::vect_norm2(d) << " cts = " << cts << endl;
+	}
+	
+	if (gmm::vect_norm2(d) > 1e-14) {
+	  if (info || gmm::abs(det) < 1E-40) {
+	    for (i = 0; i < nbco; ++i)
+	      try_projection(*(ls[i]), X, true);
+	    for (i = 0; i < nbco; ++i) d[i] = -(ls[i]->grad(X, G[i]));
+	  }
+	  else {
+	    gmm::lu_solve(H, ipvt, v, d);
+	    if (nbco < N)
+	      gmm::mult(G, v, dd);
+	    else
+	      gmm::copy(v, dd);
+	    GMM_ASSERT1(nbco <= N, "internal error");
+	    gmm::add(dd, X);
+	    for (i = 0; i < nbco; ++i) d[i] = -(ls[i]->grad(X, G[i]));
+	    alpha = scalar_type(1);
+	    if (iter > 0)
+	      while (gmm::vect_norm2(d) > residual && alpha > 1E-10) {
+		alpha /= scalar_type(2);
+		gmm::add(gmm::scaled(dd, -alpha), X);
+		for (i = 0; i < nbco; ++i) d[i] = -(ls[i]->grad(X, G[i]));
+	      }
+	    if (alpha < 1E-15) break;
+	  }
+	}
+	
+	++iter;
+	residual = gmm::vect_norm2(d);
+	// cout << "residual = " << residual << " alpha = " << alpha;
+	// cout << " gmm::vect_dist2(oldX,X) = " << gmm::vect_dist2(oldX,X) << endl;
+      } while (residual > 1e-14 && (residual > 1e-11 || iter < 15)
+	       && iter < 200);
+      // cout << "final residual = " << residual << endl;
+    }
     for (i = 0; i < nbco; ++i) if (gmm::abs(d[i]) > SEPS) {
       //cout << "PURE MULTI HAS FAILED for " << cts << " nb iter = " << iter << endl;
       return false;
@@ -274,6 +334,7 @@ namespace getfem {
       : dist(dist_), edge_len(edge_len_), dist_point_hull(dph),
 	boundary_threshold_flatness(btf), iter_max(itm), prefind(pref),
 	noisy(noise) {
+      if (noise == -1) noisy = gmm::traces_level::level() - 2;
       K=K_; h0=h0_;
       ptol = 0.0025;
       ttol = .1;
@@ -774,7 +835,7 @@ namespace getfem {
 	  }
 	}
       }
-      cout << "effective bounding box : " << eff_boxmin << " : " << eff_boxmax << endl;
+      if (noisy > 0) cout << "effective bounding box : " << eff_boxmin << " : " << eff_boxmax << endl;
       if (prefind == 3) {
 	h0 = std::min(h0, gmm::vect_dist2(eff_boxmin, eff_boxmax)
 		      / scalar_type(2));
@@ -1233,19 +1294,17 @@ namespace getfem {
 	// char s[50]; sprintf(s, "toto%02d.mesh", count);
 	// m.write_to_file(s);
 
-	cout << "iter : " << count << endl;
-
 	if ( (count > 40 && sqrt(maxdp)*deltat < ptol * h0)
 	     || iter_wtcc>iter_max || count > 10000) {
 
-	  {
-	    m.clear();
-	    adapt_mesh(m,K);
-	    m.optimize_structure();
-	    getfem::vtk_export exp("toto1.vtk");
-	    exp.exporting(m);
-	    exp.write_mesh_quality(m);
-	  }
+// 	  {
+// 	    m.clear();
+// 	    adapt_mesh(m,K);
+// 	    m.optimize_structure();
+// 	    getfem::vtk_export exp("toto1.vtk");
+// 	    exp.exporting(m);
+// 	    exp.write_mesh_quality(m);
+// 	  }
 
 	  control_mesh_surface();
 	  size_type nbpt = pts.size();
@@ -1255,14 +1314,14 @@ namespace getfem {
 	  select_elements((prefind == 3) ? 0 : 1);
 	  suppress_flat_boundary_elements();
 
-	  {
-	    m.clear();
-	    adapt_mesh(m,K);
-	    m.optimize_structure();
-	    getfem::vtk_export exp("toto2.vtk");
-	    exp.exporting(m);
-	    exp.write_mesh_quality(m);
-	  }
+// 	  {
+// 	    m.clear();
+// 	    adapt_mesh(m,K);
+// 	    m.optimize_structure();
+// 	    getfem::vtk_export exp("toto2.vtk");
+// 	    exp.exporting(m);
+// 	    exp.write_mesh_quality(m);
+// 	  }
 
 	  if (prefind != 3) optimize_quality();
 	  
@@ -1289,14 +1348,14 @@ namespace getfem {
 	    select_elements((prefind == 3) ? 0 : 1);
 	    suppress_flat_boundary_elements();
 
-	    {
-	      m.clear();
-	      adapt_mesh(m,K);
-	      m.optimize_structure();
-	      getfem::vtk_export exp("toto3.vtk");
-	      exp.exporting(m);
-	      exp.write_mesh_quality(m);
-	    }
+// 	    {
+// 	      m.clear();
+// 	      adapt_mesh(m,K);
+// 	      m.optimize_structure();
+// 	      getfem::vtk_export exp("toto3.vtk");
+// 	      exp.exporting(m);
+// 	      exp.write_mesh_quality(m);
+// 	    }
 	    
 	    if (prefind != 3) optimize_quality();
 	  }
@@ -1308,24 +1367,27 @@ namespace getfem {
 
       m.clear();
       adapt_mesh(m,K);
-      m.write_to_file("toto.mesh");
+      // m.write_to_file("toto.mesh");
       
       m.optimize_structure();
 
 
-      getfem::vtk_export exp("toto4.vtk");
-      exp.exporting(m);
-      exp.write_mesh_quality(m);
+//       getfem::vtk_export exp("toto4.vtk");
+//       exp.exporting(m);
+//       exp.write_mesh_quality(m);
+
+//       getfem::stored_mesh_slice sl;
+//       sl.build(m, getfem::slicer_explode(0.8), 8);
+//       getfem::vtk_export exp2("totoq.vtk");
+//       exp2.exporting(sl);
+//       exp2.write_mesh();
+//       exp2.write_mesh_quality(m);
+//       getfem::dx_export exp3("totoq.dx");
+//       exp3.exporting(sl);
+//       exp3.write_mesh();
+
+
 
-      getfem::stored_mesh_slice sl;
-      sl.build(m, getfem::slicer_explode(0.8), 8);
-      getfem::vtk_export exp2("totoq.vtk");
-      exp2.exporting(sl);
-      exp2.write_mesh();
-      exp2.write_mesh_quality(m);
-      getfem::dx_export exp3("totoq.dx");
-      exp3.exporting(sl);
-      exp3.write_mesh();
 
 //       getfem::stored_mesh_slice slb; slb.build(m, getfem::slicer_boundary(m), 4);
 //       getfem::stored_mesh_slice sl2;
@@ -1383,6 +1445,9 @@ namespace getfem {
 # else
 
   extern "C" {
+#ifdef _MSC_VER
+# include <libqhull/qhull_a.h>
+#else
 # include <qhull/qhull.h>
 //# include <qhull/mem.h>
 # include <qhull/qset.h>
@@ -1391,6 +1456,7 @@ namespace getfem {
 //# include <qhull/poly.h>
 //# include <qhull/io.h>
 //# include <qhull/stat.h>
+#endif
 }
 
   void delaunay(const std::vector<base_node> &pts,
diff --git a/src/getfem_model_solvers.cc b/src/getfem_model_solvers.cc
index 1d4ac49..b5290da 100644
--- a/src/getfem_model_solvers.cc
+++ b/src/getfem_model_solvers.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_model_solvers.h"
 
@@ -35,6 +35,54 @@ namespace getfem {
                                  model_complex_plain_vector>(md);
   }
 
+  void default_newton_line_search::init_search(double r, size_t git, double) {
+    alpha_min_ratio = 0.9;
+    alpha_min = 1e-10;
+    alpha_max_ratio = 10.0;
+    alpha_mult = 0.25;
+    itmax = size_type(-1);
+    glob_it = git; if (git <= 1) count_pat = 0;
+    conv_alpha = alpha = alpha_old = 1.;
+    conv_r = first_res = r; it = 0;
+    count = 0;
+    max_ratio_reached = false;
+  }
+
+  double default_newton_line_search::next_try(void) {
+    alpha_old = alpha; ++it;
+    // alpha *= 0.5;
+    if (alpha >= 0.4) alpha *= 0.5; else alpha *= alpha_mult;
+    return alpha_old;
+  }
+
+  bool default_newton_line_search::is_converged(double r, double) {
+    // cout << "r = " << r << " alpha = " << alpha_old << " count_pat = " << count_pat << endl;
+    if (!max_ratio_reached && r < first_res * alpha_max_ratio) {
+      alpha_max_ratio_reached = alpha_old; r_max_ratio_reached = r;
+      it_max_ratio_reached = it; max_ratio_reached = true; 
+    }
+    if (max_ratio_reached &&
+	r < r_max_ratio_reached * 0.5 &&
+	r > first_res * 1.1 && it <= it_max_ratio_reached+1) {
+      alpha_max_ratio_reached = alpha_old; r_max_ratio_reached = r;
+      it_max_ratio_reached = it;
+    }
+    if (count == 0 || r < conv_r)
+      { conv_r = r; conv_alpha = alpha_old; count = 1; }
+    if (conv_r < first_res) ++count;
+    
+    if (r < first_res *  alpha_min_ratio)
+      { count_pat = 0.; return true; }      
+    if (count>=5 || (alpha < alpha_min && max_ratio_reached) || alpha<1e-15) {
+      if (conv_r < first_res * 0.99) count_pat = 0;
+      if (/*gmm::random() * 50. < -log(conv_alpha)-4.0 ||*/ count_pat >= 3)
+	{ conv_r=r_max_ratio_reached; conv_alpha=alpha_max_ratio_reached; }
+      if (conv_r >= first_res * 0.999) count_pat++;
+      return true;
+    }
+    return false;
+  }
+
   /* ***************************************************************** */
   /*     Intermediary structure for Newton algorithms.                 */
   /* ***************************************************************** */
@@ -48,69 +96,214 @@ namespace getfem {
     typedef typename gmm::number_traits<T>::magnitude_type R;
 
     model &md;
-    gmm::abstract_newton_line_search &ls;
+    bool is_reduced;
+    std::vector<size_type> &sind;
+    gmm::sub_index I;
+    abstract_newton_line_search &ls;
     VECTOR stateinit, &state;
     const VECTOR &rhs;
     const MATRIX &K;
+    MATRIX Kr;
+    VECTOR rhsr;
     bool with_pseudo_potential;
 
-    void compute_tangent_matrix(void)
-    { md.to_variables(state); md.assembly(model::BUILD_MATRIX); }
+    void compute_tangent_matrix(void) {
+      md.to_variables(state);
+      md.assembly(model::BUILD_MATRIX);
+      if (is_reduced) {
+	gmm::resize(Kr, sind.size(), sind.size());
+	gmm::copy(gmm::sub_matrix(K, I, I), Kr);
+      }
+    }
 
-    const MATRIX &tangent_matrix(void) { return K; }
+    const MATRIX &tangent_matrix(void) { return (is_reduced ? Kr : K); }
     
     inline T scale_residual(void) const { return T(1); }
 
-    void compute_residual(void)
-    { md.to_variables(state); md.assembly(model::BUILD_RHS); }
+    void compute_residual(void) {
+      md.to_variables(state);
+      md.assembly(model::BUILD_RHS);
+      if (is_reduced) {
+	gmm::resize(rhsr, sind.size());
+	gmm::copy(gmm::sub_vector(rhs, I), rhsr);
+      }
+    }
 
     void compute_pseudo_potential(void)
     { md.to_variables(state); md.assembly(model::BUILD_PSEUDO_POTENTIAL); }
 
+    void perturbation(void) {
+      R res = gmm::vect_norm2(state), ampl = std::max(res*R(1E-20), R(1E-50));
+      std::vector<R> V(gmm::vect_size(state));
+      gmm::fill_random(V);
+      gmm::add(gmm::scaled(V, ampl), state);
+    }
 
-    const VECTOR &residual(void) { return rhs; }
+    const VECTOR &residual(void) { return (is_reduced ? rhsr : rhs); }
 
-    R residual_norm(void) { return gmm::vect_norm2(rhs); }
+    R residual_norm(void) { // A norm1 seems to be better than a norm2
+                            // at least for contact problems.
+      if (is_reduced)
+	return gmm::vect_norm1(rhsr)/R(gmm::vect_size(rhsr));
+      else
+	return gmm::vect_norm1(rhs)/R(gmm::vect_size(rhs));
+    }
 
-    R line_search(VECTOR &dr, const gmm::iteration &iter) {
-      gmm::resize(stateinit, md.nb_dof());
-      gmm::copy(state, stateinit);
-      R alpha(1), res;
+    R compute_res(bool comp = true) {
       if (with_pseudo_potential) {
 	compute_pseudo_potential();
-	res = md.pseudo_potential();
+	return md.pseudo_potential();
       } else {
-	res = residual_norm();
+	if (comp) compute_residual();
+	return residual_norm();
       }
+    }
+
 
-      ls.init_search(res, iter.get_iteration());
+    R line_search(VECTOR &dr, const gmm::iteration &iter) {
+      size_type nit = 0;
+      gmm::resize(stateinit, md.nb_dof());
+      gmm::copy(state, stateinit);
+      R alpha(1), res, res_init, R0;
+	  
+      res_init = res = compute_res(false);      
+      // cout << "first residual = " << residual() << endl << endl;
+      R0 = (is_reduced ? gmm::real(gmm::vect_sp(dr, rhsr))
+	               : gmm::real(gmm::vect_sp(dr, rhs)));
+
+      // store the initial residual for the reprojection step.
+//       size_type N = gmm::vect_size(residual());
+//       VECTOR first_rhs(N); gmm::copy(residual(), first_rhs); // à éliminer
+
+
+      // Compute the second derivative at alpha = 0 (value 2*a)
+      // not very effective ... precision problem ?
+      
+//       R EPS = 1e-6;
+//       gmm::add(gmm::sub_vector(stateinit, I), gmm::scaled(dr, EPS),
+//                                               gmm::sub_vector(state, I));
+//       R res2 = compute_res();
+      
+//       R a = (res2 + EPS * res - res) / gmm::sqr(EPS);
+//       R delta = gmm::sqr(res)-R(4)*a*res;
+//       R alpha_bis = R(1);
+//       if (delta > 0) {
+// 	R l1 = (res - sqrt(delta)) / (R(2)*a);
+// 	R l2 = (res - sqrt(delta)) / (R(2)*a);
+// 	if (l1 > 0) alpha_bis = std::min(alpha_bis, l1);
+// 	if (l2 > 0) alpha_bis = std::min(alpha_bis, l2);
+//       }
+//       if (a > 0)
+// 	alpha_bis = std::min(alpha_bis, res / (R(2)*a));
+//       cout << "alpha_bis = " << alpha_bis << endl;
+      
+//       gmm::add(gmm::sub_vector(stateinit, I), gmm::scaled(dr, alpha_bis),
+//                                               gmm::sub_vector(state, I));
+
+//       R res3 = compute_res();
+//       cout << "res3 = " << res3 << endl;
+
+//       cout.precision(16);
+//       cout << "res = " << res << " res2 = " << res2 << endl;
+//       cout << "a = " << (res2 + EPS * res - res) / gmm::sqr(EPS) << endl;
+//       cout << "aa = " << (res2 + EPS * res - res) << endl;
+
+      
+      ls.init_search(res, iter.get_iteration(), R0);
       do {
 	alpha = ls.next_try();
-	gmm::add(stateinit, gmm::scaled(dr, alpha), state);
-	if (alpha < 1E-10) break;
-	if (with_pseudo_potential) {
-	  compute_pseudo_potential();
-	  res = md.pseudo_potential();
-	} else {
-	  compute_residual();
-	  res = residual_norm();
-	}
-      } while (!ls.is_converged(res));
+	gmm::add(gmm::sub_vector(stateinit, I), gmm::scaled(dr, alpha),
+		 gmm::sub_vector(state, I));
+	res = compute_res();
+	// cout << "residual = " << residual() << endl << endl;
+	R0 = (is_reduced ? gmm::real(gmm::vect_sp(dr, rhsr))
+	                 : gmm::real(gmm::vect_sp(dr, rhs)));
+
+	++ nit;
+      } while (!ls.is_converged(res, R0));
 
       if (alpha != ls.converged_value() || with_pseudo_potential) {
 	alpha = ls.converged_value();
-	gmm::add(stateinit, gmm::scaled(dr, alpha), state);
+	gmm::add(gmm::sub_vector(stateinit, I), gmm::scaled(dr, alpha),
+		 gmm::sub_vector(state, I));
 	res = ls.converged_residual();
 	compute_residual();
       }
+
+//     if (1) { // reprojection step ... only for non reduced case ...
+//     GMM_ASSERT1(!is_reduced, "to be done ...");
+// 	// detection des ddls "coupables"
+// 	R mean = R(0);
+// 	for (size_type i = 0; i < N; ++i) mean += gmm::abs(residual()[i]);
+// 	mean /= R(N);
+// 	cout << "mean = " << mean << endl << "selected : ";
+	
+// 	VECTOR new_dr(N);
+// 	size_type Ndof = 0;
+// 	for (size_type i = 0; i < N; ++i)
+// 	  if (gmm::abs(residual()[i])
+// 	      > std::max(gmm::abs(first_rhs[i]), mean) * R(4)) {
+// 	    cout << i << " ";
+// 	    new_dr[i] = dr[i];
+// 	    ++Ndof;
+// 	  }
+// 	cout << endl;
+	
+// 	if (Ndof > 0) {
+
+// 	  R EPS = 1e-8;
+// 	  R THR = 0.8;
+// 	  R mini_alpha = alpha * THR;
+
+// 	  cout << "performing post-correction" << endl;
+// 	  cout << "res = " << res << " res_init = " << res_init << endl;
+	  
+
+// 	  // divided difference
+// 	  gmm::add(gmm::scaled(new_dr, -EPS), state);
+// 	  R res2 = compute_res();
+// 	  cout << "pente = " << (res - res2) / EPS << endl;
+// 	  R beta = (res - res2) / EPS;
+// 	  mini_alpha = (res2 - THR*std::min(res_init, res))/((beta != R(0)) ? beta : R(1));
+
+// 	  cout << "mini_alpha = " << mini_alpha << endl;
+// 	  if (mini_alpha > alpha * THR)
+// 	    mini_alpha = alpha * THR;
+
+// 	  if (mini_alpha > 0) {
+	  
+// 	    gmm::add(gmm::scaled(new_dr, -mini_alpha+EPS), state);
+// 	    R res4 = compute_res(), res3;
+// 	    cout << "res4 = " << res4 << endl;
+// 	    size_type mini_it = 0;
+// 	    do {
+// 	      res3 = res4;
+// 	      mini_alpha /= R(2); mini_it++;
+// 	      gmm::add(gmm::scaled(new_dr, mini_alpha), state);
+// 	      res4 = compute_res();
+// 	      cout << "res4 = " << res4 << endl;
+// 	    } while (res4 < res3 && mini_it <= 6);
+	    
+// 	    if (res4 < res3) { res3 = res4; }
+// 	    else gmm::add(gmm::scaled(new_dr, -mini_alpha), state);
+	    
+// 	    if (res3 > res) { // cancel correction
+// 	      gmm::add(stateinit, gmm::scaled(dr, alpha), state);
+// 	    }
+// 	  }
+// 	  else gmm::add(stateinit, gmm::scaled(dr, alpha), state);
+// 	  res = compute_res();
+// 	}
+//       }
       return alpha;
     }
 
-    model_pb(model &m, gmm::abstract_newton_line_search &ls_, VECTOR &st,
-	     const VECTOR &rhs_, const MATRIX &K_,
+    model_pb(model &m, abstract_newton_line_search &ls_, VECTOR &st,
+	     const VECTOR &rhs_, const MATRIX &K_, bool reduced_,
+	     std::vector<size_type> &sind_,
 	     bool with_pseudo_pot = false)
-      : md(m), ls(ls_), state(st), rhs(rhs_), K(K_),
-	with_pseudo_potential(with_pseudo_pot) {}
+      : md(m), is_reduced(reduced_), sind(sind_), I(sind_), ls(ls_), state(st),
+	rhs(rhs_), K(K_), with_pseudo_potential(with_pseudo_pot) {}
 
   };
 
@@ -121,19 +314,36 @@ namespace getfem {
   template <typename MATRIX, typename VECTOR, typename PLSOLVER>
   void standard_solve(model &md, gmm::iteration &iter,
 		      PLSOLVER lsolver,
-		      gmm::abstract_newton_line_search &ls, const MATRIX &K,
+		      abstract_newton_line_search &ls, const MATRIX &K,
 		      const VECTOR &rhs, bool with_pseudo_potential = false) {
 
     VECTOR state(md.nb_dof());
+    std::vector<size_type> sind;
+    bool is_reduced;
     
     md.from_variables(state); // copy the model variables in the state vector
 
+    is_reduced = md.build_reduced_index(sind);  // sub index of the dof to 
+                              //  be solved in case of disabled variables
+
     if (md.is_linear()) {
       md.assembly(model::BUILD_ALL);
-      (*lsolver)(K, state, rhs, iter);
+      
+      if (is_reduced) {
+	gmm::sub_index I(sind);
+	MATRIX Kr(sind.size(), sind.size());
+	VECTOR rhsr(sind.size()), stater(sind.size());
+	gmm::copy(gmm::sub_matrix(K, I, I), Kr);
+	gmm::copy(gmm::sub_vector(state, I), stater);
+	gmm::copy(gmm::sub_vector(rhs, I), rhsr);
+	(*lsolver)(Kr, stater, rhsr, iter);
+	gmm::copy(stater, gmm::sub_vector(state, I));
+      } else {
+	(*lsolver)(K, state, rhs, iter);
+      }
     }
     else {
-      model_pb<MATRIX, VECTOR> mdpb(md, ls, state, rhs, K,
+      model_pb<MATRIX, VECTOR> mdpb(md, ls, state, rhs, K, is_reduced, sind,
 				    with_pseudo_potential);
       classical_Newton(mdpb, iter, *lsolver);
     }
@@ -143,7 +353,7 @@ namespace getfem {
 
   void standard_solve(model &md, gmm::iteration &iter,
 		      rmodel_plsolver_type lsolver,
-		      gmm::abstract_newton_line_search &ls,
+		      abstract_newton_line_search &ls,
 		      bool with_pseudo_potential) {
     standard_solve(md, iter, lsolver, ls, md.real_tangent_matrix(),
 		   md.real_rhs(), with_pseudo_potential);
@@ -151,7 +361,7 @@ namespace getfem {
 
   void standard_solve(model &md, gmm::iteration &iter,
 		      cmodel_plsolver_type lsolver,
-		      gmm::abstract_newton_line_search &ls,
+		      abstract_newton_line_search &ls,
 		      bool with_pseudo_potential) {
     standard_solve(md, iter, lsolver, ls, md.complex_tangent_matrix(),
 		   md.complex_rhs(), with_pseudo_potential);
@@ -161,20 +371,20 @@ namespace getfem {
   void standard_solve(model &md, gmm::iteration &iter,
 			     rmodel_plsolver_type lsolver,
 		      bool with_pseudo_potential) {
-    gmm::default_newton_line_search ls;
+    default_newton_line_search ls;
     standard_solve(md, iter, lsolver, ls, with_pseudo_potential);
   }
 
   void standard_solve(model &md, gmm::iteration &iter,
 			     cmodel_plsolver_type lsolver,
 		      bool with_pseudo_potential) {
-    gmm::default_newton_line_search ls;
+    default_newton_line_search ls;
     standard_solve(md, iter, lsolver, ls, with_pseudo_potential);
   }
 
   void standard_solve(model &md, gmm::iteration &iter,
 		      bool with_pseudo_potential) {
-    gmm::default_newton_line_search ls;
+    getfem::default_newton_line_search ls;
     if (md.is_complex())
       standard_solve(md, iter, cdefault_linear_solver(md), ls,
 		     with_pseudo_potential);
diff --git a/src/getfem_modeling.cc b/src/getfem_modeling.cc
old mode 100755
new mode 100644
index a403846..49765bb
--- a/src/getfem_modeling.cc
+++ b/src/getfem_modeling.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/getfem_modeling.h"
 
 namespace getfem {
diff --git a/src/getfem_models.cc b/src/getfem_models.cc
index 3dbbaa1..2708039 100644
--- a/src/getfem_models.cc
+++ b/src/getfem_models.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include <iomanip>
 #include "gmm/gmm_range_basis.h"
@@ -25,6 +25,13 @@
 #include "getfem/getfem_models.h"
 #include "getfem/getfem_assembling.h"
 #include "getfem/getfem_derivatives.h"
+#include "getfem/getfem_interpolation.h"
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#include <muParser/muParser.h>
+#elif GETFEM_HAVE_MUPARSER_H
+#include <muParser.h>
+#endif
+
 
 
 namespace getfem {
@@ -40,9 +47,9 @@ namespace getfem {
     v_num_iter.resize(n_iter);
     for (size_type i = 0; i < n_iter; ++i)
       if (is_complex)
-	complex_value[i].resize(s);
+        complex_value[i].resize(s);
       else
-	real_value[i].resize(s);
+        real_value[i].resize(s);
   }
 
   size_type model::var_description::add_temporary(gmm::uint64_type id_num) {
@@ -56,13 +63,13 @@ namespace getfem {
       v_num_iter.resize(nit+1);
       v_num_iter[nit] = 0;
       if (is_complex) {
-	size_type s = complex_value[0].size();
-	complex_value.resize(n_iter + n_temp_iter);
-	complex_value[nit].resize(s);
+        size_type s = complex_value[0].size();
+        complex_value.resize(n_iter + n_temp_iter);
+        complex_value[nit].resize(s);
       } else {
-	size_type s = real_value[0].size();
-	real_value.resize(n_iter + n_temp_iter);
-	real_value[nit].resize(s);
+        size_type s = real_value[0].size();
+        real_value.resize(n_iter + n_temp_iter);
+        real_value[nit].resize(s);
       }
     }
     return nit;
@@ -88,10 +95,10 @@ namespace getfem {
     else {
       if (!isalpha(name[0])) valid = false;
       for (size_type i = 1; i < name.size(); ++i)
-	if (!(isalnum(name[i]) || name[i] == '_')) valid = false;
+        if (!(isalnum(name[i]) || name[i] == '_')) valid = false;
     }
     GMM_ASSERT1(!assert || valid,
-		"Illegal variable name : \"" << name << "\"");
+                "Illegal variable name : \"" << name << "\"");
     return valid;
   }
 
@@ -100,7 +107,7 @@ namespace getfem {
     bool valid = check_name_valitity(res_name, false);
     VAR_SET::const_iterator it = variables.find(res_name);
     GMM_ASSERT1(valid || it != variables.end(),
-		"Illegal variable name : " << name);
+                "Illegal variable name : " << name);
     for (size_type i = 2; it != variables.end(); ++i) {
       std::stringstream m;
       m << name << '_' << i;
@@ -116,177 +123,184 @@ namespace getfem {
     std::map<std::string, bool > tobedone;
 
     for (VAR_SET::iterator it = variables.begin(); it != variables.end();
-	 ++it) {
-      if (it->second.is_fem_dofs && it->second.filter == VDESCRFILTER_INFSUP) {
-	VAR_SET::iterator it2 = variables.find(it->second.filter_var);
-	GMM_ASSERT1(it2 != variables.end(), "The primal variable of the "
-		    "multiplier does not exist");
-	GMM_ASSERT1(it2->second.is_fem_dofs, "The primal variable of the "
-		    "multiplier is not a fem variable");
-	multipliers[it->second.filter_var].push_back(it->first);
-	if (it->second.v_num < it->second.mf->version_number() ||
-	    it->second.v_num < it2->second.mf->version_number())
-	  tobedone[it->second.filter_var] = true;
+         ++it) {
+      if (it->second.is_fem_dofs
+	  && (it->second.filter == VDESCRFILTER_CTERM
+	      || it->second.filter == VDESCRFILTER_INFSUP)) {
+        VAR_SET::iterator it2 = variables.find(it->second.filter_var);
+        GMM_ASSERT1(it2 != variables.end(), "The primal variable of the "
+                    "multiplier does not exist");
+        GMM_ASSERT1(it2->second.is_fem_dofs, "The primal variable of the "
+                    "multiplier is not a fem variable");
+        multipliers[it->second.filter_var].push_back(it->first);
+        if (it->second.v_num < it->second.mf->version_number() ||
+            it->second.v_num < it2->second.mf->version_number())
+          tobedone[it->second.filter_var] = true;
       }
     }
 
     for (VAR_SET::iterator it = variables.begin(); it != variables.end();
-	  ++it) {
+          ++it) {
       if (it->second.is_fem_dofs) {
-	switch (it->second.filter) {
-	case VDESCRFILTER_NO:
-	  if (it->second.v_num < it->second.mf->version_number()) {
-	    size_type s = it->second.mf->nb_dof();
-	    if (!it->second.is_variable) s *= it->second.qdim;
-	    it->second.set_size(s);
-	    it->second.v_num = act_counter();
-	  }
-	  break;
-	case VDESCRFILTER_REGION: 
-	  if (it->second.v_num < it->second.mf->version_number()) {
-	    dal::bit_vector dor
-	      = it->second.mf->dof_on_region(it->second.m_region);
-	    it->second.partial_mf->adapt(dor);
-	    it->second.set_size(it->second.partial_mf->nb_dof());
-	    it->second.v_num = act_counter();
-	  }
-	  break;
-	default : break;
-	}
+        switch (it->second.filter) {
+        case VDESCRFILTER_NO:
+          if (it->second.v_num < it->second.mf->version_number()) {
+            size_type s = it->second.mf->nb_dof();
+            if (!it->second.is_variable) s *= it->second.qdim;
+            it->second.set_size(s);
+            it->second.v_num = act_counter();
+          }
+          break;
+        case VDESCRFILTER_REGION:
+          if (it->second.v_num < it->second.mf->version_number()) {
+            dal::bit_vector dor
+              = it->second.mf->dof_on_region(it->second.m_region);
+            it->second.partial_mf->adapt(dor);
+            it->second.set_size(it->second.partial_mf->nb_dof());
+            it->second.v_num = act_counter();
+          }
+          break;
+        default : break;
+        }
       }
     }
 
     for (std::map<std::string, bool >::iterator itbd = tobedone.begin();
-	 itbd != tobedone.end(); ++itbd) {
+         itbd != tobedone.end(); ++itbd) {
       std::vector<std::string> &mults = multipliers[itbd->first];
       VAR_SET::iterator it2 = variables.find(itbd->first);
 
       gmm::col_matrix< gmm::rsvector<scalar_type> > MGLOB;
       if (mults.size() > 1) {
-	size_type s = 0;
-	for (size_type k = 0; k < mults.size(); ++k) {
-	  VAR_SET::iterator it = variables.find(mults[k]);
-	  s += it->second.mf->nb_dof();
-	}
-	gmm::resize(MGLOB, it2->second.mf->nb_dof(), s);
+        size_type s = 0;
+        for (size_type k = 0; k < mults.size(); ++k) {
+          VAR_SET::iterator it = variables.find(mults[k]);
+          s += it->second.mf->nb_dof();
+        }
+        gmm::resize(MGLOB, it2->second.mf->nb_dof(), s);
       }
 
       size_type s = 0;
       std::set<size_type> glob_columns;
       for (size_type k = 0; k < mults.size(); ++k) {
-	VAR_SET::iterator it = variables.find(mults[k]);
-
-	// This step forces the recomputation of corresponding bricks.
-	// A test to check if a modification is really necessary could
-	// be done first ... (difficult to coordinate with other multipliers)
-	dal::bit_vector alldof; alldof.add(0, it->second.mf->nb_dof());
-	it->second.partial_mf->adapt(alldof);
-	it->second.set_size(it->second.partial_mf->nb_dof());
-
-	// Obtening the coupling matrix between the multipier and
-	// the primal variable. A search is done on all the terms of the
-	// model. The corresponding terms are added. If no term is available
-	// a warning is printed and the variable is cancelled.
-
-	gmm::col_matrix< gmm::rsvector<scalar_type> >
-	  MM(it2->second.mf->nb_dof(), it->second.mf->nb_dof());
-	bool termadded = false;
-
-	for (size_type ib = 0; ib < bricks.size(); ++ib) {
-	  const brick_description &brick = bricks[ib];
-	  bool bupd = false;
-	  bool cplx = is_complex() && brick.pbr->is_complex();
-
-	  for (size_type j = 0; j < brick.tlist.size(); ++j) {
-
-	    const term_description &term = brick.tlist[j];
+        VAR_SET::iterator it = variables.find(mults[k]);
+
+        // This step forces the recomputation of corresponding bricks.
+        // A test to check if a modification is really necessary could
+        // be done first ... (difficult to coordinate with other multipliers)
+        dal::bit_vector alldof; alldof.add(0, it->second.mf->nb_dof());
+        it->second.partial_mf->adapt(alldof);
+        it->second.set_size(it->second.partial_mf->nb_dof());
+
+        // Obtening the coupling matrix between the multipier and
+        // the primal variable. A search is done on all the terms of the
+        // model. Only the the corresponding linear terms are added.
+	// If no linear term is available, a mass matrix is used.
+
+        gmm::col_matrix< gmm::rsvector<scalar_type> >
+          MM(it2->second.mf->nb_dof(), it->second.mf->nb_dof());
+        bool termadded = false;
+
+	if (it->second.filter == VDESCRFILTER_CTERM) {
+
+	  for (size_type ib = 0; ib < bricks.size(); ++ib) {
+	    const brick_description &brick = bricks[ib];
+	    bool bupd = false;
+	    bool cplx = is_complex() && brick.pbr->is_complex();
 	    
-	    if (term.is_matrix_term && !mults[k].compare(term.var1) &&
-		!it2->first.compare(term.var2)) {
-	      if (!bupd) {
-		brick.terms_to_be_computed = true;
-		update_brick(ib, BUILD_MATRIX);
-		bupd = true;
-	      }
-	      if (cplx)
-		gmm::add(gmm::transposed(gmm::real_part(brick.cmatlist[j])),
-			 MM);
-	      else
-		gmm::add(gmm::transposed(brick.rmatlist[j]), MM);
-	      termadded = true;
-
-	    } else if (term.is_matrix_term && !mults[k].compare(term.var2) &&
-			!it2->first.compare(term.var1)) {
-	      if (!bupd) {
-		brick.terms_to_be_computed = true;
-		update_brick(ib, BUILD_MATRIX);
-		bupd = true;
+	    for (size_type j = 0; j < brick.tlist.size(); ++j) {
+	      
+	      const term_description &term = brick.tlist[j];
+	      
+	      if (term.is_matrix_term && !mults[k].compare(term.var1) &&
+		  !it2->first.compare(term.var2)) {
+		if (!bupd) {
+		  brick.terms_to_be_computed = true;
+		  update_brick(ib, BUILD_MATRIX);
+		  bupd = true;
+		}
+		if (cplx)
+		  gmm::add(gmm::transposed(gmm::real_part(brick.cmatlist[j])),
+			   MM);
+		else
+		  gmm::add(gmm::transposed(brick.rmatlist[j]), MM);
+		termadded = true;
+		
+	      } else if (term.is_matrix_term && !mults[k].compare(term.var2) &&
+			 !it2->first.compare(term.var1)) {
+		if (!bupd) {
+		  brick.terms_to_be_computed = true;
+		  update_brick(ib, BUILD_MATRIX);
+		  bupd = true;
+		}
+		if (cplx)
+		  gmm::add(gmm::real_part(brick.cmatlist[j]), MM);
+		else
+		  gmm::add(brick.rmatlist[j], MM);
+		termadded = true;
 	      }
-	      if (cplx)
-		gmm::add(gmm::real_part(brick.cmatlist[j]), MM);
-	      else
-		gmm::add(brick.rmatlist[j], MM);
-	      termadded = true;
 	    }
 	  }
+
+	  if (!termadded) 
+	    GMM_WARNING1("No term found to filter multiplier " << it->first
+			 << ". Variable is cancelled");
+	} else if (it->second.filter == VDESCRFILTER_INFSUP) {
+	  asm_mass_matrix(MM, *(it->second.mim), *(it2->second.mf),
+			  *(it->second.mf), it->second.m_region);
 	}
-	
-	if (!termadded)
-	  GMM_WARNING1("No term present to filter the multiplier " << mults[k]
-		       << ". The multiplier is cancelled.");
-
-	//
-	// filtering
-	//
-	std::set<size_type> columns;
-	gmm::range_basis(MM, columns);
-	if (mults.size() > 1) {
-	  gmm::copy(MM, gmm::sub_matrix
-		    (MGLOB,gmm::sub_interval(0, it2->second.mf->nb_dof()),
-		     gmm::sub_interval(s, it->second.mf->nb_dof())));
-	  for (std::set<size_type>::iterator itt = columns.begin();
-	     itt != columns.end(); ++itt)
-	    glob_columns.insert(s + *itt);
-	  s += it->second.mf->nb_dof();
-	} else {
-	  dal::bit_vector kept;
-	  for (std::set<size_type>::iterator itt = columns.begin();
-	       itt != columns.end(); ++itt)
-	    kept.add(*itt);
-	  it->second.partial_mf->adapt(kept);
-	  it->second.set_size(it->second.partial_mf->nb_dof());
-	  it->second.v_num = act_counter();
-	}
+        //
+        // filtering
+        //
+        std::set<size_type> columns;
+        gmm::range_basis(MM, columns);
+        if (mults.size() > 1) {
+          gmm::copy(MM, gmm::sub_matrix
+                    (MGLOB,gmm::sub_interval(0, it2->second.mf->nb_dof()),
+                     gmm::sub_interval(s, it->second.mf->nb_dof())));
+          for (std::set<size_type>::iterator itt = columns.begin();
+             itt != columns.end(); ++itt)
+            glob_columns.insert(s + *itt);
+          s += it->second.mf->nb_dof();
+        } else {
+          dal::bit_vector kept;
+          for (std::set<size_type>::iterator itt = columns.begin();
+               itt != columns.end(); ++itt)
+            kept.add(*itt);
+          it->second.partial_mf->adapt(kept);
+          it->second.set_size(it->second.partial_mf->nb_dof());
+          it->second.v_num = act_counter();
+        }
       }
 
       if (mults.size() > 1) {
-	range_basis(MGLOB, glob_columns, 1E-12, gmm::col_major(), true);
-
-	s = 0;
-	for (size_type k = 0; k < mults.size(); ++k) {
-	  VAR_SET::iterator it = variables.find(mults[k]);
-	  dal::bit_vector kept;
-	  size_type nbdof = it->second.mf->nb_dof();
-	  for (std::set<size_type>::iterator itt = glob_columns.begin();
-	       itt != glob_columns.end(); ++itt)
-	    if (*itt > s && *itt < s + nbdof) kept.add(*itt-s);
-	  it->second.partial_mf->adapt(kept);
-	  it->second.set_size(it->second.partial_mf->nb_dof());
-	  it->second.v_num = act_counter();
-	  s += it->second.mf->nb_dof();
-	}
+        range_basis(MGLOB, glob_columns, 1E-12, gmm::col_major(), true);
+
+        s = 0;
+        for (size_type k = 0; k < mults.size(); ++k) {
+          VAR_SET::iterator it = variables.find(mults[k]);
+          dal::bit_vector kept;
+          size_type nbdof = it->second.mf->nb_dof();
+          for (std::set<size_type>::iterator itt = glob_columns.begin();
+               itt != glob_columns.end(); ++itt)
+            if (*itt >= s && *itt < s + nbdof) kept.add(*itt-s);
+          it->second.partial_mf->adapt(kept);
+          it->second.set_size(it->second.partial_mf->nb_dof());
+          it->second.v_num = act_counter();
+          s += it->second.mf->nb_dof();
+        }
       }
     }
 
     size_type tot_size = 0;
 
     for (VAR_SET::iterator it = variables.begin(); it != variables.end();
-	 ++it)
+         ++it)
       if (it->second.is_variable) {
-	it->second.I = gmm::sub_interval(tot_size, it->second.size());
-	tot_size += it->second.size();
+        it->second.I = gmm::sub_interval(tot_size, it->second.size());
+        tot_size += it->second.size();
       }
-      
+
     if (complex_version) {
       gmm::resize(cTM, tot_size, tot_size);
       gmm::resize(crhs, tot_size);
@@ -296,7 +310,7 @@ namespace getfem {
       gmm::resize(rrhs, tot_size);
     }
   }
-   
+
 
   void model::listvar(std::ostream &ost) const {
     if (variables.size() == 0)
@@ -304,28 +318,29 @@ namespace getfem {
     else {
       ost << "List of model variables and data:" << endl;
       for (VAR_SET::const_iterator it = variables.begin();
-	   it != variables.end(); ++it) {
-	if (it->second.is_variable) ost << "Variable ";
-	else ost << "Data     ";
-	ost << std::setw(20) << std::left << it->first;
-	if (it->second.n_iter == 1)
-	  ost << " 1 copy   ";
-	else 
-	  ost << std::setw(2) << std::right << it->second.n_iter
-	      << " copies ";
-	if (it->second.is_fem_dofs) ost << "fem dependant ";
-	else ost << "constant size ";
-	size_type d = sizeof(scalar_type);
-	if (is_complex()) d *= 2;
-	ost << std::setw(8) << std::right << it->second.size() * d
-	    << " bytes.";
+           it != variables.end(); ++it) {
+        if (it->second.is_variable) ost << "Variable ";
+        else ost << "Data     ";
+        ost << std::setw(20) << std::left << it->first;
+        if (it->second.n_iter == 1)
+          ost << " 1 copy   ";
+        else
+          ost << std::setw(2) << std::right << it->second.n_iter
+              << " copies ";
+        if (it->second.is_fem_dofs) ost << "fem dependant ";
+        else ost << "constant size ";
+        size_type si = it->second.size();
+        ost << std::setw(8) << std::right << si;
+        if (is_complex()) ost << " complex";
+        ost << " double" << ((si > 1) ? "s." : ".");
+	if (it->second.is_disabled) ost << "\t (disabled)";
 	ost << endl;
       }
     }
   }
 
   void model::add_fixed_size_variable(const std::string &name, size_type size,
-				      size_type niter) {
+                                      size_type niter) {
     check_name_valitity(name);
     variables[name] = var_description(true, is_complex(), false, niter);
     act_size_to_be_done = true;
@@ -333,67 +348,90 @@ namespace getfem {
   }
 
   void model::resize_fixed_size_variable(const std::string &name,
-					 size_type size) {
+                                         size_type size) {
     GMM_ASSERT1(!(variables[name].is_fem_dofs), "Cannot explicitely resize "
-		" a fem variable or data");
+                " a fem variable or data");
     variables[name].set_size(size);
   }
- 
-    void resize_fixed_size_variable(const std::string &name, size_type size);
 
-  
+  void resize_fixed_size_variable(const std::string &name, size_type size);
+
+
   void model::add_fixed_size_data(const std::string &name, size_type size,
-				      size_type niter) {
+                                      size_type niter) {
     check_name_valitity(name);
     variables[name] = var_description(false, is_complex(), false, niter);
     variables[name].set_size(size);
   }
 
   void model::add_fem_variable(const std::string &name, const mesh_fem &mf,
-			       size_type niter) {
+                               size_type niter) {
     check_name_valitity(name);
     variables[name] = var_description(true, is_complex(), true, niter,
-				      VDESCRFILTER_NO, &mf);
+                                      VDESCRFILTER_NO, &mf);
     variables[name].set_size(mf.nb_dof());
     add_dependency(mf);
     act_size_to_be_done = true;
     leading_dim = std::max(leading_dim, mf.linked_mesh().dim());
   }
-  
+
+  void model::add_filtered_fem_variable(const std::string &name,
+					const mesh_fem &mf,
+					size_type region, size_type niter) {
+    check_name_valitity(name);
+    variables[name] = var_description(true, is_complex(), true, niter,
+                                      VDESCRFILTER_REGION, &mf, region);
+    variables[name].set_size(mf.nb_dof());
+    act_size_to_be_done = true;
+    add_dependency(mf);
+  }
+
   void model::add_fem_data(const std::string &name, const mesh_fem &mf,
-			       dim_type qdim, size_type niter) {
+                               dim_type qdim, size_type niter) {
     check_name_valitity(name);
     variables[name] = var_description(false, is_complex(), true, niter,
-				      VDESCRFILTER_NO, &mf, 0, qdim);
+                                      VDESCRFILTER_NO, &mf, 0, qdim);
     variables[name].set_size(mf.nb_dof()*qdim);
-    add_dependency(mf); 
+    add_dependency(mf);
+  }
+
+  void model::add_multiplier(const std::string &name, const mesh_fem &mf,
+                             const std::string &primal_name,
+                             size_type niter) {
+    check_name_valitity(name);
+    variables[name] = var_description(true, is_complex(), true, niter,
+                                      VDESCRFILTER_CTERM, &mf, 0,
+                                      1, primal_name);
+    variables[name].set_size(mf.nb_dof());
+    act_size_to_be_done = true;
+    add_dependency(mf);
   }
 
   void model::add_multiplier(const std::string &name, const mesh_fem &mf,
-			     const std::string &primal_name,
-			     size_type niter) {
+                             const std::string &primal_name,const mesh_im &mim,
+			     size_type region, size_type niter) {
     check_name_valitity(name);
     variables[name] = var_description(true, is_complex(), true, niter,
-				      VDESCRFILTER_INFSUP, &mf, 0,
-				      1, primal_name);
+                                      VDESCRFILTER_INFSUP, &mf, region,
+                                      1, primal_name, &mim);
     variables[name].set_size(mf.nb_dof());
     act_size_to_be_done = true;
     add_dependency(mf);
   }
 
   size_type model::add_brick(pbrick pbr, const varnamelist &varnames,
-			     const varnamelist &datanames,
-			     const termlist &terms,
-			     const mimlist &mims, size_type region) {
+                             const varnamelist &datanames,
+                             const termlist &terms,
+                             const mimlist &mims, size_type region) {
     bricks.push_back(brick_description(pbr, varnames, datanames, terms,
-				       mims, region));
+                                       mims, region));
     size_type ib = bricks.size() - 1;
     active_bricks.add(ib);
     for  (size_type i = 0; i < bricks.back().mims.size(); ++i)
       add_dependency(*(bricks.back().mims[i]));
 
     GMM_ASSERT1(pbr->is_real() || is_complex(),
-		"Impossible to add a complex brick to a real model");
+                "Impossible to add a complex brick to a real model");
     if (is_complex() && pbr->is_complex()) {
       bricks.back().cmatlist.resize(terms.size());
       bricks.back().cveclist[0].resize(terms.size());
@@ -409,18 +447,49 @@ namespace getfem {
 
     for (size_type i=0; i < varnames.size(); ++i)
       GMM_ASSERT1(variables.find(varnames[i]) != variables.end(),
-		  "Undefined model variable " << varnames[i]);
+                  "Undefined model variable " << varnames[i]);
     for (size_type i=0; i < datanames.size(); ++i)
       GMM_ASSERT1(variables.find(datanames[i]) != variables.end(),
-		  "Undefined model data or variable " << datanames[i]);
-    
+                  "Undefined model data or variable " << datanames[i]);
+
     return ib;
   }
 
+  void model::add_mim_to_brick(size_type ib, const mesh_im &mim) {
+    GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
+    touch_brick(ib);
+    bricks[ib].mims.push_back(&mim);
+    add_dependency(mim);
+  }
+
+  void model::change_terms_of_brick(size_type ib, const termlist &terms) {
+    GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
+    touch_brick(ib);
+    bricks[ib].tlist = terms;
+    if (is_complex() && bricks[ib].pbr->is_complex()) {
+      bricks.back().cmatlist.resize(terms.size());
+      bricks.back().cveclist[0].resize(terms.size());
+      bricks.back().cveclist_sym[0].resize(terms.size());
+    } else {
+      bricks.back().rmatlist.resize(terms.size());
+      bricks.back().rveclist[0].resize(terms.size());
+      bricks.back().rveclist_sym[0].resize(terms.size());
+    }
+  }
+
+  void model::change_variables_of_brick(size_type ib, const varnamelist &vl) {
+    GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
+    touch_brick(ib);
+    bricks[ib].vlist = vl;
+    for (size_type i=0; i < vl.size(); ++i)
+      GMM_ASSERT1(variables.find(vl[i]) != variables.end(),
+                  "Undefined model variable " << vl[i]);
+  }
+
 
   void model::add_time_dispatcher(size_type ibrick, pdispatcher pdispatch) {
-        
-    GMM_ASSERT1(ibrick < bricks.size(), "Unexistent brick");
+
+    GMM_ASSERT1(ibrick < bricks.size(), "Inexistent brick");
 
     pbrick pbr = bricks[ibrick].pbr;
 
@@ -430,20 +499,20 @@ namespace getfem {
       = std::max(size_type(1), pdispatch->nbrhs());
 
     gmm::resize(bricks[ibrick].coeffs, nbrhs);
-    
+
     if (is_complex() && pbr->is_complex()) {
       bricks[ibrick].cveclist.resize(nbrhs);
       bricks[ibrick].cveclist_sym.resize(nbrhs);
       for (size_type k = 1; k < nbrhs; ++k) {
-	bricks[ibrick].cveclist[k] = bricks[ibrick].cveclist[0];
-	bricks[ibrick].cveclist_sym[k] = bricks[ibrick].cveclist_sym[0];
+        bricks[ibrick].cveclist[k] = bricks[ibrick].cveclist[0];
+        bricks[ibrick].cveclist_sym[k] = bricks[ibrick].cveclist_sym[0];
       }
     } else {
       bricks[ibrick].rveclist.resize(nbrhs);
       bricks[ibrick].rveclist_sym.resize(nbrhs);
       for (size_type k = 1; k < nbrhs; ++k) {
-	bricks[ibrick].rveclist[k] = bricks[ibrick].rveclist[0];
-	bricks[ibrick].rveclist_sym[k] = bricks[ibrick].rveclist_sym[0];
+        bricks[ibrick].rveclist[k] = bricks[ibrick].rveclist[0];
+        bricks[ibrick].rveclist_sym[k] = bricks[ibrick].rveclist_sym[0];
       }
     }
   }
@@ -451,18 +520,18 @@ namespace getfem {
 
 
   const std::string &model::varname_of_brick(size_type ind_brick,
-				      size_type ind_var) {
-    GMM_ASSERT1(ind_brick < bricks.size(), "Unexistent brick");
+                                      size_type ind_var) {
+    GMM_ASSERT1(ind_brick < bricks.size(), "Inexistent brick");
     GMM_ASSERT1(ind_var < bricks[ind_brick].vlist.size(),
-	       "Inexistent brick variable");
+               "Inexistent brick variable");
     return bricks[ind_brick].vlist[ind_var];
   }
-  
+
   const std::string &model::dataname_of_brick(size_type ind_brick,
-					      size_type ind_data) {
-    GMM_ASSERT1(ind_brick < bricks.size(), "Unexistent brick");
+                                              size_type ind_data) {
+    GMM_ASSERT1(ind_brick < bricks.size(), "Inexistent brick");
     GMM_ASSERT1(ind_data < bricks[ind_brick].dlist.size(),
-		"Inexistent brick data");
+                "Inexistent brick data");
     return bricks[ind_brick].dlist[ind_data];
   }
 
@@ -472,19 +541,19 @@ namespace getfem {
     else {
       ost << "List of model bricks:" << endl;
       for (size_type i = 0; i < bricks.size(); ++i) {
-	ost << "Brick " << std::setw(3) << std::right << i + base_id
-	    << " " << std::setw(20) << std::right
-	    << bricks[i].pbr->brick_name();
-	if (!(active_bricks[i])) ost << " (desactivated)";
-	if (bricks[i].pdispatch) ost << " (dispatched)";	
-	ost << endl << "  concerned variables: " << bricks[i].vlist[0];
-	for (size_type j = 1; j < bricks[i].vlist.size(); ++j)
-	  ost << ", " << bricks[i].vlist[j];
-	ost << "." << endl;
-	ost << "  brick with " << bricks[i].tlist.size() << " term";
-	if (bricks[i].tlist.size() > 1) ost << "s";
-	ost << endl;
-	// + lister les termes
+        ost << "Brick " << std::setw(3) << std::right << i + base_id
+            << " " << std::setw(20) << std::right
+            << bricks[i].pbr->brick_name();
+        if (!(active_bricks[i])) ost << " (desactivated)";
+        if (bricks[i].pdispatch) ost << " (dispatched)";
+        ost << endl << "  concerned variables: " << bricks[i].vlist[0];
+        for (size_type j = 1; j < bricks[i].vlist.size(); ++j)
+          ost << ", " << bricks[i].vlist[j];
+        ost << "." << endl;
+        ost << "  brick with " << bricks[i].tlist.size() << " term";
+        if (bricks[i].tlist.size() > 1) ost << "s";
+        ost << endl;
+        // + lister les termes
       }
     }
   }
@@ -492,87 +561,87 @@ namespace getfem {
   // before call to asm_real_tangent_terms or asm_complex_tangent_terms
   // from the assembly procedure or a time dispatcher
   void model::brick_init(size_type ib, build_version version,
-			 size_type rhs_ind) const {
+                         size_type rhs_ind) const {
     const brick_description &brick = bricks[ib];
     bool cplx = is_complex() && brick.pbr->is_complex();
-    
+
     // Initialization of vector and matrices.
     for (size_type j = 0; j < brick.tlist.size(); ++j) {
       const term_description &term = brick.tlist[j];
       size_type nbd1 = variables[term.var1].size();
       size_type nbd2 = term.is_matrix_term ?
-	variables[term.var2].size() : 0;
+        variables[term.var2].size() : 0;
       if (term.is_matrix_term &&
-	  (brick.pbr->is_linear() || (version | BUILD_MATRIX))) {
-	if (version | BUILD_ON_DATA_CHANGE) {
-	  if (cplx)
-	    gmm::resize(brick.cmatlist[j], nbd1, nbd2);
-	  else
-	    gmm::resize(brick.rmatlist[j], nbd1, nbd2);
-	} else {
-	  if (cplx)
-	    brick.cmatlist[j] = model_complex_sparse_matrix(nbd1, nbd2);
-	  else
-	    brick.rmatlist[j] = model_real_sparse_matrix(nbd1, nbd2);
-	}
+          (brick.pbr->is_linear() || (version | BUILD_MATRIX))) {
+        if (version | BUILD_ON_DATA_CHANGE) {
+          if (cplx)
+            gmm::resize(brick.cmatlist[j], nbd1, nbd2);
+          else
+            gmm::resize(brick.rmatlist[j], nbd1, nbd2);
+        } else {
+          if (cplx)
+            brick.cmatlist[j] = model_complex_sparse_matrix(nbd1, nbd2);
+          else
+            brick.rmatlist[j] = model_real_sparse_matrix(nbd1, nbd2);
+        }
       }
       if (brick.pbr->is_linear() || (version | BUILD_RHS)) {
-	for (size_type k = 0; k < brick.nbrhs; ++k) {
-	  if (cplx) {
-	    if (k == rhs_ind) gmm::clear(brick.cveclist[k][j]);
-	    gmm::resize(brick.cveclist[k][j], nbd1);
-	    if (term.is_symmetric && term.var1.compare(term.var2)) {
-	      if (k == rhs_ind) gmm::clear(brick.cveclist_sym[k][j]);
-	      gmm::resize(brick.cveclist_sym[k][j], nbd2);
-	    }
-	  } else {
-	    if (k == rhs_ind) gmm::clear(brick.rveclist[k][j]);
-	    gmm::resize(brick.rveclist[k][j], nbd1);
-	    if (term.is_symmetric && term.var1.compare(term.var2)) {
-	      if (k == rhs_ind) gmm::clear(brick.rveclist_sym[k][j]);
-	      gmm::resize(brick.rveclist_sym[k][j], nbd2);
-	    }
-	  }
-	}
+        for (size_type k = 0; k < brick.nbrhs; ++k) {
+          if (cplx) {
+            if (k == rhs_ind) gmm::clear(brick.cveclist[k][j]);
+            gmm::resize(brick.cveclist[k][j], nbd1);
+            if (term.is_symmetric && term.var1.compare(term.var2)) {
+              if (k == rhs_ind) gmm::clear(brick.cveclist_sym[k][j]);
+              gmm::resize(brick.cveclist_sym[k][j], nbd2);
+            }
+          } else {
+            if (k == rhs_ind) gmm::clear(brick.rveclist[k][j]);
+            gmm::resize(brick.rveclist[k][j], nbd1);
+            if (term.is_symmetric && term.var1.compare(term.var2)) {
+              if (k == rhs_ind) gmm::clear(brick.rveclist_sym[k][j]);
+              gmm::resize(brick.rveclist_sym[k][j], nbd2);
+            }
+          }
+        }
       }
     }
   }
 
 
   void model::brick_call(size_type ib, build_version version,
-			 size_type rhs_ind) const {
+                         size_type rhs_ind) const {
     const brick_description &brick = bricks[ib];
     bool cplx = is_complex() && brick.pbr->is_complex();
-    
+
     brick_init(ib, version, rhs_ind);
 
     if (cplx)
       brick.pbr->asm_complex_tangent_terms(*this, ib, brick.vlist, brick.dlist,
-					   brick.mims,
-					   brick.cmatlist,
-					   brick.cveclist[rhs_ind],
-					   brick.cveclist_sym[rhs_ind],
-					   brick.region, version);
+                                           brick.mims,
+                                           brick.cmatlist,
+                                           brick.cveclist[rhs_ind],
+                                           brick.cveclist_sym[rhs_ind],
+                                           brick.region, version);
     else
       brick.pbr->asm_real_tangent_terms(*this, ib, brick.vlist, brick.dlist,
-					brick.mims,
-					brick.rmatlist,
-					brick.rveclist[rhs_ind],
-					brick.rveclist_sym[rhs_ind],
-					brick.region, version);
+                                        brick.mims,
+                                        brick.rmatlist,
+                                        brick.rveclist[rhs_ind],
+                                        brick.rveclist_sym[rhs_ind],
+                                        brick.region, version);
   }
 
   void model::set_dispatch_coeff(void) {
     for (dal::bv_visitor ib(active_bricks); !ib.finished(); ++ib) {
       brick_description &brick = bricks[ib];
-      if (brick.pdispatch) 
-	brick.pdispatch->set_dispatch_coeff(*this, ib);
+      if (brick.pdispatch)
+        brick.pdispatch->set_dispatch_coeff(*this, ib);
 
     }
   }
 
   void model::first_iter(void) {
-    
+
     for (VAR_SET::iterator it = variables.begin(); it != variables.end(); ++it)
       it->second.clear_temporaries();
 
@@ -582,19 +651,19 @@ namespace getfem {
       brick_description &brick = bricks[ib];
       bool cplx = is_complex() && brick.pbr->is_complex();
       if (brick.pdispatch) {
-	if (cplx)
-	  brick.pdispatch->next_complex_iter(*this, ib, brick.vlist,
-					     brick.dlist,
-					     brick.cmatlist, brick.cveclist,
-					     brick.cveclist_sym, true);
-	else
-	  brick.pdispatch->next_real_iter(*this, ib, brick.vlist, brick.dlist,
-					     brick.rmatlist, brick.rveclist,
-					     brick.rveclist_sym, true);
+        if (cplx)
+          brick.pdispatch->next_complex_iter(*this, ib, brick.vlist,
+                                             brick.dlist,
+                                             brick.cmatlist, brick.cveclist,
+                                             brick.cveclist_sym, true);
+        else
+          brick.pdispatch->next_real_iter(*this, ib, brick.vlist, brick.dlist,
+                                             brick.rmatlist, brick.rveclist,
+                                             brick.rveclist_sym, true);
       }
     }
   }
-  
+
   void model::next_iter(void) {
     set_dispatch_coeff();
 
@@ -602,59 +671,59 @@ namespace getfem {
       brick_description &brick = bricks[ib];
       bool cplx = is_complex() && brick.pbr->is_complex();
       if (brick.pdispatch) {
-	if (cplx)
-	  brick.pdispatch->next_complex_iter(*this, ib, brick.vlist,
-					     brick.dlist,
-					     brick.cmatlist, brick.cveclist,
-					     brick.cveclist_sym, false);
-	else
-	  brick.pdispatch->next_real_iter(*this, ib, brick.vlist, brick.dlist,
-					  brick.rmatlist, brick.rveclist,
-					  brick.rveclist_sym, false);
+        if (cplx)
+          brick.pdispatch->next_complex_iter(*this, ib, brick.vlist,
+                                             brick.dlist,
+                                             brick.cmatlist, brick.cveclist,
+                                             brick.cveclist_sym, false);
+        else
+          brick.pdispatch->next_real_iter(*this, ib, brick.vlist, brick.dlist,
+                                          brick.rmatlist, brick.rveclist,
+                                          brick.rveclist_sym, false);
       }
     }
-    
+
     for (VAR_SET::iterator it = variables.begin(); it != variables.end();
-	 ++it) {
+         ++it) {
       for (size_type i = 1; i < it->second.n_iter; ++i) {
-	if (is_complex())
-	  gmm::copy(it->second.complex_value[i-1],
-		    it->second.complex_value[i]);
-	else
-	  gmm::copy(it->second.real_value[i-1],
-		    it->second.real_value[i]);
+        if (is_complex())
+          gmm::copy(it->second.complex_value[i-1],
+                    it->second.complex_value[i]);
+        else
+          gmm::copy(it->second.real_value[i-1],
+                    it->second.real_value[i]);
       }
-      if (it->second.n_iter > 1) it->second.v_num_data = act_counter();	
+      if (it->second.n_iter > 1) it->second.v_num_data = act_counter();
     }
   }
 
   bool model::is_var_newer_than_brick(const std::string &varname,
-				      size_type ib) const {
+                                      size_type ib) const {
     const brick_description &brick = bricks[ib];
     var_description &vd = variables[varname];
     return (vd.v_num > brick.v_num || vd.v_num_data > brick.v_num);
   }
 
   bool model::is_var_mf_newer_than_brick(const std::string &varname,
-				      size_type ib) const {
+                                      size_type ib) const {
     const brick_description &brick = bricks[ib];
     var_description &vd = variables[varname];
     return (vd.v_num > brick.v_num);
   }
 
   void model::add_temporaries(const varnamelist &vl,
-			      gmm::uint64_type id_num) const {
+                              gmm::uint64_type id_num) const {
     for (size_type i = 0; i < vl.size(); ++i) {
       var_description &vd = variables[vl[i]];
-      if (vd.n_iter > 1) { 
-	vd.add_temporary(id_num);
+      if (vd.n_iter > 1) {
+        vd.add_temporary(id_num);
       }
     }
   }
 
   bool model::temporary_uptodate(const std::string &varname,
-				 gmm::uint64_type  id_num,
-				 size_type &ind) const {
+                                 gmm::uint64_type  id_num,
+                                 size_type &ind) const {
     var_description &vd = variables[varname];
     ind = vd.n_iter;
     for (; ind < vd.n_iter + vd.n_temp_iter ; ++ind) {
@@ -662,8 +731,8 @@ namespace getfem {
     }
     if (ind <  vd.n_iter + vd.n_temp_iter) {
       if (vd.v_num_iter[ind] <= vd.v_num_data) {
-	vd.v_num_iter[ind] = act_counter();
-	return false;
+        vd.v_num_iter[ind] = act_counter();
+        return false;
       }
       return true;
     }
@@ -672,11 +741,11 @@ namespace getfem {
   }
 
   void model::set_default_iter_of_variable(const std::string &varname,
-				    size_type ind) const {
+                                    size_type ind) const {
     if (ind != size_type(-1)) {
       var_description &vd = variables[varname];
       GMM_ASSERT1(ind < vd.n_iter + vd.n_temp_iter,
-		  "Unexistent iteration " << ind);
+                  "Inexistent iteration " << ind);
       vd.default_iter = ind;
     }
   }
@@ -689,7 +758,7 @@ namespace getfem {
   const model_real_sparse_matrix &model::linear_real_matrix_term
   (size_type ib, size_type iterm) {
     GMM_ASSERT1(bricks[ib].tlist[iterm].is_matrix_term,
-		"Not a matrix term !");
+                "Not a matrix term !");
     GMM_ASSERT1(bricks[ib].pbr->is_linear(), "Nonlinear term !");
     return bricks[ib].rmatlist[iterm];
   }
@@ -697,7 +766,7 @@ namespace getfem {
   const model_complex_sparse_matrix &model::linear_complex_matrix_term
   (size_type ib, size_type iterm) {
     GMM_ASSERT1(bricks[ib].tlist[iterm].is_matrix_term,
-		"Not a matrix term !");
+                "Not a matrix term !");
     GMM_ASSERT1(bricks[ib].pbr->is_linear(), "Nonlinear term !");
     return bricks[ib].cmatlist[iterm];
   }
@@ -707,92 +776,109 @@ namespace getfem {
     const brick_description &brick = bricks[ib];
     bool cplx = is_complex() && brick.pbr->is_complex();
     bool tobecomputed = brick.terms_to_be_computed
+      || brick.pbr->is_to_be_computed_each_time()
       || !(brick.pbr->is_linear());
-    
-    // check variable list to test if a mesh_fem as changed. 
+
+    // check variable list to test if a mesh_fem as changed.
     for (size_type i = 0; i < brick.vlist.size() && !tobecomputed; ++i) {
       var_description &vd = variables[brick.vlist[i]];
       if (vd.v_num > brick.v_num) tobecomputed = true;
     }
-    
-    // check data list to test if a vector value of a data has changed. 
+
+    // check data list to test if a vector value of a data has changed.
     for (size_type i = 0; i < brick.dlist.size() && !tobecomputed; ++i) {
       var_description &vd = variables[brick.dlist[i]];
       if (vd.v_num > brick.v_num || vd.v_num_data > brick.v_num) {
-	tobecomputed = true;
-	version = build_version(version | BUILD_ON_DATA_CHANGE);
+        tobecomputed = true;
+        version = build_version(version | BUILD_ON_DATA_CHANGE);
       }
     }
 
     if (tobecomputed) {
-      
+
       if (!(brick.pdispatch))
-	{ brick_call(ib, version, 0); }
+        { brick_call(ib, version, 0); }
       else {
-	if (cplx) 
-	  brick.pdispatch->asm_complex_tangent_terms
-	    (*this, ib, brick.cmatlist, brick.cveclist, brick.cveclist_sym,
-	     version);
-	else
-	  brick.pdispatch->asm_real_tangent_terms
-	    (*this, ib, brick.rmatlist, brick.rveclist, brick.rveclist_sym,
-	     version);
+        if (cplx)
+          brick.pdispatch->asm_complex_tangent_terms
+            (*this, ib, brick.cmatlist, brick.cveclist, brick.cveclist_sym,
+             version);
+        else
+          brick.pdispatch->asm_real_tangent_terms
+            (*this, ib, brick.rmatlist, brick.rveclist, brick.rveclist_sym,
+             version);
       }
       brick.v_num = act_counter();
     }
-    
+
     if (brick.pbr->is_linear()) brick.terms_to_be_computed = false;
   }
-  
-    
+
+
 
   void model::linear_brick_add_to_rhs(size_type ib, size_type ind_data,
-				      size_type n_iter) const {
+                                      size_type n_iter) const {
     const brick_description &brick = bricks[ib];
     if (brick.pbr->is_linear()) {
 
       bool cplx = is_complex() && brick.pbr->is_complex();
-      
+
       for (size_type j = 0; j < brick.tlist.size(); ++j) {
-	const term_description &term = brick.tlist[j];
+        const term_description &term = brick.tlist[j];
+
+        size_type n_iter_1 = n_iter, n_iter_2 = n_iter;
+        if (n_iter == size_type(-1)) {
+          n_iter_1 = variables[term.var1].default_iter;
+          if (term.is_matrix_term)
+            n_iter_2 = variables[term.var2].default_iter;
+        }
+
+        if (term.is_matrix_term) {
+          if (cplx)
+            gmm::mult_add
+              (brick.cmatlist[j],
+               gmm::scaled(variables[term.var2].complex_value[n_iter_2],
+                           std::complex<scalar_type>(-1)),
+               brick.cveclist[ind_data][j]);
+          else
+            gmm::mult_add
+              (brick.rmatlist[j],
+               gmm::scaled(variables[term.var2].real_value[n_iter_2],
+                           scalar_type(-1)), brick.rveclist[ind_data][j]);
+
+          if (term.is_symmetric && term.var1.compare(term.var2)) {
+            if (cplx)
+              gmm::mult_add
+                (gmm::conjugated(brick.cmatlist[j]),
+                 gmm::scaled(variables[term.var1].complex_value[n_iter_1],
+                             std::complex<scalar_type>(-1)),
+                 brick.cveclist_sym[ind_data][j]);
+            else
+              gmm::mult_add
+                (gmm::transposed(brick.rmatlist[j]),
+                 gmm::scaled(variables[term.var1].real_value[n_iter_1],
+                             scalar_type(-1)),
+                 brick.rveclist_sym[ind_data][j]);
+          }
+        }
+      }
+    }
+  }
 
-	size_type n_iter_1 = n_iter, n_iter_2 = n_iter;
-	if (n_iter == size_type(-1)) {
-	  n_iter_1 = variables[term.var1].default_iter;
-	  if (term.is_matrix_term)
-	    n_iter_2 = variables[term.var2].default_iter;
-	}
-	
-	if (term.is_matrix_term) {
-	  if (cplx) 
-	    gmm::mult_add
-	      (brick.cmatlist[j], 
-	       gmm::scaled(variables[term.var2].complex_value[n_iter_2],
-			   std::complex<scalar_type>(-1)),
-	       brick.cveclist[ind_data][j]);
-	  else
-	    gmm::mult_add
-	      (brick.rmatlist[j],
-	       gmm::scaled(variables[term.var2].real_value[n_iter_2],
-			   scalar_type(-1)), brick.rveclist[ind_data][j]);
-	  
-	  if (term.is_symmetric && term.var1.compare(term.var2)) {
-	    if (cplx) 
-	      gmm::mult_add
-		(gmm::conjugated(brick.cmatlist[j]),
-		 gmm::scaled(variables[term.var1].complex_value[n_iter_1],
-			     std::complex<scalar_type>(-1)),
-		 brick.cveclist_sym[ind_data][j]);
-	    else
-	      gmm::mult_add
-		(gmm::transposed(brick.rmatlist[j]),
-		 gmm::scaled(variables[term.var1].real_value[n_iter_1],
-			     scalar_type(-1)),
-		 brick.rveclist_sym[ind_data][j]);
-	  }
+
+  bool model::build_reduced_index(std::vector<size_type> &ind) {
+    ind.resize(0);
+    bool reduced = false;
+    for (VAR_SET::iterator it = variables.begin(); it != variables.end(); ++it)
+      if (it->second.is_variable) {
+	if  (it->second.is_disabled)
+	  reduced = true;
+	else {
+	  for (size_type i=it->second.I.first(); i < it->second.I.last(); ++i)
+	    ind.push_back(i);
 	}
       }
-    }
+    return reduced;
   }
 
 
@@ -813,185 +899,192 @@ namespace getfem {
     for (dal::bv_visitor ib(active_bricks); !ib.finished(); ++ib) {
 
       brick_description &brick = bricks[ib];
+      
+      // Disables the brick if all its variables are disabled.
+      bool auto_disabled_brick = true;
+      for (size_type j = 0; j < brick.vlist.size(); ++j) {
+	if (!(variables[brick.vlist[j]].is_disabled))
+	  auto_disabled_brick = false;
+      }
+      if (auto_disabled_brick) continue;
+
       update_brick(ib, version);
 
       bool cplx = is_complex() && brick.pbr->is_complex();
-      
+
       scalar_type coeff0 = scalar_type(1);
       if (brick.pdispatch) coeff0 = brick.matrix_coeff;
 
       if (version & BUILD_PSEUDO_POTENTIAL) {
 
-	scalar_type pseudop = scalar_type(0);
-	if (cplx)
-	  pseudop = brick.pbr->asm_complex_pseudo_potential
-	    (*this, ib, brick.vlist, brick.dlist, brick.mims, brick.cmatlist,
-	     brick.cveclist[0], brick.cveclist_sym[0], brick.region);
-	else
-	  pseudop = brick.pbr->asm_real_pseudo_potential
-	    (*this, ib, brick.vlist, brick.dlist, brick.mims, brick.rmatlist,
-	     brick.rveclist[0], brick.rveclist_sym[0], brick.region);
-	
-	pseudo_potential_ += pseudop * coeff0;
+        scalar_type pseudop = scalar_type(0);
+        if (cplx)
+          pseudop = brick.pbr->asm_complex_pseudo_potential
+            (*this, ib, brick.vlist, brick.dlist, brick.mims, brick.cmatlist,
+             brick.cveclist[0], brick.cveclist_sym[0], brick.region);
+        else
+          pseudop = brick.pbr->asm_real_pseudo_potential
+            (*this, ib, brick.vlist, brick.dlist, brick.mims, brick.rmatlist,
+             brick.rveclist[0], brick.rveclist_sym[0], brick.region);
 
-	GMM_ASSERT1(!(brick.pdispatch),
-		    "Pseudo potential not supported by brick dispatcher, sorry");
+        pseudo_potential_ += pseudop * coeff0;
+
+        GMM_ASSERT1(!(brick.pdispatch),
+                    "Pseudo potential not supported by brick dispatcher, sorry");
 
       }
 
       // Assembly of terms
-      
-      for (size_type j = 0; j < brick.tlist.size(); ++j) {
-	term_description &term = brick.tlist[j];
-	gmm::sub_interval I1 = variables[term.var1].I;
-	gmm::sub_interval I2(0,0);
-	if (term.is_matrix_term) I2 = variables[term.var2].I;
-
-	
-	
 
-	if (cplx) {
-	  if (term.is_matrix_term && (version & BUILD_MATRIX)) {
-	    gmm::add(gmm::scaled(brick.cmatlist[j], coeff0),
-		     gmm::sub_matrix(cTM, I1, I2));
-	    if (term.is_symmetric && I1.first() != I2.first()) {
-	      gmm::add(gmm::scaled(gmm::transposed(brick.cmatlist[j]), coeff0),
-		       gmm::sub_matrix(cTM, I2, I1));
-	    }
-	  }
-	  if (version & BUILD_RHS) {
-	    if (brick.pdispatch) {
-	      for (size_type k = 0; k < brick.nbrhs; ++k)
-		gmm::add(gmm::scaled(brick.cveclist[k][j],
-				     brick.coeffs[k]),
-			 gmm::sub_vector(crhs, I1));
-	    }
-	    else
-	      gmm::add(brick.cveclist[0][j], gmm::sub_vector(crhs, I1));
-	    if (term.is_matrix_term && brick.pbr->is_linear()
-		&& (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
-	      gmm::mult_add(brick.cmatlist[j],
-			    gmm::scaled(variables[term.var2].complex_value[0],
-					std::complex<scalar_type>(-coeff0)),
-			    gmm::sub_vector(crhs, I1));
-	    }
-	    if (term.is_symmetric && I1.first() != I2.first()) {
-	      if (brick.pdispatch) {
-		for (size_type k = 0; k < brick.nbrhs; ++k)
-		  gmm::add(gmm::scaled(brick.cveclist_sym[k][j],
-				       brick.coeffs[k]),
-			   gmm::sub_vector(crhs, I2));
-	      }
-	      else
-		gmm::add(brick.cveclist_sym[0][j], gmm::sub_vector(crhs, I2));
-	       if (brick.pbr->is_linear()
-		   && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
-		 gmm::mult_add(gmm::conjugated(brick.cmatlist[j]),
-			    gmm::scaled(variables[term.var1].complex_value[0],
-					std::complex<scalar_type>(-coeff0)),
-			       gmm::sub_vector(crhs, I2));
-	       }
-	    }
-	  }
-	} else if (is_complex()) {
-	  if (term.is_matrix_term && (version & BUILD_MATRIX)) {
-	    gmm::add(gmm::scaled(brick.rmatlist[j], coeff0),
-		     gmm::sub_matrix(cTM, I1, I2));
-	    if (term.is_symmetric && I1.first() != I2.first()) {
-	      gmm::add(gmm::scaled(gmm::transposed(brick.rmatlist[j]), coeff0),
-		       gmm::sub_matrix(cTM, I2, I1));
-	    }
-	  }
-	  if (version & BUILD_RHS) {
-	    if (brick.pdispatch) {
-	      for (size_type k = 0; k < brick.nbrhs; ++k)
-		gmm::add(gmm::scaled(brick.rveclist[k][j],
-				     brick.coeffs[k]),
-			 gmm::sub_vector(crhs, I1));
-	    }
-	    else
-	      gmm::add(brick.rveclist[0][j], gmm::sub_vector(crhs, I1));
-	    if (term.is_matrix_term && brick.pbr->is_linear()
-		&& (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
-	      gmm::mult_add(brick.rmatlist[j],
-			    gmm::scaled(variables[term.var2].complex_value[0],
-					std::complex<scalar_type>(-coeff0)),
-			    gmm::sub_vector(crhs, I1));
-	    }
-	    if (term.is_symmetric && I1.first() != I2.first()) {
-	      if (brick.pdispatch) {
-		for (size_type k = 0; k < brick.nbrhs; ++k)
-		  gmm::add(gmm::scaled(brick.rveclist_sym[k][j],
-				       brick.coeffs[k]),
-			   gmm::sub_vector(crhs, I2));
-	      }
-	      else 
-		gmm::add(brick.rveclist_sym[0][j], gmm::sub_vector(crhs, I2));
-	      if (brick.pbr->is_linear()
-		  && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
-		gmm::mult_add(gmm::transposed(brick.rmatlist[j]),
-			     gmm::scaled(variables[term.var1].complex_value[0],
-					  std::complex<scalar_type>(-coeff0)),
-			      gmm::sub_vector(crhs, I2));
-	      }
-	    }
-	  }
-	} else {
-	  if (term.is_matrix_term && (version & BUILD_MATRIX)) {
-	    gmm::add(gmm::scaled(brick.rmatlist[j], coeff0),
-		     gmm::sub_matrix(rTM, I1, I2));
-	    if (term.is_symmetric && I1.first() != I2.first()) {
-	      gmm::add(gmm::scaled(gmm::transposed(brick.rmatlist[j]), coeff0),
-		       gmm::sub_matrix(rTM, I2, I1));
-	    }
-	  }
-	  if (version & BUILD_RHS) {
-	    if (brick.pdispatch) {
-	      for (size_type k = 0; k < brick.nbrhs; ++k)
-		gmm::add(gmm::scaled(brick.rveclist[k][j],
-				     brick.coeffs[k]),
-			 gmm::sub_vector(rrhs, I1));
-	    }
-	    else
-	      gmm::add(brick.rveclist[0][j], gmm::sub_vector(rrhs, I1));
-	    if (term.is_matrix_term && brick.pbr->is_linear()
-		&& (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
-	      gmm::mult_add(brick.rmatlist[j],
-			    gmm::scaled(variables[term.var2].real_value[0],
-					-coeff0),
-			    gmm::sub_vector(rrhs, I1));
-	    }
-	    if (term.is_symmetric && I1.first() != I2.first()) {
-	      if (brick.pdispatch) {
-		for (size_type k = 0; k < brick.nbrhs; ++k)
-		  gmm::add(gmm::scaled(brick.rveclist_sym[k][j],
-				       brick.coeffs[k]),
-			   gmm::sub_vector(rrhs, I2));
-	      }
-	      else
-		gmm::add(brick.rveclist_sym[0][j], gmm::sub_vector(rrhs, I2));
-	      if (brick.pbr->is_linear()
-		  && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
-		gmm::mult_add(gmm::transposed(brick.rmatlist[j]),
-			      gmm::scaled(variables[term.var1].real_value[0],
-					  -coeff0),
-			      gmm::sub_vector(rrhs, I2));
-	      }
-	    }
-	  }
-	}
+      for (size_type j = 0; j < brick.tlist.size(); ++j) {
+        term_description &term = brick.tlist[j];
+        gmm::sub_interval I1 = variables[term.var1].I;
+        gmm::sub_interval I2(0,0);
+        if (term.is_matrix_term) I2 = variables[term.var2].I;
+
+        if (cplx) {
+          if (term.is_matrix_term && (version & BUILD_MATRIX)) {
+            gmm::add(gmm::scaled(brick.cmatlist[j], coeff0),
+                     gmm::sub_matrix(cTM, I1, I2));
+            if (term.is_symmetric && I1.first() != I2.first()) {
+              gmm::add(gmm::scaled(gmm::transposed(brick.cmatlist[j]), coeff0),
+                       gmm::sub_matrix(cTM, I2, I1));
+            }
+          }
+          if (version & BUILD_RHS) {
+            if (brick.pdispatch) {
+              for (size_type k = 0; k < brick.nbrhs; ++k)
+                gmm::add(gmm::scaled(brick.cveclist[k][j],
+                                     brick.coeffs[k]),
+                         gmm::sub_vector(crhs, I1));
+            }
+            else
+              gmm::add(brick.cveclist[0][j], gmm::sub_vector(crhs, I1));
+            if (term.is_matrix_term && brick.pbr->is_linear()
+                && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
+              gmm::mult_add(brick.cmatlist[j],
+                            gmm::scaled(variables[term.var2].complex_value[0],
+                                        std::complex<scalar_type>(-coeff0)),
+                            gmm::sub_vector(crhs, I1));
+            }
+            if (term.is_symmetric && I1.first() != I2.first()) {
+              if (brick.pdispatch) {
+                for (size_type k = 0; k < brick.nbrhs; ++k)
+                  gmm::add(gmm::scaled(brick.cveclist_sym[k][j],
+                                       brick.coeffs[k]),
+                           gmm::sub_vector(crhs, I2));
+              }
+              else
+                gmm::add(brick.cveclist_sym[0][j], gmm::sub_vector(crhs, I2));
+               if (brick.pbr->is_linear()
+                   && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
+                 gmm::mult_add(gmm::conjugated(brick.cmatlist[j]),
+                            gmm::scaled(variables[term.var1].complex_value[0],
+                                        std::complex<scalar_type>(-coeff0)),
+                               gmm::sub_vector(crhs, I2));
+               }
+            }
+          }
+        } else if (is_complex()) {
+          if (term.is_matrix_term && (version & BUILD_MATRIX)) {
+            gmm::add(gmm::scaled(brick.rmatlist[j], coeff0),
+                     gmm::sub_matrix(cTM, I1, I2));
+            if (term.is_symmetric && I1.first() != I2.first()) {
+              gmm::add(gmm::scaled(gmm::transposed(brick.rmatlist[j]), coeff0),
+                       gmm::sub_matrix(cTM, I2, I1));
+            }
+          }
+          if (version & BUILD_RHS) {
+            if (brick.pdispatch) {
+              for (size_type k = 0; k < brick.nbrhs; ++k)
+                gmm::add(gmm::scaled(brick.rveclist[k][j],
+                                     brick.coeffs[k]),
+                         gmm::sub_vector(crhs, I1));
+            }
+            else
+              gmm::add(brick.rveclist[0][j], gmm::sub_vector(crhs, I1));
+            if (term.is_matrix_term && brick.pbr->is_linear()
+                && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
+              gmm::mult_add(brick.rmatlist[j],
+                            gmm::scaled(variables[term.var2].complex_value[0],
+                                        std::complex<scalar_type>(-coeff0)),
+                            gmm::sub_vector(crhs, I1));
+            }
+            if (term.is_symmetric && I1.first() != I2.first()) {
+              if (brick.pdispatch) {
+                for (size_type k = 0; k < brick.nbrhs; ++k)
+                  gmm::add(gmm::scaled(brick.rveclist_sym[k][j],
+                                       brick.coeffs[k]),
+                           gmm::sub_vector(crhs, I2));
+              }
+              else
+                gmm::add(brick.rveclist_sym[0][j], gmm::sub_vector(crhs, I2));
+              if (brick.pbr->is_linear()
+                  && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
+                gmm::mult_add(gmm::transposed(brick.rmatlist[j]),
+                             gmm::scaled(variables[term.var1].complex_value[0],
+                                          std::complex<scalar_type>(-coeff0)),
+                              gmm::sub_vector(crhs, I2));
+              }
+            }
+          }
+        } else {
+          if (term.is_matrix_term && (version & BUILD_MATRIX)) {
+            gmm::add(gmm::scaled(brick.rmatlist[j], coeff0),
+                     gmm::sub_matrix(rTM, I1, I2));
+            if (term.is_symmetric && I1.first() != I2.first()) {
+              gmm::add(gmm::scaled(gmm::transposed(brick.rmatlist[j]), coeff0),
+                       gmm::sub_matrix(rTM, I2, I1));
+            }
+          }
+          if (version & BUILD_RHS) {
+            if (brick.pdispatch) {
+              for (size_type k = 0; k < brick.nbrhs; ++k)
+                gmm::add(gmm::scaled(brick.rveclist[k][j],
+                                     brick.coeffs[k]),
+                         gmm::sub_vector(rrhs, I1));
+            }
+            else
+              gmm::add(brick.rveclist[0][j], gmm::sub_vector(rrhs, I1));
+            if (term.is_matrix_term && brick.pbr->is_linear()
+                && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
+              gmm::mult_add(brick.rmatlist[j],
+                            gmm::scaled(variables[term.var2].real_value[0],
+                                        -coeff0),
+                            gmm::sub_vector(rrhs, I1));
+            }
+            if (term.is_symmetric && I1.first() != I2.first()) {
+              if (brick.pdispatch) {
+                for (size_type k = 0; k < brick.nbrhs; ++k)
+                  gmm::add(gmm::scaled(brick.rveclist_sym[k][j],
+                                       brick.coeffs[k]),
+                           gmm::sub_vector(rrhs, I2));
+              }
+              else
+                gmm::add(brick.rveclist_sym[0][j], gmm::sub_vector(rrhs, I2));
+              if (brick.pbr->is_linear()
+                  && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
+                gmm::mult_add(gmm::transposed(brick.rmatlist[j]),
+                              gmm::scaled(variables[term.var1].real_value[0],
+                                          -coeff0),
+                              gmm::sub_vector(rrhs, I2));
+              }
+            }
+          }
+        }
       }
 
       if (brick.pbr->is_linear())
-	brick.terms_to_be_computed = false;
-      else 
-	if (cplx) {
-	  brick.cmatlist = complex_matlist(brick.tlist.size());
-	  brick.cveclist[0] = complex_veclist(brick.tlist.size());
-	} else {
-	  brick.rmatlist = real_matlist(brick.tlist.size());
-	  brick.rveclist[0] = real_veclist(brick.tlist.size());	    
-	}
+        brick.terms_to_be_computed = false;
+// Commented to allow to get this information. Should be optional ?
+//       else
+//         if (cplx) {
+//           brick.cmatlist = complex_matlist(brick.tlist.size());
+//           brick.cveclist[0] = complex_veclist(brick.tlist.size());
+//         } else {
+//           brick.rmatlist = real_matlist(brick.tlist.size());
+//           brick.rveclist[0] = real_veclist(brick.tlist.size());
+//         }
 
     }
   }
@@ -1001,13 +1094,13 @@ namespace getfem {
     GMM_ASSERT1(it!=variables.end(), "Undefined variable " << name);
     return it->second.associated_mf();
   }
-  
+
   const mesh_fem *model::pmesh_fem_of_variable(const std::string &name) const {
     VAR_SET::const_iterator it = variables.find(name);
     GMM_ASSERT1(it!=variables.end(), "Undefined variable " << name);
     return it->second.passociated_mf();
   }
-  
+
   const model_real_plain_vector &
   model::real_variable(const std::string &name, size_type niter) const {
     GMM_ASSERT1(!complex_version, "This model is a complex one");
@@ -1016,11 +1109,11 @@ namespace getfem {
     GMM_ASSERT1(it!=variables.end(), "Undefined variable " << name);
     if (niter == size_type(-1)) niter = it->second.default_iter;
     GMM_ASSERT1(it->second.n_iter + it->second.n_temp_iter > niter,
-		"Unvalid iteration number "
-		<< niter << " for " << name);
+                "Unvalid iteration number "
+                << niter << " for " << name);
     return it->second.real_value[niter];
   }
-  
+
   const model_complex_plain_vector &
   model::complex_variable(const std::string &name, size_type niter) const {
     GMM_ASSERT1(complex_version, "This model is a real one");
@@ -1029,9 +1122,9 @@ namespace getfem {
     GMM_ASSERT1(it!=variables.end(), "Undefined variable " << name);
     if (niter == size_type(-1)) niter = it->second.default_iter;
     GMM_ASSERT1(it->second.n_iter + it->second.n_temp_iter  > niter,
-		"Unvalid iteration number "
-		<< niter << " for " << name);
-    return it->second.complex_value[niter];    
+                "Unvalid iteration number "
+                << niter << " for " << name);
+    return it->second.complex_value[niter];
   }
 
   model_real_plain_vector &
@@ -1043,23 +1136,34 @@ namespace getfem {
     it->second.v_num_data = act_counter();
     if (niter == size_type(-1)) niter = it->second.default_iter;
     GMM_ASSERT1(it->second.n_iter + it->second.n_temp_iter > niter,
-		"Unvalid iteration number "
-		<< niter << " for " << name);
+                "Unvalid iteration number "
+                << niter << " for " << name);
     return it->second.real_value[niter];
   }
-  
+
   model_complex_plain_vector &
   model::set_complex_variable(const std::string &name, size_type niter) const {
     GMM_ASSERT1(complex_version, "This model is a real one");
     context_check(); if (act_size_to_be_done) actualize_sizes();
     VAR_SET::iterator it = variables.find(name);
     GMM_ASSERT1(it!=variables.end(), "Undefined variable " << name);
-    it->second.v_num_data = act_counter();    
+    it->second.v_num_data = act_counter();
     if (niter == size_type(-1)) niter = it->second.default_iter;
     GMM_ASSERT1(it->second.n_iter + it->second.n_temp_iter > niter,
-		"Unvalid iteration number "
-		<< niter << " for " << name);
-    return it->second.complex_value[niter];    
+                "Unvalid iteration number "
+                << niter << " for " << name);
+    return it->second.complex_value[niter];
+  }
+    void model::check_brick_stiffness_rhs(size_type ind_brick) const
+	{
+
+	  
+	  const brick_description &brick = bricks[ind_brick];
+	  update_brick(ind_brick, model::BUILD_ALL);
+
+	  brick.pbr->check_stiffness_matrix_and_rhs(*this, ind_brick, 
+		  brick.vlist, brick.dlist, brick.mims, brick.rmatlist,
+            brick.rveclist[0], brick.rveclist_sym[0], brick.region);
   }
 
 
@@ -1070,6 +1174,86 @@ namespace getfem {
   //
   //
   // ----------------------------------------------------------------------
+  	void virtual_brick::check_stiffness_matrix_and_rhs(const model &md, size_type s,
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &rvc1,
+                                        model::real_veclist &rvc2, 
+										size_type rg,
+										const scalar_type TINY) const
+	{
+		asm_real_tangent_terms(md, s, vl, dl, mims, matl, rvc1, rvc2, rg, model::BUILD_MATRIX);
+		model_real_sparse_matrix SM(matl[0]);
+		gmm::fill(rvc1[0], 0.0);
+		asm_real_tangent_terms(md, s, vl, dl, mims, matl, rvc1, rvc2, rg, model::BUILD_RHS);
+		model_real_plain_vector RHS0(rvc1[0]);
+
+		//finite difference stiffness		
+		model_real_sparse_matrix fdSM(matl[0].nrows(),matl[0].ncols());
+
+		for (size_type i=0;i<rvc1[0].size();i++){
+			model_real_plain_vector U(md.real_variable(vl[0]));
+			U[i]+=TINY;
+			gmm::copy(U, md.set_real_variable(vl[0]));
+			gmm::fill(rvc1[0], 0.0);
+			asm_real_tangent_terms(md, s, vl, dl, mims, matl, rvc1, rvc2, rg, model::BUILD_RHS);
+			model_real_plain_vector RHS1(rvc1[0]);
+			for (size_type j=0;j<rvc1[0].size();j++){
+    			fdSM(i,j)=(RHS0[j]-RHS1[j])/TINY;
+			}
+			U[i]-=TINY;
+			gmm::copy(U, md.set_real_variable(vl[0]));
+		}
+		model_real_sparse_matrix diffSM(matl[0].nrows(),matl[0].ncols());
+		gmm::add(matl[0],gmm::scaled(fdSM,-1.0),diffSM);
+		scalar_type norm_error_euc = gmm::mat_euclidean_norm(diffSM)/gmm::mat_euclidean_norm(matl[0])*100;
+		scalar_type norm_error_1 = gmm::mat_norm1(diffSM)/gmm::mat_norm1(matl[0])*100;
+		scalar_type norm_error_max = gmm::mat_maxnorm(diffSM)/gmm::mat_maxnorm(matl[0])*100;
+		
+		model_real_sparse_matrix diffSMtransposed(matl[0].nrows(),matl[0].ncols());
+		gmm::add(gmm::transposed(fdSM),gmm::scaled(fdSM,-1.0),diffSMtransposed);
+		scalar_type nsym_norm_error_euc = gmm::mat_euclidean_norm(diffSMtransposed)/gmm::mat_euclidean_norm(fdSM)*100;
+		scalar_type nsym_norm_error_1 = gmm::mat_norm1(diffSMtransposed)/gmm::mat_norm1(fdSM)*100;
+		scalar_type nsym_norm_error_max = gmm::mat_maxnorm(diffSMtransposed)/gmm::mat_maxnorm(fdSM)*100;
+
+		//print matrix if the size is small
+		if(rvc1[0].size()<8){
+			std::cout << "RHS Stiffness Matrix: \n";
+			std::cout << "------------------------\n";
+			for(size_type i=0; i < rvc1[0].size(); ++i){
+				std::cout << "[";
+				for(size_type j=0; j < rvc1[0].size(); ++j){
+					std::cout << fdSM(i,j) << "  ";
+				}
+				std::cout << "]\n";
+			}
+			std::cout << "Analytical Stiffness Matrix: \n";
+			std::cout << "------------------------\n";
+			for(size_type i=0; i < rvc1[0].size(); ++i){
+				std::cout << "[";
+				for(size_type j=0; j < rvc1[0].size(); ++j){
+					std::cout << matl[0](i,j) << "  ";
+				}
+				std::cout << "]\n";
+			}
+			std::cout << "Vector U: \n";
+			std::cout << "------------------------\n";
+			for(size_type i=0; i < rvc1[0].size(); ++i){
+				std::cout << "[";
+					std::cout << md.real_variable(vl[0])[i] << "  ";
+				std::cout << "]\n";
+			}
+		}
+
+		std::cout<<"\n\nfinite diff test error_norm_eucl: "<<norm_error_euc <<"%"<<std::endl;
+		std::cout<<"finite diff test error_norm1: "<<norm_error_1 <<"%"<<std::endl;
+		std::cout<<"finite diff test error_max_norm: "<<norm_error_max <<"%"<<std::endl;
+		std::cout<<"\n\nNonsymmetrical test error_norm_eucl: "<<nsym_norm_error_euc <<"%"<<std::endl;
+		std::cout<<"Nonsymmetrical test error_norm1: "<<nsym_norm_error_1 <<"%"<<std::endl;
+		std::cout<<"Nonsymmetrical test error_max_norm: "<<nsym_norm_error_max <<"%"<<std::endl;
+	}
 
 
   // ----------------------------------------------------------------------
@@ -1081,20 +1265,20 @@ namespace getfem {
   struct generic_elliptic_brick : public virtual_brick {
 
     virtual void asm_real_tangent_terms(const model &md, size_type,
-					const model::varnamelist &vl,
-					const model::varnamelist &dl,
-					const model::mimlist &mims,
-					model::real_matlist &matl,
-					model::real_veclist &,
-					model::real_veclist &,
-					size_type region,
-					build_version) const {
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version) const {
       GMM_ASSERT1(matl.size() == 1,
-		  "Generic elliptic brick has one and only one term");
+                  "Generic elliptic brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Generic elliptic brick need one and only one mesh_im");
+                  "Generic elliptic brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() <= 1,
-		  "Wrong number of variables for generic elliptic brick");
+                  "Wrong number of variables for generic elliptic brick");
 
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
       const mesh &m = mf_u.linked_mesh();
@@ -1105,100 +1289,100 @@ namespace getfem {
       mesh_region rg(region);
       m.intersect_with_mpi_region(rg);
       if (dl.size() > 0) {
-	A = &(md.real_variable(dl[0]));
-	mf_a = md.pmesh_fem_of_variable(dl[0]);
-	s = gmm::vect_size(*A);
-	if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
+        A = &(md.real_variable(dl[0]));
+        mf_a = md.pmesh_fem_of_variable(dl[0]);
+        s = gmm::vect_size(*A);
+        if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
       }
 
       gmm::clear(matl[0]);
       GMM_TRACE2("Generic elliptic term assembly");
       if (s == 1) {
-	if (mf_a) {
-	  if (Q > 1)
-	    asm_stiffness_matrix_for_laplacian_componentwise
-	      (matl[0], mim, mf_u, *mf_a, *A, rg);
-	  else
-	    asm_stiffness_matrix_for_laplacian
-	      (matl[0], mim, mf_u, *mf_a, *A, rg);
-
-	} else {
-	  if (Q > 1)
-	    asm_stiffness_matrix_for_homogeneous_laplacian_componentwise
-	      (matl[0], mim, mf_u, rg);
-	  else
-	    asm_stiffness_matrix_for_homogeneous_laplacian
-	      (matl[0], mim, mf_u, rg);
-	  if (A) gmm::scale(matl[0], (*A)[0]);
-	}
+        if (mf_a) {
+          if (Q > 1)
+            asm_stiffness_matrix_for_laplacian_componentwise
+              (matl[0], mim, mf_u, *mf_a, *A, rg);
+          else
+            asm_stiffness_matrix_for_laplacian
+              (matl[0], mim, mf_u, *mf_a, *A, rg);
+
+        } else {
+          if (Q > 1)
+            asm_stiffness_matrix_for_homogeneous_laplacian_componentwise
+              (matl[0], mim, mf_u, rg);
+          else
+            asm_stiffness_matrix_for_homogeneous_laplacian
+              (matl[0], mim, mf_u, rg);
+          if (A) gmm::scale(matl[0], (*A)[0]);
+        }
       } else if (s == N*N) {
-	if (mf_a) {
-	  if (Q > 1)
-	    asm_stiffness_matrix_for_scalar_elliptic_componentwise
-	      (matl[0], mim, mf_u, *mf_a, *A, rg);
-	  else
-	    asm_stiffness_matrix_for_scalar_elliptic
-	      (matl[0], mim, mf_u, *mf_a, *A, rg);
-	} else {
-	  if (Q > 1)
-	    asm_stiffness_matrix_for_homogeneous_scalar_elliptic_componentwise
-	      (matl[0], mim, mf_u, *A, rg);
-	  else
-	    asm_stiffness_matrix_for_homogeneous_scalar_elliptic
-	      (matl[0], mim, mf_u, *A, rg);
-	}
+        if (mf_a) {
+          if (Q > 1)
+            asm_stiffness_matrix_for_scalar_elliptic_componentwise
+              (matl[0], mim, mf_u, *mf_a, *A, rg);
+          else
+            asm_stiffness_matrix_for_scalar_elliptic
+              (matl[0], mim, mf_u, *mf_a, *A, rg);
+        } else {
+          if (Q > 1)
+            asm_stiffness_matrix_for_homogeneous_scalar_elliptic_componentwise
+              (matl[0], mim, mf_u, *A, rg);
+          else
+            asm_stiffness_matrix_for_homogeneous_scalar_elliptic
+              (matl[0], mim, mf_u, *A, rg);
+        }
       } else if (s == N*N*Q*Q) {
-	if (mf_a)
-	  asm_stiffness_matrix_for_vector_elliptic
-	    (matl[0], mim, mf_u, *mf_a, *A, rg);
-	else 
-	  asm_stiffness_matrix_for_homogeneous_vector_elliptic
-	    (matl[0], mim, mf_u, *A, rg);
+        if (mf_a)
+          asm_stiffness_matrix_for_vector_elliptic
+            (matl[0], mim, mf_u, *mf_a, *A, rg);
+        else
+          asm_stiffness_matrix_for_homogeneous_vector_elliptic
+            (matl[0], mim, mf_u, *A, rg);
       } else
-	GMM_ASSERT1(false,
-		    "Bad format generic elliptic brick coefficient");
+        GMM_ASSERT1(false,
+                    "Bad format generic elliptic brick coefficient");
     }
 
     virtual scalar_type asm_real_pseudo_potential(const model &md, size_type,
-						  const model::varnamelist &vl,
-						  const model::varnamelist &,
-						  const model::mimlist &,
-						  model::real_matlist &matl,
-						  model::real_veclist &,
-						  model::real_veclist &,
-						  size_type) const {
+                                                  const model::varnamelist &vl,
+                                                  const model::varnamelist &,
+                                                  const model::mimlist &,
+                                                  model::real_matlist &matl,
+                                                  model::real_veclist &,
+                                                  model::real_veclist &,
+                                                  size_type) const {
       const model_real_plain_vector &U = md.real_variable(vl[0]);
       return gmm::vect_sp(matl[0], U, U) / scalar_type(2);
     }
 
     virtual scalar_type asm_complex_tangent_terms(const model &md, size_type,
-						  const model::varnamelist &vl,
-						  const model::varnamelist &,
-						  const model::mimlist &,
-						  model::complex_matlist &matl,
-						  model::complex_veclist &,
-						  model::complex_veclist &,
-						  size_type) const {
+                                                  const model::varnamelist &vl,
+                                                  const model::varnamelist &,
+                                                  const model::mimlist &,
+                                                  model::complex_matlist &matl,
+                                                  model::complex_veclist &,
+                                                  model::complex_veclist &,
+                                                  size_type) const {
       const model_complex_plain_vector &U = md.complex_variable(vl[0]);
       return gmm::abs(gmm::vect_hp(matl[0], U, U)) / scalar_type(2);
     }
 
 
     virtual void asm_complex_tangent_terms(const model &md, size_type,
-					   const model::varnamelist &vl,
-					   const model::varnamelist &dl,
-					   const model::mimlist &mims,
-					   model::complex_matlist &matl,
-					   model::complex_veclist &,
-					   model::complex_veclist &,
-					   size_type region,
-					   build_version) const {
+                                           const model::varnamelist &vl,
+                                           const model::varnamelist &dl,
+                                           const model::mimlist &mims,
+                                           model::complex_matlist &matl,
+                                           model::complex_veclist &,
+                                           model::complex_veclist &,
+                                           size_type region,
+                                           build_version) const {
       GMM_ASSERT1(matl.size() == 1,
-		  "Generic elliptic brick has one and only one term");
+                  "Generic elliptic brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Generic elliptic brick need one and only one mesh_im");
+                  "Generic elliptic brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() <= 1,
-		  "Wrong number of variables for generic elliptic brick");
+                  "Wrong number of variables for generic elliptic brick");
 
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
       const mesh &m = mf_u.linked_mesh();
@@ -1208,92 +1392,92 @@ namespace getfem {
       const mesh_fem *mf_a = 0;
       mesh_region rg(region);
       m.intersect_with_mpi_region(rg);
-      
+
 
       if (dl.size() > 0) {
-	A = &(md.real_variable(dl[0]));
-	mf_a = md.pmesh_fem_of_variable(dl[0]);
-	s = gmm::vect_size(*A);
-	if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
+        A = &(md.real_variable(dl[0]));
+        mf_a = md.pmesh_fem_of_variable(dl[0]);
+        s = gmm::vect_size(*A);
+        if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
       }
 
       gmm::clear(matl[0]);
       GMM_TRACE2("Generic elliptic term assembly");
       if (s == 1) {
-	if (mf_a) {
-	  if (Q > 1)
-	    asm_stiffness_matrix_for_laplacian_componentwise
-	      (matl[0], mim, mf_u, *mf_a, *A, rg);
-	  else
-	    asm_stiffness_matrix_for_laplacian
-	      (matl[0], mim, mf_u, *mf_a, *A, rg);
-
-	} else {
-	  if (Q > 1)
-	    asm_stiffness_matrix_for_homogeneous_laplacian_componentwise
-	      (gmm::real_part(matl[0]), mim, mf_u, rg);
-	  else
-	    asm_stiffness_matrix_for_homogeneous_laplacian
-	      (gmm::real_part(matl[0]), mim, mf_u, rg);
-	  if (A) gmm::scale(matl[0], (*A)[0]);
-	}
+        if (mf_a) {
+          if (Q > 1)
+            asm_stiffness_matrix_for_laplacian_componentwise
+              (matl[0], mim, mf_u, *mf_a, *A, rg);
+          else
+            asm_stiffness_matrix_for_laplacian
+              (matl[0], mim, mf_u, *mf_a, *A, rg);
+
+        } else {
+          if (Q > 1)
+            asm_stiffness_matrix_for_homogeneous_laplacian_componentwise
+              (gmm::real_part(matl[0]), mim, mf_u, rg);
+          else
+            asm_stiffness_matrix_for_homogeneous_laplacian
+              (gmm::real_part(matl[0]), mim, mf_u, rg);
+          if (A) gmm::scale(matl[0], (*A)[0]);
+        }
       } else if (s == N*N) {
-	if (mf_a) {
-	  if (Q > 1)
-	    asm_stiffness_matrix_for_scalar_elliptic_componentwise
-	      (matl[0], mim, mf_u, *mf_a, *A, rg);
-	  else
-	    asm_stiffness_matrix_for_scalar_elliptic
-	      (matl[0], mim, mf_u, *mf_a, *A, rg);
-	} else {
-	  if (Q > 1)
-	    asm_stiffness_matrix_for_homogeneous_scalar_elliptic_componentwise
-	      (matl[0], mim, mf_u, *A, rg);
-	  else
-	    asm_stiffness_matrix_for_homogeneous_scalar_elliptic
-	      (matl[0], mim, mf_u, *A, rg);
-	}
+        if (mf_a) {
+          if (Q > 1)
+            asm_stiffness_matrix_for_scalar_elliptic_componentwise
+              (matl[0], mim, mf_u, *mf_a, *A, rg);
+          else
+            asm_stiffness_matrix_for_scalar_elliptic
+              (matl[0], mim, mf_u, *mf_a, *A, rg);
+        } else {
+          if (Q > 1)
+            asm_stiffness_matrix_for_homogeneous_scalar_elliptic_componentwise
+              (matl[0], mim, mf_u, *A, rg);
+          else
+            asm_stiffness_matrix_for_homogeneous_scalar_elliptic
+              (matl[0], mim, mf_u, *A, rg);
+        }
       } else if (s == N*N*Q*Q) {
-	if (mf_a)
-	  asm_stiffness_matrix_for_vector_elliptic
-	    (matl[0], mim, mf_u, *mf_a, *A, rg);
-	else 
-	  asm_stiffness_matrix_for_homogeneous_vector_elliptic
-	    (matl[0], mim, mf_u, *A, rg);
+        if (mf_a)
+          asm_stiffness_matrix_for_vector_elliptic
+            (matl[0], mim, mf_u, *mf_a, *A, rg);
+        else
+          asm_stiffness_matrix_for_homogeneous_vector_elliptic
+            (matl[0], mim, mf_u, *A, rg);
       } else
-	GMM_ASSERT1(false,
-		    "Bad format generic elliptic brick coefficient");
+        GMM_ASSERT1(false,
+                    "Bad format generic elliptic brick coefficient");
     }
 
     generic_elliptic_brick(void) {
       set_flags("Generic elliptic", true /* is linear*/,
-		true /* is symmetric */, true /* is coercive */,
-		true /* is real */, true /* is complex */);
+                true /* is symmetric */, true /* is coercive */,
+                true /* is real */, true /* is complex */);
     }
 
   };
 
   size_type add_Laplacian_brick(model &md, const mesh_im &mim,
-				const std::string &varname,
-				size_type region) {
+                                const std::string &varname,
+                                size_type region) {
     pbrick pbr = new generic_elliptic_brick;
     model::termlist tl;
     tl.push_back(model::term_description(varname, varname, true));
     return md.add_brick(pbr, model::varnamelist(1, varname),
-			model::varnamelist(), tl, model::mimlist(1, &mim),
-			region);
+                        model::varnamelist(), tl, model::mimlist(1, &mim),
+                        region);
   }
 
   size_type add_generic_elliptic_brick(model &md, const mesh_im &mim,
-				       const std::string &varname,
-				       const std::string &dataname,
-				       size_type region) {
+                                       const std::string &varname,
+                                       const std::string &dataname,
+                                       size_type region) {
     pbrick pbr = new generic_elliptic_brick;
     model::termlist tl;
     tl.push_back(model::term_description(varname, varname, true));
     return md.add_brick(pbr, model::varnamelist(1, varname),
-			model::varnamelist(1, dataname), tl,
-			model::mimlist(1, &mim), region);
+                        model::varnamelist(1, dataname), tl,
+                        model::mimlist(1, &mim), region);
   }
 
   // ----------------------------------------------------------------------
@@ -1305,20 +1489,20 @@ namespace getfem {
   struct source_term_brick : public virtual_brick {
 
     virtual void asm_real_tangent_terms(const model &md, size_type,
-					const model::varnamelist &vl,
-					const model::varnamelist &dl,
-					const model::mimlist &mims,
-					model::real_matlist &,
-					model::real_veclist &vecl,
-					model::real_veclist &,
-					size_type region,
-					build_version) const {
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version) const {
       GMM_ASSERT1(vecl.size() == 1,
-		  "Source term brick has one and only one term");
+                  "Source term brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Source term brick need one and only one mesh_im");
+                  "Source term brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() > 0 && dl.size() <= 2,
-		  "Wrong number of variables for source term brick");
+                  "Wrong number of variables for source term brick");
 
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
       const mesh_im &mim = *mims[0];
@@ -1331,47 +1515,47 @@ namespace getfem {
       if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
 
       GMM_ASSERT1(mf_u.get_qdim() == s,
-		  dl[0] << ": bad format of source term data. "
-		  "Detected dimension is " << s << " should be "
-		  << size_type(mf_u.get_qdim()));
+                  dl[0] << ": bad format of source term data. "
+                  "Detected dimension is " << s << " should be "
+                  << size_type(mf_u.get_qdim()));
 
       GMM_TRACE2("Source term assembly");
       if (mf_data)
-	asm_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
+        asm_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
       else
-	asm_homogeneous_source_term(vecl[0], mim, mf_u, A, rg);
+        asm_homogeneous_source_term(vecl[0], mim, mf_u, A, rg);
 
       if (dl.size() > 1) gmm::add(md.real_variable(dl[1]), vecl[0]);
 
     }
 
     virtual scalar_type asm_real_pseudo_potential(const model &md, size_type,
-						  const model::varnamelist &vl,
-						  const model::varnamelist &,
-						  const model::mimlist &,
-						  model::real_matlist &,
-						  model::real_veclist &vecl,
-						  model::real_veclist &,
-						  size_type) const {
+                                                  const model::varnamelist &vl,
+                                                  const model::varnamelist &,
+                                                  const model::mimlist &,
+                                                  model::real_matlist &,
+                                                  model::real_veclist &vecl,
+                                                  model::real_veclist &,
+                                                  size_type) const {
       const model_real_plain_vector &u = md.real_variable(vl[0]);
       return -gmm::vect_sp(vecl[0], u);
     }
 
     virtual void asm_complex_tangent_terms(const model &md, size_type,
-					   const model::varnamelist &vl,
-					   const model::varnamelist &dl,
-					   const model::mimlist &mims,
-					   model::complex_matlist &,
-					   model::complex_veclist &vecl,
-					   model::complex_veclist &,
-					   size_type region,
-					   build_version) const {
+                                           const model::varnamelist &vl,
+                                           const model::varnamelist &dl,
+                                           const model::mimlist &mims,
+                                           model::complex_matlist &,
+                                           model::complex_veclist &vecl,
+                                           model::complex_veclist &,
+                                           size_type region,
+                                           build_version) const {
       GMM_ASSERT1(vecl.size() == 1,
-		  "Source term brick has one and only one term");
+                  "Source term brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Source term brick need one and only one mesh_im");
+                  "Source term brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() > 0 && dl.size() <= 2,
-		  "Wrong number of variables for source term brick");
+                  "Wrong number of variables for source term brick");
 
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
       const mesh_im &mim = *mims[0];
@@ -1387,22 +1571,22 @@ namespace getfem {
 
       GMM_TRACE2("Source term assembly");
       if (mf_data)
-	asm_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
+        asm_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
       else
-	asm_homogeneous_source_term(vecl[0], mim, mf_u, A, rg);
+        asm_homogeneous_source_term(vecl[0], mim, mf_u, A, rg);
 
       if (dl.size() > 1) gmm::add(md.complex_variable(dl[1]), vecl[0]);
 
     }
 
     virtual scalar_type asm_complex_pseudo_potential(const model &md,size_type,
-						 const model::varnamelist &vl,
-						 const model::varnamelist &,
-						 const model::mimlist &,
-						 model::complex_matlist &,
-						 model::complex_veclist &vecl,
-						 model::complex_veclist &,
-						 size_type) const {
+                                                 const model::varnamelist &vl,
+                                                 const model::varnamelist &,
+                                                 const model::mimlist &,
+                                                 model::complex_matlist &,
+                                                 model::complex_veclist &vecl,
+                                                 model::complex_veclist &,
+                                                 size_type) const {
       const model_complex_plain_vector &u = md.complex_variable(vl[0]);
       return -gmm::real(gmm::vect_hp(vecl[0], u)); /* ? */
     }
@@ -1410,25 +1594,25 @@ namespace getfem {
 
     source_term_brick(void) {
       set_flags("Source term", true /* is linear*/,
-		true /* is symmetric */, true /* is coercive */,
-		true /* is real */, true /* is complex */);
+                true /* is symmetric */, true /* is coercive */,
+                true /* is real */, true /* is complex */);
     }
 
 
   };
 
   size_type add_source_term_brick(model &md, const mesh_im &mim,
-				  const std::string &varname,
-				  const std::string &dataname,
-				  size_type region,
-				  const std::string &directdataname) {
+                                  const std::string &varname,
+                                  const std::string &dataname,
+                                  size_type region,
+                                  const std::string &directdataname) {
     pbrick pbr = new source_term_brick;
     model::termlist tl;
     tl.push_back(model::term_description(varname));
     model::varnamelist vdata(1, dataname);
     if (directdataname.size()) vdata.push_back(directdataname);
     return md.add_brick(pbr, model::varnamelist(1, varname),
-			vdata, tl, model::mimlist(1, &mim), region);
+                        vdata, tl, model::mimlist(1, &mim), region);
   }
 
   // ----------------------------------------------------------------------
@@ -1440,20 +1624,20 @@ namespace getfem {
   struct normal_source_term_brick : public virtual_brick {
 
     virtual void asm_real_tangent_terms(const model &md, size_type,
-					const model::varnamelist &vl,
-					const model::varnamelist &dl,
-					const model::mimlist &mims,
-					model::real_matlist &,
-					model::real_veclist &vecl,
-					model::real_veclist &,
-					size_type region,
-					build_version) const {
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version) const {
       GMM_ASSERT1(vecl.size() == 1,
-		  "Source term brick has one and only one term");
+                  "Source term brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Source term brick need one and only one mesh_im");
+                  "Source term brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() == 1,
-		  "Wrong number of variables for source term brick");
+                  "Wrong number of variables for source term brick");
 
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
       const mesh_im &mim = *mims[0];
@@ -1466,33 +1650,33 @@ namespace getfem {
       if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
 
       GMM_ASSERT1(mf_u.get_qdim()*N == s,
-		  dl[0] << ": bad format of normal source term data. "
-		  "Detected dimension is " << s << " should be "
-		  << size_type(mf_u.get_qdim()*N));
+                  dl[0] << ": bad format of normal source term data. "
+                  "Detected dimension is " << s << " should be "
+                  << size_type(mf_u.get_qdim()*N));
 
       GMM_TRACE2("source term assembly");
       if (mf_data)
-	asm_normal_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
+        asm_normal_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
       else
-	asm_homogeneous_normal_source_term(vecl[0], mim, mf_u, A, rg);
+        asm_homogeneous_normal_source_term(vecl[0], mim, mf_u, A, rg);
 
     }
 
     virtual void asm_complex_tangent_terms(const model &md, size_type,
-					   const model::varnamelist &vl,
-					   const model::varnamelist &dl,
-					   const model::mimlist &mims,
-					   model::complex_matlist &,
-					   model::complex_veclist &vecl,
-					   model::complex_veclist &,
-					   size_type region,
-					   build_version) const {
+                                           const model::varnamelist &vl,
+                                           const model::varnamelist &dl,
+                                           const model::mimlist &mims,
+                                           model::complex_matlist &,
+                                           model::complex_veclist &vecl,
+                                           model::complex_veclist &,
+                                           size_type region,
+                                           build_version) const {
       GMM_ASSERT1(vecl.size() == 1,
-		  "Source term brick has one and only one term");
+                  "Source term brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Source term brick need one and only one mesh_im");
+                  "Source term brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() == 1,
-		  "Wrong number of variables for source term brick");
+                  "Wrong number of variables for source term brick");
 
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
       const mesh_im &mim = *mims[0];
@@ -1508,31 +1692,43 @@ namespace getfem {
 
       GMM_TRACE2("source term assembly");
       if (mf_data)
-	asm_normal_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
+        asm_normal_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
       else
-	asm_homogeneous_normal_source_term(vecl[0], mim, mf_u, A, rg);
+        asm_homogeneous_normal_source_term(vecl[0], mim, mf_u, A, rg);
+
+    }
 
+    virtual scalar_type asm_real_pseudo_potential(const model &md, size_type,
+                                                  const model::varnamelist &vl,
+                                                  const model::varnamelist &,
+                                                  const model::mimlist &,
+                                                  model::real_matlist &,
+                                                  model::real_veclist &vecl,
+                                                  model::real_veclist &,
+                                                  size_type) const {
+      const model_real_plain_vector &u = md.real_variable(vl[0]);
+      return -gmm::vect_sp(vecl[0], u);
     }
 
     normal_source_term_brick(void) {
       set_flags("Normal source term", true /* is linear*/,
-		true /* is symmetric */, true /* is coercive */,
-		true /* is real */, true /* is complex */);
+                true /* is symmetric */, true /* is coercive */,
+                true /* is real */, true /* is complex */);
     }
 
 
   };
 
   size_type add_normal_source_term_brick(model &md, const mesh_im &mim,
-					 const std::string &varname,
-					 const std::string &dataname,
-					 size_type region) {
+                                         const std::string &varname,
+                                         const std::string &dataname,
+                                         size_type region) {
     pbrick pbr = new normal_source_term_brick;
     model::termlist tl;
     tl.push_back(model::term_description(varname));
     model::varnamelist vdata(1, dataname);
     return md.add_brick(pbr, model::varnamelist(1, varname),
-			vdata, tl, model::mimlist(1, &mim), region);
+                        vdata, tl, model::mimlist(1, &mim), region);
   }
 
 
@@ -1547,276 +1743,306 @@ namespace getfem {
   struct Dirichlet_condition_brick : public virtual_brick {
 
     bool H_version; // The version hu = r for vector fields.
+    bool normal_component; // Dirichlet on normal component for vector field.
     const mesh_fem *mf_mult_;
     mutable model_real_sparse_matrix rB;
     mutable model_real_plain_vector rV;
     mutable model_complex_sparse_matrix cB;
     mutable model_complex_plain_vector cV;
-    
+
     virtual void asm_real_tangent_terms(const model &md, size_type ib,
-					const model::varnamelist &vl,
-					const model::varnamelist &dl,
-					const model::mimlist &mims,
-					model::real_matlist &matl,
-					model::real_veclist &vecl,
-					model::real_veclist &,
-					size_type region,
-					build_version version) const {
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version version) const {
       GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
-		  "Dirichlet condition brick has one and only one term");
+                  "Dirichlet condition brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Dirichlet condition brick need one and only one mesh_im");
+                  "Dirichlet condition brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2 && dl.size() <= 3,
-		  "Wrong number of variables for Dirichlet condition brick");
+                  "Wrong number of variables for Dirichlet condition brick");
 
       bool penalized = (vl.size() == 1);
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
       const mesh_fem &mf_mult = penalized ? (mf_mult_ ? *mf_mult_ : mf_u)
-	: md.mesh_fem_of_variable(vl[1]);
+        : md.mesh_fem_of_variable(vl[1]);
       const mesh_im &mim = *mims[0];
       const model_real_plain_vector *A = 0, *COEFF = 0, *H = 0;
       const mesh_fem *mf_data = 0, *mf_H = 0;
       bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0)
-	|| (penalized && md.is_var_newer_than_brick(dl[0], ib));
+        || (penalized && md.is_var_newer_than_brick(dl[0], ib));
 
       if (penalized) {
-	COEFF = &(md.real_variable(dl[0]));
-	GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
-		    "Data for coefficient should be a scalar");
+        COEFF = &(md.real_variable(dl[0]));
+        GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
+                    "Data for coefficient should be a scalar");
       }
 
       size_type s = 0, ind = (penalized ? 1 : 0);
       if (dl.size() > ind) {
-	A = &(md.real_variable(dl[ind]));
-	mf_data = md.pmesh_fem_of_variable(dl[ind]);
-	s = gmm::vect_size(*A);
-	if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
-	GMM_ASSERT1(mf_u.get_qdim() == s,
-		    dl[ind] << ": bad format of Dirichlet data. "
-		    "Detected dimension is " << s << " should be "
-		    << size_type(mf_u.get_qdim()));
+        A = &(md.real_variable(dl[ind]));
+        mf_data = md.pmesh_fem_of_variable(dl[ind]);
+        s = gmm::vect_size(*A);
+        if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
+        GMM_ASSERT1(mf_u.get_qdim() ==
+                    s * ((normal_component) ? mf_u.linked_mesh().dim() : 1),
+                    dl[ind] << ": bad format of Dirichlet data. "
+                    "Detected dimension is " << s << " should be "
+                    << size_type(mf_u.get_qdim()));
       }
 
       if (dl.size() > ind + 1) {
-	GMM_ASSERT1(H_version,
-		    "Wrong number of data for Dirichlet condition brick");
-	H = &(md.real_variable(dl[ind+1]));
-	mf_H = md.pmesh_fem_of_variable(dl[ind+1]);
-	s = gmm::vect_size(*A);
+        GMM_ASSERT1(H_version,
+                    "Wrong number of data for Dirichlet condition brick");
+        H = &(md.real_variable(dl[ind+1]));
+        mf_H = md.pmesh_fem_of_variable(dl[ind+1]);
+        s = gmm::vect_size(*A);
     if (mf_H) {
       s = s * mf_H->get_qdim() / mf_H->nb_dof();
       GMM_ASSERT1(mf_H->get_qdim() == 1,  "Implemented only for mf_H "
                   "a scalar finite element method");
     }
-	GMM_ASSERT1(s = gmm::sqr(mf_u.get_qdim()),
-		    dl[ind] << ": bad format of Dirichlet data. "
-		    "Detected dimension is " << s << " should be "
-		    << size_type(gmm::sqr(mf_u.get_qdim())));
+        GMM_ASSERT1(s = gmm::sqr(mf_u.get_qdim()),
+                    dl[ind] << ": bad format of Dirichlet data. "
+                    "Detected dimension is " << s << " should be "
+                    << size_type(gmm::sqr(mf_u.get_qdim())));
       }
 
       mesh_region rg(region);
       mim.linked_mesh().intersect_with_mpi_region(rg);
 
       if (recompute_matrix) {
-	model_real_sparse_matrix *B = &(matl[0]);
-	if (penalized && (&mf_mult != &mf_u)) {
-	  gmm::resize(rB, mf_mult.nb_dof(), mf_u.nb_dof());
-	  gmm::clear(rB);
-	  B = &rB;
-	} else {
-	  gmm::clear(matl[0]);
-	}
-	GMM_TRACE2("Mass term assembly for Dirichlet condition");
-	if (H_version) {
-	  if (mf_H)
-	    asm_real_or_complex_1_param
-	      (*B, mim, mf_mult, *mf_H, *H, rg, (mf_u.get_qdim() == 1) ? 
-	       "F=data(#2);"
-	       "M(#1,#3)+=sym(comp(Base(#1).Base(#3).Base(#2))(:,:,i).F(i))"
-	       : "F=data(qdim(#1),qdim(#1),#2);"
-	       "M(#1,#3)+=sym(comp(vBase(#1).vBase(#3).Base(#2))(:,i,:,j,k).F(i,j,k));", &mf_u);
-	  else
-	     asm_real_or_complex_1_param
-	      (*B, mim, mf_mult, mf_u, *H, rg, (mf_u.get_qdim() == 1) ? 
-	       "F=data(1);"
-	       "M(#1,#2)+=sym(comp(Base(#1).Base(#2)).F(1))"
-	       : "F=data(qdim(#1),qdim(#1));"
-	       "M(#1,#2)+=sym(comp(vBase(#1).vBase(#2))(:,i,:,j).F(i,j));");
-	}
-	else
-	  asm_mass_matrix(*B, mim, mf_mult, mf_u, region);
-      
-	if (penalized && (&mf_mult != &mf_u)) {
-	  gmm::mult(gmm::transposed(rB), rB, matl[0]);
-	  gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
-	} else if (penalized) {
-	  gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
-	}
+        model_real_sparse_matrix *B = &(matl[0]);
+        if (penalized && (&mf_mult != &mf_u)) {
+          gmm::resize(rB, mf_mult.nb_dof(), mf_u.nb_dof());
+          gmm::clear(rB);
+          B = &rB;
+        } else {
+          gmm::clear(matl[0]);
+        }
+        GMM_TRACE2("Mass term assembly for Dirichlet condition");
+        if (H_version) {
+          if (mf_H)
+            asm_real_or_complex_1_param
+              (*B, mim, mf_mult, *mf_H, *H, rg, (mf_u.get_qdim() == 1) ?
+               "F=data(#2);"
+               "M(#1,#3)+=comp(Base(#1).Base(#3).Base(#2)(:,:,i).F(i))"
+               : "F=data(qdim(#1),qdim(#1),#2);"
+               "M(#1,#3)+=comp(vBase(#1).vBase(#3).Base(#2)(:,i,:,j,k).F(i,j,k));", &mf_u);
+          else {
+            asm_real_or_complex_1_param
+              (*B, mim, mf_mult, mf_u, *H, rg, (mf_u.get_qdim() == 1) ?
+               "F=data(1);"
+               "M(#1,#2)+=comp(Base(#1).Base(#2).F(1))"
+               : "F=data(qdim(#1),qdim(#1));"
+               "M(#1,#2)+=comp(vBase(#1).vBase(#2))(:,i,:,j).F(i,j);");
+          }
+        }
+        else if (normal_component) {
+          generic_assembly assem;
+          if (mf_mult.get_qdim() == 1)
+            assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1).Normal())(:,:,i,i);");
+          else
+            assem.set("M(#2,#1)+=comp(vBase(#2).mBase(#1).Normal())(:,i,:,i,j,j);");
+          assem.push_mi(mim);
+          assem.push_mf(mf_u);
+          assem.push_mf(mf_mult);
+          assem.push_mat(*B);
+          assem.assembly(region);
+        } else {
+          asm_mass_matrix(*B, mim, mf_mult, mf_u, region);
+        }
+
+        if (penalized && (&mf_mult != &mf_u)) {
+          gmm::mult(gmm::transposed(rB), rB, matl[0]);
+          gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
+        } else if (penalized) {
+          gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
+        }
       }
 
       if (dl.size() > ind) {
-	GMM_TRACE2("Source term assembly for Dirichlet condition");
-	
-	if (penalized && (&mf_mult != &mf_u)) {
-	  gmm::resize(rV, mf_mult.nb_dof());
-	  gmm::clear(rV);
-	  if (mf_data)
-	    asm_source_term(rV, mim, mf_mult, *mf_data, *A, rg);
-	  else
-	    asm_homogeneous_source_term(rV, mim, mf_mult, *A, rg);
-	} else {
-	  if (mf_data)
-	    asm_source_term(vecl[0], mim, mf_mult, *mf_data, *A, rg);
-	  else
-	    asm_homogeneous_source_term(vecl[0], mim, mf_mult, *A, rg);
-	}
-	
-	if (penalized && (&mf_mult != &mf_u))  {
-	  gmm::mult(gmm::transposed(rB), rV, vecl[0]);
-	  gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
-	  rV = model_real_plain_vector();
-	} else if (penalized)
-	  gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
+        GMM_TRACE2("Source term assembly for Dirichlet condition");
+
+        if (penalized && (&mf_mult != &mf_u)) {
+          gmm::resize(rV, mf_mult.nb_dof());
+          gmm::clear(rV);
+          if (mf_data)
+            asm_source_term(rV, mim, mf_mult, *mf_data, *A, rg);
+          else
+            asm_homogeneous_source_term(rV, mim, mf_mult, *A, rg);
+        } else {
+          if (mf_data)
+            asm_source_term(vecl[0], mim, mf_mult, *mf_data, *A, rg);
+          else
+            asm_homogeneous_source_term(vecl[0], mim, mf_mult, *A, rg);
+        }
+
+        if (penalized && (&mf_mult != &mf_u))  {
+          gmm::mult(gmm::transposed(rB), rV, vecl[0]);
+          gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
+          rV = model_real_plain_vector();
+        } else if (penalized)
+          gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
       }
 
     }
 
     virtual void asm_complex_tangent_terms(const model &md, size_type ib,
-					   const model::varnamelist &vl,
-					   const model::varnamelist &dl,
-					   const model::mimlist &mims,
-					   model::complex_matlist &matl,
-					   model::complex_veclist &vecl,
-					   model::complex_veclist &,
-					   size_type region,
-					   build_version version) const {
+                                           const model::varnamelist &vl,
+                                           const model::varnamelist &dl,
+                                           const model::mimlist &mims,
+                                           model::complex_matlist &matl,
+                                           model::complex_veclist &vecl,
+                                           model::complex_veclist &,
+                                           size_type region,
+                                           build_version version) const {
       GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
-		  "Dirichlet condition brick has one and only one term");
+                  "Dirichlet condition brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Dirichlet condition brick need one and only one mesh_im");
+                  "Dirichlet condition brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2 && dl.size() <= 3,
-		  "Wrong number of variables for Dirichlet condition brick");
+                  "Wrong number of variables for Dirichlet condition brick");
 
       bool penalized = (vl.size() == 1);
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
       const mesh_fem &mf_mult = penalized ? (mf_mult_ ? *mf_mult_ : mf_u)
-	: md.mesh_fem_of_variable(vl[1]);
+        : md.mesh_fem_of_variable(vl[1]);
       const mesh_im &mim = *mims[0];
       const model_complex_plain_vector *A = 0, *COEFF = 0, *H = 0;
       const mesh_fem *mf_data = 0, *mf_H = 0;
       bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0)
-	|| (penalized && md.is_var_newer_than_brick(dl[0], ib));
+        || (penalized && md.is_var_newer_than_brick(dl[0], ib));
 
       if (penalized) {
-	COEFF = &(md.complex_variable(dl[0]));
-	GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
-		    "Data for coefficient should be a scalar");
+        COEFF = &(md.complex_variable(dl[0]));
+        GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
+                    "Data for coefficient should be a scalar");
       }
 
       size_type s = 0, ind = (penalized ? 1 : 0);
       if (dl.size() > ind) {
-	A = &(md.complex_variable(dl[ind]));
-	mf_data = md.pmesh_fem_of_variable(dl[ind]);
-	s = gmm::vect_size(*A);
-	if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
-	GMM_ASSERT1(mf_u.get_qdim() == s,
-		    dl[ind] << ": bad format of Dirichlet data. "
-		    "Detected dimension is " << s << " should be "
-		    << size_type(mf_u.get_qdim()));
+        A = &(md.complex_variable(dl[ind]));
+        mf_data = md.pmesh_fem_of_variable(dl[ind]);
+        s = gmm::vect_size(*A);
+        if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
+        GMM_ASSERT1(mf_u.get_qdim() ==
+                    s * ((normal_component) ? mf_u.linked_mesh().dim() : 1),
+                    dl[ind] << ": bad format of Dirichlet data. "
+                    "Detected dimension is " << s << " should be "
+                    << size_type(mf_u.get_qdim()));
       }
 
       if (dl.size() > ind + 1) {
-	GMM_ASSERT1(H_version,
-		    "Wrong number of data for Dirichlet condition brick");
-	H = &(md.complex_variable(dl[ind+1]));
-	mf_H = md.pmesh_fem_of_variable(dl[ind+1]);
-	s = gmm::vect_size(*A);
-	if (mf_H) {
+        GMM_ASSERT1(H_version,
+                    "Wrong number of data for Dirichlet condition brick");
+        H = &(md.complex_variable(dl[ind+1]));
+        mf_H = md.pmesh_fem_of_variable(dl[ind+1]);
+        s = gmm::vect_size(*A);
+        if (mf_H) {
     s = s * mf_H->get_qdim() / mf_H->nb_dof();
-   	GMM_ASSERT1(mf_H->get_qdim() == 1,  "Implemented only for mf_H "
-		    "a scalar finite element method");
+           GMM_ASSERT1(mf_H->get_qdim() == 1,  "Implemented only for mf_H "
+                    "a scalar finite element method");
   }
-	GMM_ASSERT1(s = gmm::sqr(mf_u.get_qdim()),
-		    dl[ind] << ": bad format of Dirichlet data. "
-		    "Detected dimension is " << s << " should be "
-		    << size_type(gmm::sqr(mf_u.get_qdim())));
+        GMM_ASSERT1(s = gmm::sqr(mf_u.get_qdim()),
+                    dl[ind] << ": bad format of Dirichlet data. "
+                    "Detected dimension is " << s << " should be "
+                    << size_type(gmm::sqr(mf_u.get_qdim())));
       }
 
       mesh_region rg(region);
       mim.linked_mesh().intersect_with_mpi_region(rg);
 
       if (recompute_matrix) {
-	model_complex_sparse_matrix *B = &(matl[0]);
-	if (penalized && (&mf_mult != &mf_u)) {
-	  gmm::resize(cB, mf_mult.nb_dof(), mf_u.nb_dof());
-	  gmm::clear(cB);
-	  B = &cB;
-	} else {
-	  gmm::clear(matl[0]);
-	}
-	GMM_TRACE2("Mass term assembly for Dirichlet condition");
-	if (H_version) {
-	  if (mf_H)
-	    asm_real_or_complex_1_param
-	      (*B, mim, mf_mult, *mf_H, *H, rg, (mf_u.get_qdim() == 1) ? 
-	       "F=data(#2);"
-	       "M(#1,#3)+=sym(comp(Base(#1).Base(#3).Base(#2))(:,:,i).F(i))"
-	       : "F=data(qdim(#1),qdim(#1),#2);"
-	       "M(#1,#3)+=sym(comp(vBase(#1).vBase(#3).Base(#2))(:,i,:,j,k).F(i,j,k));", &mf_u);
-	  else
-	     asm_real_or_complex_1_param
-	      (*B, mim, mf_mult, mf_u, *H, rg, (mf_u.get_qdim() == 1) ? 
-	       "F=data(1);"
-	       "M(#1,#2)+=sym(comp(Base(#1).Base(#2)).F(1))"
-	       : "F=data(qdim(#1),qdim(#1));"
-	       "M(#1,#2)+=sym(comp(vBase(#1).vBase(#2))(:,i,:,j).F(i,j));");
-	}
-	else {
-	  asm_mass_matrix(*B, mim, mf_mult, mf_u, region);
-	}
-	if (penalized && (&mf_mult != &mf_u)) {
-	  gmm::mult(gmm::transposed(cB), cB, matl[0]);
-	  gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
-	} else if (penalized) {
-	  gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
-	}
+        model_complex_sparse_matrix *B = &(matl[0]);
+        if (penalized && (&mf_mult != &mf_u)) {
+          gmm::resize(cB, mf_mult.nb_dof(), mf_u.nb_dof());
+          gmm::clear(cB);
+          B = &cB;
+        } else {
+          gmm::clear(matl[0]);
+        }
+        GMM_TRACE2("Mass term assembly for Dirichlet condition");
+        if (H_version) {
+          if (mf_H)
+            asm_real_or_complex_1_param
+              (*B, mim, mf_mult, *mf_H, *H, rg, (mf_u.get_qdim() == 1) ?
+               "F=data(#2);"
+               "M(#1,#3)+=sym(comp(Base(#1).Base(#3).Base(#2))(:,:,i).F(i))"
+               : "F=data(qdim(#1),qdim(#1),#2);"
+               "M(#1,#3)+=sym(comp(vBase(#1).vBase(#3).Base(#2))(:,i,:,j,k).F(i,j,k));", &mf_u);
+          else
+             asm_real_or_complex_1_param
+              (*B, mim, mf_mult, mf_u, *H, rg, (mf_u.get_qdim() == 1) ?
+               "F=data(1);"
+               "M(#1,#2)+=sym(comp(Base(#1).Base(#2)).F(1))"
+               : "F=data(qdim(#1),qdim(#1));"
+               "M(#1,#2)+=sym(comp(vBase(#1).vBase(#2))(:,i,:,j).F(i,j));");
+        }
+        else if (normal_component) {
+          generic_assembly assem;
+          if (mf_mult.get_qdim() == 1)
+            assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1).Normal())(:,:,i,i);");
+          else
+            assem.set("M(#2,#1)+=comp(vBase(#2).mBase(#1).Normal())(:,i,:,i,j,j);");
+          assem.push_mi(mim);
+          assem.push_mf(mf_u);
+          assem.push_mf(mf_mult);
+          assem.push_mat(gmm::real_part(*B));
+          assem.assembly(region);
+        } else {
+          asm_mass_matrix(*B, mim, mf_mult, mf_u, region);
+        }
+        if (penalized && (&mf_mult != &mf_u)) {
+          gmm::mult(gmm::transposed(cB), cB, matl[0]);
+          gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
+        } else if (penalized) {
+          gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
+        }
       }
 
       if (dl.size() > ind) {
-	GMM_TRACE2("Source term assembly for Dirichlet condition");
-	
-	if (penalized && (&mf_mult != &mf_u)) {
-	  gmm::resize(cV, mf_mult.nb_dof());
-	  gmm::clear(cV);
-	  if (mf_data)
-	    asm_source_term(cV, mim, mf_mult, *mf_data, *A, rg);
-	  else
-	    asm_homogeneous_source_term(cV, mim, mf_mult, *A, rg);
-	} else {
-	  if (mf_data)
-	    asm_source_term(vecl[0], mim, mf_mult, *mf_data, *A, rg);
-	  else
-	    asm_homogeneous_source_term(vecl[0], mim, mf_mult, *A, rg);
-	}
-	
-	if (penalized && (&mf_mult != &mf_u))  {
-	  gmm::mult(gmm::transposed(cB), cV, vecl[0]);
-	  gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
-	  cV = model_complex_plain_vector();
-	} else if (penalized)
-	  gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
+        GMM_TRACE2("Source term assembly for Dirichlet condition");
+
+        if (penalized && (&mf_mult != &mf_u)) {
+          gmm::resize(cV, mf_mult.nb_dof());
+          gmm::clear(cV);
+          if (mf_data)
+            asm_source_term(cV, mim, mf_mult, *mf_data, *A, rg);
+          else
+            asm_homogeneous_source_term(cV, mim, mf_mult, *A, rg);
+        } else {
+          if (mf_data)
+            asm_source_term(vecl[0], mim, mf_mult, *mf_data, *A, rg);
+          else
+            asm_homogeneous_source_term(vecl[0], mim, mf_mult, *A, rg);
+        }
+
+        if (penalized && (&mf_mult != &mf_u))  {
+          gmm::mult(gmm::transposed(cB), cV, vecl[0]);
+          gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
+          cV = model_complex_plain_vector();
+        } else if (penalized)
+          gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
       }
     }
 
     Dirichlet_condition_brick(bool penalized, bool H_version_,
-			      const mesh_fem *mf_mult__ = 0) {
+                              bool normal_component_,
+                              const mesh_fem *mf_mult__ = 0) {
       mf_mult_ = mf_mult__;
       H_version = H_version_;
+      normal_component = normal_component_;
+      GMM_ASSERT1(!(H_version && normal_component), "Bad Dirichlet version");
       set_flags(penalized ? "Dirichlet with penalization brick"
-		          : "Dirichlet with multipliers brick",
-		true /* is linear*/,
-		true /* is symmetric */, penalized /* is coercive */,
-		true /* is real */, true /* is complex */);
+                          : "Dirichlet with multipliers brick",
+                true /* is linear*/,
+                true /* is symmetric */, penalized /* is coercive */,
+                true /* is real */, true /* is complex */);
     }
   };
 
@@ -1824,7 +2050,7 @@ namespace getfem {
   (model &md, const mesh_im &mim, const std::string &varname,
    const std::string &multname, size_type region,
    const std::string &dataname) {
-    pbrick pbr = new Dirichlet_condition_brick(false, false);
+    pbrick pbr = new Dirichlet_condition_brick(false, false, false);
     model::termlist tl;
     tl.push_back(model::term_description(multname, varname, true));
     model::varnamelist vl(1, varname);
@@ -1850,7 +2076,7 @@ namespace getfem {
    const std::string &dataname) {
     const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
     const mesh_fem &mf_mult = classical_mesh_fem(mf_u.linked_mesh(),
-						 degree, mf_u.get_qdim());
+                                                 degree, mf_u.get_qdim());
     return add_Dirichlet_condition_with_multipliers
       (md, mim, varname, mf_mult, region, dataname);
   }
@@ -1861,7 +2087,60 @@ namespace getfem {
 
   size_type add_Dirichlet_condition_with_penalization
   (model &md, const mesh_im &mim, const std::string &varname,
-   scalar_type penalisation_coeff, size_type region, 
+   scalar_type penalisation_coeff, size_type region,
+   const std::string &dataname, const mesh_fem *mf_mult) {
+    std::string coeffname = md.new_name("penalization_on_" + varname);
+    md.add_fixed_size_data(coeffname, 1);
+    if (md.is_complex())
+      md.set_complex_variable(coeffname)[0] = penalisation_coeff;
+    else
+      md.set_real_variable(coeffname)[0] = penalisation_coeff;
+    pbrick pbr = new Dirichlet_condition_brick(true, false, false, mf_mult);
+    model::termlist tl;
+    tl.push_back(model::term_description(varname, varname, true));
+    model::varnamelist vl(1, varname);
+    model::varnamelist dl(1, coeffname);
+    if (dataname.size()) dl.push_back(dataname);
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+  }
+
+  size_type add_normal_Dirichlet_condition_with_multipliers
+  (model &md, const mesh_im &mim, const std::string &varname,
+   const std::string &multname, size_type region,
+   const std::string &dataname) {
+    pbrick pbr = new Dirichlet_condition_brick(false, false, true);
+    model::termlist tl;
+    tl.push_back(model::term_description(multname, varname, true));
+    model::varnamelist vl(1, varname);
+    vl.push_back(multname);
+    model::varnamelist dl;
+    if (dataname.size()) dl.push_back(dataname);
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+  }
+
+  size_type add_normal_Dirichlet_condition_with_multipliers
+  (model &md, const mesh_im &mim, const std::string &varname,
+   const mesh_fem &mf_mult, size_type region,
+   const std::string &dataname) {
+    std::string multname = md.new_name("mult_on_" + varname);
+    md.add_multiplier(multname, mf_mult, varname);
+    return add_normal_Dirichlet_condition_with_multipliers
+      (md, mim, varname, multname, region, dataname);
+  }
+
+  size_type add_normal_Dirichlet_condition_with_multipliers
+  (model &md, const mesh_im &mim, const std::string &varname,
+   dim_type degree, size_type region,
+   const std::string &dataname) {
+    const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
+    const mesh_fem &mf_mult = classical_mesh_fem(mf_u.linked_mesh(),degree, 1);
+    return add_normal_Dirichlet_condition_with_multipliers
+      (md, mim, varname, mf_mult, region, dataname);
+  }
+
+  size_type add_normal_Dirichlet_condition_with_penalization
+  (model &md, const mesh_im &mim, const std::string &varname,
+   scalar_type penalisation_coeff, size_type region,
    const std::string &dataname, const mesh_fem *mf_mult) {
     std::string coeffname = md.new_name("penalization_on_" + varname);
     md.add_fixed_size_data(coeffname, 1);
@@ -1869,7 +2148,7 @@ namespace getfem {
       md.set_complex_variable(coeffname)[0] = penalisation_coeff;
     else
       md.set_real_variable(coeffname)[0] = penalisation_coeff;
-    pbrick pbr = new Dirichlet_condition_brick(true, false, mf_mult);
+    pbrick pbr = new Dirichlet_condition_brick(true, false, true, mf_mult);
     model::termlist tl;
     tl.push_back(model::term_description(varname, varname, true));
     model::varnamelist vl(1, varname);
@@ -1878,11 +2157,12 @@ namespace getfem {
     return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
   }
 
+
   size_type add_generalized_Dirichlet_condition_with_multipliers
   (model &md, const mesh_im &mim, const std::string &varname,
    const std::string &multname, size_type region,
    const std::string &dataname, const std::string &Hname) {
-    pbrick pbr = new Dirichlet_condition_brick(false, true);
+    pbrick pbr = new Dirichlet_condition_brick(false, true, false);
     model::termlist tl;
     tl.push_back(model::term_description(multname, varname, true));
     model::varnamelist vl(1, varname);
@@ -1909,14 +2189,14 @@ namespace getfem {
    const std::string &dataname, const std::string &Hname) {
     const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
     const mesh_fem &mf_mult = classical_mesh_fem(mf_u.linked_mesh(),
-						 degree, mf_u.get_qdim());
+                                                 degree, mf_u.get_qdim());
     return add_generalized_Dirichlet_condition_with_multipliers
       (md, mim, varname, mf_mult, region, dataname, Hname);
   }
 
   size_type add_generalized_Dirichlet_condition_with_penalization
   (model &md, const mesh_im &mim, const std::string &varname,
-   scalar_type penalisation_coeff, size_type region, 
+   scalar_type penalisation_coeff, size_type region,
    const std::string &dataname, const std::string &Hname,
    const mesh_fem *mf_mult) {
     std::string coeffname = md.new_name("penalization_on_" + varname);
@@ -1925,7 +2205,7 @@ namespace getfem {
       md.set_complex_variable(coeffname)[0] = penalisation_coeff;
     else
       md.set_real_variable(coeffname)[0] = penalisation_coeff;
-    pbrick pbr = new Dirichlet_condition_brick(true, true, mf_mult);
+    pbrick pbr = new Dirichlet_condition_brick(true, true, false, mf_mult);
     model::termlist tl;
     tl.push_back(model::term_description(varname, varname, true));
     model::varnamelist vl(1, varname);
@@ -1936,93 +2216,354 @@ namespace getfem {
   }
 
   void change_penalization_coeff(model &md, size_type ind_brick,
-				 scalar_type penalisation_coeff) {
+                                 scalar_type penalisation_coeff) {
     const std::string &coeffname = md.dataname_of_brick(ind_brick, 0);
     if (!md.is_complex()) {
       model_real_plain_vector &d = md.set_real_variable(coeffname);
       GMM_ASSERT1(gmm::vect_size(d)==1,
-		  "Wrong coefficient size, may be not a Dirichlet brick "
-		  "with penalization");
+                  "Wrong coefficient size, may be not a Dirichlet brick "
+                  "with penalization");
       d[0] = penalisation_coeff;
     }
     else {
       model_complex_plain_vector &d = md.set_complex_variable(coeffname);
       GMM_ASSERT1(gmm::vect_size(d)==1,
-		  "Wrong coefficient size, may be not a Dirichlet brick "
-		  "with penalization");
+                  "Wrong coefficient size, may be not a Dirichlet brick "
+                  "with penalization");
       d[0] = penalisation_coeff;
     }
   }
 
-
-
   // ----------------------------------------------------------------------
   //
-  // Helmholtz brick
+  // Pointwise constraints brick
   //
   // ----------------------------------------------------------------------
+  // Two variables : with multipliers
+  // One variable : penalization
 
-  struct Helmholtz_brick : public virtual_brick {
-
-    virtual void asm_real_tangent_terms(const model &md, size_type,
-					const model::varnamelist &vl,
-					const model::varnamelist &dl,
-					const model::mimlist &mims,
-					model::real_matlist &matl,
-					model::real_veclist &,
-					model::real_veclist &,
-					size_type region,
-					build_version) const {
-      GMM_ASSERT1(matl.size() == 1,
-		  "Helmholtz brick has one and only one term");
-      GMM_ASSERT1(mims.size() == 1,
-		  "Helmholtz brick need one and only one mesh_im");
-      GMM_ASSERT1(vl.size() == 1 && dl.size() == 1,
-		  "Wrong number of variables for Helmholtz brick");
+  struct pointwise_constraints_brick : public virtual_brick {
+    
+    mutable gmm::row_matrix<model_real_sparse_vector> rB;
+    mutable gmm::row_matrix<model_complex_sparse_vector> cB;
 
+    virtual void asm_real_tangent_terms(const model &md, size_type ib,
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type,
+                                        build_version version) const {
+      GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
+                  "Pointwize constraints brick only one term");
+      GMM_ASSERT1(mims.size() == 0,
+                  "Pointwize constraints brick does not need a mesh_im");
+      GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2,
+                  "Wrong number of variables for pointwize constraints brick");
+      bool penalized = (vl.size() == 1);
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
-      const mesh &m = mf_u.linked_mesh();
-      size_type Q = mf_u.get_qdim(), s = 1;
-      GMM_ASSERT1(Q == 1, "Helmholtz brick is only for scalar field, sorry.");
-      const mesh_im &mim = *mims[0];
-      const mesh_fem *mf_a = 0;
-      mesh_region rg(region);
-      m.intersect_with_mpi_region(rg);
-      const model_real_plain_vector *A = &(md.real_variable(dl[0]));
-      mf_a = md.pmesh_fem_of_variable(dl[0]);
-      s = gmm::vect_size(*A);
-      if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
+      dim_type N = mf_u.linked_mesh().dim(), Q = mf_u.get_qdim(), ind_pt = 0;
+      size_type dlsize = size_type((penalized ? 1 : 0) + 1 + (Q > 1 ? 1 : 0));
+      GMM_ASSERT1(dl.size() == dlsize || dl.size() == dlsize+1,
+		  "Wrong number of data for pointwize constraints brick");
+
+      
+      const model_real_plain_vector *COEFF = 0;
+      if (penalized) {
+        COEFF = &(md.real_variable(dl[0]));
+	ind_pt = 1;
+        GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
+                    "Data for coefficient should be a scalar");
+      }
+
+      const model_real_plain_vector &PT = md.real_variable(dl[ind_pt]);
+      size_type nb_co = gmm::vect_size(PT) / N;
+      
+      dim_type ind_unitv = dim_type((Q > 1) ? ind_pt+1 : 0);
+      const model_real_plain_vector &unitv =md.real_variable(dl[ind_unitv]);
+      GMM_ASSERT1((!ind_unitv || gmm::vect_size(unitv) == nb_co * Q),
+		  "Wrong size for vector of unit vectors");
+      
+      dim_type ind_rhs = dim_type((Q > 1) ? ind_pt+2 : ind_pt+1);
+      if (dl.size() < size_type(ind_rhs + 1)) ind_rhs = 0;
+      const model_real_plain_vector &rhs =  md.real_variable(dl[ind_rhs]);
+      GMM_ASSERT1((!ind_rhs || gmm::vect_size(rhs) == nb_co),
+		  "Wrong size for vector of rhs");
+
+      
+      bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0)
+        || (penalized && (md.is_var_newer_than_brick(dl[ind_pt], ib)
+			  || md.is_var_newer_than_brick(dl[ind_unitv], ib)
+			  || md.is_var_newer_than_brick(dl[ind_rhs], ib)));
+      
+      if (recompute_matrix) {
+	gmm::row_matrix<model_real_sparse_vector> BB(nb_co*Q, mf_u.nb_dof());
+	gmm::clear(rB); gmm::resize(rB, nb_co, mf_u.nb_dof());
+
+	dal::bit_vector dof_untouched;
+	getfem::mesh_trans_inv mti(mf_u.linked_mesh());
+	base_node pt(N);
+	for (size_type i = 0; i < nb_co; ++i) {
+	  gmm::copy(gmm::sub_vector(PT, gmm::sub_interval(i*N, N)), pt);
+	  mti.add_point(pt);
+	}
+	gmm::row_matrix<model_real_sparse_vector> &BBB = ((Q > 1) ? BB : rB);
+	model_real_plain_vector vv;
+	interpolation(mf_u, mti, vv, vv, BBB,  1, 1, &dof_untouched);
+	GMM_ASSERT1(dof_untouched.card() == 0,
+		    "Pointwize constraints : some of the points are outside "
+		    "the mesh: " << dof_untouched);
+	
+	if (Q > 1) {
+	  for (size_type i = 0; i < nb_co; ++i)
+	    for (size_type q = 0; q < Q; ++q)
+	      gmm::add(gmm::scaled(gmm::mat_row(BB, i*Q+q), unitv[i*Q+q]),
+		       gmm::mat_row(rB, i));
+	}
+        if (penalized) {
+          gmm::mult(gmm::transposed(rB), rB, matl[0]);
+          gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
+        } else
+	  gmm::copy(rB, matl[0]);
+      }
+
+      if (ind_rhs) {
+        if (penalized) {
+          gmm::mult(gmm::transposed(rB), rhs, vecl[0]);
+          gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
+        }
+	else gmm::copy(rhs, vecl[0]);
+      }
+      else gmm::clear(vecl[0]);
+    }
+
+    virtual void asm_complex_tangent_terms(const model &md, size_type ib,
+                                           const model::varnamelist &vl,
+                                           const model::varnamelist &dl,
+                                           const model::mimlist &mims,
+                                           model::complex_matlist &matl,
+                                           model::complex_veclist &vecl,
+                                           model::complex_veclist &,
+                                           size_type,
+                                           build_version version) const {
+      GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
+                  "Pointwize constraints brick only one term");
+      GMM_ASSERT1(mims.size() == 0,
+                  "Pointwize constraints brick does not need a mesh_im");
+      GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2,
+                  "Wrong number of variables for pointwize constraints brick");
+      bool penalized = (vl.size() == 1);
+      const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+      dim_type N = mf_u.linked_mesh().dim(), Q = mf_u.get_qdim(), ind_pt = 0;
+      size_type dlsize = size_type((penalized ? 1 : 0) + 1 + (Q > 1 ? 1 : 0));
+      GMM_ASSERT1(dl.size() == dlsize || dl.size() == dlsize+1,
+		  "Wrong number of data for pointwize constraints brick");
+
+      
+      const model_complex_plain_vector *COEFF = 0;
+      if (penalized) {
+        COEFF = &(md.complex_variable(dl[0]));
+	ind_pt = 1;
+        GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
+                    "Data for coefficient should be a scalar");
+      }
+
+      const model_complex_plain_vector &PT = md.complex_variable(dl[ind_pt]);
+      size_type nb_co = gmm::vect_size(PT) / N;
+      
+      dim_type ind_unitv = dim_type((Q > 1) ? ind_pt+1 : 0);
+      const model_complex_plain_vector &unitv
+	= md.complex_variable(dl[ind_unitv]);
+      GMM_ASSERT1((!ind_unitv || gmm::vect_size(unitv) == nb_co * Q),
+		  "Wrong size for vector of unit vectors");
+      
+      dim_type ind_rhs = dim_type((Q > 1) ? ind_pt+2 : ind_pt+1);
+      if (dl.size() < size_type(ind_rhs + 1)) ind_rhs = 0;
+      const model_complex_plain_vector &rhs
+	= md.complex_variable(dl[ind_rhs]);
+      GMM_ASSERT1((!ind_rhs || gmm::vect_size(rhs) == nb_co),
+		  "Wrong size for vector of rhs");
+      
+      bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0)
+        || (penalized && (md.is_var_newer_than_brick(dl[ind_pt], ib)
+			  || md.is_var_newer_than_brick(dl[ind_unitv], ib)
+			  || md.is_var_newer_than_brick(dl[ind_rhs], ib)));
+
+      if (recompute_matrix) {
+	gmm::row_matrix<model_complex_sparse_vector> BB(nb_co*Q,mf_u.nb_dof());
+	gmm::clear(cB); gmm::resize(cB, nb_co, mf_u.nb_dof());
+	dal::bit_vector dof_untouched;
+	getfem::mesh_trans_inv mti(mf_u.linked_mesh());
+	base_node pt(N);
+	for (size_type i = 0; i < nb_co; ++i) {
+	  gmm::copy(gmm::real_part(gmm::sub_vector(PT,
+				   gmm::sub_interval(i*N, N))), pt);
+	  mti.add_point(pt);
+	}
+	gmm::row_matrix<model_complex_sparse_vector> &BBB = ((Q > 1) ? BB :cB);
+	model_complex_plain_vector vv;
+	interpolation(mf_u, mti, vv, vv, BBB,  1, 1, &dof_untouched);
+	GMM_ASSERT1(dof_untouched.card() == 0,
+		    "Pointwize constraints : some of the points are outside "
+		    "the mesh: " << dof_untouched);
+	
+	if (Q > 1) {
+	  for (size_type i = 0; i < nb_co; ++i)
+	    for (size_type q = 0; q < Q; ++q)
+	      gmm::add(gmm::scaled(gmm::mat_row(BB, i*Q+q), unitv[i*Q+q]),
+		       gmm::mat_row(cB, i));
+	}
+
+        if (penalized) {
+          gmm::mult(gmm::transposed(cB), cB, matl[0]);
+          gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
+        } else
+	  gmm::copy(cB, matl[0]);
+      }
+
+      
+      if (ind_rhs) {
+        if (penalized) {
+          gmm::mult(gmm::transposed(cB), rhs, vecl[0]);
+          gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
+        }
+	else gmm::copy(rhs, vecl[0]);
+      }
+      else gmm::clear(vecl[0]);
+    }
+
+    pointwise_constraints_brick(bool penalized) {
+      set_flags(penalized ? "Pointwise cosntraints with penalization brick"
+                          : "Pointwise cosntraints with multipliers brick",
+                true /* is linear*/,
+                true /* is symmetric */, penalized /* is coercive */,
+                true /* is real */, true /* is complex */);
+    }
+  };
+
+
+  size_type add_pointwise_constraints_with_penalization
+  (model &md, const std::string &varname,
+   scalar_type penalisation_coeff, const std::string &dataname_pt,
+   const std::string &dataname_unitv, const std::string &dataname_val) {
+    std::string coeffname = md.new_name("penalization_on_" + varname);
+    md.add_fixed_size_data(coeffname, 1);
+    if (md.is_complex())
+      md.set_complex_variable(coeffname)[0] = penalisation_coeff;
+    else
+      md.set_real_variable(coeffname)[0] = penalisation_coeff;
+    pbrick pbr = new pointwise_constraints_brick(true);
+    model::termlist tl;
+    tl.push_back(model::term_description(varname, varname, true));
+    model::varnamelist vl(1, varname);
+    model::varnamelist dl(1, coeffname);
+    dl.push_back(dataname_pt);
+    const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
+    if (mf_u.get_qdim() > 1) dl.push_back(dataname_unitv);
+    if (dataname_val.size() > 0) dl.push_back(dataname_val);
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(), size_type(-1));
+  }
+
+  size_type add_pointwise_constraints_with_given_multipliers
+  (model &md, const std::string &varname,
+   const std::string &multname, const std::string &dataname_pt,
+   const std::string &dataname_unitv, const std::string &dataname_val) {
+    pbrick pbr = new  pointwise_constraints_brick(false);
+    model::termlist tl;
+    tl.push_back(model::term_description(multname, varname, true));
+    model::varnamelist vl(1, varname);
+    vl.push_back(multname);
+    model::varnamelist dl(1, dataname_pt);
+    const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
+    if (mf_u.get_qdim() > 1) dl.push_back(dataname_unitv);
+    if (dataname_val.size() > 0) dl.push_back(dataname_val);
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(), size_type(-1));
+  }
+
+  size_type add_pointwise_constraints_with_multipliers
+  (model &md, const std::string &varname, const std::string &dataname_pt,
+   const std::string &dataname_unitv, const std::string &dataname_val) {
+    std::string multname = md.new_name("mult_on_" + varname);
+    const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
+    size_type nb_co =
+      ((md.is_complex()) ? gmm::vect_size(md.complex_variable(dataname_pt))
+       : gmm::vect_size(md.real_variable(dataname_pt)))
+      / mf_u.linked_mesh().dim();
+    md.add_fixed_size_variable(multname, nb_co);
+    return add_pointwise_constraints_with_given_multipliers
+      (md, varname, multname, dataname_pt, dataname_unitv, dataname_val);
+  }
+
+
+  // ----------------------------------------------------------------------
+  //
+  // Helmholtz brick
+  //
+  // ----------------------------------------------------------------------
+
+  struct Helmholtz_brick : public virtual_brick {
+
+    virtual void asm_real_tangent_terms(const model &md, size_type,
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version) const {
+      GMM_ASSERT1(matl.size() == 1,
+                  "Helmholtz brick has one and only one term");
+      GMM_ASSERT1(mims.size() == 1,
+                  "Helmholtz brick need one and only one mesh_im");
+      GMM_ASSERT1(vl.size() == 1 && dl.size() == 1,
+                  "Wrong number of variables for Helmholtz brick");
+
+      const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+      const mesh &m = mf_u.linked_mesh();
+      size_type Q = mf_u.get_qdim(), s = 1;
+      GMM_ASSERT1(Q == 1, "Helmholtz brick is only for scalar field, sorry.");
+      const mesh_im &mim = *mims[0];
+      const mesh_fem *mf_a = 0;
+      mesh_region rg(region);
+      m.intersect_with_mpi_region(rg);
+      const model_real_plain_vector *A = &(md.real_variable(dl[0]));
+      mf_a = md.pmesh_fem_of_variable(dl[0]);
+      s = gmm::vect_size(*A);
+      if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
 
       if (s == 1) {
-	GMM_TRACE2("Stiffness matrix assembly for Helmholtz problem");
-	gmm::clear(matl[0]);
-	model_real_plain_vector A2(gmm::vect_size(*A));
-	for (size_type i=0; i < gmm::vect_size(*A); ++i) // Not valid for 
-	  A2[i] = gmm::sqr((*A)[i]); // non lagrangian fem ...
-	if (mf_a)
-	  asm_Helmholtz(matl[0], mim, mf_u, *mf_a, A2, rg);
-	else
-	  asm_homogeneous_Helmholtz(matl[0], mim, mf_u, A2, rg);
+        GMM_TRACE2("Stiffness matrix assembly for Helmholtz problem");
+        gmm::clear(matl[0]);
+        model_real_plain_vector A2(gmm::vect_size(*A));
+        for (size_type i=0; i < gmm::vect_size(*A); ++i) // Not valid for
+          A2[i] = gmm::sqr((*A)[i]); // non lagrangian fem ...
+        if (mf_a)
+          asm_Helmholtz(matl[0], mim, mf_u, *mf_a, A2, rg);
+        else
+          asm_homogeneous_Helmholtz(matl[0], mim, mf_u, A2, rg);
       } else
-	GMM_ASSERT1(false, "Bad format Helmholtz brick coefficient");
+        GMM_ASSERT1(false, "Bad format Helmholtz brick coefficient");
     }
 
     virtual void asm_complex_tangent_terms(const model &md, size_type,
-					   const model::varnamelist &vl,
-					   const model::varnamelist &dl,
-					   const model::mimlist &mims,
-					   model::complex_matlist &matl,
-					   model::complex_veclist &,
-					   model::complex_veclist &,
-					   size_type region,
-					   build_version) const {
+                                           const model::varnamelist &vl,
+                                           const model::varnamelist &dl,
+                                           const model::mimlist &mims,
+                                           model::complex_matlist &matl,
+                                           model::complex_veclist &,
+                                           model::complex_veclist &,
+                                           size_type region,
+                                           build_version) const {
       GMM_ASSERT1(matl.size() == 1,
-		  "Helmholtz brick has one and only one term");
+                  "Helmholtz brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Helmholtz brick need one and only one mesh_im");
+                  "Helmholtz brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() == 1,
-		  "Wrong number of variables for Helmholtz brick");
-      
+                  "Wrong number of variables for Helmholtz brick");
+
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
       const mesh &m = mf_u.linked_mesh();
       size_type Q = mf_u.get_qdim(), s = 1;
@@ -2037,37 +2578,37 @@ namespace getfem {
       if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
 
       if (s == 1) {
-	GMM_TRACE2("Stiffness matrix assembly for Helmholtz problem");
-	gmm::clear(matl[0]);
-	model_complex_plain_vector A2(gmm::vect_size(*A));
-	for (size_type i=0; i < gmm::vect_size(*A); ++i) // Not valid for 
-	  A2[i] = gmm::sqr((*A)[i]); // non lagrangian fem ...
-	if (mf_a)
-	  asm_Helmholtz(matl[0], mim, mf_u, *mf_a, A2, rg);
-	else
-	  asm_homogeneous_Helmholtz(matl[0], mim, mf_u, A2, rg);
+        GMM_TRACE2("Stiffness matrix assembly for Helmholtz problem");
+        gmm::clear(matl[0]);
+        model_complex_plain_vector A2(gmm::vect_size(*A));
+        for (size_type i=0; i < gmm::vect_size(*A); ++i) // Not valid for
+          A2[i] = gmm::sqr((*A)[i]); // non lagrangian fem ...
+        if (mf_a)
+          asm_Helmholtz(matl[0], mim, mf_u, *mf_a, A2, rg);
+        else
+          asm_homogeneous_Helmholtz(matl[0], mim, mf_u, A2, rg);
       } else
-	GMM_ASSERT1(false, "Bad format Helmholtz brick coefficient");
+        GMM_ASSERT1(false, "Bad format Helmholtz brick coefficient");
     }
 
     Helmholtz_brick(void) {
       set_flags("Helmholtz", true /* is linear*/,
-		true /* is symmetric */, true /* is coercive */,
-		true /* is real */, true /* is complex */);
+                true /* is symmetric */, true /* is coercive */,
+                true /* is real */, true /* is complex */);
     }
 
   };
 
   size_type add_Helmholtz_brick(model &md, const mesh_im &mim,
-				const std::string &varname,
-				const std::string &dataname,
-				size_type region) {
+                                const std::string &varname,
+                                const std::string &dataname,
+                                size_type region) {
     pbrick pbr = new Helmholtz_brick;
     model::termlist tl;
     tl.push_back(model::term_description(varname, varname, true));
     return md.add_brick(pbr, model::varnamelist(1, varname),
-			model::varnamelist(1, dataname), tl,
-			model::mimlist(1, &mim), region);
+                        model::varnamelist(1, dataname), tl,
+                        model::mimlist(1, &mim), region);
   }
 
 
@@ -2081,20 +2622,20 @@ namespace getfem {
   struct Fourier_Robin_brick : public virtual_brick {
 
     virtual void asm_real_tangent_terms(const model &md, size_type,
-					const model::varnamelist &vl,
-					const model::varnamelist &dl,
-					const model::mimlist &mims,
-					model::real_matlist &matl,
-					model::real_veclist &,
-					model::real_veclist &,
-					size_type region,
-					build_version) const {
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version) const {
       GMM_ASSERT1(matl.size() == 1,
-		  "Fourier-Robin brick has one and only one term");
+                  "Fourier-Robin brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Fourier-Robin brick need one and only one mesh_im");
+                  "Fourier-Robin brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() == 1,
-		  "Wrong number of variables for Fourier-Robin brick");
+                  "Wrong number of variables for Fourier-Robin brick");
 
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
       const mesh &m = mf_u.linked_mesh();
@@ -2108,31 +2649,31 @@ namespace getfem {
       s = gmm::vect_size(*A);
       if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
       GMM_ASSERT1(s == Q*Q,
-		  "Bad format Fourier-Robin brick coefficient");
+                  "Bad format Fourier-Robin brick coefficient");
 
       GMM_TRACE2("Fourier-Robin term assembly");
       gmm::clear(matl[0]);
       if (mf_a)
-	asm_qu_term(matl[0], mim, mf_u, *mf_a, *A, rg);
+        asm_qu_term(matl[0], mim, mf_u, *mf_a, *A, rg);
       else
-	asm_homogeneous_qu_term(matl[0], mim, mf_u, *A, rg);
+        asm_homogeneous_qu_term(matl[0], mim, mf_u, *A, rg);
     }
 
     virtual void asm_complex_tangent_terms(const model &md, size_type,
-					   const model::varnamelist &vl,
-					   const model::varnamelist &dl,
-					   const model::mimlist &mims,
-					   model::complex_matlist &matl,
-					   model::complex_veclist &,
-					   model::complex_veclist &,
-					   size_type region,
-					   build_version) const {
+                                           const model::varnamelist &vl,
+                                           const model::varnamelist &dl,
+                                           const model::mimlist &mims,
+                                           model::complex_matlist &matl,
+                                           model::complex_veclist &,
+                                           model::complex_veclist &,
+                                           size_type region,
+                                           build_version) const {
       GMM_ASSERT1(matl.size() == 1,
-		  "Fourier-Robin brick has one and only one term");
+                  "Fourier-Robin brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Fourier-Robin brick need one and only one mesh_im");
+                  "Fourier-Robin brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() == 1,
-		  "Wrong number of variables for Fourier-Robin brick");
+                  "Wrong number of variables for Fourier-Robin brick");
 
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
       const mesh &m = mf_u.linked_mesh();
@@ -2146,44 +2687,244 @@ namespace getfem {
       s = gmm::vect_size(*A);
       if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
       GMM_ASSERT1(s == Q*Q,
-		  "Bad format Fourier-Robin brick coefficient");
-      
+                  "Bad format Fourier-Robin brick coefficient");
+
       GMM_TRACE2("Fourier-Robin term assembly");
       gmm::clear(matl[0]);
       if (mf_a)
-	asm_qu_term(matl[0], mim, mf_u, *mf_a, *A, rg);
+        asm_qu_term(matl[0], mim, mf_u, *mf_a, *A, rg);
       else
-	asm_homogeneous_qu_term(matl[0], mim, mf_u, *A, rg);
+        asm_homogeneous_qu_term(matl[0], mim, mf_u, *A, rg);
     }
 
     Fourier_Robin_brick(void) {
       set_flags("Fourier Robin condition", true /* is linear*/,
-		true /* is symmetric */, true /* is coercive */,
-		true /* is real */, true /* is complex */);
+                true /* is symmetric */, true /* is coercive */,
+                true /* is real */, true /* is complex */);
     }
 
   };
 
   size_type add_Fourier_Robin_brick(model &md, const mesh_im &mim,
-				    const std::string &varname,
-				    const std::string &dataname,
-				    size_type region) {
+                                    const std::string &varname,
+                                    const std::string &dataname,
+                                    size_type region) {
     pbrick pbr = new Fourier_Robin_brick;
     model::termlist tl;
     tl.push_back(model::term_description(varname, varname, true));
     return md.add_brick(pbr, model::varnamelist(1, varname),
-			model::varnamelist(1, dataname), tl,
-			model::mimlist(1, &mim), region);
+                        model::varnamelist(1, dataname), tl,
+                        model::mimlist(1, &mim), region);
   }
 
   // ----------------------------------------------------------------------
   //
+  // Basic nonlinear brick
+  //
+  // ----------------------------------------------------------------------
+      
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
+
+  class basic_nonlinear_term : public nonlinear_elem_term {
+
+  public:
+    dim_type N;
+    const mesh_fem &mf_u;
+    std::vector<scalar_type> U;
+    scalar_type param;
+    base_small_vector V;
+    base_vector coeff;
+    std::string f, dfdu, varname, paramname;
+    mu::Parser parser;
+    bgeot::multi_index sizes_;
+    int version;
+    
+    template <class VECT> basic_nonlinear_term
+    (const mesh_fem &mf_u_, const VECT &U_, scalar_type param_,
+     const std::string &f_, const std::string &dfdu_,
+     const std::string &varname_, const std::string &paramname_,
+     int version_)
+      : N(mf_u_.linked_mesh().dim()), mf_u(mf_u_), U(mf_u.nb_basic_dof()),
+	param(param_), f(f_), dfdu(dfdu_), varname(varname_),
+	paramname(paramname_), version(version_) {
+      sizes_.resize(1); sizes_[0] = 1;
+      V.resize(1);
+      mf_u.extend_vector(U_, U);
+
+      switch (version) {
+      case 0 : parser.SetExpr(dfdu); break; // tangent matrix
+      case 1 : parser.SetExpr(f); break; // rhs
+      }
+      parser.DefineVar(varname, &V[0]);
+      if (paramname.size()) parser.DefineVar(paramname, &param);
+    }
+
+    const bgeot::multi_index &sizes() const { return sizes_; }
+
+    virtual void compute(fem_interpolation_context &ctx,
+			 bgeot::base_tensor &t) {
+      size_type cv = ctx.convex_num();
+      t.adjust_sizes(sizes_);
+      coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+      gmm::copy(gmm::sub_vector
+                (U, gmm::sub_index
+                 (mf_u.ind_basic_dof_of_element(cv))), coeff);
+      ctx.pf()->interpolation(ctx, coeff, V, 1);
+
+      try {
+	t[0] = scalar_type(parser.Eval());
+      } catch (mu::Parser::exception_type &e) {
+	std::cerr << "Message  : " << e.GetMsg()   << std::endl;
+	std::cerr << "Formula  : " << e.GetExpr()  << std::endl;
+	std::cerr << "Token    : " << e.GetToken() << std::endl;
+	std::cerr << "Position : " << e.GetPos()   << std::endl;
+	std::cerr << "Errc     : " << e.GetCode()  << std::endl;
+	GMM_ASSERT1(false, "error in the expressions");
+      }
+    }
+
+  };
+
+  template<typename MAT, typename VECT>
+  void asm_basic_nonlinear_tangent_matrix
+  (const MAT &K, const mesh_im &mim, const mesh_fem &mf_u, const VECT &U,
+   const std::string &f, const std::string &dfdu, const std::string &varname,
+   const mesh_region &rg = mesh_region::all_convexes(),
+   scalar_type param = 0., const std::string &paramname = std::string()) {
+
+    basic_nonlinear_term nterm(mf_u, U, param, f, dfdu, 
+			       varname, paramname, 0);
+
+    generic_assembly assem;
+    assem.set("M(#1,#1)+=sym(comp(NonLin(#1).Base(#1).Base(#1))(i,:,:))");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_nonlinear_term(&nterm);
+    assem.push_mat(const_cast<MAT &>(K));
+    assem.assembly(rg);
+  }
+
+  template<typename VECT>
+  void asm_basic_nonlinear_rhs
+  (const VECT &V, const mesh_im &mim, const mesh_fem &mf_u, const VECT &U,
+   const std::string &f, const std::string &dfdu, const std::string &varname,
+   const mesh_region &rg = mesh_region::all_convexes(),
+   scalar_type param = 0., const std::string &paramname = std::string()) {
+
+    basic_nonlinear_term nterm(mf_u, U, param, f, dfdu,
+			       varname, paramname, 1);
+
+    generic_assembly assem;
+    assem.set("V(#1)+=comp(NonLin(#1).Base(#1))(i,:)");
+    assem.push_mi(mim);
+    assem.push_mf(mf_u);
+    assem.push_nonlinear_term(&nterm);
+    assem.push_vec(const_cast<VECT &>(V));
+    assem.assembly(rg);
+  }
+
+#endif
+
+  struct basic_nonlinear_brick : public virtual_brick {
+
+    std::string f, dfdu;
+    
+    virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version version) const {
+      GMM_ASSERT1(mims.size() == 1,
+		  "basic nonlinear brick needs a single mesh_im");
+      GMM_ASSERT1(vl.size() == 1,
+		  "basic nonlinear brick needs a single variable");
+      GMM_ASSERT1(dl.size() <= 1,
+		  "wrong number of data for basic nonlinear brick");
+      GMM_ASSERT1(matl.size() == 1,  "wrong number of terms for basic "
+		  "nonlinear brick");
+
+      const model_real_plain_vector &u = md.real_variable(vl[0]);
+      const mesh_fem &mf_u = *(md.pmesh_fem_of_variable(vl[0]));
+      size_type Q = mf_u.get_qdim();
+      GMM_ASSERT1(Q == 1, "basic nonlinear brick is only for scalar field, "
+		  "sorry");
+
+      const model_real_plain_vector *vparam = 0;
+      if (dl.size()) {
+	vparam = &md.real_variable(dl[0]) ;
+	size_type sl = gmm::vect_size(*vparam);
+	GMM_ASSERT1(sl == 1, "the parameter in basic nonlinear brick "
+		    "has to be scalar");
+      }
+
+      const mesh_im &mim = *mims[0];
+      mesh_region rg(region);
+      mf_u.linked_mesh().intersect_with_mpi_region(rg);
+
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
+
+      if (version & model::BUILD_MATRIX) {
+	gmm::clear(matl[0]);
+	GMM_TRACE2("basic nonlinear stiffness matrix assembly");
+	if (dl.size())
+	  asm_basic_nonlinear_tangent_matrix(matl[0], mim, mf_u, u, f, dfdu,
+					     vl[0], rg, (*vparam)[0], dl[0]);
+	else
+	  asm_basic_nonlinear_tangent_matrix(matl[0], mim, mf_u, u,
+					     f, dfdu, vl[0], rg);
+      }
+
+      if (version & model::BUILD_RHS) {
+	if (dl.size())
+	  asm_basic_nonlinear_rhs(vecl[0], mim, mf_u, u,
+				  f, dfdu, vl[0], rg, (*vparam)[0], dl[0]);
+	else
+	  asm_basic_nonlinear_rhs(vecl[0], mim, mf_u, u, f, dfdu, vl[0], rg);
+	gmm::scale(vecl[0], scalar_type(-1));
+      }
+      
+#else
+
+    GMM_ASSERT1(false, "Muparser is not installed, "
+                    "you cannot use basic nonlinear brick");
+
+#endif
+    }
+
+    basic_nonlinear_brick(const std::string &f_, const std::string &dfdu_)
+      : f(f_), dfdu(dfdu_)
+    { set_flags("basic nonlinear brick", false /* is linear*/,
+		true /* is symmetric */, false /* is coercive */,
+		true /* is real */, false /* is complex */);
+    }
+    
+  };
+
+  size_type add_basic_nonlinear_brick
+  (model &md, const mesh_im &mim, const std::string &varname,
+   const std::string &f, const std::string &dfdu, size_type region,
+   const std::string &dataname) {
+    pbrick pbr = new basic_nonlinear_brick(f, dfdu);
+    model::termlist tl;
+    tl.push_back(model::term_description(varname, varname, true));
+    model::varnamelist vl(1, varname);
+    model::varnamelist dl;
+    if (dataname.size()) dl.push_back(dataname);
+    return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+  }
+    
+  // ----------------------------------------------------------------------
+  //
   // Constraint brick
   //
   // ----------------------------------------------------------------------
 
   struct have_private_data_brick : public virtual_brick {
-    
+
     model_real_sparse_matrix rB;
     model_complex_sparse_matrix cB;
     model_real_plain_vector rL;
@@ -2192,87 +2933,82 @@ namespace getfem {
   };
 
   struct constraint_brick : public have_private_data_brick {
-    
+
     virtual void asm_real_tangent_terms(const model &md, size_type,
-					const model::varnamelist &vl,
-					const model::varnamelist &dl,
-					const model::mimlist &mims,
-					model::real_matlist &matl,
-					model::real_veclist &vecl,
-					model::real_veclist &,
-					size_type, build_version) const {
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type, build_version) const {
       GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
-		  "Constraint brick has one and only one term");
+                  "Constraint brick has one and only one term");
       GMM_ASSERT1(mims.size() == 0,
-		  "Constraint brick need no mesh_im");
+                  "Constraint brick need no mesh_im");
       GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2 && dl.size() <= 1,
-		  "Wrong number of variables for constraint brick");
+                  "Wrong number of variables for constraint brick");
 
       bool penalized = (vl.size() == 1);
       const model_real_plain_vector *COEFF = 0;
 
       if (penalized) {
-	COEFF = &(md.real_variable(dl[0]));
-	GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
-		    "Data for coefficient should be a scalar");
-      }
-
-      if (penalized) {
-	gmm::mult(gmm::transposed(rB), gmm::scaled(rL, gmm::abs((*COEFF)[0])),
-		  vecl[0]);
-	gmm::mult(gmm::transposed(rB), gmm::scaled(rB, gmm::abs((*COEFF)[0])),
-		  matl[0]);
+        COEFF = &(md.real_variable(dl[0]));
+        GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
+                    "Data for coefficient should be a scalar");
+
+        gmm::mult(gmm::transposed(rB), gmm::scaled(rL, gmm::abs((*COEFF)[0])),
+                  vecl[0]);
+        gmm::mult(gmm::transposed(rB), gmm::scaled(rB, gmm::abs((*COEFF)[0])),
+                  matl[0]);
       } else {
-	gmm::copy(rL, vecl[0]);
-	gmm::copy(rB, matl[0]);
+        gmm::copy(rL, vecl[0]);
+        gmm::copy(rB, matl[0]);
       }
     }
 
     virtual void asm_complex_tangent_terms(const model &md, size_type,
-					   const model::varnamelist &vl,
-					   const model::varnamelist &dl,
-					   const model::mimlist &mims,
-					   model::complex_matlist &matl,
-					   model::complex_veclist &vecl,
-					   model::complex_veclist &,
-					   size_type,
-					   build_version) const {
+                                           const model::varnamelist &vl,
+                                           const model::varnamelist &dl,
+                                           const model::mimlist &mims,
+                                           model::complex_matlist &matl,
+                                           model::complex_veclist &vecl,
+                                           model::complex_veclist &,
+                                           size_type,
+                                           build_version) const {
       GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
-		  "Constraint brick has one and only one term");
+                  "Constraint brick has one and only one term");
       GMM_ASSERT1(mims.size() == 0,
-		  "Constraint brick need no mesh_im");
+                  "Constraint brick need no mesh_im");
       GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2 && dl.size() <= 1,
-		  "Wrong number of variables for constraint brick");
-      
+                  "Wrong number of variables for constraint brick");
+
       bool penalized = (vl.size() == 1);
       const model_complex_plain_vector *COEFF = 0;
 
       if (penalized) {
-	COEFF = &(md.complex_variable(dl[0]));
-	GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
-		    "Data for coefficient should be a scalar");
-      }
-
-      if (penalized) {
-	gmm::mult(gmm::transposed(cB), gmm::scaled(cL, gmm::abs((*COEFF)[0])),
-		  vecl[0]);
-	gmm::mult(gmm::transposed(cB), gmm::scaled(cB, gmm::abs((*COEFF)[0])),
-		  matl[0]);
+        COEFF = &(md.complex_variable(dl[0]));
+        GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
+                    "Data for coefficient should be a scalar");
+
+        gmm::mult(gmm::transposed(cB), gmm::scaled(cL, gmm::abs((*COEFF)[0])),
+                  vecl[0]);
+        gmm::mult(gmm::transposed(cB), gmm::scaled(cB, gmm::abs((*COEFF)[0])),
+                  matl[0]);
       } else {
-	gmm::copy(cL, vecl[0]);
-	gmm::copy(cB, matl[0]);
+        gmm::copy(cL, vecl[0]);
+        gmm::copy(cB, matl[0]);
       }
     }
 
     constraint_brick(bool penalized) {
       set_flags(penalized ? "Constraint with penalization brick"
-		          : "Constraint with multipliers brick",
-		true /* is linear*/,
-		true /* is symmetric */, penalized /* is coercive */,
-		true /* is real */, true /* is complex */);
+                          : "Constraint with multipliers brick",
+                true /* is linear*/,
+                true /* is symmetric */, penalized /* is coercive */,
+                true /* is real */, true /* is complex */);
     }
 
-
   };
 
   model_real_sparse_matrix &set_private_data_brick_real_matrix
@@ -2330,7 +3066,7 @@ namespace getfem {
     model::varnamelist dl(1, coeffname);
     return md.add_brick(pbr, vl, dl, tl, model::mimlist(), size_type(-1));
   }
-  
+
   size_type add_constraint_with_multipliers
   (model &md, const std::string &varname, const std::string &multname) {
     pbrick pbr = new constraint_brick(false);
@@ -2350,45 +3086,46 @@ namespace getfem {
   // ----------------------------------------------------------------------
 
   struct explicit_matrix_brick : public have_private_data_brick {
-    
+
     virtual void asm_real_tangent_terms(const model &, size_type,
-					const model::varnamelist &vl,
-					const model::varnamelist &dl,
-					const model::mimlist &mims,
-					model::real_matlist &matl,
-					model::real_veclist &vecl,
-					model::real_veclist &,
-					size_type, build_version) const {
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type, build_version) const {
       GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
-		  "Explicit matrix has one and only one term");
+                  "Explicit matrix has one and only one term");
       GMM_ASSERT1(mims.size() == 0, "Explicit matrix need no mesh_im");
       GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2 && dl.size() == 0,
-		  "Wrong number of variables for explicit matrix brick");
+                  "Wrong number of variables for explicit matrix brick");
       gmm::copy(rB, matl[0]);
     }
 
     virtual void asm_complex_tangent_terms(const model &, size_type,
-					   const model::varnamelist &vl,
-					   const model::varnamelist &dl,
-					   const model::mimlist &mims,
-					   model::complex_matlist &matl,
-					   model::complex_veclist &vecl,
-					   model::complex_veclist &,
-					   size_type,
-					   build_version) const {
+                                           const model::varnamelist &vl,
+                                           const model::varnamelist &dl,
+                                           const model::mimlist &mims,
+                                           model::complex_matlist &matl,
+                                           model::complex_veclist &vecl,
+                                           model::complex_veclist &,
+                                           size_type,
+                                           build_version) const {
       GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
-		  "Explicit matrix has one and only one term");
+                  "Explicit matrix has one and only one term");
       GMM_ASSERT1(mims.size() == 0, "Explicit matrix need no mesh_im");
       GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2 && dl.size() == 0,
-		  "Wrong number of variables for explicit matrix brick");
+                  "Wrong number of variables for explicit matrix brick");
       gmm::copy(cB, matl[0]);
     }
 
     explicit_matrix_brick(bool symmetric_, bool coercive_) {
       set_flags("Explicit matrix brick",
-		true /* is linear*/,
-		symmetric_ /* is symmetric */, coercive_ /* is coercive */,
-		true /* is real */, true /* is complex */);
+                true /* is linear*/,
+                symmetric_ /* is symmetric */, coercive_ /* is coercive */,
+                true /* is real */, true /* is complex */,
+                true /* is to be computed each time */);
     }
   };
 
@@ -2411,49 +3148,49 @@ namespace getfem {
   // ----------------------------------------------------------------------
 
   struct explicit_rhs_brick : public have_private_data_brick {
-    
+
     virtual void asm_real_tangent_terms(const model &, size_type,
-					const model::varnamelist &vl,
-					const model::varnamelist &dl,
-					const model::mimlist &mims,
-					model::real_matlist &matl,
-					model::real_veclist &vecl,
-					model::real_veclist &,
-					size_type, build_version) const {
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type, build_version) const {
       GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
-		  "Explicit rhs has one and only one term");
+                  "Explicit rhs has one and only one term");
       GMM_ASSERT1(mims.size() == 0, "Explicit rhs need no mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() == 0,
-		  "Wrong number of variables for explicit rhs brick");
+                  "Wrong number of variables for explicit rhs brick");
       gmm::copy(rL, vecl[0]);
     }
 
     virtual void asm_complex_tangent_terms(const model &, size_type,
-					   const model::varnamelist &vl,
-					   const model::varnamelist &dl,
-					   const model::mimlist &mims,
-					   model::complex_matlist &matl,
-					   model::complex_veclist &vecl,
-					   model::complex_veclist &,
-					   size_type,
-					   build_version) const {
+                                           const model::varnamelist &vl,
+                                           const model::varnamelist &dl,
+                                           const model::mimlist &mims,
+                                           model::complex_matlist &matl,
+                                           model::complex_veclist &vecl,
+                                           model::complex_veclist &,
+                                           size_type,
+                                           build_version) const {
       GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
-		  "Explicit rhs has one and only one term");
+                  "Explicit rhs has one and only one term");
       GMM_ASSERT1(mims.size() == 0, "Explicit rhs need no mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() == 0,
-		  "Wrong number of variables for explicit rhs brick");
+                  "Wrong number of variables for explicit rhs brick");
       gmm::copy(cL, vecl[0]);
-      
+
     }
 
     explicit_rhs_brick(void) {
       set_flags("Explicit rhs brick",
-		true /* is linear*/,
-		true /* is symmetric */, true /* is coercive */,
-		true /* is real */, true /* is complex */);
+                true /* is linear*/,
+                true /* is symmetric */, true /* is coercive */,
+                true /* is real */, true /* is complex */,
+                true /* is to be computed each time */);
     }
 
-
   };
 
   size_type add_explicit_rhs
@@ -2476,84 +3213,83 @@ namespace getfem {
   struct iso_lin_elasticity_brick : public virtual_brick {
 
     virtual void asm_real_tangent_terms(const model &md, size_type ib,
-					const model::varnamelist &vl,
-					const model::varnamelist &dl,
-					const model::mimlist &mims,
-					model::real_matlist &matl,
-					model::real_veclist &vecl,
-					model::real_veclist &,
-					size_type region,
-					build_version version) const {
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version version) const {
       GMM_ASSERT1(matl.size() == 1,
-		  "isotropic linearized elasticity brick has one and only "
-		  "one term");
+                  "isotropic linearized elasticity brick has one and only "
+                  "one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "isotropic linearized elasticity brick need one and only "
-		  "one mesh_im");
+                  "isotropic linearized elasticity brick need one and only "
+                  "one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() >= 2 && dl.size() <= 3,
-		  "Wrong number of variables for isotropic linearized "
-		  "elasticity brick");
+                  "Wrong number of variables for isotropic linearized "
+                  "elasticity brick");
 
       bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0)
-	|| md.is_var_newer_than_brick(dl[0], ib)
-	|| md.is_var_newer_than_brick(dl[1], ib);
+        || md.is_var_newer_than_brick(dl[0], ib)
+        || md.is_var_newer_than_brick(dl[1], ib);
 
       if (recompute_matrix) {
 
-	const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
-	const mesh &m = mf_u.linked_mesh();
-	size_type N = m.dim(), Q = mf_u.get_qdim();
-	GMM_ASSERT1(Q == N, "isotropic linearized elasticity brick is only "
-		    "for vector field of the same dimension as the mesh");
-	const mesh_im &mim = *mims[0];
-	mesh_region rg(region);
-	m.intersect_with_mpi_region(rg);
-	const mesh_fem *mf_lambda = md.pmesh_fem_of_variable(dl[0]);
-	const model_real_plain_vector *lambda = &(md.real_variable(dl[0]));
-	const mesh_fem *mf_mu = md.pmesh_fem_of_variable(dl[1]);
-	const model_real_plain_vector *mu = &(md.real_variable(dl[1]));
-	
-	size_type sl = gmm::vect_size(*lambda);
-	if (mf_lambda) sl = sl * mf_lambda->get_qdim() / mf_lambda->nb_dof();
-	size_type sm = gmm::vect_size(*mu);
-	if (mf_mu) sm = sm * mf_mu->get_qdim() / mf_mu->nb_dof();
-	
-	GMM_ASSERT1(sl == 1 && sm == 1, "Bad format of isotropic linearized "
-		    "elasticity brick coefficients");
-	GMM_ASSERT1(mf_lambda == mf_mu,
-		    "The two coefficients should be described on the same "
-		    "finite element method.");
-	
-	GMM_TRACE2("Stiffness matrix assembly for isotropic linearized "
-		   "elasticity");
-	gmm::clear(matl[0]);
-	if (mf_lambda)
-	  asm_stiffness_matrix_for_linear_elasticity
-	    (matl[0], mim, mf_u, *mf_lambda, *lambda, *mu, rg);
-	else
-	  asm_stiffness_matrix_for_homogeneous_linear_elasticity
-	    (matl[0], mim, mf_u, *lambda, *mu, rg);
+        const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+        const mesh &m = mf_u.linked_mesh();
+        size_type N = m.dim(), Q = mf_u.get_qdim();
+        GMM_ASSERT1(Q == N, "isotropic linearized elasticity brick is only "
+                    "for vector field of the same dimension as the mesh");
+        const mesh_im &mim = *mims[0];
+        mesh_region rg(region);
+        m.intersect_with_mpi_region(rg);
+        const mesh_fem *mf_lambda = md.pmesh_fem_of_variable(dl[0]);
+        const model_real_plain_vector *lambda = &(md.real_variable(dl[0]));
+        const mesh_fem *mf_mu = md.pmesh_fem_of_variable(dl[1]);
+        const model_real_plain_vector *mu = &(md.real_variable(dl[1]));
+
+        size_type sl = gmm::vect_size(*lambda);
+        if (mf_lambda) sl = sl * mf_lambda->get_qdim() / mf_lambda->nb_dof();
+        size_type sm = gmm::vect_size(*mu);
+        if (mf_mu) sm = sm * mf_mu->get_qdim() / mf_mu->nb_dof();
+
+        GMM_ASSERT1(sl == 1 && sm == 1, "Bad format of isotropic linearized "
+                    "elasticity brick coefficients");
+        GMM_ASSERT1(mf_lambda == mf_mu,
+                    "The two coefficients should be described on the same "
+                    "finite element method.");
+
+        GMM_TRACE2("Stiffness matrix assembly for isotropic linearized "
+                   "elasticity");
+        gmm::clear(matl[0]);
+        if (mf_lambda)
+          asm_stiffness_matrix_for_linear_elasticity
+            (matl[0], mim, mf_u, *mf_lambda, *lambda, *mu, rg);
+        else
+          asm_stiffness_matrix_for_homogeneous_linear_elasticity
+            (matl[0], mim, mf_u, *lambda, *mu, rg);
       }
 
       if  (dl.size() == 3) { // Pre-constraints given by an "initial"
-	// displacement u0. Means that the computed displacement will be u - u0
-	// The displacement u0 should be discribed on the same fem as the
-	// variable.
-	gmm::mult(matl[0],
-		  gmm::scaled(md.real_variable(dl[2]), scalar_type(-1)),
-		  vecl[0]);
-
+        // displacement u0. Means that the computed displacement will be u - u0
+        // The displacement u0 should be discribed on the same fem as the
+        // variable.
+        gmm::mult(matl[0],
+                  gmm::scaled(md.real_variable(dl[2]), scalar_type(-1)),
+                  vecl[0]);
       }
     }
 
     virtual scalar_type asm_real_pseudo_potential(const model &md, size_type,
-						  const model::varnamelist &vl,
-						  const model::varnamelist &,
-						  const model::mimlist &,
-						  model::real_matlist &matl,
-						  model::real_veclist &,
-						  model::real_veclist &,
-						  size_type) const {
+                                                  const model::varnamelist &vl,
+                                                  const model::varnamelist &,
+                                                  const model::mimlist &,
+                                                  model::real_matlist &matl,
+                                                  model::real_veclist &,
+                                                  model::real_veclist &,
+                                                  size_type) const {
       const model_real_plain_vector &u = md.real_variable(vl[0]);
       return gmm::vect_sp(matl[0], u, u) / scalar_type(2);
     }
@@ -2561,8 +3297,8 @@ namespace getfem {
 
     iso_lin_elasticity_brick(void) {
       set_flags("isotropic linearized elasticity", true /* is linear*/,
-		true /* is symmetric */, true /* is coercive */,
-		true /* is real */, false /* is complex */);
+                true /* is symmetric */, true /* is coercive */,
+                true /* is real */, false /* is complex */);
     }
 
   };
@@ -2578,12 +3314,12 @@ namespace getfem {
     dl.push_back(dataname2);
     if (dataname3.size()) dl.push_back(dataname3);
     return md.add_brick(pbr, model::varnamelist(1, varname), dl, tl,
-			model::mimlist(1, &mim), region);
+                        model::mimlist(1, &mim), region);
   }
 
   void compute_isotropic_linearized_Von_Mises_or_Tresca
   (model &md, const std::string &varname, const std::string &dataname_lambda,
-   const std::string &dataname_mu, const mesh_fem &mf_vm, 
+   const std::string &dataname_mu, const mesh_fem &mf_vm,
    model_real_plain_vector &VM, bool tresca) {
 
     const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
@@ -2591,32 +3327,32 @@ namespace getfem {
     const model_real_plain_vector *lambda=&(md.real_variable(dataname_lambda));
     const mesh_fem *mf_mu = md.pmesh_fem_of_variable(dataname_mu);
     const model_real_plain_vector *mu = &(md.real_variable(dataname_mu));
-   
+
     size_type sl = gmm::vect_size(*lambda);
     if (mf_lambda) sl = sl * mf_lambda->get_qdim() / mf_lambda->nb_dof();
     size_type sm = gmm::vect_size(*mu);
     if (mf_mu) sm = sm * mf_mu->get_qdim() / mf_mu->nb_dof();
-    
+
     GMM_ASSERT1(sl == 1 && sm == 1, "Bad format for Lamé coefficients");
     GMM_ASSERT1(mf_lambda == mf_mu,
-		"The two Lamé coefficients should be described on the same "
-		"finite element method.");
+                "The two Lamé coefficients should be described on the same "
+                "finite element method.");
 
     if (mf_lambda) {
       getfem::interpolation_von_mises_or_tresca(mf_u, mf_vm,
-						md.real_variable(varname), VM,
-						*mf_lambda, *lambda,
-						*mf_lambda, *mu,
-						tresca);
+                                                md.real_variable(varname), VM,
+                                                *mf_lambda, *lambda,
+                                                *mf_lambda, *mu,
+                                                tresca);
     } else {
       mf_lambda = &(classical_mesh_fem(mf_u.linked_mesh(), 0));
       model_real_plain_vector LAMBDA(mf_lambda->nb_dof(), (*lambda)[0]);
       model_real_plain_vector MU(mf_lambda->nb_dof(), (*mu)[0]);
       getfem::interpolation_von_mises_or_tresca(mf_u, mf_vm,
-						md.real_variable(varname), VM,
-						*mf_lambda, LAMBDA,
-						*mf_lambda, MU,
-						tresca);
+                                                md.real_variable(varname), VM,
+                                                *mf_lambda, LAMBDA,
+                                                *mf_lambda, MU,
+                                                tresca);
     }
   }
 
@@ -2627,25 +3363,25 @@ namespace getfem {
   // ----------------------------------------------------------------------
 
   struct linear_incompressibility_brick : public virtual_brick {
-    
+
     virtual void asm_real_tangent_terms(const model &md, size_type,
-					const model::varnamelist &vl,
-					const model::varnamelist &dl,
-					const model::mimlist &mims,
-					model::real_matlist &matl,
-					model::real_veclist &,
-					model::real_veclist &,
-					size_type region,
-					build_version) const {
-      
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version) const {
+
       GMM_ASSERT1((matl.size() == 1 && dl.size() == 0)
-		  || (matl.size() == 2 && dl.size() == 1),
-		  "Wrong term and/or data number for Linear incompressibility "
-		  "brick.");
+                  || (matl.size() == 2 && dl.size() == 1),
+                  "Wrong term and/or data number for Linear incompressibility "
+                  "brick.");
       GMM_ASSERT1(mims.size() == 1, "Linear incompressibility brick need one "
-		  "and only one mesh_im");
+                  "and only one mesh_im");
       GMM_ASSERT1(vl.size() == 2, "Wrong number of variables for linear "
-		  "incompressibility brick");
+                  "incompressibility brick");
 
       bool penalized = (dl.size() == 1);
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
@@ -2655,11 +3391,11 @@ namespace getfem {
       const mesh_fem *mf_data = 0;
 
       if (penalized) {
-	COEFF = &(md.real_variable(dl[0]));
-	mf_data = md.pmesh_fem_of_variable(dl[0]);
-	size_type s = gmm::vect_size(*COEFF);
-	if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
-	GMM_ASSERT1(s == 1, "Bad format for the penalization parameter");
+        COEFF = &(md.real_variable(dl[0]));
+        mf_data = md.pmesh_fem_of_variable(dl[0]);
+        size_type s = gmm::vect_size(*COEFF);
+        if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
+        GMM_ASSERT1(s == 1, "Bad format for the penalization parameter");
       }
 
       mesh_region rg(region);
@@ -2670,27 +3406,26 @@ namespace getfem {
       asm_stokes_B(matl[0], mim, mf_u, mf_p, rg);
 
       if (penalized) {
-	gmm::clear(matl[1]);
-	if (mf_data) {
-	  asm_mass_matrix_param(matl[1], mim, mf_p, *mf_data, *COEFF, rg);
-	  gmm::scale(matl[1], scalar_type(-1));
-	}
-	else {
-	  asm_mass_matrix(matl[1], mim, mf_p, rg);
-	  gmm::scale(matl[1], -(*COEFF)[0]);
-	}
+        gmm::clear(matl[1]);
+        if (mf_data) {
+          asm_mass_matrix_param(matl[1], mim, mf_p, *mf_data, *COEFF, rg);
+          gmm::scale(matl[1], scalar_type(-1));
+        }
+        else {
+          asm_mass_matrix(matl[1], mim, mf_p, rg);
+          gmm::scale(matl[1], -(*COEFF)[0]);
+        }
       }
 
     }
 
     linear_incompressibility_brick(void) {
       set_flags("Linear incompressibility brick",
-		true /* is linear*/,
-		true /* is symmetric */, false /* is coercive */,
-		true /* is real */, false /* is complex */);
+                true /* is linear*/,
+                true /* is symmetric */, false /* is coercive */,
+                true /* is real */, false /* is complex */);
     }
 
-
   };
 
   size_type add_linear_incompressibility
@@ -2721,111 +3456,111 @@ namespace getfem {
   struct mass_brick : public virtual_brick {
 
     virtual void asm_real_tangent_terms(const model &md, size_type,
-					const model::varnamelist &vl,
-					const model::varnamelist &dl,
-					const model::mimlist &mims,
-					model::real_matlist &matl,
-					model::real_veclist &,
-					model::real_veclist &,
-					size_type region,
-					build_version) const {
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version) const {
       GMM_ASSERT1(matl.size() == 1,
-		  "Mass brick has one and only one term");
+                  "Mass brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Mass brick need one and only one mesh_im");
+                  "Mass brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() <= 1,
-		  "Wrong number of variables for mass brick");
+                  "Wrong number of variables for mass brick");
 
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
       const mesh &m = mf_u.linked_mesh();
       const mesh_im &mim = *mims[0];
       mesh_region rg(region);
       m.intersect_with_mpi_region(rg);
-      
+
       const mesh_fem *mf_rho = 0;
       const model_real_plain_vector *rho = 0;
 
       if (dl.size()) {
-	mf_rho = md.pmesh_fem_of_variable(dl[0]);
-	rho = &(md.real_variable(dl[0]));
-	size_type sl = gmm::vect_size(*rho);
-	if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
-	GMM_ASSERT1(sl == 1, "Bad format of mass brick coefficient");
+        mf_rho = md.pmesh_fem_of_variable(dl[0]);
+        rho = &(md.real_variable(dl[0]));
+        size_type sl = gmm::vect_size(*rho);
+        if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
+        GMM_ASSERT1(sl == 1, "Bad format of mass brick coefficient");
       }
 
       GMM_TRACE2("Mass matrix assembly");
       gmm::clear(matl[0]);
       if (dl.size() && mf_rho) {
-	asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
+        asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
       } else {
-	asm_mass_matrix(matl[0], mim, mf_u, rg);
-	if (dl.size()) gmm::scale(matl[0], (*rho)[0]);
+        asm_mass_matrix(matl[0], mim, mf_u, rg);
+        if (dl.size()) gmm::scale(matl[0], (*rho)[0]);
       }
     }
 
     virtual scalar_type asm_real_pseudo_potential(const model &md, size_type,
-						  const model::varnamelist &vl,
-						  const model::varnamelist &,
-						  const model::mimlist &,
-						  model::real_matlist &matl,
-						  model::real_veclist &,
-						  model::real_veclist &,
-						  size_type) const {
+                                                  const model::varnamelist &vl,
+                                                  const model::varnamelist &,
+                                                  const model::mimlist &,
+                                                  model::real_matlist &matl,
+                                                  model::real_veclist &,
+                                                  model::real_veclist &,
+                                                  size_type) const {
       const model_real_plain_vector &U = md.real_variable(vl[0]);
       return gmm::vect_sp(matl[0], U, U) / scalar_type(2);
     }
 
     virtual void asm_complex_tangent_terms(const model &md, size_type,
-					   const model::varnamelist &vl,
-					   const model::varnamelist &dl,
-					   const model::mimlist &mims,
-					   model::complex_matlist &matl,
-					   model::complex_veclist &,
-					   model::complex_veclist &,
-					   size_type region,
-					   build_version) const {
+                                           const model::varnamelist &vl,
+                                           const model::varnamelist &dl,
+                                           const model::mimlist &mims,
+                                           model::complex_matlist &matl,
+                                           model::complex_veclist &,
+                                           model::complex_veclist &,
+                                           size_type region,
+                                           build_version) const {
       GMM_ASSERT1(matl.size() == 1,
-		  "Mass brick has one and only one term");
+                  "Mass brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Mass brick need one and only one mesh_im");
+                  "Mass brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() <= 1,
-		  "Wrong number of variables for mass brick");
-      
+                  "Wrong number of variables for mass brick");
+
       const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
       const mesh &m = mf_u.linked_mesh();
       const mesh_im &mim = *mims[0];
       mesh_region rg(region);
       m.intersect_with_mpi_region(rg);
-      
+
       const mesh_fem *mf_rho = 0;
       const model_complex_plain_vector *rho = 0;
-      
+
       if (dl.size()) {
-	mf_rho = md.pmesh_fem_of_variable(dl[0]);
-	rho = &(md.complex_variable(dl[0]));
-	size_type sl = gmm::vect_size(*rho);
-	if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
-	GMM_ASSERT1(sl == 1, "Bad format of mass brick coefficient");
+        mf_rho = md.pmesh_fem_of_variable(dl[0]);
+        rho = &(md.complex_variable(dl[0]));
+        size_type sl = gmm::vect_size(*rho);
+        if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
+        GMM_ASSERT1(sl == 1, "Bad format of mass brick coefficient");
       }
-      
+
       GMM_TRACE2("Mass matrix assembly");
       gmm::clear(matl[0]);
       if (dl.size() && mf_rho) {
-	asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
+        asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
       } else {
-	asm_mass_matrix(matl[0], mim, mf_u, rg);
-	if (dl.size()) gmm::scale(matl[0], (*rho)[0]);
+        asm_mass_matrix(matl[0], mim, mf_u, rg);
+        if (dl.size()) gmm::scale(matl[0], (*rho)[0]);
       }
     }
 
     virtual scalar_type asm_complex_pseudo_potential(const model &md,size_type,
-						  const model::varnamelist &vl,
-						  const model::varnamelist &,
-						  const model::mimlist &,
-						  model::complex_matlist &matl,
-						  model::complex_veclist &,
-						  model::complex_veclist &,
-						  size_type) const {
+                                                  const model::varnamelist &vl,
+                                                  const model::varnamelist &,
+                                                  const model::mimlist &,
+                                                  model::complex_matlist &matl,
+                                                  model::complex_veclist &,
+                                                  model::complex_veclist &,
+                                                  size_type) const {
       const model_complex_plain_vector &U = md.complex_variable(vl[0]);
       return gmm::real(gmm::vect_hp(matl[0], U, U) / scalar_type(2));
     }
@@ -2833,8 +3568,8 @@ namespace getfem {
 
     mass_brick(void) {
       set_flags("Mass brick", true /* is linear*/,
-		true /* is symmetric */, true /* is coercive */,
-		true /* is real */, true /* is complex */);
+                true /* is symmetric */, true /* is coercive */,
+                true /* is real */, true /* is complex */);
     }
 
   };
@@ -2849,7 +3584,7 @@ namespace getfem {
     if (dataname_rho.size())
       dl.push_back(dataname_rho);
     return md.add_brick(pbr, model::varnamelist(1, varname), dl, tl,
-			model::mimlist(1, &mim), region);
+                        model::mimlist(1, &mim), region);
   }
 
 
@@ -2863,131 +3598,131 @@ namespace getfem {
   struct basic_d_on_dt_brick : public virtual_brick {
 
     virtual void asm_real_tangent_terms(const model &md, size_type ib,
-					const model::varnamelist &vl,
-					const model::varnamelist &dl,
-					const model::mimlist &mims,
-					model::real_matlist &matl,
-					model::real_veclist &vecl,
-					model::real_veclist &,
-					size_type region,
-					build_version version) const {
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version version) const {
       GMM_ASSERT1(matl.size() == 1,
-		  "Basic d/dt brick has one and only one term");
+                  "Basic d/dt brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Basic d/dt brick need one and only one mesh_im");
+                  "Basic d/dt brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() >= 2 && dl.size() <= 3,
-		  "Wrong number of variables for basic d/dt brick");
+                  "Wrong number of variables for basic d/dt brick");
 
       // It should me more convenient not to recompute the matrix if only
       // dt is modified
       bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0)
-	|| (md.is_var_newer_than_brick(dl[1], ib));
+        || (md.is_var_newer_than_brick(dl[1], ib));
       if (dl.size() > 2)
-	recompute_matrix = recompute_matrix ||
-	  md.is_var_newer_than_brick(dl[2], ib);
+        recompute_matrix = recompute_matrix ||
+          md.is_var_newer_than_brick(dl[2], ib);
 
-      
-      if (recompute_matrix) {
-	const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
-	const mesh &m = mf_u.linked_mesh();
-	const mesh_im &mim = *mims[0];
-	mesh_region rg(region);
-	m.intersect_with_mpi_region(rg);
-      
-	const model_real_plain_vector &dt = md.real_variable(dl[1]);
-	GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
-	
-	const mesh_fem *mf_rho = 0;
-	const model_real_plain_vector *rho = 0;
-	
-	if (dl.size() > 2) {
-	  mf_rho = md.pmesh_fem_of_variable(dl[2]);
-	  rho = &(md.real_variable(dl[2]));
-	  size_type sl = gmm::vect_size(*rho);
-	  if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
-	  GMM_ASSERT1(sl == 1, "Bad format for density");
-	}
 
-	GMM_TRACE2("Mass matrix assembly for d_on_dt brick");
-	if (dl.size() > 2 && mf_rho) {
-	  gmm::clear(matl[0]);
-	  asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
-	  gmm::scale(matl[0], scalar_type(1) / dt[0]);
-	} else {
-	  gmm::clear(matl[0]);
-	  asm_mass_matrix(matl[0], mim, mf_u, rg);
-	  if (dl.size() > 2) gmm::scale(matl[0], (*rho)[0] / dt[0]);
-	  else gmm::scale(matl[0], scalar_type(1) / dt[0]);
-	}
+      if (recompute_matrix) {
+        const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+        const mesh &m = mf_u.linked_mesh();
+        const mesh_im &mim = *mims[0];
+        mesh_region rg(region);
+        m.intersect_with_mpi_region(rg);
+
+        const model_real_plain_vector &dt = md.real_variable(dl[1]);
+        GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
+
+        const mesh_fem *mf_rho = 0;
+        const model_real_plain_vector *rho = 0;
+
+        if (dl.size() > 2) {
+          mf_rho = md.pmesh_fem_of_variable(dl[2]);
+          rho = &(md.real_variable(dl[2]));
+          size_type sl = gmm::vect_size(*rho);
+          if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
+          GMM_ASSERT1(sl == 1, "Bad format for density");
+        }
+
+        GMM_TRACE2("Mass matrix assembly for d_on_dt brick");
+        if (dl.size() > 2 && mf_rho) {
+          gmm::clear(matl[0]);
+          asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
+          gmm::scale(matl[0], scalar_type(1) / dt[0]);
+        } else {
+          gmm::clear(matl[0]);
+          asm_mass_matrix(matl[0], mim, mf_u, rg);
+          if (dl.size() > 2) gmm::scale(matl[0], (*rho)[0] / dt[0]);
+          else gmm::scale(matl[0], scalar_type(1) / dt[0]);
+        }
       }
       gmm::mult(matl[0], md.real_variable(dl[0], 1), vecl[0]);
     }
-    
+
     virtual void asm_complex_tangent_terms(const model &md, size_type ib,
-					   const model::varnamelist &vl,
-					   const model::varnamelist &dl,
-					   const model::mimlist &mims,
-					   model::complex_matlist &matl,
-					   model::complex_veclist &vecl,
-					   model::complex_veclist &,
-					   size_type region,
-					   build_version version) const {
+                                           const model::varnamelist &vl,
+                                           const model::varnamelist &dl,
+                                           const model::mimlist &mims,
+                                           model::complex_matlist &matl,
+                                           model::complex_veclist &vecl,
+                                           model::complex_veclist &,
+                                           size_type region,
+                                           build_version version) const {
       GMM_ASSERT1(matl.size() == 1,
-		  "Basic d/dt brick has one and only one term");
+                  "Basic d/dt brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Basic d/dt brick need one and only one mesh_im");
+                  "Basic d/dt brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() >= 2 && dl.size() <= 3,
-		  "Wrong number of variables for basic d/dt brick");
+                  "Wrong number of variables for basic d/dt brick");
 
       // It should me more convenient not to recompute the matrix if only
       // dt is modified
       bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0)
-	|| (md.is_var_newer_than_brick(dl[1], ib));
+        || (md.is_var_newer_than_brick(dl[1], ib));
       if (dl.size() > 2)
-	recompute_matrix = recompute_matrix ||
-	  md.is_var_newer_than_brick(dl[2], ib);
-      
-      if (recompute_matrix) {
-	const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
-	const mesh &m = mf_u.linked_mesh();
-	const mesh_im &mim = *mims[0];
+        recompute_matrix = recompute_matrix ||
+          md.is_var_newer_than_brick(dl[2], ib);
 
-	mesh_region rg(region);
-	m.intersect_with_mpi_region(rg);
-	
-	const model_complex_plain_vector &dt = md.complex_variable(dl[1]);
-	GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
-	
-	const mesh_fem *mf_rho = 0;
-	const model_complex_plain_vector *rho = 0;
-	
-	if (dl.size() > 2) {
-	  mf_rho = md.pmesh_fem_of_variable(dl[2]);
-	  rho = &(md.complex_variable(dl[2]));
-	  size_type sl = gmm::vect_size(*rho);
-	  if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
-	  GMM_ASSERT1(sl == 1, "Bad format for density");
-	}
-	
-	GMM_TRACE2("Mass matrix assembly for d_on_dt brick");
-	if (dl.size() > 2 && mf_rho) {
-	  gmm::clear(matl[0]);
-	  asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
-	  gmm::scale(matl[0], scalar_type(1) / dt[0]);
-	} else {
-	  gmm::clear(matl[0]);
-	  asm_mass_matrix(matl[0], mim, mf_u, rg);
-	  if (dl.size() > 2) gmm::scale(matl[0], (*rho)[0] / dt[0]);
-	  else gmm::scale(matl[0], scalar_type(1) / dt[0]);
-	}
+      if (recompute_matrix) {
+        const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+        const mesh &m = mf_u.linked_mesh();
+        const mesh_im &mim = *mims[0];
+
+        mesh_region rg(region);
+        m.intersect_with_mpi_region(rg);
+
+        const model_complex_plain_vector &dt = md.complex_variable(dl[1]);
+        GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
+
+        const mesh_fem *mf_rho = 0;
+        const model_complex_plain_vector *rho = 0;
+
+        if (dl.size() > 2) {
+          mf_rho = md.pmesh_fem_of_variable(dl[2]);
+          rho = &(md.complex_variable(dl[2]));
+          size_type sl = gmm::vect_size(*rho);
+          if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
+          GMM_ASSERT1(sl == 1, "Bad format for density");
+        }
+
+        GMM_TRACE2("Mass matrix assembly for d_on_dt brick");
+        if (dl.size() > 2 && mf_rho) {
+          gmm::clear(matl[0]);
+          asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
+          gmm::scale(matl[0], scalar_type(1) / dt[0]);
+        } else {
+          gmm::clear(matl[0]);
+          asm_mass_matrix(matl[0], mim, mf_u, rg);
+          if (dl.size() > 2) gmm::scale(matl[0], (*rho)[0] / dt[0]);
+          else gmm::scale(matl[0], scalar_type(1) / dt[0]);
+        }
       }
       gmm::mult(matl[0], md.complex_variable(dl[0], 1), vecl[0]);
     }
 
     basic_d_on_dt_brick(void) {
       set_flags("Basic d/dt brick", true /* is linear*/,
-		true /* is symmetric */, true /* is coercive */,
-		true /* is real */, true /* is complex */);
+                true /* is symmetric */, true /* is coercive */,
+                true /* is real */, true /* is complex */);
     }
 
   };
@@ -3004,7 +3739,7 @@ namespace getfem {
     if (dataname_rho.size())
       dl.push_back(dataname_rho);
     return md.add_brick(pbr, model::varnamelist(1, varname), dl, tl,
-			model::mimlist(1, &mim), region);
+                        model::mimlist(1, &mim), region);
   }
 
   // ----------------------------------------------------------------------
@@ -3020,26 +3755,26 @@ namespace getfem {
     mutable scalar_type old_alphadt2;
 
     virtual void asm_real_tangent_terms(const model &md, size_type ib,
-					const model::varnamelist &vl,
-					const model::varnamelist &dl,
-					const model::mimlist &mims,
-					model::real_matlist &matl,
-					model::real_veclist &vecl,
-					model::real_veclist &,
-					size_type region,
-					build_version version) const {
+                                        const model::varnamelist &vl,
+                                        const model::varnamelist &dl,
+                                        const model::mimlist &mims,
+                                        model::real_matlist &matl,
+                                        model::real_veclist &vecl,
+                                        model::real_veclist &,
+                                        size_type region,
+                                        build_version version) const {
       GMM_ASSERT1(matl.size() == 1,
-		  "Basic d2/dt2 brick has one and only one term");
+                  "Basic d2/dt2 brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Basic d2/dt2 brick need one and only one mesh_im");
+                  "Basic d2/dt2 brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() >= 4 && dl.size() <= 5,
-		  "Wrong number of variables for basic d2/dt2 brick");
+                  "Wrong number of variables for basic d2/dt2 brick");
 
       bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0);
 
       if (dl.size() > 4)
-	recompute_matrix = recompute_matrix ||
-	  md.is_var_newer_than_brick(dl[4], ib);
+        recompute_matrix = recompute_matrix ||
+          md.is_var_newer_than_brick(dl[4], ib);
 
       const model_real_plain_vector &dt = md.real_variable(dl[2]);
       GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
@@ -3048,64 +3783,64 @@ namespace getfem {
       scalar_type alphadt2 = gmm::sqr(dt[0]) * alpha[0];
 
       if (!recompute_matrix && alphadt2 != old_alphadt2)
-	gmm::scale(matl[0], old_alphadt2/alphadt2);
+        gmm::scale(matl[0], old_alphadt2/alphadt2);
       old_alphadt2 = alphadt2;
 
       if (recompute_matrix) {
-	const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
-	const mesh &m = mf_u.linked_mesh();
-	const mesh_im &mim = *mims[0];
-	mesh_region rg(region);
-	m.intersect_with_mpi_region(rg);
-      
-	const mesh_fem *mf_rho = 0;
-	const model_real_plain_vector *rho = 0;
-	
-	if (dl.size() > 4) {
-	  mf_rho = md.pmesh_fem_of_variable(dl[4]);
-	  rho = &(md.real_variable(dl[4]));
-	  size_type sl = gmm::vect_size(*rho);
-	  if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
-	  GMM_ASSERT1(sl == 1, "Bad format for density");
-	}
-	
-	GMM_TRACE2("Mass matrix assembly for d2_on_dt2 brick");
-	if (dl.size() > 4 && mf_rho) {
-	  gmm::clear(matl[0]);
-	  asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
-	  gmm::scale(matl[0], scalar_type(1) / alphadt2);
-	} else {
-	  gmm::clear(matl[0]);
-	  asm_mass_matrix(matl[0], mim, mf_u, rg);
-	  if (dl.size() > 4) gmm::scale(matl[0], (*rho)[0] / alphadt2);
-	  else gmm::scale(matl[0], scalar_type(1) / alphadt2);
-	}
+        const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+        const mesh &m = mf_u.linked_mesh();
+        const mesh_im &mim = *mims[0];
+        mesh_region rg(region);
+        m.intersect_with_mpi_region(rg);
+
+        const mesh_fem *mf_rho = 0;
+        const model_real_plain_vector *rho = 0;
+
+        if (dl.size() > 4) {
+          mf_rho = md.pmesh_fem_of_variable(dl[4]);
+          rho = &(md.real_variable(dl[4]));
+          size_type sl = gmm::vect_size(*rho);
+          if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
+          GMM_ASSERT1(sl == 1, "Bad format for density");
+        }
+
+        GMM_TRACE2("Mass matrix assembly for d2_on_dt2 brick");
+        if (dl.size() > 4 && mf_rho) {
+          gmm::clear(matl[0]);
+          asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
+          gmm::scale(matl[0], scalar_type(1) / alphadt2);
+        } else {
+          gmm::clear(matl[0]);
+          asm_mass_matrix(matl[0], mim, mf_u, rg);
+          if (dl.size() > 4) gmm::scale(matl[0], (*rho)[0] / alphadt2);
+          else gmm::scale(matl[0], scalar_type(1) / alphadt2);
+        }
       }
       gmm::mult(matl[0], md.real_variable(dl[0], 1), vecl[0]);
       gmm::mult_add(matl[0], gmm::scaled(md.real_variable(dl[1], 1), dt[0]),
-		    vecl[0]);
+                    vecl[0]);
     }
-    
+
     virtual void asm_complex_tangent_terms(const model &md, size_type ib,
-					   const model::varnamelist &vl,
-					   const model::varnamelist &dl,
-					   const model::mimlist &mims,
-					   model::complex_matlist &matl,
-					   model::complex_veclist &vecl,
-					   model::complex_veclist &,
-					   size_type region,
-					   build_version version) const {
+                                           const model::varnamelist &vl,
+                                           const model::varnamelist &dl,
+                                           const model::mimlist &mims,
+                                           model::complex_matlist &matl,
+                                           model::complex_veclist &vecl,
+                                           model::complex_veclist &,
+                                           size_type region,
+                                           build_version version) const {
       GMM_ASSERT1(matl.size() == 1,
-		  "Basic d2/dt2 brick has one and only one term");
+                  "Basic d2/dt2 brick has one and only one term");
       GMM_ASSERT1(mims.size() == 1,
-		  "Basic d2/dt2 brick need one and only one mesh_im");
+                  "Basic d2/dt2 brick need one and only one mesh_im");
       GMM_ASSERT1(vl.size() == 1 && dl.size() >= 4 && dl.size() <= 5,
-		  "Wrong number of variables for basic d2/dt2 brick");
-      
+                  "Wrong number of variables for basic d2/dt2 brick");
+
       bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0);
       if (dl.size() > 4)
-	recompute_matrix = recompute_matrix ||
-	  md.is_var_newer_than_brick(dl[4], ib);
+        recompute_matrix = recompute_matrix ||
+          md.is_var_newer_than_brick(dl[4], ib);
 
       const model_complex_plain_vector &dt = md.complex_variable(dl[2]);
       GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
@@ -3114,48 +3849,48 @@ namespace getfem {
       scalar_type alphadt2 = gmm::real(gmm::sqr(dt[0]) * alpha[0]);
 
       if (!recompute_matrix && alphadt2 != old_alphadt2)
-	gmm::scale(matl[0], old_alphadt2/alphadt2);
+        gmm::scale(matl[0], old_alphadt2/alphadt2);
       old_alphadt2 = alphadt2;
 
       if (recompute_matrix) {
-	const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
-	const mesh &m = mf_u.linked_mesh();
-	const mesh_im &mim = *mims[0];
-	mesh_region rg(region);
-	m.intersect_with_mpi_region(rg);
-
-	const mesh_fem *mf_rho = 0;
-	const model_complex_plain_vector *rho = 0;
-	
-	if (dl.size() > 4) {
-	  mf_rho = md.pmesh_fem_of_variable(dl[4]);
-	  rho = &(md.complex_variable(dl[4]));
-	  size_type sl = gmm::vect_size(*rho);
-	  if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
-	  GMM_ASSERT1(sl == 1, "Bad format for density");
-	}
-	
-	GMM_TRACE2("Mass matrix assembly for d2_on_dt2 brick");
-	if (dl.size() > 4 && mf_rho) {
-	  gmm::clear(matl[0]);
-	  asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
-	  gmm::scale(matl[0], scalar_type(1) / alphadt2);
-	} else {
-	  gmm::clear(matl[0]);
-	  asm_mass_matrix(matl[0], mim, mf_u, rg);
-	  if (dl.size() > 4) gmm::scale(matl[0], (*rho)[0] / alphadt2);
-	  else gmm::scale(matl[0], scalar_type(1) / alphadt2);
-	}
+        const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+        const mesh &m = mf_u.linked_mesh();
+        const mesh_im &mim = *mims[0];
+        mesh_region rg(region);
+        m.intersect_with_mpi_region(rg);
+
+        const mesh_fem *mf_rho = 0;
+        const model_complex_plain_vector *rho = 0;
+
+        if (dl.size() > 4) {
+          mf_rho = md.pmesh_fem_of_variable(dl[4]);
+          rho = &(md.complex_variable(dl[4]));
+          size_type sl = gmm::vect_size(*rho);
+          if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
+          GMM_ASSERT1(sl == 1, "Bad format for density");
+        }
+
+        GMM_TRACE2("Mass matrix assembly for d2_on_dt2 brick");
+        if (dl.size() > 4 && mf_rho) {
+          gmm::clear(matl[0]);
+          asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
+          gmm::scale(matl[0], scalar_type(1) / alphadt2);
+        } else {
+          gmm::clear(matl[0]);
+          asm_mass_matrix(matl[0], mim, mf_u, rg);
+          if (dl.size() > 4) gmm::scale(matl[0], (*rho)[0] / alphadt2);
+          else gmm::scale(matl[0], scalar_type(1) / alphadt2);
+        }
       }
       gmm::mult(matl[0], md.complex_variable(dl[0], 1), vecl[0]);
       gmm::mult_add(matl[0], gmm::scaled(md.complex_variable(dl[1], 1), dt[0]),
-		    vecl[0]);
+                    vecl[0]);
     }
 
     basic_d2_on_dt2_brick(void) {
       set_flags("Basic d2/dt2 brick", true /* is linear*/,
-		true /* is symmetric */, true /* is coercive */,
-		true /* is real */, true /* is complex */);
+                true /* is symmetric */, true /* is coercive */,
+                true /* is real */, true /* is complex */);
     }
 
   };
@@ -3177,7 +3912,7 @@ namespace getfem {
     if (dataname_rho.size())
       dl.push_back(dataname_rho);
     return md.add_brick(pbr, model::varnamelist(1, varnameU), dl, tl,
-			model::mimlist(1, &mim), region);
+                        model::mimlist(1, &mim), region);
   }
 
 
@@ -3205,9 +3940,9 @@ namespace getfem {
     void set_dispatch_coeff(const model &md, size_type ib) const {
       scalar_type theta;
       if (md.is_complex())
-	theta = gmm::real(md.complex_variable(param_names[0])[0]);
+        theta = gmm::real(md.complex_variable(param_names[0])[0]);
       else
-	theta = md.real_variable(param_names[0])[0];
+        theta = md.real_variable(param_names[0])[0];
       // coefficient for the matrix term
       md.matrix_coeff_of_brick(ib) = theta;
       // coefficient for the standard rhs
@@ -3219,13 +3954,13 @@ namespace getfem {
 
     template <typename MATLIST, typename VECTLIST>
     inline void next_iter(const model &md, size_type ib,
-			  const model::varnamelist &/* vl */,
-			  const model::varnamelist &/* dl */,
-			  MATLIST &/* matl */,
-			  VECTLIST &vectl, VECTLIST &vectl_sym,
-			  bool first_iter) const {
+                          const model::varnamelist &/* vl */,
+                          const model::varnamelist &/* dl */,
+                          MATLIST &/* matl */,
+                          VECTLIST &vectl, VECTLIST &vectl_sym,
+                          bool first_iter) const {
       if (first_iter) md.update_brick(ib, model::BUILD_RHS);
-      
+
       // shift the rhs
       transfert(vectl[0], vectl[1]);
       transfert(vectl_sym[0], vectl_sym[1]);
@@ -3271,7 +4006,7 @@ namespace getfem {
       : virtual_dispatcher(2) {
       param_names.push_back(THETA);
     }
-    
+
   };
 
   void add_theta_method_dispatcher
@@ -3284,7 +4019,7 @@ namespace getfem {
   void velocity_update_for_order_two_theta_method
   (model &md, const std::string &U, const std::string &V,
    const std::string &pdt, const std::string &ptheta) {
-    
+
     // V^{n+1} = (1-1/theta)*V^n + (1/theta)*(U^{n+1} - U^n)/dt
 
     if (md.is_complex()) {
@@ -3292,31 +4027,31 @@ namespace getfem {
       GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
       const model_complex_plain_vector &theta = md.complex_variable(ptheta);
       GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for parameter theta");
-      
+
       gmm::copy(gmm::scaled(md.complex_variable(V, 1),
-			    scalar_type(1) - scalar_type(1) / theta[0]),
-		md.set_complex_variable(V, 0));
+                            scalar_type(1) - scalar_type(1) / theta[0]),
+                md.set_complex_variable(V, 0));
       gmm::add(gmm::scaled(md.complex_variable(U, 0),
-			   scalar_type(1) / (theta[0]*dt[0])),
-	       md.set_complex_variable(V, 0));
+                           scalar_type(1) / (theta[0]*dt[0])),
+               md.set_complex_variable(V, 0));
       gmm::add(gmm::scaled(md.complex_variable(U, 1),
-			   -scalar_type(1) / (theta[0]*dt[0])),
-	       md.set_complex_variable(V, 0));
+                           -scalar_type(1) / (theta[0]*dt[0])),
+               md.set_complex_variable(V, 0));
     } else {
       const model_real_plain_vector &dt = md.real_variable(pdt);
       GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
       const model_real_plain_vector &theta = md.real_variable(ptheta);
       GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for parameter theta");
-      
+
       gmm::copy(gmm::scaled(md.real_variable(V, 1),
-			    scalar_type(1) - scalar_type(1) / theta[0]),
-		md.set_real_variable(V, 0));
+                            scalar_type(1) - scalar_type(1) / theta[0]),
+                md.set_real_variable(V, 0));
       gmm::add(gmm::scaled(md.real_variable(U, 0),
-			   scalar_type(1) / (theta[0]*dt[0])),
-	       md.set_real_variable(V, 0));
+                           scalar_type(1) / (theta[0]*dt[0])),
+               md.set_real_variable(V, 0));
       gmm::add(gmm::scaled(md.real_variable(U, 1),
-			   -scalar_type(1) / (theta[0]*dt[0])),
-	       md.set_real_variable(V, 0));
+                           -scalar_type(1) / (theta[0]*dt[0])),
+               md.set_real_variable(V, 0));
     }
   }
 
@@ -3332,41 +4067,41 @@ namespace getfem {
    const std::string &pgamma) {
 
     md.disable_brick(id2dt2b);
-    
+
     if (md.is_complex()) {
-      typedef std::complex<scalar_type> complex_type;
-      
+      //      typedef std::complex<scalar_type> complex_type;
+
       complex_type twobeta = md.complex_variable(ptwobeta)[0];
       complex_type gamma = md.complex_variable(pgamma)[0];
       complex_type dt = md.complex_variable(pdt)[0];
 
       // Modification of the parameter for the theta-method.
       if (twobeta != gamma) {
-	md.set_complex_variable(ptwobeta)[0] = gamma;
-	md.set_dispatch_coeff();  // valid the change of coefficients.
+        md.set_complex_variable(ptwobeta)[0] = gamma;
+        md.set_dispatch_coeff();  // valid the change of coefficients.
       }
-      
+
       // Computation of the residual (including the linear parts).
       md.assembly(model::BUILD_COMPLETE_RHS);
 
       size_type nbdof = gmm::vect_size(md.complex_variable(U));
       model_complex_plain_vector W(nbdof), RHS(nbdof);
       gmm::copy(gmm::sub_vector(md.complex_rhs(), md.interval_of_variable(U)),
-		RHS);
+                RHS);
 
       // Compute the velocity. Inversion with CG.
       gmm::iteration iter(1e-12, 0, 100000);
       gmm::cg(md.linear_complex_matrix_term(id2dt2b, 0),
-	      W, RHS, gmm::identity_matrix(), iter);
+              W, RHS, gmm::identity_matrix(), iter);
       GMM_ASSERT1(iter.converged(), "Velocity not well computed");
       gmm::add(md.complex_variable(V, 1),
-	       gmm::scaled(W, complex_type(1)/(twobeta*dt)),
-	       md.set_complex_variable(V, 0));
-      
+               gmm::scaled(W, complex_type(1)/(twobeta*dt)),
+               md.set_complex_variable(V, 0));
+
       // Cancel the modification of the parameter for the theta-method.
       if (twobeta != gamma) {
-	md.set_complex_variable(ptwobeta)[0] = twobeta;
-	md.set_dispatch_coeff();  // valid the change of coefficients.
+        md.set_complex_variable(ptwobeta)[0] = twobeta;
+        md.set_dispatch_coeff();  // valid the change of coefficients.
       }
 
 
@@ -3375,40 +4110,40 @@ namespace getfem {
       scalar_type twobeta = md.real_variable(ptwobeta)[0];
       scalar_type gamma = md.real_variable(pgamma)[0];
       scalar_type dt = md.real_variable(pdt)[0];
-      
-      
+
+
 
       // Modification of the parameter for the theta-method.
       if (twobeta != gamma) {
-	md.set_real_variable(ptwobeta)[0] = gamma;
-	md.set_dispatch_coeff();  // valid the change of coefficients.
+        md.set_real_variable(ptwobeta)[0] = gamma;
+        md.set_dispatch_coeff();  // valid the change of coefficients.
       }
-      
+
       // Computation of the residual (including the linear parts).
       md.assembly(model::BUILD_COMPLETE_RHS);
 
       size_type nbdof = gmm::vect_size(md.real_variable(U));
       model_real_plain_vector W(nbdof), RHS(nbdof);
       gmm::copy(gmm::sub_vector(md.real_rhs(), md.interval_of_variable(U)),
-		RHS);
+                RHS);
 
       // Compute the velocity. Inversion with CG.
       gmm::iteration iter(1e-12, 0, 100000);
       gmm::cg(md.linear_real_matrix_term(id2dt2b, 0),
-	      W, RHS, gmm::identity_matrix(), iter);
+              W, RHS, gmm::identity_matrix(), iter);
       GMM_ASSERT1(iter.converged(), "Velocity not well computed");
       gmm::add(md.real_variable(V, 1),
-	       gmm::scaled(W, scalar_type(1)/(twobeta*dt)),
-	       md.set_real_variable(V, 0));
-      
+               gmm::scaled(W, scalar_type(1)/(twobeta*dt)),
+               md.set_real_variable(V, 0));
+
       // Cancel the modification of the parameter for the theta-method.
       if (twobeta != gamma) {
-	md.set_real_variable(ptwobeta)[0] = twobeta;
-	md.set_dispatch_coeff();  // valid the change of coefficients.
+        md.set_real_variable(ptwobeta)[0] = twobeta;
+        md.set_dispatch_coeff();  // valid the change of coefficients.
       }
 
     }
-    md.unable_brick(id2dt2b);
+    md.enable_brick(id2dt2b);
   }
 
 
@@ -3432,31 +4167,31 @@ namespace getfem {
       md.rhs_coeffs_of_brick(ib)[0] = scalar_type(1);
       md.rhs_coeffs_of_brick(ib)[1] = scalar_type(1)/scalar_type(2);
     }
-    
+
     template <typename MATLIST, typename VECTLIST>
     inline void next_iter(const model &md, size_type ib,
-			  const model::varnamelist &vl,
-			  const model::varnamelist &dl,
-			  MATLIST &/* matl */,
-			  VECTLIST &vectl, VECTLIST &vectl_sym,
-			  bool first_iter) const {
-
-      pbrick pbr = md.get_brick(ib);
-
-      if (first_iter) { // For the moment, temporaries are deleted by 
-	// model::first_iter before the call to virtual_dispatcher::next_iter
-	if (!(pbr->is_linear()))
-	  md.add_temporaries(vl, id_num); // add temporaries for all variables
-	md.add_temporaries(dl, id_num); // add temporaries for versionned data
-	clear(vectl[1]); clear(vectl_sym[1]);
+                          const model::varnamelist &vl,
+                          const model::varnamelist &dl,
+                          MATLIST &/* matl */,
+                          VECTLIST &vectl, VECTLIST &vectl_sym,
+                          bool first_iter) const {
+
+      pbrick pbr = md.brick_pointer(ib);
+
+      if (first_iter) { // For the moment, temporaries are deleted by
+        // model::first_iter before the call to virtual_dispatcher::next_iter
+        if (!(pbr->is_linear()))
+          md.add_temporaries(vl, id_num); // add temporaries for all variables
+        md.add_temporaries(dl, id_num); // add temporaries for versionned data
+        clear(vectl[1]); clear(vectl_sym[1]);
       }
 
       if (pbr->is_linear()) { // If the problem is linear, add the term
-	// coming from the previous iteration as a second rhs.
-	// This rhs is only used for this.
-	if (first_iter) md.update_brick(ib, model::BUILD_RHS);
-	clear(vectl[1]); clear(vectl_sym[1]);
-	md.linear_brick_add_to_rhs(ib, 1, 0);
+        // coming from the previous iteration as a second rhs.
+        // This rhs is only used for this.
+        if (first_iter) md.update_brick(ib, model::BUILD_RHS);
+        clear(vectl[1]); clear(vectl_sym[1]);
+        md.linear_brick_add_to_rhs(ib, 1, 0);
       }
     }
 
@@ -3483,47 +4218,47 @@ namespace getfem {
      std::vector<model::real_veclist> &vectl,
      std::vector<model::real_veclist> &vectl_sym,
      build_version version) const {
-    
+
       scalar_type half = scalar_type(1)/scalar_type(2);
-      pbrick pbr = md.get_brick(ib);
+      pbrick pbr = md.brick_pointer(ib);
       size_type ind;
 
       const model::varnamelist &vl = md.varnamelist_of_brick(ib);
       const model::varnamelist &dl = md.datanamelist_of_brick(ib);
 
       if (!(pbr->is_linear())) { // compute the mean variables
-	for (size_type i = 0; i < vl.size(); ++i) {
-	  bool is_uptodate = md.temporary_uptodate(vl[i], id_num, ind);
-	  if (!is_uptodate && ind != size_type(-1))
-	    gmm::add(gmm::scaled(md.real_variable(vl[i], 0), half),
-		     gmm::scaled(md.real_variable(vl[i], 1), half),
-		     md.set_real_variable(vl[i], ind));
-	  md.set_default_iter_of_variable(vl[i], ind);
-	}
+        for (size_type i = 0; i < vl.size(); ++i) {
+          bool is_uptodate = md.temporary_uptodate(vl[i], id_num, ind);
+          if (!is_uptodate && ind != size_type(-1))
+            gmm::add(gmm::scaled(md.real_variable(vl[i], 0), half),
+                     gmm::scaled(md.real_variable(vl[i], 1), half),
+                     md.set_real_variable(vl[i], ind));
+          md.set_default_iter_of_variable(vl[i], ind);
+        }
       }
 
       // compute the mean data
       for (size_type i = 0; i < dl.size(); ++i) {
-	bool is_uptodate = md.temporary_uptodate(dl[i], id_num, ind);
-	if (!is_uptodate && ind != size_type(-1)) {
-	  gmm::add(gmm::scaled(md.real_variable(dl[i], 0), half),
-		   gmm::scaled(md.real_variable(dl[i], 1), half),
-		   md.set_real_variable(dl[i], ind));
-	}
-	md.set_default_iter_of_variable(dl[i], ind);
+        bool is_uptodate = md.temporary_uptodate(dl[i], id_num, ind);
+        if (!is_uptodate && ind != size_type(-1)) {
+          gmm::add(gmm::scaled(md.real_variable(dl[i], 0), half),
+                   gmm::scaled(md.real_variable(dl[i], 1), half),
+                   md.set_real_variable(dl[i], ind));
+        }
+        md.set_default_iter_of_variable(dl[i], ind);
       }
-      
+
       // call the brick for the mid-time step.
       md.brick_call(ib, version, 0);
       if (pbr->is_linear()) { // update second rhs (is updated by next_iter
-	// but the call to the brick may have changed the matrices.
-	clear(vectl[1]); clear(vectl_sym[1]);
-	md.linear_brick_add_to_rhs(ib, 1, 1);
+        // but the call to the brick may have changed the matrices.
+        clear(vectl[1]); clear(vectl_sym[1]);
+        md.linear_brick_add_to_rhs(ib, 1, 1);
       }
-      
+
       md.reset_default_iter_of_variables(dl);
       if (!(pbr->is_linear()))
-	md.reset_default_iter_of_variables(vl);
+        md.reset_default_iter_of_variables(vl);
     }
 
     virtual void asm_complex_tangent_terms
@@ -3531,52 +4266,52 @@ namespace getfem {
      std::vector<model::complex_veclist> &vectl,
      std::vector<model::complex_veclist> &vectl_sym,
      build_version version) const {
-    
+
       scalar_type half = scalar_type(1)/scalar_type(2);
-      pbrick pbr = md.get_brick(ib);
+      pbrick pbr = md.brick_pointer(ib);
       size_type ind;
 
       const model::varnamelist &vl = md.varnamelist_of_brick(ib);
       const model::varnamelist &dl = md.datanamelist_of_brick(ib);
 
       if (!(pbr->is_linear())) { // compute the mean variables
-	for (size_type i = 0; i < vl.size(); ++i) {
-	  bool is_uptodate = md.temporary_uptodate(vl[i], id_num, ind);
-	  if (!is_uptodate && ind != size_type(-1))
-	    gmm::add(gmm::scaled(md.complex_variable(vl[i], 0), half),
-		     gmm::scaled(md.complex_variable(vl[i], 1), half),
-		     md.set_complex_variable(vl[i], ind));
-	  md.set_default_iter_of_variable(vl[i], ind);
-	}
+        for (size_type i = 0; i < vl.size(); ++i) {
+          bool is_uptodate = md.temporary_uptodate(vl[i], id_num, ind);
+          if (!is_uptodate && ind != size_type(-1))
+            gmm::add(gmm::scaled(md.complex_variable(vl[i], 0), half),
+                     gmm::scaled(md.complex_variable(vl[i], 1), half),
+                     md.set_complex_variable(vl[i], ind));
+          md.set_default_iter_of_variable(vl[i], ind);
+        }
       }
 
       // compute the mean data
       for (size_type i = 0; i < dl.size(); ++i) {
-	bool is_uptodate = md.temporary_uptodate(dl[i], id_num, ind);
-	if (!is_uptodate && ind != size_type(-1)) {
-	  gmm::add(gmm::scaled(md.complex_variable(dl[i], 0), half),
-		   gmm::scaled(md.complex_variable(dl[i], 1), half),
-		   md.set_complex_variable(dl[i], ind));
-	}
-	md.set_default_iter_of_variable(dl[i], ind);
+        bool is_uptodate = md.temporary_uptodate(dl[i], id_num, ind);
+        if (!is_uptodate && ind != size_type(-1)) {
+          gmm::add(gmm::scaled(md.complex_variable(dl[i], 0), half),
+                   gmm::scaled(md.complex_variable(dl[i], 1), half),
+                   md.set_complex_variable(dl[i], ind));
+        }
+        md.set_default_iter_of_variable(dl[i], ind);
       }
-      
+
       // call the brick for the mid-time step.
       md.brick_call(ib, version, 0);
       if (pbr->is_linear()) { // update second rhs (is updated by next_iter
-	// but the call to the brick may have changed the matrices.
-	clear(vectl[1]); clear(vectl_sym[1]);
-	md.linear_brick_add_to_rhs(ib, 1, 1);
+        // but the call to the brick may have changed the matrices.
+        clear(vectl[1]); clear(vectl_sym[1]);
+        md.linear_brick_add_to_rhs(ib, 1, 1);
       }
-      
+
       md.reset_default_iter_of_variables(dl);
       if (!(pbr->is_linear()))
-	md.reset_default_iter_of_variables(vl);
+        md.reset_default_iter_of_variables(vl);
     }
 
     midpoint_dispatcher(void) : virtual_dispatcher(2)
     { id_num = act_counter(); }
-    
+
   };
 
   void add_midpoint_dispatcher(model &md, dal::bit_vector ibricks) {
@@ -3586,6 +4321,5 @@ namespace getfem {
   }
 
 
-
 }  /* end of namespace getfem.                                             */
 
diff --git a/src/getfem_nonlinear_elasticity.cc b/src/getfem_nonlinear_elasticity.cc
index 0809d89..3b26f96 100644
--- a/src/getfem_nonlinear_elasticity.cc
+++ b/src/getfem_nonlinear_elasticity.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/getfem_models.h"
@@ -26,7 +26,7 @@
 namespace getfem {
 
 
-  /* Usefull functions to compute the invariants and their derivatives
+  /* Useful functions to compute the invariants and their derivatives
      Note that the second derivative is symmetrized (see the user
      documentation for more details). The matrix E is assumed to be symmetric.
   */
@@ -69,7 +69,7 @@ namespace getfem {
       di1_c = true;
     }
 
-    void compute_ddi1(void) { // not very usefull, null tensor
+    void compute_ddi1(void) { // not very useful, null tensor
       ddi1 = base_tensor(N, N, N, N); 
       ddi1_c = true;
     }
@@ -282,7 +282,12 @@ namespace getfem {
 
   void abstract_hyperelastic_law::random_E(base_matrix &E) {
     size_type N = gmm::mat_nrows(E);
-    base_matrix Phi(N,N); gmm::fill_random(Phi);
+    base_matrix Phi(N,N);
+    scalar_type d;
+    do {
+      gmm::fill_random(Phi);
+      d = gmm::lu_det(Phi);
+    } while (d < scalar_type(0.01)); 
     gmm::mult(gmm::transposed(Phi),Phi,E);
     gmm::scale(E,-1.); gmm::add(gmm::identity_matrix(),E); 
     gmm::scale(E,-0.5);
@@ -302,9 +307,11 @@ namespace getfem {
       getfem::base_tensor tdsigma(N,N,N,N);
       base_matrix dsigma(N,N);
       gmm::copy(E, E2); gmm::add(DE, E2);
-      sigma(E, sigma1, param); sigma(E2, sigma2, param);
+      sigma(E, sigma1, param, scalar_type(1));
+      sigma(E2, sigma2, param, scalar_type(1));
       
-      scalar_type d = strain_energy(E2, param) - strain_energy(E, param);
+      scalar_type d = strain_energy(E2, param, scalar_type(1))
+	- strain_energy(E, param, scalar_type(1));
       scalar_type d2 = 0;
       for (size_type i=0; i < N; ++i) 
 	for (size_type j=0; j < N; ++j) d2 += sigma1(i,j)*DE(i,j);
@@ -314,7 +321,7 @@ namespace getfem {
 	ok = false;
       }
       
-      grad_sigma(E,tdsigma,param);
+      grad_sigma(E,tdsigma,param, scalar_type(1));
       for (size_type i=0; i < N; ++i) {
 	for (size_type j=0; j < N; ++j) {
 	  dsigma(i,j) = 0;
@@ -325,7 +332,7 @@ namespace getfem {
 	  }
 	  sigma2(i,j) -= sigma1(i,j);
 	  if (gmm::abs(dsigma(i,j) - sigma2(i,j))
-	      /(gmm::abs(dsigma(i,j)) + 1e-40) > 1e-4) {
+	      /(gmm::abs(dsigma(i,j)) + 1e-40) > 1.5e-4) {
 	    cout << "Test " << count << " wrong derivative of sigma, i="
 		 << i << ", j=" << j << ", dsigma=" << dsigma(i,j)/h
 		 << ", var sigma = " << sigma2(i,j)/h << endl;
@@ -337,20 +344,65 @@ namespace getfem {
     GMM_ASSERT1(ok, "Derivative test has failed");
   }
     
+	void abstract_hyperelastic_law::cauchy_updated_lagrangian(const base_matrix& F, 
+		const base_matrix &E, 
+		base_matrix &cauchy_stress,
+		const base_vector &params,
+		scalar_type det_trans) const
+	{
+		size_type N = E.ncols();
+		base_matrix PK2(N,N);
+		sigma(E,PK2,params,det_trans);//second Piola-Kirchhoff stress
+		base_matrix aux(N,N);
+		gmm::mult(F,PK2,aux);
+		gmm::mult(aux,gmm::transposed(F),cauchy_stress);
+		gmm::scale(cauchy_stress,scalar_type(1.0/det_trans)); //cauchy = 1/J*F*PK2*F^T
+	}
+
+
+	void abstract_hyperelastic_law::grad_sigma_updated_lagrangian(const base_matrix& F, 
+		const base_matrix& E,
+		const base_vector &params,
+		scalar_type det_trans,
+		base_tensor &grad_sigma_ul)const
+	{
+		size_type N = E.ncols();
+		base_tensor Cse(N,N,N,N);
+		grad_sigma(E,Cse,params,det_trans);
+		scalar_type mult = 1.0/det_trans;
+		// this is a general transformation for an anisotropic material, very non-efficient;
+		// more effiecient calculations can be overloaded for every specific material
+		for(size_type i = 0; i < N; ++i)
+			for(size_type j = 0; j < N; ++j)
+				for(size_type k = 0; k < N; ++k)
+					for(size_type l = 0; l < N; ++l)
+					{
+						grad_sigma_ul(i,j,k,l) = 0.0;
+						for(size_type m = 0; m < N; ++m)
+						{    for(size_type n = 0; n < N; ++n)
+								for(size_type p = 0; p < N; ++p)
+									for(size_type q = 0; q < N; ++q)
+										grad_sigma_ul(i,j,k,l)+= 
+										F(i,m)*F(j,n)*F(k,p)*F(l,q)*Cse(m,n,p,q);
+						}
+						grad_sigma_ul(i,j,k,l) *= mult;
+					}
+	}
+
   scalar_type SaintVenant_Kirchhoff_hyperelastic_law::strain_energy
-  (const base_matrix &E, const base_vector &params) const {
+  (const base_matrix &E, const base_vector &params, scalar_type) const {
     return gmm::sqr(gmm::mat_trace(E)) * params[0] / scalar_type(2)
       + gmm::mat_euclidean_norm_sqr(E) * params[1];
   }
   
   void SaintVenant_Kirchhoff_hyperelastic_law::sigma
-  (const base_matrix &E, base_matrix &result,const base_vector &params) const {
+  (const base_matrix &E, base_matrix &result,const base_vector &params, scalar_type) const {
     gmm::copy(gmm::identity_matrix(), result);
     gmm::scale(result, params[0] * gmm::mat_trace(E));
     gmm::add(gmm::scaled(E, 2 * params[1]), result);
   }
   void SaintVenant_Kirchhoff_hyperelastic_law::grad_sigma
-  (const base_matrix &E, base_tensor &result,const base_vector &params) const {
+  (const base_matrix &E, base_tensor &result,const base_vector &params, scalar_type) const {
     std::fill(result.begin(), result.end(), scalar_type(0));
     size_type N = gmm::mat_nrows(E);
     for (size_type i = 0; i < N; ++i)
@@ -361,6 +413,26 @@ namespace getfem {
       }
   }
 
+	void SaintVenant_Kirchhoff_hyperelastic_law::grad_sigma_updated_lagrangian(const base_matrix& F, 
+		const base_matrix& E,
+		const base_vector &params,
+		scalar_type det_trans,
+		base_tensor &grad_sigma_ul)const
+	{
+		size_type N = E.ncols();
+		base_tensor Cse(N,N,N,N);
+		grad_sigma(E,Cse,params,det_trans);
+		base_matrix Cinv(N,N); // left Cauchy-Green deform. tens. 
+		gmm::mult(F,gmm::transposed(F),Cinv);
+		scalar_type mult=1.0/det_trans;
+		for(size_type i = 0; i < N; ++i)
+			for(size_type j = 0; j < N; ++j)
+				for(size_type k = 0; k < N; ++k)
+					for(size_type l = 0; l < N; ++l)
+						grad_sigma_ul(i, j, k, l)= (Cinv(i,j)*Cinv(k,l)*params[0] +
+						params[1]*(Cinv(i,k)*Cinv(j,l) + Cinv(i,l)*Cinv(j,k)))*mult;
+	}
+
   SaintVenant_Kirchhoff_hyperelastic_law::SaintVenant_Kirchhoff_hyperelastic_law(void) {
     // an attempt, the first term is missing grad(h)sigma:grad(v)
 //     adapted_tangent_term_assembly_fem_data = "params=data$1(#2,2);"
@@ -386,18 +458,18 @@ namespace getfem {
   }
 
   scalar_type membrane_elastic_law::strain_energy
-  (const base_matrix & /* E */, const base_vector & /* params */) const {
+  (const base_matrix & /* E */, const base_vector & /* params */, scalar_type) const {
     // to be done if needed
     GMM_ASSERT1(false, "To be done");
     return 0;
   }
   
   void membrane_elastic_law::sigma
-  (const base_matrix &E, base_matrix &result,const base_vector &params) const {
+  (const base_matrix &E, base_matrix &result,const base_vector &params, scalar_type det_trans) const {
     // should be optimized, maybe deriving sigma from strain energy
     base_tensor tt(2,2,2,2);
     size_type N = gmm::mat_nrows(E);
-    grad_sigma(E,tt,params);
+    grad_sigma(E,tt,params, det_trans);
     for (size_type i = 0; i < N; ++i)
       for (size_type j = 0; j < N; ++j) {
 	result(i,j)=0.0;
@@ -414,7 +486,7 @@ namespace getfem {
   
   void membrane_elastic_law::grad_sigma
   (const base_matrix & /* E */, base_tensor &result,
-   const base_vector &params) const {
+   const base_vector &params, scalar_type) const {
     // to be optimized!!
     std::fill(result.begin(), result.end(), scalar_type(0));
     scalar_type poisonXY=params[0]*params[1]/params[2];	//Ex*vYX=Ey*vXY
@@ -439,7 +511,7 @@ namespace getfem {
   }
 
   scalar_type Mooney_Rivlin_hyperelastic_law::strain_energy
-  (const base_matrix &E, const base_vector &params) const {
+  (const base_matrix &E, const base_vector &params, scalar_type) const {
     scalar_type C1 = params[0], C2 = params[1];
     size_type N = gmm::mat_nrows(E);
     GMM_ASSERT1(N == 3, "Mooney Rivlin hyperelastic law only defined "
@@ -454,7 +526,7 @@ namespace getfem {
 
   void Mooney_Rivlin_hyperelastic_law::sigma
   (const base_matrix &E, base_matrix &result,
-   const base_vector &params) const {
+   const base_vector &params, scalar_type) const {
     scalar_type C1 = params[0], C2 = params[1];
     size_type N = gmm::mat_nrows(E);
     GMM_ASSERT1(N == 3, "Mooney Rivlin hyperelastic law only defined "
@@ -471,7 +543,7 @@ namespace getfem {
 
   void Mooney_Rivlin_hyperelastic_law::grad_sigma
   (const base_matrix &E, base_tensor &result,
-   const base_vector &params) const {
+   const base_vector &params, scalar_type) const {
     scalar_type C1 = params[0], C2 = params[1];
     size_type N = gmm::mat_nrows(E);
     GMM_ASSERT1(N == 3, "Mooney Rivlin hyperelastic law only defined "
@@ -494,8 +566,123 @@ namespace getfem {
     nb_params_ = 2;
   }
 
+
+
+
+  scalar_type generalized_Blatz_Ko_hyperelastic_law::strain_energy
+  (const base_matrix &E, const base_vector &params, scalar_type det_trans) const {
+    if (det_trans <= scalar_type(0)) return 1e200;
+    scalar_type a = params[0], b = params[1], c = params[2], d = params[3];
+    scalar_type n = params[4];
+    size_type N = gmm::mat_nrows(E);
+    GMM_ASSERT1(N == 3, "Generalized Blatz Ko hyperelastic law only defined "
+		"on dimension 3, sorry");
+    base_matrix C = E;
+    gmm::scale(C, scalar_type(2));
+    gmm::add(gmm::identity_matrix(), C);
+    compute_invariants ci(C);
+
+    return pow(a*ci.i1() + b*sqrt(gmm::abs(ci.i3()))
+	       + c*ci.i2() / ci.i3() + d, n);
+  }
+
+  void generalized_Blatz_Ko_hyperelastic_law::sigma
+  (const base_matrix &E, base_matrix &result,
+   const base_vector &params, scalar_type det_trans) const {
+    scalar_type a = params[0], b = params[1], c = params[2], d = params[3];
+    scalar_type n = params[4];
+    size_type N = gmm::mat_nrows(E);
+    GMM_ASSERT1(N == 3, "Generalized Blatz Ko hyperelastic law only defined "
+		"on dimension 3, sorry");
+    base_matrix C = E;
+    gmm::scale(C, scalar_type(2));
+    gmm::add(gmm::identity_matrix(), C);
+    compute_invariants ci(C);
+
+    scalar_type z = a*ci.i1() + b*sqrt(gmm::abs(ci.i3()))
+      + c*ci.i2() / ci.i3() + d;
+    scalar_type nz = n * pow(z, n-1.);
+    scalar_type di1 = nz * a;
+    scalar_type di2 = nz * c / ci.i3();
+    scalar_type di3 = nz *
+      (b / (2. * sqrt(gmm::abs(ci.i3()))) - c * ci.i2() / gmm::sqr(ci.i3()));
+
+    gmm::copy(gmm::scaled(ci.grad_i1(), di1 * 2.0), result);
+    gmm::add(gmm::scaled(ci.grad_i2(), di2 * 2.0), result);
+    gmm::add(gmm::scaled(ci.grad_i3(), di3 * 2.0), result);
+    if (det_trans <= scalar_type(0))
+      gmm::add(gmm::scaled(C, 1e200), result);
+
+  }
+
+  void generalized_Blatz_Ko_hyperelastic_law::grad_sigma
+  (const base_matrix &E, base_tensor &result,
+   const base_vector &params, scalar_type) const {
+    scalar_type a = params[0], b = params[1], c = params[2], d = params[3];
+    scalar_type n = params[4];
+    size_type N = gmm::mat_nrows(E);
+    GMM_ASSERT1(N == 3, "Generalized Blatz Ko hyperelastic law only defined "
+		"on dimension 3, sorry");
+    base_matrix C = E;
+    gmm::scale(C, scalar_type(2));
+    gmm::add(gmm::identity_matrix(), C);
+    compute_invariants ci(C);
+
+
+    scalar_type z = a*ci.i1() + b*sqrt(gmm::abs(ci.i3()))
+      + c*ci.i2() / ci.i3() + d;
+    scalar_type nz = n * pow(z, n-1.);
+    scalar_type di1 = nz * a;
+    scalar_type di2 = nz * c / ci.i3();
+    scalar_type y = (b / (2. * sqrt(gmm::abs(ci.i3()))) - c * ci.i2() / gmm::sqr(ci.i3()));
+    scalar_type di3 = nz * y;
+
+    gmm::copy(gmm::scaled(ci.sym_grad_grad_i1().as_vector(),
+ 			  scalar_type(4)*di1), result.as_vector());
+    gmm::add(gmm::scaled(ci.sym_grad_grad_i2().as_vector(),
+			 scalar_type(4)*di2), result.as_vector());
+    gmm::add(gmm::scaled(ci.sym_grad_grad_i3().as_vector(),
+			 scalar_type(4)*di3), result.as_vector());
+
+    scalar_type nnz = n * (n-1.) * pow(z, n-2.);
+    base_matrix A(3, 3); // second derivatives of W with respect to invariants
+    A(0, 0) = nnz * a * a;
+    A(1, 0) = A(0, 1) = nnz * a * c / ci.i3();
+    A(2, 0) = A(0, 2) = nnz * a * y;
+    A(1, 1) = nnz * c * c / gmm::sqr(ci.i3());
+    A(2, 1) = A(1, 2) = nnz * y * c / ci.i3() - nz * c / gmm::sqr(ci.i3());
+    A(2, 2) = nnz * y * y + nz * (2. * c * ci.i2() / pow(ci.i3(), 3.) - b / (4. * pow(ci.i3(), 1.5)));
+
+    typedef const base_matrix * pointer_base_matrix__;
+    pointer_base_matrix__ di[3];
+    di[0] = &(ci.grad_i1()); 
+    di[1] = &(ci.grad_i2()); 
+    di[2] = &(ci.grad_i3());
+
+    for (size_type j = 0; j < N; ++j)
+      for (size_type k = 0; k < N; ++k) {
+	for (size_type l1 = 0; l1 < N; ++l1)
+	  for (size_type l2 = 0; l2 < N; ++l2)
+	    for (size_type l3 = 0; l3 < N; ++l3)
+	      for (size_type l4 = 0; l4 < N; ++l4)
+		result(l1, l2, l3, l4)
+		  += 4. * A(j, k) * (*di[j])(l1, l2) * (*di[k])(l3, l4);
+      }
+
+//     GMM_ASSERT1(check_symmetry(result) == 7,
+// 		"Fourth order tensor not symmetric : " << result);
+  }
+
+  generalized_Blatz_Ko_hyperelastic_law::generalized_Blatz_Ko_hyperelastic_law(void) {
+    nb_params_ = 5;
+    base_vector V(5);
+    V[0] = 1.0;  V[1] = 1.0, V[2] = 1.5; V[3] = -0.5; V[4] = 1.5;
+  }
+
+
   scalar_type Ciarlet_Geymonat_hyperelastic_law::strain_energy
-  (const base_matrix &E, const base_vector &params) const {
+  (const base_matrix &E, const base_vector &params, scalar_type det_trans) const {
+    if (det_trans <= scalar_type(0)) return 1e200;
     size_type N = gmm::mat_nrows(E);
     scalar_type a = params[1] + params[2] / scalar_type(2);
     scalar_type b = -(params[1] + params[2]) / scalar_type(2);
@@ -514,7 +701,7 @@ namespace getfem {
   }
 
   void Ciarlet_Geymonat_hyperelastic_law::sigma
-  (const base_matrix &E, base_matrix &result,const base_vector &params) const {
+  (const base_matrix &E, base_matrix &result, const base_vector &params, scalar_type det_trans) const {
     size_type N = gmm::mat_nrows(E);
     scalar_type a = params[1] + params[2] / scalar_type(2);
     scalar_type b = -(params[1] + params[2]) / scalar_type(2);
@@ -528,12 +715,16 @@ namespace getfem {
     gmm::copy(gmm::identity_matrix(), result);
     gmm::scale(result, scalar_type(2) * (a + b * gmm::mat_trace(C)));
     gmm::add(gmm::scaled(C, -scalar_type(2) * b), result);
-    scalar_type det = gmm::lu_inverse(C);
-    gmm::add(gmm::scaled(C, scalar_type(2) * c * det - d), result);
+    if (det_trans <= scalar_type(0))
+      gmm::add(gmm::scaled(C, 1e200), result);
+    else {
+      scalar_type det = gmm::lu_inverse(C);
+      gmm::add(gmm::scaled(C, scalar_type(2) * c * det - d), result);
+    }
   }
 
   void Ciarlet_Geymonat_hyperelastic_law::grad_sigma
-  (const base_matrix &E, base_tensor &result,const base_vector &params) const {
+  (const base_matrix &E, base_tensor &result,const base_vector &params, scalar_type) const {
     size_type N = gmm::mat_nrows(E);
     scalar_type b2 = -(params[1] + params[2]); // b * 2
     scalar_type c = (params[0]  - 2*b2) / scalar_type(4);
@@ -556,8 +747,8 @@ namespace getfem {
 	      + (C(i, j) * C(k, l)) * det*c*scalar_type(4);
       }
 
-    GMM_ASSERT1(check_symmetry(result) == 7,
-		"Fourth order tensor not symmetric : " << result);
+//     GMM_ASSERT1(check_symmetry(result) == 7,
+// 		"Fourth order tensor not symmetric : " << result);
   }
 
 
@@ -575,30 +766,30 @@ namespace getfem {
 
 
   scalar_type plane_strain_hyperelastic_law::strain_energy
-  (const base_matrix &E, const base_vector &params) const {
+  (const base_matrix &E, const base_vector &params, scalar_type det_trans) const {
     GMM_ASSERT1(gmm::mat_nrows(E) == 2, "Plane strain law is for 2D only.");
     base_matrix E3D(3,3);
     E3D(0,0)=E(0,0); E3D(1,0)=E(1,0); E3D(0,1)=E(0,1); E3D(1,1)=E(1,1); 
-    return pl->strain_energy(E3D, params);
+    return pl->strain_energy(E3D, params, det_trans);
   }
 
   void plane_strain_hyperelastic_law::sigma
-  (const base_matrix &E, base_matrix &result,const base_vector &params) const {
+  (const base_matrix &E, base_matrix &result,const base_vector &params, scalar_type det_trans) const {
     GMM_ASSERT1(gmm::mat_nrows(E) == 2, "Plane strain law is for 2D only.");
     base_matrix E3D(3,3), result3D(3,3);
     E3D(0,0)=E(0,0); E3D(1,0)=E(1,0); E3D(0,1)=E(0,1); E3D(1,1)=E(1,1);
-    pl->sigma(E3D, result3D, params);
+    pl->sigma(E3D, result3D, params, det_trans);
     result(0,0) = result3D(0,0); result(1,0) = result3D(1,0);
     result(0,1) = result3D(0,1); result(1,1) = result3D(1,1);
   }
 
   void plane_strain_hyperelastic_law::grad_sigma
-  (const base_matrix &E, base_tensor &result,const base_vector &params) const {
+  (const base_matrix &E, base_tensor &result,const base_vector &params, scalar_type det_trans) const {
     GMM_ASSERT1(gmm::mat_nrows(E) == 2, "Plane strain law is for 2D only.");
     base_matrix E3D(3,3);
     base_tensor result3D(3,3,3,3);
     E3D(0,0)=E(0,0); E3D(1,0)=E(1,0); E3D(0,1)=E(0,1); E3D(1,1)=E(1,1);
-    pl->grad_sigma(E3D, result3D, params);
+    pl->grad_sigma(E3D, result3D, params, det_trans);
     result(0,0,0,0) = result3D(0,0,0,0); result(1,0,0,0) = result3D(1,0,0,0);
     result(0,1,0,0) = result3D(0,1,0,0); result(1,1,0,0) = result3D(1,1,0,0);
     result(0,0,1,0) = result3D(0,0,1,0); result(1,0,1,0) = result3D(1,0,1,0);
@@ -779,7 +970,7 @@ namespace getfem {
       gmm::scale(E, scalar_type(1)/scalar_type(2));
       if (mf_params)
 	gmm::copy(gmm::sub_vector(PARAMS, gmm::sub_interval(i*NP,NP)), p);
-      AHL.sigma(E, sigmahathat, p);
+      AHL.sigma(E, sigmahathat, p, scalar_type(1));
       if (NFem == 3 && N == 2) {
 	//jyh : compute ez, normal on deformed surface
 	for (unsigned int l = 0; l <NFem; ++l)  {
@@ -824,6 +1015,86 @@ namespace getfem {
       }
     }
   }
+
+
+  void compute_sigmahathat(model &md,
+		     const std::string &varname, 
+		     const abstract_hyperelastic_law &AHL,
+		     const std::string &dataname,
+		     const mesh_fem &mf_sigma,
+		     model_real_plain_vector &SIGMA) {
+    const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
+    const model_real_plain_vector &u = md.real_variable(varname);
+    const mesh_fem *mf_params = md.pmesh_fem_of_variable(dataname);
+    const model_real_plain_vector &params = md.real_variable(dataname);
+    
+    size_type sl = gmm::vect_size(params);
+    if (mf_params) sl = sl * mf_params->get_qdim() / mf_params->nb_dof();
+    GMM_ASSERT1(sl == AHL.nb_params(), "Wrong number of coefficients for "
+		"the nonlinear constitutive elastic law");
+    
+    unsigned N = unsigned(mf_u.linked_mesh().dim());
+    unsigned NP = unsigned(AHL.nb_params()), NFem = mf_u.get_qdim();
+    GMM_ASSERT1(mf_sigma.nb_dof() > 0, "Bad mf_sigma");
+    size_type qqdim = mf_sigma.get_qdim();
+    size_type ratio = N*N / qqdim;
+    
+    GMM_ASSERT1(((ratio == 1) || (ratio == N*N)) &&
+		(gmm::vect_size(SIGMA) == mf_sigma.nb_dof()*ratio),
+		"The vector has not the good size");
+
+    model_real_plain_vector GRAD(mf_sigma.nb_dof()*ratio*NFem/N);
+    model_real_plain_vector PARAMS(mf_sigma.nb_dof()*NP);
+
+
+    getfem::mesh_trans_inv mti(mf_sigma.linked_mesh());
+    if (mf_params) {
+      for (size_type i = 0; i < mf_sigma.nb_dof(); ++i)
+	mti.add_point(mf_sigma.point_of_basic_dof(i));
+      interpolation(*mf_params, mti, params, PARAMS);
+    }
+
+    compute_gradient(mf_u, mf_sigma, u, GRAD);
+    base_matrix E(N, N), gradphi(NFem,N),gradphit(N,NFem), Id(N, N),
+      sigmahathat(N,N),aux(NFem,N), sigma(NFem,NFem),
+      IdNFem(NFem, NFem);
+    
+
+    base_vector p(NP);
+    if (!mf_params) gmm::copy(params, p);
+    base_vector eig(NFem);
+    base_vector ez(NFem);	// vector normal at deformed surface, (ex X ey)
+    gmm::copy(gmm::identity_matrix(), Id);
+    gmm::copy(gmm::identity_matrix(), IdNFem);
+
+    // cout << "GRAD = " << GRAD << endl;
+    // GMM_ASSERT1(false, "oops");
+
+
+    for (size_type i = 0; i < mf_sigma.nb_dof()/qqdim; ++i) {
+//       cout << "GRAD size = " << gmm::vect_size(GRAD) << endl;
+//       cout << "i = " << i << endl;
+//       cout << "i*NFem*N = " << i*NFem*N << endl;
+      
+      gmm::resize(gradphi,NFem,N);
+      std::copy(GRAD.begin()+i*NFem*N, GRAD.begin()+(i+1)*NFem*N,
+		gradphit.begin());
+      // cout << "GRAD = " << gradphit << endl;
+      gmm::copy(gmm::transposed(gradphit),gradphi);
+      for (unsigned int alpha = 0; alpha <N; ++alpha)
+	gradphi(alpha, alpha) += scalar_type(1);
+      gmm::mult(gmm::transposed(gradphi), gradphi, E);
+      gmm::add(gmm::scaled(Id, -scalar_type(1)), E);
+      gmm::scale(E, scalar_type(1)/scalar_type(2));
+      if (mf_params)
+	gmm::copy(gmm::sub_vector(PARAMS, gmm::sub_interval(i*ratio*NP,NP)),p);
+      // cout << "E = " << E << endl;
+      AHL.sigma(E, sigmahathat, p, scalar_type(1));
+      // cout << "ok" << endl;
+      std::copy(sigmahathat.begin(), sigmahathat.end(), SIGMA.begin()+i*N*N);
+    }
+  }
+
   
 
   // ----------------------------------------------------------------------
diff --git a/src/getfem_partial_mesh_fem.cc b/src/getfem_partial_mesh_fem.cc
index d08ec21..7ad9f80 100644
--- a/src/getfem_partial_mesh_fem.cc
+++ b/src/getfem_partial_mesh_fem.cc
@@ -1,32 +1,32 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_partial_mesh_fem.h"
 
 namespace getfem {
-  
+
 
   void partial_mesh_fem::clear(void)
   { mesh_fem::clear(); is_adapted = false; }
-  
+
   partial_mesh_fem::partial_mesh_fem(const mesh_fem &mef)
     : mesh_fem(mef.linked_mesh()), mf(mef)
   { is_adapted = false; }
@@ -39,7 +39,7 @@ namespace getfem {
 
   DAL_SIMPLE_KEY(special_partialmf_key, pfem);
   void partial_mesh_fem::adapt(const dal::bit_vector &kept_dofs,
-			       const dal::bit_vector &rejected_elt) {
+                               const dal::bit_vector &rejected_elt) {
     mf.context_check();
 
     if (mf.get_qdim_m() != QdimM || mf.get_qdim_n() != QdimN) {
@@ -56,17 +56,17 @@ namespace getfem {
     size_type j = 0;
     for (dal::bv_visitor i(kept_dofs); !i.finished(); ++i, ++j)
       RR(j, i) = scalar_type(1);
-    
+
     R_ = REDUCTION_MATRIX(kept_dofs.card(), mf.nb_basic_dof());
     E_ = EXTENSION_MATRIX(mf.nb_basic_dof(), kept_dofs.card());
 
     if (mf.is_reduced()) {
       gmm::row_matrix<gmm::rsvector<scalar_type> >
-	A(kept_dofs.card(), mf.nb_basic_dof());
+        A(kept_dofs.card(), mf.nb_basic_dof());
       gmm::mult(RR, mf.reduction_matrix(), A);
       gmm::copy(A, R_);
       gmm::row_matrix<gmm::rsvector<scalar_type> >
-	B(mf.nb_basic_dof(), kept_dofs.card());
+        B(mf.nb_basic_dof(), kept_dofs.card());
       gmm::mult(mf.extension_matrix(), gmm::transposed(RR), B);
       gmm::copy(B, E_);
     }
@@ -88,7 +88,7 @@ namespace getfem {
   }
 
   void partial_mesh_fem::write_to_file(const std::string &name,
-				       bool with_mesh) const {
+                                       bool with_mesh) const {
     std::ofstream o(name.c_str());
     GMM_ASSERT1(o, "impossible to open file '" << name << "'");
     o << "% GETFEM MESH_FEM FILE " << '\n';
@@ -98,7 +98,7 @@ namespace getfem {
   }
 
   dal::bit_vector select_dofs_from_im(const mesh_fem &mf, const mesh_im &mim,
-				      unsigned P) {
+                                      unsigned P) {
     const mesh &m = mf.linked_mesh();
     unsigned N = m.dim();
     if (P == unsigned(-1)) P = N;
@@ -108,7 +108,7 @@ namespace getfem {
     getfem::pfem pf_old = 0;
     getfem::pfem_precomp pfp = 0;
     pintegration_method pim1 = 0;
-    
+
     std::vector<scalar_type> areas(mf.nb_basic_dof());
     std::vector<scalar_type> area_supports(mf.nb_basic_dof());
     dal::bit_vector kept_dofs;
@@ -120,16 +120,16 @@ namespace getfem {
       if (pim == im_none()) continue;
       getfem::pfem pf = mf.fem_of_element(cv);
       GMM_ASSERT1(pim->type() == IM_APPROX,
-		  "Works only with approximate integration");
+                  "Works only with approximate integration");
       papprox_integration pai2= pim->approx_method();
       static papprox_integration pai2_old = 0;
       if (pgt_old != pgt || pai2 != pai2_old) {
-	pim1 = getfem::classical_approx_im(pgt, 2);
-      	pgp2 = bgeot::geotrans_precomp(pgt,&(pai2->integration_points()),pim);
+        pim1 = getfem::classical_approx_im(pgt, 2);
+              pgp2 = bgeot::geotrans_precomp(pgt,&(pai2->integration_points()),pim);
       }
       if (pai2 != pai2_old || pf != pf_old) {
-	pf_old = pf;
-	pfp = getfem::fem_precomp(pf, &(pai2->integration_points()), pim);
+        pf_old = pf;
+        pfp = getfem::fem_precomp(pf, &(pai2->integration_points()), pim);
       }
       pai2_old = pai2;
       pgt_old = pgt;
@@ -137,26 +137,30 @@ namespace getfem {
       bgeot::geotrans_interpolation_context c2(pgp2, 0, G);
       scalar_type area1 = convex_area_estimate(pgt, G, pim1);
 
+      size_type tdim = mf.get_qdim() / pf->target_dim();
+
       for (size_type i = 0; i < pai2->nb_points_on_convex(); ++i) {
-	for (unsigned d = 0; d < pf->nb_dof(cv); ++d) {
-	  // deals with Qdim eventually ...
-	  if (i == 0) areas[mf.ind_basic_dof_of_element(cv)[d]] += area1;
-	  c2.set_ii(i);
-	  area_supports[mf.ind_basic_dof_of_element(cv)[d]]
-	    += pai2->coeff(i) * c2.J() * gmm::sqr(pfp->val(i)[d]);
-	  //	    * ((gmm::abs(pfp->val(i)[d]) < 1e-10) ? 0.0 : 1.0);
-	}
+        for (unsigned d = 0; d < pf->nb_dof(cv); ++d) {
+          for (size_type j = 0; j < tdim; ++j) {
+            if (i == 0)
+              areas[mf.ind_basic_dof_of_element(cv)[d*tdim+j]] += area1;
+            c2.set_ii(i);
+            area_supports[mf.ind_basic_dof_of_element(cv)[d*tdim+j]]
+              += pai2->coeff(i) * c2.J() * gmm::sqr(pfp->val(i)[d]);
+          }
+          //            * ((gmm::abs(pfp->val(i)[d]) < 1e-10) ? 0.0 : 1.0);
+        }
       }
     }
 
-    
+
     std::vector<scalar_type> areas2(mf.nb_dof());
     std::vector<scalar_type> area_supports2(mf.nb_dof());
 
     if (mf.is_reduced()) {
       gmm::mult(gmm::transposed(mf.extension_matrix()), areas, areas2);
       gmm::mult(gmm::transposed(mf.extension_matrix()), area_supports,
-		area_supports2);
+                area_supports2);
     }
     else {
       gmm::copy(areas, areas2);
@@ -165,7 +169,7 @@ namespace getfem {
 
     for (size_type i = 0; i < mf.nb_dof(); ++i) {
       if (area_supports2[i] > pow(1e-14 * areas2[i], scalar_type(P) / N))
-	kept_dofs.add(i);
+        kept_dofs.add(i);
     }
 
     return kept_dofs;
diff --git a/src/getfem_plasticity.cc b/src/getfem_plasticity.cc
index 2286500..376b290 100644
--- a/src/getfem_plasticity.cc
+++ b/src/getfem_plasticity.cc
@@ -1,30 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===================================================================
-//
-// Copyright (C) 2000-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  
-// you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License 
-// as published
-// by  the  Free Software Foundation;  
-// either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of 
-// the GNU Lesser General Public License
-// along  with  this program;  
-// if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/getfem_models.h"
diff --git a/src/getfem_projected_fem.cc b/src/getfem_projected_fem.cc
new file mode 100644
index 0000000..1e0c22d
--- /dev/null
+++ b/src/getfem_projected_fem.cc
@@ -0,0 +1,783 @@
+/*===========================================================================
+ 
+ Copyright (C) 2012-2012 Yves Renard, Konstantinos Poulios
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+#include "getfem/getfem_projected_fem.h"
+
+namespace getfem {
+
+  typedef bgeot::convex<base_node>::dref_convex_pt_ct dref_convex_pt_ct;
+//  typedef bgeot::basic_mesh::ref_mesh_face_pt_ct ref_mesh_face_pt_ct;
+
+  /* calculates the projection of a point on the face of a convex
+   * Input:
+   *   pgt : the geometric transformation of the convex
+   *   G_cv: the nodes of the convex, stored in columns
+   *   fc  : the face of the convex to project on
+   *   pt  : the point to be projected
+   * Output:
+   *   proj_ref: the projected point in the reference element
+  */
+  void projection_on_convex_face
+    (const bgeot::pgeometric_trans pgt, const base_matrix &G_cv,
+     const short_type fc, const base_node &pt, 
+     base_node &proj_ref) {
+
+    size_type N = gmm::mat_nrows(G_cv); // dimension of the target space
+    size_type P = pgt->dim();           // dimension of the reference element space
+
+    size_type nb_pts_cv = gmm::mat_ncols(G_cv);
+    size_type nb_pts_fc = pgt->structure()->nb_points_of_face(fc);
+
+    GMM_ASSERT1( N == pt.size(), "Dimensions mismatch");
+    GMM_ASSERT1( nb_pts_cv == pgt->nb_points(), "Dimensions mismatch");
+
+    bgeot::convex_ind_ct ind_pts_fc = pgt->structure()->ind_points_of_face(fc);
+
+    base_matrix G_fc(N, nb_pts_fc);
+    for (size_type i=0; i < nb_pts_fc; i++)
+      gmm::copy(gmm::mat_col(G_cv,ind_pts_fc[i]),gmm::mat_col(G_fc,i));
+
+    // Local base on reference face
+    base_matrix base_ref_fc(N,P-1);
+    {
+      dref_convex_pt_ct dref_pts_fc = pgt->convex_ref()->dir_points_of_face(fc);
+      GMM_ASSERT1( dref_pts_fc.size() == P, "Dimensions mismatch");
+      for (size_type i = 0; i < P-1; ++i)
+          gmm::copy(dref_pts_fc[i+1] - dref_pts_fc[0], gmm::mat_col(base_ref_fc,i));
+    }
+
+    proj_ref.resize(P);
+
+    base_node proj(N); // the projected point in the real element
+    base_node vres(P); // residual vector
+    scalar_type res= 1.;
+
+    // initial guess
+    proj_ref = gmm::mean_value(pgt->convex_ref()->points_of_face(fc));
+
+    base_vector val(nb_pts_fc);
+    pgt->poly_vector_val(proj_ref, ind_pts_fc, val);
+    gmm::mult(G_fc, val, proj);
+
+    base_matrix K(N,P-1);
+
+    base_matrix grad_fc(nb_pts_fc, P);
+    base_matrix grad_fc1(nb_pts_fc, P-1);
+    base_matrix B(N,P-1), BB(N,P), CS(P-1,P-1);
+
+    scalar_type EPS = 10E-12;
+    unsigned cnt = 50;
+    while (res > EPS && --cnt) {
+      // computation of the pseudo inverse matrix B at point proj_ref
+      pgt->poly_vector_grad(proj_ref, ind_pts_fc, grad_fc);
+      gmm::mult(grad_fc, base_ref_fc, grad_fc1);
+      gmm::mult(G_fc, grad_fc1, K);
+      gmm::mult(gmm::transposed(K), K, CS);
+      gmm::lu_inverse(CS);
+      gmm::mult(K, CS, B);
+      gmm::mult(B, gmm::transposed(base_ref_fc), BB);
+
+      // Projection onto the face of the convex
+      gmm::mult_add(gmm::transposed(BB), pt - proj, proj_ref);
+      pgt->poly_vector_val(proj_ref, ind_pts_fc, val);
+      gmm::mult(G_fc, val, proj);
+
+      gmm::mult(gmm::transposed(BB), pt - proj, vres);
+      res = gmm::vect_norm2(vres);
+    }
+    GMM_ASSERT1( res <= EPS,
+                "Iterative pojection on convex face did not converge");
+  }
+
+
+  /* calculates the normal at a specific point on the face of a convex
+   * Input:
+   *   pgt   : the geometric transformation of the convex
+   *   G_cv  : the nodes of the convex, stored in columns
+   *   fc    : the face of the convex to project on
+   *   ref_pt: the point in the reference element
+   * Output:
+   *   normal  : the surface normal in the real element corresponding at
+   *             the location of ref_pt in the refernce element
+  */
+  void normal_on_convex_face
+    (const bgeot::pgeometric_trans pgt, const base_matrix &G_cv,
+     const short_type fc, const base_node &ref_pt, base_node &normal) {
+
+    size_type N = gmm::mat_nrows(G_cv); // dimension of the target space
+    size_type P = pgt->dim();           // dimension of the reference element space
+
+    size_type nb_pts_cv = gmm::mat_ncols(G_cv);
+    size_type nb_pts_fc = pgt->structure()->nb_points_of_face(fc);
+
+    GMM_ASSERT1( nb_pts_cv == pgt->nb_points(), "Dimensions mismatch");
+
+    bgeot::convex_ind_ct ind_pts_fc = pgt->structure()->ind_points_of_face(fc);
+
+    base_matrix G_fc(N, nb_pts_fc);
+    for (size_type i=0; i < nb_pts_fc; i++)
+      gmm::copy(gmm::mat_col(G_cv,ind_pts_fc[i]),gmm::mat_col(G_fc,i));
+
+    // Local base on reference face
+    base_matrix base_ref_fc(N,P-1);
+    {
+      dref_convex_pt_ct dref_pts_fc = pgt->convex_ref()->dir_points_of_face(fc);
+      GMM_ASSERT1( dref_pts_fc.size() == P, "Dimensions mismatch");
+      for (size_type i = 0; i < P-1; ++i)
+          gmm::copy(dref_pts_fc[i+1] - dref_pts_fc[0], gmm::mat_col(base_ref_fc,i));
+    }
+
+    normal.resize(N);
+
+    base_matrix K(N,P-1);
+    { // calculate K at the final point
+      base_matrix grad_fc(nb_pts_fc, P);
+      base_matrix grad_fc1(nb_pts_fc, P-1);
+      pgt->poly_vector_grad(ref_pt, ind_pts_fc, grad_fc);
+      gmm::mult(grad_fc, base_ref_fc, grad_fc1);
+      gmm::mult(G_fc, grad_fc1, K);
+    }
+
+    base_matrix KK(N,P);
+    { // calculate KK
+      base_matrix grad_cv(nb_pts_cv, P);
+      pgt->poly_vector_grad(ref_pt, grad_cv);
+      gmm::mult(G_cv, grad_cv, KK);
+    }
+
+    base_matrix bases_product(P-1, P);
+    gmm::mult(gmm::transposed(K), KK, bases_product);
+
+    for (size_type i = 0; i < P; ++i) {
+      std::vector<size_type> ind(0);
+      for (size_type j = 0; j < P; ++j)
+        if (j != i ) ind.push_back(j);
+      scalar_type det = gmm::lu_det(gmm::sub_matrix(bases_product,
+                                                    gmm::sub_interval(0, P-1),
+                                                    gmm::sub_index(ind)      ) );
+      gmm::add(gmm::scaled(gmm::mat_col(KK, i), (i % 2) ? -det : +det ), normal);
+    }
+
+    // normalizing
+    gmm::scale(normal, 1/gmm::vect_norm2(normal));
+ 
+    // ensure that normal points outwards
+    base_node cv_center(N), fc_center(N);
+    for (size_type i=0; i < nb_pts_cv; i++)
+      gmm::add(gmm::mat_col(G_cv,i), cv_center);
+    for (size_type i=0; i < nb_pts_fc; i++)
+      gmm::add(gmm::mat_col(G_fc,i), fc_center);
+    gmm::scale(cv_center, scalar_type(1)/scalar_type(nb_pts_cv));
+    gmm::scale(fc_center, scalar_type(1)/scalar_type(nb_pts_fc));
+    if (gmm::vect_sp(normal, fc_center -cv_center) < 0)
+      gmm::scale(normal, scalar_type(-1));
+  }
+
+  void projected_fem::build_kdtree(void) const {
+    tree.clear();
+    dal::bit_vector dofs=mf_source.dof_on_region(-1);
+    dofs.setminus(blocked_dofs);
+    dim_type qdim=target_dim();
+    for (size_type dof=0; dof < mf_source.nb_dof(); dof += qdim) {
+        if (dofs.is_in(dof))
+            tree.add_point_with_id(mf_source.point_of_basic_dof(dof), dof);
+    }
+  }
+
+  bool projected_fem::find_a_projected_point(base_node pt, base_node &ptr_proj,
+                                             size_type &cv_proj, short_type &fc_proj) const {
+
+    bgeot::index_node_pair ipt;
+    //scalar_type dist = 
+    tree.nearest_neighbor(ipt, pt);
+
+    size_type cv_sel(-1);
+    short_type fc_sel(-1);
+    scalar_type is_in_sel(1e10);
+    base_node proj_ref, proj_ref_sel;
+    const getfem::mesh::ind_cv_ct cvs = mf_source.convex_to_basic_dof(ipt.i);
+    for (size_type i=0; i < cvs.size(); ++i) {
+      size_type cv = cvs[i];
+      const bgeot::pgeometric_trans pgt = mf_source.linked_mesh().trans_of_convex(cv);
+      if (rg_source.is_in(cv)) { // project on the convex
+        bool gt_invertible;
+        gic = bgeot::geotrans_inv_convex(mf_source.linked_mesh().convex(cv), pgt);
+        gic.invert(pt, proj_ref, gt_invertible);
+        if (gt_invertible) {
+          scalar_type is_in = pgt->convex_ref()->is_in(proj_ref);
+          if (is_in < is_in_sel) {
+            is_in_sel = is_in;
+            cv_sel = cv;
+            fc_sel = short_type(-1);
+            proj_ref_sel = proj_ref;
+          }
+        }
+      }
+      else { // project on convex faces
+        mesh_region::face_bitset faces = rg_source.faces_of_convex(cv);
+        if (faces.count() > 0) {
+          bgeot::vectors_to_base_matrix(G, mf_source.linked_mesh().points_of_convex(cv));
+          // this should rarely be more than one face
+          for (short_type f = 0; f < faces.size(); ++f) {
+            if (faces.test(f)) {
+              projection_on_convex_face(pgt, G, f, pt, proj_ref);
+              scalar_type is_in = pgt->convex_ref()->is_in(proj_ref);
+              if (is_in < is_in_sel) {
+                is_in_sel = is_in;
+                cv_sel = cv;
+                fc_sel = f;
+                proj_ref_sel = proj_ref;
+              }
+            }
+          }
+        }
+      }
+    }
+    if (cv_sel != size_type(-1) && is_in_sel < 0.05) {  //FIXME
+        cv_proj = cv_sel;
+        fc_proj = fc_sel;
+        ptr_proj = proj_ref_sel;
+        return true;
+    }
+    return false;
+  }
+
+  void projected_fem::update_from_context(void) const {
+    fictx_cv = size_type(-1);
+    dim_ = dim_type(-1);
+
+    dim_type N = mf_source.linked_mesh().dim();
+    GMM_ASSERT1( N == mim_target.linked_mesh().dim(),
+                 "Dimensions mismatch between the source and the target meshes");
+
+    build_kdtree();
+
+    elements.clear();
+    ind_dof.resize(mf_source.nb_basic_dof());
+    size_type max_dof = 0;
+    if (rg_target.id() != mesh_region::all_convexes().id() &&
+        rg_target.is_empty()) {
+      dim_ = mim_target.linked_mesh().dim();
+      return;
+    }
+
+    for (mr_visitor i(rg_target); !i.finished(); ++i) {
+      size_type cv = i.cv(); // refers to the target mesh
+      short_type f = i.f();  // refers to the target mesh
+
+      dim_type dim__ = mim_target.linked_mesh().structure_of_convex(cv)->dim();
+      if (dim_ == dim_type(-1)) {
+        dim_ = dim__;
+        if (i.is_face()) dim__ = dim_type(dim__ - 1);
+        GMM_ASSERT1(dim__ < N, "The projection should take place in lower "
+                              "dimensions than the mesh dimension. Otherwise "
+                              "use the interpolated_fem object instead.");
+      }
+      else
+        GMM_ASSERT1(dim_ == dim__,
+                    "Convexes/faces of different dimension in the target mesh");
+
+      pintegration_method pim = mim_target.int_method_of_element(cv);
+      GMM_ASSERT1(pim->type() == IM_APPROX,
+                  "You have to use approximated integration to project a fem");
+      papprox_integration pai = pim->approx_method();
+      bgeot::pgeometric_trans pgt = mim_target.linked_mesh().trans_of_convex(cv);
+      dal::bit_vector dofs;
+      size_type last_cv(-1); // refers to the source mesh
+      short_type last_f(-1); // refers to the source mesh
+      size_type nb_pts = i.is_face() ? pai->nb_points_on_face(f) : pai->nb_points();
+      size_type start_pt = i.is_face() ? pai->ind_first_point_on_face(f) : 0;
+      elt_projection_data &e = elements[cv];
+      for (size_type k = 0; k < nb_pts; ++k) {
+        gausspt_projection_data &gppd = e.gausspt[start_pt + k];
+        /* todo: use a geotrans_interpolation_context */
+        base_node gpt = pgt->transform(i.is_face() ? pai->point_on_face(f,k) : pai->point(k),
+                                       mim_target.linked_mesh().points_of_convex(cv));
+
+        gppd.iflags = find_a_projected_point(gpt, gppd.ptref, gppd.cv, gppd.f) ? 1 : 0;
+        if (gppd.iflags) {
+          // calculate gppd.normal
+          const bgeot::pgeometric_trans pgt_source = mf_source.linked_mesh().trans_of_convex(gppd.cv);
+          bgeot::vectors_to_base_matrix(G, mf_source.linked_mesh().points_of_convex(gppd.cv));
+          normal_on_convex_face(pgt_source, G, gppd.f, gppd.ptref, gppd.normal);
+          // calculate gppd.gap
+          base_node ppt = pgt_source->transform(gppd.ptref, G);
+          gppd.gap = gmm::vect_sp(gpt-ppt, gppd.normal);
+        }
+
+        if (gppd.iflags && (last_cv != gppd.cv || last_f != gppd.f)) {
+          if (gppd.f == short_type(-1)) { // convex
+            size_type nbdof = mf_source.nb_basic_dof_of_element(gppd.cv);
+            for (size_type loc_dof = 0; loc_dof < nbdof; ++loc_dof) {
+              size_type idof = mf_source.ind_basic_dof_of_element(gppd.cv)[loc_dof];
+              if (!(blocked_dofs[idof])) dofs.add(idof);
+            }
+          }
+          else { // convex face
+            size_type nbdof = mf_source.nb_basic_dof_of_face_of_element(gppd.cv, gppd.f);
+            for (size_type loc_dof = 0; loc_dof < nbdof; ++loc_dof) {
+              size_type idof = mf_source.ind_basic_dof_of_face_of_element(gppd.cv, gppd.f)[loc_dof];
+              if (!(blocked_dofs[idof])) dofs.add(idof);
+            }
+          }
+          last_cv = gppd.cv;
+          last_f = gppd.f;
+        }
+      }
+      e.nb_dof = dofs.card();
+      e.pim = pim;
+      e.inddof.resize(dofs.card());
+      max_dof = std::max(max_dof, dofs.card());
+      size_type cnt = 0;
+      for (dal::bv_visitor idof(dofs); !idof.finished(); ++idof)
+        { e.inddof[cnt] = idof; ind_dof[idof] = cnt++; }
+      for (size_type k = 0; k < nb_pts; ++k) {
+        gausspt_projection_data &gppd = e.gausspt[start_pt + k];
+        if (gppd.iflags) {
+          if (gppd.f == short_type(-1)) { // convex
+            size_type nbdof = mf_source.nb_basic_dof_of_element(gppd.cv);
+            for (size_type loc_dof = 0; loc_dof < nbdof; ++loc_dof) {
+              size_type idof = mf_source.ind_basic_dof_of_element(gppd.cv)[loc_dof];
+              gppd.local_dof[loc_dof] = dofs.is_in(idof) ? ind_dof[idof]
+                                                         : size_type(-1);
+            }
+          }
+          else { // convex face
+            size_type nbdof = mf_source.nb_basic_dof_of_face_of_element(gppd.cv, gppd.f);
+            pfem pf = mf_source.fem_of_element(gppd.cv);
+            bgeot::convex_ind_ct ind_pts_fc = pf->structure(gppd.cv)->ind_points_of_face(gppd.f);
+            unsigned rdim = target_dim() / pf->target_dim();
+            if (rdim == 1)
+              for (size_type loc_dof = 0; loc_dof < nbdof; ++loc_dof) { // local dof with respect to the source convex face
+                size_type idof = mf_source.ind_basic_dof_of_face_of_element(gppd.cv, gppd.f)[loc_dof];
+                size_type loc_dof2 = ind_pts_fc[loc_dof]; // local dof with respect to the source convex
+                gppd.local_dof[loc_dof2] = dofs.is_in(idof) ? ind_dof[idof]
+                                                            : size_type(-1);
+              }
+            else
+              for (size_type ii = 0; ii < nbdof/rdim; ++ii)
+                for (size_type jj = 0; jj < rdim; ++jj) {
+                  size_type loc_dof = ii*rdim + jj; // local dof with respect to the source convex face
+                  size_type idof = mf_source.ind_basic_dof_of_face_of_element(gppd.cv, gppd.f)[loc_dof];
+                  size_type loc_dof2 = ind_pts_fc[ii]*rdim + jj; // local dof with respect to the source convex
+                  gppd.local_dof[loc_dof2] = dofs.is_in(idof) ? ind_dof[idof]
+                                                              : size_type(-1);
+                }
+          }
+        }
+      }
+    }
+    /** setup global dofs, with dummy coordinates */
+    base_node P(dim()); gmm::fill(P,1./20);
+    node_tab_.resize(max_dof);
+    std::fill(node_tab_.begin(), node_tab_.end(), P);
+    pspt_valid = false;
+    dof_types_.resize(max_dof);
+    std::fill(dof_types_.begin(), dof_types_.end(),
+              global_dof(dim()));
+
+    /* ind_dof should be kept full of -1 ( real_base_value and
+       grad_base_value expect that)
+    */
+    std::fill(ind_dof.begin(), ind_dof.end(), size_type(-1));
+  }
+
+  size_type projected_fem::nb_dof(size_type cv) const
+  {
+    context_check();
+    GMM_ASSERT1(mim_target.linked_mesh().convex_index().is_in(cv),
+                "Wrong convex number: " << cv);
+    std::map<size_type,elt_projection_data>::const_iterator eit;
+    eit = elements.find(cv);
+    return (eit != elements.end()) ? eit->second.nb_dof : 0;
+  }
+
+  size_type projected_fem::index_of_global_dof(size_type cv, size_type i) const
+  {
+    std::map<size_type,elt_projection_data>::const_iterator eit;
+    eit = elements.find(cv);
+    GMM_ASSERT1(eit != elements.end(), "Wrong convex number: " << cv);
+    return eit->second.inddof[i];
+  }
+
+  bgeot::pconvex_ref projected_fem::ref_convex(size_type cv) const
+  { return mim_target.int_method_of_element(cv)->approx_method()->ref_convex(); }
+
+  const bgeot::convex<base_node> &projected_fem::node_convex(size_type cv) const
+  {
+    GMM_ASSERT1(mim_target.linked_mesh().convex_index().is_in(cv),
+                "Wrong convex number: " << cv);
+    return *(bgeot::generic_dummy_convex_ref
+             (dim(), nb_dof(cv),
+              mim_target.linked_mesh().structure_of_convex(cv)->nb_faces()));
+  }
+
+  bgeot::pstored_point_tab projected_fem::node_tab(size_type)
+    const {
+    if (!pspt_valid)
+      { pspt = bgeot::store_point_tab(node_tab_); pspt_valid = true; }
+    return pspt;
+  }
+
+  void projected_fem::base_value(const base_node &, base_tensor &) const
+  { GMM_ASSERT1(false, "No base values, real only element."); }
+  void projected_fem::grad_base_value(const base_node &,
+                                      base_tensor &) const
+  { GMM_ASSERT1(false, "No grad values, real only element."); }
+  void projected_fem::hess_base_value(const base_node &,
+                                      base_tensor &) const
+  { GMM_ASSERT1(false, "No hess values, real only element."); }
+
+  inline void projected_fem::actualize_fictx(pfem pf, size_type cv,
+                                             const base_node &ptr) const {
+    if (fictx_cv != cv) {
+      bgeot::vectors_to_base_matrix
+        (G, mf_source.linked_mesh().points_of_convex(cv));
+      fictx = fem_interpolation_context
+        (mf_source.linked_mesh().trans_of_convex(cv), pf, base_node(), G, cv,
+         size_type(-1));
+      fictx_cv = cv;
+    }
+    fictx.set_xref(ptr);
+  }
+
+  void projected_fem::real_base_value(const fem_interpolation_context& c,
+                                      base_tensor &t, bool) const {
+    std::map<size_type,elt_projection_data>::iterator eit;
+    eit = elements.find(c.convex_num());
+    if (eit == elements.end()) {
+      mi2[1] = target_dim(); mi2[0] = short_type(0);
+      t.adjust_sizes(mi2);
+      std::fill(t.begin(), t.end(), scalar_type(0));
+      return;
+    }
+//    GMM_ASSERT1(eit != elements.end(), "Wrong convex number: " << c.convex_num());
+    elt_projection_data &e = eit->second;
+
+    mi2[1] = target_dim(); mi2[0] = short_type(e.nb_dof);
+    t.adjust_sizes(mi2);
+    std::fill(t.begin(), t.end(), scalar_type(0));
+    if (e.nb_dof == 0) return;
+
+    std::map<size_type,gausspt_projection_data>::iterator git;
+    git = e.gausspt.find(c.ii());
+    if (c.have_pgp() &&
+        (&c.pgp()->get_point_tab()
+         == &e.pim->approx_method()->integration_points()) &&
+        git != e.gausspt.end()) {
+      gausspt_projection_data &gppd = git->second;
+      if (gppd.iflags & 1) {
+        if (gppd.iflags & 2) {
+          t = gppd.base_val;
+          return;
+        }
+        size_type cv = gppd.cv;
+        pfem pf = mf_source.fem_of_element(cv);
+        actualize_fictx(pf, cv, gppd.ptref);
+        pf->real_base_value(fictx, taux);
+        unsigned rdim = target_dim() / pf->target_dim();
+        std::map<size_type,size_type>::const_iterator ii;
+        if (rdim == 1) // mdim == 0
+          for (size_type i = 0; i < pf->nb_dof(cv); ++i) {
+            ii = gppd.local_dof.find(i);
+            if (ii != gppd.local_dof.end() && ii->second != size_type(-1))
+              for (size_type j = 0; j < target_dim(); ++j)
+                t(ii->second,j) = taux(i,j);
+          }
+        else // mdim == 1
+          for (size_type i = 0; i < pf->nb_dof(cv); ++i)
+            for (size_type j = 0; j < target_dim(); ++j) {
+              ii = gppd.local_dof.find(i*rdim+j);
+              if (ii != gppd.local_dof.end() && ii->second != size_type(-1))
+                t(ii->second,j) = taux(i,0);
+            }
+
+        if (store_values) {
+          gppd.base_val = t;
+          gppd.iflags |= 2;
+        }
+      }
+    }
+    else {
+      size_type cv;
+      short_type f;
+      if (find_a_projected_point(c.xreal(), ptref, cv, f)) {
+        pfem pf = mf_source.fem_of_element(cv);
+        actualize_fictx(pf, cv, ptref);
+        pf->real_base_value(fictx, taux);
+
+        for (size_type i = 0; i < e.nb_dof; ++i)
+          ind_dof.at(e.inddof[i]) = i;
+
+        unsigned rdim = target_dim() / pf->target_dim();
+        if (rdim == 1) // mdim == 0
+          for (size_type i = 0; i < pf->nb_dof(cv); ++i) {
+            size_type ii = ind_dof.at(mf_source.ind_basic_dof_of_element(cv)[i]);
+            if (ii != size_type(-1)) {
+              for (size_type j = 0; j < target_dim(); ++j)
+                t(ii,j) = taux(i,j);
+            }
+          }
+        else // mdim == 1
+          for (size_type i = 0; i < pf->nb_dof(cv); ++i)
+            for (size_type j = 0; j < target_dim(); ++j) {
+              size_type ij = ind_dof.at(mf_source.ind_basic_dof_of_element(cv)[i*rdim+j]);
+              if (ij != size_type(-1))
+                t(ij,j) = taux(i,0);
+            }
+
+        for (size_type i = 0; i < e.nb_dof; ++i)
+          ind_dof[e.inddof[i]] = size_type(-1);
+      }
+    }
+
+  }
+
+  void projected_fem::real_grad_base_value(const fem_interpolation_context& c,
+                                           base_tensor &t, bool) const {
+    std::map<size_type,elt_projection_data>::iterator eit;
+    eit = elements.find(c.convex_num());
+    if (eit == elements.end()) {
+    mi3[2] = mf_source.linked_mesh().dim(); mi3[1] = target_dim(); mi3[0] = short_type(0);
+      t.adjust_sizes(mi2);
+      std::fill(t.begin(), t.end(), scalar_type(0));
+      return;
+    }
+//    GMM_ASSERT1(eit != elements.end(), "Wrong convex number: " << c.convex_num());
+    elt_projection_data &e = eit->second;
+
+    size_type N = mf_source.linked_mesh().dim();
+    mi3[2] = short_type(N); mi3[1] = target_dim(); mi3[0] = short_type(e.nb_dof);
+    t.adjust_sizes(mi3);
+    std::fill(t.begin(), t.end(), scalar_type(0));
+    if (e.nb_dof == 0) return;
+
+    std::map<size_type,gausspt_projection_data>::iterator git;
+    git = e.gausspt.find(c.ii());
+    if (c.have_pgp() &&
+        (&c.pgp()->get_point_tab()
+         == &e.pim->approx_method()->integration_points()) &&
+        git != e.gausspt.end()) {
+      gausspt_projection_data &gppd = git->second;
+      if (gppd.iflags & 1) {
+        if (gppd.iflags & 4) {
+          t = gppd.grad_val;
+          return;
+        }
+        size_type cv = gppd.cv;
+        pfem pf = mf_source.fem_of_element(cv);
+        actualize_fictx(pf, cv, gppd.ptref);
+        pf->real_grad_base_value(fictx, taux);
+
+        unsigned rdim = target_dim() / pf->target_dim();
+        std::map<size_type,size_type>::const_iterator ii;
+        if (rdim == 1) // mdim == 0
+          for (size_type i = 0; i < pf->nb_dof(cv); ++i) {
+            ii = gppd.local_dof.find(i);
+            if (ii != gppd.local_dof.end() && ii->second != size_type(-1))
+              for (size_type j = 0; j < target_dim(); ++j)
+                for (size_type k = 0; k < N; ++k)
+                  t(ii->second, j, k) = taux(i, j, k);
+          }
+        else // mdim == 1
+          for (size_type i = 0; i < pf->nb_dof(cv); ++i)
+            for (size_type j = 0; j < target_dim(); ++j) {
+              ii = gppd.local_dof.find(i*rdim+j);
+              if (ii != gppd.local_dof.end() && ii->second != size_type(-1))
+                for (size_type k = 0; k < N; ++k)
+                  t(ii->second, j, k) = taux(i, 0, k);
+            }
+        if (store_values) {
+          gppd.grad_val = t;
+          gppd.iflags |= 4;
+        }
+      }
+    }
+    else {
+      size_type cv;
+      short_type f;
+      if (find_a_projected_point(c.xreal(), ptref, cv, f)) {
+        pfem pf = mf_source.fem_of_element(cv);
+        actualize_fictx(pf, cv, ptref);
+        pf->real_grad_base_value(fictx, taux);
+        for (size_type i = 0; i < e.nb_dof; ++i)
+          ind_dof.at(e.inddof[i]) = i;
+
+        unsigned rdim = target_dim() / pf->target_dim();
+        if (rdim == 1) // mdim == 0
+          for (size_type i = 0; i < pf->nb_dof(cv); ++i) {
+            size_type ii = ind_dof.at(mf_source.ind_basic_dof_of_element(cv)[i]);
+            if (ii != size_type(-1))
+              for (size_type j = 0; j < target_dim(); ++j)
+                for (size_type k = 0; k < N; ++k)
+                  t(ii,j,k) = taux(i,j,k);
+          }
+        else // mdim == 1
+          for (size_type i = 0; i < pf->nb_dof(cv); ++i)
+            for (size_type j = 0; j < target_dim(); ++j) {
+              size_type ij = ind_dof.at(mf_source.ind_basic_dof_of_element(cv)[i*rdim+j]);
+              if (ij != size_type(-1))
+                for (size_type k = 0; k < N; ++k)
+                  t(ij,j,k) = taux(i,0,k);
+            }
+
+        for (size_type i = 0; i < e.nb_dof; ++i)
+          ind_dof[e.inddof[i]] = size_type(-1);
+      }
+    }
+  }
+
+  void projected_fem::real_hess_base_value
+  (const fem_interpolation_context&, base_tensor &, bool) const
+  { GMM_ASSERT1(false, "Sorry, to be done."); }
+
+  void projected_fem::projection_data(const fem_interpolation_context& c,
+                                      base_node &normal, scalar_type &gap) const {
+    std::map<size_type,elt_projection_data>::iterator eit;
+    eit = elements.find(c.convex_num());
+    GMM_ASSERT1(eit != elements.end(), "Wrong convex number: " << c.convex_num());
+    elt_projection_data &e = eit->second;
+    if (e.nb_dof == 0) { // return undefined normal vector and huge gap
+        normal = base_node(c.N());
+        gap = 1e12;
+        return;
+    }
+
+    std::map<size_type,gausspt_projection_data>::iterator git;
+    git = e.gausspt.find(c.ii());
+    if (c.have_pgp() &&
+        (&c.pgp()->get_point_tab()
+         == &e.pim->approx_method()->integration_points()) &&
+        git != e.gausspt.end()) {
+      gausspt_projection_data &gppd = git->second;
+      if (gppd.iflags & 1) {
+        normal = gppd.normal;
+        gap = gppd.gap;
+      }
+      else { // return undefined normal vector and huge gap
+        normal = base_node(c.N());
+        gap = 1e12;
+      }
+    }
+    else {
+      size_type cv;
+      short_type f;
+      if (find_a_projected_point(c.xreal(), ptref, cv, f)) {
+        const bgeot::pgeometric_trans pgt = mf_source.linked_mesh().trans_of_convex(cv);
+        bgeot::vectors_to_base_matrix(G, mf_source.linked_mesh().points_of_convex(cv));
+        normal_on_convex_face(pgt, G, f, ptref, normal);
+        base_node ppt = pgt->transform(ptref, G);
+        gap = gmm::vect_sp(c.xreal()-ppt, normal);
+      }
+      else { // return undefined normal vector and huge gap
+        normal = base_node(c.N());
+        gap = 1e12;
+      }
+    }
+
+  }
+
+  dal::bit_vector projected_fem::projected_convexes() const {
+    dal::bit_vector bv;
+    std::map<size_type,elt_projection_data>::const_iterator eit;
+    for (eit = elements.begin(); eit != elements.end(); ++eit) {
+      std::map<size_type,gausspt_projection_data>::const_iterator git;
+      for (git = eit->second.gausspt.begin(); git != eit->second.gausspt.end(); ++git) {
+        if (git->second.iflags)
+          bv.add(git->second.cv);
+      }
+    }
+    return bv;
+  }
+
+  void projected_fem::gauss_pts_stats(unsigned &ming, unsigned &maxg,
+                                      scalar_type &meang) const {
+    std::vector<unsigned> v(mf_source.linked_mesh().convex_index().last_true()+1);
+    std::map<size_type,elt_projection_data>::const_iterator eit;
+    for (eit = elements.begin(); eit != elements.end(); ++eit) {
+      std::map<size_type,gausspt_projection_data>::const_iterator git;
+      for (git = eit->second.gausspt.begin(); git != eit->second.gausspt.end(); ++git) {
+        if (git->second.iflags)
+          v[git->second.cv]++;
+      }
+    }
+
+    ming = 100000; maxg = 0; meang = 0;
+    unsigned cntg = 0;
+    for (dal::bv_visitor cv(mf_source.linked_mesh().convex_index());
+         !cv.finished(); ++cv) {
+      ming = std::min(ming, v[cv]);
+      maxg = std::max(maxg, v[cv]);
+      meang += v[cv];
+      if (v[cv] > 0) ++cntg; 
+    }
+    meang /= scalar_type(cntg);
+  }
+
+  size_type projected_fem::memsize() const {
+    size_type sz = 0;
+    sz += blocked_dofs.memsize();
+    sz += sizeof(*this);
+    sz += elements.size() * sizeof(elt_projection_data); // Wrong for std::map
+    std::map<size_type,elt_projection_data>::const_iterator eit;
+    for (eit = elements.begin(); eit != elements.end(); ++eit) {
+      sz += eit->second.gausspt.size() * sizeof(gausspt_projection_data); // Wrong for std::map
+      sz += eit->second.inddof.capacity() * sizeof(size_type);
+      std::map<size_type,gausspt_projection_data>::const_iterator git;
+      for (git = eit->second.gausspt.begin(); git != eit->second.gausspt.end(); ++git) {
+        sz += git->second.local_dof.size() * sizeof(size_type); // Wrong for std::map
+      }
+    }
+    return sz;
+  }
+
+  projected_fem::projected_fem(const mesh_fem &mf_source_,
+                               const mesh_im &mim_target_,
+                               size_type rg_source_,
+                               size_type rg_target_,
+                               dal::bit_vector blocked_dofs_, bool store_val)
+    : mf_source(mf_source_), mim_target(mim_target_),
+      rg_source(mf_source.linked_mesh().region(rg_source_)),
+      rg_target(mim_target.linked_mesh().region(rg_target_)),
+      store_values(store_val), blocked_dofs(blocked_dofs_), mi2(2), mi3(3) {
+    this->add_dependency(mf_source);
+    this->add_dependency(mim_target);
+    is_pol = is_lag = false; es_degree = 5;
+    is_equiv = real_element_defined = true;
+    ntarget_dim = mf_source.get_qdim();
+
+    update_from_context();
+  }
+
+  DAL_SIMPLE_KEY(special_projfem_key, pfem);
+
+  pfem new_projected_fem(const mesh_fem &mf_source_, const mesh_im &mim_target_,
+                         size_type rg_source_, size_type rg_target_,
+                         dal::bit_vector blocked_dofs_, bool store_val) {
+    pfem pf = new projected_fem(mf_source_, mim_target_, rg_source_, rg_target_,
+                                blocked_dofs_, store_val);
+    dal::add_stored_object(new special_projfem_key(pf), pf);
+    return pf;
+  }
+
+
+}  /* end of namespace getfem.                                            */
+
diff --git a/src/getfem_regular_meshes.cc b/src/getfem_regular_meshes.cc
index c49880a..1fb900f 100644
--- a/src/getfem_regular_meshes.cc
+++ b/src/getfem_regular_meshes.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 1999-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #include "getfem/getfem_regular_meshes.h"
diff --git a/src/getfem_superlu.cc b/src/getfem_superlu.cc
index a0d2f9a..64a5233 100644
--- a/src/getfem_superlu.cc
+++ b/src/getfem_superlu.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "getfem/getfem_superlu.h"
 
@@ -138,7 +138,7 @@ namespace gmm {
   /* ********************************************************************* */
 
   template<typename T>
-  void SuperLU_solve(const gmm::csc_matrix<T> &csc_A, T *sol, T *rhs,
+  int SuperLU_solve(const gmm::csc_matrix<T> &csc_A, T *sol, T *rhs,
 		     double& rcond_, int permc_spec) {
     /*
      * Get column permutation vector perm_c[], according to permc_spec:
@@ -211,13 +211,16 @@ namespace gmm {
     if (SU.Store) Destroy_CompCol_Matrix(&SU);
     StatFree(&stat);
     GMM_ASSERT1(info != -333333333, "SuperLU was cancelled."); // user interruption (for matlab interface)
-    GMM_ASSERT1(info == 0, "SuperLU solve failed: info=" << info);
+
+    GMM_ASSERT1(info >= 0, "SuperLU solve failed: info =" << info);
+    if (info > 0) GMM_WARNING1("SuperLU solve failed: info =" << info);
+    return info;
   }
 
-  template void SuperLU_solve(const gmm::csc_matrix<float> &csc_A, float *sol, float *rhs, double& rcond_, int permc_spec);
-  template void SuperLU_solve(const gmm::csc_matrix<double> &csc_A, double *sol, double *rhs, double& rcond_, int permc_spec);
-  template void SuperLU_solve(const gmm::csc_matrix<std::complex<float> > &csc_A, std::complex<float> *sol, std::complex<float> *rhs, double& rcond_, int permc_spec);
-  template void SuperLU_solve(const gmm::csc_matrix<std::complex<double> > &csc_A, std::complex<double> *sol, std::complex<double> *rhs, double& rcond_, int permc_spec);
+  template int SuperLU_solve(const gmm::csc_matrix<float> &csc_A, float *sol, float *rhs, double& rcond_, int permc_spec);
+  template int SuperLU_solve(const gmm::csc_matrix<double> &csc_A, double *sol, double *rhs, double& rcond_, int permc_spec);
+  template int SuperLU_solve(const gmm::csc_matrix<std::complex<float> > &csc_A, std::complex<float> *sol, std::complex<float> *rhs, double& rcond_, int permc_spec);
+  template int SuperLU_solve(const gmm::csc_matrix<std::complex<double> > &csc_A, std::complex<double> *sol, std::complex<double> *rhs, double& rcond_, int permc_spec);
 
   struct SuperLU_factor_impl_common {
     mutable SuperMatrix SA, SL, SB, SU, SX;
diff --git a/src/gmm/gmm.h b/src/gmm/gmm.h
index 3dc6cb1..b6f50a5 100644
--- a/src/gmm/gmm.h
+++ b/src/gmm/gmm.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_MUMPS_interface.h b/src/gmm/gmm_MUMPS_interface.h
index 09cc008..71a9b44 100644
--- a/src/gmm/gmm_MUMPS_interface.h
+++ b/src/gmm/gmm_MUMPS_interface.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard, Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_MUMPS_interface.h
    @author Yves Renard <Yves.Renard at insa-lyon.fr>,
@@ -133,7 +134,7 @@ namespace gmm {
    *  Works only with sparse or skyline matrices
    */
   template <typename MAT, typename VECTX, typename VECTB>
-  void MUMPS_solve(const MAT &A, const VECTX &X_, const VECTB &B) {
+  bool MUMPS_solve(const MAT &A, const VECTX &X_, const VECTB &B) {
     VECTX &X = const_cast<VECTX &>(X_);
 
     typedef typename linalg_traits<MAT>::value_type T;
@@ -175,44 +176,31 @@ namespace gmm {
 #endif
 
 #define ICNTL(I) icntl[(I)-1]
-#define INFO(I) info[(I)-1]
     id.ICNTL(1) = -1; // output stream for error messages
     id.ICNTL(2) = -1; // output stream for other messages
     id.ICNTL(3) = -1; // output stream for global information
     id.ICNTL(4) = 0;  // verbosity level
     
-    id.ICNTL(14) += 40; /* small boost to the workspace size as we have encountered some problem
+    id.ICNTL(14) += 80; /* small boost to the workspace size as we have encountered some problem
                            who did not fit in the default settings of mumps.. 
                            by default, ICNTL(14) = 15 or 20
                        */
     //cout << "ICNTL(14): " << id.ICNTL(14) << "\n";
 
-    id.ICNTL(22) = 1;   /* enables out-of-core support */
+    // id.ICNTL(22) = 1;   /* enables out-of-core support */
 
     id.job = 6;
     mumps_interf<T>::mumps_c(id);
-    if (id.INFO(1) < 0) {
-      switch (id.INFO(1)) {
-        case -6 : case -10 :
-          GMM_ASSERT1(false, "Solve with MUMPS failed: matrix is singular");
-        case -13 :
-          GMM_ASSERT1(false, "Solve with MUMPS failed: not enough memory");
-        case -9:
-          GMM_ASSERT1(false, "Solve with MUMPS failed: error "
-                      << id.INFO(1) << ", increase ICNTL(14)");
-        default :
-          GMM_ASSERT1(false, "Solve with MUMPS failed with error "
-                      << id.INFO(1));
-      }
-    }
+    bool ok = mumps_error_check(id);
 
     id.job = JOB_END;
     mumps_interf<T>::mumps_c(id);
 
     gmm::copy(rhs, X);
 
+    return ok;
+
 #undef ICNTL
-#undef INFO
 
   }
 
@@ -222,7 +210,7 @@ namespace gmm {
    *  Works only with sparse or skyline matrices
    */
   template <typename MAT, typename VECTX, typename VECTB>
-  void MUMPS_distributed_matrix_solve(const MAT &A, const VECTX &X_,
+  bool MUMPS_distributed_matrix_solve(const MAT &A, const VECTX &X_,
                                       const VECTB &B) {
     VECTX &X = const_cast<VECTX &>(X_);
 
@@ -266,7 +254,6 @@ namespace gmm {
 #endif
 
 #define ICNTL(I) icntl[(I)-1]
-#define INFO(I) info[(I)-1]
     id.ICNTL(1) = -1; // output stream for error messages
     id.ICNTL(2) = 6;  // id.ICNTL(2) = -1; // output stream for other messages
     id.ICNTL(3) = 6;  // id.ICNTL(3) = -1; // output stream for global information
@@ -277,20 +264,7 @@ namespace gmm {
 
     id.job = 6;
     mumps_interf<T>::mumps_c(id);
-    if (id.INFO(1) < 0) {
-      switch (id.INFO(1)) {
-      case -6 : case -10 :
-        GMM_ASSERT1(false, "Solve with MUMPS failed: matrix is singular");
-      case -13:
-        GMM_ASSERT1(false, "Solve with MUMPS failed: not enough memory");
-      case -9:
-        GMM_ASSERT1(false, "Solve with MUMPS failed: error "
-                    << id.INFO(1) << ", increase ICNTL(14)");
-      default :
-        GMM_ASSERT1(false, "Solve with MUMPS failed with error "
-                    << id.INFO(1));
-      }
-    }
+    bool ok = mumps_error_check(id);
 
     id.job = JOB_END;
     mumps_interf<T>::mumps_c(id);
@@ -299,12 +273,37 @@ namespace gmm {
 #endif
     gmm::copy(rhs, X);
 
+    return ok;
+
 #undef ICNTL
-#undef INFO
 
   }
 
 
+  template <typename MUMPS_STRUCT>
+  static inline bool mumps_error_check(MUMPS_STRUCT &id) {
+#define INFO(I) info[(I)-1]
+    if (id.INFO(1) < 0) {
+      switch (id.INFO(1)) {
+        case -2:
+          GMM_ASSERT1(false, "Solve with MUMPS failed: NZ = " << id.INFO(2)
+                      << " is out of range");
+        case -6 : case -10 :
+          GMM_WARNING1("Solve with MUMPS failed: matrix is singular");
+          return false;
+        case -9:
+          GMM_ASSERT1(false, "Solve with MUMPS failed: error "
+                      << id.INFO(1) << ", increase ICNTL(14)");
+        case -13 :
+          GMM_ASSERT1(false, "Solve with MUMPS failed: not enough memory");
+        default :
+          GMM_ASSERT1(false, "Solve with MUMPS failed with error "
+                      << id.INFO(1));
+      }
+    }
+    return true;
+#undef INFO
+  }
 
 
 }
diff --git a/src/gmm/gmm_algobase.h b/src/gmm/gmm_algobase.h
index 9fdebff..700c8b2 100644
--- a/src/gmm/gmm_algobase.h
+++ b/src/gmm/gmm_algobase.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /** @file gmm_algobase.h 
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_blas.h b/src/gmm/gmm_blas.h
index 6c8cd00..558784b 100644
--- a/src/gmm/gmm_blas.h
+++ b/src/gmm/gmm_blas.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_blas.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -529,7 +530,7 @@ namespace gmm {
    mat_trace(const M &m) {
      typedef typename linalg_traits<M>::value_type T;
      T res(0);
-     for (size_type i = 0; i < std::max(mat_nrows(m), mat_ncols(m)); ++i)
+     for (size_type i = 0; i < std::min(mat_nrows(m), mat_ncols(m)); ++i)
        res += m(i,i);
      return res;
   }
diff --git a/src/gmm/gmm_blas_interface.h b/src/gmm/gmm_blas_interface.h
index 14f8f46..32ae2fd 100644
--- a/src/gmm/gmm_blas_interface.h
+++ b/src/gmm/gmm_blas_interface.h
@@ -1,35 +1,35 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_blas_interface.h
-   @author  Caroline Lecalvez, Caroline.Lecalvez at gmm.insa-tlse.fr,
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
    @date October 7, 2003.
    @brief gmm interface for fortran BLAS.
diff --git a/src/gmm/gmm_condition_number.h b/src/gmm/gmm_condition_number.h
index 2a2aa2a..fa40ddb 100644
--- a/src/gmm/gmm_condition_number.h
+++ b/src/gmm/gmm_condition_number.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard, Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_condition_number.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>, Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/gmm/gmm_conjugated.h b/src/gmm/gmm_conjugated.h
index 905b646..3be6608 100644
--- a/src/gmm/gmm_conjugated.h
+++ b/src/gmm/gmm_conjugated.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_conjugated.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_def.h b/src/gmm/gmm_def.h
index deb6ef4..84f5e9e 100644
--- a/src/gmm/gmm_def.h
+++ b/src/gmm/gmm_def.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_def.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -359,6 +360,7 @@ namespace gmm {
   template <typename T> inline T pos(T a) { return (a < T(0)) ? T(0) : a; }
   template <typename T> inline T neg(T a) { return (a < T(0)) ? T(-a) : T(0); }
   template <typename T> inline T sgn(T a) { return (a < T(0)) ? T(-1) : T(1); }
+  template <typename T> inline T Heaviside(T a) { return (a < T(0)) ? T(0) : T(1); }
   inline double random() { return double(rand())/(RAND_MAX+0.5); }
   template <typename T> inline T random(T)
   { return T(rand()*2.0)/(T(RAND_MAX)+T(1)/T(2)) - T(1); }
diff --git a/src/gmm/gmm_dense_Householder.h b/src/gmm/gmm_dense_Householder.h
index 708b0e0..6f2ff52 100644
--- a/src/gmm/gmm_dense_Householder.h
+++ b/src/gmm/gmm_dense_Householder.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard, Caroline Lecalvez
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_dense_Householder.h
    @author Caroline Lecalvez <Caroline.Lecalvez at gmm.insa-toulouse.fr>
diff --git a/src/gmm/gmm_dense_lu.h b/src/gmm/gmm_dense_lu.h
index e683eb7..c803af3 100644
--- a/src/gmm/gmm_dense_lu.h
+++ b/src/gmm/gmm_dense_lu.h
@@ -1,40 +1,40 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 // This file is a modified version of lu.h from MTL.
 // See http://osl.iu.edu/research/mtl/
 // Following the corresponding Copyright notice.
 //===========================================================================
 //
-// Copyright (c) 1997-2001, The Trustees of Indiana University.
-// All rights reserved.
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are met:
 //
@@ -43,7 +43,7 @@
 //    * Redistributions in binary form must reproduce the above copyright
 //      notice, this list of conditions and the following disclaimer in the
 //      documentation and/or other materials provided with the distribution.
-//    * Neither the name of the University of California, Berkeley nor the
+//    * Neither the name of the University of Notre Dame nor the
 //      names of its contributors may be used to endorse or promote products
 //      derived from this software without specific prior written permission.
 //
diff --git a/src/gmm/gmm_dense_qr.h b/src/gmm/gmm_dense_qr.h
index 1b32def..b082791 100644
--- a/src/gmm/gmm_dense_qr.h
+++ b/src/gmm/gmm_dense_qr.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_dense_qr.h
    @author  Caroline Lecalvez, Caroline.Lecalvez at gmm.insa-tlse.fr, Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_dense_sylvester.h b/src/gmm/gmm_dense_sylvester.h
index fb017a6..fbb4871 100644
--- a/src/gmm/gmm_dense_sylvester.h
+++ b/src/gmm/gmm_dense_sylvester.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /** @file gmm_dense_sylvester.h
     @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_domain_decomp.h b/src/gmm/gmm_domain_decomp.h
index 6ddf0d2..aa1ecf3 100644
--- a/src/gmm/gmm_domain_decomp.h
+++ b/src/gmm/gmm_domain_decomp.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /** @file gmm_domain_decomp.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_except.h b/src/gmm/gmm_except.h
index f432c09..f02e136 100644
--- a/src/gmm/gmm_except.h
+++ b/src/gmm/gmm_except.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /** @file gmm_except.h 
     @author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -65,39 +66,49 @@ namespace gmm {
   //               defined.
   //          GMM_ASSERT3 : For internal checks. Hidden by default. Active
   //               only when DEBUG_MODE is defined.
-
-#ifdef __EXCEPTIONS
+// __EXCEPTIONS is defined by gcc, _CPPUNWIND is defined by visual c++
+#if defined(__EXCEPTIONS) || defined(_CPPUNWIND)
   inline void short_error_throw(const char *file, int line, const char *func,
 				const char *errormsg) {
     std::stringstream msg;
     msg << "Error in " << file << ", line " << line << " " << func
-	<< ": \n" << errormsg << ends;
+	<< ": \n" << errormsg << std::ends;
     throw gmm::gmm_error(msg.str());	
   }
 # define GMM_THROW_(type, errormsg) {					\
     std::stringstream msg;						\
-    msg << "Error in "__FILE__ << ", line "				\
+    msg << "Error in " << __FILE__ << ", line "				\
 	<< __LINE__ << " " << GMM_PRETTY_FUNCTION << ": \n"		\
-	<< errormsg << ends;						\
+	<< errormsg << std::ends;						\
     throw (type)(msg.str());						\
   }
 #else
+#ifndef _MSC_VER
+# define abort_no_return() ::abort()
+#else
+// apparently ::abort() on windows is not declared with __declspec(noreturn) so the compiler spits a lot of warnings when abort is used.
+# define abort_no_return() { assert("GMM ABORT"==0); throw "GMM ABORT"; }
+#endif
+
   inline void short_error_throw(const char *file, int line, const char *func,
 				const char *errormsg) {
     std::stringstream msg;
     msg << "Error in " << file << ", line " << line << " " << func
-	<< ": \n" << errormsg << ends;
-    ::abort();	
+	<< ": \n" << errormsg << std::ends;
+    std::cerr << msg.str() << std::endl;
+    abort_no_return();	
   }
+
 # define GMM_THROW_(type, errormsg) {					\
     std::stringstream msg;						\
-    msg << "Error in "__FILE__ << ", line "				\
+    msg << "Error in " << __FILE__ << ", line "				\
 	<< __LINE__ << " " << GMM_PRETTY_FUNCTION << ": \n"		\
-	<< errormsg   << ends;						\
-    ::abort();								\
+	<< errormsg;						\
+    std::cerr << msg.str() << std::endl;                                \
+    abort_no_return();							\
   }
 #endif
-  
+
 # define GMM_ASSERT1(test, errormsg)		        		\
   { if (!(test)) GMM_THROW_(gmm::gmm_error, errormsg); }
 
@@ -106,8 +117,8 @@ namespace gmm {
 #define GMM_THROW(a, b) { GMM_THROW_(a,b); gmm::GMM_THROW(); }
 
 #if defined(NDEBUG)
-# define GMM_ASSERT2(test, errormsg)
-# define GMM_ASSERT3(test, errormsg)
+# define GMM_ASSERT2(test, errormsg) {}
+# define GMM_ASSERT3(test, errormsg) {}
 #elif !defined(GMM_FULL_NDEBUG)
 # define GMM_ASSERT2(test, errormsg)				        \
   { if (!(test)) gmm::short_error_throw(__FILE__, __LINE__,		\
@@ -148,8 +159,8 @@ namespace gmm {
 
 #define GMM_WARNING_MSG(level_, thestr)  {			       \
       std::stringstream msg;                                           \
-      msg << "Level " << level_ << " Warning in "__FILE__ << ", line " \
-          << __LINE__ << ": " << thestr << ends;		       \
+      msg << "Level " << level_ << " Warning in " << __FILE__ << ", line " \
+          << __LINE__ << ": " << thestr;		       \
        std::cerr << msg.str() << std::endl;                            \
     }
 
@@ -210,9 +221,8 @@ namespace gmm {
 #define GMM_TRACE_MSG(level_, thestr)  {			       \
     GMM_TRACE_MSG_MPI {						       \
       std::stringstream msg;                                           \
-      msg << "Trace " << level_ << " in "__FILE__ << ", line "         \
-          << __LINE__ << ": " << thestr				       \
-          << ends;						       \
+      msg << "Trace " << level_ << " in " << __FILE__ << ", line "     \
+          << __LINE__ << ": " << thestr;        		       \
       std::cout << msg.str() << std::endl;			       \
     }                                                                  \
   }        
@@ -269,54 +279,54 @@ namespace gmm {
 
 #define GMM_STANDARD_CATCH_ERROR   catch(std::logic_error e)	\
     {								\
-      cerr << "============================================\n";	\
-      cerr << "|      An error has been detected !!!      |\n";	\
-      cerr << "============================================\n";	\
-      cerr << e.what() << endl << endl;				\
+      std::cerr << "============================================\n";	\
+      std::cerr << "|      An error has been detected !!!      |\n";	\
+      std::cerr << "============================================\n";	\
+      std::cerr << e.what() << std::endl << std::endl;				\
       exit(1);							\
     }								\
   catch(std::runtime_error e)					\
     {								\
-      cerr << "============================================\n";	\
-      cerr << "|      An error has been detected !!!      |\n";	\
-      cerr << "============================================\n";	\
-      cerr << e.what() << endl << endl;				\
+      std::cerr << "============================================\n";	\
+      std::cerr << "|      An error has been detected !!!      |\n";	\
+      std::cerr << "============================================\n";	\
+      std::cerr << e.what() << std::endl << std::endl;				\
       exit(1);							\
     }								\
   catch(std::bad_alloc) {					\
-    cerr << "============================================\n";	\
-    cerr << "|  A bad allocation has been detected !!!  |\n";	\
-    cerr << "============================================\n";	\
+    std::cerr << "============================================\n";	\
+    std::cerr << "|  A bad allocation has been detected !!!  |\n";	\
+    std::cerr << "============================================\n";	\
     exit(1);							\
   }								\
   catch(std::bad_typeid) {					\
-    cerr << "============================================\n";	\
-    cerr << "|  A bad typeid     has been detected !!!  |\n";	\
-    cerr << "============================================\n";	\
+    std::cerr << "============================================\n";	\
+    std::cerr << "|  A bad typeid     has been detected !!!  |\n";	\
+    std::cerr << "============================================\n";	\
     exit(1);							\
   }								\
   catch(std::bad_exception) {					\
-    cerr << "============================================\n";	\
-    cerr << "|  A bad exception  has been detected !!!  |\n";	\
-    cerr << "============================================\n";	\
+    std::cerr << "============================================\n";	\
+    std::cerr << "|  A bad exception  has been detected !!!  |\n";	\
+    std::cerr << "============================================\n";	\
     exit(1);							\
   }								\
   catch(std::bad_cast) {					\
-    cerr << "============================================\n";	\
-    cerr << "|    A bad cast  has been detected !!!     |\n";	\
-    cerr << "============================================\n";	\
+    std::cerr << "============================================\n";	\
+    std::cerr << "|    A bad cast  has been detected !!!     |\n";	\
+    std::cerr << "============================================\n";	\
     exit(1);							\
   }								\
   catch(...) {							\
-    cerr << "============================================\n";	\
-    cerr << "|  An unknown error has been detected !!!  |\n";	\
-    cerr << "============================================\n";	\
+    std::cerr << "============================================\n";	\
+    std::cerr << "|  An unknown error has been detected !!!  |\n";	\
+    std::cerr << "============================================\n";	\
     exit(1);							\
   }
   //   catch(ios_base::failure) { 
-  //     cerr << "============================================\n";
-  //     cerr << "| A ios_base::failure has been detected !!!|\n";
-  //     cerr << "============================================\n";
+  //     std::cerr << "============================================\n";
+  //     std::cerr << "| A ios_base::failure has been detected !!!|\n";
+  //     std::cerr << "============================================\n";
   //     exit(1);
   //   } 
 
diff --git a/src/gmm/gmm_inoutput.h b/src/gmm/gmm_inoutput.h
index 27060dd..f7fc6b4 100644
--- a/src/gmm/gmm_inoutput.h
+++ b/src/gmm/gmm_inoutput.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard, Julien Pommier
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_inoutput.h
    @author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -209,7 +210,7 @@ namespace gmm {
       int i,ind,col,offset,count;
       int Ptrperline, Ptrwidth, Indperline, Indwidth;
       int Valperline, Valwidth, Valprec, Nentries;
-      int Valflag;           /* Indicates 'E','D', or 'F' float format */
+      int Valflag = 'D';           /* Indicates 'E','D', or 'F' float format */
       char line[BUFSIZ];
       gmm::standard_locale sl;
 
diff --git a/src/gmm/gmm_interface.h b/src/gmm/gmm_interface.h
index c199a60..8101f4b 100644
--- a/src/gmm/gmm_interface.h
+++ b/src/gmm/gmm_interface.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 /**@file gmm_interface.h
@@ -831,8 +832,8 @@ namespace gmm {
     }
     
     void fill(T a, T b = T(0)) { 
-      std::fill(begin_, end+nbc*nbl, b);
-      iterator p = begin_, e = end+nbc*nbl;
+      std::fill(begin_, begin_+nbc*nbl, b);
+      iterator p = begin_, e = begin_+nbc*nbl;
       while (p < e) { *p = a; p += nbl+1; }
     }
     inline size_type nrows(void) const { return nbl; }
@@ -957,8 +958,8 @@ namespace gmm {
     }
     
     void fill(T a, T b = T(0)) { 
-      std::fill(begin_, end+nbc*nbl, b);
-      iterator p = begin_, e = end+nbc*nbl;
+      std::fill(begin_, begin_+nbc*nbl, b);
+      iterator p = begin_, e = begin_+nbc*nbl;
       while (p < e) { *p = a; p += nbc+1; }
     }
     inline size_type nrows(void) const { return nbl; }
diff --git a/src/gmm/gmm_interface_bgeot.h b/src/gmm/gmm_interface_bgeot.h
index 6e1b7b5..d7a3bef 100644
--- a/src/gmm/gmm_interface_bgeot.h
+++ b/src/gmm/gmm_interface_bgeot.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_interface_bgeot.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_iter.h b/src/gmm/gmm_iter.h
index 029e340..5a3a9de 100644
--- a/src/gmm/gmm_iter.h
+++ b/src/gmm/gmm_iter.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_iter.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -55,6 +56,8 @@ namespace gmm {
     int noise;         /* if noise > 0 iterations are printed.             */
     double resmax;     /* maximum residu.                                  */
     double resminreach, resadd;
+    double diverged_res; /* Threshold beyond which the iterative           */
+                       /* is considered to diverge.                        */
     size_type nit;     /* iteration number.                                */
     double res;        /* last computed residu.                            */
     std::string name;  /* eventually, name of the method.                  */
@@ -64,12 +67,14 @@ namespace gmm {
 
     void init(void) { 
       nit = 0; res = 0.0; written = false; 
-      resminreach = 1E50; resadd = 0.0; 
+      resminreach = 1E200; resadd = 0.0; 
       callback = 0;
     }
 
-    iteration(double r = 1.0E-8, int noi = 0, size_type mit = size_type(-1))
-      : rhsn(1.0), maxiter(mit), noise(noi), resmax(r) { init(); }
+    iteration(double r = 1.0E-8, int noi = 0, size_type mit = size_type(-1),
+	      double div_res = 1E200)
+      : rhsn(1.0), maxiter(mit), noise(noi), resmax(r), diverged_res(div_res)
+    { init(); }
 
     void  operator ++(int) {  nit++; written = false; resadd += res; }
     void  operator ++() { (*this)++; }
@@ -85,12 +90,17 @@ namespace gmm {
     void set_resmax(double r) { resmax = r; }
 
     double get_res() const { return res; }
+    void enforce_converged(bool c = true)
+    { if (c) res = double(0); else res = rhsn * resmax + double(1); }
 
     /* change the user-definable callback, called after each iteration */
     void set_callback(void (*t)(const gmm::iteration&)) {
       callback = t;
     }
 
+    double get_diverged_residual(void) const { return diverged_res; }
+    void set_diverged_residual(double r) { diverged_res = r; }
+
     size_type get_iteration(void) const { return nit; }
     void set_iteration(size_type i) { nit = i; }
     
@@ -107,6 +117,12 @@ namespace gmm {
     }
     template <typename VECT> bool converged(const VECT &v)
     { return converged(gmm::vect_norm2(v)); }
+    bool diverged(void)
+    { return (nit>=maxiter) || (res>=rhsn*diverged_res && nit > 4); }
+    bool diverged(double nr) { 
+      res = gmm::abs(nr); resminreach = std::min(resminreach, res);
+      return diverged();
+    }
 
     bool finished(double nr) {
       if (callback) callback(*this);
@@ -123,7 +139,7 @@ namespace gmm {
 	cout <<  endl;
 	written = true;
       }
-      return (nit >= maxiter || converged(nr));
+      return (converged(nr) || diverged(nr));
     }
     template <typename VECT> bool finished_vect(const VECT &v)
     { return finished(double(gmm::vect_norm2(v))); }
diff --git a/src/gmm/gmm_iter_solvers.h b/src/gmm/gmm_iter_solvers.h
index 395c5af..f7a1ad3 100644
--- a/src/gmm/gmm_iter_solvers.h
+++ b/src/gmm/gmm_iter_solvers.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_iter_solvers.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_kernel.h b/src/gmm/gmm_kernel.h
index a460303..a52a5cd 100644
--- a/src/gmm/gmm_kernel.h
+++ b/src/gmm/gmm_kernel.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_kernel.h 
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_lapack_interface.h b/src/gmm/gmm_lapack_interface.h
index cdf6a64..ac694a6 100644
--- a/src/gmm/gmm_lapack_interface.h
+++ b/src/gmm/gmm_lapack_interface.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_lapack_interface.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_least_squares_cg.h b/src/gmm/gmm_least_squares_cg.h
index f21c05a..442d4d3 100644
--- a/src/gmm/gmm_least_squares_cg.h
+++ b/src/gmm/gmm_least_squares_cg.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Benjamin Schleimer
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_leastsquares_cg.h
    @author Benjamin Schleimer <bensch128  (at) yahoo (dot) com>
diff --git a/src/gmm/gmm_matrix.h b/src/gmm/gmm_matrix.h
index d49a717..c7801bc 100644
--- a/src/gmm/gmm_matrix.h
+++ b/src/gmm/gmm_matrix.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /** @file gmm_matrix.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -347,17 +348,19 @@ namespace gmm
     typedef typename std::vector<T>::size_type size_type;
     typedef typename std::vector<T>::iterator iterator;
     typedef typename std::vector<T>::const_iterator const_iterator;
+    typedef typename std::vector<T>::reference reference;
+    typedef typename std::vector<T>::const_reference const_reference;
     
   protected:
     size_type nbc, nbl;
     
   public:
     
-    inline const T& operator ()(size_type l, size_type c) const {
+    inline const_reference operator ()(size_type l, size_type c) const {
       GMM_ASSERT2(l < nbl && c < nbc, "out of range");
       return *(this->begin() + c*nbl+l);
     }
-    inline T& operator ()(size_type l, size_type c) {
+    inline reference operator ()(size_type l, size_type c) {
       GMM_ASSERT2(l < nbl && c < nbc, "out of range");
       return *(this->begin() + c*nbl+l);
     }
@@ -479,6 +482,7 @@ namespace gmm
   template<typename T> std::ostream &operator <<
     (std::ostream &o, const dense_matrix<T>& m) { gmm::write(o,m); return o; }
 
+
   /* ******************************************************************** */
   /*                                                                      */
   /*	        Read only compressed sparse column matrix                 */
@@ -557,7 +561,6 @@ namespace gmm
   
   template <typename T, int shift>
   void csc_matrix<T, shift>::init_with_identity(size_type n) {
-    if (pr) { delete[] pr; delete[] ir; delete[] jc; }
     nc = nr = n; 
     pr.resize(nc); ir.resize(nc); jc.resize(nc+1);
     for (size_type j = 0; j < nc; ++j)
diff --git a/src/gmm/gmm_modified_gram_schmidt.h b/src/gmm/gmm_modified_gram_schmidt.h
index 1f5b624..f49a1d2 100644
--- a/src/gmm/gmm_modified_gram_schmidt.h
+++ b/src/gmm/gmm_modified_gram_schmidt.h
@@ -1,30 +1,60 @@
-// -*- c++ -*- (enables emacs c++ mode)
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+
 //===========================================================================
 //
-// Copyright (C) 1997-2008 Yves Renard
-//
-// This file is a part of GETFEM++
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
 //
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+//    * Redistributions of source code must retain the above copyright
+//      notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above copyright
+//      notice, this list of conditions and the following disclaimer in the
+//      documentation and/or other materials provided with the distribution.
+//    * Neither the name of the University of Notre Dame nor the
+//      names of its contributors may be used to endorse or promote products
+//      derived from this software without specific prior written permission.
 //
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
+// THIS SOFTWARE  IS  PROVIDED  BY  THE TRUSTEES  OF  INDIANA UNIVERSITY  AND
+// CONTRIBUTORS  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,  INCLUDING,
+// BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND  FITNESS
+// FOR  A PARTICULAR PURPOSE ARE DISCLAIMED. IN  NO  EVENT SHALL THE TRUSTEES
+// OF INDIANA UNIVERSITY AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY,  OR CONSEQUENTIAL DAMAGES (INCLUDING,  BUT
+// NOT  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA,  OR PROFITS;  OR BUSINESS  INTERRUPTION)  HOWEVER  CAUSED AND ON ANY
+// THEORY  OF  LIABILITY,  WHETHER  IN  CONTRACT,  STRICT  LIABILITY, OR TORT
+// (INCLUDING  NEGLIGENCE  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+// THIS  SOFTWARE,  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //
 //===========================================================================
 
diff --git a/src/gmm/gmm_opt.h b/src/gmm/gmm_opt.h
index 40d62f9..c62a130 100644
--- a/src/gmm/gmm_opt.h
+++ b/src/gmm/gmm_opt.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_opt.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_precond.h b/src/gmm/gmm_precond.h
index 12a39d9..bd76606 100644
--- a/src/gmm/gmm_precond.h
+++ b/src/gmm/gmm_precond.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 #ifndef GMM_PRECOND_H
 #define GMM_PRECOND_H
 
diff --git a/src/gmm/gmm_precond_diagonal.h b/src/gmm/gmm_precond_diagonal.h
index fa698c4..b0ad075 100644
--- a/src/gmm/gmm_precond_diagonal.h
+++ b/src/gmm/gmm_precond_diagonal.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_precond_diagonal.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_precond_ildlt.h b/src/gmm/gmm_precond_ildlt.h
index bd0effc..bce1fb0 100644
--- a/src/gmm/gmm_precond_ildlt.h
+++ b/src/gmm/gmm_precond_ildlt.h
@@ -1,40 +1,40 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 // This file is a modified version of cholesky.h from ITL.
 // See http://osl.iu.edu/research/itl/
 // Following the corresponding Copyright notice.
 //===========================================================================
 //
-// Copyright (c) 1997-2001, The Trustees of Indiana University.
-// All rights reserved.
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are met:
 //
@@ -43,7 +43,7 @@
 //    * Redistributions in binary form must reproduce the above copyright
 //      notice, this list of conditions and the following disclaimer in the
 //      documentation and/or other materials provided with the distribution.
-//    * Neither the name of the University of California, Berkeley nor the
+//    * Neither the name of the University of Notre Dame nor the
 //      names of its contributors may be used to endorse or promote products
 //      derived from this software without specific prior written permission.
 //
diff --git a/src/gmm/gmm_precond_ildltt.h b/src/gmm/gmm_precond_ildltt.h
index adcebe7..ca73c5b 100644
--- a/src/gmm/gmm_precond_ildltt.h
+++ b/src/gmm/gmm_precond_ildltt.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_precond_ildltt.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_precond_ilu.h b/src/gmm/gmm_precond_ilu.h
index a71ef80..71f24d0 100644
--- a/src/gmm/gmm_precond_ilu.h
+++ b/src/gmm/gmm_precond_ilu.h
@@ -1,40 +1,40 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1997-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 // This file is a modified version of ilu.h from ITL.
 // See http://osl.iu.edu/research/itl/
 // Following the corresponding Copyright notice.
 //===========================================================================
 //
-// Copyright (c) 1997-2001, The Trustees of Indiana University.
-// All rights reserved.
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are met:
 //
@@ -43,7 +43,7 @@
 //    * Redistributions in binary form must reproduce the above copyright
 //      notice, this list of conditions and the following disclaimer in the
 //      documentation and/or other materials provided with the distribution.
-//    * Neither the name of the University of California, Berkeley nor the
+//    * Neither the name of the University of Notre Dame nor the
 //      names of its contributors may be used to endorse or promote products
 //      derived from this software without specific prior written permission.
 //
@@ -192,16 +192,16 @@ namespace gmm {
 	qn = j + 1;
 	rn = U_ptr[i];
 	
-	for (pn++; U_ind[pn] < i && pn < U_ptr[L_ind[j]+1]; pn++) {
-	  while (L_ind[qn] < U_ind[pn] && qn < L_ptr[i+1])
+	for (pn++; pn < U_ptr[L_ind[j]+1] && U_ind[pn] < i; pn++) {
+	  while (qn < L_ptr[i+1] && L_ind[qn] < U_ind[pn])
 	    qn++;
-	  if (U_ind[pn] == L_ind[qn] && qn < L_ptr[i+1])
+	  if (qn < L_ptr[i+1] && U_ind[pn] == L_ind[qn])
 	    L_val[qn] -= multiplier * U_val[pn];
 	}
 	for (; pn < U_ptr[L_ind[j]+1]; pn++) {
-	  while (U_ind[rn] < U_ind[pn] && rn < U_ptr[i+1])
+	  while (rn < U_ptr[i+1] && U_ind[rn] < U_ind[pn])
 	    rn++;
-	  if (U_ind[pn] == U_ind[rn] && rn < U_ptr[i+1])
+	  if (rn < U_ptr[i+1] && U_ind[pn] == U_ind[rn])
 	    U_val[rn] -= multiplier * U_val[pn];
 	}
       }
diff --git a/src/gmm/gmm_precond_ilut.h b/src/gmm/gmm_precond_ilut.h
index ec22e3c..7273532 100644
--- a/src/gmm/gmm_precond_ilut.h
+++ b/src/gmm/gmm_precond_ilut.h
@@ -1,32 +1,66 @@
-// -*- c++ -*- (enables emacs c++ mode)
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+
+// This file is a modified version of ilut.h from ITL.
+// See http://osl.iu.edu/research/itl/
+// Following the corresponding Copyright notice.
 //===========================================================================
 //
-// Copyright (C) 1997-2009 Yves Renard
-//
-// This file is a part of GETFEM++
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
 //
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+//    * Redistributions of source code must retain the above copyright
+//      notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above copyright
+//      notice, this list of conditions and the following disclaimer in the
+//      documentation and/or other materials provided with the distribution.
+//    * Neither the name of the University of Notre Dame nor the
+//      names of its contributors may be used to endorse or promote products
+//      derived from this software without specific prior written permission.
 //
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
+// THIS SOFTWARE  IS  PROVIDED  BY  THE TRUSTEES  OF  INDIANA UNIVERSITY  AND
+// CONTRIBUTORS  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,  INCLUDING,
+// BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND  FITNESS
+// FOR  A PARTICULAR PURPOSE ARE DISCLAIMED. IN  NO  EVENT SHALL THE TRUSTEES
+// OF INDIANA UNIVERSITY AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY,  OR CONSEQUENTIAL DAMAGES (INCLUDING,  BUT
+// NOT  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA,  OR PROFITS;  OR BUSINESS  INTERRUPTION)  HOWEVER  CAUSED AND ON ANY
+// THEORY  OF  LIABILITY,  WHETHER  IN  CONTRACT,  STRICT  LIABILITY, OR TORT
+// (INCLUDING  NEGLIGENCE  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+// THIS  SOFTWARE,  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //
 //===========================================================================
+
 #ifndef GMM_PRECOND_ILUT_H
 #define GMM_PRECOND_ILUT_H
 
diff --git a/src/gmm/gmm_precond_ilutp.h b/src/gmm/gmm_precond_ilutp.h
index 1880285..41a2147 100644
--- a/src/gmm/gmm_precond_ilutp.h
+++ b/src/gmm/gmm_precond_ilutp.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_precond_ilutp.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_precond_mr_approx_inverse.h b/src/gmm/gmm_precond_mr_approx_inverse.h
index 498ede9..80733cf 100644
--- a/src/gmm/gmm_precond_mr_approx_inverse.h
+++ b/src/gmm/gmm_precond_mr_approx_inverse.h
@@ -1,40 +1,41 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1997-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
+
 
 // This file is a modified version of approximate_inverse.h from ITL.
 // See http://osl.iu.edu/research/itl/
 // Following the corresponding Copyright notice.
 //===========================================================================
 //
-// Copyright (c) 1997-2001, The Trustees of Indiana University.
-// All rights reserved.
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are met:
 //
@@ -43,7 +44,7 @@
 //    * Redistributions in binary form must reproduce the above copyright
 //      notice, this list of conditions and the following disclaimer in the
 //      documentation and/or other materials provided with the distribution.
-//    * Neither the name of the University of California, Berkeley nor the
+//    * Neither the name of the University of Notre Dame nor the
 //      names of its contributors may be used to endorse or promote products
 //      derived from this software without specific prior written permission.
 //
diff --git a/src/gmm/gmm_range_basis.h b/src/gmm/gmm_range_basis.h
index 04735c9..9422d76 100644
--- a/src/gmm/gmm_range_basis.h
+++ b/src/gmm/gmm_range_basis.h
@@ -1,37 +1,38 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_range_basis.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
    @date March 10, 2009.
-   @brief Extract a basis of the range of a (large sparse) matrix from the 
+   @brief Extract a basis of the range of a (large sparse) matrix from the
           columns of this matrix.
 */
 #ifndef GMM_RANGE_BASIS_H
@@ -62,29 +63,29 @@ namespace gmm {
     size_type n = diag.size(), q = 0, p, ite = 0;
     if (n == 0) return;
     if (n == 1) { eigval[0] = gmm::real(diag[0]); return; }
-    
+
     symmetric_qr_stop_criterion(diag, sdiag, p, q, tol);
-    
+
     while (q < n) {
       sub_interval SUBI(p, n-p-q), SUBJ(0, mat_ncols(eigvect)), SUBK(p, n-p-q);
       if (!compvect) SUBK = sub_interval(0,0);
-      
+
       symmetric_Wilkinson_qr_step(sub_vector(diag, SUBI),
-				  sub_vector(sdiag, SUBI),
-				  sub_matrix(eigvect, SUBJ, SUBK), compvect);
+                                  sub_vector(sdiag, SUBI),
+                                  sub_matrix(eigvect, SUBJ, SUBK), compvect);
 
       symmetric_qr_stop_criterion(diag, sdiag, p, q, tol*R(3));
       ++ite;
       GMM_ASSERT1(ite < n*100, "QR algorithm failed.");
     }
-    
+
     gmm::copy(diag, eigval);
   }
 
   // Range basis with a restarted Lanczos method
   template <typename Mat>
   void range_basis_eff_Lanczos(const Mat &BB, std::set<size_type> &columns,
-		       double EPS=1E-12) {   
+                       double EPS=1E-12) {
     typedef std::set<size_type> TAB;
     typedef typename linalg_traits<Mat>::value_type T;
     typedef typename number_traits<T>::magnitude_type R;
@@ -93,36 +94,36 @@ namespace gmm {
     col_matrix< rsvector<T> > B(mat_nrows(BB), mat_ncols(BB));
 
     k = 0;
-    for (TAB::iterator it = columns.begin(); it!=columns.end(); ++it, ++k)
+    for (TAB::iterator it = columns.begin(); it!=columns.end(); ++it, ++k){
       gmm::copy(scaled(mat_col(BB, *it), T(1)/vect_norm2(mat_col(BB, *it))),
-		mat_col(B, *it));
-
+                mat_col(B, *it));
+    }
     std::vector<T> w(mat_nrows(B));
     size_type restart = 120;
     std::vector<T> sdiag(restart);
     std::vector<R> eigval(restart), diag(restart);
     dense_matrix<T> eigvect(restart, restart);
-    
+
     R rho = R(-1), rho2;
-    
     while (nc_r) {
 
       std::vector<T> v(nc_r), v0(nc_r), wl(nc_r);
       dense_matrix<T> lv(nc_r, restart);
 
       if (rho < R(0)) { // Estimate of the spectral radius of B^* B
-	gmm::fill_random(v);
-	for (size_type i = 0; i < 100; ++i) {
-	  gmm::scale(v, T(1)/vect_norm2(v));
-	  gmm::copy(v, v0);
-	  k = 0; gmm::clear(w);
-	  for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
-	    add(scaled(mat_col(B, *it), v[k]), w);
-	  k = 0;
-	  for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
-	    v[k] = vect_hp(w, mat_col(B, *it));
-	  rho = gmm::abs(vect_hp(v, v0) / vect_hp(v0, v0));
-	}
+        gmm::fill_random(v);
+        for (size_type i = 0; i < 100; ++i) {
+          gmm::scale(v, T(1)/vect_norm2(v));
+          gmm::copy(v, v0);
+          k = 0; gmm::clear(w);
+          for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
+            add(scaled(mat_col(B, *it), v[k]), w);
+          k = 0;
+          for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
+            v[k] = vect_hp(w, mat_col(B, *it));
+          rho = gmm::abs(vect_hp(v, v0) / vect_hp(v0, v0));
+        }
+        rho *= R(2);
       }
 
       // Computing vectors of the null space of de B^* B with restarted Lanczos
@@ -130,50 +131,60 @@ namespace gmm {
       gmm::fill_random(v);
       size_type iter = 0;
       for(;;++iter) {
-	R rho_old = rho2;
-	R beta = R(0), alpha;
-	gmm::scale(v, T(1)/vect_norm2(v));
-	for (size_type i = 0; i < restart; ++i) { // Lanczos iterations
-	  gmm::copy(v, mat_col(lv, i));
-	  gmm::clear(w);
-	  k = 0;
-	  for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
-	    add(scaled(mat_col(B, *it), v[k]), w);
-	  k = 0;
-	  for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
-	    wl[k] = v[k]*rho - vect_hp(w, mat_col(B, *it)) - beta*v0[k];
-	  alpha = gmm::real(vect_hp(wl, v));
-	  diag[i] = alpha;
-	  gmm::add(gmm::scaled(v, -alpha), wl);
-	  sdiag[i] = beta = vect_norm2(wl);
-	  gmm::copy(v, v0);
-	  gmm::copy(gmm::scaled(wl, T(1) / beta), v);
-	}
-
-	tridiag_qr_algorithm(diag, sdiag, eigval, eigvect, true);
-
-	size_type num = size_type(-1);
-	rho2 = R(0);
-	for (size_type j = 0; j < restart; ++j)
-	  { R nvp=gmm::abs(eigval[j]); if (nvp > rho2) { rho2=nvp; num=j; } }
-	GMM_ASSERT1(num != size_type(-1), "Internal error");
-
-	gmm::mult(lv, mat_col(eigvect, num), v);
-
-	if (gmm::abs(rho2-rho_old) < rho_old*R(EPS)*R(1000)) break;
-	if (gmm::abs(rho-rho2) <= rho*R(gmm::sqrt(EPS))) break;
-      }
+        R rho_old = rho2;
+        R beta = R(0), alpha;
+        gmm::scale(v, T(1)/vect_norm2(v));
+        size_type eff_restart = restart;
+    if (sdiag.size() != restart) {
+      sdiag.resize(restart); eigval.resize(restart); diag.resize(restart); gmm::resize(eigvect, restart, restart);
+      gmm::resize(lv, nc_r, restart);
+    }
+
+        for (size_type i = 0; i < restart; ++i) { // Lanczos iterations
+          gmm::copy(v, mat_col(lv, i));
+          gmm::clear(w);
+          k = 0;
+          for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
+            add(scaled(mat_col(B, *it), v[k]), w);
+
+          k = 0;
+          for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
+            wl[k] = v[k]*rho - vect_hp(w, mat_col(B, *it)) - beta*v0[k];
+          alpha = gmm::real(vect_hp(wl, v));
+          diag[i] = alpha;
+          gmm::add(gmm::scaled(v, -alpha), wl);
+          sdiag[i] = beta = vect_norm2(wl);
+          gmm::copy(v, v0);
+      if (beta < EPS) { eff_restart = i+1; break; }
+      gmm::copy(gmm::scaled(wl, T(1) / beta), v);
+    }
+    if (eff_restart != restart) {
+      sdiag.resize(eff_restart); eigval.resize(eff_restart); diag.resize(eff_restart);
+      gmm::resize(eigvect, eff_restart, eff_restart); gmm::resize(lv, nc_r, eff_restart);
+    }
+        tridiag_qr_algorithm(diag, sdiag, eigval, eigvect, true);
 
-      // cout << " iter = " << iter << endl;
+        size_type num = size_type(-1);
+        rho2 = R(0);
+        for (size_type j = 0; j < eff_restart; ++j)
+          { R nvp=gmm::abs(eigval[j]); if (nvp > rho2) { rho2=nvp; num=j; }}
 
-      if (gmm::abs(rho-rho2) < rho*R(gmm::sqrt(EPS))) {
-	size_type j_max = size_type(-1), j = 0;
-	R val_max = R(0);
-	for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++j)
-	  if (gmm::abs(v[j]) > val_max)
-	    { val_max = gmm::abs(v[j]); j_max = *it; }
-	//	cout << "Eliminate " << j_max  << endl;
-	columns.erase(j_max); nc_r = columns.size();
+        GMM_ASSERT1(num != size_type(-1), "Internal error");
+
+        gmm::mult(lv, mat_col(eigvect, num), v);
+
+        if (gmm::abs(rho2-rho_old) < rho_old*R(EPS)) break;
+        // if (gmm::abs(rho-rho2) < rho*R(gmm::sqrt(EPS))) break;
+        if (gmm::abs(rho-rho2) < rho*R(EPS)*R(100)) break;
+      }
+
+      if (gmm::abs(rho-rho2) < rho*R(EPS*10.)) {
+        size_type j_max = size_type(-1), j = 0;
+        R val_max = R(0);
+        for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++j)
+          if (gmm::abs(v[j]) > val_max)
+            { val_max = gmm::abs(v[j]); j_max = *it; }
+        columns.erase(j_max); nc_r = columns.size();
       }
       else break;
     }
@@ -183,8 +194,8 @@ namespace gmm {
   // Complex version not verified
   template <typename Mat>
   void range_basis_eff_lu(const Mat &B, std::set<size_type> &columns,
-			     std::vector<bool> &c_ortho, double EPS) {
-   
+                          std::vector<bool> &c_ortho, double EPS) {
+
     typedef std::set<size_type> TAB;
     typedef typename linalg_traits<Mat>::value_type T;
     typedef typename number_traits<T>::magnitude_type R;
@@ -195,17 +206,17 @@ namespace gmm {
       if (!(c_ortho[*it])) ++nc_r; else nc_o++;
 
     if (nc_r > 0) {
- 
+
       gmm::row_matrix< gmm::rsvector<T> > Hr(nc, nc_r), Ho(nc, nc_o);
       gmm::row_matrix< gmm::rsvector<T> > BBr(nr, nc_r), BBo(nr, nc_o);
-      
+
       i = j = 0;
       for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it)
-	if (!(c_ortho[*it]))
-	  { Hr(*it, i) = T(1)/ vect_norminf(mat_col(B, *it)); ++i; }
-	else
-	  { Ho(*it, j) = T(1)/ vect_norm2(mat_col(B, *it)); ++j; }
-      
+        if (!(c_ortho[*it]))
+          { Hr(*it, i) = T(1)/ vect_norminf(mat_col(B, *it)); ++i; }
+        else
+          { Ho(*it, j) = T(1)/ vect_norm2(mat_col(B, *it)); ++j; }
+
       gmm::mult(B, Hr, BBr);
       gmm::mult(B, Ho, BBo);
       gmm::dense_matrix<T> M(nc_r, nc_r), BBB(nc_r, nc_o), MM(nc_r, nc_r);
@@ -213,20 +224,20 @@ namespace gmm {
       gmm::mult(gmm::conjugated(BBr), BBo, BBB);
       gmm::mult(BBB, gmm::conjugated(BBB), MM);
       gmm::add(gmm::scaled(MM, T(-1)), M);
-      
+
       std::vector<int> ipvt(nc_r);
       gmm::lu_factor(M, ipvt);
-            
+
       R emax = R(0);
       for (i = 0; i < nc_r; ++i) emax = std::max(emax, gmm::abs(M(i,i)));
 
       i = 0;
       std::set<size_type> c = columns;
       for (TAB::iterator it = c.begin(); it != c.end(); ++it)
-	if (!(c_ortho[*it])) {
-	  if (gmm::abs(M(i,i)) <= R(EPS)*emax) columns.erase(*it);
-	  ++i;
-	}
+        if (!(c_ortho[*it])) {
+          if (gmm::abs(M(i,i)) <= R(EPS)*emax) columns.erase(*it);
+          ++i;
+        }
     }
   }
 
@@ -237,10 +248,10 @@ namespace gmm {
   // Complex version not verified
   template <typename Mat>
   void range_basis_eff_Gram_Schmidt_sparse(const Mat &BB,
-					   std::set<size_type> &columns,
-					   std::vector<bool> &c_ortho,
-					   double EPS) {
-   
+                                           std::set<size_type> &columns,
+                                           std::vector<bool> &c_ortho,
+                                           double EPS) {
+
     typedef std::set<size_type> TAB;
     typedef typename linalg_traits<Mat>::value_type T;
     typedef typename number_traits<T>::magnitude_type R;
@@ -250,39 +261,39 @@ namespace gmm {
 
     gmm::col_matrix< rsvector<T> > B(nr, nc);
     for (std::set<size_type>::iterator it = columns.begin();
-	 it != columns.end(); ++it) {
+         it != columns.end(); ++it) {
       gmm::copy(mat_col(BB, *it), mat_col(B, *it));
       gmm::scale(mat_col(B, *it), T(1)/vect_norm2(mat_col(B, *it)));
     }
 
     for (std::set<size_type>::iterator it = c.begin(); it != c.end(); ++it)
       if (c_ortho[*it]) {
-	for (std::set<size_type>::iterator it2 = rc.begin();
-	     it2 != rc.end(); ++it2)
-	  if (!(c_ortho[*it2])) {
-	    T r = -vect_hp(mat_col(B, *it2), mat_col(B, *it));
-	    if (r != T(0)) add(scaled(mat_col(B, *it), r), mat_col(B, *it2));
-	  }
-	rc.erase(*it);
+        for (std::set<size_type>::iterator it2 = rc.begin();
+             it2 != rc.end(); ++it2)
+          if (!(c_ortho[*it2])) {
+            T r = -vect_hp(mat_col(B, *it2), mat_col(B, *it));
+            if (r != T(0)) add(scaled(mat_col(B, *it), r), mat_col(B, *it2));
+          }
+        rc.erase(*it);
       }
-    
+
     while (rc.size()) {
       R nmax = R(0); size_type cmax = size_type(-1);
       for (std::set<size_type>::iterator it=rc.begin(); it != rc.end();) {
-	TAB::iterator itnext = it; ++itnext;
-	R n = vect_norm2(mat_col(B, *it));
-	if (nmax < n) { nmax = n; cmax = *it; }
-	if (n < R(EPS)) { columns.erase(*it); rc.erase(*it); }
-	it = itnext;
+        TAB::iterator itnext = it; ++itnext;
+        R n = vect_norm2(mat_col(B, *it));
+        if (nmax < n) { nmax = n; cmax = *it; }
+        if (n < R(EPS)) { columns.erase(*it); rc.erase(*it); }
+        it = itnext;
       }
-      
+
       if (nmax < R(EPS)) break;
-       
+
       gmm::scale(mat_col(B, cmax), T(1)/vect_norm2(mat_col(B, cmax)));
       rc.erase(cmax);
       for (std::set<size_type>::iterator it=rc.begin(); it!=rc.end(); ++it) {
-	T r = -vect_hp(mat_col(B, *it), mat_col(B, cmax));
-	if (r != T(0)) add(scaled(mat_col(B, cmax), r), mat_col(B, *it));
+        T r = -vect_hp(mat_col(B, *it), mat_col(B, cmax));
+        if (r != T(0)) add(scaled(mat_col(B, cmax), r), mat_col(B, *it));
       }
     }
     for (std::set<size_type>::iterator it=rc.begin(); it!=rc.end(); ++it)
@@ -293,35 +304,35 @@ namespace gmm {
   // Range basis with Gram-Schmidt orthogonalization (dense version)
   template <typename Mat>
   void range_basis_eff_Gram_Schmidt_dense(const Mat &B,
-					  std::set<size_type> &columns,
-					  std::vector<bool> &c_ortho,
-					  double EPS) {
-    
+                                          std::set<size_type> &columns,
+                                          std::vector<bool> &c_ortho,
+                                          double EPS) {
+
     typedef std::set<size_type> TAB;
     typedef typename linalg_traits<Mat>::value_type T;
     typedef typename number_traits<T>::magnitude_type R;
 
     size_type nc_r = columns.size(), nc = mat_ncols(B), nr = mat_nrows(B), i;
     std::set<size_type> rc;
- 
+
     row_matrix< gmm::rsvector<T> > H(nc, nc_r), BB(nr, nc_r);
     std::vector<T> v(nc_r);
     std::vector<size_type> ind(nc_r);
-      
+
     i = 0;
     for (TAB::iterator it = columns.begin(); it != columns.end(); ++it, ++i)
       H(*it, i) = T(1) / vect_norm2(mat_col(B, *it));
-     
+
     mult(B, H, BB);
     dense_matrix<T> M(nc_r, nc_r);
     mult(gmm::conjugated(BB), BB, M);
-    
+
     i = 0;
     for (TAB::iterator it = columns.begin(); it != columns.end(); ++it, ++i)
       if (c_ortho[*it]) {
-	gmm::copy(mat_row(M, i), v);
-	rank_one_update(M, scaled(v, T(-1)), v);
-	M(i, i) = T(1);
+        gmm::copy(mat_row(M, i), v);
+        rank_one_update(M, scaled(v, T(-1)), v);
+        M(i, i) = T(1);
       }
       else { rc.insert(i); ind[i] = *it; }
 
@@ -330,11 +341,11 @@ namespace gmm {
       // Next pivot
       R nmax = R(0); size_type imax = size_type(-1);
       for (TAB::iterator it = rc.begin(); it != rc.end();) {
-	TAB::iterator itnext = it; ++itnext;
-	R a = gmm::abs(M(*it, *it));
-	if (a > nmax) { nmax = a; imax = *it; }
-	if (a < R(EPS)) { columns.erase(ind[*it]); rc.erase(*it); }
-	it = itnext;
+        TAB::iterator itnext = it; ++itnext;
+        R a = gmm::abs(M(*it, *it));
+        if (a > nmax) { nmax = a; imax = *it; }
+        if (a < R(EPS)) { columns.erase(ind[*it]); rc.erase(*it); }
+        it = itnext;
       }
 
       if (nmax < R(EPS)) break;
@@ -342,7 +353,7 @@ namespace gmm {
       // Normalization
       gmm::scale(mat_row(M, imax), T(1) / sqrt(nmax));
       gmm::scale(mat_col(M, imax), T(1) / sqrt(nmax));
-      
+
       // orthogonalization
       copy(mat_row(M, imax), v);
       rank_one_update(M, scaled(v, T(-1)), v);
@@ -354,7 +365,7 @@ namespace gmm {
       columns.erase(ind[*it]);
   }
 
-  template <typename L> size_type nnz_eps(const L& l, double eps) { 
+  template <typename L> size_type nnz_eps(const L& l, double eps) {
     typename linalg_traits<L>::const_iterator it = vect_const_begin(l),
       ite = vect_const_end(l);
     size_type res(0);
@@ -371,15 +382,15 @@ namespace gmm {
       if (gmm::abs(*it) >= eps && b[it.index()]) ok = false;
     if (ok) {
       for (it = vect_const_begin(l); it != ite; ++it)
-	if (gmm::abs(*it) >= eps) b[it.index()] = true;
+        if (gmm::abs(*it) >= eps) b[it.index()] = true;
     }
     return ok;
   }
 
   template <typename Mat>
   void range_basis(const Mat &B, std::set<size_type> &columns,
-		       double EPS, col_major, bool skip_init=false) {
-    
+                       double EPS, col_major, bool skip_init=false) {
+
     typedef typename linalg_traits<Mat>::value_type T;
     typedef typename number_traits<T>::magnitude_type R;
 
@@ -390,25 +401,25 @@ namespace gmm {
     std::vector< std::set<size_type> > nnzs(mat_nrows(B));
 
     if (!skip_init) {
-      
+
       R norm_max = R(0);
       for (size_type i = 0; i < nc; ++i) {
-	norms[i] = vect_norminf(mat_col(B, i));
-	norm_max = std::max(norm_max, norms[i]);
+        norms[i] = vect_norminf(mat_col(B, i));
+        norm_max = std::max(norm_max, norms[i]);
       }
-      
+
       columns.clear();
       for (size_type i = 0; i < nc; ++i)
-	if (norms[i] > norm_max*R(EPS)) { 
-	  columns.insert(i);
-	  nnzs[nnz_eps(mat_col(B, i), R(EPS) * norms[i])].insert(i);
-	}
-    
+        if (norms[i] > norm_max*R(EPS)) {
+          columns.insert(i);
+          nnzs[nnz_eps(mat_col(B, i), R(EPS) * norms[i])].insert(i);
+        }
+
       for (size_type i = 1; i < nr; ++i)
-	for (std::set<size_type>::iterator it = nnzs[i].begin();
-	     it != nnzs[i].end(); ++it)
-	  if (reserve__rb(mat_col(B, *it), booked, R(EPS) * norms[*it]))
-	    c_ortho[*it] = true;
+        for (std::set<size_type>::iterator it = nnzs[i].begin();
+             it != nnzs[i].end(); ++it)
+          if (reserve__rb(mat_col(B, *it), booked, R(EPS) * norms[*it]))
+            c_ortho[*it] = true;
     }
 
     size_type sizesm[7] = {125, 200, 350, 550, 800, 1100, 1500}, actsize;
@@ -417,26 +428,26 @@ namespace gmm {
       std::set<size_type> c1, cres;
       actsize = sizesm[k];
       for (std::set<size_type>::iterator it = columns.begin();
-	   it != columns.end(); ++it) {
-	c1.insert(*it);
-	if (c1.size() >= actsize) {
-	  range_basis_eff_Gram_Schmidt_dense(B, c1, c_ortho, EPS);
-	  for (std::set<size_type>::iterator it2=c1.begin(); it2 != c1.end();
-	       ++it2) cres.insert(*it2);
-	  c1.clear(); 
-	}
+           it != columns.end(); ++it) {
+        c1.insert(*it);
+        if (c1.size() >= actsize) {
+          range_basis_eff_Gram_Schmidt_dense(B, c1, c_ortho, EPS);
+          for (std::set<size_type>::iterator it2=c1.begin(); it2 != c1.end();
+               ++it2) cres.insert(*it2);
+          c1.clear();
+        }
       }
       if (c1.size() > 10)
-	range_basis_eff_Gram_Schmidt_dense(B, c1, c_ortho, EPS);
+        range_basis_eff_Gram_Schmidt_dense(B, c1, c_ortho, EPS);
       for (std::set<size_type>::iterator it = c1.begin(); it != c1.end(); ++it)
-	cres.insert(*it);
+        cres.insert(*it);
       columns = cres;
       if (nc_r <= actsize) return;
       if (columns.size() == nc_r) break;
       if (sizesm[k] >= 350 && columns.size() > (nc_r*19)/20) break;
     }
-
-    if (columns.size() > std::max(size_type(500), actsize))
+    // cout << "size of columns " << columns.size() << endl;
+    if (columns.size() > std::max(size_type(10), actsize))
       range_basis_eff_Lanczos(B, columns, EPS);
     else
       range_basis_eff_Gram_Schmidt_dense(B, columns, c_ortho, EPS);
@@ -445,18 +456,18 @@ namespace gmm {
 
   template <typename Mat>
   void range_basis(const Mat &B, std::set<size_type> &columns,
-		   double EPS, row_major) {
+                   double EPS, row_major) {
     typedef typename  linalg_traits<Mat>::value_type T;
     gmm::col_matrix< rsvector<T> > BB(mat_nrows(B), mat_ncols(B));
     GMM_WARNING3("A copy of a row matrix is done into a column matrix "
-		 "for range basis algorithm.");
+                 "for range basis algorithm.");
     gmm::copy(B, BB);
     range_basis(BB, columns, EPS);
   }
 
-  /** Range Basis :     
+  /** Range Basis :
     Extract a basis of the range of a (large sparse) matrix selecting some
-    column vectors of this matrix. This is in particular usefull to select
+    column vectors of this matrix. This is in particular useful to select
     an independent set of linear constraints.
 
     The algorithm is optimized for two cases :
@@ -478,10 +489,10 @@ namespace gmm {
   */
   template <typename Mat>
   void range_basis(const Mat &B, std::set<size_type> &columns,
-		   double EPS=1E-12) {
+                   double EPS=1E-12) {
     range_basis(B, columns, EPS,
-		typename principal_orientation_type
-		<typename linalg_traits<Mat>::sub_orientation>::potype());
+                typename principal_orientation_type
+                <typename linalg_traits<Mat>::sub_orientation>::potype());
 }
 
 }
diff --git a/src/gmm/gmm_real_part.h b/src/gmm/gmm_real_part.h
index 9289319..31439d6 100644
--- a/src/gmm/gmm_real_part.h
+++ b/src/gmm/gmm_real_part.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_real_part.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_ref.h b/src/gmm/gmm_ref.h
index fc3ca6d..e2dbcbe 100644
--- a/src/gmm/gmm_ref.h
+++ b/src/gmm/gmm_ref.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 
 #ifndef GMM_REF_H__
diff --git a/src/gmm/gmm_scaled.h b/src/gmm/gmm_scaled.h
index a9922d8..5a0e5ad 100644
--- a/src/gmm/gmm_scaled.h
+++ b/src/gmm/gmm_scaled.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_scaled.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_solver_Newton.h b/src/gmm/gmm_solver_Newton.h
deleted file mode 100644
index 18dc62d..0000000
--- a/src/gmm/gmm_solver_Newton.h
+++ /dev/null
@@ -1,170 +0,0 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
-
-/**@file gmm_solver_Newton.h
-   @author  Yves Renard <Yves.Renard at insa-lyon.fr>
-   @author  Michel Fournie <fournie at mip.ups-tlse.fr>
-   @date January 24, 2006.
-*/
-#ifndef GMM_SOLVERS_NEWTON_H__
-#define GMM_SOLVERS_NEWTON_H__ 
-
-namespace gmm {
-
-#include "gmm_kernel.h"
-
-  /* ***************************************************************** */
-  /*     Line search definition                                        */
-  /* ***************************************************************** */
-
-  struct abstract_newton_line_search {
-    double conv_alpha, conv_r;
-    size_t it, itmax, glob_it;
-    //  size_t tot_it;
-    virtual void init_search(double r, size_t git) = 0;
-    virtual double next_try(void) = 0;
-    virtual bool is_converged(double) = 0;
-    virtual double converged_value(void) {
-      // tot_it += it; cout << "tot_it = " << tot_it << endl; it = 0;
-      return conv_alpha;
-    };
-    virtual double converged_residual(void) { return conv_r; };
-    virtual ~abstract_newton_line_search() { }
-  };
-
-
-  struct simplest_newton_line_search : public abstract_newton_line_search {
-    double alpha, alpha_mult, first_res, alpha_max_ratio, alpha_min;
-    virtual void init_search(double r, size_t git) {
-      glob_it = git;
-      conv_alpha = alpha = double(1); conv_r = first_res = r; it = 0;
-    }
-    virtual double next_try(void)
-    { conv_alpha = alpha; alpha *= alpha_mult; ++it; return conv_alpha; }
-    virtual bool is_converged(double r) {
-      conv_r = r;
-      return ((it <= 1 && r < first_res)
-	      || (r <= first_res * alpha_max_ratio)
-	      || (conv_alpha <= alpha_min)
-	      || it >= itmax);
-    }
-    simplest_newton_line_search
-    (size_t imax = size_t(-1), double a_max_ratio = 6.0/5.0,
-     double a_min = 1.0/1000.0, double a_mult = 3.0/5.0)
-      : alpha_mult(a_mult), alpha_max_ratio(a_max_ratio), alpha_min(a_min)
-      { itmax = imax; }
-  };
-
-  struct default_newton_line_search : public gmm::abstract_newton_line_search {
-    double alpha, alpha_mult, first_res, alpha_max_ratio;
-    double alpha_min, prev_res;
-    bool first;
-    virtual void init_search(double r, size_t git) {
-      alpha_min = pow(10.0, -gmm::random() * 4.0);
-      alpha_max_ratio = 1 + gmm::random();
-      // cout << "alpha_min = " << alpha_min << endl;
-      glob_it = git;
-      conv_alpha = alpha = double(1);
-      prev_res = conv_r = first_res = r; it = 0; first = true;
-    }
-    virtual double next_try(void)
-    { double a = alpha; alpha *= alpha_mult; ++it; return a; }
-    virtual bool is_converged(double r) {
-      // cout << "alpha = " << alpha
-      //      << " first_res = " << first_res << " r = " << r << endl;
-      if (r < conv_r || first)
-	{ conv_r = r; conv_alpha = alpha / alpha_mult; first = false; }
-      if (r < first_res * 0.9) return true;
-      if ((alpha <= alpha_min*alpha_mult && r < first_res*alpha_max_ratio)
-	  // || (gmm::abs(r - first_res) < 0.011 && alpha < 0.1)
-	  || it >= itmax) return true;
-      return false;
-    }
-    default_newton_line_search(size_t imax = size_t(-1), double a_mult = 0.5)
-      : alpha_mult(a_mult), alpha_min(0.1)  { itmax = imax; }
-  };
-
-//   struct default_newton_line_search : public abstract_newton_line_search {
-//     double alpha, alpha_mult, first_res, alpha_max_ratio;
-//     double alpha_min, prev_res, alpha_max_augment;
-//     virtual void init_search(double r, size_t git) {
-//       glob_it = git;
-//       conv_alpha = alpha = double(1);
-//       prev_res = conv_r = first_res = r; it = 0;
-//     }
-//     virtual double next_try(void)
-//     { conv_alpha = alpha; alpha *= alpha_mult; ++it; return conv_alpha; }
-//     virtual bool is_converged(double r) {
-//       if (glob_it == 0 || (r < first_res / double(2))
-// 	  || (conv_alpha <= alpha_min && r < first_res * alpha_max_augment)
-// 	  || it >= itmax)
-// 	{ conv_r = r; return true; }
-//       if (it > 1 && r > prev_res && prev_res < alpha_max_ratio * first_res)
-// 	return true;
-//       prev_res = conv_r = r;
-//       return false;
-//     }
-//     default_newton_line_search
-//     (size_t imax = size_t(-1),
-//      double a_max_ratio = 5.0/3.0,
-//      double a_min = 1.0/1000.0, double a_mult = 3.0/5.0, double a_augm = 2.0)
-//       : alpha_mult(a_mult), alpha_max_ratio(a_max_ratio),
-// 	alpha_min(a_min), alpha_max_augment(a_augm) { itmax = imax; }
-//   };
-
-
-  struct systematic_newton_line_search : public abstract_newton_line_search {
-    double alpha, alpha_mult, first_res;
-    double alpha_min, prev_res;
-    bool first;
-    virtual void init_search(double r, size_t git) {
-      glob_it = git;
-      conv_alpha = alpha = double(1);
-      prev_res = conv_r = first_res = r; it = 0; first = true;
-    }
-    virtual double next_try(void)
-    { double a = alpha; alpha *= alpha_mult; ++it; return a; }
-    virtual bool is_converged(double r) {
-      // cout << "a = " << alpha / alpha_mult << " r = " << r << endl;
-      if (r < conv_r || first)
-	{ conv_r = r; conv_alpha = alpha / alpha_mult; first = false; }
-      if ((alpha <= alpha_min*alpha_mult) || it >= itmax) return true;
-      return false;
-    }
-    systematic_newton_line_search
-    (size_t imax = size_t(-1),
-     double a_min = 1.0/10000.0, double a_mult = 3.0/5.0)
-      : alpha_mult(a_mult), alpha_min(a_min)  { itmax = imax; }
-  };
-
-}
-
-
-#endif
diff --git a/src/gmm/gmm_solver_Schwarz_additive.h b/src/gmm/gmm_solver_Schwarz_additive.h
index 8f7445d..21b094c 100644
--- a/src/gmm/gmm_solver_Schwarz_additive.h
+++ b/src/gmm/gmm_solver_Schwarz_additive.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_solver_Schwarz_additive.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -43,7 +44,6 @@
 #include "gmm_solver_gmres.h"
 #include "gmm_solver_bicgstab.h"
 #include "gmm_solver_qmr.h"
-#include "gmm_solver_Newton.h"
 
 namespace gmm {
       
@@ -595,7 +595,69 @@ namespace gmm {
   void mult(const AS_exact_gradient<Matrixt, MatrixBi> &M,
 	    const Vector2 &p, const Vector3 &p2, const Vector4 &q)
   { mult(M, p, const_cast<Vector4 &>(q)); add(p2, q); }
-  
+
+  struct S_default_newton_line_search {
+    
+    double conv_alpha, conv_r;
+    size_t it, itmax, glob_it;
+
+    double alpha, alpha_old, alpha_mult, first_res, alpha_max_ratio;
+    double alpha_min_ratio, alpha_min;
+    size_type count, count_pat;
+    bool max_ratio_reached;
+    double alpha_max_ratio_reached, r_max_ratio_reached;
+    size_type it_max_ratio_reached;
+
+    
+    double converged_value(void) { return conv_alpha; };
+    double converged_residual(void) { return conv_r; };
+
+    virtual void init_search(double r, size_t git, double = 0.0) {
+      alpha_min_ratio = 0.9;
+      alpha_min = 1e-10;
+      alpha_max_ratio = 10.0;
+      alpha_mult = 0.25;
+      itmax = size_type(-1);
+      glob_it = git; if (git <= 1) count_pat = 0;
+      conv_alpha = alpha = alpha_old = 1.;
+      conv_r = first_res = r; it = 0;
+      count = 0;
+      max_ratio_reached = false;
+    }
+    virtual double next_try(void) {
+      alpha_old = alpha;
+      if (alpha >= 0.4) alpha *= 0.5; else alpha *= alpha_mult; ++it;
+      return alpha_old;
+    }
+    virtual bool is_converged(double r, double = 0.0) {
+      // cout << "r = " << r << " alpha = " << alpha / alpha_mult << " count_pat = " << count_pat << endl;
+      if (!max_ratio_reached && r < first_res * alpha_max_ratio) {
+	alpha_max_ratio_reached = alpha_old; r_max_ratio_reached = r;
+	it_max_ratio_reached = it; max_ratio_reached = true; 
+      }
+      if (max_ratio_reached && r < r_max_ratio_reached * 0.5
+	  && r > first_res * 1.1 && it <= it_max_ratio_reached+1) {
+	alpha_max_ratio_reached = alpha_old; r_max_ratio_reached = r;
+	it_max_ratio_reached = it;
+      }
+      if (count == 0 || r < conv_r)
+	{ conv_r = r; conv_alpha = alpha_old; count = 1; }
+      if (conv_r < first_res) ++count;
+
+      if (r < first_res *  alpha_min_ratio)
+	{ count_pat = 0.; return true; }      
+      if (count >= 5 || (alpha < alpha_min && max_ratio_reached)) {
+	if (conv_r < first_res * 0.99) count_pat = 0;
+	if (/*gmm::random() * 50. < -log(conv_alpha)-4.0 ||*/ count_pat >= 3)
+	  { conv_r=r_max_ratio_reached; conv_alpha=alpha_max_ratio_reached; }
+	if (conv_r >= first_res * 0.9999) count_pat++;
+	return true;
+      }
+      return false;
+    }
+    S_default_newton_line_search(void) { count_pat = 0; }
+  };
+
 
   
   template <typename Matrixt, typename MatrixBi, typename Vector,
@@ -611,10 +673,8 @@ namespace gmm {
     
     double residual = iter.get_resmax();
 
-    default_newton_line_search internal_ls;
-    default_newton_line_search external_ls;
-
-    // systematic_newton_line_search external_ls(size_t(-1), 1.0/10000.0, 3.0/100.0);
+    S_default_newton_line_search internal_ls;
+    S_default_newton_line_search external_ls;
 
     typename chgt_precond::APrecond PP = chgt_precond::transform(P);
     iter.set_rhsnorm(mtype(1));
diff --git a/src/gmm/gmm_solver_bfgs.h b/src/gmm/gmm_solver_bfgs.h
index 88512a6..80d7c2e 100644
--- a/src/gmm/gmm_solver_bfgs.h
+++ b/src/gmm/gmm_solver_bfgs.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2004-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_solver_bfgs.h 
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_solver_bicgstab.h b/src/gmm/gmm_solver_bicgstab.h
index c702b20..43ac687 100644
--- a/src/gmm/gmm_solver_bicgstab.h
+++ b/src/gmm/gmm_solver_bicgstab.h
@@ -1,40 +1,40 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 // This file is a modified version of bicgstab.h from ITL.
 // See http://osl.iu.edu/research/itl/
 // Following the corresponding Copyright notice.
 //===========================================================================
 //
-// Copyright (c) 1997-2001, The Trustees of Indiana University.
-// All rights reserved.
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are met:
 //
@@ -43,7 +43,7 @@
 //    * Redistributions in binary form must reproduce the above copyright
 //      notice, this list of conditions and the following disclaimer in the
 //      documentation and/or other materials provided with the distribution.
-//    * Neither the name of the University of California, Berkeley nor the
+//    * Neither the name of the University of Notre Dame nor the
 //      names of its contributors may be used to endorse or promote products
 //      derived from this software without specific prior written permission.
 //
diff --git a/src/gmm/gmm_solver_cg.h b/src/gmm/gmm_solver_cg.h
index c42aad6..8a70730 100644
--- a/src/gmm/gmm_solver_cg.h
+++ b/src/gmm/gmm_solver_cg.h
@@ -1,40 +1,40 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 // This file is a modified version of cg.h from ITL.
 // See http://osl.iu.edu/research/itl/
 // Following the corresponding Copyright notice.
 //===========================================================================
 //
-// Copyright (c) 1997-2001, The Trustees of Indiana University.
-// All rights reserved.
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are met:
 //
@@ -43,7 +43,7 @@
 //    * Redistributions in binary form must reproduce the above copyright
 //      notice, this list of conditions and the following disclaimer in the
 //      documentation and/or other materials provided with the distribution.
-//    * Neither the name of the University of California, Berkeley nor the
+//    * Neither the name of the University of Notre Dame nor the
 //      names of its contributors may be used to endorse or promote products
 //      derived from this software without specific prior written permission.
 //
@@ -102,10 +102,6 @@ namespace gmm {
       rho = vect_hp(PS, z, r);
       copy(z, p);
 
-// #ifdef GMM_USES_MPI
-//       double t_ref, t_prec = MPI_Wtime(), t_tot = 0;
-//       static double tmult_tot = 0.0;
-// #endif
       while (!iter.finished_vect(r)) {
 
 	if (!iter.first()) { 
@@ -113,24 +109,13 @@ namespace gmm {
 	  rho = vect_hp(PS, z, r);
 	  add(z, scaled(p, rho / rho_1), p);
 	}
-// #ifdef GMM_USES_MPI
-// t_ref = MPI_Wtime();
-//     cout << "mult CG " << endl;
-// #endif	
 	mult(A, p, q);
-// #ifdef GMM_USES_MPI
-//     tmult_tot += MPI_Wtime()-t_ref;
-//     cout << "tmult_tot CG = " << tmult_tot << endl;
-// #endif
+
 	a = rho / vect_hp(PS, q, p);	
 	add(scaled(p, a), x);
 	add(scaled(q, -a), r);
 	rho_1 = rho;
 
-// #ifdef GMM_USES_MPI
-// 	t_tot = MPI_Wtime() - t_prec;
-// 	cout << "temps CG : " << t_tot << endl; 
-// #endif
 	++iter;
       }
     }
@@ -155,34 +140,17 @@ namespace gmm {
       rho = vect_hp(PS, r, r);
       copy(r, p);
 
-// #ifdef GMM_USES_MPI
-//       double t_ref, t_prec = MPI_Wtime(), t_tot = 0;
-//       static double tmult_tot = 0.0;
-// #endif
       while (!iter.finished_vect(r)) {
 
 	if (!iter.first()) { 
 	  rho = vect_hp(PS, r, r);
 	  add(r, scaled(p, rho / rho_1), p);
-	}
-// #ifdef GMM_USES_MPI
-// t_ref = MPI_Wtime();
-//     cout << "mult CG " << endl;
-// #endif	
+	}	
 	mult(A, p, q);
-// #ifdef GMM_USES_MPI
-//     tmult_tot += MPI_Wtime()-t_ref;
-//     cout << "tmult_tot CG = " << tmult_tot << endl;
-// #endif
 	a = rho / vect_hp(PS, q, p);	
 	add(scaled(p, a), x);
 	add(scaled(q, -a), r);
 	rho_1 = rho;
-
-// #ifdef GMM_USES_MPI
-// 	t_tot = MPI_Wtime() - t_prec;
-// 	cout << "temps CG : " << t_tot << endl; 
-// #endif
 	++iter;
       }
     }
@@ -205,7 +173,7 @@ namespace gmm {
   void cg(const Matrix& A, const Vector1& x, const Vector2& b,
 	 const Precond &P, iteration &iter)
   { cg(A, x , b , identity_matrix(), P , iter); }
-  
+
 }
 
 
diff --git a/src/gmm/gmm_solver_constrained_cg.h b/src/gmm/gmm_solver_constrained_cg.h
index 7761412..7d6e5b7 100644
--- a/src/gmm/gmm_solver_constrained_cg.h
+++ b/src/gmm/gmm_solver_constrained_cg.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_solver_constrained_cg.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -53,7 +54,6 @@ namespace gmm {
     // optimisable : copie de la ligne, precalcul de C * trans(C).
     
     typedef VectorX TmpVec;
-    typedef size_t size_type;
     typedef typename linalg_traits<VectorX>::value_type value_type;
     
     size_type nr = mat_nrows(C), nc = mat_ncols(C);
@@ -101,7 +101,6 @@ namespace gmm {
     typedef typename temporary_vector<CMatrix>::vector_type TmpCVec;
     typedef row_matrix<TmpCVec> TmpCmat;
     
-    typedef size_t size_type;
     typedef typename linalg_traits<VectorX>::value_type value_type;
     value_type rho = 1.0, rho_1, lambda, gamma;
     TmpVec p(vect_size(x)), q(vect_size(x)), q2(vect_size(x)),
diff --git a/src/gmm/gmm_solver_gmres.h b/src/gmm/gmm_solver_gmres.h
index fd88d24..38f760a 100644
--- a/src/gmm/gmm_solver_gmres.h
+++ b/src/gmm/gmm_solver_gmres.h
@@ -1,40 +1,40 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1997-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 // This file is a modified version of gmres.h from ITL.
 // See http://osl.iu.edu/research/itl/
 // Following the corresponding Copyright notice.
 //===========================================================================
 //
-// Copyright (c) 1997-2001, The Trustees of Indiana University.
-// All rights reserved.
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are met:
 //
@@ -43,7 +43,7 @@
 //    * Redistributions in binary form must reproduce the above copyright
 //      notice, this list of conditions and the following disclaimer in the
 //      documentation and/or other materials provided with the distribution.
-//    * Neither the name of the University of California, Berkeley nor the
+//    * Neither the name of the University of Notre Dame nor the
 //      names of its contributors may be used to endorse or promote products
 //      derived from this software without specific prior written permission.
 //
diff --git a/src/gmm/gmm_solver_idgmres.h b/src/gmm/gmm_solver_idgmres.h
index 166b642..1f69d8a 100644
--- a/src/gmm/gmm_solver_idgmres.h
+++ b/src/gmm/gmm_solver_idgmres.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard, Caroline Lecalvez
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_solver_idgmres.h
    @author  Caroline Lecalvez <Caroline.Lecalvez at gmm.insa-tlse.fr>
diff --git a/src/gmm/gmm_solver_qmr.h b/src/gmm/gmm_solver_qmr.h
index f236e83..5257d70 100644
--- a/src/gmm/gmm_solver_qmr.h
+++ b/src/gmm/gmm_solver_qmr.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1997-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 // This file is a modified version of qmr.h from ITL.
 // See http://osl.iu.edu/research/itl/
@@ -43,7 +44,7 @@
 //    * Redistributions in binary form must reproduce the above copyright
 //      notice, this list of conditions and the following disclaimer in the
 //      documentation and/or other materials provided with the distribution.
-//    * Neither the name of the University of California, Berkeley nor the
+//    * Neither the name of the University of Notre Dame nor the
 //      names of its contributors may be used to endorse or promote products
 //      derived from this software without specific prior written permission.
 //
diff --git a/src/gmm/gmm_std.h b/src/gmm/gmm_std.h
index aa05be9..cc1d7e0 100644
--- a/src/gmm/gmm_std.h
+++ b/src/gmm/gmm_std.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_std.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>,
@@ -130,11 +131,12 @@
 #include <numeric>
 
 
-using std::endl; using std::cout; using std::cerr;
-using std::ends; using std::cin;
-
 namespace gmm {
 
+  using std::endl; using std::cout; using std::cerr;
+  using std::ends; using std::cin;
+
+
   /* ********************************************************************* */
   /*       Change locale temporarily.                                      */
   /* ********************************************************************* */
diff --git a/src/gmm/gmm_sub_index.h b/src/gmm/gmm_sub_index.h
index e56e6fc..690078b 100644
--- a/src/gmm/gmm_sub_index.h
+++ b/src/gmm/gmm_sub_index.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_sub_index.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -128,7 +129,7 @@ namespace gmm {
     template <typename CONT> sub_index(const CONT &c)
       : ind(index_generator::create_index(c.begin(), c.end())),
 	rind(index_generator::create_rindex(ind))
-        { comp_extr(); }
+    { comp_extr(); }
     ~sub_index()
       { index_generator::unattach(rind); index_generator::unattach(ind); }
     sub_index(const sub_index &si) : first_(si.first_), last_(si.last_),
@@ -144,12 +145,15 @@ namespace gmm {
   };
 
   struct unsorted_sub_index : public sub_index {
+    typedef basic_index base_type;
+    typedef base_type::const_iterator const_iterator;
+    
     template <typename IT> unsorted_sub_index(IT it, IT ite)
       : sub_index(it, ite) {}
     template <typename CONT> unsorted_sub_index(const CONT &c)
       : sub_index(c) {}
     unsorted_sub_index() {}
-    unsorted_sub_index(const unsorted_sub_index &si) : sub_index(si) {}
+    unsorted_sub_index(const unsorted_sub_index &si) : sub_index((sub_index &)(si)) { }
     unsorted_sub_index &operator =(const unsorted_sub_index &si)
     { sub_index::operator =(si); return *this; }
     void swap(size_type i, size_type j) {
diff --git a/src/gmm/gmm_sub_matrix.h b/src/gmm/gmm_sub_matrix.h
index 54daf5f..4439020 100644
--- a/src/gmm/gmm_sub_matrix.h
+++ b/src/gmm/gmm_sub_matrix.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_sub_matrix.h
    @author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_sub_vector.h b/src/gmm/gmm_sub_vector.h
index c9f60e8..9b74091 100644
--- a/src/gmm/gmm_sub_vector.h
+++ b/src/gmm/gmm_sub_vector.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_sub_vector.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_superlu_interface.h b/src/gmm/gmm_superlu_interface.h
index 6c1309d..c3761bc 100644
--- a/src/gmm/gmm_superlu_interface.h
+++ b/src/gmm/gmm_superlu_interface.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_superlu_interface.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -157,7 +158,7 @@ namespace gmm {
   /* ********************************************************************* */
 
   template <typename MAT, typename VECTX, typename VECTB>
-  void SuperLU_solve(const MAT &A, const VECTX &X_, const VECTB &B,
+  int SuperLU_solve(const MAT &A, const VECTX &X_, const VECTB &B,
 		     double& rcond_, int permc_spec = 3) {
     VECTX &X = const_cast<VECTX &>(X_);
     /*
@@ -231,8 +232,10 @@ namespace gmm {
     Destroy_SuperNode_Matrix(&SL);
     Destroy_CompCol_Matrix(&SU);
     StatFree(&stat);
-    GMM_ASSERT1(info == 0, "SuperLU solve failed: info=" << info);
+    GMM_ASSERT1(info >= 0, "SuperLU solve failed: info =" << info);
+    if (info > 0) GMM_WARNING1("SuperLU solve failed: info =" << info);
     gmm::copy(sol, X);
+    return info;
   }
 
   template <class T> class SuperLU_factor {
diff --git a/src/gmm/gmm_transposed.h b/src/gmm/gmm_transposed.h
index 4fcf571..dbdada0 100644
--- a/src/gmm/gmm_transposed.h
+++ b/src/gmm/gmm_transposed.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_transposed.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_tri_solve.h b/src/gmm/gmm_tri_solve.h
index b110ac8..4ece1d9 100644
--- a/src/gmm/gmm_tri_solve.h
+++ b/src/gmm/gmm_tri_solve.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_tri_solve.h
    @author Yves Renard
diff --git a/src/gmm/gmm_vector.h b/src/gmm/gmm_vector.h
index 3b0e91f..2d2a5ca 100644
--- a/src/gmm/gmm_vector.h
+++ b/src/gmm/gmm_vector.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 /**@file gmm_vector.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
    @date October 13, 2002.
@@ -242,7 +243,7 @@ namespace gmm {
   template<typename T>  void wsvector<T>::resize(size_type n) {
     if (n < nbl) {
       iterator it = this->begin(), itf = it, ite = this->end();
-      while (it != ite) { ++itf; if (it->first >= n) erase(it); it = itf; }
+      while (it != ite) { ++itf; if (it->first >= n) this->erase(it); it=itf; }
     }
     nbl = n;
   }
diff --git a/src/gmm/gmm_vector_to_matrix.h b/src/gmm/gmm_vector_to_matrix.h
index 81217fc..42baf3f 100644
--- a/src/gmm/gmm_vector_to_matrix.h
+++ b/src/gmm/gmm_vector_to_matrix.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// As a special exception, you  may use  this file  as it is a part of a free
-// software  library  without  restriction.  Specifically,  if   other  files
-// instantiate  templates  or  use macros or inline functions from this file,
-// or  you compile this  file  and  link  it  with other files  to produce an
-// executable, this file  does  not  by itself cause the resulting executable
-// to be covered  by the GNU Lesser General Public License.  This   exception
-// does not  however  invalidate  any  other  reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+ 
+ Copyright (C) 2003-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+ 
+===========================================================================*/
 
 /**@file gmm_vector_to_matrix.h
    @author  Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/superlu/BLAS.c b/superlu/BLAS.c
old mode 100755
new mode 100644
diff --git a/superlu/BLAS_f2c.h b/superlu/BLAS_f2c.h
old mode 100755
new mode 100644
diff --git a/superlu/License.txt b/superlu/License.txt
old mode 100755
new mode 100644
diff --git a/superlu/Makefile.am b/superlu/Makefile.am
old mode 100755
new mode 100644
diff --git a/superlu/Makefile.in b/superlu/Makefile.in
index 17ae443..2dec839 100644
--- a/superlu/Makefile.in
+++ b/superlu/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -188,6 +188,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -206,6 +207,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -222,6 +224,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -286,6 +289,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -321,7 +325,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -524,7 +527,7 @@ clean-noinstLTLIBRARIES:
 	  echo "rm -f \"$${dir}/so_locations\""; \
 	  rm -f "$${dir}/so_locations"; \
 	done
-libsuperlu.la: $(libsuperlu_la_OBJECTS) $(libsuperlu_la_DEPENDENCIES) 
+libsuperlu.la: $(libsuperlu_la_OBJECTS) $(libsuperlu_la_DEPENDENCIES) $(EXTRA_libsuperlu_la_DEPENDENCIES) 
 	$(LINK)  $(libsuperlu_la_OBJECTS) $(libsuperlu_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
@@ -1665,10 +1668,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/superlu/ccolumn_bmod.c b/superlu/ccolumn_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/ccolumn_dfs.c b/superlu/ccolumn_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/ccopy_to_ucol.c b/superlu/ccopy_to_ucol.c
old mode 100755
new mode 100644
diff --git a/superlu/cgscon.c b/superlu/cgscon.c
old mode 100755
new mode 100644
diff --git a/superlu/cgsequ.c b/superlu/cgsequ.c
old mode 100755
new mode 100644
diff --git a/superlu/cgsrfs.c b/superlu/cgsrfs.c
old mode 100755
new mode 100644
diff --git a/superlu/cgssv.c b/superlu/cgssv.c
old mode 100755
new mode 100644
diff --git a/superlu/cgssvx.c b/superlu/cgssvx.c
old mode 100755
new mode 100644
diff --git a/superlu/cgstrf.c b/superlu/cgstrf.c
old mode 100755
new mode 100644
diff --git a/superlu/cgstrs.c b/superlu/cgstrs.c
old mode 100755
new mode 100644
diff --git a/superlu/clacon.c b/superlu/clacon.c
old mode 100755
new mode 100644
diff --git a/superlu/clangs.c b/superlu/clangs.c
old mode 100755
new mode 100644
diff --git a/superlu/claqgs.c b/superlu/claqgs.c
old mode 100755
new mode 100644
diff --git a/superlu/cmemory.c b/superlu/cmemory.c
old mode 100755
new mode 100644
diff --git a/superlu/cmyblas2.c b/superlu/cmyblas2.c
old mode 100755
new mode 100644
diff --git a/superlu/colamd.c b/superlu/colamd.c
old mode 100755
new mode 100644
diff --git a/superlu/colamd.h b/superlu/colamd.h
old mode 100755
new mode 100644
diff --git a/superlu/cpanel_bmod.c b/superlu/cpanel_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/cpanel_dfs.c b/superlu/cpanel_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/cpivotL.c b/superlu/cpivotL.c
old mode 100755
new mode 100644
diff --git a/superlu/cpivotgrowth.c b/superlu/cpivotgrowth.c
old mode 100755
new mode 100644
diff --git a/superlu/cpruneL.c b/superlu/cpruneL.c
old mode 100755
new mode 100644
diff --git a/superlu/creadhb.c b/superlu/creadhb.c
old mode 100755
new mode 100644
diff --git a/superlu/csnode_bmod.c b/superlu/csnode_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/csnode_dfs.c b/superlu/csnode_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/csp_blas2.c b/superlu/csp_blas2.c
old mode 100755
new mode 100644
diff --git a/superlu/csp_blas3.c b/superlu/csp_blas3.c
old mode 100755
new mode 100644
diff --git a/superlu/cutil.c b/superlu/cutil.c
old mode 100755
new mode 100644
diff --git a/superlu/dcolumn_bmod.c b/superlu/dcolumn_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/dcolumn_dfs.c b/superlu/dcolumn_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/dcomplex.c b/superlu/dcomplex.c
old mode 100755
new mode 100644
diff --git a/superlu/dcopy_to_ucol.c b/superlu/dcopy_to_ucol.c
old mode 100755
new mode 100644
diff --git a/superlu/dgscon.c b/superlu/dgscon.c
old mode 100755
new mode 100644
diff --git a/superlu/dgsequ.c b/superlu/dgsequ.c
old mode 100755
new mode 100644
diff --git a/superlu/dgsrfs.c b/superlu/dgsrfs.c
old mode 100755
new mode 100644
diff --git a/superlu/dgssv.c b/superlu/dgssv.c
old mode 100755
new mode 100644
diff --git a/superlu/dgssvx.c b/superlu/dgssvx.c
old mode 100755
new mode 100644
diff --git a/superlu/dgstrf.c b/superlu/dgstrf.c
old mode 100755
new mode 100644
diff --git a/superlu/dgstrs.c b/superlu/dgstrs.c
old mode 100755
new mode 100644
diff --git a/superlu/dlacon.c b/superlu/dlacon.c
old mode 100755
new mode 100644
diff --git a/superlu/dlamch.c b/superlu/dlamch.c
old mode 100755
new mode 100644
diff --git a/superlu/dlangs.c b/superlu/dlangs.c
old mode 100755
new mode 100644
diff --git a/superlu/dlaqgs.c b/superlu/dlaqgs.c
old mode 100755
new mode 100644
diff --git a/superlu/dmemory.c b/superlu/dmemory.c
old mode 100755
new mode 100644
diff --git a/superlu/dmyblas2.c b/superlu/dmyblas2.c
old mode 100755
new mode 100644
diff --git a/superlu/dpanel_bmod.c b/superlu/dpanel_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/dpanel_dfs.c b/superlu/dpanel_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/dpivotL.c b/superlu/dpivotL.c
old mode 100755
new mode 100644
diff --git a/superlu/dpivotgrowth.c b/superlu/dpivotgrowth.c
old mode 100755
new mode 100644
diff --git a/superlu/dpruneL.c b/superlu/dpruneL.c
old mode 100755
new mode 100644
diff --git a/superlu/dreadhb.c b/superlu/dreadhb.c
old mode 100755
new mode 100644
diff --git a/superlu/dsnode_bmod.c b/superlu/dsnode_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/dsnode_dfs.c b/superlu/dsnode_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/dsp_blas2.c b/superlu/dsp_blas2.c
old mode 100755
new mode 100644
diff --git a/superlu/dsp_blas3.c b/superlu/dsp_blas3.c
old mode 100755
new mode 100644
diff --git a/superlu/dutil.c b/superlu/dutil.c
old mode 100755
new mode 100644
diff --git a/superlu/dzsum1.c b/superlu/dzsum1.c
old mode 100755
new mode 100644
diff --git a/superlu/f2c_lite.c b/superlu/f2c_lite.c
old mode 100755
new mode 100644
diff --git a/superlu/get_perm_c.c b/superlu/get_perm_c.c
old mode 100755
new mode 100644
diff --git a/superlu/heap_relax_snode.c b/superlu/heap_relax_snode.c
old mode 100755
new mode 100644
diff --git a/superlu/icmax1.c b/superlu/icmax1.c
old mode 100755
new mode 100644
diff --git a/superlu/izmax1.c b/superlu/izmax1.c
old mode 100755
new mode 100644
diff --git a/superlu/lsame.c b/superlu/lsame.c
old mode 100755
new mode 100644
diff --git a/superlu/memory.c b/superlu/memory.c
old mode 100755
new mode 100644
diff --git a/superlu/mmd.c b/superlu/mmd.c
old mode 100755
new mode 100644
diff --git a/superlu/relax_snode.c b/superlu/relax_snode.c
old mode 100755
new mode 100644
diff --git a/superlu/scolumn_bmod.c b/superlu/scolumn_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/scolumn_dfs.c b/superlu/scolumn_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/scomplex.c b/superlu/scomplex.c
old mode 100755
new mode 100644
diff --git a/superlu/scopy_to_ucol.c b/superlu/scopy_to_ucol.c
old mode 100755
new mode 100644
diff --git a/superlu/scsum1.c b/superlu/scsum1.c
old mode 100755
new mode 100644
diff --git a/superlu/sgscon.c b/superlu/sgscon.c
old mode 100755
new mode 100644
diff --git a/superlu/sgsequ.c b/superlu/sgsequ.c
old mode 100755
new mode 100644
diff --git a/superlu/sgsrfs.c b/superlu/sgsrfs.c
old mode 100755
new mode 100644
diff --git a/superlu/sgssv.c b/superlu/sgssv.c
old mode 100755
new mode 100644
diff --git a/superlu/sgssvx.c b/superlu/sgssvx.c
old mode 100755
new mode 100644
diff --git a/superlu/sgstrf.c b/superlu/sgstrf.c
old mode 100755
new mode 100644
diff --git a/superlu/sgstrs.c b/superlu/sgstrs.c
old mode 100755
new mode 100644
diff --git a/superlu/slacon.c b/superlu/slacon.c
old mode 100755
new mode 100644
diff --git a/superlu/slamch.c b/superlu/slamch.c
old mode 100755
new mode 100644
diff --git a/superlu/slangs.c b/superlu/slangs.c
old mode 100755
new mode 100644
diff --git a/superlu/slaqgs.c b/superlu/slaqgs.c
old mode 100755
new mode 100644
diff --git a/superlu/slu_Cnames.h b/superlu/slu_Cnames.h
old mode 100755
new mode 100644
diff --git a/superlu/slu_cdefs.h b/superlu/slu_cdefs.h
old mode 100755
new mode 100644
diff --git a/superlu/slu_dcomplex.h b/superlu/slu_dcomplex.h
old mode 100755
new mode 100644
diff --git a/superlu/slu_ddefs.h b/superlu/slu_ddefs.h
old mode 100755
new mode 100644
diff --git a/superlu/slu_scomplex.h b/superlu/slu_scomplex.h
old mode 100755
new mode 100644
diff --git a/superlu/slu_sdefs.h b/superlu/slu_sdefs.h
old mode 100755
new mode 100644
diff --git a/superlu/slu_util.h b/superlu/slu_util.h
old mode 100755
new mode 100644
diff --git a/superlu/slu_zdefs.h b/superlu/slu_zdefs.h
old mode 100755
new mode 100644
diff --git a/superlu/smemory.c b/superlu/smemory.c
old mode 100755
new mode 100644
diff --git a/superlu/smyblas2.c b/superlu/smyblas2.c
old mode 100755
new mode 100644
diff --git a/superlu/sp_coletree.c b/superlu/sp_coletree.c
old mode 100755
new mode 100644
diff --git a/superlu/sp_ienv.c b/superlu/sp_ienv.c
old mode 100755
new mode 100644
diff --git a/superlu/sp_preorder.c b/superlu/sp_preorder.c
old mode 100755
new mode 100644
diff --git a/superlu/spanel_bmod.c b/superlu/spanel_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/spanel_dfs.c b/superlu/spanel_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/spivotL.c b/superlu/spivotL.c
old mode 100755
new mode 100644
diff --git a/superlu/spivotgrowth.c b/superlu/spivotgrowth.c
old mode 100755
new mode 100644
diff --git a/superlu/spruneL.c b/superlu/spruneL.c
old mode 100755
new mode 100644
diff --git a/superlu/sreadhb.c b/superlu/sreadhb.c
old mode 100755
new mode 100644
diff --git a/superlu/ssnode_bmod.c b/superlu/ssnode_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/ssnode_dfs.c b/superlu/ssnode_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/ssp_blas2.c b/superlu/ssp_blas2.c
old mode 100755
new mode 100644
diff --git a/superlu/ssp_blas3.c b/superlu/ssp_blas3.c
old mode 100755
new mode 100644
diff --git a/superlu/superlu_timer.c b/superlu/superlu_timer.c
old mode 100755
new mode 100644
index 10eb877..fb1deae
--- a/superlu/superlu_timer.c
+++ b/superlu/superlu_timer.c
@@ -7,7 +7,9 @@
  *       compilation to choose the appropriate function.
  *
  */
-
+#ifdef _MSC_VER
+#define NO_TIMER
+#endif
 
 #ifdef SUN 
 /*
diff --git a/superlu/supermatrix.h b/superlu/supermatrix.h
old mode 100755
new mode 100644
diff --git a/superlu/sutil.c b/superlu/sutil.c
old mode 100755
new mode 100644
diff --git a/superlu/util.c b/superlu/util.c
old mode 100755
new mode 100644
diff --git a/superlu/zcolumn_bmod.c b/superlu/zcolumn_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/zcolumn_dfs.c b/superlu/zcolumn_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/zcopy_to_ucol.c b/superlu/zcopy_to_ucol.c
old mode 100755
new mode 100644
diff --git a/superlu/zgscon.c b/superlu/zgscon.c
old mode 100755
new mode 100644
diff --git a/superlu/zgsequ.c b/superlu/zgsequ.c
old mode 100755
new mode 100644
diff --git a/superlu/zgsrfs.c b/superlu/zgsrfs.c
old mode 100755
new mode 100644
diff --git a/superlu/zgssv.c b/superlu/zgssv.c
old mode 100755
new mode 100644
diff --git a/superlu/zgssvx.c b/superlu/zgssvx.c
old mode 100755
new mode 100644
diff --git a/superlu/zgstrf.c b/superlu/zgstrf.c
old mode 100755
new mode 100644
diff --git a/superlu/zgstrs.c b/superlu/zgstrs.c
old mode 100755
new mode 100644
diff --git a/superlu/zlacon.c b/superlu/zlacon.c
old mode 100755
new mode 100644
diff --git a/superlu/zlangs.c b/superlu/zlangs.c
old mode 100755
new mode 100644
diff --git a/superlu/zlaqgs.c b/superlu/zlaqgs.c
old mode 100755
new mode 100644
diff --git a/superlu/zmemory.c b/superlu/zmemory.c
old mode 100755
new mode 100644
diff --git a/superlu/zmyblas2.c b/superlu/zmyblas2.c
old mode 100755
new mode 100644
diff --git a/superlu/zpanel_bmod.c b/superlu/zpanel_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/zpanel_dfs.c b/superlu/zpanel_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/zpivotL.c b/superlu/zpivotL.c
old mode 100755
new mode 100644
diff --git a/superlu/zpivotgrowth.c b/superlu/zpivotgrowth.c
old mode 100755
new mode 100644
diff --git a/superlu/zpruneL.c b/superlu/zpruneL.c
old mode 100755
new mode 100644
diff --git a/superlu/zreadhb.c b/superlu/zreadhb.c
old mode 100755
new mode 100644
diff --git a/superlu/zsnode_bmod.c b/superlu/zsnode_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/zsnode_dfs.c b/superlu/zsnode_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/zsp_blas2.c b/superlu/zsp_blas2.c
old mode 100755
new mode 100644
diff --git a/superlu/zsp_blas3.c b/superlu/zsp_blas3.c
old mode 100755
new mode 100644
diff --git a/superlu/zutil.c b/superlu/zutil.c
old mode 100755
new mode 100644
diff --git a/tests-2.0/Makefile.in b/tests-2.0/Makefile.in
index 433cf09..5807ed3 100644
--- a/tests-2.0/Makefile.in
+++ b/tests-2.0/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -285,6 +285,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -303,6 +304,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -319,6 +321,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -383,6 +386,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -418,7 +422,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -566,88 +569,88 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-bilaplacian$(EXEEXT): $(bilaplacian_OBJECTS) $(bilaplacian_DEPENDENCIES) 
+bilaplacian$(EXEEXT): $(bilaplacian_OBJECTS) $(bilaplacian_DEPENDENCIES) $(EXTRA_bilaplacian_DEPENDENCIES) 
 	@rm -f bilaplacian$(EXEEXT)
 	$(CXXLINK) $(bilaplacian_OBJECTS) $(bilaplacian_LDADD) $(LIBS)
-dynamic_array$(EXEEXT): $(dynamic_array_OBJECTS) $(dynamic_array_DEPENDENCIES) 
+dynamic_array$(EXEEXT): $(dynamic_array_OBJECTS) $(dynamic_array_DEPENDENCIES) $(EXTRA_dynamic_array_DEPENDENCIES) 
 	@rm -f dynamic_array$(EXEEXT)
 	$(CXXLINK) $(dynamic_array_OBJECTS) $(dynamic_array_LDADD) $(LIBS)
-dynamic_friction$(EXEEXT): $(dynamic_friction_OBJECTS) $(dynamic_friction_DEPENDENCIES) 
+dynamic_friction$(EXEEXT): $(dynamic_friction_OBJECTS) $(dynamic_friction_DEPENDENCIES) $(EXTRA_dynamic_friction_DEPENDENCIES) 
 	@rm -f dynamic_friction$(EXEEXT)
 	$(CXXLINK) $(dynamic_friction_OBJECTS) $(dynamic_friction_LDADD) $(LIBS)
-dynamic_tas$(EXEEXT): $(dynamic_tas_OBJECTS) $(dynamic_tas_DEPENDENCIES) 
+dynamic_tas$(EXEEXT): $(dynamic_tas_OBJECTS) $(dynamic_tas_DEPENDENCIES) $(EXTRA_dynamic_tas_DEPENDENCIES) 
 	@rm -f dynamic_tas$(EXEEXT)
 	$(CXXLINK) $(dynamic_tas_OBJECTS) $(dynamic_tas_LDADD) $(LIBS)
-elastostatic$(EXEEXT): $(elastostatic_OBJECTS) $(elastostatic_DEPENDENCIES) 
+elastostatic$(EXEEXT): $(elastostatic_OBJECTS) $(elastostatic_DEPENDENCIES) $(EXTRA_elastostatic_DEPENDENCIES) 
 	@rm -f elastostatic$(EXEEXT)
 	$(CXXLINK) $(elastostatic_OBJECTS) $(elastostatic_LDADD) $(LIBS)
-geo_trans_inv$(EXEEXT): $(geo_trans_inv_OBJECTS) $(geo_trans_inv_DEPENDENCIES) 
+geo_trans_inv$(EXEEXT): $(geo_trans_inv_OBJECTS) $(geo_trans_inv_DEPENDENCIES) $(EXTRA_geo_trans_inv_DEPENDENCIES) 
 	@rm -f geo_trans_inv$(EXEEXT)
 	$(CXXLINK) $(geo_trans_inv_OBJECTS) $(geo_trans_inv_LDADD) $(LIBS)
-helmholtz$(EXEEXT): $(helmholtz_OBJECTS) $(helmholtz_DEPENDENCIES) 
+helmholtz$(EXEEXT): $(helmholtz_OBJECTS) $(helmholtz_DEPENDENCIES) $(EXTRA_helmholtz_DEPENDENCIES) 
 	@rm -f helmholtz$(EXEEXT)
 	$(CXXLINK) $(helmholtz_OBJECTS) $(helmholtz_LDADD) $(LIBS)
-integration$(EXEEXT): $(integration_OBJECTS) $(integration_DEPENDENCIES) 
+integration$(EXEEXT): $(integration_OBJECTS) $(integration_DEPENDENCIES) $(EXTRA_integration_DEPENDENCIES) 
 	@rm -f integration$(EXEEXT)
 	$(CXXLINK) $(integration_OBJECTS) $(integration_LDADD) $(LIBS)
-laplacian$(EXEEXT): $(laplacian_OBJECTS) $(laplacian_DEPENDENCIES) 
+laplacian$(EXEEXT): $(laplacian_OBJECTS) $(laplacian_DEPENDENCIES) $(EXTRA_laplacian_DEPENDENCIES) 
 	@rm -f laplacian$(EXEEXT)
 	$(CXXLINK) $(laplacian_OBJECTS) $(laplacian_LDADD) $(LIBS)
-nonlinear_elastostatic$(EXEEXT): $(nonlinear_elastostatic_OBJECTS) $(nonlinear_elastostatic_DEPENDENCIES) 
+nonlinear_elastostatic$(EXEEXT): $(nonlinear_elastostatic_OBJECTS) $(nonlinear_elastostatic_DEPENDENCIES) $(EXTRA_nonlinear_elastostatic_DEPENDENCIES) 
 	@rm -f nonlinear_elastostatic$(EXEEXT)
 	$(CXXLINK) $(nonlinear_elastostatic_OBJECTS) $(nonlinear_elastostatic_LDADD) $(LIBS)
-plasticity$(EXEEXT): $(plasticity_OBJECTS) $(plasticity_DEPENDENCIES) 
+plasticity$(EXEEXT): $(plasticity_OBJECTS) $(plasticity_DEPENDENCIES) $(EXTRA_plasticity_DEPENDENCIES) 
 	@rm -f plasticity$(EXEEXT)
 	$(CXXLINK) $(plasticity_OBJECTS) $(plasticity_LDADD) $(LIBS)
-plate$(EXEEXT): $(plate_OBJECTS) $(plate_DEPENDENCIES) 
+plate$(EXEEXT): $(plate_OBJECTS) $(plate_DEPENDENCIES) $(EXTRA_plate_DEPENDENCIES) 
 	@rm -f plate$(EXEEXT)
 	$(CXXLINK) $(plate_OBJECTS) $(plate_LDADD) $(LIBS)
-poly$(EXEEXT): $(poly_OBJECTS) $(poly_DEPENDENCIES) 
+poly$(EXEEXT): $(poly_OBJECTS) $(poly_DEPENDENCIES) $(EXTRA_poly_DEPENDENCIES) 
 	@rm -f poly$(EXEEXT)
 	$(CXXLINK) $(poly_OBJECTS) $(poly_LDADD) $(LIBS)
-schwarz_additive$(EXEEXT): $(schwarz_additive_OBJECTS) $(schwarz_additive_DEPENDENCIES) 
+schwarz_additive$(EXEEXT): $(schwarz_additive_OBJECTS) $(schwarz_additive_DEPENDENCIES) $(EXTRA_schwarz_additive_DEPENDENCIES) 
 	@rm -f schwarz_additive$(EXEEXT)
 	$(CXXLINK) $(schwarz_additive_OBJECTS) $(schwarz_additive_LDADD) $(LIBS)
-stokes$(EXEEXT): $(stokes_OBJECTS) $(stokes_DEPENDENCIES) 
+stokes$(EXEEXT): $(stokes_OBJECTS) $(stokes_DEPENDENCIES) $(EXTRA_stokes_DEPENDENCIES) 
 	@rm -f stokes$(EXEEXT)
 	$(CXXLINK) $(stokes_OBJECTS) $(stokes_LDADD) $(LIBS)
-test_assembly$(EXEEXT): $(test_assembly_OBJECTS) $(test_assembly_DEPENDENCIES) 
+test_assembly$(EXEEXT): $(test_assembly_OBJECTS) $(test_assembly_DEPENDENCIES) $(EXTRA_test_assembly_DEPENDENCIES) 
 	@rm -f test_assembly$(EXEEXT)
 	$(CXXLINK) $(test_assembly_OBJECTS) $(test_assembly_LDADD) $(LIBS)
-test_int_set$(EXEEXT): $(test_int_set_OBJECTS) $(test_int_set_DEPENDENCIES) 
+test_int_set$(EXEEXT): $(test_int_set_OBJECTS) $(test_int_set_DEPENDENCIES) $(EXTRA_test_int_set_DEPENDENCIES) 
 	@rm -f test_int_set$(EXEEXT)
 	$(CXXLINK) $(test_int_set_OBJECTS) $(test_int_set_LDADD) $(LIBS)
-test_interpolated_fem$(EXEEXT): $(test_interpolated_fem_OBJECTS) $(test_interpolated_fem_DEPENDENCIES) 
+test_interpolated_fem$(EXEEXT): $(test_interpolated_fem_OBJECTS) $(test_interpolated_fem_DEPENDENCIES) $(EXTRA_test_interpolated_fem_DEPENDENCIES) 
 	@rm -f test_interpolated_fem$(EXEEXT)
 	$(CXXLINK) $(test_interpolated_fem_OBJECTS) $(test_interpolated_fem_LDADD) $(LIBS)
-test_interpolation$(EXEEXT): $(test_interpolation_OBJECTS) $(test_interpolation_DEPENDENCIES) 
+test_interpolation$(EXEEXT): $(test_interpolation_OBJECTS) $(test_interpolation_DEPENDENCIES) $(EXTRA_test_interpolation_DEPENDENCIES) 
 	@rm -f test_interpolation$(EXEEXT)
 	$(CXXLINK) $(test_interpolation_OBJECTS) $(test_interpolation_LDADD) $(LIBS)
-test_kdtree$(EXEEXT): $(test_kdtree_OBJECTS) $(test_kdtree_DEPENDENCIES) 
+test_kdtree$(EXEEXT): $(test_kdtree_OBJECTS) $(test_kdtree_DEPENDENCIES) $(EXTRA_test_kdtree_DEPENDENCIES) 
 	@rm -f test_kdtree$(EXEEXT)
 	$(CXXLINK) $(test_kdtree_OBJECTS) $(test_kdtree_LDADD) $(LIBS)
-test_mat_elem$(EXEEXT): $(test_mat_elem_OBJECTS) $(test_mat_elem_DEPENDENCIES) 
+test_mat_elem$(EXEEXT): $(test_mat_elem_OBJECTS) $(test_mat_elem_DEPENDENCIES) $(EXTRA_test_mat_elem_DEPENDENCIES) 
 	@rm -f test_mat_elem$(EXEEXT)
 	$(CXXLINK) $(test_mat_elem_OBJECTS) $(test_mat_elem_LDADD) $(LIBS)
-test_mesh$(EXEEXT): $(test_mesh_OBJECTS) $(test_mesh_DEPENDENCIES) 
+test_mesh$(EXEEXT): $(test_mesh_OBJECTS) $(test_mesh_DEPENDENCIES) $(EXTRA_test_mesh_DEPENDENCIES) 
 	@rm -f test_mesh$(EXEEXT)
 	$(CXXLINK) $(test_mesh_OBJECTS) $(test_mesh_LDADD) $(LIBS)
-test_mesh_im_level_set$(EXEEXT): $(test_mesh_im_level_set_OBJECTS) $(test_mesh_im_level_set_DEPENDENCIES) 
+test_mesh_im_level_set$(EXEEXT): $(test_mesh_im_level_set_OBJECTS) $(test_mesh_im_level_set_DEPENDENCIES) $(EXTRA_test_mesh_im_level_set_DEPENDENCIES) 
 	@rm -f test_mesh_im_level_set$(EXEEXT)
 	$(CXXLINK) $(test_mesh_im_level_set_OBJECTS) $(test_mesh_im_level_set_LDADD) $(LIBS)
-test_norm$(EXEEXT): $(test_norm_OBJECTS) $(test_norm_DEPENDENCIES) 
+test_norm$(EXEEXT): $(test_norm_OBJECTS) $(test_norm_DEPENDENCIES) $(EXTRA_test_norm_DEPENDENCIES) 
 	@rm -f test_norm$(EXEEXT)
 	$(CXXLINK) $(test_norm_OBJECTS) $(test_norm_LDADD) $(LIBS)
-test_rtree$(EXEEXT): $(test_rtree_OBJECTS) $(test_rtree_DEPENDENCIES) 
+test_rtree$(EXEEXT): $(test_rtree_OBJECTS) $(test_rtree_DEPENDENCIES) $(EXTRA_test_rtree_DEPENDENCIES) 
 	@rm -f test_rtree$(EXEEXT)
 	$(CXXLINK) $(test_rtree_OBJECTS) $(test_rtree_LDADD) $(LIBS)
-test_slice$(EXEEXT): $(test_slice_OBJECTS) $(test_slice_DEPENDENCIES) 
+test_slice$(EXEEXT): $(test_slice_OBJECTS) $(test_slice_DEPENDENCIES) $(EXTRA_test_slice_DEPENDENCIES) 
 	@rm -f test_slice$(EXEEXT)
 	$(CXXLINK) $(test_slice_OBJECTS) $(test_slice_LDADD) $(LIBS)
-test_small_vector$(EXEEXT): $(test_small_vector_OBJECTS) $(test_small_vector_DEPENDENCIES) 
+test_small_vector$(EXEEXT): $(test_small_vector_OBJECTS) $(test_small_vector_DEPENDENCIES) $(EXTRA_test_small_vector_DEPENDENCIES) 
 	@rm -f test_small_vector$(EXEEXT)
 	$(CXXLINK) $(test_small_vector_OBJECTS) $(test_small_vector_LDADD) $(LIBS)
-test_tree_sorted$(EXEEXT): $(test_tree_sorted_OBJECTS) $(test_tree_sorted_DEPENDENCIES) 
+test_tree_sorted$(EXEEXT): $(test_tree_sorted_OBJECTS) $(test_tree_sorted_DEPENDENCIES) $(EXTRA_test_tree_sorted_DEPENDENCIES) 
 	@rm -f test_tree_sorted$(EXEEXT)
 	$(CXXLINK) $(test_tree_sorted_OBJECTS) $(test_tree_sorted_LDADD) $(LIBS)
 
@@ -846,14 +849,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -903,10 +907,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/tests-2.0/bilaplacian.cc b/tests-2.0/bilaplacian.cc
index 993d585..29b4bce 100644
--- a/tests-2.0/bilaplacian.cc
+++ b/tests-2.0/bilaplacian.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file bilaplacian.cc
@@ -42,6 +42,9 @@
 #include <getfem/getfem_derivatives.h>
 #include <gmm/gmm_inoutput.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/bilaplacian.pl b/tests-2.0/bilaplacian.pl
index 3e2dc15..5a435de 100755
--- a/tests-2.0/bilaplacian.pl
+++ b/tests-2.0/bilaplacian.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/dynamic_array.cc b/tests-2.0/dynamic_array.cc
index 7759451..e85d6a5 100644
--- a/tests-2.0/dynamic_array.cc
+++ b/tests-2.0/dynamic_array.cc
@@ -1,27 +1,31 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfem/dal_basic.h>
 #include <deque>
 #include <complex>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 typedef std::deque<int>::size_type size_type;
 template<typename T> struct dyndeque : public std::deque<T> {
   T &operator[](unsigned i) { 
diff --git a/tests-2.0/dynamic_array.pl b/tests-2.0/dynamic_array.pl
index 14efa07..653f111 100755
--- a/tests-2.0/dynamic_array.pl
+++ b/tests-2.0/dynamic_array.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/dynamic_friction.cc b/tests-2.0/dynamic_friction.cc
index 9e604a8..4997d34 100644
--- a/tests-2.0/dynamic_friction.cc
+++ b/tests-2.0/dynamic_friction.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier, Houari Khenous.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier, Houari Khenous.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
  * Dynamic friction in linear elasticity.
@@ -37,6 +37,10 @@
 #include <gmm/gmm.h>
 #include <fstream>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/dynamic_friction.pl b/tests-2.0/dynamic_friction.pl
index 5e97051..2849726 100755
--- a/tests-2.0/dynamic_friction.pl
+++ b/tests-2.0/dynamic_friction.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/dynamic_tas.cc b/tests-2.0/dynamic_tas.cc
index bd67af9..abd8af2 100644
--- a/tests-2.0/dynamic_tas.cc
+++ b/tests-2.0/dynamic_tas.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfem/dal_tas.h>
 
 using namespace std;
diff --git a/tests-2.0/dynamic_tas.pl b/tests-2.0/dynamic_tas.pl
index 2e41ea2..b8c17db 100755
--- a/tests-2.0/dynamic_tas.pl
+++ b/tests-2.0/dynamic_tas.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/elastostatic.cc b/tests-2.0/elastostatic.cc
index 2e609ab..c759ed4 100644
--- a/tests-2.0/elastostatic.cc
+++ b/tests-2.0/elastostatic.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file elastostatic.cc
@@ -42,6 +42,10 @@
 #include <getfem/getfem_error_estimate.h>
 #include <getfem/getfem_import.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/elastostatic.param b/tests-2.0/elastostatic.param
old mode 100755
new mode 100644
index ddc4052..0f012d4
--- a/tests-2.0/elastostatic.param
+++ b/tests-2.0/elastostatic.param
@@ -68,7 +68,7 @@ if (N == 2 && QUAD)
   MESH_FILE='structured:GT="GT_LINEAR_QK(2,1)";SIZES=[1,1];NOISED=0';
   %  MESH_FILE='structured:GT="GT_QK(2,1)";SIZES=[1,1];NOISED=1';
   FEM_TYPE = 'FEM_QK(2,2)';         % Q1 for quadrilaterons
-  FEM_TYPE = 'FEM_INCOMPLETE_Q2';
+  FEM_TYPE = 'FEM_Q2_INCOMPLETE';
   INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(2,6)';
   if (MIXED_PRESSURE)
     FEM_TYPE_P = 'FEM_QK_DISCONTINUOUS(2,0)';
diff --git a/tests-2.0/elastostatic.pl b/tests-2.0/elastostatic.pl
index 9e1d14c..23e4be5 100755
--- a/tests-2.0/elastostatic.pl
+++ b/tests-2.0/elastostatic.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/geo_trans_inv.cc b/tests-2.0/geo_trans_inv.cc
index d6bd68e..73205f0 100644
--- a/tests-2.0/geo_trans_inv.cc
+++ b/tests-2.0/geo_trans_inv.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /*
   various checks for the geometric transformations inversion
@@ -27,6 +27,10 @@
 #include <getfem/bgeot_geotrans_inv.h>
 #include <getfem/getfem_regular_meshes.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 using bgeot::size_type;
 using bgeot::dim_type;
 using bgeot::scalar_type;
diff --git a/tests-2.0/geo_trans_inv.pl b/tests-2.0/geo_trans_inv.pl
index 424554d..064173d 100755
--- a/tests-2.0/geo_trans_inv.pl
+++ b/tests-2.0/geo_trans_inv.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/helmholtz.cc b/tests-2.0/helmholtz.cc
index 0f6faed..d00b475 100644
--- a/tests-2.0/helmholtz.cc
+++ b/tests-2.0/helmholtz.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file helmholtz.cc
@@ -35,6 +35,9 @@
 #include <getfem/getfem_model_solvers.h>
 #include <gmm/gmm.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/helmholtz.pl b/tests-2.0/helmholtz.pl
index 4ab67af..8318b60 100755
--- a/tests-2.0/helmholtz.pl
+++ b/tests-2.0/helmholtz.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/integration.cc b/tests-2.0/integration.cc
index 181cc86..eca7c2d 100644
--- a/tests-2.0/integration.cc
+++ b/tests-2.0/integration.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <numeric>
 #include <getfem/getfem_integration.h>
 #include <getfem/bgeot_comma_init.h>
@@ -26,6 +26,9 @@
 #include <iomanip>
 #include <map>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 using getfem::size_type;
 using bgeot::base_tensor;
 using bgeot::base_matrix;
diff --git a/tests-2.0/integration.pl b/tests-2.0/integration.pl
index 53eb07d..7d913e0 100755
--- a/tests-2.0/integration.pl
+++ b/tests-2.0/integration.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/laplacian.cc b/tests-2.0/laplacian.cc
index 5ed37f1..f006b89 100644
--- a/tests-2.0/laplacian.cc
+++ b/tests-2.0/laplacian.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**@file laplacian.cc
    @brief Laplacian (Poisson) problem.
@@ -38,6 +38,10 @@
 #include <getfem/getfem_superlu.h>
 #include <gmm/gmm.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node; /* geometrical nodes (derived from base_small_vector)*/
diff --git a/tests-2.0/laplacian.pl b/tests-2.0/laplacian.pl
index 9f8a36c..bf3af84 100755
--- a/tests-2.0/laplacian.pl
+++ b/tests-2.0/laplacian.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/nonlinear_elastostatic.cc b/tests-2.0/nonlinear_elastostatic.cc
index f6060f1..7fc0495 100644
--- a/tests-2.0/nonlinear_elastostatic.cc
+++ b/tests-2.0/nonlinear_elastostatic.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file nonlinear_elastostatic.cc
@@ -37,6 +37,10 @@
 #include <getfem/getfem_superlu.h>
 #include <gmm/gmm.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/nonlinear_elastostatic.pl b/tests-2.0/nonlinear_elastostatic.pl
index aa71d78..f618240 100755
--- a/tests-2.0/nonlinear_elastostatic.pl
+++ b/tests-2.0/nonlinear_elastostatic.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/plasticity.cc b/tests-2.0/plasticity.cc
index ca746e0..e95ab61 100644
--- a/tests-2.0/plasticity.cc
+++ b/tests-2.0/plasticity.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file plasticity.cc
@@ -33,6 +33,10 @@
 #include <getfem/getfem_plasticity.h>
 #include <getfem/getfem_export.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/plasticity.pl b/tests-2.0/plasticity.pl
index 4f8d9f1..385f348 100755
--- a/tests-2.0/plasticity.pl
+++ b/tests-2.0/plasticity.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/plate.cc b/tests-2.0/plate.cc
index 68a40f8..06205f4 100644
--- a/tests-2.0/plate.cc
+++ b/tests-2.0/plate.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Michel Salaün.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Michel Salaün.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file plate.cc
@@ -34,6 +34,10 @@
 #include <getfem/getfem_model_solvers.h>
 #include <gmm/gmm.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
@@ -74,7 +78,7 @@ struct plate_problem {
                              // sol_ref = 1 : homogeneous on the vertical edges
                              // sol_ref = 2 : homogeneous on the 4 vertical
                              //       edges with solution u3 = sin²(x)*sin²(y)
-  scalar_type eta;           // usefull only if sol_ref == 2 :
+  scalar_type eta;           // useful only if sol_ref == 2 :
                              // eta = 0 => Kirchoff-Love
 			     // eta = small => Mindlin 
   size_type N_Four ;
diff --git a/tests-2.0/plate.param b/tests-2.0/plate.param
old mode 100755
new mode 100644
index b66785e..8944d6b
--- a/tests-2.0/plate.param
+++ b/tests-2.0/plate.param
@@ -29,15 +29,15 @@ STUDY_FLAG = 0 ;	% if equal to 1 then all the loadings applied are chosen
 			% in order to have a maximum vertical displacement equal to 1.
 
 PRESSURE = 0.0005;       % pressure on the top surface of the plate 
-			% (only usefull if SOL_REF = 0 or 1)  
+			% (only useful if SOL_REF = 0 or 1)  
 			% will be multiplied by EPSILON^3.
 			  
-ETA = 1e-8;             % only usefull if SOL_REF = 2 :
+ETA = 1e-8;             % only useful if SOL_REF = 2 :
 			% if eta  = 0 => solution of the Kirchoff-Love model
 			% if eta != 0 => solution of the Mindlin-Reissner model
 			% To be taken of order epsilon^2 ?
 
-N_Four = 100             % only usefull if SOL_REF = 4
+N_Four = 100             % only useful if SOL_REF = 4
 			
 %%%%% parameters for computation :
 
diff --git a/tests-2.0/plate.pl b/tests-2.0/plate.pl
index 6b9fcd2..de43b38 100755
--- a/tests-2.0/plate.pl
+++ b/tests-2.0/plate.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/poly.cc b/tests-2.0/poly.cc
index 458d67e..d3f3cbd 100644
--- a/tests-2.0/poly.cc
+++ b/tests-2.0/poly.cc
@@ -1,25 +1,27 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfem/bgeot_poly.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using bgeot::short_type;
 
 std::string horner_print(bgeot::short_type degree, bgeot::power_index &mi,
diff --git a/tests-2.0/poly.pl b/tests-2.0/poly.pl
index a64b8f5..bfb1c56 100755
--- a/tests-2.0/poly.pl
+++ b/tests-2.0/poly.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/schwarz_additive.cc b/tests-2.0/schwarz_additive.cc
index c5e6979..ef2b29c 100644
--- a/tests-2.0/schwarz_additive.cc
+++ b/tests-2.0/schwarz_additive.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #define GMM_USES_SUPERLU
 /**************************************************************************/
 /*                                                                        */
@@ -37,6 +37,8 @@
 #include <mpi++.h>
 #endif
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using bgeot::base_vector;
 using bgeot::base_node;
 using bgeot::size_type;
diff --git a/tests-2.0/schwarz_additive.pl b/tests-2.0/schwarz_additive.pl
index 777bada..51bb855 100755
--- a/tests-2.0/schwarz_additive.pl
+++ b/tests-2.0/schwarz_additive.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/stokes.cc b/tests-2.0/stokes.cc
index 1e854d6..85c0a4e 100644
--- a/tests-2.0/stokes.cc
+++ b/tests-2.0/stokes.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file stokes.cc
@@ -37,6 +37,9 @@
 #include <getfem/getfem_model_solvers.h>
 #include <gmm/gmm.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/stokes.pl b/tests-2.0/stokes.pl
index ce5c1fb..23d8e17 100755
--- a/tests-2.0/stokes.pl
+++ b/tests-2.0/stokes.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/test_assembly.cc b/tests-2.0/test_assembly.cc
index a7a7ee9..eb26048 100644
--- a/tests-2.0/test_assembly.cc
+++ b/tests-2.0/test_assembly.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfem/getfem_assembling.h>
 #include <getfem/getfem_assembling.h>
 #include <getfem/getfem_export.h>
@@ -29,6 +29,9 @@
 #endif
 #include <unistd.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 using bgeot::base_vector;
 using bgeot::base_matrix;
 using bgeot::base_small_vector;
diff --git a/tests-2.0/test_assembly.pl b/tests-2.0/test_assembly.pl
index a2ca8a6..bc37083 100755
--- a/tests-2.0/test_assembly.pl
+++ b/tests-2.0/test_assembly.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/test_int_set.cc b/tests-2.0/test_int_set.cc
index 29ff859..1cd9c73 100644
--- a/tests-2.0/test_int_set.cc
+++ b/tests-2.0/test_int_set.cc
@@ -1,26 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfem/dal_bit_vector.h>
 #include <deque>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 typedef size_t size_type;
 
 bool quick = false;
diff --git a/tests-2.0/test_int_set.pl b/tests-2.0/test_int_set.pl
index 1a734e5..83b3cb5 100755
--- a/tests-2.0/test_int_set.pl
+++ b/tests-2.0/test_int_set.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/test_interpolated_fem.cc b/tests-2.0/test_interpolated_fem.cc
index 6dfbc7e..ebe49fc 100644
--- a/tests-2.0/test_interpolated_fem.cc
+++ b/tests-2.0/test_interpolated_fem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 /***************************************************************************/
 /*                                                                         */
 /*  Test the interpolated fem method.                                      */
@@ -31,6 +31,9 @@
 #include <getfem/getfem_interpolated_fem.h>
 #include <getfem/getfem_mesh_fem_sum.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 using bgeot::base_vector;
 using bgeot::base_small_vector;
 using bgeot::base_node;
diff --git a/tests-2.0/test_interpolated_fem.pl b/tests-2.0/test_interpolated_fem.pl
index 6905e03..31d3b5d 100755
--- a/tests-2.0/test_interpolated_fem.pl
+++ b/tests-2.0/test_interpolated_fem.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/test_interpolation.cc b/tests-2.0/test_interpolation.cc
index 95870cf..3ae2255 100644
--- a/tests-2.0/test_interpolation.cc
+++ b/tests-2.0/test_interpolation.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfem/getfem_export.h>
 #include <getfem/getfem_export.h>
 #include <getfem/getfem_regular_meshes.h>
@@ -27,6 +27,9 @@
 #include <unistd.h>
 #include <iomanip>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 
 using getfem::scalar_type;
 using getfem::size_type;
diff --git a/tests-2.0/test_interpolation.pl b/tests-2.0/test_interpolation.pl
index 862b970..ee3cb9e 100755
--- a/tests-2.0/test_interpolation.pl
+++ b/tests-2.0/test_interpolation.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/test_kdtree.cc b/tests-2.0/test_kdtree.cc
index d626f5f..6057d5f 100644
--- a/tests-2.0/test_kdtree.cc
+++ b/tests-2.0/test_kdtree.cc
@@ -1,26 +1,28 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfem/bgeot_kdtree.h>
 #include <getfem/bgeot_kdtree.h>
 #include <getfem/dal_bit_vector.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using bgeot::base_node;
 using bgeot::size_type;
 using bgeot::dim_type;
diff --git a/tests-2.0/test_kdtree.pl b/tests-2.0/test_kdtree.pl
index 6447aec..2d064eb 100755
--- a/tests-2.0/test_kdtree.pl
+++ b/tests-2.0/test_kdtree.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/test_mat_elem.cc b/tests-2.0/test_mat_elem.cc
index 5826416..999ed4c 100644
--- a/tests-2.0/test_mat_elem.cc
+++ b/tests-2.0/test_mat_elem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 /* *********************************************************************** */
 /*                                                                         */
 /*   Program to test the efficiency of elementary matrices computation.    */
@@ -28,7 +28,8 @@
 #include <getfem/getfem_export.h>
 #include <getfem/getfem_regular_meshes.h>
 #include <getfem/getfem_mat_elem.h>
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using bgeot::base_vector;
 using bgeot::base_small_vector;
 using bgeot::base_node;
diff --git a/tests-2.0/test_mat_elem.pl b/tests-2.0/test_mat_elem.pl
index 3bf1da9..38d5309 100755
--- a/tests-2.0/test_mat_elem.pl
+++ b/tests-2.0/test_mat_elem.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/test_mesh.cc b/tests-2.0/test_mesh.cc
index a32d5d7..ba4758c 100644
--- a/tests-2.0/test_mesh.cc
+++ b/tests-2.0/test_mesh.cc
@@ -1,29 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfem/getfem_regular_meshes.h>
 #include <getfem/bgeot_poly_composite.h>
 #include <getfem/bgeot_comma_init.h>
 #include <getfem/getfem_export.h>
 
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using getfem::size_type;
 using getfem::short_type;
 using getfem::dim_type;
diff --git a/tests-2.0/test_mesh.pl b/tests-2.0/test_mesh.pl
index ab43067..1230c2e 100755
--- a/tests-2.0/test_mesh.pl
+++ b/tests-2.0/test_mesh.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/test_mesh_im_level_set.cc b/tests-2.0/test_mesh_im_level_set.cc
index 43d82c2..cde00ff 100644
--- a/tests-2.0/test_mesh_im_level_set.cc
+++ b/tests-2.0/test_mesh_im_level_set.cc
@@ -1,26 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfem/getfem_mesh_im_level_set.h>
 #include <getfem/getfem_mesh_im_level_set.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/test_mesh_im_level_set.pl b/tests-2.0/test_mesh_im_level_set.pl
index 5b2d0c8..9f4376b 100755
--- a/tests-2.0/test_mesh_im_level_set.pl
+++ b/tests-2.0/test_mesh_im_level_set.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/test_norm.cc b/tests-2.0/test_norm.cc
index b75d6fc..e99d508 100644
--- a/tests-2.0/test_norm.cc
+++ b/tests-2.0/test_norm.cc
@@ -1,28 +1,31 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfem/getfem_assembling.h> /* import assembly methods (and comp. of norms) */
 #include <getfem/getfem_assembling.h> /* import assembly methods (and comp. of norms) */
 #include <getfem/getfem_regular_meshes.h>
 #include <getfem/getfem_norm.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small(dim < 16) vectors */
 using bgeot::base_node; /* geometrical nodes (derived from base_small_vector)*/
diff --git a/tests-2.0/test_norm.pl b/tests-2.0/test_norm.pl
index b339f56..b9ab3fa 100755
--- a/tests-2.0/test_norm.pl
+++ b/tests-2.0/test_norm.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/test_rtree.cc b/tests-2.0/test_rtree.cc
index f2ca677..edd758d 100644
--- a/tests-2.0/test_rtree.cc
+++ b/tests-2.0/test_rtree.cc
@@ -1,26 +1,28 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfem/bgeot_rtree.h>
 #include <getfem/bgeot_rtree.h>
 #include <getfem/dal_bit_vector.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using bgeot::base_node;
 using bgeot::size_type;
 using bgeot::dim_type;
diff --git a/tests-2.0/test_rtree.pl b/tests-2.0/test_rtree.pl
index fedb116..de0b459 100755
--- a/tests-2.0/test_rtree.pl
+++ b/tests-2.0/test_rtree.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/test_slice.cc b/tests-2.0/test_slice.cc
index a6dc7db..2c1f633 100644
--- a/tests-2.0/test_slice.cc
+++ b/tests-2.0/test_slice.cc
@@ -1,27 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <getfem/bgeot_comma_init.h>
 #include <getfem/bgeot_comma_init.h>
 #include <getfem/getfem_mesh_slice.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 using getfem::size_type;
 namespace getfem {
   std::ostream& operator<<(std::ostream& o, const bgeot::mesh_structure& m) {
diff --git a/tests-2.0/test_slice.pl b/tests-2.0/test_slice.pl
index 8d3c7f4..d1b7db4 100755
--- a/tests-2.0/test_slice.pl
+++ b/tests-2.0/test_slice.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/test_small_vector.cc b/tests-2.0/test_small_vector.cc
index 39fa9a5..88e27c2 100644
--- a/tests-2.0/test_small_vector.cc
+++ b/tests-2.0/test_small_vector.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /*
 #ifndef DEBUG_SMALL_VECTOR
@@ -32,6 +32,10 @@
 #include <getfem/bgeot_small_vector.h>
 #include <unistd.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 using bgeot::size_type;
 using bgeot::short_type;
 using bgeot::dim_type;
diff --git a/tests-2.0/test_small_vector.pl b/tests-2.0/test_small_vector.pl
index 610fdcd..6c932f3 100755
--- a/tests-2.0/test_small_vector.pl
+++ b/tests-2.0/test_small_vector.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests-2.0/test_tree_sorted.cc b/tests-2.0/test_tree_sorted.cc
index 5954725..b42f810 100644
--- a/tests-2.0/test_tree_sorted.cc
+++ b/tests-2.0/test_tree_sorted.cc
@@ -1,29 +1,31 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #ifndef GETFEM_VERIFY__
   #define GETFEM_VERIFY__
 #endif
 
 #include <getfem/dal_tree_sorted.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 
 int main(void)
diff --git a/tests-2.0/test_tree_sorted.pl b/tests-2.0/test_tree_sorted.pl
index 49bcb0a..b82cdfa 100755
--- a/tests-2.0/test_tree_sorted.pl
+++ b/tests-2.0/test_tree_sorted.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 24bf71f..6912559 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -7,42 +7,44 @@ optprogs =
 optpl = 
 endif
 
-check_PROGRAMS =                 \
-	dynamic_array            \
-	dynamic_tas              \
-	test_int_set             \
-	test_tree_sorted         \
-	poly                     \
-	test_small_vector        \
-	test_kdtree	         \
-	test_rtree	         \
-	test_mesh                \
-	test_slice               \
-	integration              \
-	geo_trans_inv            \
-	test_mat_elem            \
-	test_interpolation       \
-	test_assembly            \
-	test_norm	         \
-	test_interpolated_fem    \
-	test_range_basis         \
-	laplacian                \
-	laplacian_with_bricks    \
-	elastostatic             \
-	stokes                   \
-	helmholtz                \
-	plate                    \
-	nonlinear_elastostatic   \
-	nonlinear_membrane       \
-	schwarz_additive         \
-	$(optprogs)              \
-	plasticity               \
-	plasticity_old_brick     \
-	dynamic_friction         \
-	bilaplacian		 \
-	heat_equation            \
-	wave_equation 		 \
-	cyl_slicer
+check_PROGRAMS =                   \
+	dynamic_array              \
+	dynamic_tas                \
+	test_int_set               \
+	test_tree_sorted           \
+	poly                       \
+	test_small_vector          \
+	test_kdtree	           \
+	test_rtree	           \
+	test_mesh                  \
+	test_slice                 \
+	integration                \
+	geo_trans_inv              \
+	test_mat_elem              \
+	test_interpolation         \
+	test_assembly              \
+	test_norm	           \
+	test_interpolated_fem      \
+	test_range_basis           \
+	laplacian                  \
+	laplacian_with_bricks      \
+	elastostatic               \
+	stokes                     \
+	helmholtz                  \
+	plate                      \
+	nonlinear_elastostatic     \
+	nonlinear_membrane         \
+	schwarz_additive           \
+	$(optprogs)                \
+	plasticity                 \
+	plasticity_old_brick       \
+	dynamic_friction           \
+	bilaplacian		   \
+	heat_equation              \
+	wave_equation 		   \
+	cyl_slicer		   \
+	test_large_sliding_contact \
+	test_continuation
 
 CLEANFILES = \
 	laplacian.res laplacian.mesh laplacian.dataelt 			    \
@@ -52,7 +54,8 @@ CLEANFILES = \
 	nonlinear_elastostatic.dx nonlinear_elastostatic.vtk                \
 	plasticity.mesh plasticity.U plasticity.sigmabar plasticity.vtk     \
 	plasticity.meshfem plasticity.coef elasto_static_err.vtk            \
-	ii_files/* auto_gmm* dyn*.txt dynamic_friction.data *.sl time FN0   \
+	ii_files/* auto_gmm* dyn*.txt dynamic_friction.data                 \
+	dynamic_friction.U dynamic_friction.mfu  *.sl time FN0              \
 	nonlinear_elastostatic.U crack.mesh cut.mesh nonlinear_membrane.mfd \
 	nonlinear_membrane.mesh test_range_basis.mesh nonlinear_membrane.mf \
 	nonlinear_membrane.vtk feminterpolation.vtk circleslice.vtk
@@ -96,47 +99,51 @@ bilaplacian_SOURCES = bilaplacian.cc
 heat_equation_SOURCES = heat_equation.cc
 wave_equation_SOURCES = wave_equation.cc
 cyl_slicer_SOURCES = cyl_slicer.cc
+test_continuation_SOURCES = test_continuation.cc
+test_large_sliding_contact_SOURCES = test_large_sliding_contact.cc
+
 
 SUPLDFLAGS = @SUPLDFLAGS@
 INCLUDES = -I$(top_srcdir)/src -I../src
 LDADD    = ../src/libgetfem.la -lm $(SUPLDFLAGS)
 
 TESTS = \
-	$(top_srcdir)/tests/dynamic_array.pl           \
-	$(top_srcdir)/tests/dynamic_tas.pl             \
-	$(top_srcdir)/tests/test_int_set.pl            \
-	$(top_srcdir)/tests/test_tree_sorted.pl        \
-	$(top_srcdir)/tests/poly.pl                    \
-	$(top_srcdir)/tests/test_small_vector.pl       \
-	$(top_srcdir)/tests/test_kdtree.pl             \
-	$(top_srcdir)/tests/test_rtree.pl              \
-	$(top_srcdir)/tests/geo_trans_inv.pl           \
-	$(top_srcdir)/tests/test_norm.pl               \
-	$(top_srcdir)/tests/test_mesh.pl               \
-	$(top_srcdir)/tests/test_interpolation.pl      \
-	$(top_srcdir)/tests/test_mat_elem.pl           \
-	$(top_srcdir)/tests/test_slice.pl              \
-	$(top_srcdir)/tests/integration.pl             \
-	$(top_srcdir)/tests/test_assembly.pl           \
-	$(top_srcdir)/tests/test_interpolated_fem.pl   \
-	$(top_srcdir)/tests/test_range_basis.pl        \
-	$(top_srcdir)/tests/laplacian.pl               \
-	$(top_srcdir)/tests/laplacian_with_bricks.pl   \
-	$(top_srcdir)/tests/elastostatic.pl            \
-	$(top_srcdir)/tests/stokes.pl                  \
-	$(top_srcdir)/tests/plate.pl                   \
-	$(optpl)                                       \
-	$(top_srcdir)/tests/nonlinear_elastostatic.pl  \
-	$(top_srcdir)/tests/nonlinear_membrane.pl      \
-	$(top_srcdir)/tests/dynamic_friction.pl        \
-	$(top_srcdir)/tests/plasticity.pl              \
-	$(top_srcdir)/tests/plasticity_old_brick.pl    \
-	$(top_srcdir)/tests/helmholtz.pl               \
-	$(top_srcdir)/tests/schwarz_additive.pl        \
-	$(top_srcdir)/tests/bilaplacian.pl    	       \
-	$(top_srcdir)/tests/heat_equation.pl   	       \
-	$(top_srcdir)/tests/wave_equation.pl   	       \
-	$(top_srcdir)/tests/cyl_slicer.pl	       \
+	$(top_srcdir)/tests/dynamic_array.pl              \
+	$(top_srcdir)/tests/dynamic_tas.pl                \
+	$(top_srcdir)/tests/test_int_set.pl               \
+	$(top_srcdir)/tests/test_tree_sorted.pl           \
+	$(top_srcdir)/tests/poly.pl                       \
+	$(top_srcdir)/tests/test_small_vector.pl          \
+	$(top_srcdir)/tests/test_kdtree.pl                \
+	$(top_srcdir)/tests/test_rtree.pl                 \
+	$(top_srcdir)/tests/geo_trans_inv.pl              \
+	$(top_srcdir)/tests/test_norm.pl                  \
+	$(top_srcdir)/tests/test_mesh.pl                  \
+	$(top_srcdir)/tests/test_interpolation.pl         \
+	$(top_srcdir)/tests/test_mat_elem.pl              \
+	$(top_srcdir)/tests/test_slice.pl                 \
+	$(top_srcdir)/tests/integration.pl                \
+	$(top_srcdir)/tests/test_assembly.pl              \
+	$(top_srcdir)/tests/test_interpolated_fem.pl      \
+	$(top_srcdir)/tests/test_range_basis.pl           \
+	$(top_srcdir)/tests/laplacian.pl                  \
+	$(top_srcdir)/tests/laplacian_with_bricks.pl      \
+	$(top_srcdir)/tests/elastostatic.pl               \
+	$(top_srcdir)/tests/stokes.pl                     \
+	$(top_srcdir)/tests/plate.pl                      \
+	$(optpl)                                          \
+	$(top_srcdir)/tests/nonlinear_elastostatic.pl     \
+	$(top_srcdir)/tests/nonlinear_membrane.pl         \
+	$(top_srcdir)/tests/dynamic_friction.pl           \
+	$(top_srcdir)/tests/plasticity.pl                 \
+	$(top_srcdir)/tests/plasticity_old_brick.pl       \
+	$(top_srcdir)/tests/helmholtz.pl                  \
+	$(top_srcdir)/tests/schwarz_additive.pl           \
+	$(top_srcdir)/tests/bilaplacian.pl    	          \
+	$(top_srcdir)/tests/heat_equation.pl              \
+	$(top_srcdir)/tests/wave_equation.pl   	          \
+	$(top_srcdir)/tests/test_large_sliding_contact.pl \
+	$(top_srcdir)/tests/cyl_slicer.pl	          \
 	$(top_srcdir)/tests/make_gmm_test.pl
 
 EXTRA_DIST =                               			\
@@ -189,12 +196,15 @@ EXTRA_DIST =                               			\
 	plasticity_old_brick.param             			\
 	nonlinear_elastostatic.param       			\
 	test_interpolated_fem.param        			\
+	test_large_sliding_contact.pl                           \
+	test_large_sliding_contact.param                        \
 	geo_trans_inv.param                			\
 	heat_equation.pl                   			\
 	heat_equation.param                			\
 	wave_equation.pl                   			\
 	wave_equation.param                			\
-	cyl_slicer.pl                           \
+	cyl_slicer.pl                           		\
+	test_continuation.param                                 \
 	make_gmm_test.pl                   			\
 	gmm_torture01_lusolve.cc           			\
 	gmm_torture05_mult.cc              			\
@@ -204,21 +214,22 @@ EXTRA_DIST =                               			\
 	gmm_torture20_iterative_solvers.cc 			\
         meshes/disc_2D_degree3.mesh        			\
 	meshes/donut_regulier_72_elements.mesh    		\
-	meshes/disc_P2_h0.15.mesh                 		\
+	meshes/disc_P2_h0_3.mesh                 		\
         meshes/donut_regulier_8_elements_288ddl.mesh		\
-	meshes/disc_P2_h0.25.mesh				\
-	meshes/disc_P2_h0.5.mesh				\
+	meshes/disc_P2_h0_5.mesh				\
 	meshes/disc_P2_h1.mesh					\
 	meshes/disc_P2_h2.mesh					\
+	meshes/disc_P2_h4.mesh					\
 	meshes/sphere_with_quadratic_tetra_16000_elts.mesh	\
-	meshes/disc_P2_h3.mesh					\
+	meshes/disc_P2_h6.mesh					\
 	meshes/sphere_with_quadratic_tetra_2000_elts.mesh	\
-	meshes/disc_P2_h4.mesh					\
+	meshes/disc_P2_h8.mesh					\
 	meshes/sphere_with_quadratic_tetra_400_elts.mesh	\
-	meshes/disc_P2_h5.5.mesh				\
+	meshes/disc_P2_h10.mesh					\
 	meshes/sphere_with_quadratic_tetra_80_elts.mesh		\
 	meshes/donut_regulier_32_elements.mesh			\
 	meshes/sphere_with_quadratic_tetra_8_elts.mesh		\
+	meshes/disc_with_a_hole.mesh				\
 	meshes/donut_regulier_512_elements.mesh
 
 
diff --git a/tests/Makefile.in b/tests/Makefile.in
index f3fb505..f2459f4 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -48,7 +48,8 @@ check_PROGRAMS = dynamic_array$(EXEEXT) dynamic_tas$(EXEEXT) \
 	$(am__EXEEXT_1) plasticity$(EXEEXT) \
 	plasticity_old_brick$(EXEEXT) dynamic_friction$(EXEEXT) \
 	bilaplacian$(EXEEXT) heat_equation$(EXEEXT) \
-	wave_equation$(EXEEXT) cyl_slicer$(EXEEXT)
+	wave_equation$(EXEEXT) cyl_slicer$(EXEEXT) \
+	test_large_sliding_contact$(EXEEXT) test_continuation$(EXEEXT)
 TESTS = $(top_srcdir)/tests/dynamic_array.pl \
 	$(top_srcdir)/tests/dynamic_tas.pl \
 	$(top_srcdir)/tests/test_int_set.pl \
@@ -81,6 +82,7 @@ TESTS = $(top_srcdir)/tests/dynamic_array.pl \
 	$(top_srcdir)/tests/bilaplacian.pl \
 	$(top_srcdir)/tests/heat_equation.pl \
 	$(top_srcdir)/tests/wave_equation.pl \
+	$(top_srcdir)/tests/test_large_sliding_contact.pl \
 	$(top_srcdir)/tests/cyl_slicer.pl \
 	$(top_srcdir)/tests/make_gmm_test.pl
 subdir = tests
@@ -197,6 +199,11 @@ am_test_assembly_OBJECTS = test_assembly.$(OBJEXT)
 test_assembly_OBJECTS = $(am_test_assembly_OBJECTS)
 test_assembly_LDADD = $(LDADD)
 test_assembly_DEPENDENCIES = ../src/libgetfem.la $(am__DEPENDENCIES_1)
+am_test_continuation_OBJECTS = test_continuation.$(OBJEXT)
+test_continuation_OBJECTS = $(am_test_continuation_OBJECTS)
+test_continuation_LDADD = $(LDADD)
+test_continuation_DEPENDENCIES = ../src/libgetfem.la \
+	$(am__DEPENDENCIES_1)
 am_test_int_set_OBJECTS = test_int_set.$(OBJEXT)
 test_int_set_OBJECTS = $(am_test_int_set_OBJECTS)
 test_int_set_LDADD = $(LDADD)
@@ -215,6 +222,13 @@ am_test_kdtree_OBJECTS = test_kdtree.$(OBJEXT)
 test_kdtree_OBJECTS = $(am_test_kdtree_OBJECTS)
 test_kdtree_LDADD = $(LDADD)
 test_kdtree_DEPENDENCIES = ../src/libgetfem.la $(am__DEPENDENCIES_1)
+am_test_large_sliding_contact_OBJECTS =  \
+	test_large_sliding_contact.$(OBJEXT)
+test_large_sliding_contact_OBJECTS =  \
+	$(am_test_large_sliding_contact_OBJECTS)
+test_large_sliding_contact_LDADD = $(LDADD)
+test_large_sliding_contact_DEPENDENCIES = ../src/libgetfem.la \
+	$(am__DEPENDENCIES_1)
 am_test_mat_elem_OBJECTS = test_mat_elem.$(OBJEXT)
 test_mat_elem_OBJECTS = $(am_test_mat_elem_OBJECTS)
 test_mat_elem_LDADD = $(LDADD)
@@ -292,9 +306,10 @@ SOURCES = $(bilaplacian_SOURCES) $(crack_SOURCES) \
 	$(nonlinear_membrane_SOURCES) $(plasticity_SOURCES) \
 	$(plasticity_old_brick_SOURCES) $(plate_SOURCES) \
 	$(poly_SOURCES) $(schwarz_additive_SOURCES) $(stokes_SOURCES) \
-	$(test_assembly_SOURCES) $(test_int_set_SOURCES) \
-	$(test_interpolated_fem_SOURCES) $(test_interpolation_SOURCES) \
-	$(test_kdtree_SOURCES) $(test_mat_elem_SOURCES) \
+	$(test_assembly_SOURCES) $(test_continuation_SOURCES) \
+	$(test_int_set_SOURCES) $(test_interpolated_fem_SOURCES) \
+	$(test_interpolation_SOURCES) $(test_kdtree_SOURCES) \
+	$(test_large_sliding_contact_SOURCES) $(test_mat_elem_SOURCES) \
 	$(test_mesh_SOURCES) $(test_mesh_generation_SOURCES) \
 	$(test_mesh_im_level_set_SOURCES) $(test_norm_SOURCES) \
 	$(test_range_basis_SOURCES) $(test_rtree_SOURCES) \
@@ -311,9 +326,10 @@ DIST_SOURCES = $(bilaplacian_SOURCES) $(am__crack_SOURCES_DIST) \
 	$(nonlinear_membrane_SOURCES) $(plasticity_SOURCES) \
 	$(plasticity_old_brick_SOURCES) $(plate_SOURCES) \
 	$(poly_SOURCES) $(schwarz_additive_SOURCES) $(stokes_SOURCES) \
-	$(test_assembly_SOURCES) $(test_int_set_SOURCES) \
-	$(test_interpolated_fem_SOURCES) $(test_interpolation_SOURCES) \
-	$(test_kdtree_SOURCES) $(test_mat_elem_SOURCES) \
+	$(test_assembly_SOURCES) $(test_continuation_SOURCES) \
+	$(test_int_set_SOURCES) $(test_interpolated_fem_SOURCES) \
+	$(test_interpolation_SOURCES) $(test_kdtree_SOURCES) \
+	$(test_large_sliding_contact_SOURCES) $(test_mat_elem_SOURCES) \
 	$(test_mesh_SOURCES) $(am__test_mesh_generation_SOURCES_DIST) \
 	$(am__test_mesh_im_level_set_SOURCES_DIST) \
 	$(test_norm_SOURCES) $(test_range_basis_SOURCES) \
@@ -352,6 +368,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -370,6 +387,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
 GREP = @GREP@
 HAVE_SCILAB = @HAVE_SCILAB@
 IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -386,6 +404,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MATLAB_COM_EXT = @MATLAB_COM_EXT@
 MATLAB_INC_DIR = @MATLAB_INC_DIR@
 MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -450,6 +469,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -485,7 +505,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -519,7 +538,8 @@ CLEANFILES = \
 	nonlinear_elastostatic.dx nonlinear_elastostatic.vtk                \
 	plasticity.mesh plasticity.U plasticity.sigmabar plasticity.vtk     \
 	plasticity.meshfem plasticity.coef elasto_static_err.vtk            \
-	ii_files/* auto_gmm* dyn*.txt dynamic_friction.data *.sl time FN0   \
+	ii_files/* auto_gmm* dyn*.txt dynamic_friction.data                 \
+	dynamic_friction.U dynamic_friction.mfu  *.sl time FN0              \
 	nonlinear_elastostatic.U crack.mesh cut.mesh nonlinear_membrane.mfd \
 	nonlinear_membrane.mesh test_range_basis.mesh nonlinear_membrane.mf \
 	nonlinear_membrane.vtk feminterpolation.vtk circleslice.vtk
@@ -561,6 +581,8 @@ bilaplacian_SOURCES = bilaplacian.cc
 heat_equation_SOURCES = heat_equation.cc
 wave_equation_SOURCES = wave_equation.cc
 cyl_slicer_SOURCES = cyl_slicer.cc
+test_continuation_SOURCES = test_continuation.cc
+test_large_sliding_contact_SOURCES = test_large_sliding_contact.cc
 INCLUDES = -I$(top_srcdir)/src -I../src
 LDADD = ../src/libgetfem.la -lm $(SUPLDFLAGS)
 EXTRA_DIST = \
@@ -613,12 +635,15 @@ EXTRA_DIST = \
 	plasticity_old_brick.param             			\
 	nonlinear_elastostatic.param       			\
 	test_interpolated_fem.param        			\
+	test_large_sliding_contact.pl                           \
+	test_large_sliding_contact.param                        \
 	geo_trans_inv.param                			\
 	heat_equation.pl                   			\
 	heat_equation.param                			\
 	wave_equation.pl                   			\
 	wave_equation.param                			\
-	cyl_slicer.pl                           \
+	cyl_slicer.pl                           		\
+	test_continuation.param                                 \
 	make_gmm_test.pl                   			\
 	gmm_torture01_lusolve.cc           			\
 	gmm_torture05_mult.cc              			\
@@ -628,21 +653,22 @@ EXTRA_DIST = \
 	gmm_torture20_iterative_solvers.cc 			\
         meshes/disc_2D_degree3.mesh        			\
 	meshes/donut_regulier_72_elements.mesh    		\
-	meshes/disc_P2_h0.15.mesh                 		\
+	meshes/disc_P2_h0_3.mesh                 		\
         meshes/donut_regulier_8_elements_288ddl.mesh		\
-	meshes/disc_P2_h0.25.mesh				\
-	meshes/disc_P2_h0.5.mesh				\
+	meshes/disc_P2_h0_5.mesh				\
 	meshes/disc_P2_h1.mesh					\
 	meshes/disc_P2_h2.mesh					\
+	meshes/disc_P2_h4.mesh					\
 	meshes/sphere_with_quadratic_tetra_16000_elts.mesh	\
-	meshes/disc_P2_h3.mesh					\
+	meshes/disc_P2_h6.mesh					\
 	meshes/sphere_with_quadratic_tetra_2000_elts.mesh	\
-	meshes/disc_P2_h4.mesh					\
+	meshes/disc_P2_h8.mesh					\
 	meshes/sphere_with_quadratic_tetra_400_elts.mesh	\
-	meshes/disc_P2_h5.5.mesh				\
+	meshes/disc_P2_h10.mesh					\
 	meshes/sphere_with_quadratic_tetra_80_elts.mesh		\
 	meshes/donut_regulier_32_elements.mesh			\
 	meshes/sphere_with_quadratic_tetra_8_elts.mesh		\
+	meshes/disc_with_a_hole.mesh				\
 	meshes/donut_regulier_512_elements.mesh
 
 TESTS_ENVIRONMENT = perl
@@ -689,115 +715,121 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-bilaplacian$(EXEEXT): $(bilaplacian_OBJECTS) $(bilaplacian_DEPENDENCIES) 
+bilaplacian$(EXEEXT): $(bilaplacian_OBJECTS) $(bilaplacian_DEPENDENCIES) $(EXTRA_bilaplacian_DEPENDENCIES) 
 	@rm -f bilaplacian$(EXEEXT)
 	$(CXXLINK) $(bilaplacian_OBJECTS) $(bilaplacian_LDADD) $(LIBS)
-crack$(EXEEXT): $(crack_OBJECTS) $(crack_DEPENDENCIES) 
+crack$(EXEEXT): $(crack_OBJECTS) $(crack_DEPENDENCIES) $(EXTRA_crack_DEPENDENCIES) 
 	@rm -f crack$(EXEEXT)
 	$(CXXLINK) $(crack_OBJECTS) $(crack_LDADD) $(LIBS)
-cyl_slicer$(EXEEXT): $(cyl_slicer_OBJECTS) $(cyl_slicer_DEPENDENCIES) 
+cyl_slicer$(EXEEXT): $(cyl_slicer_OBJECTS) $(cyl_slicer_DEPENDENCIES) $(EXTRA_cyl_slicer_DEPENDENCIES) 
 	@rm -f cyl_slicer$(EXEEXT)
 	$(CXXLINK) $(cyl_slicer_OBJECTS) $(cyl_slicer_LDADD) $(LIBS)
-dynamic_array$(EXEEXT): $(dynamic_array_OBJECTS) $(dynamic_array_DEPENDENCIES) 
+dynamic_array$(EXEEXT): $(dynamic_array_OBJECTS) $(dynamic_array_DEPENDENCIES) $(EXTRA_dynamic_array_DEPENDENCIES) 
 	@rm -f dynamic_array$(EXEEXT)
 	$(CXXLINK) $(dynamic_array_OBJECTS) $(dynamic_array_LDADD) $(LIBS)
-dynamic_friction$(EXEEXT): $(dynamic_friction_OBJECTS) $(dynamic_friction_DEPENDENCIES) 
+dynamic_friction$(EXEEXT): $(dynamic_friction_OBJECTS) $(dynamic_friction_DEPENDENCIES) $(EXTRA_dynamic_friction_DEPENDENCIES) 
 	@rm -f dynamic_friction$(EXEEXT)
 	$(CXXLINK) $(dynamic_friction_OBJECTS) $(dynamic_friction_LDADD) $(LIBS)
-dynamic_tas$(EXEEXT): $(dynamic_tas_OBJECTS) $(dynamic_tas_DEPENDENCIES) 
+dynamic_tas$(EXEEXT): $(dynamic_tas_OBJECTS) $(dynamic_tas_DEPENDENCIES) $(EXTRA_dynamic_tas_DEPENDENCIES) 
 	@rm -f dynamic_tas$(EXEEXT)
 	$(CXXLINK) $(dynamic_tas_OBJECTS) $(dynamic_tas_LDADD) $(LIBS)
-elastostatic$(EXEEXT): $(elastostatic_OBJECTS) $(elastostatic_DEPENDENCIES) 
+elastostatic$(EXEEXT): $(elastostatic_OBJECTS) $(elastostatic_DEPENDENCIES) $(EXTRA_elastostatic_DEPENDENCIES) 
 	@rm -f elastostatic$(EXEEXT)
 	$(CXXLINK) $(elastostatic_OBJECTS) $(elastostatic_LDADD) $(LIBS)
-geo_trans_inv$(EXEEXT): $(geo_trans_inv_OBJECTS) $(geo_trans_inv_DEPENDENCIES) 
+geo_trans_inv$(EXEEXT): $(geo_trans_inv_OBJECTS) $(geo_trans_inv_DEPENDENCIES) $(EXTRA_geo_trans_inv_DEPENDENCIES) 
 	@rm -f geo_trans_inv$(EXEEXT)
 	$(CXXLINK) $(geo_trans_inv_OBJECTS) $(geo_trans_inv_LDADD) $(LIBS)
-heat_equation$(EXEEXT): $(heat_equation_OBJECTS) $(heat_equation_DEPENDENCIES) 
+heat_equation$(EXEEXT): $(heat_equation_OBJECTS) $(heat_equation_DEPENDENCIES) $(EXTRA_heat_equation_DEPENDENCIES) 
 	@rm -f heat_equation$(EXEEXT)
 	$(CXXLINK) $(heat_equation_OBJECTS) $(heat_equation_LDADD) $(LIBS)
-helmholtz$(EXEEXT): $(helmholtz_OBJECTS) $(helmholtz_DEPENDENCIES) 
+helmholtz$(EXEEXT): $(helmholtz_OBJECTS) $(helmholtz_DEPENDENCIES) $(EXTRA_helmholtz_DEPENDENCIES) 
 	@rm -f helmholtz$(EXEEXT)
 	$(CXXLINK) $(helmholtz_OBJECTS) $(helmholtz_LDADD) $(LIBS)
-integration$(EXEEXT): $(integration_OBJECTS) $(integration_DEPENDENCIES) 
+integration$(EXEEXT): $(integration_OBJECTS) $(integration_DEPENDENCIES) $(EXTRA_integration_DEPENDENCIES) 
 	@rm -f integration$(EXEEXT)
 	$(CXXLINK) $(integration_OBJECTS) $(integration_LDADD) $(LIBS)
-laplacian$(EXEEXT): $(laplacian_OBJECTS) $(laplacian_DEPENDENCIES) 
+laplacian$(EXEEXT): $(laplacian_OBJECTS) $(laplacian_DEPENDENCIES) $(EXTRA_laplacian_DEPENDENCIES) 
 	@rm -f laplacian$(EXEEXT)
 	$(CXXLINK) $(laplacian_OBJECTS) $(laplacian_LDADD) $(LIBS)
-laplacian_with_bricks$(EXEEXT): $(laplacian_with_bricks_OBJECTS) $(laplacian_with_bricks_DEPENDENCIES) 
+laplacian_with_bricks$(EXEEXT): $(laplacian_with_bricks_OBJECTS) $(laplacian_with_bricks_DEPENDENCIES) $(EXTRA_laplacian_with_bricks_DEPENDENCIES) 
 	@rm -f laplacian_with_bricks$(EXEEXT)
 	$(CXXLINK) $(laplacian_with_bricks_OBJECTS) $(laplacian_with_bricks_LDADD) $(LIBS)
-nonlinear_elastostatic$(EXEEXT): $(nonlinear_elastostatic_OBJECTS) $(nonlinear_elastostatic_DEPENDENCIES) 
+nonlinear_elastostatic$(EXEEXT): $(nonlinear_elastostatic_OBJECTS) $(nonlinear_elastostatic_DEPENDENCIES) $(EXTRA_nonlinear_elastostatic_DEPENDENCIES) 
 	@rm -f nonlinear_elastostatic$(EXEEXT)
 	$(CXXLINK) $(nonlinear_elastostatic_OBJECTS) $(nonlinear_elastostatic_LDADD) $(LIBS)
-nonlinear_membrane$(EXEEXT): $(nonlinear_membrane_OBJECTS) $(nonlinear_membrane_DEPENDENCIES) 
+nonlinear_membrane$(EXEEXT): $(nonlinear_membrane_OBJECTS) $(nonlinear_membrane_DEPENDENCIES) $(EXTRA_nonlinear_membrane_DEPENDENCIES) 
 	@rm -f nonlinear_membrane$(EXEEXT)
 	$(CXXLINK) $(nonlinear_membrane_OBJECTS) $(nonlinear_membrane_LDADD) $(LIBS)
-plasticity$(EXEEXT): $(plasticity_OBJECTS) $(plasticity_DEPENDENCIES) 
+plasticity$(EXEEXT): $(plasticity_OBJECTS) $(plasticity_DEPENDENCIES) $(EXTRA_plasticity_DEPENDENCIES) 
 	@rm -f plasticity$(EXEEXT)
 	$(CXXLINK) $(plasticity_OBJECTS) $(plasticity_LDADD) $(LIBS)
-plasticity_old_brick$(EXEEXT): $(plasticity_old_brick_OBJECTS) $(plasticity_old_brick_DEPENDENCIES) 
+plasticity_old_brick$(EXEEXT): $(plasticity_old_brick_OBJECTS) $(plasticity_old_brick_DEPENDENCIES) $(EXTRA_plasticity_old_brick_DEPENDENCIES) 
 	@rm -f plasticity_old_brick$(EXEEXT)
 	$(CXXLINK) $(plasticity_old_brick_OBJECTS) $(plasticity_old_brick_LDADD) $(LIBS)
-plate$(EXEEXT): $(plate_OBJECTS) $(plate_DEPENDENCIES) 
+plate$(EXEEXT): $(plate_OBJECTS) $(plate_DEPENDENCIES) $(EXTRA_plate_DEPENDENCIES) 
 	@rm -f plate$(EXEEXT)
 	$(CXXLINK) $(plate_OBJECTS) $(plate_LDADD) $(LIBS)
-poly$(EXEEXT): $(poly_OBJECTS) $(poly_DEPENDENCIES) 
+poly$(EXEEXT): $(poly_OBJECTS) $(poly_DEPENDENCIES) $(EXTRA_poly_DEPENDENCIES) 
 	@rm -f poly$(EXEEXT)
 	$(CXXLINK) $(poly_OBJECTS) $(poly_LDADD) $(LIBS)
-schwarz_additive$(EXEEXT): $(schwarz_additive_OBJECTS) $(schwarz_additive_DEPENDENCIES) 
+schwarz_additive$(EXEEXT): $(schwarz_additive_OBJECTS) $(schwarz_additive_DEPENDENCIES) $(EXTRA_schwarz_additive_DEPENDENCIES) 
 	@rm -f schwarz_additive$(EXEEXT)
 	$(CXXLINK) $(schwarz_additive_OBJECTS) $(schwarz_additive_LDADD) $(LIBS)
-stokes$(EXEEXT): $(stokes_OBJECTS) $(stokes_DEPENDENCIES) 
+stokes$(EXEEXT): $(stokes_OBJECTS) $(stokes_DEPENDENCIES) $(EXTRA_stokes_DEPENDENCIES) 
 	@rm -f stokes$(EXEEXT)
 	$(CXXLINK) $(stokes_OBJECTS) $(stokes_LDADD) $(LIBS)
-test_assembly$(EXEEXT): $(test_assembly_OBJECTS) $(test_assembly_DEPENDENCIES) 
+test_assembly$(EXEEXT): $(test_assembly_OBJECTS) $(test_assembly_DEPENDENCIES) $(EXTRA_test_assembly_DEPENDENCIES) 
 	@rm -f test_assembly$(EXEEXT)
 	$(CXXLINK) $(test_assembly_OBJECTS) $(test_assembly_LDADD) $(LIBS)
-test_int_set$(EXEEXT): $(test_int_set_OBJECTS) $(test_int_set_DEPENDENCIES) 
+test_continuation$(EXEEXT): $(test_continuation_OBJECTS) $(test_continuation_DEPENDENCIES) $(EXTRA_test_continuation_DEPENDENCIES) 
+	@rm -f test_continuation$(EXEEXT)
+	$(CXXLINK) $(test_continuation_OBJECTS) $(test_continuation_LDADD) $(LIBS)
+test_int_set$(EXEEXT): $(test_int_set_OBJECTS) $(test_int_set_DEPENDENCIES) $(EXTRA_test_int_set_DEPENDENCIES) 
 	@rm -f test_int_set$(EXEEXT)
 	$(CXXLINK) $(test_int_set_OBJECTS) $(test_int_set_LDADD) $(LIBS)
-test_interpolated_fem$(EXEEXT): $(test_interpolated_fem_OBJECTS) $(test_interpolated_fem_DEPENDENCIES) 
+test_interpolated_fem$(EXEEXT): $(test_interpolated_fem_OBJECTS) $(test_interpolated_fem_DEPENDENCIES) $(EXTRA_test_interpolated_fem_DEPENDENCIES) 
 	@rm -f test_interpolated_fem$(EXEEXT)
 	$(CXXLINK) $(test_interpolated_fem_OBJECTS) $(test_interpolated_fem_LDADD) $(LIBS)
-test_interpolation$(EXEEXT): $(test_interpolation_OBJECTS) $(test_interpolation_DEPENDENCIES) 
+test_interpolation$(EXEEXT): $(test_interpolation_OBJECTS) $(test_interpolation_DEPENDENCIES) $(EXTRA_test_interpolation_DEPENDENCIES) 
 	@rm -f test_interpolation$(EXEEXT)
 	$(CXXLINK) $(test_interpolation_OBJECTS) $(test_interpolation_LDADD) $(LIBS)
-test_kdtree$(EXEEXT): $(test_kdtree_OBJECTS) $(test_kdtree_DEPENDENCIES) 
+test_kdtree$(EXEEXT): $(test_kdtree_OBJECTS) $(test_kdtree_DEPENDENCIES) $(EXTRA_test_kdtree_DEPENDENCIES) 
 	@rm -f test_kdtree$(EXEEXT)
 	$(CXXLINK) $(test_kdtree_OBJECTS) $(test_kdtree_LDADD) $(LIBS)
-test_mat_elem$(EXEEXT): $(test_mat_elem_OBJECTS) $(test_mat_elem_DEPENDENCIES) 
+test_large_sliding_contact$(EXEEXT): $(test_large_sliding_contact_OBJECTS) $(test_large_sliding_contact_DEPENDENCIES) $(EXTRA_test_large_sliding_contact_DEPENDENCIES) 
+	@rm -f test_large_sliding_contact$(EXEEXT)
+	$(CXXLINK) $(test_large_sliding_contact_OBJECTS) $(test_large_sliding_contact_LDADD) $(LIBS)
+test_mat_elem$(EXEEXT): $(test_mat_elem_OBJECTS) $(test_mat_elem_DEPENDENCIES) $(EXTRA_test_mat_elem_DEPENDENCIES) 
 	@rm -f test_mat_elem$(EXEEXT)
 	$(CXXLINK) $(test_mat_elem_OBJECTS) $(test_mat_elem_LDADD) $(LIBS)
-test_mesh$(EXEEXT): $(test_mesh_OBJECTS) $(test_mesh_DEPENDENCIES) 
+test_mesh$(EXEEXT): $(test_mesh_OBJECTS) $(test_mesh_DEPENDENCIES) $(EXTRA_test_mesh_DEPENDENCIES) 
 	@rm -f test_mesh$(EXEEXT)
 	$(CXXLINK) $(test_mesh_OBJECTS) $(test_mesh_LDADD) $(LIBS)
-test_mesh_generation$(EXEEXT): $(test_mesh_generation_OBJECTS) $(test_mesh_generation_DEPENDENCIES) 
+test_mesh_generation$(EXEEXT): $(test_mesh_generation_OBJECTS) $(test_mesh_generation_DEPENDENCIES) $(EXTRA_test_mesh_generation_DEPENDENCIES) 
 	@rm -f test_mesh_generation$(EXEEXT)
 	$(CXXLINK) $(test_mesh_generation_OBJECTS) $(test_mesh_generation_LDADD) $(LIBS)
-test_mesh_im_level_set$(EXEEXT): $(test_mesh_im_level_set_OBJECTS) $(test_mesh_im_level_set_DEPENDENCIES) 
+test_mesh_im_level_set$(EXEEXT): $(test_mesh_im_level_set_OBJECTS) $(test_mesh_im_level_set_DEPENDENCIES) $(EXTRA_test_mesh_im_level_set_DEPENDENCIES) 
 	@rm -f test_mesh_im_level_set$(EXEEXT)
 	$(CXXLINK) $(test_mesh_im_level_set_OBJECTS) $(test_mesh_im_level_set_LDADD) $(LIBS)
-test_norm$(EXEEXT): $(test_norm_OBJECTS) $(test_norm_DEPENDENCIES) 
+test_norm$(EXEEXT): $(test_norm_OBJECTS) $(test_norm_DEPENDENCIES) $(EXTRA_test_norm_DEPENDENCIES) 
 	@rm -f test_norm$(EXEEXT)
 	$(CXXLINK) $(test_norm_OBJECTS) $(test_norm_LDADD) $(LIBS)
-test_range_basis$(EXEEXT): $(test_range_basis_OBJECTS) $(test_range_basis_DEPENDENCIES) 
+test_range_basis$(EXEEXT): $(test_range_basis_OBJECTS) $(test_range_basis_DEPENDENCIES) $(EXTRA_test_range_basis_DEPENDENCIES) 
 	@rm -f test_range_basis$(EXEEXT)
 	$(CXXLINK) $(test_range_basis_OBJECTS) $(test_range_basis_LDADD) $(LIBS)
-test_rtree$(EXEEXT): $(test_rtree_OBJECTS) $(test_rtree_DEPENDENCIES) 
+test_rtree$(EXEEXT): $(test_rtree_OBJECTS) $(test_rtree_DEPENDENCIES) $(EXTRA_test_rtree_DEPENDENCIES) 
 	@rm -f test_rtree$(EXEEXT)
 	$(CXXLINK) $(test_rtree_OBJECTS) $(test_rtree_LDADD) $(LIBS)
-test_slice$(EXEEXT): $(test_slice_OBJECTS) $(test_slice_DEPENDENCIES) 
+test_slice$(EXEEXT): $(test_slice_OBJECTS) $(test_slice_DEPENDENCIES) $(EXTRA_test_slice_DEPENDENCIES) 
 	@rm -f test_slice$(EXEEXT)
 	$(CXXLINK) $(test_slice_OBJECTS) $(test_slice_LDADD) $(LIBS)
-test_small_vector$(EXEEXT): $(test_small_vector_OBJECTS) $(test_small_vector_DEPENDENCIES) 
+test_small_vector$(EXEEXT): $(test_small_vector_OBJECTS) $(test_small_vector_DEPENDENCIES) $(EXTRA_test_small_vector_DEPENDENCIES) 
 	@rm -f test_small_vector$(EXEEXT)
 	$(CXXLINK) $(test_small_vector_OBJECTS) $(test_small_vector_LDADD) $(LIBS)
-test_tree_sorted$(EXEEXT): $(test_tree_sorted_OBJECTS) $(test_tree_sorted_DEPENDENCIES) 
+test_tree_sorted$(EXEEXT): $(test_tree_sorted_OBJECTS) $(test_tree_sorted_DEPENDENCIES) $(EXTRA_test_tree_sorted_DEPENDENCIES) 
 	@rm -f test_tree_sorted$(EXEEXT)
 	$(CXXLINK) $(test_tree_sorted_OBJECTS) $(test_tree_sorted_LDADD) $(LIBS)
-wave_equation$(EXEEXT): $(wave_equation_OBJECTS) $(wave_equation_DEPENDENCIES) 
+wave_equation$(EXEEXT): $(wave_equation_OBJECTS) $(wave_equation_DEPENDENCIES) $(EXTRA_wave_equation_DEPENDENCIES) 
 	@rm -f wave_equation$(EXEEXT)
 	$(CXXLINK) $(wave_equation_OBJECTS) $(wave_equation_LDADD) $(LIBS)
 
@@ -829,10 +861,12 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/schwarz_additive.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stokes.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_assembly.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_continuation.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_int_set.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_interpolated_fem.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_interpolation.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_kdtree.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_large_sliding_contact.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_mat_elem.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_mesh.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_mesh_generation.Po at am__quote@
@@ -1005,14 +1039,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -1062,10 +1097,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/tests/bilaplacian.cc b/tests/bilaplacian.cc
index d024679..d3f177f 100644
--- a/tests/bilaplacian.cc
+++ b/tests/bilaplacian.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file bilaplacian.cc
@@ -42,6 +42,9 @@
 #include "getfem/getfem_derivatives.h"
 #include "gmm/gmm_inoutput.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests/bilaplacian.param b/tests/bilaplacian.param
index d2cd08f..d5288bd 100644
--- a/tests/bilaplacian.param
+++ b/tests/bilaplacian.param
@@ -6,9 +6,9 @@
 %%%%% pde parameters :	                              %%%%%
 LX = 1.0; LY = LX; LZ = LX;	% sizes of the domain.
 N = 2;
-QUAD = 1;
-MESH_NOISED = 1;        % Set to one if you want to "shake" the mesh
-NX = 80;                % space step.
+QUAD = 0;
+MESH_NOISED = 0;        % Set to one if you want to "shake" the mesh
+NX = 8;                % space step.
 DIRICHLET_VERSION = 0;  % 0=multipliers, 1=penalization, 2=elimination
 EPS_DIRICHLET_PENAL = 1e10; % Parametre de penalisation
 FT = 10.0;              % parameter for the exact solution
@@ -39,9 +39,9 @@ if (N == 2 && ~QUAD)
   if 0   % hermite element
     FEM_TYPE = 'FEM_HERMITE(2)';   % not conformal -> problem
     DIRICHLET_FEM_TYPE = 'FEM_PK(2,3)';
-  elseif 0  % argyris element
+  elseif 1  % argyris element
     FEM_TYPE = 'FEM_ARGYRIS';
-    DIRICHLET_FEM_TYPE = 'FEM_PK(2,5)';
+    DIRICHLET_FEM_TYPE = 'FEM_PK(2,3)';
   else
 %     FEM_TYPE = 'FEM_HCT_TRIANGLE';
     FEM_TYPE = 'FEM_REDUCED_HCT_TRIANGLE';
diff --git a/tests/bilaplacian.pl b/tests/bilaplacian.pl
index 9c707c4..af75f19 100644
--- a/tests/bilaplacian.pl
+++ b/tests/bilaplacian.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -22,7 +23,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 LX = 1.0; LY = LX; LZ = LX;
 MESH_NOISED = 0;
 MESH_TYPE = 'GT_PK(2,1)';
@@ -37,6 +38,7 @@ ROOTFILENAME = 'bilaplacian';
 DIRICHLET_VERSION = 0;
 D = 1.0;
 KL = 0;
+BOUNDARY_REF = 1;
 
 ;
 
diff --git a/tests/crack.cc b/tests/crack.cc
index 30e7c1f..02d0de4 100644
--- a/tests/crack.cc
+++ b/tests/crack.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
   
 /**
  * Linear Elastostatic problem with a crack.
@@ -41,6 +41,9 @@
 #include "gmm/gmm.h"
 #include "gmm/gmm_inoutput.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
@@ -227,13 +230,13 @@ void sol_ref_infinite_plane(scalar_type nu, scalar_type E, scalar_type sigma,
 				+9*cost*s2*mu*c2*c2)/(lambda-3*mu);
     }
   } else GMM_ASSERT1(false, "Unvalid mode");
-  if (isnan(U[0]))
+  if (!finite(U[0]))
     cerr << "raaah not a number ... nu=" << nu << ", E=" << E << ", sig="
 	 << sigma << ", a=" << a << ", xx=" << xx << ", y=" << y << ", r="
 	 << r << ", sqrtr=" << sqrtr << ", cost=" << cost << ", U=" << U[0]
 	 << "," << U[1] << endl;
-  assert(!isnan(U[0]));
-  assert(!isnan(U[1]));
+  assert(finite(U[0]));
+  assert(finite(U[1]));
 }
 
 struct exact_solution {
diff --git a/tests/crack.pl b/tests/crack.pl
index d106d57..9f8882c 100644
--- a/tests/crack.pl
+++ b/tests/crack.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -22,7 +23,7 @@ $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
 
-print TMPF <<
+print TMPF <<""
 MU = 1.0;
 LAMBDA = 1.0;
 MESH_NOISED = 0;
diff --git a/tests/cyl_slicer.cc b/tests/cyl_slicer.cc
index 567a1b8..36cb643 100644
--- a/tests/cyl_slicer.cc
+++ b/tests/cyl_slicer.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2010 Roman Putanowicz.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2010-2012 Roman Putanowicz.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 /**@file cyl_slicer.cc
@@ -39,6 +39,10 @@
 #include <getfem/getfem_regular_meshes.h>
 #include <getfem/bgeot_config.h>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 bgeot::scalar_type func(const bgeot::base_node& x) {
   return x[0];
 }
diff --git a/tests/cyl_slicer.pl b/tests/cyl_slicer.pl
index 3f54dfe..7a6244e 100644
--- a/tests/cyl_slicer.pl
+++ b/tests/cyl_slicer.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/dynamic_array.cc b/tests/dynamic_array.cc
old mode 100755
new mode 100644
index 9d9c94e..bcc935e
--- a/tests/dynamic_array.cc
+++ b/tests/dynamic_array.cc
@@ -1,27 +1,31 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/dal_basic.h"
 #include <deque>
 #include <complex>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 typedef std::deque<int>::size_type size_type;
 template<typename T> struct dyndeque : public std::deque<T> {
   T &operator[](unsigned i) { 
diff --git a/tests/dynamic_array.pl b/tests/dynamic_array.pl
old mode 100755
new mode 100644
index 68fede3..4fb2e0f
--- a/tests/dynamic_array.pl
+++ b/tests/dynamic_array.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/dynamic_friction.cc b/tests/dynamic_friction.cc
index 8e5a024..8597d70 100644
--- a/tests/dynamic_friction.cc
+++ b/tests/dynamic_friction.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2010 Yves Renard, Julien Pommier, Houari Khenous.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier, Houari Khenous.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
  * Dynamic friction in linear elasticity.
@@ -37,6 +37,9 @@
 #include "gmm/gmm.h"
 #include <fstream>
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
@@ -636,8 +639,8 @@ void friction_problem::solve(void) {
       	  if (UN[i] < -1E-13) FRICTION.get_gap()[i] = 1.E13;
       }
   
-      gmm::default_newton_line_search ls;
-      // gmm::simplest_newton_line_search ls(100000, 1.4, 0.001, 0.8);
+      getfem::default_newton_line_search ls;
+      // getfem::simplest_newton_line_search ls(100000, 1.4, 0.001, 0.8);
       getfem::standard_solve(MS, PERIODIC, iter,
 			     getfem::default_linear_solver(PERIODIC), ls);
     
diff --git a/tests/dynamic_friction.pl b/tests/dynamic_friction.pl
index 878d3b5..68f0a1e 100644
--- a/tests/dynamic_friction.pl
+++ b/tests/dynamic_friction.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 MU = 30;
 LAMBDA = 55;
 FRICTION_COEF = 0.0;    % Friction coefficient.
diff --git a/tests/dynamic_tas.cc b/tests/dynamic_tas.cc
old mode 100755
new mode 100644
index f473ce3..e422303
--- a/tests/dynamic_tas.cc
+++ b/tests/dynamic_tas.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/dal_tas.h"
 
 using namespace std;
diff --git a/tests/dynamic_tas.pl b/tests/dynamic_tas.pl
old mode 100755
new mode 100644
index 2e41ea2..b8c17db
--- a/tests/dynamic_tas.pl
+++ b/tests/dynamic_tas.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/elastostatic.cc b/tests/elastostatic.cc
index 30cfd3c..f4cfb74 100644
--- a/tests/elastostatic.cc
+++ b/tests/elastostatic.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file elastostatic.cc
@@ -42,6 +42,10 @@
 #include "getfem/getfem_error_estimate.h"
 #include "getfem/getfem_import.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests/elastostatic.pl b/tests/elastostatic.pl
old mode 100755
new mode 100644
index 0149ec3..a8643a5
--- a/tests/elastostatic.pl
+++ b/tests/elastostatic.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -22,7 +23,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 MU = 1.0;
 LAMBDA = 1.0;
 FT = 0.1;
diff --git a/tests/geo_trans_inv.cc b/tests/geo_trans_inv.cc
index d484767..8746ead 100644
--- a/tests/geo_trans_inv.cc
+++ b/tests/geo_trans_inv.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /*
   various checks for the geometric transformations inversion
@@ -27,6 +27,9 @@
 #include "getfem/bgeot_geotrans_inv.h"
 #include "getfem/getfem_regular_meshes.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 using bgeot::size_type;
 using bgeot::short_type;
 using bgeot::dim_type;
diff --git a/tests/geo_trans_inv.pl b/tests/geo_trans_inv.pl
old mode 100755
new mode 100644
index 424554d..064173d
--- a/tests/geo_trans_inv.pl
+++ b/tests/geo_trans_inv.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/gmm_torture01_lusolve.cc b/tests/gmm_torture01_lusolve.cc
old mode 100755
new mode 100644
index 5d5fad4..858a61b
--- a/tests/gmm_torture01_lusolve.cc
+++ b/tests/gmm_torture01_lusolve.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 // SQUARED_MATRIX_PARAM;
 // DENSE_VECTOR_PARAM;
 // VECTOR_PARAM;
@@ -27,6 +27,8 @@
 #include "gmm/gmm_dense_lu.h"
 #include "gmm/gmm_condition_number.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using gmm::size_type;
 bool print_debug = false;
 
diff --git a/tests/gmm_torture05_mult.cc b/tests/gmm_torture05_mult.cc
index 0b35a9a..5df2582 100644
--- a/tests/gmm_torture05_mult.cc
+++ b/tests/gmm_torture05_mult.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 // SQUARED_MATRIX_PARAM
 // VECTOR_PARAM;
 // VECTOR_PARAM;
@@ -31,6 +31,8 @@
 #include "gmm/gmm_dense_qr.h"
 #include "gmm/gmm_condition_number.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using gmm::size_type;
 
 template <typename MAT1 , typename MAT2, typename VECT1, typename VECT2,
diff --git a/tests/gmm_torture06_mat_mult.cc b/tests/gmm_torture06_mat_mult.cc
old mode 100755
new mode 100644
index ec0404e..d1d7a0a
--- a/tests/gmm_torture06_mat_mult.cc
+++ b/tests/gmm_torture06_mat_mult.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 // RECTANGULAR_MATRIX_PARAM
 // RECTANGULAR_MATRIX_PARAM;
 // RECTANGULAR_MATRIX_PARAM;
@@ -25,6 +25,8 @@
 
 #include "gmm/gmm_kernel.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using gmm::size_type;
 
 template <typename MAT1, typename MAT2, typename MAT3>
diff --git a/tests/gmm_torture10_qr.cc b/tests/gmm_torture10_qr.cc
old mode 100755
new mode 100644
index 6040fea..4928241
--- a/tests/gmm_torture10_qr.cc
+++ b/tests/gmm_torture10_qr.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 // RECTANGULAR_MATRIX_PARAM
 // SQUARED_MATRIX_PARAM
 // ENDPARAM;
@@ -27,7 +27,8 @@
 #include "gmm/gmm_dense_qr.h"
 #include "gmm/gmm_condition_number.h"
 
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using gmm::size_type;
 bool print_debug = false;
 
diff --git a/tests/gmm_torture15_sub.cc b/tests/gmm_torture15_sub.cc
old mode 100755
new mode 100644
index 715e605..3b83b94
--- a/tests/gmm_torture15_sub.cc
+++ b/tests/gmm_torture15_sub.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 // SQUARED_MATRIX_PARAM
 // VECTOR_PARAM;
 // VECTOR_PARAM;
@@ -27,6 +27,8 @@
 #include "gmm/gmm_dense_lu.h"
 #include "gmm/gmm_condition_number.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using gmm::size_type;
 
 bool print_debug = false;
diff --git a/tests/gmm_torture20_iterative_solvers.cc b/tests/gmm_torture20_iterative_solvers.cc
old mode 100755
new mode 100644
index b9e1b75..3fd66da
--- a/tests/gmm_torture20_iterative_solvers.cc
+++ b/tests/gmm_torture20_iterative_solvers.cc
@@ -1,30 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 // SQUARED_MATRIX_PARAM;
 // DENSE_VECTOR_PARAM;
 // VECTOR_PARAM;
 // ENDPARAM;
 
-using namespace std; // in order to test a using namespace std;
 #include "gmm/gmm.h"
+using namespace std; // in order to test a using namespace std;
 
 using gmm::size_type;
 
diff --git a/tests/heat_equation.cc b/tests/heat_equation.cc
index a2bfd35..b4e0323 100644
--- a/tests/heat_equation.cc
+++ b/tests/heat_equation.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2009 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**@file heat_equation.cc
    @brief Transient heat equation.
@@ -36,6 +36,9 @@
 #include "getfem/getfem_regular_meshes.h"
 #include "gmm/gmm.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node; /* geometrical nodes (derived from base_small_vector)*/
diff --git a/tests/heat_equation.pl b/tests/heat_equation.pl
index 02d000a..4988d06 100644
--- a/tests/heat_equation.pl
+++ b/tests/heat_equation.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file $tmp impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 LX = 1.0;		          % size in X.
 LY = 1.0;	                  % size in Y.
 LZ = 1.0;	                  % size in Z.
diff --git a/tests/helmholtz.cc b/tests/helmholtz.cc
index 09f9e38..5c826d1 100644
--- a/tests/helmholtz.cc
+++ b/tests/helmholtz.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file helmholtz.cc
@@ -34,6 +34,8 @@
 #include "getfem/getfem_regular_meshes.h"
 #include "getfem/getfem_model_solvers.h"
 #include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/tests/helmholtz.pl b/tests/helmholtz.pl
index 4ab67af..02623e4 100755
--- a/tests/helmholtz.pl
+++ b/tests/helmholtz.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 WAVENUM_R = 3;
 WAVENUM_I = 0;
 R0 = 2.;
diff --git a/tests/integration.cc b/tests/integration.cc
index e58f115..9097499 100644
--- a/tests/integration.cc
+++ b/tests/integration.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include <numeric>
 #include "getfem/getfem_integration.h"
 #include "getfem/bgeot_comma_init.h"
@@ -25,6 +25,9 @@
 #include "getfem/getfem_mat_elem.h"
 #include <iomanip>
 #include <map>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 
 using getfem::size_type;
 using getfem::short_type;
diff --git a/tests/integration.pl b/tests/integration.pl
old mode 100755
new mode 100644
index 53eb07d..7d913e0
--- a/tests/integration.pl
+++ b/tests/integration.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/laplacian.cc b/tests/laplacian.cc
index af74f56..669516a 100644
--- a/tests/laplacian.cc
+++ b/tests/laplacian.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**@file laplacian.cc
    @brief Laplacian (Poisson) problem.
@@ -37,6 +37,8 @@
 #include "getfem/getfem_derivatives.h"
 #include "getfem/getfem_superlu.h"
 #include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/tests/laplacian.pl b/tests/laplacian.pl
old mode 100755
new mode 100644
index 7e54f60..d25371d
--- a/tests/laplacian.pl
+++ b/tests/laplacian.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file $tmp impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 LX = 1.0;		          % size in X.
 LY = 1.0;	                  % size in Y.
 LZ = 1.0;	                  % size in Z.
diff --git a/tests/laplacian_with_bricks.cc b/tests/laplacian_with_bricks.cc
index 5e2b875..3d086b2 100644
--- a/tests/laplacian_with_bricks.cc
+++ b/tests/laplacian_with_bricks.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**@file laplacian.cc
    @brief Laplacian (Poisson) problem.
@@ -35,6 +35,8 @@
 #include "getfem/getfem_export.h"
 #include "getfem/getfem_regular_meshes.h"
 #include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/tests/laplacian_with_bricks.pl b/tests/laplacian_with_bricks.pl
index 25c1b1b..2d5f304 100644
--- a/tests/laplacian_with_bricks.pl
+++ b/tests/laplacian_with_bricks.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file $tmp impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 LX = 1.0;		          % size in X.
 LY = 1.0;	                  % size in Y.
 LZ = 1.0;	                  % size in Z.
diff --git a/tests/make_gmm_test.pl b/tests/make_gmm_test.pl
index d176dfc..d4a1416 100755
--- a/tests/make_gmm_test.pl
+++ b/tests/make_gmm_test.pl
@@ -1,16 +1,16 @@
-# -*- perl -*-
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -146,6 +146,7 @@ for ($iter = 1; $iter <= $nb_iter; ++$iter) {
 
     while (($li = <DATAF> )&& ($reading_param)) {
       chomp($li);
+      if ($li=~/^\/\//) {
       if ($li=~/ENDPARAM/) { $reading_param = 0; }
       elsif ($li=~/DENSE_VECTOR_PARAM/) { $param[$nb_param++] = 1; }
       elsif ($li=~/VECTOR_PARAM/) { $param[$nb_param++] = 2; }
@@ -154,6 +155,7 @@ for ($iter = 1; $iter <= $nb_iter; ++$iter) {
       elsif ($li=~/\/\//) { }
       else { die "Error in parameter list"; }
     }
+    }
 
     $TYPES[0] = "float";
     $TYPES[1] = "std::complex<float> ";
diff --git a/tests/meshes/disc_P2_h0.5.mesh b/tests/meshes/disc_P2_h0.5.mesh
deleted file mode 100755
index 90ef1cb..0000000
--- a/tests/meshes/disc_P2_h0.5.mesh
+++ /dev/null
@@ -1,8429 +0,0 @@
-% GETFEM MESH FILE 
-% GETFEM VERSION 1.7-20040316
-
-
-
-BEGIN POINTS LIST
-
-  POINT  0  0  0
-  POINT  1  0  20
-  POINT  2  -20  20
-  POINT  3  20  20
-  POINT  4  0  40
-  POINT  5  -5.494590158705203  0.769568933904214
-  POINT  6  -4.555054354703293  0.5256199116454576
-  POINT  7  -3.62510614201392  0.3312784996295808
-  POINT  8  -2.686413338358856  0.1812416288131739
-  POINT  9  -1.753728402849995  0.077037451999329
-  POINT  10  -0.851420720971519  0.01813114404021269
-  POINT  11  0.8514160122311216  0.01813095400480157
-  POINT  12  1.753719324465416  0.07703666291032139
-  POINT  13  2.686401050802698  0.181239963250821
-  POINT  14  3.625091324513498  0.3312757686489166
-  POINT  15  4.555037637659274  0.5256160015391538
-  POINT  16  5.494572548479121  0.7695639022537971
-  POINT  17  -8.14748720023632  1.73477478041978
-  POINT  18  -7.204326158760607  1.342623855477397
-  POINT  19  -6.323306730319925  1.025917887963812
-  POINT  20  -5.012043637681486  1.487026562234344
-  POINT  21  -4.001504680231534  1.348769869720156
-  POINT  22  -3.020446348008669  1.193123454693629
-  POINT  23  -2.033096162687354  1.074468404199018
-  POINT  24  -1.029250259109854  0.9952937048620419
-  POINT  25  -4.743693576426955e-06  0.9550846747893821
-  POINT  26  1.029241591782402  0.9952938914888843
-  POINT  27  2.033087778001799  1.074468514560464
-  POINT  28  3.020437785114206  1.193122951441658
-  POINT  29  4.001495610537607  1.348768371554737
-  POINT  30  5.012033480242295  1.487023534523747
-  POINT  31  6.323291483458299  1.025912806798219
-  POINT  32  7.20431240676467  1.342618545311957
-  POINT  33  8.147472348609107  1.734768155628285
-  POINT  34  -9.874839229995656  2.607830779866931
-  POINT  35  -8.967401898964656  2.123039878590955
-  POINT  36  -7.43893966884391  2.316523461127632
-  POINT  37  -6.505937339794322  2.123067897852342
-  POINT  38  -5.617471023440036  2.128732087831175
-  POINT  39  -4.504938941140685  2.292372023343256
-  POINT  40  -3.474895393652287  2.188889537474249
-  POINT  41  -2.477789827740728  2.069417744488129
-  POINT  42  -1.486533939627704  1.978390111577929
-  POINT  43  -0.4945351927920381  1.920788208193323
-  POINT  44  0.494530028654747  1.920788180673721
-  POINT  45  1.48652903784696  1.978390363793194
-  POINT  46  2.477785286357576  2.069417875067633
-  POINT  47  3.474891314117997  2.188889007881329
-  POINT  48  4.504935616060729  2.292369967247126
-  POINT  49  5.617468616717059  2.128722558769742
-  POINT  50  6.505934206344425  2.123064219351945
-  POINT  51  7.438934955645484  2.316522386860346
-  POINT  52  8.967386714216421  2.123032261658711
-  POINT  53  9.874824441340188  2.607822383246229
-  POINT  54  -11.51772618471706  3.649404184131703
-  POINT  55  -10.65697220336667  3.075788247109521
-  POINT  56  -9.073837487095867  3.098945367911463
-  POINT  57  -8.146481814508759  2.93463496665957
-  POINT  58  -7.049600453276345  3.146247627644996
-  POINT  59  -6.068284496299216  3.100104651100007
-  POINT  60  -5.072988891537222  3.091827459666651
-  POINT  61  -3.993877927928949  3.131132225510109
-  POINT  62  -2.967955349130637  3.051608081751008
-  POINT  63  -1.969358890547338  2.964205195218535
-  POINT  64  -0.9811566490131486  2.90071553814206
-  POINT  65  -1.32163243384692e-06  2.877135624667564
-  POINT  66  0.9811540073798326  2.900715668778548
-  POINT  67  1.969356448130425  2.964205359405151
-  POINT  68  2.967953292680015  3.051607771536507
-  POINT  69  3.993876536191101  3.131130560601491
-  POINT  70  5.07298836313739  3.09182201424316
-  POINT  71  6.06828189330052  3.10009883043144
-  POINT  72  7.049596028910742  3.146246238867447
-  POINT  73  8.146475803362755  2.934633378296194
-  POINT  74  9.073829870567886  3.098941319319342
-  POINT  75  10.65695825761416  3.075779465645408
-  POINT  76  11.51771371828971  3.649395402508161
-  POINT  77  -12.25874124373426  4.197365310835768
-  POINT  78  -10.64940593588828  4.039054822049597
-  POINT  79  -9.738991551137142  3.788828249782045
-  POINT  80  -8.645496432574655  3.944646023442154
-  POINT  81  -7.660083249538626  3.927642758322452
-  POINT  82  -6.59386271210862  4.037468940686985
-  POINT  83  -5.568600019856155  4.018665115993096
-  POINT  84  -4.542276038525629  3.999836078704063
-  POINT  85  -3.491369657240189  3.994992924822852
-  POINT  86  -2.474009349355216  3.935011777572696
-  POINT  87  -1.477288819485819  3.874958764735967
-  POINT  88  -0.4912058119350093  3.84024391890156
-  POINT  89  0.4912045861343114  3.840244004832297
-  POINT  90  1.477287661196852  3.874958892229309
-  POINT  91  2.474008420090503  3.935011605232642
-  POINT  92  3.491369140152303  3.994991746916046
-  POINT  93  4.542275958327673  3.999832734657181
-  POINT  94  5.568598961382722  4.018661009084565
-  POINT  95  6.593859756639968  4.037466906689763
-  POINT  96  7.660079741658018  3.927642484330992
-  POINT  97  8.64549214777098  3.944645135772696
-  POINT  98  9.738984400934594  3.788824210856252
-  POINT  99  10.64939834126311  4.039049114973768
-  POINT  100  12.25873013918693  4.197356696596919
-  POINT  101  -13.06808399305144  4.859815696281542
-  POINT  102  -12.14172415206427  5.120456490850303
-  POINT  103  -11.26850058845588  4.78253504757261
-  POINT  104  -10.17404214944296  4.845047406793981
-  POINT  105  -9.208059651222554  4.766866668801151
-  POINT  106  -8.164339019401956  4.857476344060355
-  POINT  107  -7.149967162775942  4.875867152053067
-  POINT  108  -6.093958019589567  4.926093683238227
-  POINT  109  -5.058077545048842  4.913790131101954
-  POINT  110  -4.028039828119854  4.894648028971938
-  POINT  111  -2.995365612046738  4.876648223313875
-  POINT  112  -1.984673486096534  4.833837916766388
-  POINT  113  -0.9889438049108867  4.797769562520688
-  POINT  114  -2.362747113168751e-07  4.784386125986646
-  POINT  115  0.9889433725237518  4.797769655939185
-  POINT  116  1.984673180431574  4.833837841092998
-  POINT  117  2.995365534870316  4.876647488912344
-  POINT  118  4.028039920473764  4.894645987409467
-  POINT  119  5.05807704187145  4.913787423329794
-  POINT  120  6.09395626231969  4.926092028666856
-  POINT  121  7.149964792987238  4.875866809291987
-  POINT  122  8.164336682555421  4.857476643496101
-  POINT  123  9.208056699547432  4.766865857979807
-  POINT  124  10.17403815454237  4.845044126893953
-  POINT  125  11.26849448251217  4.782529900161253
-  POINT  126  12.14171794981946  5.120450644819872
-  POINT  127  13.06807455950774  4.859807553827244
-  POINT  128  -13.79621135610305  5.520201927590952
-  POINT  129  -12.80117439670994  5.856589459482491
-  POINT  130  -11.67938537881067  5.871675730352508
-  POINT  131  -10.7214199084595  5.705740655756915
-  POINT  132  -9.682832193302595  5.735754340027762
-  POINT  133  -8.688206795148123  5.723107658281122
-  POINT  134  -7.655630079002389  5.775975918064022
-  POINT  135  -6.627659763072258  5.792669306732381
-  POINT  136  -5.582314228446745  5.814411012773447
-  POINT  137  -4.548885425945512  5.805126115268295
-  POINT  138  -3.522722077771634  5.788884500830754
-  POINT  139  -2.501187311366817  5.770380462326169
-  POINT  140  -1.494394371192296  5.742942846788264
-  POINT  141  -0.4971264884626344  5.724801584483487
-  POINT  142  0.4971264114179549  5.724801616093884
-  POINT  143  1.494394375253193  5.742942820679326
-  POINT  144  2.501187449167741  5.770380046330405
-  POINT  145  3.522722282985142  5.788883304381674
-  POINT  146  4.548885254065114  5.80512440450948
-  POINT  147  5.582313237121974  5.814409778421799
-  POINT  148  6.627658274246912  5.792668907910858
-  POINT  149  7.655628672903336  5.775976131426517
-  POINT  150  8.688205683983837  5.723107897941759
-  POINT  151  9.682831053695072  5.735753339275631
-  POINT  152  10.72141774219851  5.705737949417665
-  POINT  153  11.67938249802985  5.871671763668828
-  POINT  154  12.80116985277255  5.856584114327579
-  POINT  155  13.79620361018442  5.52019455095268
-  POINT  156  -15.07551414433484  6.857364294633759
-  POINT  157  -14.47383155813855  6.197529205731446
-  POINT  158  -13.45485475009742  6.553837837714978
-  POINT  159  -12.31042185688016  6.683440243020864
-  POINT  160  -11.21350161895065  6.69819718995942
-  POINT  161  -10.20833342071787  6.628047644175917
-  POINT  162  -9.180105769142591  6.64834742192738
-  POINT  163  -8.167115514052471  6.65576641169878
-  POINT  164  -7.135706515094646  6.685162961807312
-  POINT  165  -6.105345078296335  6.696209760357505
-  POINT  166  -5.069576645378604  6.705314119570696
-  POINT  167  -4.041800732917723  6.698207423904568
-  POINT  168  -3.020761532842517  6.685782557740071
-  POINT  169  -2.005808074374162  6.671737301319939
-  POINT  170  -1.000288933333046  6.656398725132026
-  POINT  171  4.397573777348285e-08  6.650034053590167
-  POINT  172  1.000289057350326  6.656398701633271
-  POINT  173  2.005808282761941  6.671737074424545
-  POINT  174  3.020761779503171  6.685781881995771
-  POINT  175  4.041800760087482  6.698206389869481
-  POINT  176  5.069576162857779  6.705313264812579
-  POINT  177  6.10534421344702  6.69620937563182
-  POINT  178  7.135705654446768  6.685162970448084
-  POINT  179  8.167114943754402  6.655766632853415
-  POINT  180  9.180105544149159  6.648347310133159
-  POINT  181  10.20833306114628  6.628046599517105
-  POINT  182  11.21350079915651  6.698194920239427
-  POINT  183  12.31041989729133  6.683437342390677
-  POINT  184  13.45485102688512  6.553833543240082
-  POINT  185  14.47382501191121  6.197522339217816
-  POINT  186  15.07550853647004  6.85735785101832
-  POINT  187  -15.74070185460795  7.661835423193954
-  POINT  188  -14.74687538651157  7.702960989661571
-  POINT  189  -13.93188920478376  7.345232089754496
-  POINT  190  -12.86506131544698  7.471088086950771
-  POINT  191  -11.77211701495691  7.547677194388092
-  POINT  192  -10.70587046671523  7.565284924165475
-  POINT  193  -9.687660424643854  7.54461386330666
-  POINT  194  -8.662563218479574  7.560951116274378
-  POINT  195  -7.642034647994548  7.571360794157137
-  POINT  196  -6.613518858753616  7.588082984279957
-  POINT  197  -5.586073186048593  7.595112879441636
-  POINT  198  -4.558140690092682  7.598809924577656
-  POINT  199  -3.535939593111036  7.59366155618144
-  POINT  200  -2.519295513626756  7.585207729094968
-  POINT  201  -1.507828110570193  7.576464832977407
-  POINT  202  -0.5019148548267611  7.569504441473947
-  POINT  203  0.5019150140751154  7.569504419051911
-  POINT  204  1.507828313373964  7.576464701318211
-  POINT  205  2.51929574421762  7.58520735259712
-  POINT  206  3.535939709005314  7.593660949468794
-  POINT  207  4.558140510818687  7.598809363042038
-  POINT  208  5.58607274341326  7.595112562629756
-  POINT  209  6.613518369190103  7.588082887213245
-  POINT  210  7.642034309561478  7.571360854887308
-  POINT  211  8.662563167404116  7.560951138691602
-  POINT  212  9.687660573872202  7.54461354186692
-  POINT  213  10.70587058429081  7.565283863779716
-  POINT  214  11.77211666522259  7.547675581264719
-  POINT  215  12.8650605916635  7.471085619230291
-  POINT  216  13.93188849368163  7.345227696048455
-  POINT  217  14.74687398655421  7.702958601368711
-  POINT  218  15.74069772046266  7.661830148963676
-  POINT  219  -16.34008243157374  8.467363435476578
-  POINT  220  -15.28567534644808  8.552905620836993
-  POINT  221  -14.22089501094071  8.468579625245626
-  POINT  222  -13.29774920244363  8.333212052076258
-  POINT  223  -12.27300453476784  8.396001904827241
-  POINT  224  -11.224449672806  8.44025834990769
-  POINT  225  -10.1842020715159  8.457472361197105
-  POINT  226  -9.163914101356678  8.456332255719779
-  POINT  227  -8.14059852678059  8.468750713098206
-  POINT  228  -7.118690004259524  8.477698841262107
-  POINT  229  -6.093911741800466  8.487745637900247
-  POINT  230  -5.070537359203934  8.492297494254309
-  POINT  231  -4.048497389531928  8.493845716618845
-  POINT  232  -3.030710235690668  8.490541970764172
-  POINT  233  -2.017113078017005  8.485534154569866
-  POINT  234  -1.007152862458606  8.481122761690685
-  POINT  235  8.070285670638833e-08  8.479054147646179
-  POINT  236  1.007153037203349  8.481122683637645
-  POINT  237  2.017113267583667  8.485533940823723
-  POINT  238  3.030710370157321  8.490541618084078
-  POINT  239  4.048497363984429  8.493845358028667
-  POINT  240  5.070537168629906  8.49229725406053
-  POINT  241  6.093911495339211  8.487745514844656
-  POINT  242  7.11868981343622  8.477698810261961
-  POINT  243  8.140598491031323  8.468750699179775
-  POINT  244  9.163914246108916  8.456332131143173
-  POINT  245  10.18420232498191  8.457471896486332
-  POINT  246  11.22444978036375  8.440257512134613
-  POINT  247  12.27300442131762  8.396000443618357
-  POINT  248  13.29774885774807  8.333209357606099
-  POINT  249  14.22089386884885  8.468576880391957
-  POINT  250  15.28567398016187  8.552903295969026
-  POINT  251  16.34007933974851  8.46735905480778
-  POINT  252  -16.89879506132182  9.30277019619324
-  POINT  253  -15.84083890009481  9.368103783320413
-  POINT  254  -14.75936630448394  9.376434710940254
-  POINT  255  -13.72667446491556  9.338668036765469
-  POINT  256  -12.7458829592818  9.286293637722791
-  POINT  257  -11.72514144039831  9.317880286978371
-  POINT  258  -10.69307226518711  9.344364735918155
-  POINT  259  -9.663652464211705  9.358107425253532
-  POINT  260  -8.642457994516798  9.362656816289235
-  POINT  261  -7.620361904257799  9.371754129812164
-  POINT  262  -6.599324604837983  9.378698501517102
-  POINT  263  -5.577936443480438  9.385133261260403
-  POINT  264  -4.558210845970175  9.388247898190615
-  POINT  265  -3.540361900824579  9.389121481751587
-  POINT  266  -2.52566238019628  9.387374370414491
-  POINT  267  -1.513887157671833  9.384925984750414
-  POINT  268  -0.504297186178584  9.383298051709803
-  POINT  269  0.5042973320602566  9.383298015668299
-  POINT  270  1.51388730668141  9.384925862954564
-  POINT  271  2.525662501619651  9.387374163645836
-  POINT  272  3.540361939509808  9.389121254735599
-  POINT  273  4.558210789027288  9.388247723190803
-  POINT  274  5.577936342341931  9.385133146588913
-  POINT  275  6.599324518449944  9.378698438465905
-  POINT  276  7.62036189183867  9.371754085979447
-  POINT  277  8.642458092973191  9.362656736309578
-  POINT  278  9.663652671231812  9.358107201585797
-  POINT  279  10.6930724783395  9.344364317591429
-  POINT  280  11.72514158518201  9.31787949717938
-  POINT  281  12.74588295478644  9.286292109076781
-  POINT  282  13.72667400654556  9.338666111495892
-  POINT  283  14.75936532452434  9.376432764986804
-  POINT  284  15.84083766707554  9.368101537096484
-  POINT  285  16.8987927411374  9.302766530916411
-  POINT  286  -17.41541814741128  10.16622093237684
-  POINT  287  -16.36597467943507  10.20674001010058
-  POINT  288  -15.30570510771474  10.23673169382489
-  POINT  289  -14.25334124093768  10.24705991000825
-  POINT  290  -13.22518371810642  10.23169262743967
-  POINT  291  -12.21928286812764  10.21375315134102
-  POINT  292  -11.19741423399891  10.23174369517853
-  POINT  293  -10.17050417537597  10.2482576748095
-  POINT  294  -9.145044199699443  10.25842856407609
-  POINT  295  -8.123750354518931  10.26388718261748
-  POINT  296  -7.10298550942124  10.2706284602633
-  POINT  297  -6.083575083515306  10.2759394046698
-  POINT  298  -5.065015567249327  10.28034882788564
-  POINT  299  -4.048200146803218  10.28265723277545
-  POINT  300  -3.033238075903394  10.28342728339184
-  POINT  301  -2.02054894726801  10.28280355683485
-  POINT  302  -1.009738819288446  10.28194446006377
-  POINT  303  5.919699467074602e-08  10.28162989140187
-  POINT  304  1.009738935910972  10.2819443965436
-  POINT  305  2.020549047902884  10.28280343604998
-  POINT  306  3.033238133655776  10.28342713958931
-  POINT  307  4.048200151873941  10.2826571076832
-  POINT  308  5.065015543299326  10.28034873191634
-  POINT  309  6.083575061485952  10.27593933706552
-  POINT  310  7.102985523625926  10.27062840654225
-  POINT  311  8.123750433256964  10.26388711645833
-  POINT  312  9.14504435731642  10.25842843597803
-  POINT  313  10.17050438210141  10.24825745265531
-  POINT  314  11.19741445812459  10.23174327923734
-  POINT  315  12.21928304966143  10.21375232985006
-  POINT  316  13.22518366386299  10.23169143671009
-  POINT  317  14.25334082737309  10.24705856617686
-  POINT  318  15.30570438725816  10.2367300912412
-  POINT  319  16.36597364727631  10.20673788845324
-  POINT  320  17.41541641117195  10.16621785753401
-  POINT  321  -17.88625803484845  11.05115797933476
-  POINT  322  -16.85120422054986  11.06936232054822
-  POINT  323  -15.81832377296524  11.10623835603135
-  POINT  324  -14.77936586062894  11.12671433185663
-  POINT  325  -13.74209116444094  11.13500853711859
-  POINT  326  -12.71605470869173  11.13080637203836
-  POINT  327  -11.69940028612606  11.12659743667363
-  POINT  328  -10.67625961071982  11.13773567839252
-  POINT  329  -9.651329983156939  11.14840741093704
-  POINT  330  -8.627923790323184  11.15586543586765
-  POINT  331  -7.607383209356573  11.16085887302131
-  POINT  332  -6.588183874293925  11.16597912139563
-  POINT  333  -5.570592864708988  11.17006260278196
-  POINT  334  -4.55434815440509  11.17325037576849
-  POINT  335  -3.539757168979546  11.17505634294026
-  POINT  336  -2.526758778403693  11.17584237662288
-  POINT  337  -1.515331628371982  11.17586700307951
-  POINT  338  -0.5049906539082446  11.17574820189833
-  POINT  339  0.5049907444555864  11.17574817768458
-  POINT  340  1.5153317094028  11.17586693621212
-  POINT  341  2.526758836407911  11.17584228689916
-  POINT  342  3.539757198178682  11.17505625511356
-  POINT  343  4.554348166128215  11.17325029975345
-  POINT  344  5.570592875755479  11.17006254133163
-  POINT  345  6.588183905050538  11.16597906858908
-  POINT  346  7.6073832793965  11.16085881572795
-  POINT  347  8.62792391457109  11.15586535027681
-  POINT  348  9.651330158548348  11.14840727911036
-  POINT  349  10.67625983071012  11.13773544977034
-  POINT  350  11.69940052274761  11.12659700092283
-  POINT  351  12.71605485286965  11.13080569362486
-  POINT  352  13.74209110304109  11.13500768317192
-  POINT  353  14.7793655795263  11.12671327386668
-  POINT  354  15.81832324916032  11.10623695423282
-  POINT  355  16.85120337097398  11.06936033777372
-  POINT  356  17.88625674904034  11.05115540936097
-  POINT  357  -18.30877322305379  11.9508495437846
-  POINT  358  -17.29354589755249  11.94920666314173
-  POINT  359  -16.29455300391288  11.99583596159888
-  POINT  360  -15.27946629704285  12.01498717612042
-  POINT  361  -14.25474205301729  12.02594878618006
-  POINT  362  -13.22681809875847  12.03063506970706
-  POINT  363  -12.20220308495755  12.03009391767082
-  POINT  364  -11.18106431040382  12.03032682581759
-  POINT  365  -10.15753313450907  12.03745704775757
-  POINT  366  -9.134027318052762  12.04457505277963
-  POINT  367  -8.11232875700758  12.05009863957686
-  POINT  368  -7.093073740706956  12.05428798841279
-  POINT  369  -6.075537130934441  12.0582085939917
-  POINT  370  -5.05970021646697  12.06132294542906
-  POINT  371  -4.045326070247903  12.06366127251691
-  POINT  372  -3.032406410591747  12.06506238376489
-  POINT  373  -2.020741740391878  12.06579002116175
-  POINT  374  -1.010099115438543  12.06604601638048
-  POINT  375  3.404314703400746e-08  12.06609631184198
-  POINT  376  1.010099179329847  12.06604598427999
-  POINT  377  2.02074179197248  12.06578996792154
-  POINT  378  3.032406446294575  12.06506232425981
-  POINT  379  4.045326095644757  12.06366121500955
-  POINT  380  5.059700241198946  12.06132289396818
-  POINT  381  6.075537167668678  12.05820854699794
-  POINT  382  7.093073802862654  12.05428793944949
-  POINT  383  8.112328856771683  12.05009857666489
-  POINT  384  9.134027460561303  12.04457496575233
-  POINT  385  10.15753332314846  12.03745691162176
-  POINT  386  11.18106453668301  12.03032658694119
-  POINT  387  12.20220329614919  12.03009354250335
-  POINT  388  13.22681822001311  12.03063456472911
-  POINT  389  14.25474204169832  12.02594812574046
-  POINT  390  15.27946612080948  12.01498628420012
-  POINT  391  16.29455261172639  11.99583469575495
-  POINT  392  17.29354519100736  11.94920477604054
-  POINT  393  18.30877230037898  11.95084744504889
-  POINT  394  -18.68349051939805  12.86367167154098
-  POINT  395  -17.69955044194535  12.83783554399056
-  POINT  396  -16.74680072099509  12.90757935532751
-  POINT  397  -15.76140667037218  12.9221400730053
-  POINT  398  -14.75567094155959  12.92630257350449
-  POINT  399  -13.73682065989795  12.92743559025777
-  POINT  400  -12.71214391446095  12.92742694362712
-  POINT  401  -11.68737838806575  12.92678450620815
-  POINT  402  -10.66414648577376  12.92775785019992
-  POINT  403  -9.640754341022918  12.93234383939904
-  POINT  404  -8.618552582613498  12.93719911566106
-  POINT  405  -7.598448596921033  12.94129728244754
-  POINT  406  -6.580657830892998  12.94461961735053
-  POINT  407  -5.564721623493883  12.94754856845896
-  POINT  408  -4.550449594156615  12.94982267896038
-  POINT  409  -3.537564068386769  12.95146460765515
-  POINT  410  -2.525883376596742  12.95246017188719
-  POINT  411  -1.515118380882561  12.95300971020892
-  POINT  412  -0.5049676356087293  12.95322346487957
-  POINT  413  0.5049676844956841  12.95322345397402
-  POINT  414  1.515118423968893  12.95300968152577
-  POINT  415  2.525883411194239  12.95246013386642
-  POINT  416  3.537564097060069  12.95146456643065
-  POINT  417  4.550449622545449  12.94982263848316
-  POINT  418  5.56472165978088  12.9475485292704
-  POINT  419  6.580657884493699  12.94461957666239
-  POINT  420  7.598448677339204  12.9412972341219
-  POINT  421  8.618552696870632  12.93719905370227
-  POINT  422  9.640754495709061  12.93234375105686
-  POINT  423  10.66414668192525  12.927757709954
-  POINT  424  11.6873786049825  12.9267842939533
-  POINT  425  12.7121441131643  12.92742665289655
-  POINT  426  13.73682080368874  12.92743519895239
-  POINT  427  14.75567099253752  12.92630202967495
-  POINT  428  15.76140658474425  12.92213928078801
-  POINT  429  16.74680044196923  12.90757816273018
-  POINT  430  17.69954984610879  12.8378336756992
-  POINT  431  18.6834899076131  12.8636700698384
-  POINT  432  -19.02238328735229  13.82351766220752
-  POINT  433  -18.13955550450578  13.72808332961303
-  POINT  434  -17.24747413019177  13.83334150399983
-  POINT  435  -16.27671854460964  13.8444824687452
-  POINT  436  -15.27456079944098  13.83853174040222
-  POINT  437  -14.25616310884793  13.83020331307981
-  POINT  438  -13.22989658164751  13.82408308329856
-  POINT  439  -12.20135161049109  13.82071634572721
-  POINT  440  -11.17413867021331  13.81944883534201
-  POINT  441  -10.14926702413137  13.8202526514499
-  POINT  442  -9.126057836010542  13.82327629540207
-  POINT  443  -8.104996732868651  13.82665424545745
-  POINT  444  -7.086340525468896  13.82965017200467
-  POINT  445  -6.069982091125469  13.83211598100588
-  POINT  446  -5.055493375580907  13.83414727908586
-  POINT  447  -4.042551432867163  13.8356365177082
-  POINT  448  -3.030821469833524  13.83664074843842
-  POINT  449  -2.020032225634883  13.83720573920392
-  POINT  450  -1.009850751894021  13.83750425714042
-  POINT  451  1.810922449496655e-08  13.83759275454394
-  POINT  452  1.009850786298219  13.83750424406298
-  POINT  453  2.020032256013255  13.83720571680718
-  POINT  454  3.030821497136831  13.83664072069242
-  POINT  455  4.042551460337563  13.83563648775698
-  POINT  456  5.055493408535647  13.83414724818297
-  POINT  457  6.069982136283464  13.83211594828056
-  POINT  458  7.086340590263971  13.82965013439014
-  POINT  459  8.10499682427386  13.82665419928439
-  POINT  460  9.126057961450252  13.82327623361172
-  POINT  461  10.14926718918715  13.82025256130822
-  POINT  462  11.17413887129433  13.81944870576308
-  POINT  463  12.20135183449013  13.82071617071633
-  POINT  464  13.2298968126255  13.82408284872117
-  POINT  465  14.25616332583766  13.83020298488662
-  POINT  466  15.27456097333428  13.83853124901386
-  POINT  467  16.27671863417596  13.84448169655714
-  POINT  468  17.24747406497697  13.8333402848443
-  POINT  469  18.13955510497579  13.72808140596411
-  POINT  470  19.02238297028846  13.82351668571184
-  POINT  471  -19.27564676568709  14.66619818849089
-  POINT  472  -18.09766041208614  14.63187219093411
-  POINT  473  -16.95614347083327  14.72460549592841
-  POINT  474  -15.86921119998628  14.73780837074977
-  POINT  475  -14.81075412562909  14.72985007775523
-  POINT  476  -13.76486885106658  14.71947853532306
-  POINT  477  -12.72555276796724  14.71230313005461
-  POINT  478  -11.69126114605113  14.70886227379599
-  POINT  479  -10.66153612521807  14.70791746350395
-  POINT  480  -9.635755859587105  14.70873065251559
-  POINT  481  -8.613020109485847  14.71088365791704
-  POINT  482  -7.593121578733488  14.71326619553437
-  POINT  483  -6.575848554049146  14.71535684285003
-  POINT  484  -5.560852653819958  14.71698338764731
-  POINT  485  -4.547650629124863  14.71814844465915
-  POINT  486  -3.535804015609155  14.71887158153257
-  POINT  487  -2.524929077240439  14.71927025322356
-  POINT  488  -1.51473317861481  14.71940316393901
-  POINT  489  -0.5048698269273962  14.71947361417091
-  POINT  490  0.5048698535429671  14.71947360989954
-  POINT  491  1.514733203827875  14.71940315211682
-  POINT  492  2.524929101236818  14.7192702358374
-  POINT  493  3.535804040216305  14.718871560705
-  POINT  494  4.547650657766261  14.71814842161689
-  POINT  495  5.560852691237506  14.71698336234047
-  POINT  496  6.575848605965658  14.71535681381056
-  POINT  497  7.593121651312162  14.71326616047178
-  POINT  498  8.613020209763325  14.71088361248173
-  POINT  499  9.635755994552092  14.70873058948735
-  POINT  500  10.66153629879202  14.70791737591909
-  POINT  501  11.6912613588511  14.70886215652677
-  POINT  502  12.72555302053373  14.71230297372473
-  POINT  503  13.76486914422805  14.71947831783373
-  POINT  504  14.81075446037261  14.72984974915426
-  POINT  505  15.86921157538354  14.73780783221082
-  POINT  506  16.95614383875429  14.72460459306813
-  POINT  507  18.09766051890814  14.63187085031223
-  POINT  508  19.27564662677329  14.66619768647507
-  POINT  509  -19.50127447943532  15.56149871265921
-  POINT  510  -18.49586950943177  15.47325546362292
-  POINT  511  -17.47213216627488  15.54874531288023
-  POINT  512  -16.40580641559685  15.60593665709938
-  POINT  513  -15.34601737544395  15.61677435076866
-  POINT  514  -14.2947172695349  15.61000643038673
-  POINT  515  -13.24977965914606  15.60136804308813
-  POINT  516  -12.21061092357855  15.59603464741921
-  POINT  517  -11.1766690651603  15.59374881308825
-  POINT  518  -10.14751831522785  15.59340802755161
-  POINT  519  -9.122560414444946  15.59426088206107
-  POINT  520  -8.101062346441838  15.595824538575
-  POINT  521  -7.082603470679119  15.59741857217645
-  POINT  522  -6.066776863361147  15.59867868119486
-  POINT  523  -5.053111971733885  15.59945020989904
-  POINT  524  -4.041063833280758  15.59972861882586
-  POINT  525  -3.030084669706362  15.599680671072
-  POINT  526  -2.019763038193452  15.59951607389083
-  POINT  527  -1.009857003554932  15.59925577449675
-  POINT  528  1.024755921091858e-08  15.599193476494
-  POINT  529  1.009857023845601  15.59925576915614
-  POINT  530  2.019763058357887  15.59951606388146
-  POINT  531  3.030084690801801  15.59968065751039
-  POINT  532  4.041063857507812  15.59972860263055
-  POINT  533  5.053112002382292  15.59945019127528
-  POINT  534  6.066776904670986  15.59867865945828
-  POINT  535  7.082603527619012  15.59741854590029
-  POINT  536  8.101062424891389  15.59582450492322
-  POINT  537  9.122560520746296  15.59426083642217
-  POINT  538  10.14751845483047  15.59340796487829
-  POINT  539  11.17666924233262  15.59374872859052
-  POINT  540  12.21061114276325  15.59603453344294
-  POINT  541  13.24977992549936  15.60136788386504
-  POINT  542  14.29471758842084  15.61000619229367
-  POINT  543  15.34601774658832  15.61677396966515
-  POINT  544  16.40580680537335  15.60593604543914
-  POINT  545  17.47213241791181  15.54874447015032
-  POINT  546  18.4958693388047  15.47325456203676
-  POINT  547  19.50127443887344  15.56149853444409
-  POINT  548  -19.69120777770086  16.49909493767488
-  POINT  549  -18.82453814407551  16.39668162048823
-  POINT  550  -17.91856863118067  16.45118061991079
-  POINT  551  -16.92410838554749  16.48124398607248
-  POINT  552  -15.88164018773895  16.50096422915104
-  POINT  553  -14.82887068531301  16.49821045669536
-  POINT  554  -13.77807911254733  16.48886297653494
-  POINT  555  -12.7333784111039  16.48193539493605
-  POINT  556  -11.69485118291488  16.47821714148055
-  POINT  557  -10.66193355150254  16.47685701531462
-  POINT  558  -9.634017284309458  16.47687882871921
-  POINT  559  -8.610421523166179  16.47761153274202
-  POINT  560  -7.59043875501705  16.47862741976457
-  POINT  561  -6.573526910504127  16.47948404375377
-  POINT  562  -5.55916420169899  16.47991242318579
-  POINT  563  -4.546789160014427  16.4797742368711
-  POINT  564  -3.535766395032657  16.47908711802946
-  POINT  565  -2.525390013898583  16.4782315399178
-  POINT  566  -1.515222446789751  16.47755978237018
-  POINT  567  -0.505160915759866  16.47693907152057
-  POINT  568  0.5051609320854129  16.4769390697559
-  POINT  569  1.515222463409069  16.47755977720512
-  POINT  570  2.525390031591372  16.47823153173884
-  POINT  571  3.535766415254718  16.47908710738646
-  POINT  572  4.546789185065328  16.47977422398127
-  POINT  573  5.559164234676066  16.47991240775378
-  POINT  574  6.573526955235264  16.47948402492305
-  POINT  575  7.590438816148497  16.47862739571796
-  POINT  576  8.610421605901228  16.47761150046795
-  POINT  577  9.634017393679581  16.47687878455547
-  POINT  578  10.66193369197147  16.47685695525197
-  POINT  579  11.6948513586376  16.47821705943312
-  POINT  580  12.73337862581002  16.48193527915152
-  POINT  581  13.77807936895742  16.48886280392126
-  POINT  582  14.82887098061904  16.49821018706623
-  POINT  583  15.88164049446434  16.50096381647671
-  POINT  584  16.92410861282034  16.48124342897973
-  POINT  585  17.91856863399398  16.45118006156937
-  POINT  586  18.82453798513463  16.39668072056363
-  POINT  587  19.69120781864528  16.4990951679711
-  POINT  588  -19.82328465846074  17.34719293018973
-  POINT  589  -18.68356651268673  17.31043580953861
-  POINT  590  -17.56673240514328  17.36123106358058
-  POINT  591  -16.47414590791442  17.37598986974012
-  POINT  592  -15.39064716739153  17.37819173206542
-  POINT  593  -14.32006602394481  17.37102412556857
-  POINT  594  -13.2634493215721  17.36491520744474
-  POINT  595  -12.21741851257929  17.36094404730209
-  POINT  596  -11.17940525689727  17.35901220028596
-  POINT  597  -10.14779283686373  17.35850451428117
-  POINT  598  -9.121467989502685  17.35873940174785
-  POINT  599  -8.09954906046551  17.35924582268215
-  POINT  600  -7.081277449497645  17.35971278396684
-  POINT  601  -6.066028455702323  17.35983944191427
-  POINT  602  -5.053197717776997  17.35940141983762
-  POINT  603  -4.042124698542789  17.35824695931711
-  POINT  604  -3.032009115389205  17.3564023422576
-  POINT  605  -2.021821824817601  17.35459015065573
-  POINT  606  -1.011040264187739  17.35340280443575
-  POINT  607  6.814640345076395e-09  17.35243938843107
-  POINT  608  1.011040278028748  17.35340280223508
-  POINT  609  2.021821839659843  17.35459014619961
-  POINT  610  3.032009132287029  17.35640233585637
-  POINT  611  4.042124719169761  17.35824695109229
-  POINT  612  5.053197744437713  17.35940140968951
-  POINT  613  6.066028491348846  17.35983942938084
-  POINT  614  7.081277497793296  17.35971276796347
-  POINT  615  8.099549125655424  17.35924580133723
-  POINT  616  9.121468076013995  17.3587393726077
-  POINT  617  10.14779294895601  17.35850447445268
-  POINT  618  11.17940539853177  17.3590121455207
-  POINT  619  12.21741868699975  17.36094396965026
-  POINT  620  13.26344953055692  17.36491509096027
-  POINT  621  14.32006626614396  17.37102394370543
-  POINT  622  15.39064742969177  17.37819145776436
-  POINT  623  16.47414614962407  17.37598951033426
-  POINT  624  17.56673257253595  17.36123068035427
-  POINT  625  18.68356665984462  17.31043516903573
-  POINT  626  19.82328469438627  17.3471931986458
-  POINT  627  -19.92361530225037  18.25370297831815
-  POINT  628  -19.07203628626812  18.19876552320404
-  POINT  629  -18.09128424245282  18.22378292531755
-  POINT  630  -17.02794564635327  18.24352791034031
-  POINT  631  -15.94398258752478  18.24421394845224
-  POINT  632  -14.86112859360125  18.24245684590457
-  POINT  633  -13.79465161119509  18.24206223663435
-  POINT  634  -12.74159853322912  18.24073858102732
-  POINT  635  -11.698529613906  18.23959715961889
-  POINT  636  -10.66316644369302  18.23915626546558
-  POINT  637  -9.633977641977911  18.2392237253931
-  POINT  638  -8.609886644138397  18.23947670834334
-  POINT  639  -7.590062391072585  18.23966317253559
-  POINT  640  -6.573799873479021  18.2395756905061
-  POINT  641  -5.560467629070432  18.23897213290731
-  POINT  642  -4.549395686991836  18.2375962202419
-  POINT  643  -3.53974763298982  18.23518325778423
-  POINT  644  -2.530321009293305  18.23165172954483
-  POINT  645  -1.519299961772805  18.22830303022641
-  POINT  646  -0.5061568241133134  18.22651105869159
-  POINT  647  0.5061568361746052  18.22651105818931
-  POINT  648  1.519299974627625  18.2283030281956
-  POINT  649  2.530321023719614  18.23165172623696
-  POINT  650  3.539747650302188  18.23518325320082
-  POINT  651  4.549395708977971  18.23759621436859
-  POINT  652  5.560467658068336  18.23897212554887
-  POINT  653  6.573799912439206  18.23957568110988
-  POINT  654  7.590062443504756  18.23966316006795
-  POINT  655  8.609886713904036  18.23947669135741
-  POINT  656  9.633977733038876  18.23922370211182
-  POINT  657  10.66316655986387  18.23915623336316
-  POINT  658  11.69852975826159  18.23959711417069
-  POINT  659  12.74159870680618  18.24073851295247
-  POINT  660  13.79465181041776  18.24206212883075
-  POINT  661  14.86112880502805  18.24245668253721
-  POINT  662  15.94398277539668  18.24421374106404
-  POINT  663  17.02794575643996  18.24352769585881
-  POINT  664  18.09128426867969  18.22378260511285
-  POINT  665  19.07203607838779  18.19876510589028
-  POINT  666  19.92361533574309  18.25370336043873
-  POINT  667  -19.9802449810712  19.11128711446231
-  POINT  668  -18.80619197016033  19.09425379941037
-  POINT  669  -17.66225403113433  19.09510203515607
-  POINT  670  -16.52583190669753  19.09866237624121
-  POINT  671  -15.41432354959155  19.0986301021614
-  POINT  672  -14.33063667844831  19.1105065301146
-  POINT  673  -13.26794614671815  19.11638402180332
-  POINT  674  -12.21904679432654  19.11829199267038
-  POINT  675  -11.17975304147024  19.11894075428319
-  POINT  676  -10.14765766280284  19.11928688527702
-  POINT  677  -9.121321606407902  19.1195239082655
-  POINT  678  -8.099811768765214  19.11961774535636
-  POINT  679  -7.082440474765014  19.11946501955149
-  POINT  680  -6.068617555176951  19.11889174400767
-  POINT  681  -5.057733760576324  19.11759686938207
-  POINT  682  -4.048951495282913  19.11510440717879
-  POINT  683  -3.040860967573059  19.11069978972926
-  POINT  684  -2.031062116367802  19.10382972217813
-  POINT  685  -1.01638199358576  19.09746934675944
-  POINT  686  5.469910147222479e-09  19.09799582548251
-  POINT  687  1.016382005544462  19.09746934612121
-  POINT  688  2.031062129425211  19.10382972109414
-  POINT  689  3.040860982727736  19.11069978795467
-  POINT  690  4.048951514001514  19.1151044047146
-  POINT  691  5.057733784810108  19.11759686619456
-  POINT  692  6.06861758741177  19.11889173991558
-  POINT  693  7.082440518000469  19.11946501414825
-  POINT  694  8.099811826393989  19.11961773801307
-  POINT  695  9.121321682045322  19.11952389818466
-  POINT  696  10.14765776004377  19.11928687136565
-  POINT  697  11.1797531633058  19.11894073468605
-  POINT  698  12.21904694182174  19.11829196363125
-  POINT  699  13.26794631623689  19.11638397571452
-  POINT  700  14.33063685706478  19.11050645765263
-  POINT  701  15.41432371433398  19.09863001492938
-  POINT  702  16.52583203632977  19.09866230844884
-  POINT  703  17.6622541458637  19.09510191838969
-  POINT  704  18.80619204599507  19.09425361367645
-  POINT  705  19.9802449892912  19.11128730390016
-  POINT  706  -19.18788556876717  20.00005139493198
-  POINT  707  -18.23752403849579  19.99984302247159
-  POINT  708  -17.29064226017514  19.99925376166535
-  POINT  709  -16.47440002277868  20.00254940092639
-  POINT  710  -15.69589026095225  19.99922347246529
-  POINT  711  -14.75829776969549  19.99999149402495
-  POINT  712  -13.75224907606844  20.00002238976034
-  POINT  713  -12.72358628344629  20.00001314522074
-  POINT  714  -11.69063170189132  20.00000296247429
-  POINT  715  -10.65968425579931  19.99999907815186
-  POINT  716  -9.632679418332129  19.99999847573628
-  POINT  717  -8.610092788959356  19.9999987802438
-  POINT  718  -7.592007815489902  19.99999919201484
-  POINT  719  -6.578584325048967  19.99999952078446
-  POINT  720  -5.570430449173512  19.99999973968279
-  POINT  721  -4.569141973011657  19.99999986982209
-  POINT  722  -3.578262228261103  19.99999994088966
-  POINT  723  -2.605187956284842  19.99999997690123
-  POINT  724  -1.66466516281073  19.99999999380757
-  POINT  725  -0.7826655107941599  20.0000000016338
-  POINT  726  0.7826655154907771  20.00000000163381
-  POINT  727  1.664665170888243  19.99999999380764
-  POINT  728  2.605187967544461  19.99999997690146
-  POINT  729  3.578262243238  19.99999994089031
-  POINT  730  4.569141992985899  19.9999998698238
-  POINT  731  5.570430476094784  19.99999973968696
-  POINT  732  6.578584361468833  19.999999520794
-  POINT  733  7.592007864442903  19.99999919203552
-  POINT  734  8.610092853801689  19.99999878028637
-  POINT  735  9.632679502529101  19.99999847581969
-  POINT  736  10.6596843624034  19.99999907830713
-  POINT  737  11.69063183223476  20.00000296274612
-  POINT  738  12.72358643409481  20.00001314569264
-  POINT  739  13.75224923254777  20.00002239071156
-  POINT  740  14.75829790050601  19.99999149614534
-  POINT  741  15.69589033419841  19.99922348070548
-  POINT  742  16.47440003681302  20.0025493901109
-  POINT  743  17.29064231060998  19.99925377353345
-  POINT  744  18.23752405131307  19.99984302941273
-  POINT  745  19.18788543351031  20.00005138833587
-  POINT  746  -19.98023779283576  20.88887437456774
-  POINT  747  -18.80580843557483  20.90547874653299
-  POINT  748  -17.66161201461446  20.90415650737443
-  POINT  749  -16.52591330812703  20.90273438014319
-  POINT  750  -15.41490978144221  20.90067949213849
-  POINT  751  -14.33087263381866  20.8894508385836
-  POINT  752  -13.26804240623713  20.88362475434566
-  POINT  753  -12.21908307283113  20.88171102490173
-  POINT  754  -11.1797653194024  20.88105596204579
-  POINT  755  -10.14766089752007  20.88070896143329
-  POINT  756  -9.121321787680523  20.8804729634606
-  POINT  757  -8.099811171529218  20.88038023214702
-  POINT  758  -7.082439863957721  20.88053378104001
-  POINT  759  -6.068617118328885  20.88110759648338
-  POINT  760  -5.057733492537352  20.88240279408681
-  POINT  761  -4.048951345696993  20.88489543523155
-  POINT  762  -3.040860889905527  20.88930014517067
-  POINT  763  -2.031062079165233  20.89617025723036
-  POINT  764  -1.016381979500983  20.90253065295888
-  POINT  765  5.469943456515303e-09  20.90200417751546
-  POINT  766  1.016381991459812  20.90253065359715
-  POINT  767  2.03106209222298  20.89617025831457
-  POINT  768  3.040860905061069  20.88930014694594
-  POINT  769  4.048951364417659  20.88489543769765
-  POINT  770  5.057733516775839  20.8824027972792
-  POINT  771  6.06861715057387  20.88110760058708
-  POINT  772  7.082439907213993  20.88053378646916
-  POINT  773  8.099811229198181  20.8803802395451
-  POINT  774  9.121321863390992  20.88047297365156
-  POINT  775  10.14766099488602  20.88070897555551
-  POINT  776  11.17976544143952  20.88105598202432
-  POINT  777  12.21908322063199  20.88171105459812
-  POINT  778  13.26804257619063  20.88362480166985
-  POINT  779  14.33087281298531  20.88945091392941
-  POINT  780  15.41490994607966  20.90067958866326
-  POINT  781  16.52591344201236  20.90273444864004
-  POINT  782  17.66161214257477  20.90415664260873
-  POINT  783  18.80580852434392  20.90547893935344
-  POINT  784  19.98023780197282  20.88887416458981
-  POINT  785  -19.92358828250518  21.74660526428339
-  POINT  786  -19.07217434439901  21.80073889981208
-  POINT  787  -18.09112945874565  21.77562907330344
-  POINT  788  -17.02812405581322  21.75701137151901
-  POINT  789  -15.94366066593676  21.75622850710521
-  POINT  790  -14.86126409690214  21.75722234436677
-  POINT  791  -13.79471434661022  21.75787709872358
-  POINT  792  -12.74162038561464  21.75924454538805
-  POINT  793  -11.69853414597164  21.7603937981996
-  POINT  794  -10.66316512661045  21.76083746123114
-  POINT  795  -9.633974994254842  21.76077236820268
-  POINT  796  -8.609884257109169  21.76052103489894
-  POINT  797  -7.590060667734138  21.76033556874065
-  POINT  798  -6.573798770236956  21.76042363684251
-  POINT  799  -5.560466980079595  21.76102752854904
-  POINT  800  -4.549395330869891  21.76240362299502
-  POINT  801  -3.53974744971968  21.76481667916055
-  POINT  802  -2.5303209212877  21.76834825283947
-  POINT  803  -1.519299924135361  21.77169697292803
-  POINT  804  -0.5061568134041036  21.7734889506532
-  POINT  805  0.5061568254655004  21.77348895115548
-  POINT  806  1.519299936990494  21.77169697495886
-  POINT  807  2.530320935714927  21.76834825614754
-  POINT  808  3.539747467034398  21.76481668374473
-  POINT  809  4.549395352861634  21.76240362887052
-  POINT  810  5.560467009090089  21.76102753591302
-  POINT  811  6.573798809223865  21.76042364625162
-  POINT  812  7.590060720219843  21.76033558123638
-  POINT  813  8.609884326976061  21.76052105194263
-  POINT  814  9.633975085497147  21.76077239159665
-  POINT  815  10.66316524309085  21.76083749354136
-  POINT  816  11.69853429083621  21.7603938440048
-  POINT  817  12.74162056001178  21.75924461407503
-  POINT  818  13.79471454718983  21.75787720786278
-  POINT  819  14.86126431068448  21.75722251199929
-  POINT  820  15.94366086082416  21.756228717586
-  POINT  821  17.02812417119083  21.75701159238045
-  POINT  822  18.09112949141926  21.77562941392504
-  POINT  823  19.07217412140869  21.80073933755012
-  POINT  824  19.92358831980405  21.74660483881377
-  POINT  825  -19.823263456196  22.65296550038718
-  POINT  826  -18.68347167777789  22.6889724670474
-  POINT  827  -17.5669100312704  22.63883478838346
-  POINT  828  -16.47409263224828  22.6242054542872
-  POINT  829  -15.3904367336017  22.62202395225419
-  POINT  830  -14.32006894483515  22.62885094013076
-  POINT  831  -13.26345062953686  22.63505078113978
-  POINT  832  -12.21741436155782  22.63904422561734
-  POINT  833  -11.17939965412427  22.64098178723362
-  POINT  834  -10.14778782482358  22.64149205572087
-  POINT  835  -9.121464141616515  22.64125877788618
-  POINT  836  -8.099546383139796  22.64075324216461
-  POINT  837  -7.081275727631735  22.64028674537108
-  POINT  838  -6.066027421514116  22.64016033445862
-  POINT  839  -5.053197134698077  22.64059848599732
-  POINT  840  -4.042124389521369  22.64175301143073
-  POINT  841  -3.032008961880832  22.64359765889142
-  POINT  842  -2.021821754586955  22.64540986356159
-  POINT  843  -1.011040237264479  22.64659721372332
-  POINT  844  6.814665224480487e-09  22.6475606308115
-  POINT  845  1.011040251105664  22.64659721592393
-  POINT  846  2.021821769429846  22.64540986801763
-  POINT  847  3.032008978780493  22.6435976652927
-  POINT  848  4.042124410152931  22.64175301965603
-  POINT  849  5.053197161369463  22.64059849614706
-  POINT  850  6.066027457183961  22.64016034699624
-  POINT  851  7.081275775975558  22.6402867613839
-  POINT  852  8.099546448423908  22.64075326352899
-  POINT  853  9.121464228302864  22.64125880706316
-  POINT  854  10.14778793722731  22.64149209561295
-  POINT  855  11.17939979629603  22.64098184209338
-  POINT  856  12.21741453689023  22.6390443033786
-  POINT  857  13.26345084008729  22.63505089777322
-  POINT  858  14.32006918987354  22.62885112279828
-  POINT  859  15.39043700219516  22.62202422695843
-  POINT  860  16.47409288234377  22.62420581860266
-  POINT  861  17.56691020844972  22.63883518337205
-  POINT  862  18.68347184009588  22.68897314250563
-  POINT  863  19.82326349779923  22.652965189523
-  POINT  864  -19.69117813060965  23.501071811403
-  POINT  865  -18.8246775584696  23.60270488921595
-  POINT  866  -17.91872317447207  23.54877686754418
-  POINT  867  -16.92421077812897  23.51878118738913
-  POINT  868  -15.88162933414794  23.49913833184728
-  POINT  869  -14.82876942700178  23.5019021870122
-  POINT  870  -13.77806312245109  23.51109818218014
-  POINT  871  -12.7333690497193  23.51805365247506
-  POINT  872  -11.69484326979592  23.5217794620292
-  POINT  873  -10.661927166753  23.52314139532949
-  POINT  874  -9.634012473512842  23.52312044026287
-  POINT  875  -8.610418120559023  23.52238820743955
-  POINT  876  -7.590436502923668  23.52137251796749
-  POINT  877  -6.573525514872875  23.52051596810155
-  POINT  878  -5.559163390593181  23.52008761426355
-  POINT  879  -4.54678871790041  23.52022580633416
-  POINT  880  -3.535766169521851  23.52091292302367
-  POINT  881  -2.525389907129223  23.5217684966976
-  POINT  882  -1.515222401501546  23.52244024975234
-  POINT  883  -0.505160903546754  23.52306095823609
-  POINT  884  0.5051609198722887  23.52306096000069
-  POINT  885  1.515222418121158  23.52244025491717
-  POINT  886  2.525389924823131  23.52176850487623
-  POINT  887  3.535766189747005  23.52091293366626
-  POINT  888  4.546788742958842  23.52022581922355
-  POINT  889  5.559163423587246  23.52008762969507
-  POINT  890  6.573525559639977  23.52051598693144
-  POINT  891  7.590436564126859  23.52137254201168
-  POINT  892  8.610418203429177  23.52238823970576
-  POINT  893  9.634012583123939  23.5231204844028
-  POINT  894  10.66192730763136  23.52314145532485
-  POINT  895  11.69484344618557  23.52177954389795
-  POINT  896  12.73336926547453  23.51805376783202
-  POINT  897  13.77806338049386  23.51109835404176
-  POINT  898  14.82876972514016  23.50190245509659
-  POINT  899  15.88162964366185  23.49913874577929
-  POINT  900  16.92421100623148  23.5187817528495
-  POINT  901  17.9187231720003  23.54877744101314
-  POINT  902  18.82467738720799  23.60270583207815
-  POINT  903  19.69117818073977  23.50107152945477
-  POINT  904  -19.50128258193048  24.4384656875654
-  POINT  905  -18.49603377721733  24.52645328847083
-  POINT  906  -17.47222047478762  24.45122954140129
-  POINT  907  -16.40586225838657  24.39407159976292
-  POINT  908  -15.34601775579845  24.38327897298187
-  POINT  909  -14.29467265709022  24.390055636783
-  POINT  910  -13.24976676348197  24.39862650284665
-  POINT  911  -12.21060209619167  24.40396573526314
-  POINT  912  -11.17666203331493  24.40625240812431
-  POINT  913  -10.14751294202745  24.40659288968487
-  POINT  914  -9.122556531432314  24.40573982553234
-  POINT  915  -8.101059706484772  24.40417598818402
-  POINT  916  -7.082601789515715  24.40258179050725
-  POINT  917  -6.066775861079858  24.401321559102
-  POINT  918  -5.053111412995462  24.40054994850132
-  POINT  919  -4.041063542992159  24.40027148711376
-  POINT  920  -3.030084530115851  24.40031940219774
-  POINT  921  -2.019762977092939  24.40048397969316
-  POINT  922  -1.009856981565384  24.40074426873068
-  POINT  923  1.024744895883334e-08  24.40080656348254
-  POINT  924  1.009857001855979  24.40074427407103
-  POINT  925  2.019762997257817  24.40048398970201
-  POINT  926  3.030084551212998  24.40031941575852
-  POINT  927  4.041063567223794  24.40027150330772
-  POINT  928  5.053111443654583  24.40054996712262
-  POINT  929  6.066775902412783  24.40132158083352
-  POINT  930  7.082601846501917  24.40258181677218
-  POINT  931  8.101059785020986  24.40417602181029
-  POINT  932  9.122556637884827  24.40573987111417
-  POINT  933  10.14751308187546  24.40659295223369
-  POINT  934  11.17666221085666  24.40625249235723
-  POINT  935  12.21060231588698  24.40396584869259
-  POINT  936  13.24976703047505  24.39862666102139
-  POINT  937  14.29467297678669  24.39005587293844
-  POINT  938  15.34601812724821  24.38327935339093
-  POINT  939  16.40586264749961  24.39407221667886
-  POINT  940  17.47222072302032  24.45123039885839
-  POINT  941  18.49603359613996  24.52645421647772
-  POINT  942  19.50128254843763  24.438465834723
-  POINT  943  -19.27566297736843  25.33374322431333
-  POINT  944  -18.09775178956348  25.36799483110871
-  POINT  945  -16.95620348221256  25.27537035025225
-  POINT  946  -15.86925210584145  25.2621959819831
-  POINT  947  -14.81076315314948  25.27017923896646
-  POINT  948  -13.76485149074431  25.28055642554051
-  POINT  949  -12.72554494747265  25.2877018915422
-  POINT  950  -11.69125466472678  25.29114191583416
-  POINT  951  -10.66153084238642  25.29208544028669
-  POINT  952  -9.635751893753024  25.29127123899427
-  POINT  953  -8.613017330938026  25.28911759029576
-  POINT  954  -7.593119760102007  25.28673460993404
-  POINT  955  -6.575847443318799  25.28464366208886
-  POINT  956  -5.56085202263591  25.28301692601594
-  POINT  957  -4.547650297377339  25.28185175153692
-  POINT  958  -3.535803856092467  25.28112854408795
-  POINT  959  -2.524929008354851  25.28072983104776
-  POINT  960  -1.514733152989468  25.28059689769103
-  POINT  961  -0.5048698207562641  25.28052643741724
-  POINT  962  0.5048698473713688  25.28052644168841
-  POINT  963  1.51473317820234  25.28059690951267
-  POINT  964  2.524929032351727  25.28072984843296
-  POINT  965  3.535803880701605  25.28112856491395
-  POINT  966  4.54765032602379  25.28185177457648
-  POINT  967  5.560852060064414  25.28301695131759
-  POINT  968  6.575847495256659  25.28464369111745
-  POINT  969  7.593119832718212  25.28673464497304
-  POINT  970  8.613017431274047  25.28911763568033
-  POINT  971  9.635752028795475  25.29127130191628
-  POINT  972  10.66153101603581  25.29208552765603
-  POINT  973  11.6912548775394  25.29114203268002
-  POINT  974  12.72554519985952  25.28770204706892
-  POINT  975  13.76485178333624  25.28055664153414
-  POINT  976  14.81076348639632  25.27017956625211
-  POINT  977  15.86925247881834  25.26219652228766
-  POINT  978  16.95620384751598  25.27537126258778
-  POINT  979  18.09775189289379  25.36799618984021
-  POINT  980  19.27566284513804  25.33374370218195
-  POINT  981  -19.02239954985974  26.17643225215792
-  POINT  982  -18.13957375669325  26.27182967555013
-  POINT  983  -17.24752991244937  26.16660408857279
-  POINT  984  -16.27676195998304  26.15550609242113
-  POINT  985  -15.27459027941854  26.16147153179269
-  POINT  986  -14.25617297779009  26.16981316221108
-  POINT  987  -13.2298905244963  26.17593671197166
-  POINT  988  -12.20134707994185  26.17929019701242
-  POINT  989  -11.17413433418612  26.18055581832264
-  POINT  990  -10.14926347567323  26.17975046130899
-  POINT  991  -9.126055233191323  26.1767257214049
-  POINT  992  -8.104994973232515  26.17334704655403
-  POINT  993  -7.086339423772932  26.17035063568784
-  POINT  994  -6.069981455507479  26.16788451762503
-  POINT  995  -5.055493041319419  26.16585302924196
-  POINT  996  -4.042551276201685  26.16436367569299
-  POINT  997  -3.030821407389114  26.16335937686056
-  POINT  998  -2.020032206493706  26.16279434727297
-  POINT  999  -1.009850748200918  26.16249580956691
-  POINT  1000  1.810878547461869e-08  26.16240730616165
-  POINT  1001  1.009850782604362  26.16249582264381
-  POINT  1002  2.020032236871754  26.1627943696687
-  POINT  1003  3.030821434692971  26.163359404605
-  POINT  1004  4.04255130367432  26.16436370564181
-  POINT  1005  5.055493074279512  26.16585306014084
-  POINT  1006  6.069981500676009  26.16788455034281
-  POINT  1007  7.086339488585687  26.17035067328725
-  POINT  1008  8.104995064661678  26.17334709269614
-  POINT  1009  9.126055358650662  26.17672578313303
-  POINT  1010  10.14926364070988  26.17975055132968
-  POINT  1011  11.17413453512518  26.18055594767594
-  POINT  1012  12.20134730349981  26.17929037161421
-  POINT  1013  13.22989075441856  26.17593694579172
-  POINT  1014  14.25617319248297  26.1698134895775
-  POINT  1015  15.27459044923737  26.16147202351487
-  POINT  1016  16.27676204411003  26.15550686826468
-  POINT  1017  17.24752984252422  26.16660531696369
-  POINT  1018  18.13957335417382  26.27183161770785
-  POINT  1019  19.02239923981158  26.17643320705552
-  POINT  1020  -18.68351052659932  27.13627594775126
-  POINT  1021  -17.69958032840385  27.16211878258065
-  POINT  1022  -16.74683156791625  27.09239213947461
-  POINT  1023  -15.76142860035137  27.07785332363176
-  POINT  1024  -14.75568523901815  27.07369952580982
-  POINT  1025  -13.73682530497883  27.07257389333525
-  POINT  1026  -12.71214081282853  27.07258462878146
-  POINT  1027  -11.68737540619582  27.07322119480453
-  POINT  1028  -10.66414374485063  27.07224624332165
-  POINT  1029  -9.640752201106791  27.06765889268107
-  POINT  1030  -8.618551085348614  27.06280265021007
-  POINT  1031  -7.598447638413528  27.0587038340893
-  POINT  1032  -6.580657275128921  27.05538108021106
-  POINT  1033  -5.564721338620957  27.05245186732603
-  POINT  1034  -4.55044947250108  27.05017759593697
-  POINT  1035  -3.537564033075582  27.04853556963036
-  POINT  1036  -2.525883378397752  27.04753994742007
-  POINT  1037  -1.515118391171542  27.04699037668727
-  POINT  1038  -0.5049676403738673  27.04677660797433
-  POINT  1039  0.5049676892594587  27.04677661887949
-  POINT  1040  1.515118434256783  27.04699040536934
-  POINT  1041  2.525883412994776  27.04753998543922
-  POINT  1042  3.537564061749419  27.04853561085263
-  POINT  1043  4.550449500892171  27.05017763641098
-  POINT  1044  5.564721374913006  27.05245190650947
-  POINT  1045  6.580657328738541  27.0553811208901
-  POINT  1046  7.598447718844161  27.05870388239782
-  POINT  1047  8.618551199616206  27.0628027121368
-  POINT  1048  9.640752355782366  27.06765898096566
-  POINT  1049  10.66414394092225  27.07224638347101
-  POINT  1050  11.6873756228595  27.07322140691138
-  POINT  1051  12.71214101090778  27.07258491927569
-  POINT  1052  13.7368254473805  27.07257428445428
-  POINT  1053  14.75568528734847  27.07370007007758
-  POINT  1054  15.76142851055736  27.07785411803665
-  POINT  1055  16.74683128376763  27.09239333698052
-  POINT  1056  17.6995797272013  27.16212066124442
-  POINT  1057  18.68350991969133  27.13627753669932
-  POINT  1058  -18.3087899994487  28.0491122961534
-  POINT  1059  -17.29356305303868  28.05076474633064
-  POINT  1060  -16.29456855134103  28.00414807613013
-  POINT  1061  -15.27947676947299  27.98500923824287
-  POINT  1062  -14.25474850756761  27.97405313016844
-  POINT  1063  -13.22681991964508  27.96937104967781
-  POINT  1064  -12.20220140205727  27.96991345424442
-  POINT  1065  -11.18106269960114  27.96967783441059
-  POINT  1066  -10.1575317295533  27.96254624095482
-  POINT  1067  -9.134026282902123  27.9554271272794
-  POINT  1068  -8.11232808124951  27.94990275991905
-  POINT  1069  -7.093073357937705  27.94571290375888
-  POINT  1070  -6.075536956332379  27.94179197610055
-  POINT  1071  -5.059700169738454  27.9386774220445
-  POINT  1072  -4.045326088931555  27.93633896816423
-  POINT  1073  -3.03240645241726  27.93493777823327
-  POINT  1074  -2.020741779449279  27.93421009321045
-  POINT  1075  -1.010099138076054  27.93395407311486
-  POINT  1076  3.404211895013942e-08  27.93390377024507
-  POINT  1077  1.010099201965424  27.93395410521433
-  POINT  1078  2.020741831028424  27.93421014644879
-  POINT  1079  3.032406488119535  27.93493783773603
-  POINT  1080  4.045326114328983  27.93633902566877
-  POINT  1081  5.059700194472554  27.93867747350166
-  POINT  1082  6.075536993070713  27.94179202308874
-  POINT  1083  7.09307342009923  27.94571295271277
-  POINT  1084  8.112328181018478  27.94990282281439
-  POINT  1085  9.134026425405688  27.95542721427844
-  POINT  1086  10.15753191815605  27.96254637704741
-  POINT  1087  11.18106292576653  27.96967807323303
-  POINT  1088  12.2022016129779  27.96991382936287
-  POINT  1089  13.22682004031123  27.9693715547119
-  POINT  1090  14.25474849512003  27.97405379109089
-  POINT  1091  15.27947659137026  27.98501013174536
-  POINT  1092  16.29456815670813  28.00414934511754
-  POINT  1093  17.29356234408891  28.05076663883557
-  POINT  1094  18.30878908050798  28.04911438640772
-  POINT  1095  -17.88627195115217  28.94881420577205
-  POINT  1096  -16.85121623860757  28.93061933343462
-  POINT  1097  -15.81833314037684  28.89375235827191
-  POINT  1098  -14.77937167335351  28.87328385036637
-  POINT  1099  -13.74209446540223  28.86499338776666
-  POINT  1100  -12.71605582999688  28.86919825138711
-  POINT  1101  -11.69940001494518  28.87340789918018
-  POINT  1102  -10.67625922348492  28.86226791658786
-  POINT  1103  -9.65132961605895  28.851595071435
-  POINT  1104  -8.627923539340028  28.8441361901345
-  POINT  1105  -7.607383097319782  28.83914218931285
-  POINT  1106  -6.588183876610444  28.834021579554
-  POINT  1107  -5.570592938796751  28.82993786493235
-  POINT  1108  -4.554348259497055  28.82674994031302
-  POINT  1109  -3.539757274765657  28.82494387416716
-  POINT  1110  -2.526758864903647  28.82415777580468
-  POINT  1111  -1.515331685041841  28.82413311065559
-  POINT  1112  -0.5049906739901562  28.82425189305842
-  POINT  1113  0.5049907645346323  28.82425191727151
-  POINT  1114  1.515331766070061  28.82413317752096
-  POINT  1115  2.526758922906133  28.82415786552549
-  POINT  1116  3.539757303964481  28.82494396199095
-  POINT  1117  4.554348271221096  28.82675001632507
-  POINT  1118  5.5705929498453  28.82993792637928
-  POINT  1119  6.588183907369825  28.83402163235582
-  POINT  1120  7.607383167361471  28.83914224659848
-  POINT  1121  8.627923663583609  28.84413627571221
-  POINT  1122  9.651329791428106  28.85159520324159
-  POINT  1123  10.67625944341114  28.86226814518679
-  POINT  1124  11.69940025142002  28.87340833491707
-  POINT  1125  12.71605597388189  28.86919892986707
-  POINT  1126  13.74209440347107  28.86499424204478
-  POINT  1127  14.77937139138959  28.87328490937882
-  POINT  1128  15.81833261547568  28.89375376208559
-  POINT  1129  16.85121538818617  28.93062131895283
-  POINT  1130  17.88627066804774  28.94881677035237
-  POINT  1131  -17.41542967730917  29.83375864838565
-  POINT  1132  -16.36598381746591  29.79324716653365
-  POINT  1133  -15.30571123700743  29.76326236085124
-  POINT  1134  -14.25334486558897  29.75293926663301
-  POINT  1135  -13.22518619984562  29.7683098214614
-  POINT  1136  -12.21928477595643  29.78625116079143
-  POINT  1137  -11.19741514236947  29.76826012438021
-  POINT  1138  -10.17050471136325  29.75174492628818
-  POINT  1139  -9.145044524339205  29.74157318849883
-  POINT  1140  -8.1237506134133  29.73611400010283
-  POINT  1141  -7.102985757155311  29.72937235399485
-  POINT  1142  -6.083575327030116  29.72406116587013
-  POINT  1143  -5.065015794708289  29.71965157618854
-  POINT  1144  -4.048200344643696  29.7173430556003
-  POINT  1145  -3.033238232867113  29.71657292251867
-  POINT  1146  -2.020549058249011  29.71719659405831
-  POINT  1147  -1.009738878373672  29.71805565528834
-  POINT  1148  5.919503985596375e-08  29.71837020929849
-  POINT  1149  1.009738994992378  29.71805571880686
-  POINT  1150  2.020549158880593  29.71719671483972
-  POINT  1151  3.033238290617864  29.71657306631699
-  POINT  1152  4.048200349715117  29.71734318068954
-  POINT  1153  5.065015770760248  29.7196516721558
-  POINT  1154  6.083575305003133  29.72406123347293
-  POINT  1155  7.102985771361372  29.72937240771407
-  POINT  1156  8.123750692148713  29.73611406625849
-  POINT  1157  9.145044681942796  29.74157331659041
-  POINT  1158  10.17050491805136  29.75174514843446
-  POINT  1159  11.19741536641047  29.76826054031946
-  POINT  1160  12.2192849573198  29.78625198231071
-  POINT  1161  13.22518614531627  29.76831101236639
-  POINT  1162  14.25334445158184  29.75294061103708
-  POINT  1163  15.30571051603222  29.76326396462168
-  POINT  1164  16.36598278510637  29.79324928955189
-  POINT  1165  17.41542794295087  29.83376171990615
-  POINT  1166  -16.89880493119268  30.69721421200391
-  POINT  1167  -15.84084671744584  30.63188582080215
-  POINT  1168  -14.75937079783184  30.62356117741139
-  POINT  1169  -13.72667803874304  30.6613328279952
-  POINT  1170  -12.74588714172752  30.71371027983801
-  POINT  1171  -11.72514438910883  30.68212290710705
-  POINT  1172  -10.69307402425253  30.65563776551792
-  POINT  1173  -9.663653547397562  30.64189426397848
-  POINT  1174  -8.642458727492786  30.63734439158867
-  POINT  1175  -7.620362459906692  30.62824675701598
-  POINT  1176  -6.599325061244341  30.62130216573695
-  POINT  1177  -5.577936826951563  30.6148672434393
-  POINT  1178  -4.558211164728247  30.61175248302345
-  POINT  1179  -3.540362154667188  30.61087880095583
-  POINT  1180  -2.525662571249494  30.61262583895858
-  POINT  1181  -1.513887280056144  30.61507416610434
-  POINT  1182  -0.5042972278699956  30.61670205839328
-  POINT  1183  0.5042973737465498  30.61670209443389
-  POINT  1184  1.513887429060817  30.61507428789713
-  POINT  1185  2.525662692669032  30.61262604572162
-  POINT  1186  3.54036219335181  30.61087902796626
-  POINT  1187  4.558211107788653  30.61175265802142
-  POINT  1188  5.577936725817437  30.61486735811178
-  POINT  1189  6.599324974859706  30.62130222879121
-  POINT  1190  7.620362447487361  30.62824680085264
-  POINT  1191  8.642458825941324  30.63734447157217
-  POINT  1192  9.663653754394943  30.64189448764897
-  POINT  1193  10.69307423735651  30.65563818384975
-  POINT  1194  11.72514453379872  30.68212369692436
-  POINT  1195  12.74588713706405  30.71371180853617
-  POINT  1196  13.72667758015037  30.66133475353996
-  POINT  1197  14.75936981763983  30.62356312399664
-  POINT  1198  15.84084548444188  30.63188806768807
-  POINT  1199  16.89880261226452  30.69721787530422
-  POINT  1200  -16.34009128149359  31.53262402545307
-  POINT  1201  -15.28568336821521  31.44708435232277
-  POINT  1202  -14.2209000727431  31.53141889752363
-  POINT  1203  -13.2977569951397  31.66679256172576
-  POINT  1204  -12.27301009857187  31.6040005347632
-  POINT  1205  -11.22445310392184  31.55974332082998
-  POINT  1206  -10.18420406298538  31.54252893027452
-  POINT  1207  -9.163915367393241  31.5436687933713
-  POINT  1208  -8.140599406135669  31.53125016600776
-  POINT  1209  -7.118690682844557  31.52230190448825
-  POINT  1210  -6.093912293860901  31.51225498074955
-  POINT  1211  -5.07053781765046  31.50770300997673
-  POINT  1212  -4.04849776527412  31.50615467955022
-  POINT  1213  -3.030710538587649  31.50945833368958
-  POINT  1214  -2.017113296966526  31.51446605862232
-  POINT  1215  -1.007152972521004  31.5188773687048
-  POINT  1216  8.069955546863294e-08  31.52094595365134
-  POINT  1217  1.007153147259242  31.51887744675579
-  POINT  1218  2.017113486527146  31.51446627236329
-  POINT  1219  3.030710673050414  31.50945868636081
-  POINT  1220  4.048497739728965  31.5061550381337
-  POINT  1221  5.070537627085144  31.50770325017226
-  POINT  1222  6.093912047408612  31.51225510381275
-  POINT  1223  7.118690492026126  31.52230193550043
-  POINT  1224  8.140599370382356  31.53125017994062
-  POINT  1225  9.163915512128149  31.54366891796288
-  POINT  1226  10.18420431641738  31.5425293949968
-  POINT  1227  11.22445321142737  31.55974415861684
-  POINT  1228  12.27300998503818  31.60400199599792
-  POINT  1229  13.29775665030186  31.66679525624402
-  POINT  1230  14.22089893057988  31.53142164267454
-  POINT  1231  15.28568200198485  31.44708667752904
-  POINT  1232  16.34008819047632  31.53262840498486
-  POINT  1233  -15.74070991046201  32.33815429935463
-  POINT  1234  -14.74688528329741  32.29702825850423
-  POINT  1235  -13.93190385661229  32.65477363083443
-  POINT  1236  -12.86506936822592  32.52891304941449
-  POINT  1237  -11.77212159391218  32.45232300476276
-  POINT  1238  -10.70587315849742  32.4347153350411
-  POINT  1239  -9.687662057866612  32.45538673008075
-  POINT  1240  -8.662564266803992  32.43904962117873
-  POINT  1241  -7.6420354397583  32.42864000943801
-  POINT  1242  -6.613519518949163  32.41191777411576
-  POINT  1243  -5.586073763699214  32.40488779735104
-  POINT  1244  -4.558141198059786  32.40119064612167
-  POINT  1245  -3.535940044697491  32.40633890872039
-  POINT  1246  -2.519295876494282  32.41479259504359
-  POINT  1247  -1.507828324987365  32.42353533511525
-  POINT  1248  -0.5019149230875003  32.43049565557803
-  POINT  1249  0.5019150823275319  32.43049567799903
-  POINT  1250  1.507828527783088  32.42353546677084
-  POINT  1251  2.519296107078045  32.41479297153293
-  POINT  1252  3.535940160588894  32.40633951541907
-  POINT  1253  4.558141018794441  32.40119120765029
-  POINT  1254  5.58607332108212  32.40488811417254
-  POINT  1255  6.613519029401044  32.41191787120312
-  POINT  1256  7.642035101328529  32.4286399487375
-  POINT  1257  8.662564215711519  32.43904959879422
-  POINT  1258  9.687662207059672  32.45538705154674
-  POINT  1259  10.70587327603016  32.43471639543523
-  POINT  1260  11.77212124413756  32.45232461789568
-  POINT  1261  12.86506864437663  32.5289155171651
-  POINT  1262  13.9319031453721  32.65477802453022
-  POINT  1263  14.74688388336436  32.29703064706029
-  POINT  1264  15.74070577682765  32.33815957294095
-  POINT  1265  -15.07552072766293  33.14262814282181
-  POINT  1266  -14.47383699079426  33.80246509548604
-  POINT  1267  -13.45485613851754  33.44616152809291
-  POINT  1268  -12.31042376721847  33.31655850201416
-  POINT  1269  -11.2135033566313  33.30180198841559
-  POINT  1270  -10.20833474124087  33.37195219581763
-  POINT  1271  -9.180106558323141  33.35165297473918
-  POINT  1272  -8.167116093012913  33.3442344487901
-  POINT  1273  -7.135707070230799  33.31483801144155
-  POINT  1274  -6.105345665605076  33.30379118897195
-  POINT  1275  -5.06957725725357  33.29468673625933
-  POINT  1276  -4.041801375578952  33.30179332186751
-  POINT  1277  -3.020762110140957  33.31421796476505
-  POINT  1278  -2.005808444215231  33.32826293060971
-  POINT  1279  -1.000289102538041  33.34360137140605
-  POINT  1280  4.397051474314129e-08  33.34996601347633
-  POINT  1281  1.000289226544982  33.34360139490249
-  POINT  1282  2.005808652593252  33.32826315749907
-  POINT  1283  3.020762356793561  33.31421864049496
-  POINT  1284  4.04180140274841  33.30179435588055
-  POINT  1285  5.069576774752012  33.29468759101248
-  POINT  1286  6.105344800786285  33.30379157372327
-  POINT  1287  7.135706209600581  33.31483800284786
-  POINT  1288  8.167115522703435  33.3442342276991
-  POINT  1289  9.180106333286005  33.35165308658632
-  POINT  1290  10.20833438162417  33.37195324049043
-  POINT  1291  11.21350253681438  33.30180425811116
-  POINT  1292  12.31042180764285  33.31656140263814
-  POINT  1293  13.4548524153751  33.44616582254692
-  POINT  1294  14.47383044482127  33.80247196173818
-  POINT  1295  15.07551512015369  33.14263458603429
-  POINT  1296  -13.79621587368983  34.47979377169069
-  POINT  1297  -12.80117612552641  34.14340935306568
-  POINT  1298  -11.67938708456585  34.12832297638581
-  POINT  1299  -10.72142132443546  34.29425844362311
-  POINT  1300  -9.682832980733666  34.26424534470635
-  POINT  1301  -8.688207103612132  34.27689307018375
-  POINT  1302  -7.65563025945943  34.22402537362621
-  POINT  1303  -6.627660152089107  34.20733211365729
-  POINT  1304  -5.582314868145199  34.18559033550888
-  POINT  1305  -4.548886327711884  34.19487513879358
-  POINT  1306  -3.522722983675548  34.21111636664738
-  POINT  1307  -2.501187911497048  34.22961986771382
-  POINT  1308  -1.494394684397123  34.25705724567609
-  POINT  1309  -0.4971265849464807  34.27519845138761
-  POINT  1310  0.4971265078887681  34.27519841977612
-  POINT  1311  1.494394688445157  34.25705727178087
-  POINT  1312  2.501188049285862  34.22962028369921
-  POINT  1313  3.522723188878942  34.21111756307139
-  POINT  1314  4.548886155833521  34.19487684951891
-  POINT  1315  5.582313876849914  34.18559156986573
-  POINT  1316  6.627658663296168  34.20733251253952
-  POINT  1317  7.655628853358176  34.22402516036131
-  POINT  1318  8.68820599240011  34.27689283063138
-  POINT  1319  9.682831841060921  34.26424634549341
-  POINT  1320  10.72141915815556  34.29426114991747
-  POINT  1321  11.67938420379727  34.12832694300539
-  POINT  1322  12.80117158164824  34.14341469815486
-  POINT  1323  13.79620812794538  34.47980114816573
-  POINT  1324  -13.06808813704192  35.14018072687722
-  POINT  1325  -12.14172620096994  34.87954210817981
-  POINT  1326  -11.26850255798744  35.2174633859475
-  POINT  1327  -10.17404344203454  35.15495143560162
-  POINT  1328  -9.208060341626505  35.23313312650344
-  POINT  1329  -8.164338718552617  35.1425249690552
-  POINT  1330  -7.149966973739355  35.12413503072115
-  POINT  1331  -6.093958485983832  35.07390856861841
-  POINT  1332  -5.058078832983085  35.0862120839201
-  POINT  1333  -4.028041239492521  35.10535340409478
-  POINT  1334  -2.995366542760057  35.12335223032324
-  POINT  1335  -1.984673994347679  35.16616214935111
-  POINT  1336  -0.9889440302704526  35.202230425387
-  POINT  1337  -2.362829220701329e-07  35.21561385455021
-  POINT  1338  0.9889435978667032  35.20223033196604
-  POINT  1339  1.984673688665513  35.16616222501731
-  POINT  1340  2.995366465565271  35.12335296470669
-  POINT  1341  4.028041331825868  35.10535544561446
-  POINT  1342  5.05807832979828  35.08621479165007
-  POINT  1343  6.093956728733247  35.07391022323044
-  POINT  1344  7.149964603949941  35.12413537360996
-  POINT  1345  8.16433638165371  35.14252466978046
-  POINT  1346  9.208057389898194  35.23313393742545
-  POINT  1347  10.17403944712447  35.15495471543825
-  POINT  1348  11.26849645211291  35.21746853325359
-  POINT  1349  12.14171999880287  34.87954795411678
-  POINT  1350  13.0680787036588  35.14018886919808
-  POINT  1351  -12.25874524554923  35.80263158479386
-  POINT  1352  -10.64940816662681  35.9609434482652
-  POINT  1353  -9.738993523076187  36.21117036120386
-  POINT  1354  -8.645496887251596  36.05535363229623
-  POINT  1355  -7.660082219217359  36.07236004253533
-  POINT  1356  -6.59386247522779  35.96253496561209
-  POINT  1357  -5.568601871711349  35.98133911135642
-  POINT  1358  -4.542278169739824  36.00016620825533
-  POINT  1359  -3.491371001354527  36.00500762088945
-  POINT  1360  -2.474010083407105  36.06498819452312
-  POINT  1361  -1.477289195045545  36.12504113606641
-  POINT  1362  -0.4912059285544867  36.15975599214231
-  POINT  1363  0.4912047027322386  36.15975590621064
-  POINT  1364  1.477288036732875  36.12504100856928
-  POINT  1365  2.474009154113311  36.06498836685221
-  POINT  1366  3.491370484225889  36.005008798768
-  POINT  1367  4.542278089478654  36.00016955223765
-  POINT  1368  5.568600813180165  35.98134321823733
-  POINT  1369  6.593859519726857  35.96253699972355
-  POINT  1370  7.660078711252875  36.07236031674334
-  POINT  1371  8.64549260236045  36.05535452011431
-  POINT  1372  9.738986372954258  36.21117440008044
-  POINT  1373  10.64940057210636  35.96094915519707
-  POINT  1374  12.25873414120749  35.80264019887823
-  POINT  1375  -11.51773025350177  36.35059294972418
-  POINT  1376  -10.65697659081121  36.92420899016856
-  POINT  1377  -9.073839610332337  36.90105300548846
-  POINT  1378  -8.146483166419303  37.06536476868484
-  POINT  1379  -7.049598100139526  36.85375720886346
-  POINT  1380  -6.068285778904927  36.89990321056391
-  POINT  1381  -5.072991493907814  36.90817616854977
-  POINT  1382  -3.99387954502805  36.86886824762014
-  POINT  1383  -2.967956221366422  36.948391661155
-  POINT  1384  -1.969359381657599  37.03579454421214
-  POINT  1385  -0.9811568690244843  37.09928427270614
-  POINT  1386  -1.321646322029191e-06  37.12286421524274
-  POINT  1387  0.9811542273605319  37.09928414206929
-  POINT  1388  1.969356939200988  37.03579438002285
-  POINT  1389  2.967954164856175  36.94839197135881
-  POINT  1390  3.993878153189894  36.86886991249742
-  POINT  1391  5.072990965328807  36.90818161389328
-  POINT  1392  6.068283175739424  36.89990903124271
-  POINT  1393  7.049593675630685  36.85375859784719
-  POINT  1394  8.146477155142176  37.06536635726837
-  POINT  1395  9.073831993817508  36.90105705402716
-  POINT  1396  10.65696264541113  36.92421777141614
-  POINT  1397  11.51771778734179  36.35060173116444
-  POINT  1398  -9.874844025420192  37.39216649740979
-  POINT  1399  -8.96740748095799  37.87695732138048
-  POINT  1400  -7.438938982686154  37.68347468260948
-  POINT  1401  -6.50593626267252  37.87694008295671
-  POINT  1402  -5.61747021210558  37.87127533952164
-  POINT  1403  -4.50493919684402  37.70762847888211
-  POINT  1404  -3.474895680182776  37.81110994000395
-  POINT  1405  -2.47779011320007  37.9305818016129
-  POINT  1406  -1.486534122834006  38.0216095618874
-  POINT  1407  -0.4945352453330601  38.07921156797903
-  POINT  1408  0.4945300811634933  38.07921159550066
-  POINT  1409  1.486529221010789  38.02160930967654
-  POINT  1410  2.477785571750189  37.9305816710405
-  POINT  1411  3.474891600531238  37.81111046960394
-  POINT  1412  4.504935871545127  37.70763053498042
-  POINT  1413  5.617467804911568  37.87128486851104
-  POINT  1414  6.505933128734337  37.87694376153858
-  POINT  1415  7.438934268999978  37.68347575716164
-  POINT  1416  8.967392296606542  37.87696493811983
-  POINT  1417  9.874829237160435  37.39217489381149
-  POINT  1418  -8.147493943469181  38.26522221165496
-  POINT  1419  -7.204335412055579  38.65737257146897
-  POINT  1420  -6.323312496190199  38.97408019050001
-  POINT  1421  -5.01203726983948  38.51297624845616
-  POINT  1422  -4.001501092985738  38.651230540567
-  POINT  1423  -3.020444675311309  38.806876475282
-  POINT  1424  -2.033095442850132  38.92553139969691
-  POINT  1425  -1.029249995848707  39.00470609623093
-  POINT  1426  -4.74370389105111e-06  39.04491520100409
-  POINT  1427  1.029241328499785  39.00470590960975
-  POINT  1428  2.033087058128695  38.92553128934863
-  POINT  1429  3.020436112344315  38.80687697855863
-  POINT  1430  4.001492023142893  38.65123203877156
-  POINT  1431  5.01202711215084  38.51297927624825
-  POINT  1432  6.323297249481397  38.97408527161986
-  POINT  1433  7.204321660158831  38.6573778816041
-  POINT  1434  8.147479092148298  38.26522883631657
-  POINT  1435  -5.49459488339432  39.2304297161394
-  POINT  1436  -4.555054134591538  39.47438013983862
-  POINT  1437  -3.625104797446435  39.66872174818514
-  POINT  1438  -2.68641217378018  39.8187585290443
-  POINT  1439  -1.753727660812683  39.92296262335634
-  POINT  1440  -0.8514203504713909  39.98186887129251
-  POINT  1441  0.8514156417348741  39.98186906132761
-  POINT  1442  1.753718582443226  39.92296341244428
-  POINT  1443  2.686399886263002  39.81876019460063
-  POINT  1444  3.625089980059974  39.66872447914377
-  POINT  1445  4.555037417817725  39.47438404988157
-  POINT  1446  5.494577273669186  39.23043474765144
-  POINT  1447  -10.17836236469941  9.351236080585844
-  POINT  1448  -10.43178822028154  9.796311205363828
-  POINT  1449  -9.917078319793836  9.803182550031517
-  POINT  1450  -0.4257127323325477  0.4866079094147974
-  POINT  1451  -2.371846788213477e-06  0.477542337394691
-  POINT  1452  -0.4258068646365975  0.004533301166143754
-  POINT  1453  -7.678410559861725  1.532677211575885
-  POINT  1454  -7.321632913802258  1.829573658302515
-  POINT  1455  -7.793213434540115  2.025649120773706
-  POINT  1456  -0.4257125470876409  39.5133920361483
-  POINT  1457  -2.371851945525555e-06  39.52245760050205
-  POINT  1458  -0.4258066792652949  39.99546670279175
-  POINT  1459  19.49788122060637  21.77367208818195
-  POINT  1460  19.87859224467908  22.20035688754039
-  POINT  1461  19.44771880960396  22.22685226353656
-  POINT  1462  19.95652174895268  21.31804389755909
-  POINT  1463  19.52620596169076  21.34480675106996
-  POINT  1464  -18.50178077972164  27.59500547042333
-  POINT  1465  -18.00418516392628  27.60561553936703
-  POINT  1466  -18.19154542750159  27.14919736516595
-  POINT  1467  2.318125029883721  20.44808511760801
-  POINT  1468  2.823024436302765  20.4446500619237
-  POINT  1469  2.535961498642024  20.89273520263026
-  POINT  1470  -18.1915204806717  12.85075360776577
-  POINT  1471  -18.00416183249957  12.39434254388758
-  POINT  1472  -18.50176221811813  12.40494933886966
-  POINT  1473  -10.43863716835151  8.90091854855763
-  POINT  1474  -9.923927267863803  8.907789893225319
-  POINT  1475  -10.95968604283294  7.131741057062447
-  POINT  1476  -11.49280931695378  7.122937192173756
-  POINT  1477  -11.23899374083607  7.556481059276784
-  POINT  1478  -10.96516006976062  8.002771637036583
-  POINT  1479  -11.49828334388146  7.993967772147892
-  POINT  1480  -10.70432587216095  8.448865355552398
-  POINT  1481  -10.95876096899656  8.892311542912923
-  POINT  1482  -10.44503626911557  8.01137864268129
-  POINT  1483  14.20285675279642  6.771375017633135
-  POINT  1484  14.50369851507584  7.101292773533388
-  POINT  1485  14.77834984324904  6.524081630761735
-  POINT  1486  12.23551226998423  9.30208580312808
-  POINT  1487  11.99907300324982  8.856939970398869
-  POINT  1488  12.50944368805203  8.841146276347569
-  POINT  1489  11.97221231742172  9.765815913514722
-  POINT  1490  12.48258300222394  9.750022219463421
-  POINT  1491  -0.4905789853227912  2.888925581404812
-  POINT  1492  -0.7361812304740789  3.37047972852181
-  POINT  1493  -0.2456035667837216  3.358689771784562
-  POINT  1494  -4.783548996192389  1.006323236939901
-  POINT  1495  -5.026302453506227  0.6418935979999102
-  POINT  1496  -5.253316898193344  1.128297748069279
-  POINT  1497  -4.278279517467413  0.9371948906828067
-  POINT  1498  -4.50677415895651  1.41789821597725
-  POINT  1499  -3.813305411122727  0.8400241846748683
-  POINT  1500  -4.09123434595309  0.4229266387245523
-  POINT  1501  1.893402820285961  39.42424735089645
-  POINT  1502  2.359743472195849  39.37214574197463
-  POINT  1503  2.220670538841968  39.87633322383852
-  POINT  1504  0.2472626687298011  38.56206339825238
-  POINT  1505  -2.582084783431249e-06  38.07921158173984
-  POINT  1506  -0.2472699945184756  38.56206338449157
-  POINT  1507  10.65318160875874  36.4425834633066
-  POINT  1508  11.08355917972408  36.15577544318076
-  POINT  1509  11.09104919162302  36.64297534268243
-  POINT  1510  4.506759567646867  38.5821056575099
-  POINT  1511  4.758481491847984  38.11030490561433
-  POINT  1512  4.25321394734401  38.179431286876
-  POINT  1513  4.783532264984283  38.9936816630649
-  POINT  1514  5.253302192910013  38.87170701194984
-  POINT  1515  5.026287577931008  39.35811027344018
-  POINT  1516  4.278264720480308  39.06280804432657
-  POINT  1517  2.271388089598089  31.06354615904246
-  POINT  1518  1.765500457793982  31.06477028013021
-  POINT  1519  2.019775060864925  30.61385016680937
-  POINT  1520  2.52391207978878  31.51196247936205
-  POINT  1521  2.778186682859723  31.06104236604121
-  POINT  1522  19.58406521140076  19.55566934611801
-  POINT  1523  19.59394271675515  20.00002569416793
-  POINT  1524  19.99506063684425  19.5555338953416
-  POINT  1525  19.58406161774156  20.44446277646284
-  POINT  1526  19.99505884072375  20.44454692352635
-  POINT  1527  17.47612722659238  20.45170520807109
-  POINT  1528  17.94956809694392  20.45199983601073
-  POINT  1529  17.76408318096152  19.99954840147309
-  POINT  1530  17.09376279229357  20.90344554562439
-  POINT  1531  16.90827787631117  20.45099411108675
-  POINT  1532  17.65639440029453  29.39423957186695
-  POINT  1533  17.13332166556852  29.38219151942949
-  POINT  1534  17.36874302811696  28.9397190446526
-  POINT  1535  13.61482989783698  32.16078664038712
-  POINT  1536  14.07640103797599  32.09309983360238
-  POINT  1537  13.75932779044087  31.59910844945928
-  POINT  1538  16.10341413477412  30.21256867861998
-  POINT  1539  16.63239269868544  30.24523358242805
-  POINT  1540  16.3698240483532  30.66455297149614
-  POINT  1541  16.89070536402862  29.81350550472902
-  POINT  1542  16.60859908664627  29.36193530425236
-  POINT  1543  17.1625462541375  30.26873928275396
-  POINT  1544  16.0904668374591  31.08225823633646
-  POINT  1545  16.6246937806281  31.11843321269683
-  POINT  1546  15.81288509623059  31.48985754125695
-  POINT  1547  16.04545280411266  31.9391559472781
-  POINT  1548  15.51319388940625  31.89262312523499
-  POINT  1549  15.56326374321337  31.03948737260855
-  POINT  1550  13.77222000363087  24.39434126697991
-  POINT  1551  13.50730940690564  24.83959165127776
-  POINT  1552  14.02976238006146  24.83530625723629
-  POINT  1553  12.98553330932471  9.758991772893435
-  POINT  1554  12.72223335676221  10.22272188328008
-  POINT  1555  16.25410351335674  12.9148587217591
-  POINT  1556  16.01906260946011  13.38331048867258
-  POINT  1557  16.5117595380726  13.37602992964366
-  POINT  1558  16.89069502922413  10.18647787299363
-  POINT  1559  16.60858850912514  10.63804911311348
-  POINT  1560  17.13330989107297  10.61778909765387
-  POINT  1561  16.09214844821832  10.65648742134303
-  POINT  1562  16.33476331006715  11.08779864600327
-  POINT  1563  -17.80117652624369  28.04993852124202
-  POINT  1564  -17.49657169072127  27.60644176445565
-  POINT  1565  -19.58406168080147  20.44446288474986
-  POINT  1566  -19.59394278438359  20.00002569746599
-  POINT  1567  -19.99505883837563  20.44454702859078
-  POINT  1568  -18.996847002171  20.45276507073249
-  POINT  1569  -19.3930231142053  20.89717656055036
-  POINT  1570  -19.58406527491918  19.55566925469715
-  POINT  1571  -19.99506063472496  19.55553380055498
-  POINT  1572  -18.99703876946375  19.54715259717118
-  POINT  1573  -19.39321847561576  19.10277045693634
-  POINT  1574  -1.233845495929245  37.56044691729677
-  POINT  1575  -0.9905346840835332  38.05041056493322
-  POINT  1576  -0.7378460571787722  37.58924792034259
-  POINT  1577  -1.759814782842069  38.47357048079215
-  POINT  1578  -1.982162118017038  37.97609568175015
-  POINT  1579  -2.255442778025101  38.42805660065491
-  POINT  1580  -1.503048773376636  33.33593215100788
-  POINT  1581  -1.756818384601298  32.87589913286249
-  POINT  1582  -1.254058713762703  32.88356835326066
-  POINT  1583  13.51221711522611  31.16406500489199
-  POINT  1584  13.97378825536513  31.09637819810725
-  POINT  1585  1.775181014606737  21.33393361663671
-  POINT  1586  1.267840964225153  21.33711381427801
-  POINT  1587  1.523722041841396  20.89935045595586
-  POINT  1588  1.265170094048079  22.20914709544139
-  POINT  1589  1.77056085321017  22.20855342148825
-  POINT  1590  1.516431010267755  22.64600354197079
-  POINT  1591  1.012728381227997  21.77259296305717
-  POINT  1592  0.7612694084626562  21.33800980237632
-  POINT  1593  0.758598538285582  22.21004308353971
-  POINT  1594  1.847863631555612  20.4480851260611
-  POINT  1595  1.340523581174028  20.45126532370239
-  POINT  1596  2.134926569216352  19.99999998535455
-  POINT  1597  2.280691513968954  21.33225925723105
-  POINT  1598  2.785590920387998  21.32882420154674
-  POINT  1599  2.02481043635271  21.7700226155532
-  POINT  1600  2.78116495724771  22.20597296072012
-  POINT  1601  2.276071352572386  22.20687906208259
-  POINT  1602  2.52691537410517  22.64450376665516
-  POINT  1603  -9.899143737765993  12.4849004435783
-  POINT  1604  -9.387390829537839  12.48845944608934
-  POINT  1605  -9.645780226280916  12.0410160502686
-  POINT  1606  -11.94630637827111  14.2647893097616
-  POINT  1607  -12.46345218922917  14.26650973789091
-  POINT  1608  -12.20840695700918  14.7105827019253
-  POINT  1609  -13.22907293656634  11.13290745457848
-  POINT  1610  -13.48445463159971  11.58282180341283
-  POINT  1611  -12.9714364037251  11.58072072087271
-  POINT  1612  -12.45912889682464  11.58045014485459
-  POINT  1613  -11.9508016855418  11.57834567717223
-  POINT  1614  -12.20772749740889  11.128701904356
-  POINT  1615  -12.71451059185801  12.03036449368894
-  POINT  1616  -13.62553305310023  6.037019882652965
-  POINT  1617  -14.1390779208095  5.854807348663457
-  POINT  1618  -13.96434315411798  6.375683521723212
-  POINT  1619  -13.39847526011537  7.408160088352634
-  POINT  1620  -13.61481920361369  7.839222070915377
-  POINT  1621  -13.0814052589453  7.902150069513514
-  POINT  1622  -13.69337197744059  6.949534963734737
-  POINT  1623  -13.1599580327722  7.012462962332874
-  POINT  1624  -14.5037016745593  7.101298192194127
-  POINT  1625  -14.20286038146115  6.771380647742971
-  POINT  1626  -14.7783559058492  6.524088291719242
-  POINT  1627  -13.23627871209868  9.312480837244131
-  POINT  1628  -13.51221183367959  8.835940044420862
-  POINT  1629  -13.02181608086271  8.809752844899524
-  POINT  1630  -16.36981698070831  9.335436989756825
-  POINT  1631  -16.09046066583428  8.917733609398496
-  POINT  1632  -16.62468707069794  8.881556790786455
-  POINT  1633  -15.56325712327145  8.960504702078703
-  POINT  1634  -15.81287888901091  8.510134528156787
-  POINT  1635  -15.51318860052802  8.107370522015474
-  POINT  1636  -16.04544791423854  8.060837516432803
-  POINT  1637  -12.46766878840969  10.67227976168969
-  POINT  1638  -11.95934157712685  10.67017529400733
-  POINT  1639  -10.71091751983426  6.663122417067669
-  POINT  1640  -10.45710194371655  7.096666284170696
-  POINT  1641  -10.46487666458869  6.166894149966415
-  POINT  1642  -10.96746076370507  6.201968922858168
-  POINT  1643  -10.44773102895123  5.275394031275448
-  POINT  1644  -10.20212605088105  5.720747497892338
-  POINT  1645  -9.928437171372778  5.290400873410871
-  POINT  1646  -9.945582807010235  6.18190099210184
-  POINT  1647  -13.2986928764065  5.688395693536721
-  POINT  1648  -13.12801457340368  6.205213648598734
-  POINT  1649  -11.74872710378692  8.418130127367466
-  POINT  1650  -12.02256077486237  7.971839549607667
-  POINT  1651  -12.50944374702482  8.841147771275015
-  POINT  1652  -12.78537686860573  8.36460697845175
-  POINT  1653  -12.56903292510741  7.933544995889006
-  POINT  1654  -12.31858916520195  7.509382640669432
-  POINT  1655  13.43619694655841  5.185526953886848
-  POINT  1656  12.93462220614015  5.358195834077412
-  POINT  1657  13.29868673147849  5.68838933264013
-  POINT  1658  12.6048962546636  4.990129099323558
-  POINT  1659  12.47144390129601  5.488517379573725
-  POINT  1660  12.66773340441992  4.523290710179079
-  POINT  1661  12.20022404450319  4.658903670708396
-  POINT  1662  10.71091693015139  6.663120759878266
-  POINT  1663  10.46487540167239  6.166892274467385
-  POINT  1664  10.96745927067751  6.201966434828546
-  POINT  1665  11.47479568277288  8.879068504656995
-  POINT  1666  11.74872710084068  8.418128977876485
-  POINT  1667  10.41171824790274  4.44204662093386
-  POINT  1668  9.95651127773848  4.316934168875102
-  POINT  1669  10.19419137109885  3.91393666291501
-  POINT  1670  10.72126631852727  4.813787013527604
-  POINT  1671  10.99495611235534  5.244133924789459
-  POINT  1672  10.44772794837044  5.275391038155809
-  POINT  1673  10.95894641188764  4.410789507567511
-  POINT  1674  11.39310410040094  4.215962651334707
-  POINT  1675  11.08355602977641  3.844222258740964
-  POINT  1676  11.76361231084955  4.489943298379086
-  POINT  1677  11.89137865119184  3.919107181901866
-  POINT  1678  11.70510621616581  4.951490272490563
-  POINT  1679  10.26855741345323  2.837344939506088
-  POINT  1680  10.19797132927438  3.43230183825083
-  POINT  1681  9.806904421137391  3.198323297051241
-  POINT  1682  10.65317829943864  3.557414290309588
-  POINT  1683  11.09104496327604  3.357021849792107
-  POINT  1684  15.24378585350844  7.682394375166194
-  POINT  1685  14.91119126151212  7.280158226193516
-  POINT  1686  15.41335252508149  7.2552534786716
-  POINT  1687  14.33938124011792  7.524093148708583
-  POINT  1688  14.48388392770153  8.085767740880334
-  POINT  1689  14.07639118126524  7.906902288220206
-  POINT  1690  13.61481867571485  7.839218526827278
-  POINT  1691  13.75932136329846  8.400893118999029
-  POINT  1692  13.02181590626726  8.80975073334144
-  POINT  1693  12.78537663953285  8.364604900612228
-  POINT  1694  13.47592883520427  9.785178774102992
-  POINT  1695  13.99000741695932  9.792862338836377
-  POINT  1696  13.73926224561804  10.23937500144348
-  POINT  1697  13.236278480666  9.312479110286336
-  POINT  1698  13.51221143214682  8.835937734550996
-  POINT  1699  13.97378393769721  8.903621495943923
-  POINT  1700  11.4612780216533  9.774811388208361
-  POINT  1701  11.70834875389301  10.2227478045437
-  POINT  1702  1.893403551233607  0.5757525887353929
-  POINT  1703  2.220671493500129  0.1236668831597823
-  POINT  1704  2.359744414402249  0.6278542389056427
-  POINT  1705  -9.020619693030262  2.610992623251209
-  POINT  1706  -9.424238324783893  2.359599448271815
-  POINT  1707  -9.474338358545761  2.853388073889197
-  POINT  1708  -9.406414519116504  3.443886808846754
-  POINT  1709  -9.192243991855898  3.8667371366121
-  POINT  1710  -8.859666959835261  3.521795695676809
-  POINT  1711  -9.806915390566399  3.198329514824488
-  POINT  1712  -10.19798187725191  3.432308248445783
-  POINT  1713  -10.26857176218753  2.83735353592188
-  POINT  1714  -0.2472699682428073  1.437936441491353
-  POINT  1715  -2.582068645534674e-06  1.920788194433522
-  POINT  1716  0.2472626424805853  1.437936427731552
-  POINT  1717  -0.247268257212236  2.398961916430443
-  POINT  1718  0.2472643535111566  2.398961902670643
-  POINT  1719  -0.7378459209025934  2.410751873167692
-  POINT  1720  -3.510975514120101  1.270946662206892
-  POINT  1721  -3.322776245011294  0.762200977161605
-  POINT  1722  -2.853429843183762  0.6871825417534015
-  POINT  1723  -3.156651266211425  0.2506822223484442
-  POINT  1724  -2.526771255348011  1.133795929446323
-  POINT  1725  -2.359754750523105  0.6278550165060958
-  POINT  1726  -2.749118087874698  1.631270599590879
-  POINT  1727  -2.255442995214041  1.571943074343573
-  POINT  1728  1.53116419331424  38.96511859947919
-  POINT  1729  1.391479955471506  39.46383466102701
-  POINT  1730  0.7618857048316392  38.5419587525552
-  POINT  1731  0.5146182923979471  39.02481055530693
-  POINT  1732  1.257885274755287  38.51315760964314
-  POINT  1733  1.759808139569742  38.47357029951259
-  POINT  1734  0.9905296510871409  38.0504104525886
-  POINT  1735  -0.4905790953354032  37.11107424397444
-  POINT  1736  -0.2472682834896911  37.60103789161089
-  POINT  1737  0.2472643797585856  37.6010379053717
-  POINT  1738  1.263131334613411  23.08451873542055
-  POINT  1739  1.768522093775502  23.0839250614674
-  POINT  1740  10.17836399587573  30.64876633574936
-  POINT  1741  10.43178957770394  30.2036916661421
-  POINT  1742  9.917079336223154  30.19681981804171
-  POINT  1743  2.526761585236505  38.86620413395363
-  POINT  1744  2.853417999303659  39.31281858657962
-  POINT  1745  4.533434559259351  36.88852576319535
-  POINT  1746  4.788963418436968  37.30790607443685
-  POINT  1747  4.24940701236751  37.28825022373893
-  POINT  1748  -0.7511020128127708  32.88704851349204
-  POINT  1749  -1.004871624037433  32.42701549534664
-  POINT  1750  0.7570181843694639  30.16737890662038
-  POINT  1751  0.2521487164707948  30.16753615186619
-  POINT  1752  0.5048695270937089  29.71821296405268
-  POINT  1753  1.009092401403684  30.61588819116551
-  POINT  1754  1.261813212026598  30.16656500335199
-  POINT  1755  5.068073916803044  30.6133100080666
-  POINT  1756  4.814374367436898  31.05972795409684
-  POINT  1757  5.32423717645129  31.06128530414202
-  POINT  1758  16.9971372534731  13.37045922378724
-  POINT  1759  16.76209634957647  13.83891099070072
-  POINT  1760  18.58096903763212  13.77579904583797
-  POINT  1761  18.85904395297749  13.34143701271937
-  POINT  1762  18.41152250629444  13.29587573790125
-  POINT  1763  18.68665357284071  14.64903426839365
-  POINT  1764  18.29676492885642  15.05256270617449
-  POINT  1765  18.88575798278899  15.06972612425592
-  POINT  1766  17.78489646840998  15.09030766023127
-  POINT  1767  17.98400087835825  15.51099951609354
-  POINT  1768  18.5600217445983  14.22769376801203
-  POINT  1769  18.11860781194196  14.17997612813817
-  POINT  1770  19.15364966814478  14.24346421008305
-  POINT  1771  17.67256729194256  14.23260556757826
-  POINT  1772  17.69351458497638  13.7807108454042
-  POINT  1773  18.99703873975269  19.54715250100616
-  POINT  1774  19.39321851764313  19.1027704587883
-  POINT  1775  18.52185804865407  19.54704832154459
-  POINT  1776  18.71270474241169  19.9999472088743
-  POINT  1777  17.69535052595289  15.99996226585984
-  POINT  1778  18.20721898639934  15.96221731180307
-  POINT  1779  14.56172135096343  23.94597916401752
-  POINT  1780  15.08739392619418  23.94259090424376
-  POINT  1781  14.82034555201745  24.38666761316468
-  POINT  1782  19.39302316315837  20.89717655197163
-  POINT  1783  18.9389913228763  21.35310913845178
-  POINT  1784  18.99684697892711  20.45276516384465
-  POINT  1785  18.5216662878285  20.45266098438309
-  POINT  1786  18.23371033345935  20.90481779098108
-  POINT  1787  18.44846900788159  21.34055417663924
-  POINT  1788  18.58165180641398  21.78818437573758
-  POINT  1789  17.87637081699702  21.33989302826688
-  POINT  1790  14.33939351436823  32.47590433579525
-  POINT  1791  14.48389140697212  31.91422614486741
-  POINT  1792  15.01628294267461  31.87205866229466
-  POINT  1793  14.75329046628237  31.48925416010179
-  POINT  1794  15.24379483009601  32.31759511000062
-  POINT  1795  13.51391520548446  23.95486250753157
-  POINT  1796  13.2557163229842  23.51457606093689
-  POINT  1797  12.99156814797479  23.95834021442671
-  POINT  1798  14.03636817864028  23.9505771134901
-  POINT  1799  14.30341655281701  23.50650040456918
-  POINT  1800  14.0490662851837  23.06997473842002
-  POINT  1801  14.57441945750685  23.06537678894744
-  POINT  1802  14.06279368008757  21.3236640608961
-  POINT  1803  13.53137856169023  21.32075100476631
-  POINT  1804  13.79945769458797  20.88653785779963
-  POINT  1805  16.48589251600749  21.75662015498322
-  POINT  1806  16.7770188066016  21.32987302051025
-  POINT  1807  16.23478715141826  21.32948158311302
-  POINT  1808  17.3448681568828  21.33058411749459
-  POINT  1809  17.55962683130505  21.76632050315274
-  POINT  1810  16.93904168525997  24.42265130776862
-  POINT  1811  17.21421228526815  24.86330083072308
-  POINT  1812  16.6810332475078  24.83472173963332
-  POINT  1813  17.1982158646259  23.98500607585395
-  POINT  1814  16.66503682686555  23.95642698476418
-  POINT  1815  19.16297996782281  24.02058583340057
-  POINT  1816  19.25792778397388  23.55188868076646
-  POINT  1817  19.6018346474257  23.97090400112769
-  POINT  1818  18.66035549167398  24.06458002427793
-  POINT  1819  18.99865807228879  24.48246002560036
-  POINT  1820  14.55271823159151  24.83011771959528
-  POINT  1821  15.07839080682226  24.82672945982152
-  POINT  1822  14.28780763486628  25.27536810389313
-  POINT  1823  13.48363738345204  10.68334955994101
-  POINT  1824  13.99771596520709  10.69103312467439
-  POINT  1825  17.49654751855807  12.39351922586987
-  POINT  1826  17.22317514403901  12.87270591921469
-  POINT  1827  17.0201728164883  12.42839146938536
-  POINT  1828  17.91955247554229  13.28295754083165
-  POINT  1829  18.19151987686094  12.8507518727688
-  POINT  1830  17.47351195554288  13.33558698027175
-  POINT  1831  18.00416107324389  12.39434056037404
-  POINT  1832  18.50176146164216  12.40494748537886
-  POINT  1833  17.80115874569317  11.95002611054472
-  POINT  1834  16.79404890136688  11.97251973589774
-  POINT  1835  16.52067652684781  12.45170642924257
-  POINT  1836  16.02797959823532  12.45898698827148
-  POINT  1837  15.78700936626793  12.00541048997754
-  POINT  1838  15.52043635277687  12.46856278249407
-  POINT  1839  16.05643793044336  11.55103582499389
-  POINT  1840  15.5488946849849  11.56061161921647
-  POINT  1841  16.57287799135018  11.53259751676433
-  POINT  1842  17.07237428099067  11.50928255690713
-  POINT  1843  15.83583901726724  10.22173398984722
-  POINT  1844  15.57327102716685  9.802415814168842
-  POINT  1845  16.10340565717593  9.787419712774863
-  POINT  1846  15.56201381820924  10.67148352273701
-  POINT  1847  16.63238319420686  9.754752209684828
-  POINT  1848  17.16253549533622  9.731242758971581
-  POINT  1849  16.36981520410647  9.335434034006447
-  POINT  1850  16.62468438429443  8.881552759389605
-  POINT  1851  16.09045850341202  8.917730295952133
-  POINT  1852  -18.71270480363148  19.99994720870178
-  POINT  1853  -18.52166623703531  20.45266088450229
-  POINT  1854  -18.52185800432806  19.54704841094098
-  POINT  1855  -19.52620606861738  21.34480663718991
-  POINT  1856  -19.49788131345209  21.77367208204773
-  POINT  1857  -19.95652172785348  21.31804421550326
-  POINT  1858  -18.93899138998692  21.35310882317254
-  POINT  1859  -15.41336472355292  32.74473177212385
-  POINT  1860  -14.91120300548017  32.71982820066302
-  POINT  1861  -15.24379759687971  32.31759127892943
-  POINT  1862  -15.51319663933861  31.8926193258387
-  POINT  1863  -15.01628432575631  31.8720563054135
-  POINT  1864  -15.8128873248544  31.48985418888792
-  POINT  1865  -16.04545639284706  31.93915110915433
-  POINT  1866  -13.73926553271729  29.7606245440472
-  POINT  1867  -13.9977196654956  29.30896632719983
-  POINT  1868  -13.48364033262393  29.31665160461403
-  POINT  1869  -16.63239437432929  30.24523068926878
-  POINT  1870  -16.89070674738754  29.81350290745965
-  POINT  1871  -17.16254826435143  30.26873590905672
-  POINT  1872  -17.58991750209542  28.49978947605134
-  POINT  1873  -18.10312108953776  28.50158849460802
-  POINT  1874  -14.02976207391727  24.83530603116176
-  POINT  1875  -13.50730912711314  24.83959146419358
-  POINT  1876  -13.7722197102861  24.39434106981482
-  POINT  1877  -9.910917163711101  29.30166999886159
-  POINT  1878  -10.16379441977193  28.85693149401143
-  POINT  1879  -10.42338196742408  29.30700642143803
-  POINT  1880  -8.865707288319939  20.4402358718522
-  POINT  1881  -8.354951980244287  20.44018950619541
-  POINT  1882  -8.61056647960487  20.88042659780381
-  POINT  1883  -8.86570719768363  19.55976134425465
-  POINT  1884  -8.354952278862285  19.55980826280008
-  POINT  1885  -8.610566687586559  19.11957082681093
-  POINT  1886  -9.121386103645744  19.99999862799004
-  POINT  1887  -9.377000603006326  20.44023571959844
-  POINT  1888  -9.377000512370016  19.55976119200088
-  POINT  1889  -8.865603022394847  21.32049699917977
-  POINT  1890  -8.354847714319193  21.32045063352298
-  POINT  1891  -8.099972462421654  21.76042830181979
-  POINT  1892  -7.844935919631678  21.32035790044383
-  POINT  1893  -8.354715320124482  22.20063713853177
-  POINT  1894  -7.844803525436967  22.20054440545263
-  POINT  1895  -8.865674199362843  22.20088990639256
-  POINT  1896  -8.610505262378155  22.6410060100254
-  POINT  1897  -8.354985291815844  16.91842867771209
-  POINT  1898  -8.610508524984098  17.358992612215
-  POINT  1899  -8.865944756334432  16.91817546724494
-  POINT  1900  -5.563175305433118  20.88175519528509
-  POINT  1901  -5.819523783751198  20.44055366808308
-  POINT  1902  -5.314081970855431  20.4412012668848
-  POINT  1903  -6.323600721688926  20.44055355863392
-  POINT  1904  -6.07450738711124  19.99999963023362
-  POINT  1905  -7.845909792127558  19.5598084686856
-  POINT  1906  -7.337224145127458  19.55973210578316
-  POINT  1907  -7.591126121765114  19.11954138245392
-  POINT  1908  -7.085296070269434  19.99999935639965
-  POINT  1909  -6.83051239990699  19.55973227016798
-  POINT  1910  -8.101050302224628  19.99999898612932
-  POINT  1911  -7.84590949350956  20.44018971208093
-  POINT  1912  -4.813437732774505  20.44120133195445
-  POINT  1913  -5.069786211092584  19.99999980475244
-  POINT  1914  -4.81343786679399  19.55879836960208
-  POINT  1915  -5.314082104874918  19.55879830453243
-  POINT  1916  -4.309046734147286  19.55755213850044
-  POINT  1917  -4.553342627929618  19.11635063828043
-  POINT  1918  -4.309046659354325  20.44244765252682
-  POINT  1919  -4.553342419117173  20.88364911465918
-  POINT  1920  -6.321208714327986  18.67923371725688
-  POINT  1921  -5.814542592123692  18.67893193845749
-  POINT  1922  -6.067133751274726  18.23927391170671
-  POINT  1923  -5.563175657876638  19.11824430669487
-  POINT  1924  -5.309100694823378  18.67828450114469
-  POINT  1925  -6.575529014970982  19.11917838177958
-  POINT  1926  -6.828120174122017  18.6795203550288
-  POINT  1927  -5.819524002175232  19.55944574184523
-  POINT  1928  -6.323600940112959  19.55944563239606
-  POINT  1929  -0.5146273697762991  39.02481064861751
-  POINT  1930  -0.7618926205908836  38.54195883210498
-  POINT  1931  -1.257892059341357  38.51315782905916
-  POINT  1932  -1.53117271934942  38.96511874796391
-  POINT  1933  -0.940335173160049  39.49328748376172
-  POINT  1934  -1.391488828330695  39.46383435979364
-  POINT  1935  -1.302906939267033  39.95751571405174
-  POINT  1936  -1.893411551831407  39.42424701152662
-  POINT  1937  -1.723324288351572  36.58041784013928
-  POINT  1938  -1.475258125341042  37.06753940845914
-  POINT  1939  -1.229223032035015  36.61216270438628
-  POINT  1940  -2.223574747428835  37.48318817291252
-  POINT  1941  -2.46865780151201  36.99209310268357
-  POINT  1942  -2.722873167283246  37.43948673138395
-  POINT  1943  -1.727946752245803  37.52870205304977
-  POINT  1944  9.124384730034761  25.2901944687983
-  POINT  1945  9.380903693723068  25.73399854252466
-  POINT  1946  8.869536394962354  25.73292170940668
-  POINT  1947  8.867787034579436  24.84742875339725
-  POINT  1948  8.611808211452907  24.40495794646223
-  POINT  1949  8.357038608147516  24.84664682874531
-  POINT  1950  9.37915433334015  24.84850558651523
-  POINT  1951  9.635034859880143  24.40616641167393
-  POINT  1952  9.891632555335468  24.84893212707499
-  POINT  1953  8.10306863199613  25.28792614032669
-  POINT  1954  7.847089808869599  24.84545533339167
-  POINT  1955  7.337860839610064  24.84465823087261
-  POINT  1956  7.591830815761451  24.40337891929124
-  POINT  1957  7.084483663987436  25.28568916804524
-  POINT  1958  6.829224670879288  24.84361275394481
-  POINT  1959  11.17838537690847  23.52246049961141
-  POINT  1960  11.4371216212408  23.08138069299567
-  POINT  1961  10.9206635519637  23.08206164870911
-  POINT  1962  15.02252590981234  31.03532490076284
-  POINT  1963  14.49013437410986  31.07749238333559
-  POINT  1964  14.2430236988951  30.6424489387683
-  POINT  1965  15.30010765104086  30.62772559584235
-  POINT  1966  2.526915485973436  17.35549624102799
-  POINT  1967  2.276071431689728  17.79312093621829
-  POINT  1968  2.781165078003321  17.79402703104667
-  POINT  1969  6.346618006894577  8.933221976655281
-  POINT  1970  6.606300654387716  8.482722162553308
-  POINT  1971  6.859007165943082  8.928198624363933
-  POINT  1972  5.835923918840571  8.936439330716784
-  POINT  1973  6.088630430395938  9.381915792527408
-  POINT  1974  3.813293467525553  0.8400220701018267
-  POINT  1975  4.278266624098441  0.9371921865469454
-  POINT  1976  4.091218596162663  0.4229233416757498
-  POINT  1977  0.7378420180172898  2.410751924726134
-  POINT  1978  1.233841522613396  2.439553016285871
-  POINT  1979  0.9905295332508535  1.949589272233458
-  POINT  1980  0.4905763428736994  2.888925646723056
-  POINT  1981  8.615527392862056  13.82496521644805
-  POINT  1982  8.869539085606789  14.26707992304672
-  POINT  1983  8.359008517018593  14.26876890588306
-  POINT  1984  7.109843205144307  9.375226262222675
-  POINT  1985  7.369525852637445  8.924726448120705
-  POINT  1986  3.536686478737197  13.8361386042247
-  POINT  1987  3.790057778698816  13.39355052709382
-  POINT  1988  3.284192797098449  13.39405264356153
-  POINT  1989  3.789177750276934  14.27725402423099
-  POINT  1990  3.283312768676568  14.27775614069871
-  POINT  1991  3.540719142764858  10.28304212363626
-  POINT  1992  3.793978675026311  10.72885668139838
-  POINT  1993  3.286497665917229  10.72924169735144
-  POINT  1994  6.845584714338232  10.71830373756566
-  POINT  1995  7.355184401511213  10.7157436111351
-  POINT  1996  7.09778359222352  11.16341894215851
-  POINT  1997  7.361673707732298  9.821191246260845
-  POINT  1998  6.851155021037934  9.824663422504075
-  POINT  1999  4.296500541441507  13.39272956312007
-  POINT  2000  4.044006859802759  12.95064360245691
-  POINT  2001  4.802971515540548  13.39198494333306
-  POINT  2002  4.549022434436605  13.83489186796998
-  POINT  2003  4.297887859095104  12.50674192674635
-  POINT  2004  3.791445096352413  12.5075628907201
-  POINT  2005  4.805074931872197  12.50557276622567
-  POINT  2006  4.552513168421852  12.06249205448886
-  POINT  2007  4.301274159001078  10.72795370371833
-  POINT  2008  4.809681854713771  10.7267995158349
-  POINT  2009  4.556607847586633  10.28150291979977
-  POINT  2010  4.047052682153449  11.17415327743351
-  POINT  2011  4.299837130886486  11.6184557573815
-  POINT  2012  3.79254164691172  11.61935873506155
-  POINT  2013  4.80702420366358  11.61728659686082
-  POINT  2014  0.7573648401832791  10.72884628711409
-  POINT  2015  0.2524954018262905  10.72868903454322
-  POINT  2016  0.5048694975539831  10.28178714397273
-  POINT  2017  2.779998485031843  10.72963471324423
-  POINT  2018  3.033258017293297  11.17544927100636
-  POINT  2019  1.22366534318951  19.99999999772072
-  POINT  2020  0.8995237534752946  20.45126532761548
-  POINT  2021  1.847863650156727  19.55191485745089
-  POINT  2022  2.318125048484836  19.5519148489978
-  POINT  2023  -18.93911412821423  18.64650966130721
-  POINT  2024  -18.58166026436047  18.21127422426079
-  POINT  2025  -18.44873810630657  18.65901836236396
-  POINT  2026  -19.52614063366966  18.65502631883318
-  POINT  2027  -18.87780139947743  17.75460066637132
-  POINT  2028  -18.38742537756978  17.76710936742808
-  POINT  2029  -19.25342558557374  17.32881436986417
-  POINT  2030  -19.44766047236443  17.77297922669689
-  POINT  2031  -11.69163369768068  12.03021037174421
-  POINT  2032  -11.44023229826493  11.57846213124561
-  POINT  2033  -11.43422134923478  12.47855566601287
-  POINT  2034  -11.94479073651165  12.47843921193948
-  POINT  2035  -10.92866196056182  11.58403125210506
-  POINT  2036  -10.41689637261445  11.58759636307505
-  POINT  2037  -10.66929872245644  12.03389193678758
-  POINT  2038  -11.18782994842294  11.13216655753308
-  POINT  2039  -9.904431558833004  11.59293222934731
-  POINT  2040  -9.39267865060485  11.59649123185834
-  POINT  2041  -9.139626886740061  11.15213642340234
-  POINT  2042  -8.880975554187973  11.60022024432364
-  POINT  2043  -10.16379479693838  11.14307154466478
-  POINT  2044  -9.910917079266454  10.69833254287327
-  POINT  2045  -10.4233818930479  10.69299667660101
-  POINT  2046  -8.370126273665381  11.60298203772225
-  POINT  2047  -8.62317803753017  12.04733684617825
-  POINT  2048  -6.319914164590672  17.79970756621019
-  POINT  2049  -5.813248042386378  17.79940578741079
-  POINT  2050  -5.812970532530068  16.03929555219032
-  POINT  2051  -6.066345556101558  16.47969823346978
-  POINT  2052  -6.320151886932637  16.03908136247431
-  POINT  2053  -5.812596328700657  16.91987593255003
-  POINT  2054  -6.319777683103225  16.91966174283402
-  POINT  2055  -5.306138086716437  16.03968131654242
-  POINT  2056  -5.559944417547516  15.59906444554695
-  POINT  2057  -4.799950565874155  16.03961222338507
-  POINT  2058  -5.052976680856709  16.47984333002844
-  POINT  2059  -6.574690167020133  15.59804862668566
-  POINT  2060  -6.828065190591623  16.03845130796511
-  POINT  2061  -15.25853880596588  12.9242213232549
-  POINT  2062  -15.52043648370752  12.46856362456286
-  POINT  2063  -15.01756861930122  12.47064487481246
-  POINT  2064  -14.50591702520376  13.37825294329215
-  POINT  2065  -13.99649188437294  13.37881945166879
-  POINT  2066  -14.24624580072877  12.92686908188113
-  POINT  2067  -14.50520649728844  12.47612567984228
-  POINT  2068  -14.76710417503007  12.02046798115024
-  POINT  2069  -13.99841660872912  11.58047866164933
-  POINT  2070  -13.74078007588788  12.02829192794356
-  POINT  2071  -13.99578135645762  12.47669218821891
-  POINT  2072  -13.48181937932821  12.47903532998241
-  POINT  2073  -17.13331118398057  10.61779162646253
-  POINT  2074  -17.656383083496  10.60573919584698
-  POINT  2075  -17.36873112769916  11.06026014994149
-  POINT  2076  -16.02797983714253  12.45898801730209
-  POINT  2077  -16.52067686245398  12.45170765846319
-  POINT  2078  -16.25410369568363  12.9148597141664
-  POINT  2079  -15.78700965047787  12.00541156885965
-  POINT  2080  -17.58990196620047  11.50018232123824
-  POINT  2081  -17.80115956030314  11.95002810346316
-  POINT  2082  -18.10310561939233  11.49837858894322
-  POINT  2083  -17.07237505905118  11.50928449184498
-  POINT  2084  -17.49654816974892  12.39352110356614
-  POINT  2085  -16.79404945073268  11.9725213123703
-  POINT  2086  -16.57287861223137  11.53259914107355
-  POINT  2087  -17.02017330927379  12.42839300923462
-  POINT  2088  -17.22317558147022  12.87270744965903
-  POINT  2089  -10.15245041339834  12.93005084479948
-  POINT  2090  -10.41083981014142  12.48260744897875
-  POINT  2091  -10.92260539808879  12.47904233800876
-  POINT  2092  -11.17576243691975  12.92727117820404
-  POINT  2093  -12.45674776247602  13.37407164467716
-  POINT  2094  -12.19976115126335  12.92710572491763
-  POINT  2095  -11.94436499927842  13.37375042596768
-  POINT  2096  -12.45717349970925  12.47876043064897
-  POINT  2097  -12.96948100660971  12.47903100666709
-  POINT  2098  -13.22448228717945  12.92743126694244
-  POINT  2099  -12.7156240960693  13.82239971451288
-  POINT  2100  -12.97772467480737  14.26819310667658
-  POINT  2101  -13.74302984524772  13.82714319818918
-  POINT  2102  -13.48335862077273  13.37575933677816
-  POINT  2103  -12.97102024805423  13.37575501346284
-  POINT  2104  -12.66774364330618  4.523299107507239
-  POINT  2105  -12.60490407255786  4.990136093565923
-  POINT  2106  -12.20023269789926  4.658910900843035
-  POINT  2107  -12.93462919488069  5.358202577882016
-  POINT  2108  -12.47144927438711  5.488522975166397
-  POINT  2109  -13.43620550685972  5.185534732811357
-  POINT  2110  -14.33938229564766  7.524096539708034
-  POINT  2111  -14.9111947654232  7.280162642147666
-  POINT  2112  -15.24378862055976  7.682398206427763
-  POINT  2113  -15.41335736818264  7.255259352596772
-  POINT  2114  -15.01627536647982  8.127933305249282
-  POINT  2115  -15.30010260228938  9.372269247130333
-  POINT  2116  -15.02252082546601  8.964670165888624
-  POINT  2117  -14.24302038469975  9.357551373852861
-  POINT  2118  -14.50635377271081  9.811747310474253
-  POINT  2119  -13.99000785292662  9.792863973386861
-  POINT  2120  -16.10340678976494  9.787421896710498
-  POINT  2121  -16.63238487037844  9.754755103146911
-  POINT  2122  -16.89069641342317  10.18648047123871
-  POINT  2123  -17.16253750713551  9.731246135309691
-  POINT  2124  -16.60858944999246  10.6380511653244
-  POINT  2125  -11.70834855106328  10.22274842325977
-  POINT  2126  -11.44840726006248  10.67917056592608
-  POINT  2127  -10.94524324959301  9.788054215548343
-  POINT  2128  -10.68395920468744  10.24000068499402
-  POINT  2129  -10.93683692235937  10.68473968678553
-  POINT  2130  -11.47479555660216  8.87906931844303
-  POINT  2131  -11.20910685279271  9.331122511448264
-  POINT  2132  -11.46127783719861  9.774811991078451
-  POINT  2133  -11.97221215426297  9.765816719159695
-  POINT  2134  -12.23551219984005  9.302086962350581
-  POINT  2135  -12.48258291370472  9.750023394531905
-  POINT  2136  -11.99907298758307  8.856941095902805
-  POINT  2137  -13.48363744127368  10.68335058227913
-  POINT  2138  -12.97061921339908  10.68124949973901
-  POINT  2139  -12.72223329311703  10.22272288939034
-  POINT  2140  -13.73926247952205  10.23937626872396
-  POINT  2141  -13.99771620268931  10.69103422356342
-  POINT  2142  -13.47592909151099  9.785180332102566
-  POINT  2143  -12.98553333869411  9.758993132581228
-  POINT  2144  -10.99496024845769  5.244137851664762
-  POINT  2145  -10.72127136894942  4.813791227183295
-  POINT  2146  -11.76362091609507  4.48995017920419
-  POINT  2147  -11.70511237026007  4.951495769211457
-  POINT  2148  -11.39311338658647  4.215969615852156
-  POINT  2149  -11.89139041445578  3.919115893213245
-  POINT  2150  -12.24027988776031  5.8641325949175
-  POINT  2151  -11.91055476543747  5.496066110601405
-  POINT  2152  -11.20040264363509  5.788708193054712
-  POINT  2153  -11.44644349888066  6.284936460155964
-  POINT  2154  -11.47394298363328  5.327105388962559
-  POINT  2155  -12.58774158616357  7.077264164985817
-  POINT  2156  -12.04126943591853  7.115558718704478
-  POINT  2157  -11.99490361784541  6.277557986686686
-  POINT  2158  -12.55579812679505  6.270014851251677
-  POINT  2159  -12.88263830348879  6.618639040367921
-  POINT  2160  -11.7619617379154  6.690818716490142
-  POINT  2161  12.04126828125696  7.115556461827698
-  POINT  2162  11.49280873218955  7.122935250752073
-  POINT  2163  11.76196034822392  6.690816131315052
-  POINT  2164  11.49828322279317  7.993966546699665
-  POINT  2165  12.0225605432701  7.971838012441538
-  POINT  2166  12.88263546208822  6.61863544281538
-  POINT  2167  13.12801043982883  6.205208828783831
-  POINT  2168  12.55579487503194  6.270010728359129
-  POINT  2169  13.69336976028337  6.949530619644269
-  POINT  2170  13.96433801939816  6.375677941228949
-  POINT  2171  13.62552731853477  6.037014047096381
-  POINT  2172  14.13907079774611  5.854800214333848
-  POINT  2173  11.99490119766059  6.277554553029752
-  POINT  2174  11.44644164859318  6.284933341954128
-  POINT  2175  11.20040012011418  5.788704856543246
-  POINT  2176  11.91055022392465  5.49606120424435
-  POINT  2177  12.2402761754012  5.864127938998204
-  POINT  2178  11.47393849027101  5.327100831915041
-  POINT  2179  9.945582057420673  6.181899969396367
-  POINT  2180  10.20212439794679  5.720745644346648
-  POINT  2181  9.928434604118719  5.290398733084792
-  POINT  2182  8.556931258789588  2.528832819977453
-  POINT  2183  8.146974075985931  2.334700766962239
-  POINT  2184  8.559631278214885  1.92425070776564
-  POINT  2185  15.01627398335804  8.127930948668869
-  POINT  2186  15.51318585031227  8.107366722466351
-  POINT  2187  15.56325582361871  8.960502416532755
-  POINT  2188  15.81287665995519  8.510131175388402
-  POINT  2189  16.04544432483895  8.060832677422217
-  POINT  2190  14.75328392450536  8.510740088180491
-  POINT  2191  13.08140472470578  7.902147488418196
-  POINT  2192  13.39847454267256  7.408156657639373
-  POINT  2193  13.15995580927431  7.012459581235187
-  POINT  2194  12.58774024447741  7.077261480810485
-  POINT  2195  12.31858862844304  7.509380600247505
-  POINT  2196  12.56903250649056  7.933543031424325
-  POINT  2197  10.94524346823205  9.788053798414385
-  POINT  2198  11.20910703176076  9.331121907385405
-  POINT  2199  10.95876112935163  8.892310914863021
-  POINT  2200  10.43863740166071  8.90091810703888
-  POINT  2201  10.70432605267283  8.448864704310473
-  POINT  2202  10.17836257478566  9.351235759588613
-  POINT  2203  9.923927498106863  8.907789549036064
-  POINT  2204  10.43178843022046  9.796310885123368
-  POINT  2205  9.917078526666614  9.803182327120552
-  POINT  2206  10.683959420113  10.24000036594633
-  POINT  2207  0.4257056342687726  0.4866078143970918
-  POINT  2208  0.4258045314381747  0.00453325099778762
-  POINT  2209  -8.556941856736707  2.528837422625263
-  POINT  2210  -8.610159650802313  3.016790167285516
-  POINT  2211  -8.395989123541707  3.439640495050862
-  POINT  2212  -8.14698450737254  2.334704873539675
-  POINT  2213  -7.792710741676334  2.625579213893601
-  POINT  2214  -8.55964628277413  1.924257823018384
-  POINT  2215  -9.473525601179848  4.277847459291598
-  POINT  2216  -8.926778041898604  4.355756346121653
-  POINT  2217  -9.691050900332758  4.805957037797565
-  POINT  2218  -9.956516850290052  4.316937828288013
-  POINT  2219  -8.686199335312255  4.812171506430753
-  POINT  2220  -8.404917725988305  4.401061183751255
-  POINT  2221  -9.445445922262575  5.251310504414456
-  POINT  2222  -10.19419874351271  3.913941535915821
-  POINT  2223  -10.41172404266562  4.442051114421789
-  POINT  2224  -10.95895326217208  4.410794934811104
-  POINT  2225  -11.08356606030267  3.84422950309065
-  POINT  2226  -10.65318906962747  3.557421534579559
-  POINT  2227  -11.09105814178689  3.357030647526714
-  POINT  2228  -9.694219594930232  6.638197533051649
-  POINT  2229  -9.431468981222594  6.192050880977571
-  POINT  2230  -0.7570180027335149  9.832621255886785
-  POINT  2231  -0.5048693800457256  10.28178717573282
-  POINT  2232  -0.2521485634907947  9.832463971555836
-  POINT  2233  -6.855131749277465  1.732845876664869
-  POINT  2234  -6.972438504319116  2.219795679489987
-  POINT  2235  -6.414622035057123  1.574492892908077
-  POINT  2236  -6.765669841096464  1.179115021389632
-  POINT  2237  -1.004871482698477  7.572984637225677
-  POINT  2238  -1.257490486514399  8.028793797334046
-  POINT  2239  -0.7545338586426834  8.025313601582315
-  POINT  2240  -1.762470594293599  8.030999493773637
-  POINT  2241  -1.512132970237805  8.483328458130275
-  POINT  2242  -1.229222734249484  3.387837151439014
-  POINT  2243  -0.9842473157104142  3.857601341818763
-  POINT  2244  -2.760974422104667  6.228081510033119
-  POINT  2245  -2.253497692870489  6.221058881823054
-  POINT  2246  -2.513284803608339  6.678759929530004
-  POINT  2247  -2.22068215594449  0.1236680774559861
-  POINT  2248  -1.893412282768675  0.5757529280991733
-  POINT  2249  -0.7618927259509458  1.458040956527683
-  POINT  2250  -0.514627501401715  0.975189189825712
-  POINT  2251  -0.9403354900406863  0.5067124244511273
-  POINT  2252  -1.391489330979924  0.5361655784306855
-  POINT  2253  -1.302907496264832  0.04248432242006185
-  POINT  2254  -1.531173210898604  1.03488105453053
-  POINT  2255  -1.759815051157529  1.526429257888473
-  POINT  2256  -1.982161883684216  2.023903928033029
-  POINT  2257  -0.9905345662098708  1.949589159885626
-  POINT  2258  -1.233845294320426  2.439552824859994
-  POINT  2259  -1.257892099368779  1.486841908219986
-  POINT  2260  -4.253221810686109  1.820570946531706
-  POINT  2261  -4.758491289411085  1.8896992927888
-  POINT  2262  0.9403284851173297  39.49328748546868
-  POINT  2263  1.302900066834092  39.9575161643721
-  POINT  2264  0.4257054490154915  39.51339213116585
-  POINT  2265  0.4258043460689575  39.99546675296004
-  POINT  2266  0.7378421542620126  37.58924786878497
-  POINT  2267  1.23384172418566  37.56044672587291
-  POINT  2268  0.4905764528571049  37.11107417865601
-  POINT  2269  -0.2485634106147014  34.74540615296891
-  POINT  2270  -0.4944721332766874  35.20892213996861
-  POINT  2271  -0.7430353076084667  34.7387144383873
-  POINT  2272  0.248563135802923  34.74540613716317
-  POINT  2273  -3.852885629984648e-08  34.27519843558186
-  POINT  2274  -0.984247561800016  36.14239856410436
-  POINT  2275  -0.7361813987894855  36.62952013242423
-  POINT  2276  -0.2456036251004044  36.64131010369253
-  POINT  2277  -0.7400749794124697  35.68099320876465
-  POINT  2278  -1.233116612657999  35.66363578072671
-  POINT  2279  -0.2456030824187044  35.68768492334626
-  POINT  2280  -0.5050495520169673  27.93392892167996
-  POINT  2281  -0.2524953199740186  28.37907783165175
-  POINT  2282  -0.7575449060331049  28.37910298308664
-  POINT  2283  0.5049254003565739  26.16245156440273
-  POINT  2284  0.2524838536841221  26.60459196252057
-  POINT  2285  0.7574092359319105  26.60463622076165
-  POINT  2286  1.262484608430572  26.60474311400658
-  POINT  2287  1.010043061758121  27.04688351212442
-  POINT  2288  1.767930132642603  27.49060027590907
-  POINT  2289  2.02050092362578  27.04726519540428
-  POINT  2290  2.2733126220116  27.490875065944
-  POINT  2291  4.294356946623791  24.8410616389421
-  POINT  2292  4.547087505439189  24.40041073521517
-  POINT  2293  4.800380884839186  24.84120087084955
-  POINT  2294  4.293926155091318  23.96024866126563
-  POINT  2295  4.799950093306713  23.96038789317308
-  POINT  2296  3.788414878485399  23.96059221848699
-  POINT  2297  4.041277466352923  23.5205693764449
-  POINT  2298  1.514809999556898  24.40061413188652
-  POINT  2299  1.767492707689488  23.96146212230959
-  POINT  2300  1.262539709988568  23.9615922644941
-  POINT  2301  7.321627964579404  38.17042681938287
-  POINT  2302  7.793206680574138  37.97435229673911
-  POINT  2303  7.678404262385088  38.46732542318286
-  POINT  2304  6.972433698867157  37.78020975935011
-  POINT  2305  6.855127394446583  38.26716082157134
-  POINT  2306  6.414615189107867  38.42551451657923
-  POINT  2307  6.765662894204413  38.82088748771397
-  POINT  2308  5.835924386613025  31.06356123096226
-  POINT  2309  6.346618511134158  31.06677866630198
-  POINT  2310  6.088630850338571  30.61808479345149
-  POINT  2311  5.582224837246878  31.5099791769925
-  POINT  2312  10.95894851210964  35.58920884422533
-  POINT  2313  11.39310711972735  35.78403513220901
-  POINT  2314  10.72126794961869  35.18621162434592
-  POINT  2315  10.41172000961541  35.55795193531766
-  POINT  2316  10.44772930264001  34.72460793267786
-  POINT  2317  10.99495780513424  34.75586484158553
-  POINT  2318  9.020612145212025  37.38901099607349
-  POINT  2319  9.424228545153195  37.64040579751443
-  POINT  2320  9.474330615488972  37.14661597391932
-  POINT  2321  8.40491449200708  35.59893959494738
-  POINT  2322  8.926774996129321  35.64424422876988
-  POINT  2323  8.686196885775953  35.18782930360295
-  POINT  2324  8.152785656806662  36.06385741842882
-  POINT  2325  7.912207546453292  35.6074424932619
-  POINT  2326  9.956512910039363  35.68306455775935
-  POINT  2327  9.473521881426226  35.72215416875295
-  POINT  2328  9.691048418511331  35.19404432643185
-  POINT  2329  10.19419347253031  36.08606177763876
-  POINT  2330  9.192239487657353  36.13326446009738
-  POINT  2331  9.406409183385882  36.55611572705381
-  POINT  2332  8.859662298088979  36.47820578707073
-  POINT  2333  10.19797450918269  36.5676960857483
-  POINT  2334  9.806907805057346  36.80167464694597
-  POINT  2335  10.26856200452538  37.16265232046304
-  POINT  2336  6.871912061838399  35.54333618666676
-  POINT  2337  7.405021657601408  35.59824784517664
-  POINT  2338  7.126969115489866  36.01744865823345
-  POINT  2339  7.657150492801826  35.13333002169522
-  POINT  2340  6.621960666341595  35.0990227984202
-  POINT  2341  6.888811633623055  34.66573394307474
-  POINT  2342  6.360807696014708  34.64062136788498
-  POINT  2343  6.343908124230053  35.518223611477
-  POINT  2344  7.402796728654058  34.67408026698564
-  POINT  2345  7.141643758327172  34.21567883645042
-  POINT  2346  7.909982617505943  34.68327491507089
-  POINT  2347  3.322763046202144  39.2378007288512
-  POINT  2348  3.15663647718721  39.74932014657087
-  POINT  2349  3.813291001601433  39.15997825895766
-  POINT  2350  4.091217816567636  39.57707682242515
-  POINT  2351  3.510964067743604  38.72905450866509
-  POINT  2352  2.255436314939442  38.42805648019456
-  POINT  2353  1.982157396380489  37.97609549035852
-  POINT  2354  2.749110842047252  38.36872932479956
-  POINT  2355  6.081230166453511  35.97194010898045
-  POINT  2356  5.818441994459794  36.44062612474002
-  POINT  2357  6.331071347733141  36.43122301548313
-  POINT  2358  5.320795889254486  36.4447624160653
-  POINT  2359  5.570637070534115  36.904045322568
-  POINT  2360  5.831278770956706  35.52762672073389
-  POINT  2361  5.970382527196483  38.42268507006546
-  POINT  2362  6.061700466822952  37.87411431502481
-  POINT  2363  5.314747458531205  38.19213207237964
-  POINT  2364  5.061201838228348  37.78945770174573
-  POINT  2365  5.345229385120188  37.38973324120216
-  POINT  2366  5.842875490325496  37.38559694987687
-  POINT  2367  6.287108152236881  37.38842639639064
-  POINT  2368  5.556022539290377  38.55085980808124
-  POINT  2369  5.910327271106762  39.10675356293056
-  POINT  2370  4.527223806949365e-08  28.82425190516497
-  POINT  2371  0.2524954118648361  29.271311063285
-  POINT  2372  -0.2524953073975582  29.27131105117846
-  POINT  2373  0.7573648797635052  29.27115381803919
-  POINT  2374  0.2524953992883756  28.37907784375829
-  POINT  2375  2.273105925774813  30.16491138028067
-  POINT  2376  1.767218293970705  30.16613550136842
-  POINT  2377  1.515144076936485  29.71762621682329
-  POINT  2378  2.526574159573979  27.93457399209241
-  POINT  2379  2.779582705512834  28.37954785163075
-  POINT  2380  2.273750376967278  28.37918400598714
-  POINT  2381  3.286081896042008  28.37994089986349
-  POINT  2382  3.033258113435307  28.82455091375822
-  POINT  2383  3.538866301224259  27.9356384317024
-  POINT  2384  3.792541709146731  28.38064149382986
-  POINT  2385  2.779144950557156  27.49123891158762
-  POINT  2386  -0.2509574395584928  32.89023083452718
-  POINT  2387  -0.5001445292837633  33.34678369244119
-  POINT  2388  -0.248563270487983  33.81258223243197
-  POINT  2389  -0.7487078437422611  33.80939991139683
-  POINT  2390  0.2485632759296414  33.81258221662623
-  POINT  2391  0.7557252605028959  31.06778977059484
-  POINT  2392  0.5035766139793988  31.51991170020357
-  POINT  2393  0.2521487272230526  31.06882402404262
-  POINT  2394  1.512133316893194  31.51667185955954
-  POINT  2395  1.257490837521165  31.97120645676332
-  POINT  2396  1.762471007155117  31.96900086956706
-  POINT  2397  1.26052028816003  31.06697586732646
-  POINT  2398  4.299971210771425  32.85149278176542
-  POINT  2399  4.813858896773226  32.84793939933139
-  POINT  2400  4.555689088750212  33.29824097344651
-  POINT  2401  4.047040589691667  32.40376536153468
-  POINT  2402  3.788870781668652  32.85406693564981
-  POINT  2403  1.99779136886551  34.24333877774004
-  POINT  2404  1.739534188555335  34.71160974839909
-  POINT  2405  2.242930868975687  34.69789125435826
-  POINT  2406  1.750101670519205  33.79266021463997
-  POINT  2407  2.253498350939557  33.77894172059914
-  POINT  2408  4.811613439274451  30.16570216508861
-  POINT  2409  4.556608060237682  29.71849742642267
-  POINT  2410  4.303205728751885  30.16454791935548
-  POINT  2411  5.321476248288842  30.16725951513379
-  POINT  2412  5.830756015410285  30.16946429579235
-  POINT  2413  6.341450139931419  30.17268173113207
-  POINT  2414  5.574295537881691  29.72185645281436
-  POINT  2415  4.303354423758809  31.05895384807756
-  POINT  2416  4.559517683407055  31.50692914415298
-  POINT  2417  4.303319379261703  31.953673122892
-  POINT  2418  4.814339322939793  31.95444722891127
-  POINT  2419  3.792218950158929  31.95624727677639
-  POINT  2420  3.53960420638969  31.50780686224725
-  POINT  2421  3.283325416819654  31.95789910088994
-  POINT  2422  18.93911406219143  18.64650935978337
-  POINT  2423  19.5261405338395  18.65502620489522
-  POINT  2424  19.39362763295739  15.11254594470878
-  POINT  2425  18.99857188883907  15.51737654824043
-  POINT  2426  19.25787290188996  16.44788794426737
-  POINT  2427  18.75405232248962  16.85355794479968
-  POINT  2428  19.18738723924495  16.90476516850342
-  POINT  2429  18.37155330956431  16.4239303910665
-  POINT  2430  18.3010676469193  16.88080761530255
-  POINT  2431  18.66020366196966  15.9349676413002
-  POINT  2432  19.16290621200404  15.97908962750386
-  POINT  2433  19.60184782770187  16.0291610895696
-  POINT  2434  17.74265060326497  16.90620537096182
-  POINT  2435  18.12514961619028  17.335832924695
-  POINT  2436  15.35519968440101  23.50052060043794
-  POINT  2437  15.61382388545503  23.94120904958511
-  POINT  2438  16.14374614558074  23.94660548122907
-  POINT  2439  15.87594038737391  24.38867578503489
-  POINT  2440  16.40292032494667  23.50896024931439
-  POINT  2441  14.04156102276654  20.44473665232049
-  POINT  2442  13.5101459043692  20.44182359619071
-  POINT  2443  13.23791783332129  20.0000177682021
-  POINT  2444  12.99581450514272  20.44181897368124
-  POINT  2445  14.32798942893715  21.75754985993104
-  POINT  2446  14.59066675027901  22.19303681739878
-  POINT  2447  14.05739186853169  22.19336416533053
-  POINT  2448  14.59606856183489  21.32333671296435
-  POINT  2449  17.02043936108002  17.36861009534426
-  POINT  2450  16.75104595303201  17.80975860309653
-  POINT  2451  17.29733916448795  17.80237918810654
-  POINT  2452  16.8825211737115  20.00090158182218
-  POINT  2453  16.50015673941269  20.45264191937547
-  POINT  2454  16.08514518550571  20.00088643540819
-  POINT  2455  16.11090188810538  20.45097896467276
-  POINT  2456  15.67928540345191  21.32845415312463
-  POINT  2457  15.97041169404601  20.90170701865165
-  POINT  2458  15.55540014013904  20.44995153468437
-  POINT  2459  15.13808712838207  21.32895105033127
-  POINT  2460  15.40246258575432  21.75672561479265
-  POINT  2461  14.87289137953249  20.89506525129633
-  POINT  2462  16.20906446251038  17.81010162569915
-  POINT  2463  16.48596426591832  18.24387071846142
-  POINT  2464  17.67264086770901  25.76730075340195
-  POINT  2465  17.52697787020489  25.32168372621399
-  POINT  2466  17.1018668450201  25.72098828977573
-  POINT  2467  17.78498630795706  24.9096132943493
-  POINT  2468  18.29689274451687  24.94722520315896
-  POINT  2469  17.98412715958014  24.48884230766805
-  POINT  2470  18.19154482344632  27.14919909897187
-  POINT  2471  18.00418440385464  27.60561752382607
-  POINT  2472  18.50178002760287  27.59500731331329
-  POINT  2473  17.22320550548447  27.12725699911247
-  POINT  2474  16.99718056314592  26.6294993269721
-  POINT  2475  17.47355478486276  26.66436298910405
-  POINT  2476  14.77835587396051  33.47591176927389
-  POINT  2477  14.5037091327629  32.89870630528225
-  POINT  2478  14.20286679509669  33.2286249931342
-  POINT  2479  14.91119950175903  32.71983261654729
-  POINT  2480  15.41335988088872  32.74473764552774
-  POINT  2481  13.26816755360081  21.75856091096891
-  POINT  2482  13.0048315681012  21.32143470787244
-  POINT  2483  16.7511085267673  22.19060870549156
-  POINT  2484  16.20887687158396  22.19021726809433
-  POINT  2485  16.17786126300281  23.06167228219098
-  POINT  2486  16.69915194428762  23.07149378572608
-  POINT  2487  16.13755756315898  24.82813436948326
-  POINT  2488  16.41272816316716  25.26878389243772
-  POINT  2489  15.60763530303328  24.82273793783929
-  POINT  2490  15.34000798260733  25.26618804426989
-  POINT  2491  15.57192146402785  25.71183427290126
-  POINT  2492  15.04267696781684  25.71582579488349
-  POINT  2493  19.39363952846237  24.88740687823191
-  POINT  2494  18.885848220639  24.93009895932983
-  POINT  2495  18.68670736901592  25.35086994601108
-  POINT  2496  19.15366600169464  25.75648146541981
-  POINT  2497  18.56007556635269  25.77221469844787
-  POINT  2498  17.29751718982028  22.19792338787625
-  POINT  2499  17.82901984993449  22.20723229864854
-  POINT  2500  17.02050154539675  22.63152050098736
-  POINT  2501  17.2455606073406  23.07880846811078
-  POINT  2502  17.69547194751031  24.00000391993576
-  POINT  2503  18.20737838407013  24.03761582874543
-  POINT  2504  18.37170027960414  23.57574163654564
-  POINT  2505  17.42146708911589  23.53377959693132
-  POINT  2506  17.74281669022501  23.0938063121926
-  POINT  2507  15.25853878864088  12.92422065523148
-  POINT  2508  15.0175685566735  12.47064415693754
-  POINT  2509  17.58990097002385  11.50018009270076
-  POINT  2510  17.36873006000716  11.06025787356734
-  POINT  2511  18.10310452692819  11.49837625079764
-  POINT  2512  17.65638158620408  10.60573636868109
-  POINT  2513  15.04253498339223  10.68172168255394
-  POINT  2514  14.51635320344969  10.68688592002177
-  POINT  2515  14.77952260731562  10.24189432870903
-  POINT  2516  14.26072834128369  11.1308604785193
-  POINT  2517  15.29884441434331  11.11647511404975
-  POINT  2518  15.02941585016789  11.5708497790334
-  POINT  2519  -5.559612278106096  22.64037941022797
-  POINT  2520  -5.812595406053648  23.08012397436108
-  POINT  2521  -5.306180262645629  23.08034305013044
-  POINT  2522  -11.43576012403759  16.0359829772844
-  POINT  2523  -10.91930130833142  16.03530291420144
-  POINT  2524  -11.17839236720871  16.47753707839758
-  POINT  2525  -11.95093603481484  15.1524484606076
-  POINT  2526  -12.46808184577289  15.15416888873691
-  POINT  2527  -11.69363999436943  15.59489173025373
-  POINT  2528  -11.43396510560572  15.15130554344212
-  POINT  2529  -11.95273105324672  16.03712589444988
-  POINT  2530  -11.43712821990608  16.91861467088325
-  POINT  2531  -10.92066940419991  16.91793460780029
-  POINT  2532  -10.6635990468805  17.35875835728356
-  POINT  2533  -10.40486319418314  16.91768076479789
-  POINT  2534  -10.92128585029515  17.79908423287577
-  POINT  2535  -10.40547964027838  17.79883038987337
-  POINT  2536  -11.17515797884532  20.00000102031307
-  POINT  2537  -11.43519237168078  19.55947185837874
-  POINT  2538  -10.91971864863478  19.55946991621752
-  POINT  2539  -17.69355183457131  26.21921688206146
-  POINT  2540  -17.91957704254855  26.71697422906539
-  POINT  2541  -17.47355512042661  26.66436143557672
-  POINT  2542  -18.41154214164629  26.7040528116507
-  POINT  2543  -18.5809866532765  26.22413096385403
-  POINT  2544  -18.85906250548473  26.65851045942693
-  POINT  2545  -18.58165190157233  21.78818398655776
-  POINT  2546  -18.38730056826177  22.23230077017542
-  POINT  2547  -18.87782301108845  22.24485568342974
-  POINT  2548  -18.44846894716024  21.34055390991821
-  POINT  2549  -12.97062101492125  29.31875403642425
-  POINT  2550  -12.46767030297665  29.32772470608927
-  POINT  2551  -12.72223548790102  29.77728049112642
-  POINT  2552  -13.22907514769955  28.86709581957689
-  POINT  2553  -14.51635826947124  29.31311155849969
-  POINT  2554  -14.26073306937787  28.86913861906651
-  POINT  2555  -14.51706009046056  28.4236684902674
-  POINT  2556  -13.99842148648492  28.41952325896755
-  POINT  2557  -14.7795280512982  29.75810081374213
-  POINT  2558  -15.03254101741964  30.19341176913132
-  POINT  2559  -14.50635783171041  30.1882502220222
-  POINT  2560  -15.04254145518047  29.31827310560881
-  POINT  2561  -15.56202218869213  29.32850735956158
-  POINT  2562  -16.09215847892137  29.34349976240278
-  POINT  2563  -15.83584752723667  29.77825476369244
-  POINT  2564  -15.29885240686518  28.88351810431914
-  POINT  2565  -15.56326504283053  31.03948508656246
-  POINT  2566  -16.09046899946972  31.08225492312761
-  POINT  2567  -16.36982582431926  30.66455001640303
-  POINT  2568  -16.62469646598935  31.11842918285091
-  POINT  2569  -16.10341526745587  30.2125664936679
-  POINT  2570  -15.57327897722664  30.1975740908267
-  POINT  2571  -15.30010875763884  30.62772349910677
-  POINT  2572  -15.02252708302353  31.03532276486708
-  POINT  2573  -17.36874409487987  28.93971676960333
-  POINT  2574  -17.07238964582313  28.49069203988263
-  POINT  2575  -16.33477468949221  28.91218584585327
-  POINT  2576  -16.60860002803674  29.36193324998413
-  POINT  2577  -17.13332295795837  29.38218899091014
-  POINT  2578  -17.65639589526919  29.39423674904752
-  POINT  2579  -16.5728923949743  28.46738370478237
-  POINT  2580  -16.79406580218986  28.02745641123038
-  POINT  2581  -16.05645084585894  28.44895021720102
-  POINT  2582  -11.43421905289848  27.52144951460756
-  POINT  2583  -11.6916320508292  27.96979564432751
-  POINT  2584  -11.94478840412654  27.52156732452448
-  POINT  2585  -10.92260322222589  27.52096203886612
-  POINT  2586  -11.17575957552322  27.07273371906309
-  POINT  2587  -14.54458520175707  20.44472116630428
-  POINT  2588  -14.04156085494355  20.44473661417197
-  POINT  2589  -14.25527342288196  20.00000694189264
-  POINT  2590  -13.74078421360634  27.97171208992312
-  POINT  2591  -13.48445719252365  28.41718221872224
-  POINT  2592  -12.97143787482097  28.41928465053246
-  POINT  2593  -12.71451066085117  27.96964225196112
-  POINT  2594  -12.45912861602707  28.41955585281577
-  POINT  2595  -16.25413008413381  27.08512273155318
-  POINT  2596  -16.52070005962864  27.54827010780237
-  POINT  2597  -16.0279985758462  27.54100069988094
-  POINT  2598  -17.02019731047746  27.57157844290263
-  POINT  2599  -17.22320594816005  27.12725546102763
-  POINT  2600  -16.99718074018281  26.6294981140237
-  POINT  2601  -15.51800943988496  26.61966242771222
-  POINT  2602  -15.01513775921834  26.61758552880125
-  POINT  2603  -15.25855691968476  27.07577642472079
-  POINT  2604  -12.20839980609971  25.28942190368818
-  POINT  2605  -12.46344601370725  25.73349604427731
-  POINT  2606  -11.94630087233431  25.73521605642329
-  POINT  2607  -12.46807352183216  24.84583381340267
-  POINT  2608  -11.95092838045923  24.84755382554865
-  POINT  2609  -12.98765585547731  24.84316419719443
-  POINT  2610  -12.73018442983683  24.40129611905489
-  POINT  2611  -13.24519821910848  25.28412915854135
-  POINT  2612  -9.129651643227703  27.06523077144557
-  POINT  2613  -8.876288684125369  27.50911488874473
-  POINT  2614  -9.387389242004456  27.51154300998024
-  POINT  2615  -11.43269449945645  25.7358488670784
-  POINT  2616  -11.68774070706399  26.17992300766753
-  POINT  2617  -11.43075487019097  26.62688850656359
-  POINT  2618  -11.94436124306884  26.62625569590848
-  POINT  2619  -10.91913903951838  26.62640103082215
-  POINT  2620  -11.43575265155543  23.96401593507675
-  POINT  2621  -10.91929460003396  23.9646969017269
-  POINT  2622  -11.17838521827446  23.52246042867934
-  POINT  2623  -11.43395834902085  24.84869716197923
-  POINT  2624  -11.6936320647533  24.40510907169372
-  POINT  2625  -11.9527226829938  23.96287259864617
-  POINT  2626  -9.674059715189312  31.54309886182291
-  POINT  2627  -9.923928805191473  31.0922115971265
-  POINT  2628  -9.413784457395401  31.09278152867489
-  POINT  2629  -7.33625026584593  21.32043467489033
-  POINT  2630  -7.591125517743469  20.88045700659352
-  POINT  2631  -7.337223839723812  20.44026648652743
-  POINT  2632  -6.830512094503344  20.44026665091224
-  POINT  2633  -6.575528491143303  20.88082068876169
-  POINT  2634  -6.828119317097339  21.32047870894126
-  POINT  2635  -7.081929718985547  21.76037960279158
-  POINT  2636  -6.321207944282921  21.32076561666295
-  POINT  2637  -8.865941131087769  23.08182349266286
-  POINT  2638  -8.35498225184941  23.08157072480208
-  POINT  2639  -8.866487325995669  23.96406401648594
-  POINT  2640  -8.355738913521897  23.96328209781178
-  POINT  2641  -8.611808118958542  24.40495790685818
-  POINT  2642  -9.122215297035932  23.52275432385121
-  POINT  2643  -9.377738307564679  23.08218960907453
-  POINT  2644  -9.378284502472578  23.9644301328976
-  POINT  2645  -11.43519851064686  20.44052946226004
-  POINT  2646  -10.91972478760085  20.44052752009882
-  POINT  2647  -10.92146522300643  21.32094671163846
-  POINT  2648  -11.18084963629104  21.76061562971537
-  POINT  2649  -11.43914973268702  21.32072488012269
-  POINT  2650  -8.354717852301953  17.79936126551275
-  POINT  2651  -8.865677316820541  17.7991080550456
-  POINT  2652  -8.865604125273149  18.67950030830442
-  POINT  2653  -8.354849206451807  18.67954722684985
-  POINT  2654  -7.8449370799189  18.67964045894598
-  POINT  2655  -7.336251432918799  18.67956409604354
-  POINT  2656  -7.081931132275803  18.23961943152085
-  POINT  2657  -8.09997451760549  18.23956994043947
-  POINT  2658  -7.844805725769048  17.79945449760887
-  POINT  2659  -8.100430139091614  16.47811947625329
-  POINT  2660  -7.845750550729444  16.03722597916978
-  POINT  2661  -8.355741934804009  16.03671803565851
-  POINT  2662  -7.84499390774128  16.91893662122336
-  POINT  2663  -7.336521112848085  16.03802299597051
-  POINT  2664  -7.591832908560479  15.59662155537573
-  POINT  2665  -7.081982832760588  16.47905573175917
-  POINT  2666  -3.54490611780126  20.88709779020111
-  POINT  2667  -3.290304169812604  21.32705841216561
-  POINT  2668  -3.794349397708337  21.32485605719605
-  POINT  2669  -4.07370210063638  19.99999990535588
-  POINT  2670  -3.813606861772008  19.55755217403422
-  POINT  2671  -3.813606786979048  20.4424476880606
-  POINT  2672  -3.309561597917081  19.55534986530946
-  POINT  2673  -3.544906231427986  19.11290209845403
-  POINT  2674  -3.309561559083315  20.44465004303017
-  POINT  2675  -2.976342896691423  37.87084587080842
-  POINT  2676  -3.221425950774599  37.37975080057947
-  POINT  2677  -2.526770059080721  38.86620393748946
-  POINT  2678  -2.74911739425569  38.36872913844745
-  POINT  2679  -3.247670177747043  38.30899320764298
-  POINT  2680  -3.510972884148524  38.7290535079245
-  POINT  2681  -3.738198386584258  38.23117024028548
-  POINT  2682  -2.221684732532352  36.55039136936763
-  POINT  2683  -2.720983152386764  36.50668992783906
-  POINT  2684  -1.975649639226325  36.09501466529477
-  POINT  2685  -2.229342038877392  35.61557517193711
-  POINT  2686  -2.490020268553868  35.14475718983718
-  POINT  2687  -2.734688313083581  35.59417021242318
-  POINT  2688  -1.730981594696612  35.64560164270876
-  POINT  2689  -1.486809012309066  35.18419628736905
-  POINT  2690  -4.303354465001183  31.05895358128684
-  POINT  2691  -4.55951779146229  31.50692884476348
-  POINT  2692  -4.814374491189353  31.05972774650009
-  POINT  2693  -4.303319481666954  31.95367266283595
-  POINT  2694  -4.814339507855124  31.9544468280492
-  POINT  2695  -3.794429959970654  31.05851674025303
-  POINT  2696  -3.285536346627419  31.06016856732271
-  POINT  2697  -3.539604151930885  31.5078065066199
-  POINT  2698  -4.049286659697717  30.61131564198964
-  POINT  2699  -3.792218904985805  31.95624679413531
-  POINT  2700  -3.28332529164257  31.95789862120499
-  POINT  2701  -4.047040621378638  32.40376477742103
-  POINT  2702  7.293827708476641e-08  30.61670207641359
-  POINT  2703  -0.2521485735852201  31.06882400602231
-  POINT  2704  -0.2521485843374779  30.16753613384589
-  POINT  2705  -0.7573647761819143  29.27115377417338
-  POINT  2706  -0.5048694095893164  29.71821293229341
-  POINT  2707  -0.757018053121834  30.16737885684081
-  POINT  2708  -1.261813079214908  30.16656491069634
-  POINT  2709  -1.00909225396307  30.61588811224881
-  POINT  2710  -1.750101564306177  33.7926600881429
-  POINT  2711  -1.247341893467582  33.80032930854107
-  POINT  2712  -0.9957606346718019  34.26612784853185
-  POINT  2713  -1.241669357333788  34.72964383553155
-  POINT  2714  -1.739534339372401  34.71160969751359
-  POINT  2715  -11.99490542589216  33.72244073919998
-  POINT  2716  -12.55579994637244  33.72998392753992
-  POINT  2717  -12.24028160504613  34.13586616472574
-  POINT  2718  -12.58774656772219  32.92273577571433
-  POINT  2719  -12.04127268056533  32.88444075338846
-  POINT  2720  -12.31859548106905  32.49061802708863
-  POINT  2721  -11.76196356192489  33.30918024521488
-  POINT  2722  -11.49281247527174  32.87706249658918
-  POINT  2723  -11.44644522059858  33.7150624824007
-  POINT  2724  -10.96746234053338  33.79803021601935
-  POINT  2725  -10.46487803283816  33.83310531972037
-  POINT  2726  -10.71091904893609  33.33687709211661
-  POINT  2727  -11.20040420450066  34.21129071000446
-  POINT  2728  -11.46127976573915  30.22519151574363
-  POINT  2729  -11.70834995916295  29.77725564258582
-  POINT  2730  -11.97221458253263  30.23418703394924
-  POINT  2731  -10.68395992686636  29.76000252533419
-  POINT  2732  -10.93683718292719  29.31526402048404
-  POINT  2733  -13.99001145216601  30.2071360473141
-  POINT  2734  -14.24302441828744  30.64244700270329
-  POINT  2735  -13.47593211929433  30.2148213247283
-  POINT  2736  -12.882639952868  33.38136001505353
-  POINT  2737  -13.12801613202197  33.79478544057929
-  POINT  2738  -13.15996275337173  32.9875372887537
-  POINT  2739  -12.56903973339889  32.06645679208884
-  POINT  2740  -12.02256584624203  32.02816176976298
-  POINT  2741  -8.913239817098617  31.99135920727501
-  POINT  2742  -8.40158183646983  31.98514989359324
-  POINT  2743  -8.652257386764454  31.53745947968953
-  POINT  2744  -8.921335412563566  32.89535129795895
-  POINT  2745  -8.673611325668027  33.34794371176464
-  POINT  2746  -8.414840179908452  32.89164203498441
-  POINT  2747  -5.072107480879501  32.40303922173636
-  POINT  2748  -5.328305790674837  31.95629540366389
-  POINT  2749  10.14864152241564  25.29167841478616
-  POINT  2750  10.40452204895563  24.84933923994486
-  POINT  2751  7.345760569471696  27.50220841755529
-  POINT  2752  6.836865374418886  27.50054703680143
-  POINT  2753  7.089552523791351  27.05704250164396
-  POINT  2754  2.525426835782363  26.16307688713685
-  POINT  2755  2.272480634611741  25.72176210905083
-  POINT  2756  2.777875233522349  25.72204462651898
-  POINT  2757  1.767575335564268  26.60489238751902
-  POINT  2758  1.514941509738058  26.16264509615625
-  POINT  2759  2.272957824933265  26.60516717755396
-  POINT  2760  2.778352423843874  26.60544969502211
-  POINT  2761  4.805074847682363  27.49442755495632
-  POINT  2762  4.552513154400769  27.93750824958521
-  POINT  2763  4.297887807610577  27.49325833103988
-  POINT  2764  6.57468887445735  24.40195169880285
-  POINT  2765  6.321311698834721  24.84298263597548
-  POINT  2766  7.849057448689945  25.73004086883459
-  POINT  2767  8.359006247967862  25.73123236418823
-  POINT  2768  8.61552521165617  26.17503643791459
-  POINT  2769  9.404349218168869  30.19173390211969
-  POINT  2770  9.65777479999708  29.74665923251244
-  POINT  2771  10.40670379081607  26.62599846740034
-  POINT  2772  10.66169908791753  26.18015324950281
-  POINT  2773  10.91913923802371  26.62640116557348
-  POINT  2774  10.40539732837285  25.73591803949286
-  POINT  2775  10.91783277558049  25.73632073766599
-  POINT  2776  9.89250783475268  25.73551092662298
-  POINT  2777  9.637659499680273  26.17823816723135
-  POINT  2778  12.98765611516729  24.84316435404515
-  POINT  2779  13.24519849159788  25.28412934430153
-  POINT  2780  12.97771797713904  25.73181949643032
-  POINT  2781  13.4973712688774  25.72824679366293
-  POINT  2782  13.74303197345077  26.17287521768461
-  POINT  2783  13.99649931993174  26.62119388701589
-  POINT  2784  13.48335810089953  26.624255615123
-  POINT  2785  14.0105124879096  25.72518506555582
-  POINT  2786  14.53346833943965  25.71999652791481
-  POINT  2787  14.76538182086017  26.16564275654618
-  POINT  2788  12.97101588266317  26.6242609325337
-  POINT  2789  13.22448322914414  27.07257960186498
-  POINT  2790  11.18782984741558  28.86783824005193
-  POINT  2791  11.44023158859328  28.42154320407505
-  POINT  2792  10.92866118458883  28.41597310920991
-  POINT  2793  15.8358466505693  29.77825662708678
-  POINT  2794  15.57327800023705  30.19757601615488
-  POINT  2795  15.03254016683603  30.19341354430916
-  POINT  2796  -0.8995237521899599  19.54873467419662
-  POINT  2797  -1.223665336802445  19.99999999772069
-  POINT  2798  -1.340523578198245  19.5487346702835
-  POINT  2799  -0.8995237451475713  20.45126532729634
-  POINT  2800  -1.340523571155856  20.45126532338323
-  POINT  2801  -1.523722054976781  19.10064953446878
-  POINT  2802  -1.775181039070304  18.66606637620227
-  POINT  2803  -1.267840977679282  18.66288618849292
-  POINT  2804  -1.847863639589266  19.55191485799285
-  POINT  2805  3.030578223423045  16.47865931956265
-  POINT  2806  2.7786995819392  16.9173169337976
-  POINT  2807  3.283887773770873  16.91774472162141
-  POINT  2808  2.273605935625607  16.91641083896922
-  POINT  2809  2.777737361196587  16.03895609462461
-  POINT  2810  2.272576544974629  16.03887379781015
-  POINT  2811  2.524923874579844  15.59959836069592
-  POINT  2812  3.282925553028259  16.03938388244843
-  POINT  2813  -0.7612694088495366  18.66199020272551
-  POINT  2814  -1.012728392943059  18.227407044459
-  POINT  2815  -0.758598544150526  17.78995693156367
-  POINT  2816  -1.265170112980272  17.79085291733108
-  POINT  2817  4.506764545389951  1.417895953039242
-  POINT  2818  4.783535558950785  1.00631976803145
-  POINT  2819  4.758484548151512  1.889696750885436
-  POINT  2820  4.253215613299169  1.820569169400931
-  POINT  2821  3.510966697825907  1.270945661498197
-  POINT  2822  3.322764554813852  0.7621993600452871
-  POINT  2823  2.853419417958452  0.6871814573462394
-  POINT  2824  3.15663773239814  0.2506800547597778
-  POINT  2825  2.526762781558002  1.133795733001061
-  POINT  2826  0.7361792967570719  3.370479836805422
-  POINT  2827  0.984246123665582  3.857601448530803
-  POINT  2828  1.229220834288343  3.387837280503928
-  POINT  2829  0.2456021749298  4.312315065409472
-  POINT  2830  -6.12900348972989e-07  3.840243961866928
-  POINT  2831  -0.2456030241048603  4.312315022444103
-  POINT  2832  0.2456016322509388  3.358689814749931
-  POINT  2833  0.5049285170465799  15.59922462282507
-  POINT  2834  0.2524349318952632  15.15933354319677
-  POINT  2835  0.7573634386942838  15.15936468952784
-  POINT  2836  -0.2524349044090859  14.27853318435742
-  POINT  2837  1.330778542918409e-08  14.71947361203522
-  POINT  2838  0.2524349358260958  14.27853318222174
-  POINT  2839  -0.2524349083399185  15.15933354533245
-  POINT  2840  -0.7573634152411641  15.15936469433383
-  POINT  2841  -0.5049284966536864  15.59922462549537
-  POINT  2842  0.5049254022037216  13.83754849930346
-  POINT  2843  0.7574092353969514  13.3953638490185
-  POINT  2844  0.2524838513024543  13.39540810425898
-  POINT  2845  0.7573603199205929  14.27848892698126
-  POINT  2846  1.262484605133556  13.39525696279437
-  POINT  2847  1.010043054232288  12.95311656774989
-  POINT  2848  1.767575339991074  13.39510769916648
-  POINT  2849  1.514941521155737  13.83735498043508
-  POINT  2850  1.262295113836738  15.15932946063648
-  POINT  2851  1.767248131092881  15.15945960799914
-  POINT  2852  1.514810041101744  15.5993859165188
-  POINT  2853  1.009801528685421  14.71943838100818
-  POINT  2854  1.262291995063047  14.2784536980899
-  POINT  2855  1.767382729920565  14.278304434462
-  POINT  2856  10.41084000253686  12.48260731078788
-  POINT  2857  9.899143909428762  12.48490033133931
-  POINT  2858  10.15245058881716  12.93005073050543
-  POINT  2859  7.613367978441445  10.26725776150029
-  POINT  2860  7.865566856326732  10.71237296609314
-  POINT  2861  7.872056162547818  9.817820601218891
-  POINT  2862  6.840628853956597  11.61013350401928
-  POINT  2863  7.350228541129577  11.60757337758872
-  POINT  2864  7.602701329817169  12.05219325805719
-  POINT  2865  7.859856068084092  11.60547869619642
-  POINT  2866  6.584305485265666  12.05624824322372
-  POINT  2867  6.331860536359608  11.61209380779351
-  POINT  2868  7.345761240100929  12.4977925867857
-  POINT  2869  7.855388767055443  12.4956979053934
-  POINT  2870  6.836865843678177  12.49945375805594
-  POINT  2871  6.328097526081189  12.50141406183017
-  POINT  2872  7.089553280916451  12.94295840539215
-  POINT  2873  8.370126385671387  11.60298196347085
-  POINT  2874  8.117653596983795  11.15836208300238
-  POINT  2875  8.375837173914027  10.70987623336757
-  POINT  2876  4.295101059051913  14.27689245468694
-  POINT  2877  4.801572033150954  14.27614783489993
-  POINT  2878  5.054251674501884  14.71756589197868
-  POINT  2879  5.308173049886577  14.27556530526172
-  POINT  2880  4.041727348991283  14.71850999116095
-  POINT  2881  4.800381330074277  15.15879930644609
-  POINT  2882  5.3069823468099  15.15821677680788
-  POINT  2883  7.849059237793011  14.26996017987809
-  POINT  2884  8.103070930537744  14.71207488647675
-  POINT  2885  5.815417413760485  14.27454965531052
-  POINT  2886  5.562737772409555  13.83313159823176
-  POINT  2887  -0.2521485527378636  8.931176099677991
-  POINT  2888  -0.5035763908778745  8.480088454668433
-  POINT  2889  -0.7557250243185949  8.932210406700243
-  POINT  2890  -0.2509573870619522  8.024279294560063
-  POINT  2891  0.2509575473889861  8.024279283349045
-  POINT  2892  7.962417714058034e-08  7.56950443026293
-  POINT  2893  6.593280292555939  10.27328387180388
-  POINT  2894  6.335879483268245  10.7209592028273
-  POINT  2895  5.830755701913942  9.830536241827216
-  POINT  2896  5.574295302392639  10.27814403449093
-  POINT  2897  5.321475942820628  9.832740939252627
-  POINT  2898  6.341449789967948  9.827318887765713
-  POINT  2899  5.062470520941847  11.17165642054254
-  POINT  2900  5.317804209527402  10.72520563662399
-  POINT  2901  5.827083968620716  10.72300093919858
-  POINT  2902  6.079388390403009  11.16802080496036
-  POINT  2903  5.823065021712079  11.61413554416479
-  POINT  2904  5.315146558477212  11.61569271764991
-  POINT  2905  5.567618704433812  12.05976572048306
-  POINT  2906  1.26260880164937  12.50952783290288
-  POINT  2907  0.7575334319127655  12.509634719127
-  POINT  2908  1.515420485651163  12.06591797610076
-  POINT  2909  1.767930107970686  12.50939982472365
-  POINT  2910  2.779582641351243  11.62045230557948
-  POINT  2911  2.526574119133528  12.06542614609067
-  POINT  2912  2.273750314190195  11.62081612741035
-  POINT  2913  3.538866270969666  12.06436176963468
-  POINT  2914  3.284985271677322  12.50826344534523
-  POINT  2915  3.286081822236629  11.62005928968668
-  POINT  2916  2.273653942155398  10.72932286147457
-  POINT  2917  2.52689359077933  10.28311528781965
-  POINT  2918  2.021045272905355  11.17585461155564
-  POINT  2919  1.76803675068764  11.62082845206683
-  POINT  2920  1.262715444366323  11.62095646024605
-  POINT  2921  1.010161226929193  11.17580755694835
-  POINT  2922  0.7575449618927166  11.62089708098228
-  POINT  2923  1.767940378652842  10.72933518613105
-  POINT  2924  1.262535322656886  10.72890566637786
-  POINT  2925  1.515143991906928  10.28237391629679
-  POINT  2926  0.253078415467722  21.33774656433547
-  POINT  2927  0.5081909984648777  20.90226741555631
-  POINT  2928  -0.3913327526621082  20.45100208957463
-  POINT  2929  2.734971728257651e-09  20.45100208875773
-  POINT  2930  -0.39133275539708  20.0000000008169
-  POINT  2931  -0.5081909870155196  20.90226741523717
-  POINT  2932  0.3913327604803603  20.45100208957464
-  POINT  2933  0.3913327577453886  20.0000000008169
-  POINT  2934  0.2530784161400829  22.21052479098349
-  POINT  2935  0.5055201289601644  22.64707892336772
-  POINT  2936  -2.785590905596614  21.32882419900507
-  POINT  2937  -3.03503418550369  21.76658246600001
-  POINT  2938  1.770560907143734  17.79144658719761
-  POINT  2939  2.024810499173619  18.22997737721628
-  POINT  2940  1.775181052026418  18.66606637464487
-  POINT  2941  2.280691576572412  18.66774072366555
-  POINT  2942  1.265170126328186  17.79085291521534
-  POINT  2943  1.012728405401115  18.22740704319246
-  POINT  2944  0.7585985571016766  17.7899569302122
-  POINT  2945  1.516431058844295  17.35399647421735
-  POINT  2946  0.8995237605176197  19.54873467387751
-  POINT  2947  1.340523588216353  19.54873466996442
-  POINT  2948  1.523722067484837  19.10064953360767
-  POINT  2949  1.267840990086043  18.66288618715841
-  POINT  2950  0.7612694208595338  18.66199020215526
-  POINT  2951  5.813248074708591  17.79940577746486
-  POINT  2952  6.319914201894026  17.79970755524536
-  POINT  2953  6.067133785253771  18.23927390332938
-  POINT  2954  3.535574274154806  15.59970463007047
-  POINT  2955  3.788415136381265  16.0394078550085
-  POINT  2956  4.29392652128657  16.03975141330591
-  POINT  2957  4.547087929945052  15.59958939695291
-  POINT  2958  4.79995059372381  16.03961220762827
-  POINT  2959  4.041277800160023  16.47943066568386
-  POINT  2960  3.788433948862058  15.15930008166777
-  POINT  2961  3.282944365509053  15.1592761091077
-  POINT  2962  4.294357257637037  15.15893851212372
-  POINT  2963  3.794349415726029  21.32485606072119
-  POINT  2964  3.290304186047734  21.32705841534533
-  POINT  2965  3.544906134739364  20.8870977923218
-  POINT  2966  3.035034201374663  21.76658246994613
-  POINT  2967  3.285878222907446  22.20420717451871
-  POINT  2968  3.81360680382783  20.44244768929398
-  POINT  2969  4.073702118111949  19.99999990535705
-  POINT  2970  4.30904667870178  20.44244765376073
-  POINT  2971  3.813606878619757  19.55755217280245
-  POINT  2972  4.309046753493707  19.5575521372692
-  POINT  2973  3.091725105391231  19.99999995889588
-  POINT  2974  3.309561574149535  20.44465004391812
-  POINT  2975  2.535961556076473  19.1072647545244
-  POINT  2976  2.785591003223675  18.67117575709582
-  POINT  2977  2.823024475136099  19.55534988242807
-  POINT  2978  3.309561612982868  19.55534986442249
-  POINT  2979  3.544906248364625  19.11290209633464
-  POINT  2980  4.553342649405812  19.11635063545458
-  POINT  2981  4.813437888898004  19.55879836800918
-  POINT  2982  3.78894556721224  16.91866702923937
-  POINT  2983  3.537066925728395  17.35732464347433
-  POINT  2984  4.294456952117544  16.91901058753678
-  POINT  2985  10.40485762242933  23.0823167754689
-  POINT  2986  10.66359386676167  22.64123696885316
-  POINT  2987  7.336519205314388  23.96197717939193
-  POINT  2988  7.845748174573922  23.96277428191098
-  POINT  2989  7.847092038101775  15.1545453326975
-  POINT  2990  8.357041317327358  15.15335405870247
-  POINT  2991  7.335858156970897  16.91917008184071
-  POINT  2992  6.82740222651428  16.91959839644326
-  POINT  2993  7.081982885691881  16.4790557103205
-  POINT  2994  6.573652994571071  17.35977609867216
-  POINT  2995  6.82753870511625  17.79964422453667
-  POINT  2996  6.319777723292055  16.91966172715194
-  POINT  2997  8.865603095183527  21.32049701279709
-  POINT  2998  8.610566546294587  20.88042660659833
-  POINT  2999  8.354847778087121  21.32045064574386
-  POINT  3000  -19.49782579425925  18.2262342507611
-  POINT  3001  -19.95653724886555  18.68219083235013
-  POINT  3002  -19.87861801615688  17.79987597964446
-  POINT  3003  -18.66020382675364  15.93496854205557
-  POINT  3004  -19.16290631175541  15.97909016657372
-  POINT  3005  -18.99857199443355  15.51737708814106
-  POINT  3006  -17.91955297322556  13.2829594368018
-  POINT  3007  -18.41152301195191  13.295877500577
-  POINT  3008  -9.129653461818208  12.93477147753005
-  POINT  3009  -8.876289950333131  12.49088708422035
-  POINT  3010  -8.365440669810539  12.49364887761896
-  POINT  3011  -8.108500589767266  12.9392481990543
-  POINT  3012  -7.855388676964306  12.4956979610122
-  POINT  3013  -8.361774657741075  13.38192668055925
-  POINT  3014  -7.851722664894842  13.38397576395249
-  POINT  3015  -4.80356472378408  18.67759654481199
-  POINT  3016  -4.299173591137375  18.67635031371034
-  POINT  3017  -5.054931658031134  18.23828417657461
-  POINT  3018  -2.280691562830554  18.66774072586148
-  POINT  3019  -2.024810485533055  18.22997737988562
-  POINT  3020  -2.785590988433182  18.67117575963704
-  POINT  3021  -2.535961541970431  19.1072647559537
-  POINT  3022  -5.306982312776921  15.15821679877318
-  POINT  3023  -5.813814758590553  15.15783103442108
-  POINT  3024  -4.547087902507322  15.59958941436245
-  POINT  3025  -4.293926496647592  16.03975142784848
-  POINT  3026  -7.337862524706304  15.15534238385541
-  POINT  3027  -7.847091962587663  15.15454536705468
-  POINT  3028  -9.890905060586594  16.91769167150019
-  POINT  3029  -10.147975417906  16.47686792201691
-  POINT  3030  -9.122219403737819  16.47724518073061
-  POINT  3031  -9.377742636906071  16.91780911523353
-  POINT  3032  -9.634630413183206  17.35862195801451
-  POINT  3033  -15.51798373490658  13.38033590670376
-  POINT  3034  -15.01511587050028  13.38241715695336
-  POINT  3035  -14.76536195414445  13.83436752674101
-  POINT  3036  -11.6877451403522  13.82008259053461
-  POINT  3037  -11.43269990813222  14.264155554569
-  POINT  3038  -11.43075852913953  13.37311667077508
-  POINT  3039  -10.91914257799354  13.37360334277097
-  POINT  3040  -14.49013065771233  8.92250716809294
-  POINT  3041  -13.97378473792814  8.903623831005547
-  POINT  3042  -13.75932210669217  8.400895838660942
-  POINT  3043  -14.48388519872614  8.085770307453599
-  POINT  3044  -14.7532851786944  8.51074262304131
-  POINT  3045  -14.07639210786223  7.906905857500061
-  POINT  3046  -16.05643838843906  11.55103715881512
-  POINT  3047  -16.33476399675755  11.08780033828979
-  POINT  3048  -16.09214922620015  10.65648918306597
-  POINT  3049  -15.54889503500405  11.56061276607589
-  POINT  3050  11.2389936247567  7.556479722522218
-  POINT  3051  10.95968569172366  7.131739392009571
-  POINT  3052  10.96516018232728  8.002770687957165
-  POINT  3053  10.45710182271854  7.09666523164841
-  POINT  3054  10.19676557908151  7.554948702823318
-  POINT  3055  9.947996817509239  7.086330070692012
-  POINT  3056  10.44503645463636  8.011377880133024
-  POINT  3057  9.935931449427057  8.001042719176626
-  POINT  3058  9.433883059010681  7.09648042600004
-  POINT  3059  9.694219302647717  6.638196954825132
-  POINT  3060  9.431468298922116  6.192050324704395
-  POINT  3061  8.921334355776636  7.10464922441238
-  POINT  3062  9.175111870638158  7.552782340279261
-  POINT  3063  9.020608292392154  2.610986790489027
-  POINT  3064  9.474327155954036  2.853381851282785
-  POINT  3065  9.424223358758637  2.359591439050014
-  POINT  3066  8.61015283696532  3.016787348807768
-  POINT  3067  9.406407135751241  3.443882765087797
-  POINT  3068  14.24301966553495  9.357549438241348
-  POINT  3069  14.4901295966866  8.92250482268938
-  POINT  3070  15.02251965234311  8.964668030477915
-  POINT  3071  14.50635307594872  9.811745665581833
-  POINT  3072  15.03253485589125  9.806581428114002
-  POINT  3073  15.30010149579994  9.372267151041644
-  POINT  3074  1.391480458123909  0.5361652771996028
-  POINT  3075  1.5311646848921  1.034881203024674
-  POINT  3076  0.9403288020067619  0.5067124227468429
-  POINT  3077  1.30290062382262  0.04248387209852996
-  POINT  3078  0.5146184240444129  0.9751892831391331
-  POINT  3079  0.7618858102185746  1.458041036081303
-  POINT  3080  1.257885314814681  1.486842127641039
-  POINT  3081  1.759808407924379  1.526429439176829
-  POINT  3082  -7.903282532023693  3.431138862491011
-  POINT  3083  -8.152789841056642  3.936144390882303
-  POINT  3084  -7.405025206157284  4.401754955187759
-  POINT  3085  -7.126972980823624  3.982555849504718
-  POINT  3086  -6.871914937442281  4.456668046370027
-  POINT  3087  -7.912211134470291  4.392559551191403
-  POINT  3088  -7.657153091088949  4.866671748056711
-  POINT  3089  -9.947996922680865  7.086330753741288
-  POINT  3090  -10.19676544567954  7.554949393736067
-  POINT  3091  -9.433883096893222  7.096480642617021
-  POINT  3092  -9.935931248079878  8.001043112251882
-  POINT  3093  4.527367092332923e-08  11.17574818979146
-  POINT  3094  -0.252495297355625  10.7286890466501
-  POINT  3095  -0.7573647365983451  10.72884633098105
-  POINT  3096  -6.777768896535333  2.634657762748669
-  POINT  3097  -7.244270061060128  2.731385544386314
-  POINT  3098  -7.354841851407485  3.536945192983723
-  POINT  3099  -6.821731582692482  3.591858284165991
-  POINT  3100  -7.598041133892552  3.040441297152283
-  POINT  3101  -2.770028523234636  7.135495143417519
-  POINT  3102  -2.262551794000459  7.128472515207454
-  POINT  3103  -2.013561812098475  7.580836281036188
-  POINT  3104  -1.756818092472177  7.124101067148673
-  POINT  3105  -2.268204295821881  8.035370941832417
-  POINT  3106  -1.975649084420517  3.904985271154332
-  POINT  3107  -2.229341417725875  4.384424847169543
-  POINT  3108  -1.730981152791177  4.354398340751177
-  POINT  3109  -1.233116312198353  4.336364163628327
-  POINT  3110  -1.48680864550371  4.815803739643538
-  POINT  3111  -0.7430351466867606  5.261285573502088
-  POINT  3112  -0.494472020592799  4.791077844253667
-  POINT  3113  -0.2485633623686729  5.254593855235067
-  POINT  3114  -0.740074808422948  4.319006740711124
-  POINT  3115  -3.989917167396486  2.240630780408752
-  POINT  3116  -3.738200036941911  1.768829703597202
-  POINT  3117  -3.247670870830478  1.691006496083939
-  POINT  3118  -2.976342610696507  2.129153640981189
-  POINT  3119  -3.734386660790618  2.660010881492179
-  POINT  3120  -4.249408434534817  2.711752124426682
-  POINT  3121  -6.558942474787781  3.123176139372501
-  POINT  3122  -6.331073604203918  3.568786795893496
-  POINT  3123  -6.287110918046769  2.611586274476174
-  POINT  3124  -6.621962591182754  4.900980417645647
-  POINT  3125  -6.343910365849093  4.481781311962606
-  POINT  3126  1.975648595423093  36.09501468771074
-  POINT  3127  1.730980862699194  35.6456016167933
-  POINT  3128  2.229341421389412  35.61557529593476
-  POINT  3129  1.767382707537047  25.72169563959068
-  POINT  3130  2.019831105277033  25.28066337897281
-  POINT  3131  1.262291980403351  25.72154636607824
-  POINT  3132  1.767248087730079  24.84054044960734
-  POINT  3133  2.272346014804772  24.84060691906749
-  POINT  3134  1.262295090029159  24.84067059179185
-  POINT  3135  -0.2524838111325409  26.60459195706799
-  POINT  3136  2.444279567637153e-08  27.04677661342691
-  POINT  3137  -0.2524838031658742  27.4903401891097
-  POINT  3138  0.2524838616507888  27.49034019456228
-  POINT  3139  -0.7575333892249605  27.4903653405446
-  POINT  3140  3.788433723962699  24.84070003411083
-  POINT  3141  4.041727103362698  25.28149016974522
-  POINT  3142  3.283312657697288  25.72224398475948
-  POINT  3143  3.030366456526666  25.28092920667346
-  POINT  3144  3.789177592187962  25.72274613527788
-  POINT  3145  4.295100814849055  25.72310774010915
-  POINT  3146  3.536686369183645  26.16386155512341
-  POINT  3147  2.272576461040474  23.96112624728912
-  POINT  3148  2.020306171472144  23.5221043798967
-  POINT  3149  2.273605847126488  23.08358918644693
-  POINT  3150  2.778699451801812  23.08268308508446
-  POINT  3151  3.030578057285068  23.52134071927124
-  POINT  3152  3.283887584263749  23.08225529947948
-  POINT  3153  6.82172659767877  36.40814779878537
-  POINT  3154  7.35483619344178  36.46305945729526
-  POINT  3155  6.558938425685055  36.87683381454495
-  POINT  3156  6.777763402182511  37.36535117969289
-  POINT  3157  7.244263972315331  37.26861717750442
-  POINT  3158  5.845709060934203  32.8543398439479
-  POINT  3159  5.327825047917067  32.84978785259251
-  POINT  3160  5.587460787769149  33.29923958236787
-  POINT  3161  5.07210716993828  32.40303966091142
-  POINT  3162  5.839992684245366  31.95857160899264
-  POINT  3163  5.328305474083631  31.9562956821724
-  POINT  3164  11.7636152966602  35.51005436606592
-  POINT  3165  11.89138268840086  36.08088984207926
-  POINT  3166  13.96434143009819  33.62431889214255
-  POINT  3167  13.62553027166024  33.96298348535633
-  POINT  3168  14.13907578790397  34.14519481201172
-  POINT  3169  13.6933777803736  33.05047192353857
-  POINT  3170  11.47394032795509  34.67289773812949
-  POINT  3171  11.20040168097641  34.21129404646143
-  POINT  3172  11.44644337030582  33.71506560055828
-  POINT  3173  10.96746084748497  33.79803270401432
-  POINT  3174  9.928435644092694  34.70960053046583
-  POINT  3175  9.445444615479557  34.74869014145943
-  POINT  3176  10.20212549960824  34.27925374770544
-  POINT  3177  8.55693472587436  37.47116564769411
-  POINT  3178  8.610154574479843  36.98321170564777
-  POINT  3179  7.792705712071077  37.37442105721501
-  POINT  3180  8.146978123645237  37.66529759679247
-  POINT  3181  8.559637437237384  38.07574638038857
-  POINT  3182  8.395984878751314  36.56036043869134
-  POINT  3183  7.903277933197526  36.56886333700585
-  POINT  3184  7.59803541538643  36.95956247755778
-  POINT  3185  13.23628235860721  30.68752328103807
-  POINT  3186  13.02182189368296  31.19025353239009
-  POINT  3187  13.39848589487437  32.59184677084766
-  POINT  3188  13.08141264733925  32.09785538670456
-  POINT  3189  13.15996052987587  32.98754066985602
-  POINT  3190  3.734384876860566  37.33999019105068
-  POINT  3191  3.989913736038182  37.75937050229219
-  POINT  3192  3.738191811837065  38.23117125418775
-  POINT  3193  3.247663856437776  38.30899372408128
-  POINT  3194  2.976338586140713  37.87084607032222
-  POINT  3195  0.7575449832500279  28.37910301124292
-  POINT  3196  0.5050496180037712  27.9339289377297
-  POINT  3197  1.262608818111103  27.49047225529183
-  POINT  3198  1.515420516496924  27.93408212583156
-  POINT  3199  0.7575334456124412  27.49036536204691
-  POINT  3200  2.526893724749228  29.71688489057836
-  POINT  3201  2.779450491643448  30.16459955601931
-  POINT  3202  3.286497797291172  29.27075851415398
-  POINT  3203  3.54071932016649  29.71695812350327
-  POINT  3204  3.793978826839798  29.27114357134025
-  POINT  3205  2.779998606761999  29.27036546592124
-  POINT  3206  2.273654040893363  29.2706772901826
-  POINT  3207  0.2509575631490233  32.89023084573768
-  POINT  3208  7.962001580263944e-08  32.43049566678853
-  POINT  3209  0.2509575815135437  31.97572081582519
-  POINT  3210  -0.2509574211939724  31.97572080461469
-  POINT  3211  0.7545341147933871  31.97468656237741
-  POINT  3212  1.00487180505531  32.42701557238493
-  POINT  3213  2.262552379835649  32.871528064516
-  POINT  3214  2.013562317430567  32.41916421915188
-  POINT  3215  1.75681859018817  32.87589931213495
-  POINT  3216  2.268204796802595  31.96462962194811
-  POINT  3217  2.77500339006423  31.96212582894687
-  POINT  3218  3.027618133833469  32.410566243476
-  POINT  3219  1.247341957495069  33.80032933334168
-  POINT  3220  1.503048939569117  33.33593227620078
-  POINT  3221  0.7511021544362571  32.88704853645076
-  POINT  3222  0.5001446352577484  33.34678370418941
-  POINT  3223  0.7487078672168751  33.80939990733931
-  POINT  3224  0.9957605981669626  34.2661278457785
-  POINT  3225  1.254058877164035  32.88356843083666
-  POINT  3226  4.807634527403731  36.45417558306546
-  POINT  3227  4.268078121334274  36.43451973236753
-  POINT  3228  5.055439451329409  35.99075638523749
-  POINT  3229  4.016824286852271  36.00258917550283
-  POINT  3230  3.742624318707891  36.43693935563272
-  POINT  3231  4.285159710652261  35.55276249892606
-  POINT  3232  3.759705908025878  35.55518212219123
-  POINT  3233  5.313339571489223  35.5337790049437
-  POINT  3234  5.576017529265764  35.08006250744026
-  POINT  3235  4.800178209638467  35.54319217194386
-  POINT  3236  4.543059830812075  35.09578511863226
-  POINT  3237  6.593280538182253  29.7267168205935
-  POINT  3238  6.845584839365598  29.28169702003494
-  POINT  3239  6.335879606186479  29.27904143291438
-  POINT  3240  6.851155373110538  30.17533731825264
-  POINT  3241  7.361674109424366  30.17880960428335
-  POINT  3242  7.109843711173534  30.62477451482192
-  POINT  3243  7.613368231755042  29.73274323698628
-  POINT  3244  7.872056569818037  30.18218043355557
-  POINT  3245  3.794429966540387  31.05851703304998
-  POINT  3246  4.049286650570231  30.61131584299384
-  POINT  3247  3.794281271533463  30.1641111043279
-  POINT  3248  3.033012443010421  30.61175253684394
-  POINT  3249  3.285536433201112  31.06016885716353
-  POINT  3250  3.286800241984837  30.16372604714163
-  POINT  3251  19.49782570706544  18.22623423316451
-  POINT  3252  19.95653726784996  18.68219111832597
-  POINT  3253  18.58166017353374  18.21127385550157
-  POINT  3254  18.44873815733738  18.65901810939465
-  POINT  3255  17.82900842060782  17.79250664273356
-  POINT  3256  17.55961501255982  18.23365515048583
-  POINT  3257  18.38742546426215  17.76710888707429
-  POINT  3258  18.87780136911621  17.75460013746301
-  POINT  3259  17.52690217883121  14.67823772169018
-  POINT  3260  17.21413812833305  15.13667453160922
-  POINT  3261  17.10180895186563  14.27897243895621
-  POINT  3262  16.61643123646513  14.28454314481263
-  POINT  3263  16.41267770706892  14.73120621263948
-  POINT  3264  16.07296510477975  14.29114476438398
-  POINT  3265  14.25527356652689  20.00000694342845
-  POINT  3266  14.54458535674566  20.44472120503738
-  POINT  3267  15.08660392329284  20.4503355424043
-  POINT  3268  15.22709411735221  19.99960748842541
-  POINT  3269  14.54446737878539  19.55524897689899
-  POINT  3270  14.04144304480628  19.5552644241821
-  POINT  3271  15.12585065643982  22.18962336947886
-  POINT  3272  15.66704893150966  22.18912647227221
-  POINT  3273  15.93226494226947  22.62311502278055
-  POINT  3274  15.63603332292851  23.06058148636886
-  POINT  3275  15.10960336366766  23.06196334102751
-  POINT  3276  14.85525309603435  22.62543767487836
-  POINT  3277  15.07838610348047  15.1733118594097
-  POINT  3278  15.60761466098593  15.17729090093799
-  POINT  3279  15.33998301787808  14.73382879068254
-  POINT  3280  14.82036766750458  15.61339008097941
-  POINT  3281  15.08744436360368  16.05749207836569
-  POINT  3282  14.56179428451994  16.05410818967995
-  POINT  3283  14.55273602439673  15.16992797072396
-  POINT  3284  15.87591227598083  15.61135500755215
-  POINT  3285  16.13750919037845  15.17187193882498
-  POINT  3286  16.68097532206382  15.16527031925363
-  POINT  3287  16.93896961164258  15.57734025779473
-  POINT  3288  17.24542059267814  16.921237054667
-  POINT  3289  17.42133862340716  16.46621174527455
-  POINT  3290  16.6991273812222  16.92861646965699
-  POINT  3291  17.19812051536607  16.01499394956502
-  POINT  3292  16.66495770909684  16.04358973720944
-  POINT  3293  16.50011603657139  19.55060584927988
-  POINT  3294  16.11086118526408  19.54894289457717
-  POINT  3295  16.23490740586323  18.67143802475644
-  POINT  3296  16.77688889638486  18.67109500215383
-  POINT  3297  16.90823717346987  19.54895804099115
-  POINT  3298  15.66731510254423  17.81120259941419
-  POINT  3299  15.93239678965792  17.3770904840493
-  POINT  3300  15.12588811735991  17.81032407015078
-  POINT  3301  15.40255579021237  18.24333521180063
-  POINT  3302  14.85535684791786  17.37460770073489
-  POINT  3303  15.10975920515541  16.93820082241529
-  POINT  3304  14.5744686233815  16.93461706538583
-  POINT  3305  14.59059753558601  17.80674031312132
-  POINT  3306  16.79406525039852  28.02745799197655
-  POINT  3307  17.07238886613754  28.4906939788942
-  POINT  3308  16.57289177244715  28.46738533203519
-  POINT  3309  17.4965710356451  27.60644365003999
-  POINT  3310  17.80117571229844  28.04994051262165
-  POINT  3311  17.02019681392827  27.57157998790804
-  POINT  3312  16.52069972023788  27.54827134104903
-  POINT  3313  17.58991650606833  28.49979170459397
-  POINT  3314  18.10312000032976  28.50159082583126
-  POINT  3315  18.41154163693258  26.70405457720359
-  POINT  3316  18.5809862969927  26.22413241238169
-  POINT  3317  18.8590620588132  26.65851173471512
-  POINT  3318  17.91957654068757  26.71697613947613
-  POINT  3319  17.69355159834902  26.21921846733577
-  POINT  3320  18.11866262353381  25.81991390377403
-  POINT  3321  16.25412989716249  27.08512372750859
-  POINT  3322  16.02799833363274  27.5410017315771
-  POINT  3323  12.4713348273634  20.44086210014538
-  POINT  3324  12.74356289841131  20.88266792813398
-  POINT  3325  12.48035189032188  21.32047783433658
-  POINT  3326  11.9561289915379  23.08041192363828
-  POINT  3327  12.47539190118238  23.07854903560531
-  POINT  3328  12.21410635583005  23.51991665586499
-  POINT  3329  11.69840716659313  22.64001307273599
-  POINT  3330  13.00253570004953  22.19714775592412
-  POINT  3331  13.52908269363856  22.196464052818
-  POINT  3332  13.52075711029057  23.07307462590749
-  POINT  3333  13.79176001498042  22.63195101028575
-  POINT  3334  12.99841005278091  23.07655233280262
-  POINT  3335  12.74043268848876  22.63704760057591
-  POINT  3336  12.47951754845101  22.19914445872682
-  POINT  3337  16.76214594331712  26.16105609261419
-  POINT  3338  16.616482945813  25.71543906542623
-  POINT  3339  16.07300726146418  25.70885169527617
-  POINT  3340  15.7756762466737  26.15848944588978
-  POINT  3341  16.01909527733369  26.61668049315067
-  POINT  3342  15.51800947989736  26.61966307077576
-  POINT  3343  16.51179666393882  26.6239501026226
-  POINT  3344  18.1251910242728  22.66390416293884
-  POINT  3345  18.38730066575757  22.23230127821533
-  POINT  3346  18.87782298075228  22.24485624002787
-  POINT  3347  18.30109750604809  23.11887529175939
-  POINT  3348  18.75407461365194  23.14583948729189
-  POINT  3349  19.25336766894756  22.67096916601431
-  POINT  3350  19.18732501041783  23.0950223359802
-  POINT  3351  19.76177108442964  23.07772703249995
-  POINT  3352  13.22907297795537  11.13290668839839
-  POINT  3353  12.97061925836632  10.68124856516747
-  POINT  3354  12.46766895126554  10.67227901173746
-  POINT  3355  12.97143653644138  11.58072012917699
-  POINT  3356  13.4844546615271  11.58282112395052
-  POINT  3357  12.45912907450942  11.5804496180641
-  POINT  3358  12.71451075808115  12.03036405361623
-  POINT  3359  -7.335668197682937  22.20031115705586
-  POINT  3360  -7.590411055385765  22.64051999376785
-  POINT  3361  -6.827537248934346  22.20035519110679
-  POINT  3362  -6.573651574572926  22.64022353991485
-  POINT  3363  -6.319913095875537  22.20029198565057
-  POINT  3364  -5.813247200796855  22.20059393150383
-  POINT  3365  -5.306832057388836  22.20081300727318
-  POINT  3366  -6.067132875158276  21.76072558269578
-  POINT  3367  -5.81454204920424  21.32106756251621
-  POINT  3368  -5.309100236308474  21.32171516131793
-  POINT  3369  -9.89088523942082  17.79886411983713
-  POINT  3370  -10.14857204283547  18.23918999542934
-  POINT  3371  -9.377722815740299  17.79898156357048
-  POINT  3372  -9.121932143058153  18.23935021686822
-  POINT  3373  -9.377649624192905  18.6793738168293
-  POINT  3374  -10.66209369019408  15.59357842031993
-  POINT  3375  -10.4047259333652  16.03513252143312
-  POINT  3376  -9.890767799768657  16.03514342813541
-  POINT  3377  -15.5551069052719  19.54892678731335
-  POINT  3378  -15.97007772814454  19.09864623920131
-  POINT  3379  -16.11086108382489  19.54894292435325
-  POINT  3380  -15.08631065964352  19.54931079809318
-  POINT  3381  -15.22709401532387  19.99960748324512
-  POINT  3382  -11.95485738736122  20.44085699368801
-  POINT  3383  -12.47133467813871  20.44086208506123
-  POINT  3384  -12.2071089926688  20.00000805384752
-  POINT  3385  -12.48035172922288  21.32047778514489
-  POINT  3386  -11.95880860940138  21.32105241155066
-  POINT  3387  -12.22007726579314  21.75981917179383
-  POINT  3388  -11.69942419611676  20.88138349347376
-  POINT  3389  -17.47644814565474  19.54717789841071
-  POINT  3390  -17.94988903481506  19.54747252881383
-  POINT  3391  -17.76408314933547  19.99954839206847
-  POINT  3392  -18.23422300064733  19.09467791728322
-  POINT  3393  -17.87676913679358  18.65944248023681
-  POINT  3394  -17.09404296891593  19.09688220569864
-  POINT  3395  -16.90823708343633  19.54895806895328
-  POINT  3396  -19.76177103771798  23.07772732892936
-  POINT  3397  -19.25336756698695  22.67096898371729
-  POINT  3398  -19.18732490419377  23.0950221392252
-  POINT  3399  -19.4477189002975  22.22685220009963
-  POINT  3400  -19.87859220361732  22.20035725566065
-  POINT  3401  -19.25792784453962  23.55188835030948
-  POINT  3402  -18.75407461812375  23.14583867813167
-  POINT  3403  -19.16298007020004  24.02058528839067
-  POINT  3404  -19.60183463285162  23.97090406750409
-  POINT  3405  -17.87637073668006  21.33989279033893
-  POINT  3406  -17.34486803521384  21.33058393944672
-  POINT  3407  -17.55962675727944  21.76632022241122
-  POINT  3408  -17.09376266137075  20.90344544375881
-  POINT  3409  -16.77701868197013  21.3298728758311
-  POINT  3410  -17.4761271373948  20.45170513451989
-  POINT  3411  -16.90827778415109  20.45099407090427
-  POINT  3412  -17.94956802655513  20.45199976492301
-  POINT  3413  -18.23371022509465  20.90481762695371
-  POINT  3414  -15.02942422141325  28.42914654430462
-  POINT  3415  -14.7671126385203  27.97953118420565
-  POINT  3416  -15.52045268491218  27.53143128093732
-  POINT  3417  -15.78702266040701  27.9945786571865
-  POINT  3418  -15.54890495492492  28.43938079825739
-  POINT  3419  -15.01758100424557  27.52935438202635
-  POINT  3420  -14.50521687329288  27.52387632798913
-  POINT  3421  -9.904430672806125  28.40707065619491
-  POINT  3422  -10.41689547651911  28.41240707877134
-  POINT  3423  -10.66929721457722  27.96611203768271
-  POINT  3424  -10.92866096154303  28.41597287549923
-  POINT  3425  -9.645779006227713  27.95898668411711
-  POINT  3426  -9.392677949480536  28.4035110993572
-  POINT  3427  -10.41083773720197  27.51739624213824
-  POINT  3428  -9.899141965330045  27.51510256681794
-  POINT  3429  -10.15244797297871  27.06995256800136
-  POINT  3430  -12.99581434484171  20.4418189497832
-  POINT  3431  -13.51014574115279  20.441823572053
-  POINT  3432  -13.23791767975737  20.00001776749054
-  POINT  3433  -13.00483139592588  21.32143464986686
-  POINT  3434  -13.53137837642367  21.32075092653462
-  POINT  3435  -13.26816736611243  21.75856082205582
-  POINT  3436  -12.74356273953413  20.88266788962369
-  POINT  3437  -13.79945752002789  20.88653779646463
-  POINT  3438  -14.06279349021444  21.32366396865359
-  POINT  3439  -13.00253550757575  22.19714766326392
-  POINT  3440  -13.52908248807354  22.19646393993168
-  POINT  3441  -16.2347869870319  21.3294814436242
-  POINT  3442  -16.48589236087499  21.75661993931211
-  POINT  3443  -12.19975810951217  27.07290291179299
-  POINT  3444  -12.4571711074429  27.52124904151294
-  POINT  3445  -12.9694803662368  27.52097783922964
-  POINT  3446  -12.45674394638519  26.62593741289694
-  POINT  3447  -13.99578690627322  27.52331351175184
-  POINT  3448  -14.24625527199849  27.07313670957253
-  POINT  3449  -13.48182261231196  27.52097247150653
-  POINT  3450  -13.22448305890368  27.07257926105835
-  POINT  3451  -16.51179676394965  26.62394911594787
-  POINT  3452  -16.76214593621621  26.16105509049696
-  POINT  3453  -16.01909528016721  26.61667970802645
-  POINT  3454  -15.77567611970079  26.15848881210691
-  POINT  3455  -16.6164827210978  25.71543822133669
-  POINT  3456  -17.10186669733096  25.72098721941252
-  POINT  3457  -14.2878073219469  25.27536783225349
-  POINT  3458  -14.55271790511985  24.83011743787473
-  POINT  3459  -8.872303159269968  26.61976418580748
-  POINT  3460  -9.383403717149058  26.62219230704299
-  POINT  3461  -8.615525103211919  26.17503638397946
-  POINT  3462  -8.361773029290564  26.61807484838205
-  POINT  3463  -6.072689306874938  27.05391647376855
-  POINT  3464  -5.820129147476668  27.49712192171329
-  POINT  3465  -6.32809711573065  27.4985865281558
-  POINT  3466  -8.108499361881071  27.06075324214968
-  POINT  3467  -7.851721305823022  26.61602544032166
-  POINT  3468  -7.342393531093229  26.61452723488857
-  POINT  3469  -7.595667198502723  26.17184884112093
-  POINT  3470  -7.089552456771225  27.05704245715018
-  POINT  3471  -6.833498349450926  26.61286585794945
-  POINT  3472  -8.86778693118517  24.84742870791405
-  POINT  3473  -9.124384612345526  25.29019441464502
-  POINT  3474  -9.37915421259267  24.8485055322633
-  POINT  3475  -8.869536282064676  25.73292165585033
-  POINT  3476  -9.380903563472174  25.73399848019958
-  POINT  3477  -8.359006152085271  25.7312323184249
-  POINT  3478  -8.357038518711398  24.84664678923989
-  POINT  3479  -10.66208748767119  24.40642264890459
-  POINT  3480  -10.40472005439022  23.96486714250717
-  POINT  3481  -9.890762707770147  23.96485666497387
-  POINT  3482  -10.14796982013292  23.52313091779618
-  POINT  3483  -9.635034736729882  24.4061663576086
-  POINT  3484  -9.891632417890238  24.84893206433957
-  POINT  3485  -10.91783258828627  25.73632062930466
-  POINT  3486  -11.1763927535566  25.29161367806042
-  POINT  3487  -10.91909643785067  24.8491689242055
-  POINT  3488  -10.40452189220693  24.84933916498578
-  POINT  3489  -10.14864136806972  25.29167833964048
-  POINT  3490  -11.74873160124686  31.58187192779659
-  POINT  3491  -11.49828734891701  32.00603316279637
-  POINT  3492  -11.47479874651534  31.12093311396852
-  POINT  3493  -11.99907724384035  31.14306172093513
-  POINT  3494  -8.903187047443012  31.09050659247998
-  POINT  3495  -8.391529066814227  31.08429727879821
-  POINT  3496  -9.153056137445173  30.63961932778357
-  POINT  3497  -9.398187070199079  29.29658412996691
-  POINT  3498  -9.657774617851228  29.74665905739351
-  POINT  3499  -8.893751625915996  30.18945879004375
-  POINT  3500  -8.634397568876253  29.73884359430083
-  POINT  3501  -8.383104670453044  30.18672919584575
-  POINT  3502  -9.404349035868384  30.19173372623865
-  POINT  3503  -9.917079129380406  30.19681959513333
-  POINT  3504  -11.43712146196009  23.08138062463141
-  POINT  3505  -10.92066341043863  23.08206159128155
-  POINT  3506  -10.92128239036736  22.20090962423238
-  POINT  3507  -11.43896690004795  22.20068779271661
-  POINT  3508  -10.40485749578829  23.08231672552517
-  POINT  3509  -9.890900149168209  23.08230624799187
-  POINT  3510  -9.634625983220046  22.64137541680352
-  POINT  3511  -10.66359373947392  22.64123692147724
-  POINT  3512  -10.40547647571701  22.201164758476
-  POINT  3513  -10.66371310846123  20.88088246173954
-  POINT  3514  -10.40367257665969  20.44035401979257
-  POINT  3515  -10.40541301206526  21.32077321133221
-  POINT  3516  -9.8901701579261  20.44035371858478
-  POINT  3517  -10.14618183706572  19.99999877694407
-  POINT  3518  -9.634491342600295  20.88059096244695
-  POINT  3519  -6.573652952599984  17.35977611294056
-  POINT  3520  -6.827538661488333  17.79964423723647
-  POINT  3521  -7.335669920285115  17.79968797825121
-  POINT  3522  -6.827402180000886  16.91959841386031
-  POINT  3523  -7.335858102257347  16.9191701018657
-  POINT  3524  -7.590413254981577  17.35947930332449
-  POINT  3525  -3.091725092272973  19.99999995889544
-  POINT  3526  -2.823024423095185  20.44465006103595
-  POINT  3527  -2.82302446192895  19.55534988331524
-  POINT  3528  -2.318125036326323  19.55191484953968
-  POINT  3529  -2.134926559547786  19.9999999853544
-  POINT  3530  -2.359753808315156  39.37214496437061
-  POINT  3531  -2.220681201259319  39.87633202954547
-  POINT  3532  -2.853428424545745  39.31281750216315
-  POINT  3533  -3.322774736378872  39.23779911173357
-  POINT  3534  -3.813302945216087  39.15997614437607
-  POINT  3535  -4.091233566165744  39.57707352541702
-  POINT  3536  -4.278277613788639  39.06280534020281
-  POINT  3537  -3.156650010923889  39.74931797899575
-  POINT  3538  -3.033012362958341  30.6117523199572
-  POINT  3539  -2.778186554918571  31.06104208632408
-  POINT  3540  -2.27138793410801  31.06354594879045
-  POINT  3541  -2.523911917777087  31.51196219615595
-  POINT  3542  -2.019774925652819  30.61385000253146
-  POINT  3543  -1.765500288511335  31.06477011236333
-  POINT  3544  -2.779450402058304  30.16459938073862
-  POINT  3545  -3.286800193767151  30.16372586173725
-  POINT  3546  -3.794281249655442  30.16411092827807
-  POINT  3547  -3.540719288755405  29.71695798905948
-  POINT  3548  -4.303205754685972  30.16454776931187
-  POINT  3549  -3.027617960595887  32.41056575188199
-  POINT  3550  -2.775003207540966  31.96212546436659
-  POINT  3551  -2.268204586730404  31.96462932683296
-  POINT  3552  -2.013562100740824  32.41916396507942
-  POINT  3553  -1.762470810976946  31.96900069686879
-  POINT  3554  -2.77002899331762  32.86450527990432
-  POINT  3555  -3.278351077419224  32.86027843674272
-  POINT  3556  -2.262552160354756  32.87152776282665
-  POINT  3557  -2.513285277178094  33.32124044768738
-  POINT  3558  -1.512133134743765  31.51667171366356
-  POINT  3559  -1.257490648754185  31.97120635191003
-  POINT  3560  -0.7545339478042523  31.97468651214141
-  POINT  3561  -0.5035764459107245  31.51991166117807
-  POINT  3562  -0.7557251001955001  31.06778971354904
-  POINT  3563  -1.260520126288574  31.06697576740457
-  POINT  3564  -1.997791297947086  34.24333855669495
-  POINT  3565  -2.25349817785614  33.77894139916177
-  POINT  3566  -2.760975010819003  33.77191891623943
-  POINT  3567  -3.011955447586298  34.2203681171806
-  POINT  3568  -3.271742546908253  33.76266716570622
-  POINT  3569  -2.748277227128552  34.67648604901853
-  POINT  3570  -3.259044763217802  34.66723429848531
-  POINT  3571  -2.242930952922364  34.69789100853247
-  POINT  3572  -10.99496194121145  34.7558609147853
-  POINT  3573  -11.47394482127665  34.67289318116666
-  POINT  3574  -10.72127300001099  35.18620741077456
-  POINT  3575  -10.447732383235  34.72460493961236
-  POINT  3576  -11.39311640574461  35.78402816783584
-  POINT  3577  -11.76362390176834  35.51004748537068
-  POINT  3578  -11.89139445142899  36.08088113093766
-  POINT  3579  -10.945244583311  30.21194894494906
-  POINT  3580  -11.20910920668068  30.66888033631249
-  POINT  3581  -10.95876356408719  31.10769054317395
-  POINT  3582  -10.43863904361896  31.09908334789622
-  POINT  3583  -10.70432858345361  31.55113612555225
-  POINT  3584  -10.17836378582505  30.6487660147482
-  POINT  3585  -10.43178936780789  30.20369134590305
-  POINT  3586  -12.20772792247103  28.87130307528364
-  POINT  3587  -11.95934239545081  29.3298295299858
-  POINT  3588  -11.44840757865733  29.32083401178019
-  POINT  3589  -11.18782961921505  28.86783790788402
-  POINT  3590  -11.95080070850122  28.4216606767123
-  POINT  3591  -11.44023135727316  28.42154286679538
-  POINT  3592  -12.78538354685579  31.63539654824448
-  POINT  3593  -13.08141318168281  32.09785280557013
-  POINT  3594  -13.69337999756491  33.05046757946367
-  POINT  3595  -14.20287042370327  33.22861936316023
-  POINT  3596  -13.9643465646559  33.62431331178948
-  POINT  3597  -14.50371229213761  32.89870088682812
-  POINT  3598  -14.7783619362536  33.47590510864688
-  POINT  3599  -14.33939456995485  32.47590094466933
-  POINT  3600  -13.3984866124191  32.59184334012446
-  POINT  3601  -13.61483042587599  32.16078309628009
-  POINT  3602  -12.5094486201497  31.15885540730061
-  POINT  3603  -12.23551576541817  30.69791659347253
-  POINT  3604  -12.48258595884198  30.24998072031472
-  POINT  3605  -13.02182206843361  31.19025142078188
-  POINT  3606  -13.23628259023528  30.6875215539166
-  POINT  3607  -13.51221751694137  31.16406269486048
-  POINT  3608  -12.98553667078657  30.24101005064971
-  POINT  3609  -9.935933060425999  31.99895783017763
-  POINT  3610  -9.425788712629927  31.99952776172602
-  POINT  3611  -9.175113162335302  32.44721817562974
-  POINT  3612  -9.433884308094877  32.90351985240996
-  POINT  3613  -9.947998399553743  32.91366946294919
-  POINT  3614  -9.694220649782007  33.36180258527841
-  POINT  3615  -5.845709714652145  32.8543394931615
-  POINT  3616  -6.35943259227712  32.85785448154385
-  POINT  3617  -6.099796641324188  32.4084027857334
-  POINT  3618  -6.620526367917938  33.30931460020675
-  POINT  3619  -6.874613294589981  32.86337789277866
-  POINT  3620  -5.843830266875138  33.74469076224041
-  POINT  3621  -6.366502908847091  33.75556165131462
-  POINT  3622  -6.104987510117153  34.19646122458308
-  POINT  3623  -6.881683611159954  33.76108506254942
-  POINT  3624  -8.152299853281146  32.43384481530836
-  POINT  3625  -7.904575766385607  32.88643722911405
-  POINT  3626  -7.38887125499455  32.87173901043978
-  POINT  3627  -7.651411581621856  33.32953623011583
-  POINT  3628  -7.891317422946985  31.97994508772288
-  POINT  3629  -7.127777479353732  32.42027889177689
-  POINT  3630  5.815416780370211  25.7254507508302
-  POINT  3631  6.068349777660536  25.28383032121751
-  POINT  3632  6.322914497966334  25.72626412073013
-  POINT  3633  5.813813981238598  24.84216926607556
-  POINT  3634  5.054251193044102  25.28243436294704
-  POINT  3635  5.306981751859498  24.8417834592201
-  POINT  3636  5.559943673033683  24.40093577397807
-  POINT  3637  6.584305206584972  27.94375248790075
-  POINT  3638  6.331860450220269  28.38790682772228
-  POINT  3639  6.840628663734527  28.38986729253429
-  POINT  3640  6.328097160904627  27.49858657198942
-  POINT  3641  5.31221078469278  27.49556469000557
-  POINT  3642  5.057585437902588  27.05131477146023
-  POINT  3643  5.817351437794507  26.61016822842614
-  POINT  3644  6.072689351825773  27.05391651369978
-  POINT  3645  6.325319414707275  26.61163283561645
-  POINT  3646  5.82012918399186  27.49712196479911
-  POINT  3647  5.567618593771634  27.9402347482952
-  POINT  3648  4.047052787592788  28.82584698915801
-  POINT  3649  4.29983719277504  28.38154452099692
-  POINT  3650  4.807024232846825  28.38271374491336
-  POINT  3651  4.301274310468107  29.2720465985073
-  POINT  3652  4.809682020990673  29.27320084424044
-  POINT  3653  4.549022188976916  26.16510838289133
-  POINT  3654  4.802971287585841  26.60801534827591
-  POINT  3655  4.296500402283245  26.6072706710264
-  POINT  3656  5.310107224596258  26.60915248332515
-  POINT  3657  5.56273728747776  26.16686880524183
-  POINT  3658  5.308172567171963  25.72443500572921
-  POINT  3659  4.801571700151651  25.72385241735866
-  POINT  3660  3.790057682711869  26.60644965824722
-  POINT  3661  4.044006781320794  27.04935662363181
-  POINT  3662  3.284985274934477  27.49173672429433
-  POINT  3663  3.031723737372097  27.04803779814592
-  POINT  3664  3.284192748221195  26.60594750772882
-  POINT  3665  3.791445088039201  27.4924373182607
-  POINT  3666  7.595667276623683  26.1718488829917
-  POINT  3667  7.339729660651949  25.72854265913015
-  POINT  3668  6.831093491921173  25.72749718220235
-  POINT  3669  6.578160494630848  26.16911761181503
-  POINT  3670  6.833498408662114  26.61286589708867
-  POINT  3671  7.342393603714925  26.61452727784253
-  POINT  3672  7.851721391752919  26.61602548754698
-  POINT  3673  10.16379461741962  28.8569316742142
-  POINT  3674  9.910917354739734  29.30167017583803
-  POINT  3675  10.42338218073125  29.30700664681063
-  POINT  3676  9.398187236685452  29.296584259916
-  POINT  3677  11.1763929467876  25.29161378016803
-  POINT  3678  11.43269470633229  25.73584899017798
-  POINT  3679  11.17575978189087  27.0727338951912
-  POINT  3680  11.43421927431302  27.52144974007221
-  POINT  3681  10.92260343334439  27.52096222835202
-  POINT  3682  11.43075507899234  26.62688867729366
-  POINT  3683  11.95934260436991  29.32983015861389
-  POINT  3684  12.46767046560084  29.32772545608889
-  POINT  3685  12.20772811265096  28.87130363239207
-  POINT  3686  12.48258604719192  30.24998189542344
-  POINT  3687  11.97221474555926  30.23418783961753
-  POINT  3688  12.23551583543139  30.69791775273026
-  POINT  3689  12.9694805256095  27.52097823699379
-  POINT  3690  13.48182274384587  27.52097291958309
-  POINT  3691  13.74078426771563  27.97171267290139
-  POINT  3692  13.99578697125026  27.52331403777258
-  POINT  3693  -0.2530784093217016  18.66225344208705
-  POINT  3694  0.2530784208222577  18.66225344183592
-  POINT  3695  6.030645871568652e-09  18.22651105844045
-  POINT  3696  0.5081910055071862  19.09773258580186
-  POINT  3697  -0.5081909940579249  19.09773258612098
-  POINT  3698  0.3913327604803437  19.54899791355816
-  POINT  3699  2.734955073611239e-09  19.54899791274126
-  POINT  3700  -0.3913327526621249  19.54899791355815
-  POINT  3701  3.794281045691874  9.835889181209401
-  POINT  3702  3.286800036582792  9.836274197162457
-  POINT  3703  2.229340800261039  4.38442472316282
-  POINT  3704  1.730980420814213  4.354398366661153
-  POINT  3705  1.975648040643678  3.904985248730975
-  POINT  3706  5.253303014360708  1.128293718388772
-  POINT  3707  5.02628530891481  0.6418891392761246
-  POINT  3708  2.255436532179687  1.571943194814049
-  POINT  3709  1.982157162102268  2.023904119430414
-  POINT  3710  2.749111535735891  1.631270413254645
-  POINT  3711  -1.254058521951619  7.116431779054716
-  POINT  3712  -0.7511018940799036  7.112951583302987
-  POINT  3713  -1.503048503853604  6.664068013225982
-  POINT  3714  -1.997790841279557  5.756661654557217
-  POINT  3715  -1.739533928644415  5.288390381777326
-  POINT  3716  -2.242930398731676  5.302109189546279
-  POINT  3717  -1.241669088051592  5.270356204654476
-  POINT  3718  -0.9957604298274654  5.733872215635875
-  POINT  3719  -1.247341652262671  6.199670785960144
-  POINT  3720  -0.7487077108978402  6.190600154807756
-  POINT  3721  -1.750101222783229  6.207340074054102
-  POINT  3722  0.2525804711664861  16.03806627312495
-  POINT  3723  0.7575089779655068  16.03809741945602
-  POINT  3724  2.02030624750022  16.47789565447198
-  POINT  3725  1.768522151534456  16.91607496170236
-  POINT  3726  1.263131370718908  16.9154812897201
-  POINT  3727  1.010191697747241  16.47724942348051
-  POINT  3728  0.7581006050570804  16.91517093599549
-  POINT  3729  1.767492760883478  16.03853792054329
-  POINT  3730  1.262539743627335  16.03840777318063
-  POINT  3731  2.020500917581566  12.9527349076961
-  POINT  3732  2.27331260158336  12.50912505089398
-  POINT  3733  2.779144928744407  12.50876122906312
-  POINT  3734  3.031723754127154  12.95196235014854
-  POINT  3735  2.778352454165535  13.39455042727942
-  POINT  3736  2.272957833603747  13.3948329253368
-  POINT  3737  2.525426876575043  13.8369232187498
-  POINT  3738  2.777506896019309  15.1594754466739
-  POINT  3739  2.272346079797352  15.15939314985943
-  POINT  3740  2.019831152532347  14.71933669397711
-  POINT  3741  3.030366570726561  14.7190708982712
-  POINT  3742  2.272480678625036  14.27823797632229
-  POINT  3743  2.777875299186825  14.27795547826491
-  POINT  3744  10.93683714441736  10.68473936450384
-  POINT  3745  10.42338210640577  10.69299645121282
-  POINT  3746  10.16379499462924  11.14307136444035
-  POINT  3747  9.91091727032488  10.69833236588283
-  POINT  3748  10.41689657692929  11.58759618069605
-  POINT  3749  9.904431740848405  11.59293209536606
-  POINT  3750  8.383104263115078  9.813271926383957
-  POINT  3751  8.131409992405931  9.367205411144512
-  POINT  3752  9.398187257932385  10.70341785754419
-  POINT  3753  9.657774369708918  10.25334294431667
-  POINT  3754  8.893751225144806  9.810542586143804
-  POINT  3755  8.634397395286692  10.26115777621818
-  POINT  3756  8.886484135943755  10.70714689312742
-  POINT  3757  9.13962703655972  11.15213631469359
-  POINT  3758  9.404348514274115  9.808267818781912
-  POINT  3759  9.153055382102501  9.360381968947689
-  POINT  3760  8.872305329160442  13.38023764365699
-  POINT  3761  8.361774760572246  13.38192662649333
-  POINT  3762  8.108500687104918  12.93924814391208
-  POINT  3763  7.851722750806532  13.38397571670315
-  POINT  3764  9.129653596289845  12.93477140237956
-  POINT  3765  9.383406228579656  13.37780999233429
-  POINT  3766  8.365440776821156  12.49364881518358
-  POINT  3767  8.880975687566195  11.60022015801457
-  POINT  3768  8.623178158666493  12.04733677120861
-  POINT  3769  8.876290078715968  12.4908870097273
-  POINT  3770  9.387390978135182  12.48845935840459
-  POINT  3771  9.645780391854883  12.04101593868705
-  POINT  3772  9.392678809554825  11.59649112243135
-  POINT  3773  7.336521171883755  16.03802297080912
-  POINT  3774  6.828065241427138  16.03845128541167
-  POINT  3775  7.5918329762552  15.59662152541176
-  POINT  3776  7.845750620519943  16.03722595032059
-  POINT  3777  7.337862589465587  15.15534235318604
-  POINT  3778  5.057585641163165  12.94868558387678
-  POINT  3779  5.310107534158264  13.39084788872668
-  POINT  3780  5.817351898032172  13.38983223877548
-  POINT  3781  6.07268977213729  12.94608405296639
-  POINT  3782  6.325320010388582  13.38836776247147
-  POINT  3783  5.312210950489913  12.50443571161929
-  POINT  3784  5.820129413724779  12.50287853813417
-  POINT  3785  7.339731120788066  14.27145814743096
-  POINT  3786  7.595668707268915  13.82815216683726
-  POINT  3787  6.578161363273717  13.83088304133535
-  POINT  3788  6.833499237378835  13.38713485552626
-  POINT  3789  7.342394633801588  13.38547368425602
-  POINT  3790  0.252580463343477  23.08531079540609
-  POINT  3791  8.162767350938793e-09  23.52306095911839
-  POINT  3792  -0.2525804483660444  23.08531079452379
-  POINT  3793  0.7575089608641339  23.96190261703586
-  POINT  3794  1.010191668996723  23.52275060745893
-  POINT  3795  0.7581005854889762  23.08482908796231
-  POINT  3796  0.2525804650598689  23.96193376174162
-  POINT  3797  -0.2525804466496525  23.96193376085932
-  POINT  3798  0.5049285060517139  24.40077541877679
-  POINT  3799  -0.5055201152249069  22.64707892226741
-  POINT  3800  -0.7581005704056165  23.08482908597971
-  POINT  3801  -2.280691500226466  21.33225925503491
-  POINT  3802  -2.53596148453538  20.89273520120051
-  POINT  3803  -2.318125017725038  20.44808511706579
-  POINT  3804  -1.847863620987981  20.44808512551896
-  POINT  3805  -1.523722029333108  20.89935045509462
-  POINT  3806  5.812596363012457  16.91987591856731
-  POINT  3807  6.066345594955665  16.47969821633841
-  POINT  3808  5.052976709870697  16.47984331586753
-  POINT  3809  5.306138118529179  16.03968129951453
-  POINT  3810  3.790935938593665  22.20328485170038
-  POINT  3811  3.537066694466712  22.64267534247436
-  POINT  3812  3.788945299949968  23.08133297666114
-  POINT  3813  4.294456576555887  23.08098941943979
-  POINT  3814  5.814542622740053  18.67893193273223
-  POINT  3815  6.321208749925488  18.67923371051273
-  POINT  3816  5.56317568611094  19.11824430305507
-  POINT  3817  5.309100721439222  18.67828449587171
-  POINT  3818  5.55961311789328  17.35962041953518
-  POINT  3819  5.306832701253025  17.79918676761919
-  POINT  3820  5.306180989556889  16.91965690872165
-  POINT  3821  4.547661231803737  17.3588241803909
-  POINT  3822  4.799993464751521  16.91958781683539
-  POINT  3823  4.801296726707842  17.79849881202905
-  POINT  3824  4.295760214073866  17.79792158273044
-  POINT  3825  5.054931683523153  18.23828416995873
-  POINT  3826  4.80356474689404  18.67759654028158
-  POINT  3827  4.299173611489742  18.6763503095416
-  POINT  3828  3.290304316514962  18.67294152057774
-  POINT  3829  3.035034337010901  18.23341748971889
-  POINT  3830  3.285878391294609  17.79579279452859
-  POINT  3831  3.790936184735975  17.79671510214655
-  POINT  3832  4.04457167964008  18.2363897337847
-  POINT  3833  3.794349582151851  18.67514382895771
-  POINT  3834  10.40547659015908  22.20116479457716
-  POINT  3835  10.92128251969344  22.20090966781737
-  POINT  3836  10.14796994537765  23.52313096986383
-  POINT  3837  9.8907628324997  23.96485671831825
-  POINT  3838  10.40472019475341  23.96486720377927
-  POINT  3839  9.890900260175624  23.08230629000788
-  POINT  3840  9.378284610504384  23.96443017775849
-  POINT  3841  9.377738405713401  23.08218964573298
-  POINT  3842  9.634626082765084  22.64137545133806
-  POINT  3843  8.099972523597952  21.7604283165895
-  POINT  3844  7.844935974709012  21.32035791039074
-  POINT  3845  5.052976083273045  23.52015672445931
-  POINT  3846  5.306137433620915  23.96031879840885
-  POINT  3847  5.812969663000015  23.9607046052643
-  POINT  3848  8.610566754219654  19.11957081809886
-  POINT  3849  8.86560419797468  18.67950029477104
-  POINT  3850  8.354849270149012  18.67954721468524
-  POINT  3851  4.553342440596749  20.88364911748843
-  POINT  3852  4.813437754880869  20.4412013335515
-  POINT  3853  7.59041331172436  17.35947928465035
-  POINT  3854  7.84499397090196  16.91893659852759
-  POINT  3855  -19.25787296088819  16.44788827908155
-  POINT  3856  -19.60184782149814  16.02916106451099
-  POINT  3857  -19.1873871451938  16.90476537360675
-  POINT  3858  -19.76179636729207  16.92243533655163
-  POINT  3859  -18.75405232838112  16.85355871501342
-  POINT  3860  -17.47351228606856  13.33558852399519
-  POINT  3861  -16.99713742559343  13.37046042966367
-  POINT  3862  -17.69351481734877  13.78071241680643
-  POINT  3863  -17.67256727113895  14.23260684746697
-  POINT  3864  -17.10180880051252  14.27897349996412
-  POINT  3865  -17.52690194145971  14.67823884343126
-  POINT  3866  -18.11860795829596  14.17997776027357
-  POINT  3867  -8.872305209312021  13.38023770553157
-  POINT  3868  -8.615527284439597  13.82496527042976
-  POINT  3869  -9.383406088516729  13.37781006740056
-  POINT  3870  -3.29030430028144  18.67294152375674
-  POINT  3871  -3.794349564136366  18.67514383248151
-  POINT  3872  -4.044571659990828  18.23638973901306
-  POINT  3873  -3.790936165766305  17.79671510855067
-  POINT  3874  -4.295760192767313  17.79792158977951
-  POINT  3875  -3.035034321141562  18.23341749366453
-  POINT  3876  -4.801296702384416  17.79849882003976
-  POINT  3877  -4.547661208159893  17.35882418957737
-  POINT  3878  -5.306180959737993  16.91965692151171
-  POINT  3879  -5.55961308673966  17.35962043087595
-  POINT  3880  -5.306832673423715  17.79918677637247
-  POINT  3881  -4.799993438895712  16.91958782835436
-  POINT  3882  -4.294456929278608  16.9190105980941
-  POINT  3883  -2.272576526046017  16.03887380690432
-  POINT  3884  -2.777737341802472  16.0389561054949
-  POINT  3885  -2.524923853949907  15.59959837248141
-  POINT  3886  -1.009801502771103  14.71943838905496
-  POINT  3887  -1.262295091084871  15.15932946921788
-  POINT  3888  -1.767248108404131  15.15945961891492
-  POINT  3889  -1.514810020874192  15.59938592419379
-  POINT  3890  -3.788433924444957  15.15930010017922
-  POINT  3891  -3.282944342657759  15.15927612630229
-  POINT  3892  -3.53557425149356  15.59970464494893
-  POINT  3893  -7.339731052101191  14.27145818376952
-  POINT  3894  -7.595668629168774  13.82815220873106
-  POINT  3895  -7.849059155801069  14.26996022049591
-  POINT  3896  -7.342394561194965  13.3854737272261
-  POINT  3897  -7.084485066391316  14.7143115191922
-  POINT  3898  -6.829226012364133  15.15638770751324
-  POINT  3899  -6.321312708705147  15.15701776202244
-  POINT  3900  -6.068350603934552  14.71617011524867
-  POINT  3901  -6.322915322587308  14.27373641192795
-  POINT  3902  -5.815417372472714  14.27454968432659
-  POINT  3903  -6.831094539759021  14.27250350742734
-  POINT  3904  -6.578161308297183  13.83088307650527
-  POINT  3905  -8.866490968805563  16.03593620740154
-  POINT  3906  -8.611811380443392  15.59504271031803
-  POINT  3907  -9.378288849377203  16.03556985539014
-  POINT  3908  -9.6350393648364  15.59383445480634
-  POINT  3909  -9.379158137016026  15.15149576728833
-  POINT  3910  -9.89163708740748  15.1510693400336
-  POINT  3911  -15.8358398935749  10.22173585196274
-  POINT  3912  -15.57327200390477  9.802417738572654
-  POINT  3913  -15.56201444033999  10.67148502492812
-  POINT  3914  -15.03253570609934  9.806583202382573
-  POINT  3915  -14.77952317432621  10.24189580191657
-  POINT  3916  9.425787409990559  8.000472836505047
-  POINT  3917  9.674058285545414  8.456902013814751
-  POINT  3918  8.913238706756516  8.008641634917387
-  POINT  3919  9.413783458670364  8.907219666364485
-  POINT  3920  8.903186169541055  8.909494433726376
-  POINT  3921  8.934155614066498  6.185727604037459
-  POINT  3922  9.185518368839453  5.729430618608695
-  POINT  3923  8.426271183269629  5.29029227071893
-  POINT  3924  8.171917178443586  5.749542014684138
-  POINT  3925  7.909982677729378  5.316726387461308
-  POINT  3926  7.65715073777133  4.866671726394044
-  POINT  3927  7.405022267322629  4.401754646811489
-  POINT  3928  7.912208212106719  4.392559563913546
-  POINT  3929  7.402796732945287  5.325921470359251
-  POINT  3930  8.404914415163201  4.401060889634398
-  POINT  3931  8.152785944714498  3.936143810051844
-  POINT  3932  8.395983975566867  3.439639257034445
-  POINT  3933  7.903277772510386  3.431137931313593
-  POINT  3934  8.859661009169432  3.521793227546019
-  POINT  3935  9.192238274352787  3.866734673314474
-  POINT  3936  4.268076247259387  3.565481647629336
-  POINT  3937  4.016822549239988  3.997412240786614
-  POINT  3938  3.742622838171702  3.563061153758769
-  POINT  3939  7.792705379504119  2.62557788257827
-  POINT  3940  7.793203652127295  2.025645271244315
-  POINT  3941  7.321623681205077  1.829570466086152
-  POINT  3942  7.678396273741249  1.532671260083118
-  POINT  3943  -9.67405808643629  8.456902308458442
-  POINT  3944  -9.413783282784191  8.907219840486656
-  POINT  3945  -9.425787263000267  8.000473059513219
-  POINT  3946  -9.404348331955575  9.808267994664813
-  POINT  3947  -9.657774187537704  10.2533431194428
-  POINT  3948  -9.398187091428191  10.70341798750657
-  POINT  3949  -8.886483995011314  10.70714699997187
-  POINT  3950  -8.634397277109187  10.26115787334679
-  POINT  3951  -8.375837072421056  10.70987630924256
-  POINT  3952  -7.859855983182076  11.60547875629908
-  POINT  3953  -8.117653499839879  11.15836215444448
-  POINT  3954  -7.865566781937751  10.71237302781939
-  POINT  3955  -7.402798620889166  5.325921535058544
-  POINT  3956  -7.909984549202172  5.316726131062188
-  POINT  3957  -7.91137279652743  6.215871164881401
-  POINT  3958  -7.395668297048518  6.230569439935667
-  POINT  3959  -7.651411014573558  6.670464686753046
-  POINT  3960  -7.127776753374082  7.579721889218547
-  POINT  3961  -7.388870581544597  7.128261877982224
-  POINT  3962  -6.874612686924131  7.136622973043634
-  POINT  3963  -7.904575081023509  7.113563602927958
-  POINT  3964  -2.775002874658712  8.037874849929569
-  POINT  3965  -2.523911656853837  8.48803806266702
-  POINT  3966  -2.748276461706778  5.323514342820022
-  POINT  3967  -2.490019549071636  4.855243070040132
-  POINT  3968  -2.734687480700977  4.405830000443286
-  POINT  3969  -2.221684119951277  3.449608486395616
-  POINT  3970  -1.723323855016578  3.419581979977251
-  POINT  3971  -1.475257769780243  2.932460366680298
-  POINT  3972  -1.727946415087521  2.471297653398232
-  POINT  3973  -2.223574359144033  2.516811469853332
-  POINT  3974  -3.221425371391462  2.620248809612628
-  POINT  3975  -3.480916638529793  3.091370153630558
-  POINT  3976  -2.468657119838987  3.007906638484771
-  POINT  3977  -2.720982349242926  3.493309929661852
-  POINT  3978  -2.722872588435682  2.560512913119568
-  POINT  3979  -5.842877759869626  2.614418369465591
-  POINT  3980  -6.061704181617179  2.125899992841759
-  POINT  3981  -5.97038887687998  1.577324987897494
-  POINT  3982  -5.06120498229036  2.210552055587216
-  POINT  3983  -5.314757330560761  1.807879325032759
-  POINT  3984  -5.55603059107262  1.449150510867695
-  POINT  3985  -5.910338424284915  0.8932498958018659
-  POINT  3986  -5.818442258077686  3.559384883546551
-  POINT  3987  -6.081231365982387  4.02806702834004
-  POINT  3988  -5.831279019722861  4.472379399615662
-  POINT  3989  -5.313338782452499  4.466227623547525
-  POINT  3990  -5.576017782319205  4.91994190717009
-  POINT  3991  -6.359431968524975  7.142146372318731
-  POINT  3992  -6.620525796695491  6.690686361082408
-  POINT  3993  1.233115817299789  35.66363567026767
-  POINT  3994  1.486808643266108  35.18419627849168
-  POINT  3995  0.4944716807918905  35.20892209325812
-  POINT  3996  0.7430350528777356  34.73871437587108
-  POINT  3997  1.24166914315593  34.72964380187346
-  POINT  3998  1.723322487966932  36.58041769429607
-  POINT  3999  1.47525558328076  37.06753926104606
-  POINT  4000  1.229221132046703  36.61216257531929
-  POINT  4001  1.727943080105888  37.52870184484969
-  POINT  4002  2.223571255475589  37.48318802553167
-  POINT  4003  2.221683046657149  36.55039137343753
-  POINT  4004  -6.12911124076021e-07  36.15975594917647
-  POINT  4005  0.2456022332246583  35.68768488038043
-  POINT  4006  0.7400741502994709  35.68099311908834
-  POINT  4007  0.9842463697325569  36.14239845738996
-  POINT  4008  0.7361794650463853  36.62952002413996
-  POINT  4009  0.2456016905429583  36.6413100607267
-  POINT  4010  -3.793978809704677  29.27114346488373
-  POINT  4011  -3.286497753816385  29.27075839834291
-  POINT  4012  -4.047052767131356  28.82584690724009
-  POINT  4013  -4.301274302070375  29.27204649795666
-  POINT  4014  -1.010043015772705  27.0468834923308
-  POINT  4015  -1.262608764623798  27.49047222490107
-  POINT  4016  -1.767930085310411  27.49060023494886
-  POINT  4017  -1.515420458762666  27.93408208316265
-  POINT  4018  0.2524349327400771  25.72146687392503
-  POINT  4019  0.7573603149878654  25.72151113216611
-  POINT  4020  1.009801512786854  25.28056167560054
-  POINT  4021  0.7573634246136738  24.84063535787972
-  POINT  4022  0.2524349288094089  24.84066650258547
-  POINT  4023  2.777737238018064  23.96104396031738
-  POINT  4024  2.524923774235408  24.40040170273027
-  POINT  4025  2.777506791782362  24.84052463209574
-  POINT  4026  3.535574059218396  24.40029545953312
-  POINT  4027  3.282925370480001  23.96061617471239
-  POINT  4028  3.282944215957301  24.84072399033624
-  POINT  4029  12.20022707000518  35.34109407649751
-  POINT  4030  11.70510822545789  35.04850824368519
-  POINT  4031  11.91055210130007  34.50393744856109
-  POINT  4032  12.60489935123083  35.00986841165744
-  POINT  4033  12.66773748228985  35.47670596579247
-  POINT  4034  8.893751753942059  30.18945889408129
-  POINT  4035  9.153056290168134  30.63961947961057
-  POINT  4036  8.131410636714342  30.63279563621241
-  POINT  4037  8.383104759045018  30.18672926891533
-  POINT  4038  8.634397687045755  29.73884369142445
-  POINT  4039  12.58774522600974  32.92273845990162
-  POINT  4040  12.88263711150898  33.38136361259253
-  POINT  4041  11.99490300572006  33.72244417282177
-  POINT  4042  11.76196217222862  33.30918283037465
-  POINT  4043  10.44503879622377  31.98862289521601
-  POINT  4044  9.935933261738526  31.99895822327177
-  POINT  4045  10.19676774154491  32.44505172349099
-  POINT  4046  10.43863927688695  31.09908378942327
-  POINT  4047  9.923929035406161  31.09221194132288
-  POINT  4048  12.04127152589021  32.88444301026691
-  POINT  4049  12.3185949442571  32.49062006753039
-  POINT  4050  11.23899726008386  32.44352050666546
-  POINT  4051  11.49281189047597  32.87706443800342
-  POINT  4052  10.95968790642227  32.8682603267732
-  POINT  4053  1.262715484017742  28.37904364136764
-  POINT  4054  1.768036798549242  28.37917166198487
-  POINT  4055  1.010161265302347  28.82419254739624
-  POINT  4056  2.021045344488098  28.82414552152322
-  POINT  4057  1.767940462475327  29.27066494618034
-  POINT  4058  1.26253538053122  29.27109444816391
-  POINT  4059  2.770029231935803  32.86450580601395
-  POINT  4060  2.513285504693407  33.32124089899702
-  POINT  4061  3.271742772836252  33.76266810178318
-  POINT  4062  3.531281879770986  33.30800649818775
-  POINT  4063  3.782262295813676  33.75645595947597
-  POINT  4064  3.278351258691227  32.86027907795702
-  POINT  4065  2.760975203039712  33.77191946209709
-  POINT  4066  3.011955619082402  34.2203689233853
-  POINT  4067  3.24336847489558  35.56418088173734
-  POINT  4068  3.51170389869557  35.11435420516057
-  POINT  4069  3.259044827222107  34.66723526388904
-  POINT  4070  2.748277257425567  34.67648662420295
-  POINT  4071  3.775382260352405  34.65823650434292
-  POINT  4072  2.490020077115392  35.144757594862
-  POINT  4073  2.734687809839291  35.59417066577944
-  POINT  4074  2.982689819169599  36.0349985828101
-  POINT  4075  5.320196103324097  34.6359031807579
-  POINT  4076  5.838135302791581  34.62975089654809
-  POINT  4077  5.843829338818099  33.7446915717945
-  POINT  4078  5.325945325800963  33.74013958043911
-  POINT  4079  6.104986270073042  34.19646204120262
-  POINT  4080  6.366501732041227  33.75556204313139
-  POINT  4081  7.355184469361421  29.28425732715628
-  POINT  4082  7.097783537365648  28.83658193947715
-  POINT  4083  7.865566929755092  29.28762815642849
-  POINT  4084  7.350228293730351  28.39242759965563
-  POINT  4085  19.44766038638703  17.77297915226804
-  POINT  4086  19.25342567711544  17.32881418384076
-  POINT  4087  19.87861805246748  17.79987630487601
-  POINT  4088  19.7617964066728  16.92243558592404
-  POINT  4089  18.23422309592939  19.09467776603307
-  POINT  4090  17.94988909858838  19.54747247390121
-  POINT  4091  17.87676920727169  18.65944226175127
-  POINT  4092  17.47644822823684  19.54717784596157
-  POINT  4093  17.34509995115183  18.66931480712425
-  POINT  4094  17.09404309109673  19.09688211341927
-  POINT  4095  14.28781180230033  14.72466403349399
-  POINT  4096  14.01051623503285  14.27484065136018
-  POINT  4097  14.53345889310514  14.28002636702044
-  POINT  4098  14.02979336632444  15.1647422550637
-  POINT  4099  9.380906978001171  14.26600341154953
-  POINT  4100  9.12438810215771  14.70980710098454
-  POINT  4101  15.04265771685345  14.28419049908406
-  POINT  4102  14.76536214958597  13.83436711695024
-  POINT  4103  15.51798377903927  13.38033526490094
-  POINT  4104  15.77563980375512  13.8415064727855
-  POINT  4105  15.57188627435891  14.28816954061234
-  POINT  4106  15.0151159829359  13.3824166393444
-  POINT  4107  14.50591715918759  13.37825250728078
-  POINT  4108  14.32789030772291  18.24225940568398
-  POINT  4109  14.06264433374127  18.67628429324169
-  POINT  4110  14.59588283104642  18.67648157009492
-  POINT  4111  14.05735903828086  17.80654303626809
-  POINT  4112  15.97007787533187  19.09864616168911
-  POINT  4113  15.55510702426619  19.54892674781743
-  POINT  4114  15.67915324486533  18.67142187799671
-  POINT  4115  15.13772625968102  18.6705433487333
-  POINT  4116  14.87248028569938  19.104568236291
-  POINT  4117  15.08631080741999  19.54931075553736
-  POINT  4118  16.40287455364234  16.49110362272822
-  POINT  4119  16.17789332204421  16.93847666340548
-  POINT  4120  15.63614396207806  16.93957763712053
-  POINT  4121  16.14372364991884  16.05344993095792
-  POINT  4122  15.61382912052633  16.05886889307093
-  POINT  4123  15.35525573754169  16.49958700177147
-  POINT  4124  15.52045255096381  27.53143212489101
-  POINT  4125  15.7870223740392  27.99457973843145
-  POINT  4126  15.02942399137993  28.42914752056209
-  POINT  4127  14.76711254324515  27.97953196141813
-  POINT  4128  14.51705994325481  28.42366935023485
-  POINT  4129  14.50592923991572  26.62175677982754
-  POINT  4130  14.24625536736449  27.07313717726593
-  POINT  4131  14.50521689123425  27.52387693058424
-  POINT  4132  15.01513786829292  26.61758604679623
-  POINT  4133  15.25855689895291  27.07577709405712
-  POINT  4134  15.01758093935937  27.52935510091147
-  POINT  4135  12.9694811665887  12.47903060881283
-  POINT  4136  12.45717370465674  12.47876009769995
-  POINT  4137  14.50520651711792  12.4761250777077
-  POINT  4138  14.7671040812539  12.02046720497029
-  POINT  4139  13.74078013085571  12.02829134523479
-  POINT  4140  13.9984165723697  11.58047790445619
-  POINT  4141  14.51705381061231  11.57633069980357
-  POINT  4142  11.4484074904361  10.67917014008009
-  POINT  4143  11.95934178620452  10.67017466538644
-  POINT  4144  12.20772768780863  11.12870134727384
-  POINT  4145  11.18783017672887  11.13216622534658
-  POINT  4146  11.9508019094484  11.57834527171309
-  POINT  4147  -6.319776468193496  23.08033815128008
-  POINT  4148  -6.066344452733028  23.52030179118255
-  POINT  4149  -6.827400621252306  23.08040135673631
-  POINT  4150  -5.054931155474743  21.76171557577203
-  POINT  4151  -4.801296232783984  22.20150105449617
-  POINT  4152  -4.299173338283442  21.32364952911328
-  POINT  4153  -4.044571390294786  21.76361015107778
-  POINT  4154  -4.803564411703622  21.32240320854091
-  POINT  4155  -9.890817652390373  18.67925530533506
-  POINT  4156  -10.40541205324793  18.6792215753713
-  POINT  4157  -10.66370535213654  19.1191138197801
-  POINT  4158  -10.92145974258163  18.67904850987438
-  POINT  4159  -10.40367095930107  19.55964298171444
-  POINT  4160  -9.890168540567483  19.55964268050665
-  POINT  4161  -9.634489634605369  19.11940539677126
-  POINT  4162  -10.40452722022296  15.15066274552778
-  POINT  4163  -10.91910259518919  15.1508331382961
-  POINT  4164  -11.1763986356346  14.70838986864997
-  POINT  4165  -10.91783739771569  14.26368314942298
-  POINT  4166  -10.14864599240259  14.70832405800977
-  POINT  4167  -12.73019529136231  15.59870134525367
-  POINT  4168  -12.98766621355665  15.15683558657137
-  POINT  4169  -15.04265746253503  14.28419090907873
-  POINT  4170  -14.53345861723851  14.28002669541752
-  POINT  4171  -17.78489628918051  15.09030875190717
-  POINT  4172  -17.98400083785333  15.51100038825157
-  POINT  4173  -18.29676496075896  15.05256382727852
-  POINT  4174  -17.21413781855408  15.13667540440432
-  POINT  4175  -18.37155338762809  16.42393112019951
-  POINT  4176  -18.3010675719337  16.8808082147247
-  POINT  4177  -18.20721907030622  15.96221804176685
-  POINT  4178  -17.69535039872778  15.99996296639551
-  POINT  4179  -11.18084802879951  18.23937671254223
-  POINT  4180  -11.43914132768812  18.67926895695104
-  POINT  4181  -11.43896743540164  17.79930467995242
-  POINT  4182  -12.99576621508222  19.55819858351203
-  POINT  4183  -13.5100976113933  19.55820320578183
-  POINT  4184  -14.85535659566817  17.374607928817
-  POINT  4185  -14.59059730877303  17.80674048573657
-  POINT  4186  -15.12588788049639  17.81032428898499
-  POINT  4187  -14.57446835462891  16.93461729113196
-  POINT  4188  -15.10975892635227  16.93820109438039
-  POINT  4189  -16.50015666545286  20.45264189053479
-  POINT  4190  -16.08514514186547  20.00088643669584
-  POINT  4191  -16.11090178453964  20.45097892630424
-  POINT  4192  -16.88252114147691  20.00090158129587
-  POINT  4193  -16.50011596473811  19.5506058885838
-  POINT  4194  -18.66035566784347  24.06457908884339
-  POINT  4195  -18.99865817957391  24.48245948801812
-  POINT  4196  -18.88584837729288  24.93009825639208
-  POINT  4197  -19.39363960589392  24.88740656466259
-  POINT  4198  -17.82901974500803  22.20723193084345
-  POINT  4199  -17.29751704354181  22.19792307995124
-  POINT  4200  -18.12519085452415  22.66390362771543
-  POINT  4201  -17.42146697630052  23.53377902746666
-  POINT  4202  -17.69547182462984  24.00000320447274
-  POINT  4203  -17.19821562645829  23.98500536439521
-  POINT  4204  -18.2073784758447  24.03761507800751
-  POINT  4205  -17.98412712600248  24.48884141493606
-  POINT  4206  -18.37170036647084  23.57574087838007
-  POINT  4207  -17.74281660287124  23.09380582796382
-  POINT  4208  -17.24556040469969  23.0788079878863
-  POINT  4209  -18.30109742612498  23.11887466729579
-  POINT  4210  -12.74043249554734  22.63704750337856
-  POINT  4211  -12.47951737358623  22.1991443855027
-  POINT  4212  -11.95797425376473  22.19971901190847
-  POINT  4213  -11.69840700784104  22.64001300642548
-  POINT  4214  -11.95612881567687  23.08041184382327
-  POINT  4215  -13.79175978718601  22.63195086063527
-  POINT  4216  -14.05739164572269  22.19336401942717
-  POINT  4217  -16.69915170518863  23.07149332083817
-  POINT  4218  -16.17786098319811  23.06167189306724
-  POINT  4219  -16.40292005613846  23.50895975961821
-  POINT  4220  -16.20887664909252  22.19021698069621
-  POINT  4221  -16.75110834403075  22.1906084129031
-  POINT  4222  -17.02050133175934  22.63152012133533
-  POINT  4223  -13.99649914138446  26.62119352777317
-  POINT  4224  -14.50592910840412  26.62175634401045
-  POINT  4225  -14.76538162860431  26.16564234700188
-  POINT  4226  -14.53346806546978  25.71999620058877
-  POINT  4227  -14.0105122342672  25.72518479387579
-  POINT  4228  -15.04267671628401  25.71582538537957
-  POINT  4229  -16.66503651825777  23.95642639357603
-  POINT  4230  -16.14374579626725  23.9466049658051
-  POINT  4231  -16.93904136658709  24.42265057058211
-  POINT  4232  -16.68103287029956  24.83472097500758
-  POINT  4233  -17.21421197850009  24.86329994582677
-  POINT  4234  -9.637659354432278  26.17823809135695
-  POINT  4235  -9.895007838390011  26.62370467699503
-  POINT  4236  -10.40670361026193  26.62599835231532
-  POINT  4237  -10.66169890492968  26.18015313981581
-  POINT  4238  -10.40539715902982  25.73591795079784
-  POINT  4239  -9.892507684713129  25.73551085015163
-  POINT  4240  -3.538866270674407  27.93563837319875
-  POINT  4241  -3.791445061003568  27.4924372688973
-  POINT  4242  -3.284985242746421  27.49173667393181
-  POINT  4243  -3.792541681848606  28.3806414211657
-  POINT  4244  -4.299837174214305  28.38154445423863
-  POINT  4245  -3.286081863591458  28.37994082620021
-  POINT  4246  -6.578160439640206  26.16911757665643
-  POINT  4247  -6.3253193653182  26.61163279891804
-  POINT  4248  -5.817351397064218  26.61016819247553
-  POINT  4249  -6.322914449413139  25.72626408985695
-  POINT  4250  -6.831093433545865  25.72749714888835
-  POINT  4251  -5.815416739071694  25.72545072182048
-  POINT  4252  -6.068349732977355  25.2838302940524
-  POINT  4253  -8.103068545520017  25.2879261001149
-  POINT  4254  -7.847089733293389  24.84545529905903
-  POINT  4255  -7.33972959193747  25.72854262281094
-  POINT  4256  -7.084483601710403  25.28568913601146
-  POINT  4257  -7.84905736666726  25.73004082824404
-  POINT  4258  -7.337860774808862  24.84465820022065
-  POINT  4259  -6.829224616417257  24.84361272629806
-  POINT  4260  -7.591830748000244  24.40337888934564
-  POINT  4261  -10.95968825756436  32.86825866172835
-  POINT  4262  -11.2389973762048  32.44351916990193
-  POINT  4263  -10.96516313120963  31.99722932793554
-  POINT  4264  -10.45710394986915  32.90333376542937
-  POINT  4265  -10.19676760818201  32.44505103256093
-  POINT  4266  -10.4450386107414  31.98862213265781
-  POINT  4267  -5.839993028780057  31.9585713890503
-  POINT  4268  -5.58222505575568  31.50997899536313
-  POINT  4269  -6.353715906405032  31.96208637743266
-  POINT  4270  -9.890881409539208  22.20113221196177
-  POINT  4271  -9.377719567935678  22.20101557304443
-  POINT  4272  -9.890817945887456  21.32074066481798
-  POINT  4273  -9.377648390967682  21.32062266583164
-  POINT  4274  -10.14857006043265  21.76080491471691
-  POINT  4275  -9.121929625682005  21.76064670155081
-  POINT  4276  -3.989917438513398  37.75936920944303
-  POINT  4277  -4.253220144914879  38.17942950972456
-  POINT  4278  -5.0612047044748  37.78945190920187
-  POINT  4279  -4.788965345375917  37.30790232371594
-  POINT  4280  -5.345230853006697  37.3897257540357
-  POINT  4281  -3.511703891126289  35.11435281720901
-  POINT  4282  -3.775382111584034  34.65823488537108
-  POINT  4283  -4.288463783602202  34.65011427144418
-  POINT  4284  -4.035804655693716  34.20299575272048
-  POINT  4285  -13.43620984438418  34.81446134683805
-  POINT  4286  -13.29869599960812  34.31160156237819
-  POINT  4287  -12.93463213128416  34.64179503997145
-  POINT  4288  -13.62553600610368  33.9629776498918
-  POINT  4289  -14.13908291075123  34.14518767789303
-  POINT  4290  -12.60490716900593  35.00986141752851
-  POINT  4291  -12.20023572325958  35.34108684648683
-  POINT  4292  -12.66774772099321  35.47669756860905
-  POINT  4293  -11.70511437947869  35.04850274706365
-  POINT  4294  -11.9105566427679  34.50393254228281
-  POINT  4295  -12.47145116324818  34.51147573062274
-  POINT  4296  -9.806918774248189  36.80166842930682
-  POINT  4297  -10.26857635288579  37.16264372426561
-  POINT  4298  -10.1979850569437  36.56768967568621
-  POINT  4299  -1.515143968311342  29.71762612467332
-  POINT  4300  -1.767218169152578  30.16613538008133
-  POINT  4301  -2.273105814749252  30.16491121650845
-  POINT  4302  -2.526893645558062  29.71688475828849
-  POINT  4303  -4.295343851645418  33.74833423033055
-  POINT  4304  -3.78226217962725  33.75645484425745
-  POINT  4305  -3.531281742859955  33.30800564331628
-  POINT  4306  -3.788870710138221  32.85406611529395
-  POINT  4307  -4.299971286819369  32.85149198399459
-  POINT  4308  -10.95895536230713  35.58920341710635
-  POINT  4309  -10.41172580433067  35.55794744193341
-  POINT  4310  -11.08356921006429  36.15576819899469
-  POINT  4311  -10.1942008448515  36.08605690473453
-  POINT  4312  -9.956518482555364  35.68306089840274
-  POINT  4313  -10.65319237871901  36.44257621921687
-  POINT  4314  -11.0910623698248  36.64296654514917
-  POINT  4315  -13.7593285339414  31.59910572962469
-  POINT  4316  -13.97378905574307  31.09637586275941
-  POINT  4317  -14.49013543528747  31.07749003746751
-  POINT  4318  -14.0764019646777  32.09309626417902
-  POINT  4319  -14.48389267802026  31.91422357801393
-  POINT  4320  -14.75329172047915  31.4892516249232
-  POINT  4321  -5.587461461429323  33.29923896261564
-  POINT  4322  -5.325946062699384  33.7401385358841
-  POINT  4323  -5.327825510476393  32.84978726680519
-  POINT  4324  -4.809231792482727  33.74478093752646
-  POINT  4325  -5.065600597928541  34.19023273715123
-  POINT  4326  -4.555689316416261  33.29824002906342
-  POINT  4327  -4.813859227656678  32.8479386911905
-  POINT  4328  5.823064971458006  28.38586497473401
-  POINT  4329  5.315146572158927  28.38430769994047
-  POINT  4330  5.062470610533198  28.82834397135218
-  POINT  4331  6.079388428607562  28.83197977936755
-  POINT  4332  5.317804360302774  29.27479479926754
-  POINT  4333  5.827084127424216  29.27699957992611
-  POINT  4334  10.41689568078359  28.4124072611171
-  POINT  4335  10.66929742196129  27.96611222514022
-  POINT  4336  9.904430854792075  28.4070707901445
-  POINT  4337  10.41083792953915  27.51739638025921
-  POINT  4338  8.886484172763202  29.29285479615131
-  POINT  4339  8.37583717786616  29.29012517098535
-  POINT  4340  9.139626727505856  28.8478657394769
-  POINT  4341  8.117653415472539  28.84163926115534
-  POINT  4342  11.95092859671319  24.8475539406863
-  POINT  4343  12.46807375787325  24.84583394788076
-  POINT  4344  12.20840003869946  25.28942203987447
-  POINT  4345  11.95272288103627  23.96287269629527
-  POINT  4346  12.47198579068075  23.9610098082623
-  POINT  4347  12.73018467318101  24.40129625485699
-  POINT  4348  11.43575282852112  23.96401601812759
-  POINT  4349  10.91929475924401  23.96469697384104
-  POINT  4350  11.43395854419803  24.84869726251862
-  POINT  4351  10.91909661344623  24.84916901000663
-  POINT  4352  11.69363226337182  24.40510917052491
-  POINT  4353  10.66208764636606  24.40642272229546
-  POINT  4354  12.45674415720379  26.62593764544495
-  POINT  4355  12.71561902895919  26.17761365870297
-  POINT  4356  12.46344625167966  25.73349620934157
-  POINT  4357  11.9463010905196  25.73521620214711
-  POINT  4358  11.68774091931249  26.17992315964508
-  POINT  4359  11.94436146317965  26.6262558892628
-  POINT  4360  12.19975831688364  27.07290316309354
-  POINT  4361  11.70835016186513  29.77725626131508
-  POINT  4362  11.44840780891525  29.32083443761827
-  POINT  4363  10.94524480188349  30.2119493620846
-  POINT  4364  10.68396014223092  29.76000284437696
-  POINT  4365  11.4612799501046  30.22519211862191
-  POINT  4366  11.20910938557762  30.66888094038705
-  POINT  4367  10.9368374049108  29.31526434275312
-  POINT  4368  11.95080093219896  28.42166108213997
-  POINT  4369  12.4591287934299  28.41955637961497
-  POINT  4370  12.71451082664457  27.96964269203738
-  POINT  4371  12.97143800709656  28.41928524228948
-  POINT  4372  11.69163226937222  27.96979595129795
-  POINT  4373  12.45717131194284  27.52124937431928
-  POINT  4374  11.9447886179187  27.52156761813713
-  POINT  4375  15.29885200343264  28.8835193357322
-  POINT  4376  15.56202156575395  29.32850886335364
-  POINT  4377  15.04254095371091  29.31827443700025
-  POINT  4378  16.0564503860919  28.44895155360157
-  POINT  4379  16.33477400183093  28.91218754051921
-  POINT  4380  15.54890460342297  28.43938194691547
-  POINT  4381  16.09215770029102  29.34350152581874
-  POINT  4382  12.72223555131803  29.77728149733855
-  POINT  4383  12.97062105959908  29.31875497111673
-  POINT  4384  12.98553664119016  30.24101141045128
-  POINT  4385  13.47593186273332  30.21482288295318
-  POINT  4386  14.77952748380703  29.75810228782938
-  POINT  4387  14.50635713461083  30.18825186751686
-  POINT  4388  14.51635792148571  29.31311276020795
-  POINT  4389  13.9900110158661  30.20713768228853
-  POINT  4390  13.73926529844905  29.76062581170174
-  POINT  4391  2.273105774761268  9.83508879984791
-  POINT  4392  2.779450317637714  9.835400651617574
-  POINT  4393  3.033012220564729  9.388247709190718
-  POINT  4394  5.582224331984559  8.490021384452593
-  POINT  4395  5.324236755485918  8.938715200324722
-  POINT  4396  4.303205470450614  9.835452415437004
-  POINT  4397  4.811613166163307  9.834298227553571
-  POINT  4398  4.049286364268548  9.3886844889632
-  POINT  4399  5.068073565684609  9.386690434889857
-  POINT  4400  4.814373978828597  8.940272488625666
-  POINT  4401  2.221682434110464  3.449608482318896
-  POINT  4402  1.723322054663639  3.41958212581723
-  POINT  4403  1.475255227755129  2.932460514091849
-  POINT  4404  1.727942742988692  2.471297861599172
-  POINT  4405  2.223570867244001  2.516811617236392
-  POINT  4406  3.247664549616101  1.691005979661493
-  POINT  4407  3.738193462327802  1.768828689718033
-  POINT  4408  2.976338300237787  2.129153441474481
-  POINT  4409  3.989913465089363  2.240629487564227
-  POINT  4410  3.734383925154549  2.66000978424141
-  POINT  4411  4.249406076125915  2.711750263924309
-  POINT  4412  -0.2525804527561534  16.03806627400728
-  POINT  4413  -0.7575089596573991  16.03809742300865
-  POINT  4414  8.162773457165429e-09  16.47693907063823
-  POINT  4415  0.5055201424216942  17.35292109533307
-  POINT  4416  0.2530784214946227  17.78947522331019
-  POINT  4417  0.2525804694500266  16.91468922909349
-  POINT  4418  -0.2525804544726128  16.91468922997582
-  POINT  4419  -0.2530784086493366  17.78947522356133
-  POINT  4420  -0.5055201286865491  17.35292109643341
-  POINT  4421  -0.7581005899738023  16.91517093797816
-  POINT  4422  10.92866218369657  11.58403101835576
-  POINT  4423  10.66929892991574  12.03389174928147
-  POINT  4424  10.92260560930413  12.47904214844759
-  POINT  4425  11.44023252971531  11.57846179393201
-  POINT  4426  11.6916339164161  12.03021006472227
-  POINT  4427  6.829226066792335  15.15638767985543
-  POINT  4428  7.08448512863891  14.71431148714117
-  POINT  4429  6.32291537112456  14.27373638104556
-  POINT  4430  6.068350648601582  14.71617008807552
-  POINT  4431  6.831094598114815  14.27250347410035
-  POINT  4432  6.574690216144999  15.59804860267928
-  POINT  4433  6.320151929953125  16.03908134219066
-  POINT  4434  5.812970569673526  16.03929553360603
-  POINT  4435  5.559944453526639  15.59906442536678
-  POINT  4436  5.813814797954246  15.15783101089938
-  POINT  4437  6.321312755318322  15.15701773663442
-  POINT  4438  -1.775181001650297  21.33393361507919
-  POINT  4439  -1.267840951818172  21.33711381294345
-  POINT  4440  -2.024810422711531  21.77002261288375
-  POINT  4441  -0.7585985253342913  22.21004308218826
-  POINT  4442  -0.2530784032947191  22.21052479073235
-  POINT  4443  -0.25307840396708  21.33774656408433
-  POINT  4444  6.030698440628868e-09  21.77348895090434
-  POINT  4445  -0.761269396452543  21.33800980180604
-  POINT  4446  -1.012728368769732  21.77259296179061
-  POINT  4447  -1.26517008069992  22.20914709332568
-  POINT  4448  6.57552905270612  19.11917837703191
-  POINT  4449  6.830512439734651  19.55973226747113
-  POINT  4450  6.323600974440302  19.55944563035479
-  POINT  4451  7.337224191221686  19.55973210309189
-  POINT  4452  7.085296112955868  19.99999935641476
-  POINT  4453  7.591126172197229  19.11954137608066
-  POINT  4454  7.845909845418445  19.55980846502429
-  POINT  4455  6.828120215219838  18.67952034762907
-  POINT  4456  5.819524031753277  19.55944573980127
-  POINT  4457  6.074507418781808  19.99999963024048
-  POINT  4458  5.819523813334327  20.44055367013701
-  POINT  4459  6.323600756021351  20.44055356069054
-  POINT  4460  5.314082130452446  19.55879830294076
-  POINT  4461  5.069786234540341  19.99999980475538
-  POINT  4462  5.314081996435311  20.44120126848308
-  POINT  4463  5.563175333674854  20.88175519893314
-  POINT  4464  8.866487420657002  23.96406405540996
-  POINT  4465  8.355738994225081  23.96328213075802
-  POINT  4466  8.100427383778017  23.52188039085872
-  POINT  4467  9.122215393276559  23.52275436205428
-  POINT  4468  8.86594121586602  23.08182352338446
-  POINT  4469  11.18084976696353  21.76061566877308
-  POINT  4470  11.43896704356612  22.20068784304909
-  POINT  4471  11.95797441386322  22.1997190736917
-  POINT  4472  11.9588087557341  21.32105244930146
-  POINT  4473  12.22007742542399  21.75981922903992
-  POINT  4474  10.148570164294  21.76080494256901
-  POINT  4475  9.890881511362227  22.2011322436048
-  POINT  4476  9.377719656900005  22.20101559932991
-  POINT  4477  9.377648474444069  21.3206226826241
-  POINT  4478  9.121929706236603  21.76064672176964
-  POINT  4479  8.865674277639464  22.2008899295029
-  POINT  4480  7.336250313716918  21.32043468385277
-  POINT  4481  7.591125568206087  20.88045701300713
-  POINT  4482  7.337223885828448  20.44026648925234
-  POINT  4483  7.845909546820542  20.44018971579031
-  POINT  4484  6.830512134341413  20.44026665363158
-  POINT  4485  6.575528528893932  20.88082069352811
-  POINT  4486  4.547660785761197  22.64117575790155
-  POINT  4487  4.799992952164152  23.08041215768531
-  POINT  4488  5.306180292478354  23.08034306292107
-  POINT  4489  8.865707267923504  19.55976133923551
-  POINT  4490  8.354952340097839  19.55980825914972
-  POINT  4491  8.865707358596341  20.44023587696896
-  POINT  4492  8.354952041499935  20.44018950991573
-  POINT  4493  9.121386178165395  19.99999862805303
-  POINT  4494  9.377000682960047  20.44023572473563
-  POINT  4495  9.37700059228721  19.55976118700218
-  POINT  4496  8.101050359122295  19.99999898616094
-  POINT  4497  -18.88575813755943  15.0697268260569
-  POINT  4498  -19.39362771734272  15.11254628586869
-  POINT  4499  -18.68665358888661  14.6490351897125
-  POINT  4500  -15.77563967202531  13.84150710457371
-  POINT  4501  -16.01906260749091  13.38331127087525
-  POINT  4502  -16.51175963280237  13.37603091203635
-  POINT  4503  -16.76209633740071  13.83891198637251
-  POINT  4504  -16.61643100772146  14.28454398233681
-  POINT  4505  -3.285878374189513  17.79579280002091
-  POINT  4506  -3.537066906965997  17.35732465078735
-  POINT  4507  -2.781165062341254  17.79402703590121
-  POINT  4508  -2.272346057716946  15.15939316355719
-  POINT  4509  -2.777506873473401  15.15947546214778
-  POINT  4510  -2.019831127927625  14.71933670858128
-  POINT  4511  -3.030366546424797  14.71907091737807
-  POINT  4512  -4.29435723120281  15.1589385317425
-  POINT  4513  -4.800381300429374  15.1587993272791
-  POINT  4514  -4.041727322367009  14.71851001309586
-  POINT  4515  -5.05425164147241  14.71756591615323
-  POINT  4516  -4.295101030996014  14.27689248118367
-  POINT  4517  -3.789177724238159  14.27725404962039
-  POINT  4518  -8.103070844109666  14.7120749267257
-  POINT  4519  -8.357041227963842  15.15335409824602
-  POINT  4520  -8.867790261965396  15.15257226998905
-  POINT  4521  -8.359008421177249  14.26876895168724
-  POINT  4522  -9.124387984536476  14.70980715521631
-  POINT  4523  -8.869538972748195  14.26707997665955
-  POINT  4524  -9.380906847798823  14.26600347395883
-  POINT  4525  -15.04253548417184  10.68172301284076
-  POINT  4526  -14.51635355078331  10.68688712093244
-  POINT  4527  -14.26072851253494  11.13086143448761
-  POINT  4528  -15.29884481679709  11.11647634394399
-  POINT  4529  -15.0294160788359  11.57085075398853
-  POINT  4530  -14.51705395682312  11.57633155901834
-  POINT  4531  8.673610243951781  6.652056971493288
-  POINT  4532  8.414839055579259  7.108358885772509
-  POINT  4533  7.90457462665794  7.113563743870362
-  POINT  4534  8.152298738482797  7.566155996789455
-  POINT  4535  7.651410299100585  6.670464801650749
-  POINT  4536  7.388869982004122  7.128261912667696
-  POINT  4537  7.91137180832887  6.215871382139966
-  POINT  4538  7.395667163675052  6.2305695509373
-  POINT  4539  8.427660313869119  6.189437265397586
-  POINT  4540  8.401580829217719  8.014850918935689
-  POINT  4541  7.8913164002964  8.020055777033541
-  POINT  4542  8.65225636857012  8.462541415161475
-  POINT  4543  7.629644152233771  8.473224754720867
-  POINT  4544  7.380362061498849  8.024529832574634
-  POINT  4545  8.391528292002256  8.915703717744677
-  POINT  4546  7.880480191434996  8.920252392579611
-  POINT  4547  8.948131191765635  5.244986877960783
-  POINT  4548  8.686196691051427  4.812171250737954
-  POINT  4549  8.926774423659207  4.355755496876252
-  POINT  4550  9.445443876621251  5.251309598627719
-  POINT  4551  9.6910474270449  4.80595499243688
-  POINT  4552  9.473520550241012  4.27784503441803
-  POINT  4553  6.871912274813603  4.456666857990875
-  POINT  4554  6.343908009479829  4.48177946767831
-  POINT  4555  6.621960527653464  4.900979418979421
-  POINT  4556  7.126969749148993  3.982554695510378
-  POINT  4557  4.533432449664246  3.111476287422326
-  POINT  4558  4.788961989599059  2.692095990745143
-  POINT  4559  4.807632160732531  3.545827374450171
-  POINT  4560  6.855123306554548  1.732841382331951
-  POINT  4561  6.414612844901361  1.574488513075082
-  POINT  4562  6.765655367225731  1.179109809653417
-  POINT  4563  6.972434580994955  2.219793303106146
-  POINT  4564  -7.602701248857268  12.05219331399483
-  POINT  4565  -7.345761168813994  12.49779263543017
-  POINT  4566  -7.350228475031765  11.60757343071705
-  POINT  4567  -5.308173014700433  14.27556533336659
-  POINT  4568  -5.562737733353188  13.83313163004587
-  POINT  4569  -4.801572002352885  14.27614786187251
-  POINT  4570  -4.549022404224035  13.83489189839703
-  POINT  4571  -1.261812988480139  9.83343522240709
-  POINT  4572  -1.009092171925209  9.384112018230109
-  POINT  4573  -1.260520010065219  8.933024373220549
-  POINT  4574  -1.765500117844419  8.93523006966014
-  POINT  4575  -5.068073644725306  9.38669057972551
-  POINT  4576  -4.811613206609751  9.83429836303813
-  POINT  4577  -5.321476005364882  9.832741044573023
-  POINT  4578  -8.171918437075256  5.749541788172571
-  POINT  4579  -8.426272907275038  5.290292001170738
-  POINT  4580  -8.948133223185337  5.244987163541136
-  POINT  4581  -9.185519494225359  5.729430999154442
-  POINT  4582  -8.934156282145356  6.185727540104251
-  POINT  4583  -8.427661154600298  6.18943703498995
-  POINT  4584  -8.673610641597531  6.652056916813081
-  POINT  4585  -6.360808891330913  5.359381494985303
-  POINT  4586  -6.8888134629241  5.334268229392724
-  POINT  4587  -7.141644921037324  5.784322612398201
-  POINT  4588  -6.881683139083452  6.238916134269846
-  POINT  4589  -6.366502420684297  6.244439533544943
-  POINT  4590  -8.913238659918125  8.008641685997079
-  POINT  4591  -9.175111821561714  7.552782489790519
-  POINT  4592  -8.152298933237061  7.566155955215757
-  POINT  4593  -8.414839366266023  7.108358763986579
-  POINT  4594  -8.401580872630081  8.014850914686292
-  POINT  4595  -8.652256314068634  8.462541484408993
-  POINT  4596  -7.891316587387569  8.020055753627672
-  POINT  4597  -8.921334493811083  7.104649269100879
-  POINT  4598  0.5050496066864969  12.06607114806098
-  POINT  4599  0.2524838592694156  12.509659882908
-  POINT  4600  -0.5050495406976978  12.06607116411123
-  POINT  4601  -0.2524953099325488  11.62092225687016
-  POINT  4602  -0.7575448846733936  11.62089710913941
-  POINT  4603  0.2524953892493668  11.62092224476328
-  POINT  4604  -3.283324914400852  8.042101763472806
-  POINT  4605  -3.027617553368896  7.589434642638204
-  POINT  4606  -3.78887016301438  7.145934490043004
-  POINT  4607  -4.047040141601858  7.596235740379548
-  POINT  4608  -4.299970711505202  7.148508674241112
-  POINT  4609  -3.792218491321482  8.043753636400142
-  POINT  4610  -4.303319039812305  8.04632782059825
-  POINT  4611  -3.539603812611298  8.492193843691508
-  POINT  4612  -3.278350562976776  7.139722056960755
-  POINT  4613  -3.53128113288012  6.69199499082232
-  POINT  4614  -3.259043844909186  5.332766362072315
-  POINT  4615  -3.011954694569225  5.779632481578462
-  POINT  4616  -3.271741805307075  6.237333529285412
-  POINT  4617  -3.782261405344679  6.243545962367661
-  POINT  4618  -4.035803751858573  5.797005308049524
-  POINT  4619  -4.295343079431618  6.251666769586432
-  POINT  4620  -3.775380952945744  5.341766264901346
-  POINT  4621  -3.511702720083296  4.885648126142907
-  POINT  4622  -4.543058686584349  4.904219080036945
-  POINT  4623  -4.288462627032683  5.349887072120117
-  POINT  4624  -4.803481485497177  5.359458123185124
-  POINT  4625  -3.243367634643463  4.435820574068364
-  POINT  4626  -2.982689503297702  3.965002351197774
-  POINT  4627  -3.229662503185413  3.52330050328693
-  POINT  4628  -3.742623792584569  3.563062575166481
-  POINT  4629  -3.759704742680022  4.444820476897395
-  POINT  4630  -5.320794455696689  3.555246287829873
-  POINT  4631  -5.570636693918219  3.095966055383329
-  POINT  4632  -5.345229957488629  2.610279773748913
-  POINT  4633  -4.788963916338954  2.692099741504953
-  POINT  4634  -4.533433409733085  3.11147984258838
-  POINT  4635  -5.320195886747793  5.3641005719377
-  POINT  4636  -5.065599827196129  5.809768564020871
-  POINT  4637  -5.838136124018156  5.370252348005836
-  POINT  4638  -6.104986995759502  5.803540159752914
-  POINT  4639  -5.843829653371539  6.255310386565476
-  POINT  4640  -5.845709132172464  7.14566131989957
-  POINT  4641  -6.099796022401105  7.591597931860797
-  POINT  4642  2.468655552028582  36.99209317569083
-  POINT  4643  2.720981659484743  36.50669016910551
-  POINT  4644  3.221422882693706  37.37975122048137
-  POINT  4645  3.480916159023034  36.90863094192812
-  POINT  4646  2.722869868303182  37.43948682119965
-  POINT  4647  3.229662324541032  36.47670038506341
-  POINT  4648  -2.273750322176463  28.37918393450756
-  POINT  4649  -2.779582658660454  28.37954777701897
-  POINT  4650  -2.526574115933269  27.93457393572186
-  POINT  4651  -3.033258069834652  28.82455082498592
-  POINT  4652  -2.77999854888538  29.27036534916167
-  POINT  4653  -2.273653961576329  29.27067718493149
-  POINT  4654  -4.295759860195631  22.20207831721287
-  POINT  4655  -3.790935919620525  22.20328484529564
-  POINT  4656  -4.547660762109723  22.64117574871403
-  POINT  4657  -1.770560839361158  22.20855341824481
-  POINT  4658  -2.276071337937328  22.20687905820053
-  POINT  4659  -1.516430995925717  22.64600353864246
-  POINT  4660  -0.7574091942873926  26.60463620877062
-  POINT  4661  -0.5049253650460661  26.16245155786428
-  POINT  4662  -1.26248456968623  26.60474309312709
-  POINT  4663  -2.020500884784648  27.04726516205367
-  POINT  4664  -2.273312578923515  27.49087502031526
-  POINT  4665  -2.779144915407506  27.49123886282667
-  POINT  4666  -3.031723705736667  27.04803775852522
-  POINT  4667  9.674059914272764  31.54309915647984
-  POINT  4668  9.425788859593911  31.99952798475481
-  POINT  4669  8.903187169034737  31.09050669476753
-  POINT  4670  9.413784633261546  31.09278170280593
-  POINT  4671  7.395667531479379  33.76943158160459
-  POINT  4672  6.881682436448375  33.76108525769369
-  POINT  4673  6.620525505193433  33.30931478828556
-  POINT  4674  6.099796175241582  32.40840299268783
-  POINT  4675  6.359431915093664  32.8578547224632
-  POINT  4676  6.874612619500812  32.86337793702549
-  POINT  4677  7.127777065364786  32.42027890997031
-  POINT  4678  7.388870655464554  32.87173897579268
-  POINT  4679  6.353715538404828  31.96208648750794
-  POINT  4680  8.934156162843058  33.81427295860885
-  POINT  4681  9.185518916730516  34.2705695880624
-  POINT  4682  9.431469087173463  33.80794971603986
-  POINT  4683  8.171917422879144  34.25045899549634
-  POINT  4684  8.426271187026909  34.70970875020592
-  POINT  4685  8.948131691149152  34.75501338402842
-  POINT  4686  7.651410866152008  33.32953611527348
-  POINT  4687  7.904575312015982  32.8864370882183
-  POINT  4688  7.911372188030805  33.78412969403021
-  POINT  4689  8.427660757551774  33.81056352916524
-  POINT  4690  8.673610927994719  33.34794365714271
-  POINT  4691  9.694220357455089  33.36180316353837
-  POINT  4692  9.945583111342547  33.81809979299192
-  POINT  4693  10.71091845921928  33.33687874930079
-  POINT  4694  10.46487676988987  33.83310719520395
-  POINT  4695  9.947998294341922  32.91367014601859
-  POINT  4696  9.43388427017284  32.90352006906653
-  POINT  4697  10.45710382882717  32.90333481796283
-  POINT  4698  12.55579669464555  33.7299880503965
-  POINT  4699  13.12801199851167  33.79479026035089
-  POINT  4700  12.47144579022556  34.51148132613582
-  POINT  4701  12.93462514265352  34.64180178367647
-  POINT  4702  12.24027789272276  34.13587082058012
-  POINT  4703  13.29868985479681  34.3116079231603
-  POINT  4704  13.43620128425083  34.8144691256151
-  POINT  4705  12.50944856105111  31.15885690226704
-  POINT  4706  11.99907725941845  31.14306284646113
-  POINT  4707  12.78538331767002  31.63539862612097
-  POINT  4708  12.5690393147074  32.06645875658151
-  POINT  4709  12.02256561458787  32.0281633069468
-  POINT  4710  5.065600016341717  34.19023420969232
-  POINT  4711  4.803482242815901  34.64054582058449
-  POINT  4712  4.035804672356232  34.20299720629515
-  POINT  4713  4.295343779290965  33.74833560269973
-  POINT  4714  4.809231465292767  33.74478222026569
-  POINT  4715  4.288463743829695  34.65011614756668
-  POINT  4716  9.637662575318704  13.82176439745997
-  POINT  4717  9.895010842448107  13.37629815618254
-  POINT  4718  9.892511591869622  14.26449157539778
-  POINT  4719  10.4067069355562  13.37400513563111
-  POINT  4720  13.52905067048734  17.80348860989551
-  POINT  4721  13.79175789835044  17.36796951733285
-  POINT  4722  13.00252411868155  17.80282680195637
-  POINT  4723  13.26812525861197  18.24140032089161
-  POINT  4724  12.74043410877834  17.36292953030527
-  POINT  4725  12.47950869690297  17.80084124130137
-  POINT  4726  13.51009777439233  19.55820318321305
-  POINT  4727  13.79929158665083  19.11344521668358
-  POINT  4728  13.53129906332733  18.67922305227264
-  POINT  4729  13.00477251152154  18.6785612443335
-  POINT  4730  12.99576637516585  19.55819856070358
-  POINT  4731  12.74349662902931  19.11733796967289
-  POINT  4732  12.47131668795828  19.55915255466194
-  POINT  4733  12.48032282431396  18.67951523829186
-  POINT  4734  11.43914986613786  21.32072491301456
-  POINT  4735  11.69942433103575  20.88138351831122
-  POINT  4736  10.92146534226518  21.32094673778284
-  POINT  4737  12.71562432355781  13.82239950971875
-  POINT  4738  12.9710204628949  13.37575475080886
-  POINT  4739  12.45674797382721  13.37407141180644
-  POINT  4740  12.97772491657961  14.26819291122295
-  POINT  4741  12.46345242751193  14.26650957222053
-  POINT  4742  13.49738297842677  14.27178058327745
-  POINT  4743  13.74303006923158  13.8271429168039
-  POINT  4744  13.24521108238089  14.71589064577923
-  POINT  4745  13.22448245842652  12.92743092592447
-  POINT  4746  13.48181951185093  12.47903488184075
-  POINT  4747  13.99578142269353  12.47669166234643
-  POINT  4748  14.24624589811313  12.92686861431367
-  POINT  4749  13.48335880815712  13.37575902383678
-  POINT  4750  13.9964920647632  13.37881909191951
-  POINT  4751  -6.320150687976366  23.96091876360178
-  POINT  4752  -5.812969625836519  23.96070458668278
-  POINT  4753  -6.574688825297787  24.40195167480463
-  POINT  4754  -6.828063652194295  23.9615488793044
-  POINT  4755  -5.813813941857884  24.84216924255897
-  POINT  4756  -6.321311652199329  24.84298261059543
-  POINT  4757  -7.081981008898271  23.52094424303451
-  POINT  4758  -7.336519146219691  23.96197715423737
-  POINT  4759  -7.845748104704221  23.96277425307575
-  POINT  4760  -7.335856115277702  23.08082963166928
-  POINT  4761  -7.844991443031732  23.08106288006605
-  POINT  4762  -8.100427311741345  23.52188036270352
-  POINT  4763  -10.40540157467472  14.26408505747693
-  POINT  4764  -10.66170284717234  13.81985074339596
-  POINT  4765  -9.637662430070954  13.82176447342599
-  POINT  4766  -9.895010682577141  13.37629824542447
-  POINT  4767  -9.892511441859234  14.26449165198275
-  POINT  4768  -10.40670675495256  13.37400525082491
-  POINT  4769  -12.47199466734123  16.03898502117763
-  POINT  4770  -12.21411479700939  16.4800762682083
-  POINT  4771  -12.99157903512498  16.04165171901209
-  POINT  4772  -14.28781148834783  14.72466430653915
-  POINT  4773  -14.01051597995725  14.27484092420143
-  POINT  4774  -13.50732425510632  15.16042328920559
-  POINT  4775  -13.24521080951691  14.71589083268884
-  POINT  4776  -13.49738271635704  14.27178080931081
-  POINT  4777  -16.93896929093587  15.5773409849898
-  POINT  4778  -16.68097494321506  15.16527107651389
-  POINT  4779  -15.67915306855816  18.67142202530682
-  POINT  4780  -15.40255559056302  18.2433353971784
-  POINT  4781  -15.1377260715964  18.67054347403299
-  POINT  4782  -15.66731487745816  17.81120284025883
-  POINT  4783  -16.23490724711116  18.67143816234672
-  POINT  4784  -11.95483924810893  19.55914747757233
-  POINT  4785  -11.69939991789839  19.11861637347679
-  POINT  4786  -11.95878820411627  18.67894457614464
-  POINT  4787  -12.47131653888641  19.55915256894556
-  POINT  4788  -12.48032266377783  18.67951528684885
-  POINT  4789  -12.22006407356756  18.2401678703231
-  POINT  4790  -12.74349647052235  19.11733800723685
-  POINT  4791  -13.00477233997363  18.67856130141531
-  POINT  4792  -14.87248011401993  19.104568316138
-  POINT  4793  -14.5444672240719  19.55524901206978
-  POINT  4794  -14.59588263602478  18.67648168800958
-  POINT  4795  -14.04144287725837  19.55526445993747
-  POINT  4796  -13.79929141258323  19.11344527595896
-  POINT  4797  -13.53129887895662  18.67922312921883
-  POINT  4798  -13.2681250722121  18.24140040883083
-  POINT  4799  -14.0626441448217  18.67628438337447
-  POINT  4800  -14.05735881756995  17.80654318110146
-  POINT  4801  -14.32789010239817  18.24225954126945
-  POINT  4802  -18.2968927833904  24.94722405978977
-  POINT  4803  -18.68670738346595  25.35086902771102
-  POINT  4804  -18.11866277312836  25.81991225332942
-  POINT  4805  -18.56007566971161  25.77221354163332
-  POINT  4806  -19.15366621552857  25.75648074725418
-  POINT  4807  -17.67264085100642  25.76729945984075
-  POINT  4808  -17.52697763588802  25.32168259068048
-  POINT  4809  -17.78498613217555  24.909612186255
-  POINT  4810  -12.47539170563856  23.0785489390462
-  POINT  4811  -12.99840983962808  23.07655221680742
-  POINT  4812  -12.47198557295549  23.9610096938691
-  POINT  4813  -12.99156790660064  23.95834007766085
-  POINT  4814  -12.21410615975761  23.51991655725213
-  POINT  4815  -14.04906603364312  23.06997456115545
-  POINT  4816  -13.52075687599397  23.07307448165996
-  POINT  4817  -14.03636788977065  23.95057690948157
-  POINT  4818  -13.51391494296653  23.95486234251339
-  POINT  4819  -14.30341627472643  23.50650018459617
-  POINT  4820  -14.561721042046  23.9459789118976
-  POINT  4821  -14.57441918591847  23.06537656357148
-  POINT  4822  -13.25571608608519  23.5145759173276
-  POINT  4823  -14.5960683653604  21.32333659147519
-  POINT  4824  -14.32798922175618  21.75754972154517
-  POINT  4825  -14.59066652086865  22.19303664224877
-  POINT  4826  -13.74303175114319  26.17287493709136
-  POINT  4827  -13.48335791473757  26.62425530265345
-  POINT  4828  -12.97771773598447  25.73181930175693
-  POINT  4829  -12.71561880221907  26.17761345449204
-  POINT  4830  -13.49737100762031  25.72824656875608
-  POINT  4831  -12.97101566866241  26.62426067037656
-  POINT  4832  -15.87594000709251  24.3886752863724
-  POINT  4833  -15.61382354497319  23.94120865241457
-  POINT  4834  -15.08739359140011  23.94259057999703
-  POINT  4835  -15.35519938057486  23.50052025942974
-  POINT  4836  -15.07839045447396  24.82672910597416
-  POINT  4837  -14.82034520644433  24.38666730488244
-  POINT  4838  -4.297887780716318  27.4932582820506
-  POINT  4839  -4.044006752788331  27.04935658278367
-  POINT  4840  -5.312210754179706  27.49556464468527
-  POINT  4841  -5.567618563035417  27.94023469907253
-  POINT  4842  -4.552513129335004  27.93750819510436
-  POINT  4843  -4.807024214617755  28.38271368117876
-  POINT  4844  -4.805074821119767  27.49442750899073
-  POINT  4845  -5.057585405561018  27.0513147316315
-  POINT  4846  -6.33587960182028  29.27904137271206
-  POINT  4847  -6.593280542092714  29.72671675993249
-  POINT  4848  -6.845584816882877  29.28169696677443
-  POINT  4849  -9.139626577699488  28.84786563078475
-  POINT  4850  -8.880974911121076  28.39978165870695
-  POINT  4851  -8.886484031839617  29.29285468931666
-  POINT  4852  -8.375837076376664  29.29012509511866
-  POINT  4853  -6.606301488352729  31.5172784426189
-  POINT  4854  -6.86610510089686  31.96710983930201
-  POINT  4855  -7.380363061301429  31.97547095696313
-  POINT  4856  -7.629645044490113  31.52677603524801
-  POINT  4857  -3.734387612605413  37.33998909381205
-  POINT  4858  -3.480917883197236  36.90862995438757
-  POINT  4859  -4.249409370936035  37.28824836325113
-  POINT  4860  -4.533435519467933  36.88852220808495
-  POINT  4861  -4.758488233341749  38.11030236366913
-  POINT  4862  -4.50676918141261  38.58210339451158
-  POINT  4863  -4.783545702215509  38.99367819414739
-  POINT  4864  -5.253316076616899  38.87170298229778
-  POINT  4865  -5.026304722136116  39.35810581481412
-  POINT  4866  -5.31475374097253  38.1921257939889
-  POINT  4867  -5.55603254774995  38.55085252783052
-  POINT  4868  -4.803482580347485  34.64054361135685
-  POINT  4869  -5.320196850564142  34.63590120971449
-  POINT  4870  -4.543060036237803  35.09578274400744
-  POINT  4871  -9.474341817876265  37.14660975144912
-  POINT  4872  -9.406416566704262  36.55611168334616
-  POINT  4873  -9.473526932351346  35.72215174385364
-  POINT  4874  -9.691051891830522  35.19404228105253
-  POINT  4875  -7.395668664845115  33.76943169253389
-  POINT  4876  -7.141645205774269  34.21567874364175
-  POINT  4877  -7.911373176236172  33.78412991120815
-  POINT  4878  -5.970391354147889  38.42267776501082
-  POINT  4879  -5.910343674528779  39.10674848218104
-  POINT  4880  9.899142136969207  27.51510267900654
-  POINT  4881  10.15244814835231  27.06995268221834
-  POINT  4882  9.895007998246125  26.62370476614767
-  POINT  4883  9.383403857216514  26.62219238204935
-  POINT  4884  9.645779171780866  27.95898679566293
-  POINT  4885  9.392678108416897  28.40351120876002
-  POINT  4886  8.880975044494647  28.39978174499532
-  POINT  4887  9.387389390594027  27.51154309762205
-  POINT  4888  14.26073289743033  28.8691395757118
-  POINT  4889  13.99842144929555  28.41952401656783
-  POINT  4890  13.99771942752645  29.30896742654093
-  POINT  4891  13.48445722189115  28.41718289837834
-  POINT  4892  13.22907518867648  28.86709658595593
-  POINT  4893  13.48364027439367  29.31665262720558
-  POINT  4894  2.778186435888486  8.938957890864957
-  POINT  4895  3.285536154833564  8.93983143640984
-  POINT  4896  0.503576558953103  8.480088415641912
-  POINT  4897  0.7545340256392324  8.025313551344778
-  POINT  4898  1.257490675288657  8.028793692477928
-  POINT  4899  1.00487166372454  7.572984560185061
-  POINT  4900  1.767218177292147  9.833864649502274
-  POINT  4901  1.261813121296191  9.833435129749081
-  POINT  4902  2.01977490415053  9.386150013300199
-  POINT  4903  1.254058685362145  7.116431701475741
-  POINT  4904  0.7511020357127205  7.112951560342591
-  POINT  4905  1.503048670056133  6.664067888028908
-  POINT  4906  1.756818298067953  7.124100887871379
-  POINT  4907  3.221422303399006  2.620248389708918
-  POINT  4908  3.480914914435558  3.091369166068999
-  POINT  4909  2.72098085638526  3.493309688384574
-  POINT  4910  3.229661216416159  3.523299759226276
-  POINT  4911  2.982688780121403  3.965001676074344
-  POINT  4912  2.46865487040522  3.007906565470829
-  POINT  4913  2.722869289518796  2.56051282330207
-  POINT  4914  -1.010191681274808  16.47724942694537
-  POINT  4915  -1.263131355488745  16.91548129340297
-  POINT  4916  -2.020306230344167  16.47789566114399
-  POINT  4917  -1.767492742491601  16.03853792813051
-  POINT  4918  -1.262539725172341  16.03840777843346
-  POINT  4919  12.1997613590734  12.92710547342492
-  POINT  4920  11.94479095056584  12.47843891822832
-  POINT  4921  11.43422157083276  12.47855544044724
-  POINT  4922  11.17576264345388  12.92727100195365
-  POINT  4923  11.94436521973632  13.37375023233481
-  POINT  4924  7.336251480752613  18.6795640871081
-  POINT  4925  7.844937134949372  18.67964044904051
-  POINT  4926  8.099974578704396  18.23956992571268
-  POINT  4927  7.84480578458009  17.79945448070259
-  POINT  4928  8.354717919779731  17.79936124634732
-  POINT  4929  7.335669970649025  17.79968796401571
-  POINT  4930  7.081931177971981  18.23961942058892
-  POINT  4931  8.354982325926542  23.08157075161737
-  POINT  4932  7.844991506275383  23.08106290277033
-  POINT  4933  7.844803584321875  22.20054442238268
-  POINT  4934  8.354715387699985  22.20063715773581
-  POINT  4935  8.610505338363385  22.64100603529607
-  POINT  4936  7.590411112199734  22.64052001245645
-  POINT  4937  7.335856170051208  23.08082965169779
-  POINT  4938  7.335668248097701  22.20031117131014
-  POINT  4939  9.890818040191585  21.32074068357608
-  POINT  4940  10.40541311898843  21.32077323454844
-  POINT  4941  10.66371321816277  20.88088247878991
-  POINT  4942  10.40367267864471  20.44035402693132
-  POINT  4943  10.91972490192146  20.44052753016572
-  POINT  4944  9.890170248707562  20.4403537256876
-  POINT  4945  10.14618193246625  19.99999877706341
-  POINT  4946  9.634491429138507  20.88059097460354
-  POINT  4947  6.827400667807767  23.08040137415767
-  POINT  4948  7.081981061883418  23.52094426447156
-  POINT  4949  6.066344491613611  23.52030180831326
-  POINT  4950  6.320150731026381  23.96091878388248
-  POINT  4951  6.828063703070947  23.96154890185181
-  POINT  4952  4.803564434818736  21.32240321307486
-  POINT  4953  4.299173358639647  21.32364953328408
-  POINT  4954  4.044571409948016  21.76361015630762
-  POINT  4955  4.295759881507283  22.20207832426327
-  POINT  4956  4.801296257115548  22.20150106250879
-  POINT  4957  5.054931180975862  21.76171558239177
-  POINT  4958  5.306832085229775  22.20081301603004
-  POINT  4959  5.309100262932963  21.32171516659611
-  POINT  4960  5.81454207983198  21.32106756825005
-  POINT  4961  -18.56002184971921  14.22769492657082
-  POINT  4962  -18.58096939592903  13.77580049591028
-  POINT  4963  -19.15364988885438  14.24346495111939
-  POINT  4964  -18.85904440570564  13.34143830515129
-  POINT  4965  -15.33998266280768  14.7338292242525
-  POINT  4966  -15.57188599971363  14.288170055576
-  POINT  4967  -16.07296487229796  14.29114541974748
-  POINT  4968  -16.41267733540978  14.73120693333909
-  POINT  4969  -16.13750880779156  15.17187251392457
-  POINT  4970  -3.788945546787723  16.91866703867328
-  POINT  4971  -4.041277777523542  16.47943067745028
-  POINT  4972  -3.283887755210931  16.91774473014353
-  POINT  4973  -3.03057820446562  16.47865932897363
-  POINT  4974  -2.778699564643894  16.9173169410877
-  POINT  4975  -3.788415114156707  16.03940786842766
-  POINT  4976  -3.282925532369509  16.03938389455073
-  POINT  4977  -2.526915470103403  17.35549624645666
-  POINT  4978  -2.273605919358092  16.91641084528677
-  POINT  4979  -1.516431044502669  17.35399647754574
-  POINT  4980  -1.770560893295203  17.79144659044107
-  POINT  4981  -2.276071417055452  17.79312094010028
-  POINT  4982  -1.768522135803676  16.91607496651296
-  POINT  4983  6.366501243846965  6.244439141771339
-  POINT  4984  6.881681964346839  6.238915939179471
-  POINT  4985  6.620524933946894  6.690686173039952
-  POINT  4986  7.141643473575124  5.784322519668687
-  POINT  4987  6.888811533617075  5.334267858601422
-  POINT  4988  6.360807268283301  5.359380468288856
-  POINT  4989  5.328304956021583  8.043704908345143
-  POINT  4990  5.839992119376236  8.041429038737206
-  POINT  4991  5.072106627115973  7.596960962835897
-  POINT  4992  4.814338839724297  8.045553308551284
-  POINT  4993  6.874612011818435  7.136622928830665
-  POINT  4994  7.12777633937579  7.579721871050277
-  POINT  4995  6.359431291318561  7.142146131422533
-  POINT  4996  6.866104091313161  8.032890848737603
-  POINT  4997  6.099795556301682  7.591597724921501
-  POINT  4998  5.84570847843014  7.145660969130788
-  POINT  4999  6.353714932264657  8.037914201028951
-  POINT  5000  6.081229359011346  4.028063957887165
-  POINT  5001  5.831277611851206  4.472376518875711
-  POINT  5002  5.818440427341621  3.559379919758002
-  POINT  5003  6.331070824970244  3.568782868560602
-  POINT  5004  5.320793662260057  3.555241511663863
-  POINT  5005  5.570635128218955  3.0959604223373
-  POINT  5006  5.055437459855198  4.009246871870873
-  POINT  5007  6.821727892775355  3.591856572778605
-  POINT  5008  6.558938961105631  3.123172534649443
-  POINT  5009  6.777765117627584  2.634655229109696
-  POINT  5010  6.287108049822472  2.611581524891692
-  POINT  5011  7.244265492278114  2.731384312863897
-  POINT  5012  7.354837885284381  3.536944361599219
-  POINT  5013  7.598035916136748  3.04043980858182
-  POINT  5014  4.299970635453084  7.14850787645576
-  POINT  5015  3.788870234546398  7.145933669669137
-  POINT  5016  4.047040109912  7.596235156255416
-  POINT  5017  5.345228489927225  2.610272286506451
-  POINT  5018  5.842875255008789  2.614410694600591
-  POINT  5019  6.061701411530742  2.125893389060844
-  POINT  5020  5.314751048479676  1.807873046646745
-  POINT  5021  5.061202116388895  2.210546263008434
-  POINT  5022  5.970380050087678  1.57731768278398
-  POINT  5023  5.556020582598091  1.44914323051177
-  POINT  5024  5.91032202053712  0.893244814956379
-  POINT  5025  -6.836865785799978  12.49945380288166
-  POINT  5026  -7.089553213907015  12.94295844989903
-  POINT  5027  -6.833499178180947  13.3871348946776
-  POINT  5028  -6.325319961009233  13.38836779917821
-  POINT  5029  -1.767218052469922  9.83386477079263
-  POINT  5030  -1.515143883278228  10.28237400844931
-  POINT  5031  -4.303205496386696  9.835452565483031
-  POINT  5032  -4.556607857026273  10.28150303033054
-  POINT  5033  -3.794281023813899  9.835889357263516
-  POINT  5034  -3.286799988363986  9.836274382571714
-  POINT  5035  -3.540719111353306  10.28304225808364
-  POINT  5036  -4.049286373397377  9.3886846899711
-  POINT  5037  -3.285536068257624  8.939831726257879
-  POINT  5038  -3.794429645178254  8.941483599185215
-  POINT  5039  -4.303354117751051  8.94104680740473
-  POINT  5040  -8.903186047936739  8.909494536004507
-  POINT  5041  -9.153055229364252  9.360382120771384
-  POINT  5042  -8.391528260648695  8.915703764693721
-  POINT  5043  -8.131409949387299  9.367205473050699
-  POINT  5044  -7.880480215519194  8.920252421455185
-  POINT  5045  -8.893751097108121  9.810542690182665
-  POINT  5046  -8.383104174517864  9.813271999453356
-  POINT  5047  -7.872056129388366  9.81782065621482
-  POINT  5048  -0.2524838087497524  13.39540810971175
-  POINT  5049  2.44434774088198e-08  12.95322345942679
-  POINT  5050  -0.2524838007827911  12.50965988836077
-  POINT  5051  -0.757533375523636  12.50963474063003
-  POINT  5052  -1.010043008245645  12.95311658754424
-  POINT  5053  -1.262608748160552  12.5095278632947
-  POINT  5054  -5.055438029190892  4.009250597348579
-  POINT  5055  -4.800176791787235  4.456813104903008
-  POINT  5056  -4.285157933322742  4.447242053838
-  POINT  5057  -4.807632465031426  3.545831769185357
-  POINT  5058  -4.268076983227289  3.565484152107086
-  POINT  5059  -4.016822847882909  3.997414501763457
-  POINT  5060  -4.555688689148163  6.701760771737632
-  POINT  5061  -4.809231035662058  6.255220117419496
-  POINT  5062  -5.325945436912674  6.259862566172071
-  POINT  5063  -4.813858667735643  7.152062022074176
-  POINT  5064  -5.327824915713599  7.150213499506166
-  POINT  5065  -5.072106938070638  7.596961402009646
-  POINT  5066  -5.587460861837469  6.7007619399641
-  POINT  5067  -4.814374102587054  8.940272696222461
-  POINT  5068  -4.559517374367931  8.493071605436576
-  POINT  5069  -5.324236901342186  8.938715377757356
-  POINT  5070  -4.814339024648308  8.045553709415984
-  POINT  5071  -5.328305272626263  8.043705186847973
-  POINT  5072  -2.021045274972744  28.82414544323013
-  POINT  5073  -1.76803673224556  28.37917160193302
-  POINT  5074  -1.262715411558947  28.37904359188522
-  POINT  5075  -1.010161179515999  28.82419250185701
-  POINT  5076  -1.767940371645426  29.27066485235695
-  POINT  5077  -1.262535281707757  29.27109438297196
-  POINT  5078  -3.537066675701101  22.64267533516108
-  POINT  5079  -3.283887565701342  23.08225529095755
-  POINT  5080  -3.78894527952161  23.0813329672272
-  POINT  5081  -2.526915358233893  22.64450376122651
-  POINT  5082  -2.781164941584266  22.20597295586544
-  POINT  5083  -3.285878205800256  22.20420716902598
-  POINT  5084  -2.777737218622537  23.96104394944767
-  POINT  5085  -3.030578038325537  23.52134070986063
-  POINT  5086  -3.282925349818851  23.96061616261071
-  POINT  5087  -2.778699434505028  23.08268307779451
-  POINT  5088  -2.273605830858089  23.08358918012959
-  POINT  5089  -4.294456553710889  23.08098940888245
-  POINT  5090  -4.04127744371113  23.52056936467892
-  POINT  5091  -4.799992926299243  23.08041214616574
-  POINT  5092  -5.052976054246795  23.52015671029886
-  POINT  5093  -2.777506769235351  24.84052461662275
-  POINT  5094  -3.030366432223659  25.28092918756785
-  POINT  5095  -3.282944193104159  24.84072397314284
-  POINT  5096  1.330755233786007e-08  25.28052643955282
-  POINT  5097  -0.2524349013237393  25.72146687178944
-  POINT  5098  -0.7573602844785909  25.72151112349207
-  POINT  5099  -0.2524349052544075  24.84066650044989
-  POINT  5100  -1.514941477347312  26.16264507841994
-  POINT  5101  -1.767575298832624  26.60489236198012
-  POINT  5102  -2.272957792445729  26.60516714734652
-  POINT  5103  8.652257441255252  31.53745954895175
-  POINT  5104  8.39152909816184  31.0842973257564
-  POINT  5105  7.880480908934858  31.07974849039663
-  POINT  5106  8.414839869207476  32.89164191324666
-  POINT  5107  8.152299658520024  32.43384477376586
-  POINT  5108  8.913239863919834  31.99135925837855
-  POINT  5109  9.175113211385597  32.44721832517048
-  POINT  5110  8.921335274498762  32.89535134269027
-  POINT  5111  8.401581793046937  31.98514988936742
-  POINT  5112  7.891317235855443  31.97994506433906
-  POINT  5113  11.74873159823277  31.58187307730738
-  POINT  5114  11.47479887261305  31.1209339277706
-  POINT  5115  11.49828722778247  32.00603438825626
-  POINT  5116  10.96516324372876  31.99723027702603
-  POINT  5117  10.70432876392238  31.55113677680682
-  POINT  5118  10.95876372439194  31.10769117123329
-  POINT  5119  13.5073245348637  15.16042310084938
-  POINT  5120  13.7722487569601  15.60568703807935
-  POINT  5121  12.98766647301654  15.15683542879488
-  POINT  5122  11.95878835004167  18.67894453890096
-  POINT  5123  11.43914146078369  18.67926892442837
-  POINT  5124  11.69940005256377  19.11861634915865
-  POINT  5125  11.95797422263067  17.80027054191047
-  POINT  5126  12.22006423253389  18.24016781356158
-  POINT  5127  11.95483938702825  19.55914746318869
-  POINT  5128  11.43519249777028  19.55947184871609
-  POINT  5129  11.17515809731908  20.00000102052662
-  POINT  5130  10.9197187628546  19.55946990649659
-  POINT  5131  11.43519863683714  20.44052947238522
-  POINT  5132  11.95485752643337  20.44085700867212
-  POINT  5133  12.20710913316478  20.00000805421938
-  POINT  5134  8.610508600834709  17.35899258697246
-  POINT  5135  8.865677394959015  17.79910803198256
-  POINT  5136  10.66370546167478  19.11911380302585
-  POINT  5137  10.40367106122358  19.55964297483639
-  POINT  5138  9.890168631286432  19.55964267359267
-  POINT  5139  9.634489721044543  19.11940538477516
-  POINT  5140  -4.8003808551864  24.84120085001912
-  POINT  5141  -5.306981717815686  24.84178343725863
-  POINT  5142  -5.054251160006624  25.28243433877643
-  POINT  5143  -5.55994363703766  24.40093575380166
-  POINT  5144  -5.306137401794322  23.96031878138243
-  POINT  5145  -4.799950065447936  23.96038787741774
-  POINT  5146  -11.95797406324265  17.80027060346049
-  POINT  5147  -12.47950852290421  17.80084131416471
-  POINT  5148  -12.4753984618416  16.92143972111907
-  POINT  5149  -11.95613484774709  16.91958059439132
-  POINT  5150  -11.69841188473828  17.35997812379403
-  POINT  5151  -13.25572876182561  16.4853991857355
-  POINT  5152  -13.51392938584669  16.04511550981153
-  POINT  5153  -14.04907256824607  16.92994355105175
-  POINT  5154  -14.30347489893017  16.49353671661515
-  POINT  5155  -17.42133850836408  16.46621230299164
-  POINT  5156  -17.19812027591119  16.01499464947636
-  POINT  5157  -16.66495740057217  16.04359032158593
-  POINT  5158  -16.48596411693903  18.24387092939627
-  POINT  5159  -16.7768887765254  18.67109514329076
-  POINT  5160  -17.3450998387438  18.66931497274819
-  POINT  5161  -17.55961494440304  18.23365541782893
-  POINT  5162  -15.13808693917218  21.32895091825263
-  POINT  5163  -14.87289120763043  20.89506516536105
-  POINT  5164  -15.08660377556885  20.45033549308172
-  POINT  5165  -15.55540002119723  20.44995148230189
-  POINT  5166  -15.67928522368949  21.32845399962185
-  POINT  5167  -15.40246238141945  21.75672542573599
-  POINT  5168  -15.97041154478462  20.90170693614084
-  POINT  5169  -15.10960308030174  23.06196306963319
-  POINT  5170  -14.85525283921842  22.62543744619248
-  POINT  5171  -15.12585041525192  22.18962314831048
-  POINT  5172  -15.63603303387482  23.06058114205074
-  POINT  5173  -15.66704869976923  22.1891262296797
-  POINT  5174  -15.93226468292499  22.62311470327069
-  POINT  5175  -15.60763493081995  24.82273747748248
-  POINT  5176  -16.13755718211401  24.82813379087301
-  POINT  5177  -16.07300703291225  25.70885103720212
-  POINT  5178  -16.41272779402701  25.26878316611768
-  POINT  5179  -15.34000762949547  25.26618761047478
-  POINT  5180  -15.57192119263  25.71183375688789
-  POINT  5181  -4.801571669348379  25.72385239038944
-  POINT  5182  -5.308172531977664  25.72443497762895
-  POINT  5183  -5.562737248413449  26.16686877343349
-  POINT  5184  -5.310107189970187  26.609152448284
-  POINT  5185  -4.802971256910249  26.60801531258947
-  POINT  5186  -6.341450194137229  30.17268166580354
-  POINT  5187  -6.851155409199826  30.1753372598659
-  POINT  5188  -6.859007872044449  31.0718020351126
-  POINT  5189  -6.346618677552621  31.06677857324325
-  POINT  5190  -5.827084132913434  29.27699951540124
-  POINT  5191  -6.079388407703597  28.83197972224318
-  POINT  5192  -5.823064947564565  28.38586492051645
-  POINT  5193  -6.331860416471411  28.38790677782728
-  POINT  5194  -5.315146554267603  28.38430764348843
-  POINT  5195  -5.062470599146903  28.82834390262268
-  POINT  5196  -4.556608069675993  29.71849731589442
-  POINT  5197  -4.811613479718268  30.165702029606
-  POINT  5198  -5.317804366752521  29.27479472056045
-  POINT  5199  -5.574295560869203  29.72185637102933
-  POINT  5200  -4.809682027102673  29.27320075825078
-  POINT  5201  -8.37012581029477  28.39701947502677
-  POINT  5202  -8.623177182075818  27.95266494359922
-  POINT  5203  -8.365439583299061  27.50635270506456
-  POINT  5204  -7.855387859831518  27.50430329700417
-  POINT  5205  -5.055440020725587  35.99075265980588
-  POINT  5206  -4.807634831823819  36.45417118840255
-  POINT  5207  -5.320796682809582  36.4447576399531
-  POINT  5208  -4.268078857383937  36.43451722793773
-  POINT  5209  -4.800178501361454  35.54318914608771
-  POINT  5210  -5.313340352347217  35.53377559763826
-  POINT  5211  -4.285159704616173  35.55275980617505
-  POINT  5212  -3.759706120423524  35.55518051249211
-  POINT  5213  -3.243368772057292  35.56417992560635
-  POINT  5214  -2.982690542380816  36.03499790770628
-  POINT  5215  -4.016824585547176  36.00258691457239
-  POINT  5216  -3.742625273191289  36.4369379342548
-  POINT  5217  -3.229663611360475  36.47669964102222
-  POINT  5218  -7.354840159678442  36.4630586256994
-  POINT  5219  -7.903282692818332  36.56886240561009
-  POINT  5220  -7.598040633279414  36.95956098877416
-  POINT  5221  -7.126972347222575  36.01744750407371
-  POINT  5222  -6.821730287683658  36.40814608723778
-  POINT  5223  -9.020623545645163  37.38900516343447
-  POINT  5224  -9.424243510782267  37.64039778849911
-  POINT  5225  -8.55965244144466  38.07573926529626
-  POINT  5226  -8.556945323688646  37.47116104503266
-  POINT  5227  -8.146988554944242  37.6652934901699
-  POINT  5228  -8.61016138837582  36.98320888708665
-  POINT  5229  -8.948133722619318  34.7550130983436
-  POINT  5230  -8.426272911082375  34.70970901961947
-  POINT  5231  -8.68619953008956  35.18782904777932
-  POINT  5232  -8.171918681535782  34.25045922190498
-  POINT  5233  -7.909984489006024  34.68327517134071
-  POINT  5234  -8.934156830967638  33.81427302246146
-  POINT  5235  -8.427661598312522  33.81056375948693
-  POINT  5236  -7.402798616599393  34.67408020217368
-  POINT  5237  -7.657152846145986  35.13332999988818
-  POINT  5238  -7.405024596478357  35.59824753662824
-  POINT  5239  -7.912210468884988  35.60744250579526
-  POINT  5240  -6.871914724483572  35.54333499816662
-  POINT  5241  -6.888813562914232  34.66573357218922
-  POINT  5242  -5.838136677064515  34.62974945206364
-  POINT  5243  -6.36080931903647  34.64062034113785
-  POINT  5244  -6.621962729861593  35.09902179966978
-  POINT  5245  -6.34391048060581  35.51822176711525
-  POINT  5246  -5.576018659483458  35.08006032626925
-  POINT  5247  -5.831280178847591  35.52762383998741
-  POINT  5248  -6.081232173469569  35.97193703848426
-  POINT  5249  -6.414624379431359  38.42551013672836
-  POINT  5250  -6.06170323738905  37.87410771123918
-  POINT  5251  -6.85513583736405  38.26715632721284
-  POINT  5252  -6.765677367949003  38.82088227601641
-  POINT  5253  -5.842877995505253  37.38558927504278
-  POINT  5254  -5.57063863640637  36.90403968955684
-  POINT  5255  -5.818443825308139  36.44062116096016
-  POINT  5256  -6.287111020788723  37.38842164676031
-  POINT  5257  -6.558941939522226  36.87683020971369
-  POINT  5258  -6.777767181406023  37.36534864591009
-  POINT  5259  -6.331074127066358  36.431219088088
-  POINT  5260  8.876288812510946  27.50911496320762
-  POINT  5261  9.129651777699287  27.06523084655123
-  POINT  5262  8.872303279133433  26.61976424763491
-  POINT  5263  8.361773132138943  26.61807490241647
-  POINT  5264  8.108499459230185  27.06075329726731
-  POINT  5265  8.370125922301042  28.3970195492633
-  POINT  5266  7.859855674189975  28.39452253470644
-  POINT  5267  8.623177303212083  27.95266501854642
-  POINT  5268  7.602700800558854  27.94780788776358
-  POINT  5269  8.365439690317341  27.5063527674756
-  POINT  5270  7.85538794993132  27.50430335260611
-  POINT  5271  2.013562028795792  7.580836026957666
-  POINT  5272  2.26255201348978  7.128472213510832
-  POINT  5273  2.77500305718747  8.037874485340598
-  POINT  5274  3.027617726611467  7.589434151032957
-  POINT  5275  3.283325039581317  8.042101283776436
-  POINT  5276  4.303354076505858  8.941046540609735
-  POINT  5277  4.559517266307168  8.493071306044598
-  POINT  5278  4.303318937401558  8.046327360535352
-  POINT  5279  3.794429651747119  8.941483306382132
-  POINT  5280  3.539603867070875  8.492193488056373
-  POINT  5281  3.792218536494872  8.04375315374873
-  POINT  5282  1.765500287132538  8.935229901889144
-  POINT  5283  1.512133152393508  8.483328312230684
-  POINT  5284  1.26052017194238  8.933024273296105
-  POINT  5285  2.268204505900643  8.035370646710422
-  POINT  5286  2.523911818870494  8.488037779453901
-  POINT  5287  2.271387884601659  8.93645405223478
-  POINT  5288  1.762470790478816  8.030999321070967
-  POINT  5289  0.7570181339856141  9.832621206105948
-  POINT  5290  0.2521486956286256  9.832463953535083
-  POINT  5291  1.009092319370833  9.384111939311431
-  POINT  5292  7.294083631537163e-08  9.383298033689051
-  POINT  5293  0.755725184631803  8.932210349652973
-  POINT  5294  0.2521487063815567  8.931176081657238
-  POINT  5295  0.5001445506630317  6.653216377611718
-  POINT  5296  0.2509575290254266  7.109769236321039
-  POINT  5297  -0.2509574054255117  7.109769247532057
-  POINT  5298  -0.5001444446786542  6.653216389361097
-  POINT  5299  -0.2485632222434483  6.187417819036827
-  POINT  5300  1.486808276477663  4.815803748516092
-  POINT  5301  1.233115516860302  4.336364274084247
-  POINT  5302  0.7400739793290316  4.319006830385741
-  POINT  5303  0.4944715681245202  4.791077890962915
-  POINT  5304  1.247341716301759  6.199670761156298
-  POINT  5305  1.750101329007567  6.207339947551936
-  POINT  5306  1.241668873888472  5.270356238309256
-  POINT  5307  1.739533777842383  5.288390330886163
-  POINT  5308  6.319776508411969  23.08033816696384
-  POINT  5309  6.57365161657976  22.64022355419007
-  POINT  5310  5.813247233137025  22.20059394145463
-  POINT  5311  5.559612309276712  22.64037942157165
-  POINT  5312  5.812595440385603  23.08012398834565
-  POINT  5313  6.827537292599711  22.20035520381776
-  POINT  5314  7.081929764721854  21.760379613744
-  POINT  5315  6.067132909156976  21.76072559108232
-  POINT  5316  6.321207979898867  21.32076562341935
-  POINT  5317  6.319913133203913  22.20029199662393
-  POINT  5318  6.828119358218929  21.32047871636039
-  POINT  5319  -15.60761428771511  15.17729136075921
-  POINT  5320  -15.8759118955204  15.61135550393402
-  POINT  5321  -15.07838575053652  15.17331221426195
-  POINT  5322  5.313338001627086  4.46622421620718
-  POINT  5323  4.800176500099562  4.456810078993488
-  POINT  5324  5.57601665209557  4.919939725998326
-  POINT  5325  3.782261521536312  6.243544847125578
-  POINT  5326  4.035803768525128  5.797003854445578
-  POINT  5327  4.295343007076298  6.25166539718948
-  POINT  5328  5.32782445313552  7.150212913721168
-  POINT  5329  5.5874601881524  6.7007613202222
-  POINT  5330  4.555688461472631  6.70175982734103
-  POINT  5331  4.809230708461447  6.255218834661029
-  POINT  5332  4.813858336838233  7.152061313927309
-  POINT  5333  -5.310107499537395  13.39084792377241
-  POINT  5334  -5.817351857309676  13.38983227473242
-  POINT  5335  -6.07268972719344  12.94608409290475
-  POINT  5336  -5.830755763497873  9.830536332965101
-  POINT  5337  -5.574295325382317  10.27814411627772
-  POINT  5338  -5.827083974112147  10.72300100372588
-  POINT  5339  -5.317804215979157  10.7252057153338
-  POINT  5340  -6.328097480913719  12.50141410567111
-  POINT  5341  -6.584305435820698  12.05624829120225
-  POINT  5342  -5.820129377214162  12.50287858122533
-  POINT  5343  -2.273653862835852  10.72932296672886
-  POINT  5344  -2.779998427153544  10.72963483000736
-  POINT  5345  -2.526893511585702  10.28311542011334
-  POINT  5346  -3.03325797369162  11.17544935978157
-  POINT  5347  -3.286081789785646  11.62005936335257
-  POINT  5348  -2.77958259449772  11.62045238019389
-  POINT  5349  -3.793978657891382  10.72885678785785
-  POINT  5350  -3.28649762244147  10.72924181316605
-  POINT  5351  -3.033012140510429  9.388247926083039
-  POINT  5352  -2.778186307943474  8.938958170589331
-  POINT  5353  -2.271387729106642  8.936454262492179
-  POINT  5354  -2.019774768934057  9.386150177582453
-  POINT  5355  -2.273105663732145  9.835088963624671
-  POINT  5356  -2.779450228049837  9.835400826903166
-  POINT  5357  -5.5822245505022  8.490021566077278
-  POINT  5358  -5.835924092640452  8.936439449580325
-  POINT  5359  -5.83999246392453  8.041429258670941
-  POINT  5360  -6.353715300277041  8.037914311090102
-  POINT  5361  -0.7574091937513752  13.39536386100999
-  POINT  5362  -0.5049253668923982  13.83754850584218
-  POINT  5363  -1.262484566388291  13.39525698367467
-  POINT  5364  -0.7573602894107085  14.27848893565566
-  POINT  5365  -1.262291965254416  14.27845371053971
-  POINT  5366  -3.28331274272134  14.2777561649855
-  POINT  5367  -3.536686451350343  13.83613863307331
-  POINT  5368  -2.777875273536981  14.27795550083099
-  POINT  5369  -2.272576442111081  23.96112623819538
-  POINT  5370  -2.524923753604395  24.40040169094545
-  POINT  5371  -2.272345992723895  24.84060690537046
-  POINT  5372  -1.009801486872866  25.28056166755413
-  POINT  5373  -1.262291950595193  25.72154635362897
-  POINT  5374  -1.767382679741587  25.721695622482
-  POINT  5375  -2.01983108067216  25.2806633643694
-  POINT  5376  -2.272480607424279  25.72176208916036
-  POINT  5377  -1.767248065041203  24.84054043869209
-  POINT  5378  -2.778352392893433  26.60544966214032
-  POINT  5379  -3.284192720232348  26.60594747324546
-  POINT  5380  -2.52542680694141  26.16307686206677
-  POINT  5381  -2.777875207871983  25.72204460395416
-  POINT  5382  -3.28331263174079  25.72224396047425
-  POINT  5383  6.866104760713585  31.96710990335178
-  POINT  5384  7.380362796677328  31.97547094211897
-  POINT  5385  7.629644931204242  31.52677605772053
-  POINT  5386  6.606301269717369  31.51727851965659
-  POINT  5387  7.369526469756744  31.07527436817653
-  POINT  5388  6.859007733442916  31.07180208214582
-  POINT  5389  13.51392964722839  16.04511534389315
-  POINT  5390  14.03639847868913  16.04943449810747
-  POINT  5391  13.52076444975717  16.92688894744077
-  POINT  5392  14.04907281755069  16.92994337381335
-  POINT  5393  14.30347517478823  16.49353649549375
-  POINT  5394  11.18084815906273  18.23937667376692
-  POINT  5395  10.92145986158483  18.67904848402461
-  POINT  5396  10.40541215995382  18.6792215523644
-  POINT  5397  11.43896757839668  17.79930462984569
-  POINT  5398  11.69841204276576  17.35997805758548
-  POINT  5399  10.92128597919782  17.79908418944193
-  POINT  5400  10.66359917374389  17.35875830998669
-  POINT  5401  10.40547975440994  17.79883035390792
-  POINT  5402  8.865944840957612  16.91817543653783
-  POINT  5403  8.354985365778326  16.91842865090259
-  POINT  5404  8.355742015396309  16.03671800269559
-  POINT  5405  8.100430211024863  16.47811944809296
-  POINT  5406  9.377722904526436  17.79898153735976
-  POINT  5407  9.890885340997441  17.79886408828225
-  POINT  5408  9.634630512485  17.35862192353019
-  POINT  5409  10.14857214645137  18.23918996773749
-  POINT  5410  9.89081774654132  18.67925528673874
-  POINT  5411  9.377649707542098  18.67937380014824
-  POINT  5412  9.121932223471456  18.23935019673461
-  POINT  5413  12.7301955341313  15.59870120865399
-  POINT  5414  12.46808208164849  15.15416875358384
-  POINT  5415  10.66170303024074  13.81985063353565
-  POINT  5416  10.91914277660979  13.37360320785854
-  POINT  5417  11.43075873813842  13.37311649985818
-  POINT  5418  11.68774535289223  13.8200824382397
-  POINT  5419  -4.294356920184748  24.84106161932534
-  POINT  5420  -3.788433699542313  24.84070001560085
-  POINT  5421  -4.041727076734903  25.28149014781243
-  POINT  5422  -4.547087477993811  24.40041071780754
-  POINT  5423  -3.535574036554005  24.40029544465575
-  POINT  5424  -3.788414856257005  23.96059220506871
-  POINT  5425  -4.293926130446284  23.96024864672396
-  POINT  5426  -13.52905046638359  17.80348872203954
-  POINT  5427  -13.79175767275845  17.36796966650665
-  POINT  5428  -13.52076421705971  16.92688909198984
-  POINT  5429  -13.00252392740061  17.80282689423603
-  POINT  5430  -12.998413866338  16.9234253011904
-  POINT  5431  -12.7404339170757  17.36292962737342
-  POINT  5432  -14.02979306030074  15.16474248285489
-  POINT  5433  -14.55273569758199  15.16992825407098
-  POINT  5434  -14.03639819104111  16.04943470346083
-  POINT  5435  -14.56179397742396  16.05410844354104
-  POINT  5436  -13.77224846434048  15.60568723673743
-  POINT  5437  -14.82036732248942  15.61339039057769
-  POINT  5438  -15.08744403037848  16.05749240373201
-  POINT  5439  -16.2090642477196  17.81010190909618
-  POINT  5440  -15.93239653765298  17.37709080090277
-  POINT  5441  -16.75104577713385  17.80975889004021
-  POINT  5442  -17.29733902574828  17.80237948696045
-  POINT  5443  -17.82900832379805  17.79250699444906
-  POINT  5444  -18.125149458915  17.3358334365596
-  POINT  5445  -17.74265051816197  16.90620584174569
-  POINT  5446  -17.02043915652885  17.36861046666035
-  POINT  5447  -17.24542039534538  16.92123752482653
-  POINT  5448  -16.69912714673096  16.9286169279063
-  POINT  5449  -6.088630944097952  30.61808470458812
-  POINT  5450  -5.83075607699084  30.16946420465471
-  POINT  5451  -5.321476310829926  30.16725940981392
-  POINT  5452  -5.068073995839905  30.61330986323137
-  POINT  5453  -5.324237322301012  31.06128512670801
-  POINT  5454  -5.835924560406232  31.06356111209442
-  POINT  5455  -7.109843760575517  30.62477446137646
-  POINT  5456  -7.369526571375625  31.07527433075212
-  POINT  5457  -8.131410593699739  30.63279557430232
-  POINT  5458  -7.880480933021181  31.07974846151187
-  POINT  5459  -7.872056536659996  30.1821803785594
-  POINT  5460  -7.361674108531002  30.17880955550542
-  POINT  5461  -7.613368185284306  29.73274317704884
-  POINT  5462  -7.859855589284646  28.39452247461595
-  POINT  5463  -8.117653318329905  28.84163918972367
-  POINT  5464  -7.097783486965113  28.83658188443342
-  POINT  5465  -7.355184427237546  29.28425727165385
-  POINT  5466  -7.865566855366541  29.28762809470784
-  POINT  5467  -6.840628617274074  28.38986724165644
-  POINT  5468  -6.584305157135041  27.94375243992971
-  POINT  5469  -7.602700719593607  27.94780783183896
-  POINT  5470  -7.345760498175617  27.50220836892409
-  POINT  5471  -7.350228227628744  28.39242754653586
-  POINT  5472  -6.836865316533313  27.50054699198497
-  POINT  5473  -8.859668248791966  36.47820331889234
-  POINT  5474  -9.192245205163893  36.13326199675004
-  POINT  5475  -8.926778614439051  35.64424337939984
-  POINT  5476  -8.395990026835449  36.56035920049054
-  POINT  5477  -8.152789553234477  36.06385683741578
-  POINT  5478  -8.404917802902107  35.59893930067572
-  POINT  5479  -9.445446661180085  34.74868923560489
-  POINT  5480  -9.928438211384101  34.70959839015399
-  POINT  5481  -9.1855200421729  34.27056920744505
-  POINT  5482  -10.20212715258456  34.27925189416473
-  POINT  5483  -9.94558386098727  33.81809877026199
-  POINT  5484  -9.431469769528404  33.80794915972277
-  POINT  5485  -6.972437622679337  37.78020738278309
-  POINT  5486  -7.24426854141284  37.26861594573647
-  POINT  5487  -7.793216463077668  37.97434844713221
-  POINT  5488  -7.792711074552729  37.37441972564716
-  POINT  5489  -7.321637197370867  38.17042362703923
-  POINT  5490  -7.678418548302079  38.46731947176784
-  POINT  5491  2.770028761860395  7.135494617296446
-  POINT  5492  2.513285031132556  6.678759478210158
-  POINT  5493  3.271742031244156  6.237332593188722
-  POINT  5494  3.531281269795326  6.691994135932626
-  POINT  5495  3.278350744254242  7.139721415732282
-  POINT  5496  0.2485632276968463  6.187417834842025
-  POINT  5497  0.7487077343841402  6.190600158863577
-  POINT  5498  0.9957603933355736  5.733872218386605
-  POINT  5499  -3.852233976253672e-08  5.724801600288686
-  POINT  5500  0.7430348919708534  5.261285636016535
-  POINT  5501  0.2485630875716218  5.254593871040265
-  POINT  5502  -15.61382878159145  16.05886928995985
-  POINT  5503  -16.1437233016679  16.05345044312521
-  POINT  5504  -16.40287428664322  16.49110410761176
-  POINT  5505  -15.63614367756524  16.93957798060823
-  POINT  5506  -15.35525543652598  16.4995873429232
-  POINT  5507  -16.17789304782668  16.93847704944558
-  POINT  5508  1.997790912210466  5.756661433504865
-  POINT  5509  2.253497865964841  6.221058560377475
-  POINT  5510  2.760974614335455  6.228080964163087
-  POINT  5511  3.011954866076441  5.77963167535604
-  POINT  5512  2.242930314799657  5.302108943711701
-  POINT  5513  4.543058481172607  4.904216705369631
-  POINT  5514  4.288462587269439  5.349885195959473
-  POINT  5515  4.803481147968283  5.359455913919637
-  POINT  5516  3.775381101729453  5.34176464589557
-  POINT  5517  4.285157939400719  4.447239361033324
-  POINT  5518  3.759704530313033  4.444818867162756
-  POINT  5519  5.325944699989877  6.259861521617189
-  POINT  5520  5.843828725284497  6.255309577026809
-  POINT  5521  6.104985755684442  5.803539343166328
-  POINT  5522  5.838134749720831  5.370250903544328
-  POINT  5523  5.065599245593544  5.809767091465639
-  POINT  5524  5.320195139496712  5.364098600875796
-  POINT  5525  -4.802971484868761  13.39198497902312
-  POINT  5526  -4.296500513511889  13.39272959833429
-  POINT  5527  -5.057585608825249  12.94868562370967
-  POINT  5528  -6.335879478904616  10.72095926303271
-  POINT  5529  -6.079388369501457  11.1680208620888
-  POINT  5530  -6.84062880750044  11.61013355490421
-  POINT  5531  -7.097783541825249  11.16341899720847
-  POINT  5532  -6.331860502614183  11.61209385769366
-  POINT  5533  -5.823064997821714  11.61413559838683
-  POINT  5534  -6.341449844176644  9.827318953093449
-  POINT  5535  -6.08863052415921  9.381915881388753
-  POINT  5536  -6.346618173319224  8.933222069708673
-  POINT  5537  -2.273750259397786  11.62081619889232
-  POINT  5538  -2.526574075491812  12.06542620246332
-  POINT  5539  -2.27331255849431  12.50912509652447
-  POINT  5540  -2.779144893594244  12.50876127782604
-  POINT  5541  -1.767930060637219  12.50939986568534
-  POINT  5542  -1.51542042791521  12.06591801877112
-  POINT  5543  -2.020500878739651  12.95273494104806
-  POINT  5544  -7.369525954258662  8.924726485537136
-  POINT  5545  -7.629644265520056  8.473224777180157
-  POINT  5546  -6.606300873029995  8.482722239581177
-  POINT  5547  -6.86610443150657  8.032890912771032
-  POINT  5548  -6.859007304548753  8.928198671389605
-  POINT  5549  -7.109843254547891  9.375226315664634
-  POINT  5550  -7.380362326127036  8.024529817709622
-  POINT  5551  -2.525426847734203  13.83692324382117
-  POINT  5552  -2.272480651437661  14.27823799621374
-  POINT  5553  -1.767382702124846  14.27830445157146
-  POINT  5554  -1.514941488764452  13.83735499817217
-  POINT  5555  -1.767575303258722  13.39510772470642
-  POINT  5556  -2.272957801115813  13.39483295554556
-  POINT  5557  -2.778352423215133  13.39455046016281
-  POINT  5558  -1.767492689297242  23.96146211472275
-  POINT  5559  -2.020306154315385  23.52210437322497
-  POINT  5560  -1.263131319383013  23.08451873173783
-  POINT  5561  -1.01019165252415  23.52275060399421
-  POINT  5562  -1.768522078044251  23.08392505665697
-  POINT  5563  -1.262295067277426  24.84067058321086
-  POINT  5564  -1.514809979329161  24.40061412421192
-  POINT  5565  -0.7575089425560693  23.96190261348339
-  POINT  5566  -0.5049284856589678  24.40077541610661
-  POINT  5567  -0.7573634011608242  24.84063535307396
-  POINT  5568  -1.262539691533465  23.96159225924151
-  POINT  5569  -4.549022158760552  26.16510835246748
-  POINT  5570  -4.295100786789511  25.72310771361495
-  POINT  5571  -3.789177566147076  25.72274610989047
-  POINT  5572  -3.5366863417954  26.16386152627678
-  POINT  5573  -3.790057654638633  26.60644962266168
-  POINT  5574  -4.296500374351382  26.60727063581498
-  POINT  5575  10.92066954525162  16.91793455038633
-  POINT  5576  10.40486332046374  16.91768071485232
-  POINT  5577  10.40472607340097  16.03513246006513
-  POINT  5578  10.91930146715205  16.03530284192124
-  POINT  5579  10.66209384858155  15.5935783467344
-  POINT  5580  12.47199488428663  16.03898490629723
-  POINT  5581  12.99157927565469  16.04165158150828
-  POINT  5582  12.99841407818347  16.92342518505589
-  POINT  5583  12.47539865640488  16.92143962440089
-  POINT  5584  13.25572899738372  16.48539904153639
-  POINT  5585  11.95273125070042  16.03712579643803
-  POINT  5586  11.43576030048511  16.03598289401182
-  POINT  5587  11.69364019254794  15.59489163101673
-  POINT  5588  11.17839252530453  16.47753700734255
-  POINT  5589  11.43712837858468  16.91861460247691
-  POINT  5590  11.95613502281867  16.91958051454169
-  POINT  5591  12.21411499222381  16.48007616929232
-  POINT  5592  11.95093625080717  15.15244834498486
-  POINT  5593  11.43396530059186  15.15130544255865
-  POINT  5594  11.43270011507272  14.26415543114492
-  POINT  5595  11.94630659667062  14.26478916362155
-  POINT  5596  12.20840718969241  14.71058256512575
-  POINT  5597  9.122219499790404  16.47724514251171
-  POINT  5598  9.377742734846787  16.91780907858158
-  POINT  5599  9.890905171317794  16.91769162950407
-  POINT  5600  10.14797554282553  16.47686786990372
-  POINT  5601  9.890767924255025  16.03514337471688
-  POINT  5602  10.91783758504318  14.26368304084108
-  POINT  5603  10.40540174398959  14.26408496861366
-  POINT  5604  10.40452737681125  15.15066267039869
-  POINT  5605  10.91910277056232  15.15083305225481
-  POINT  5606  11.17639882882156  14.70838976622293
-  POINT  5607  10.14864614667206  14.70832398270322
-  POINT  5608  9.89163722469128  15.15106927718282
-  POINT  5609  3.51170272767204  4.885646738160905
-  POINT  5610  3.243367337511309  4.435819617914195
-  POINT  5611  2.748276492019028  5.323513767621375
-  POINT  5612  2.490019357650945  4.85524266500267
-  POINT  5613  3.259043908927729  5.332765396647009
-  POINT  5614  2.734686977480409  4.405829547072493
-  POINT  5615  -3.031723722491756  12.95196238977117
-  POINT  5616  -3.284985239489258  12.50826349571002
-  POINT  5617  -4.044006831271692  12.95064364330777
-  POINT  5618  -3.790057750626966  13.39355056268168
-  POINT  5619  -3.284192769110147  13.39405267804679
-  POINT  5620  -3.792541619613724  11.61935880772859
-  POINT  5621  -3.538866240419825  12.0643618281409
-  POINT  5622  -3.791445069317336  12.50756294008603
-  POINT  5623  -4.297887832202258  12.50674197573865
-  POINT  5624  -6.851155057129612  9.824663480890202
-  POINT  5625  -6.593280296468273  10.27328393246655
-  POINT  5626  -7.355184359388906  10.7157436666423
-  POINT  5627  -7.613367931970085  10.26725782144039
-  POINT  5628  -7.36167370683952  9.821191295037732
-  POINT  5629  -6.845584691857582  10.71830379082946
-  POINT  5630  -1.76803668438193  11.62082851212063
-  POINT  5631  -2.021045203387837  11.17585468985119
-  POINT  5632  -1.767940287819996  10.72933527995718
-  POINT  5633  -1.262715371905262  11.62095650973
-  POINT  5634  -1.010161141140113  11.17580760248892
-  POINT  5635  -1.262535223830214  10.72890573157164
-  POINT  5636  9.378288957212938  16.03556981048882
-  POINT  5637  8.866491063323762  16.03593616844507
-  POINT  5638  8.611811472818843  15.5950426706727
-  POINT  5639  8.867790365254811  15.15257222445195
-  POINT  5640  9.379158257649195  15.15149571295476
-  POINT  5641  9.635039487788383  15.59383440065023
-  POINT  5642  -4.299837112326497  11.6184558241427
-  POINT  5643  -4.047052661692318  11.17415335935438
-  POINT  5644  -4.301274150604154  10.72795380427197
-  POINT  5645  -5.062470509557039  11.17165648927523
-  POINT  5646  -4.809681860827208  10.72679960182707
-  POINT  5647  -4.805074905311793  12.50557281219472
-  POINT  5648  -5.312210919980426  12.50443575694401
-  POINT  5649  -4.552513143357436  12.06249210897299
-  POINT  5650  -5.567618673700705  12.05976576971038
-  POINT  5651  -4.807024185436029  11.61728666059878
-  POINT  5652  -5.315146540587978  11.61569277410551
-
-END POINTS LIST
-
-
-
-BEGIN MESH STRUCTURE DESCRIPTION
-
-CONVEX 0    GT_PK(2,2)      258  1447  259  1448  1449  293
-CONVEX 1    GT_PK(2,2)      25  1450  10  1451  1452  0
-CONVEX 2    GT_PK(2,2)      18  1453  17  1454  1455  36
-CONVEX 3    GT_PK(2,2)      1426  1456  1440  1457  1458  4
-CONVEX 4    GT_PK(2,2)      824  1459  823  1460  1461  863
-CONVEX 5    GT_PK(2,2)      824  1462  784  1459  1463  823
-CONVEX 6    GT_PK(2,2)      1058  1464  1020  1465  1466  1021
-CONVEX 7    GT_PK(2,2)      728  1467  767  1468  1469  768
-CONVEX 8    GT_PK(2,2)      395  1470  394  1471  1472  357
-CONVEX 9    GT_PK(2,2)      225  1473  258  1474  1447  259
-CONVEX 10    GT_PK(2,2)      160  1475  192  1476  1477  191
-CONVEX 11    GT_PK(2,2)      224  1478  192  1479  1477  191
-CONVEX 12    GT_PK(2,2)      224  1480  225  1481  1473  258
-CONVEX 13    GT_PK(2,2)      224  1480  225  1478  1482  192
-CONVEX 14    GT_PK(2,2)      216  1483  185  1484  1485  186
-CONVEX 15    GT_PK(2,2)      280  1486  281  1487  1488  247
-CONVEX 16    GT_PK(2,2)      280  1486  281  1489  1490  315
-CONVEX 17    GT_PK(2,2)      64  1491  65  1492  1493  88
-CONVEX 18    GT_PK(2,2)      6  1494  20  1495  1496  5
-CONVEX 19    GT_PK(2,2)      21  1497  6  1498  1494  20
-CONVEX 20    GT_PK(2,2)      21  1497  6  1499  1500  7
-CONVEX 21    GT_PK(2,2)      1428  1501  1442  1502  1503  1443
-CONVEX 22    GT_PK(2,2)      1408  1504  1426  1505  1506  1407
-CONVEX 23    GT_PK(2,2)      1373  1507  1396  1508  1509  1397
-CONVEX 24    GT_PK(2,2)      1431  1510  1430  1511  1512  1412
-CONVEX 25    GT_PK(2,2)      1431  1513  1445  1514  1515  1446
-CONVEX 26    GT_PK(2,2)      1431  1510  1430  1513  1516  1445
-CONVEX 27    GT_PK(2,2)      1218  1517  1185  1518  1519  1184
-CONVEX 28    GT_PK(2,2)      1218  1517  1185  1520  1521  1219
-CONVEX 29    GT_PK(2,2)      745  1522  705  1523  1524  3
-CONVEX 30    GT_PK(2,2)      745  1525  784  1523  1526  3
-CONVEX 31    GT_PK(2,2)      782  1527  743  1528  1529  744
-CONVEX 32    GT_PK(2,2)      782  1527  743  1530  1531  781
-CONVEX 33    GT_PK(2,2)      1165  1532  1130  1533  1534  1129
-CONVEX 34    GT_PK(2,2)      1262  1535  1229  1536  1537  1230
-CONVEX 35    GT_PK(2,2)      1164  1538  1198  1539  1540  1199
-CONVEX 36    GT_PK(2,2)      1164  1541  1165  1542  1533  1129
-CONVEX 37    GT_PK(2,2)      1164  1541  1165  1539  1543  1199
-CONVEX 38    GT_PK(2,2)      1232  1544  1198  1545  1540  1199
-CONVEX 39    GT_PK(2,2)      1232  1546  1231  1547  1548  1264
-CONVEX 40    GT_PK(2,2)      1232  1546  1231  1544  1549  1198
-CONVEX 41    GT_PK(2,2)      936  1550  937  1551  1552  975
-CONVEX 42    GT_PK(2,2)      316  1553  281  1554  1490  315
-CONVEX 43    GT_PK(2,2)      428  1555  429  1556  1557  467
-CONVEX 44    GT_PK(2,2)      319  1558  320  1559  1560  355
-CONVEX 45    GT_PK(2,2)      319  1561  354  1559  1562  355
-CONVEX 46    GT_PK(2,2)      1059  1563  1058  1564  1465  1021
-CONVEX 47    GT_PK(2,2)      706  1565  746  1566  1567  2
-CONVEX 48    GT_PK(2,2)      706  1565  746  1568  1569  747
-CONVEX 49    GT_PK(2,2)      706  1570  667  1566  1571  2
-CONVEX 50    GT_PK(2,2)      706  1572  668  1570  1573  667
-CONVEX 51    GT_PK(2,2)      1406  1574  1385  1575  1576  1407
-CONVEX 52    GT_PK(2,2)      1406  1577  1424  1578  1579  1405
-CONVEX 53    GT_PK(2,2)      1278  1580  1279  1581  1582  1247
-CONVEX 54    GT_PK(2,2)      1196  1583  1229  1584  1537  1230
-CONVEX 55    GT_PK(2,2)      806  1585  767  1586  1587  766
-CONVEX 56    GT_PK(2,2)      806  1588  845  1589  1590  846
-CONVEX 57    GT_PK(2,2)      806  1591  805  1586  1592  766
-CONVEX 58    GT_PK(2,2)      806  1591  805  1588  1593  845
-CONVEX 59    GT_PK(2,2)      727  1594  767  1595  1587  766
-CONVEX 60    GT_PK(2,2)      727  1596  728  1594  1467  767
-CONVEX 61    GT_PK(2,2)      807  1597  767  1598  1469  768
-CONVEX 62    GT_PK(2,2)      807  1599  806  1597  1585  767
-CONVEX 63    GT_PK(2,2)      807  1600  847  1601  1602  846
-CONVEX 64    GT_PK(2,2)      807  1599  806  1601  1589  846
-CONVEX 65    GT_PK(2,2)      403  1603  365  1604  1605  366
-CONVEX 66    GT_PK(2,2)      439  1606  478  1607  1608  477
-CONVEX 67    GT_PK(2,2)      325  1609  326  1610  1611  362
-CONVEX 68    GT_PK(2,2)      363  1612  326  1613  1614  327
-CONVEX 69    GT_PK(2,2)      363  1612  326  1615  1611  362
-CONVEX 70    GT_PK(2,2)      128  1616  158  1617  1618  157
-CONVEX 71    GT_PK(2,2)      189  1619  190  1620  1621  222
-CONVEX 72    GT_PK(2,2)      189  1619  190  1622  1623  158
-CONVEX 73    GT_PK(2,2)      189  1624  156  1625  1626  157
-CONVEX 74    GT_PK(2,2)      189  1622  158  1625  1618  157
-CONVEX 75    GT_PK(2,2)      255  1627  256  1628  1629  222
-CONVEX 76    GT_PK(2,2)      253  1630  252  1631  1632  219
-CONVEX 77    GT_PK(2,2)      253  1633  220  1631  1634  219
-CONVEX 78    GT_PK(2,2)      187  1635  220  1636  1634  219
-CONVEX 79    GT_PK(2,2)      291  1637  326  1638  1614  327
-CONVEX 80    GT_PK(2,2)      161  1639  160  1640  1475  192
-CONVEX 81    GT_PK(2,2)      131  1641  161  1642  1639  160
-CONVEX 82    GT_PK(2,2)      131  1643  104  1644  1645  132
-CONVEX 83    GT_PK(2,2)      131  1641  161  1644  1646  132
-CONVEX 84    GT_PK(2,2)      129  1647  128  1648  1616  158
-CONVEX 85    GT_PK(2,2)      223  1649  224  1650  1479  191
-CONVEX 86    GT_PK(2,2)      223  1651  256  1652  1629  222
-CONVEX 87    GT_PK(2,2)      223  1653  190  1650  1654  191
-CONVEX 88    GT_PK(2,2)      223  1653  190  1652  1621  222
-CONVEX 89    GT_PK(2,2)      127  1655  155  1656  1657  154
-CONVEX 90    GT_PK(2,2)      127  1658  126  1656  1659  154
-CONVEX 91    GT_PK(2,2)      127  1660  100  1658  1661  126
-CONVEX 92    GT_PK(2,2)      181  1662  182  1663  1664  152
-CONVEX 93    GT_PK(2,2)      246  1665  280  1666  1487  247
-CONVEX 94    GT_PK(2,2)      124  1667  99  1668  1669  98
-CONVEX 95    GT_PK(2,2)      125  1670  124  1671  1672  152
-CONVEX 96    GT_PK(2,2)      125  1670  124  1673  1667  99
-CONVEX 97    GT_PK(2,2)      125  1673  99  1674  1675  76
-CONVEX 98    GT_PK(2,2)      125  1676  100  1674  1677  76
-CONVEX 99    GT_PK(2,2)      125  1676  100  1678  1661  126
-CONVEX 100    GT_PK(2,2)      75  1679  53  1680  1681  98
-CONVEX 101    GT_PK(2,2)      75  1682  99  1680  1669  98
-CONVEX 102    GT_PK(2,2)      75  1682  99  1683  1675  76
-CONVEX 103    GT_PK(2,2)      217  1684  218  1685  1686  186
-CONVEX 104    GT_PK(2,2)      217  1687  216  1685  1484  186
-CONVEX 105    GT_PK(2,2)      217  1687  216  1688  1689  249
-CONVEX 106    GT_PK(2,2)      248  1690  216  1691  1689  249
-CONVEX 107    GT_PK(2,2)      248  1692  281  1693  1488  247
-CONVEX 108    GT_PK(2,2)      282  1694  316  1695  1696  317
-CONVEX 109    GT_PK(2,2)      282  1694  316  1697  1553  281
-CONVEX 110    GT_PK(2,2)      282  1698  248  1699  1691  249
-CONVEX 111    GT_PK(2,2)      282  1698  248  1697  1692  281
-CONVEX 112    GT_PK(2,2)      314  1700  280  1701  1489  315
-CONVEX 113    GT_PK(2,2)      12  1702  27  1703  1704  13
-CONVEX 114    GT_PK(2,2)      35  1705  56  1706  1707  34
-CONVEX 115    GT_PK(2,2)      79  1708  56  1709  1710  80
-CONVEX 116    GT_PK(2,2)      79  1711  34  1712  1713  55
-CONVEX 117    GT_PK(2,2)      79  1708  56  1711  1707  34
-CONVEX 118    GT_PK(2,2)      43  1714  25  1715  1716  44
-CONVEX 119    GT_PK(2,2)      43  1717  65  1715  1718  44
-CONVEX 120    GT_PK(2,2)      43  1719  64  1717  1491  65
-CONVEX 121    GT_PK(2,2)      22  1720  21  1721  1499  7
-CONVEX 122    GT_PK(2,2)      22  1722  8  1721  1723  7
-CONVEX 123    GT_PK(2,2)      22  1722  8  1724  1725  23
-CONVEX 124    GT_PK(2,2)      22  1724  23  1726  1727  41
-CONVEX 125    GT_PK(2,2)      1427  1728  1428  1729  1501  1442
-CONVEX 126    GT_PK(2,2)      1427  1730  1408  1731  1504  1426
-CONVEX 127    GT_PK(2,2)      1427  1728  1428  1732  1733  1409
-CONVEX 128    GT_PK(2,2)      1427  1730  1408  1732  1734  1409
-CONVEX 129    GT_PK(2,2)      1386  1735  1385  1736  1576  1407
-CONVEX 130    GT_PK(2,2)      1386  1737  1408  1736  1505  1407
-CONVEX 131    GT_PK(2,2)      885  1738  845  1739  1590  846
-CONVEX 132    GT_PK(2,2)      1193  1740  1192  1741  1742  1158
-CONVEX 133    GT_PK(2,2)      1429  1743  1428  1744  1502  1443
-CONVEX 134    GT_PK(2,2)      1391  1745  1390  1746  1747  1412
-CONVEX 135    GT_PK(2,2)      1248  1748  1279  1749  1582  1247
-CONVEX 136    GT_PK(2,2)      1183  1750  1149  1751  1752  1148
-CONVEX 137    GT_PK(2,2)      1183  1750  1149  1753  1754  1184
-CONVEX 138    GT_PK(2,2)      1187  1755  1188  1756  1757  1221
-CONVEX 139    GT_PK(2,2)      468  1758  429  1759  1557  467
-CONVEX 140    GT_PK(2,2)      470  1760  469  1761  1762  431
-CONVEX 141    GT_PK(2,2)      507  1763  508  1764  1765  546
-CONVEX 142    GT_PK(2,2)      507  1766  545  1764  1767  546
-CONVEX 143    GT_PK(2,2)      507  1768  470  1769  1760  469
-CONVEX 144    GT_PK(2,2)      507  1768  470  1763  1770  508
-CONVEX 145    GT_PK(2,2)      507  1771  468  1769  1772  469
-CONVEX 146    GT_PK(2,2)      704  1773  745  1774  1522  705
-CONVEX 147    GT_PK(2,2)      704  1773  745  1775  1776  744
-CONVEX 148    GT_PK(2,2)      585  1777  545  1778  1767  546
-CONVEX 149    GT_PK(2,2)      898  1779  937  1780  1781  938
-CONVEX 150    GT_PK(2,2)      783  1782  784  1783  1463  823
-CONVEX 151    GT_PK(2,2)      783  1784  745  1782  1525  784
-CONVEX 152    GT_PK(2,2)      783  1784  745  1785  1776  744
-CONVEX 153    GT_PK(2,2)      783  1786  782  1785  1528  744
-CONVEX 154    GT_PK(2,2)      783  1783  823  1787  1788  822
-CONVEX 155    GT_PK(2,2)      783  1786  782  1787  1789  822
-CONVEX 156    GT_PK(2,2)      1263  1790  1262  1791  1536  1230
-CONVEX 157    GT_PK(2,2)      1263  1792  1231  1791  1793  1230
-CONVEX 158    GT_PK(2,2)      1263  1792  1231  1794  1548  1264
-CONVEX 159    GT_PK(2,2)      897  1795  936  1796  1797  896
-CONVEX 160    GT_PK(2,2)      897  1795  936  1798  1550  937
-CONVEX 161    GT_PK(2,2)      897  1799  898  1800  1801  858
-CONVEX 162    GT_PK(2,2)      897  1799  898  1798  1779  937
-CONVEX 163    GT_PK(2,2)      818  1802  779  1803  1804  778
-CONVEX 164    GT_PK(2,2)      821  1805  820  1806  1807  781
-CONVEX 165    GT_PK(2,2)      821  1808  782  1809  1789  822
-CONVEX 166    GT_PK(2,2)      821  1808  782  1806  1530  781
-CONVEX 167    GT_PK(2,2)      940  1810  939  1811  1812  978
-CONVEX 168    GT_PK(2,2)      940  1810  939  1813  1814  900
-CONVEX 169    GT_PK(2,2)      902  1815  942  1816  1817  903
-CONVEX 170    GT_PK(2,2)      902  1815  942  1818  1819  941
-CONVEX 171    GT_PK(2,2)      976  1820  937  1821  1781  938
-CONVEX 172    GT_PK(2,2)      976  1820  937  1822  1552  975
-CONVEX 173    GT_PK(2,2)      352  1823  316  1824  1696  317
-CONVEX 174    GT_PK(2,2)      430  1825  392  1826  1827  429
-CONVEX 175    GT_PK(2,2)      430  1828  469  1829  1762  431
-CONVEX 176    GT_PK(2,2)      430  1830  468  1826  1758  429
-CONVEX 177    GT_PK(2,2)      430  1830  468  1828  1772  469
-CONVEX 178    GT_PK(2,2)      393  1831  430  1832  1829  431
-CONVEX 179    GT_PK(2,2)      393  1831  430  1833  1825  392
-CONVEX 180    GT_PK(2,2)      391  1834  392  1835  1827  429
-CONVEX 181    GT_PK(2,2)      391  1836  428  1837  1838  390
-CONVEX 182    GT_PK(2,2)      391  1836  428  1835  1555  429
-CONVEX 183    GT_PK(2,2)      391  1839  354  1837  1840  390
-CONVEX 184    GT_PK(2,2)      391  1834  392  1841  1842  355
-CONVEX 185    GT_PK(2,2)      391  1839  354  1841  1562  355
-CONVEX 186    GT_PK(2,2)      318  1843  319  1844  1845  284
-CONVEX 187    GT_PK(2,2)      318  1843  319  1846  1561  354
-CONVEX 188    GT_PK(2,2)      285  1847  319  1848  1558  320
-CONVEX 189    GT_PK(2,2)      285  1849  284  1850  1851  251
-CONVEX 190    GT_PK(2,2)      285  1847  319  1849  1845  284
-CONVEX 191    GT_PK(2,2)      707  1852  706  1853  1568  747
-CONVEX 192    GT_PK(2,2)      707  1852  706  1854  1572  668
-CONVEX 193    GT_PK(2,2)      786  1855  746  1856  1857  785
-CONVEX 194    GT_PK(2,2)      786  1855  746  1858  1569  747
-CONVEX 195    GT_PK(2,2)      1265  1859  1233  1860  1861  1234
-CONVEX 196    GT_PK(2,2)      1201  1862  1233  1863  1861  1234
-CONVEX 197    GT_PK(2,2)      1201  1862  1233  1864  1865  1200
-CONVEX 198    GT_PK(2,2)      1134  1866  1135  1867  1868  1099
-CONVEX 199    GT_PK(2,2)      1132  1869  1166  1870  1871  1131
-CONVEX 200    GT_PK(2,2)      1095  1872  1059  1873  1563  1058
-CONVEX 201    GT_PK(2,2)      948  1874  909  1875  1876  910
-CONVEX 202    GT_PK(2,2)      1103  1877  1138  1878  1879  1102
-CONVEX 203    GT_PK(2,2)      717  1880  756  1881  1882  757
-CONVEX 204    GT_PK(2,2)      717  1883  677  1884  1885  678
-CONVEX 205    GT_PK(2,2)      717  1880  756  1886  1887  716
-CONVEX 206    GT_PK(2,2)      717  1883  677  1886  1888  716
-CONVEX 207    GT_PK(2,2)      796  1889  756  1890  1882  757
-CONVEX 208    GT_PK(2,2)      796  1891  797  1890  1892  757
-CONVEX 209    GT_PK(2,2)      796  1891  797  1893  1894  836
-CONVEX 210    GT_PK(2,2)      796  1895  835  1893  1896  836
-CONVEX 211    GT_PK(2,2)      599  1897  559  1898  1899  598
-CONVEX 212    GT_PK(2,2)      759  1900  760  1901  1902  720
-CONVEX 213    GT_PK(2,2)      759  1903  719  1901  1904  720
-CONVEX 214    GT_PK(2,2)      718  1905  678  1906  1907  679
-CONVEX 215    GT_PK(2,2)      718  1908  719  1906  1909  679
-CONVEX 216    GT_PK(2,2)      718  1910  717  1911  1881  757
-CONVEX 217    GT_PK(2,2)      718  1910  717  1905  1884  678
-CONVEX 218    GT_PK(2,2)      721  1912  760  1913  1902  720
-CONVEX 219    GT_PK(2,2)      721  1914  681  1913  1915  720
-CONVEX 220    GT_PK(2,2)      721  1914  681  1916  1917  682
-CONVEX 221    GT_PK(2,2)      721  1918  761  1912  1919  760
-CONVEX 222    GT_PK(2,2)      680  1920  640  1921  1922  641
-CONVEX 223    GT_PK(2,2)      680  1923  681  1921  1924  641
-CONVEX 224    GT_PK(2,2)      680  1920  640  1925  1926  679
-CONVEX 225    GT_PK(2,2)      680  1923  681  1927  1915  720
-CONVEX 226    GT_PK(2,2)      680  1928  719  1925  1909  679
-CONVEX 227    GT_PK(2,2)      680  1928  719  1927  1904  720
-CONVEX 228    GT_PK(2,2)      1425  1929  1426  1930  1506  1407
-CONVEX 229    GT_PK(2,2)      1425  1931  1406  1930  1575  1407
-CONVEX 230    GT_PK(2,2)      1425  1931  1406  1932  1577  1424
-CONVEX 231    GT_PK(2,2)      1425  1929  1426  1933  1456  1440
-CONVEX 232    GT_PK(2,2)      1425  1933  1440  1934  1935  1439
-CONVEX 233    GT_PK(2,2)      1425  1932  1424  1934  1936  1439
-CONVEX 234    GT_PK(2,2)      1384  1937  1361  1938  1939  1385
-CONVEX 235    GT_PK(2,2)      1384  1940  1405  1941  1942  1383
-CONVEX 236    GT_PK(2,2)      1384  1943  1406  1940  1578  1405
-CONVEX 237    GT_PK(2,2)      1384  1943  1406  1938  1574  1385
-CONVEX 238    GT_PK(2,2)      971  1944  970  1945  1946  1009
-CONVEX 239    GT_PK(2,2)      932  1947  970  1948  1949  931
-CONVEX 240    GT_PK(2,2)      932  1950  971  1951  1952  933
-CONVEX 241    GT_PK(2,2)      932  1950  971  1947  1944  970
-CONVEX 242    GT_PK(2,2)      969  1953  970  1954  1949  931
-CONVEX 243    GT_PK(2,2)      969  1955  930  1954  1956  931
-CONVEX 244    GT_PK(2,2)      969  1955  930  1957  1958  968
-CONVEX 245    GT_PK(2,2)      895  1959  894  1960  1961  855
-CONVEX 246    GT_PK(2,2)      1197  1962  1231  1963  1793  1230
-CONVEX 247    GT_PK(2,2)      1197  1964  1196  1963  1584  1230
-CONVEX 248    GT_PK(2,2)      1197  1962  1231  1965  1549  1198
-CONVEX 249    GT_PK(2,2)      609  1966  610  1967  1968  649
-CONVEX 250    GT_PK(2,2)      241  1969  275  1970  1971  242
-CONVEX 251    GT_PK(2,2)      241  1972  274  1969  1973  275
-CONVEX 252    GT_PK(2,2)      29  1974  14  1975  1976  15
-CONVEX 253    GT_PK(2,2)      66  1977  44  1978  1979  45
-CONVEX 254    GT_PK(2,2)      66  1980  65  1977  1718  44
-CONVEX 255    GT_PK(2,2)      460  1981  459  1982  1983  498
-CONVEX 256    GT_PK(2,2)      276  1984  275  1985  1971  242
-CONVEX 257    GT_PK(2,2)      455  1986  454  1987  1988  416
-CONVEX 258    GT_PK(2,2)      455  1986  454  1989  1990  493
-CONVEX 259    GT_PK(2,2)      307  1991  306  1992  1993  342
-CONVEX 260    GT_PK(2,2)      310  1994  345  1995  1996  346
-CONVEX 261    GT_PK(2,2)      310  1997  276  1998  1984  275
-CONVEX 262    GT_PK(2,2)      417  1999  455  2000  1987  416
-CONVEX 263    GT_PK(2,2)      417  1999  455  2001  2002  456
-CONVEX 264    GT_PK(2,2)      417  2003  379  2000  2004  416
-CONVEX 265    GT_PK(2,2)      417  2003  379  2005  2006  380
-CONVEX 266    GT_PK(2,2)      343  2007  307  2008  2009  308
-CONVEX 267    GT_PK(2,2)      343  2007  307  2010  1992  342
-CONVEX 268    GT_PK(2,2)      343  2011  379  2010  2012  342
-CONVEX 269    GT_PK(2,2)      343  2011  379  2013  2006  380
-CONVEX 270    GT_PK(2,2)      339  2014  304  2015  2016  303
-CONVEX 271    GT_PK(2,2)      341  2017  306  2018  1993  342
-CONVEX 272    GT_PK(2,2)      726  2019  727  2020  1595  766
-CONVEX 273    GT_PK(2,2)      688  2021  727  2022  1596  728
-CONVEX 274    GT_PK(2,2)      628  2023  668  2024  2025  629
-CONVEX 275    GT_PK(2,2)      628  2023  668  2026  1573  667
-CONVEX 276    GT_PK(2,2)      589  2027  628  2028  2024  629
-CONVEX 277    GT_PK(2,2)      589  2027  628  2029  2030  588
-CONVEX 278    GT_PK(2,2)      364  2031  363  2032  1613  327
-CONVEX 279    GT_PK(2,2)      364  2031  363  2033  2034  401
-CONVEX 280    GT_PK(2,2)      328  2035  364  2036  2037  365
-CONVEX 281    GT_PK(2,2)      328  2035  364  2038  2032  327
-CONVEX 282    GT_PK(2,2)      329  2039  365  2040  1605  366
-CONVEX 283    GT_PK(2,2)      329  2041  330  2040  2042  366
-CONVEX 284    GT_PK(2,2)      329  2043  328  2039  2036  365
-CONVEX 285    GT_PK(2,2)      329  2043  328  2044  2045  293
-CONVEX 286    GT_PK(2,2)      367  2046  330  2047  2042  366
-CONVEX 287    GT_PK(2,2)      601  2048  640  2049  1922  641
-CONVEX 288    GT_PK(2,2)      562  2050  522  2051  2052  561
-CONVEX 289    GT_PK(2,2)      562  2053  601  2051  2054  561
-CONVEX 290    GT_PK(2,2)      523  2055  562  2056  2050  522
-CONVEX 291    GT_PK(2,2)      523  2055  562  2057  2058  563
-CONVEX 292    GT_PK(2,2)      521  2059  522  2060  2052  561
-CONVEX 293    GT_PK(2,2)      397  2061  398  2062  2063  360
-CONVEX 294    GT_PK(2,2)      437  2064  398  2065  2066  399
-CONVEX 295    GT_PK(2,2)      361  2067  398  2068  2063  360
-CONVEX 296    GT_PK(2,2)      361  2069  325  2070  1610  362
-CONVEX 297    GT_PK(2,2)      361  2070  362  2071  2072  399
-CONVEX 298    GT_PK(2,2)      361  2067  398  2071  2066  399
-CONVEX 299    GT_PK(2,2)      286  2073  322  2074  2075  321
-CONVEX 300    GT_PK(2,2)      359  2076  397  2077  2078  396
-CONVEX 301    GT_PK(2,2)      359  2076  397  2079  2062  360
-CONVEX 302    GT_PK(2,2)      358  2080  321  2081  2082  357
-CONVEX 303    GT_PK(2,2)      358  2083  322  2080  2075  321
-CONVEX 304    GT_PK(2,2)      358  2084  395  2081  1471  357
-CONVEX 305    GT_PK(2,2)      358  2085  359  2083  2086  322
-CONVEX 306    GT_PK(2,2)      358  2084  395  2087  2088  396
-CONVEX 307    GT_PK(2,2)      358  2085  359  2087  2077  396
-CONVEX 308    GT_PK(2,2)      402  2089  403  2090  1603  365
-CONVEX 309    GT_PK(2,2)      402  2091  364  2092  2033  401
-CONVEX 310    GT_PK(2,2)      402  2091  364  2090  2037  365
-CONVEX 311    GT_PK(2,2)      400  2093  439  2094  2095  401
-CONVEX 312    GT_PK(2,2)      400  2096  363  2094  2034  401
-CONVEX 313    GT_PK(2,2)      400  2097  362  2098  2072  399
-CONVEX 314    GT_PK(2,2)      400  2096  363  2097  1615  362
-CONVEX 315    GT_PK(2,2)      438  2099  439  2100  1607  477
-CONVEX 316    GT_PK(2,2)      438  2101  437  2102  2065  399
-CONVEX 317    GT_PK(2,2)      438  2103  400  2102  2098  399
-CONVEX 318    GT_PK(2,2)      438  2103  400  2099  2093  439
-CONVEX 319    GT_PK(2,2)      101  2104  77  2105  2106  102
-CONVEX 320    GT_PK(2,2)      101  2107  129  2105  2108  102
-CONVEX 321    GT_PK(2,2)      101  2107  129  2109  1647  128
-CONVEX 322    GT_PK(2,2)      188  2110  189  2111  1624  156
-CONVEX 323    GT_PK(2,2)      188  2112  187  2111  2113  156
-CONVEX 324    GT_PK(2,2)      188  2112  187  2114  1635  220
-CONVEX 325    GT_PK(2,2)      254  2115  253  2116  1633  220
-CONVEX 326    GT_PK(2,2)      254  2117  255  2118  2119  289
-CONVEX 327    GT_PK(2,2)      287  2120  253  2121  1630  252
-CONVEX 328    GT_PK(2,2)      287  2122  286  2121  2123  252
-CONVEX 329    GT_PK(2,2)      287  2122  286  2124  2073  322
-CONVEX 330    GT_PK(2,2)      292  2125  291  2126  1638  327
-CONVEX 331    GT_PK(2,2)      292  2127  258  2128  1448  293
-CONVEX 332    GT_PK(2,2)      292  2129  328  2128  2045  293
-CONVEX 333    GT_PK(2,2)      292  2129  328  2126  2038  327
-CONVEX 334    GT_PK(2,2)      257  2130  224  2131  1481  258
-CONVEX 335    GT_PK(2,2)      257  2132  292  2131  2127  258
-CONVEX 336    GT_PK(2,2)      257  2132  292  2133  2125  291
-CONVEX 337    GT_PK(2,2)      257  2133  291  2134  2135  256
-CONVEX 338    GT_PK(2,2)      257  2136  223  2134  1651  256
-CONVEX 339    GT_PK(2,2)      257  2136  223  2130  1649  224
-CONVEX 340    GT_PK(2,2)      290  2137  325  2138  1609  326
-CONVEX 341    GT_PK(2,2)      290  2139  291  2138  1637  326
-CONVEX 342    GT_PK(2,2)      290  2137  325  2140  2141  289
-CONVEX 343    GT_PK(2,2)      290  2142  255  2140  2119  289
-CONVEX 344    GT_PK(2,2)      290  2142  255  2143  1627  256
-CONVEX 345    GT_PK(2,2)      290  2139  291  2143  2135  256
-CONVEX 346    GT_PK(2,2)      103  2144  131  2145  1643  104
-CONVEX 347    GT_PK(2,2)      103  2146  77  2147  2106  102
-CONVEX 348    GT_PK(2,2)      103  2148  54  2146  2149  77
-CONVEX 349    GT_PK(2,2)      130  2150  129  2151  2108  102
-CONVEX 350    GT_PK(2,2)      130  2152  131  2153  1642  160
-CONVEX 351    GT_PK(2,2)      130  2154  103  2151  2147  102
-CONVEX 352    GT_PK(2,2)      130  2154  103  2152  2144  131
-CONVEX 353    GT_PK(2,2)      159  2155  190  2156  1654  191
-CONVEX 354    GT_PK(2,2)      159  2157  130  2158  2150  129
-CONVEX 355    GT_PK(2,2)      159  2155  190  2159  1623  158
-CONVEX 356    GT_PK(2,2)      159  2158  129  2159  1648  158
-CONVEX 357    GT_PK(2,2)      159  2160  160  2156  1476  191
-CONVEX 358    GT_PK(2,2)      159  2157  130  2160  2153  160
-CONVEX 359    GT_PK(2,2)      214  2161  183  2162  2163  182
-CONVEX 360    GT_PK(2,2)      214  2164  246  2165  1666  247
-CONVEX 361    GT_PK(2,2)      184  2166  183  2167  2168  154
-CONVEX 362    GT_PK(2,2)      184  2169  216  2170  1483  185
-CONVEX 363    GT_PK(2,2)      184  2171  155  2167  1657  154
-CONVEX 364    GT_PK(2,2)      184  2170  185  2171  2172  155
-CONVEX 365    GT_PK(2,2)      153  2173  183  2174  2163  182
-CONVEX 366    GT_PK(2,2)      153  2174  182  2175  1664  152
-CONVEX 367    GT_PK(2,2)      153  2176  126  2177  1659  154
-CONVEX 368    GT_PK(2,2)      153  2173  183  2177  2168  154
-CONVEX 369    GT_PK(2,2)      153  2178  125  2175  1671  152
-CONVEX 370    GT_PK(2,2)      153  2178  125  2176  1678  126
-CONVEX 371    GT_PK(2,2)      151  2179  181  2180  1663  152
-CONVEX 372    GT_PK(2,2)      151  2181  124  2180  1672  152
-CONVEX 373    GT_PK(2,2)      73  2182  52  2183  2184  33
-CONVEX 374    GT_PK(2,2)      250  2185  217  2186  1684  218
-CONVEX 375    GT_PK(2,2)      250  2187  284  2188  1851  251
-CONVEX 376    GT_PK(2,2)      250  2186  218  2188  2189  251
-CONVEX 377    GT_PK(2,2)      250  2185  217  2190  1688  249
-CONVEX 378    GT_PK(2,2)      215  2191  248  2192  1690  216
-CONVEX 379    GT_PK(2,2)      215  2193  184  2192  2169  216
-CONVEX 380    GT_PK(2,2)      215  2193  184  2194  2166  183
-CONVEX 381    GT_PK(2,2)      215  2195  214  2194  2161  183
-CONVEX 382    GT_PK(2,2)      215  2191  248  2196  1693  247
-CONVEX 383    GT_PK(2,2)      215  2195  214  2196  2165  247
-CONVEX 384    GT_PK(2,2)      279  2197  314  2198  1700  280
-CONVEX 385    GT_PK(2,2)      279  2199  246  2200  2201  245
-CONVEX 386    GT_PK(2,2)      279  2199  246  2198  1665  280
-CONVEX 387    GT_PK(2,2)      279  2202  278  2200  2203  245
-CONVEX 388    GT_PK(2,2)      279  2202  278  2204  2205  313
-CONVEX 389    GT_PK(2,2)      279  2197  314  2204  2206  313
-CONVEX 390    GT_PK(2,2)      11  2207  25  2208  1451  0
-CONVEX 391    GT_PK(2,2)      57  2209  35  2210  1705  56
-CONVEX 392    GT_PK(2,2)      57  2210  56  2211  1710  80
-CONVEX 393    GT_PK(2,2)      57  2212  17  2213  1455  36
-CONVEX 394    GT_PK(2,2)      57  2209  35  2212  2214  17
-CONVEX 395    GT_PK(2,2)      105  2215  79  2216  1709  80
-CONVEX 396    GT_PK(2,2)      105  2215  79  2217  2218  104
-CONVEX 397    GT_PK(2,2)      105  2219  106  2216  2220  80
-CONVEX 398    GT_PK(2,2)      105  2217  104  2221  1645  132
-CONVEX 399    GT_PK(2,2)      78  2222  79  2223  2218  104
-CONVEX 400    GT_PK(2,2)      78  2224  103  2223  2145  104
-CONVEX 401    GT_PK(2,2)      78  2224  103  2225  2148  54
-CONVEX 402    GT_PK(2,2)      78  2225  54  2226  2227  55
-CONVEX 403    GT_PK(2,2)      78  2222  79  2226  1712  55
-CONVEX 404    GT_PK(2,2)      162  2228  161  2229  1646  132
-CONVEX 405    GT_PK(2,2)      302  2230  268  2231  2232  303
-CONVEX 406    GT_PK(2,2)      37  2233  18  2234  1454  36
-CONVEX 407    GT_PK(2,2)      37  2235  19  2233  2236  18
-CONVEX 408    GT_PK(2,2)      201  2237  202  2238  2239  234
-CONVEX 409    GT_PK(2,2)      201  2240  233  2238  2241  234
-CONVEX 410    GT_PK(2,2)      87  2242  64  2243  1492  88
-CONVEX 411    GT_PK(2,2)      139  2244  168  2245  2246  169
-CONVEX 412    GT_PK(2,2)      9  2247  8  2248  1725  23
-CONVEX 413    GT_PK(2,2)      24  2249  43  2250  1714  25
-CONVEX 414    GT_PK(2,2)      24  2250  25  2251  1450  10
-CONVEX 415    GT_PK(2,2)      24  2252  9  2251  2253  10
-CONVEX 416    GT_PK(2,2)      24  2252  9  2254  2248  23
-CONVEX 417    GT_PK(2,2)      42  2255  23  2256  1727  41
-CONVEX 418    GT_PK(2,2)      42  2257  43  2258  1719  64
-CONVEX 419    GT_PK(2,2)      42  2259  24  2255  2254  23
-CONVEX 420    GT_PK(2,2)      42  2259  24  2257  2249  43
-CONVEX 421    GT_PK(2,2)      39  2260  21  2261  1498  20
-CONVEX 422    GT_PK(2,2)      1441  2262  1427  2263  1729  1442
-CONVEX 423    GT_PK(2,2)      1441  2264  1426  2265  1457  4
-CONVEX 424    GT_PK(2,2)      1441  2262  1427  2264  1731  1426
-CONVEX 425    GT_PK(2,2)      1387  2266  1408  2267  1734  1409
-CONVEX 426    GT_PK(2,2)      1387  2268  1386  2266  1737  1408
-CONVEX 427    GT_PK(2,2)      1337  2269  1309  2270  2271  1336
-CONVEX 428    GT_PK(2,2)      1337  2269  1309  2272  2273  1310
-CONVEX 429    GT_PK(2,2)      1362  2274  1361  2275  1939  1385
-CONVEX 430    GT_PK(2,2)      1362  2276  1386  2275  1735  1385
-CONVEX 431    GT_PK(2,2)      1362  2274  1361  2277  2278  1336
-CONVEX 432    GT_PK(2,2)      1362  2279  1337  2277  2270  1336
-CONVEX 433    GT_PK(2,2)      1076  2280  1075  2281  2282  1112
-CONVEX 434    GT_PK(2,2)      1000  2283  1001  2284  2285  1039
-CONVEX 435    GT_PK(2,2)      1040  2286  1001  2287  2285  1039
-CONVEX 436    GT_PK(2,2)      1040  2288  1078  2289  2290  1041
-CONVEX 437    GT_PK(2,2)      927  2291  966  2292  2293  928
-CONVEX 438    GT_PK(2,2)      927  2294  888  2292  2295  928
-CONVEX 439    GT_PK(2,2)      927  2296  887  2294  2297  888
-CONVEX 440    GT_PK(2,2)      925  2298  924  2299  2300  885
-CONVEX 441    GT_PK(2,2)      1415  2301  1433  2302  2303  1434
-CONVEX 442    GT_PK(2,2)      1415  2304  1414  2301  2305  1433
-CONVEX 443    GT_PK(2,2)      1432  2306  1414  2307  2305  1433
-CONVEX 444    GT_PK(2,2)      1222  2308  1188  2309  2310  1189
-CONVEX 445    GT_PK(2,2)      1222  2308  1188  2311  1757  1221
-CONVEX 446    GT_PK(2,2)      1348  2312  1373  2313  1508  1397
-CONVEX 447    GT_PK(2,2)      1347  2314  1348  2315  2312  1373
-CONVEX 448    GT_PK(2,2)      1347  2314  1348  2316  2317  1320
-CONVEX 449    GT_PK(2,2)      1416  2318  1395  2319  2320  1417
-CONVEX 450    GT_PK(2,2)      1371  2321  1345  2322  2323  1346
-CONVEX 451    GT_PK(2,2)      1371  2321  1345  2324  2325  1370
-CONVEX 452    GT_PK(2,2)      1372  2326  1347  2327  2328  1346
-CONVEX 453    GT_PK(2,2)      1372  2326  1347  2329  2315  1373
-CONVEX 454    GT_PK(2,2)      1372  2330  1371  2327  2322  1346
-CONVEX 455    GT_PK(2,2)      1372  2330  1371  2331  2332  1395
-CONVEX 456    GT_PK(2,2)      1372  2329  1373  2333  1507  1396
-CONVEX 457    GT_PK(2,2)      1372  2333  1396  2334  2335  1417
-CONVEX 458    GT_PK(2,2)      1372  2331  1395  2334  2320  1417
-CONVEX 459    GT_PK(2,2)      1344  2336  1369  2337  2338  1370
-CONVEX 460    GT_PK(2,2)      1344  2339  1345  2337  2325  1370
-CONVEX 461    GT_PK(2,2)      1344  2340  1343  2341  2342  1316
-CONVEX 462    GT_PK(2,2)      1344  2340  1343  2336  2343  1369
-CONVEX 463    GT_PK(2,2)      1317  2344  1344  2345  2341  1316
-CONVEX 464    GT_PK(2,2)      1317  2344  1344  2346  2339  1345
-CONVEX 465    GT_PK(2,2)      1444  2347  1429  2348  1744  1443
-CONVEX 466    GT_PK(2,2)      1444  2349  1430  2350  1516  1445
-CONVEX 467    GT_PK(2,2)      1444  2347  1429  2349  2351  1430
-CONVEX 468    GT_PK(2,2)      1410  2352  1428  2353  1733  1409
-CONVEX 469    GT_PK(2,2)      1410  2354  1429  2352  1743  1428
-CONVEX 470    GT_PK(2,2)      1368  2355  1369  2356  2357  1392
-CONVEX 471    GT_PK(2,2)      1368  2358  1391  2356  2359  1392
-CONVEX 472    GT_PK(2,2)      1368  2360  1343  2355  2343  1369
-CONVEX 473    GT_PK(2,2)      1413  2361  1432  2362  2306  1414
-CONVEX 474    GT_PK(2,2)      1413  2363  1431  2364  1511  1412
-CONVEX 475    GT_PK(2,2)      1413  2365  1391  2364  1746  1412
-CONVEX 476    GT_PK(2,2)      1413  2362  1414  2366  2367  1392
-CONVEX 477    GT_PK(2,2)      1413  2365  1391  2366  2359  1392
-CONVEX 478    GT_PK(2,2)      1413  2363  1431  2368  1514  1446
-CONVEX 479    GT_PK(2,2)      1413  2361  1432  2368  2369  1446
-CONVEX 480    GT_PK(2,2)      1113  2370  1112  2371  2372  1148
-CONVEX 481    GT_PK(2,2)      1113  2373  1149  2371  1752  1148
-CONVEX 482    GT_PK(2,2)      1113  2374  1076  2370  2281  1112
-CONVEX 483    GT_PK(2,2)      1150  2375  1185  2376  1519  1184
-CONVEX 484    GT_PK(2,2)      1150  2377  1149  2376  1754  1184
-CONVEX 485    GT_PK(2,2)      1079  2378  1078  2379  2380  1115
-CONVEX 486    GT_PK(2,2)      1079  2381  1116  2379  2382  1115
-CONVEX 487    GT_PK(2,2)      1079  2381  1116  2383  2384  1080
-CONVEX 488    GT_PK(2,2)      1079  2378  1078  2385  2290  1041
-CONVEX 489    GT_PK(2,2)      1280  2386  1248  2387  1748  1279
-CONVEX 490    GT_PK(2,2)      1280  2388  1309  2387  2389  1279
-CONVEX 491    GT_PK(2,2)      1280  2388  1309  2390  2273  1310
-CONVEX 492    GT_PK(2,2)      1217  2391  1183  2392  2393  1216
-CONVEX 493    GT_PK(2,2)      1217  2394  1218  2395  2396  1250
-CONVEX 494    GT_PK(2,2)      1217  2394  1218  2397  1518  1184
-CONVEX 495    GT_PK(2,2)      1217  2391  1183  2397  1753  1184
-CONVEX 496    GT_PK(2,2)      1253  2398  1284  2399  2400  1285
-CONVEX 497    GT_PK(2,2)      1253  2401  1252  2398  2402  1284
-CONVEX 498    GT_PK(2,2)      1311  2403  1312  2404  2405  1339
-CONVEX 499    GT_PK(2,2)      1311  2406  1282  2403  2407  1312
-CONVEX 500    GT_PK(2,2)      1153  2408  1187  2409  2410  1152
-CONVEX 501    GT_PK(2,2)      1153  2408  1187  2411  1755  1188
-CONVEX 502    GT_PK(2,2)      1154  2412  1188  2413  2310  1189
-CONVEX 503    GT_PK(2,2)      1154  2414  1153  2412  2411  1188
-CONVEX 504    GT_PK(2,2)      1220  2415  1187  2416  1756  1221
-CONVEX 505    GT_PK(2,2)      1220  2417  1253  2416  2418  1221
-CONVEX 506    GT_PK(2,2)      1220  2419  1252  2420  2421  1219
-CONVEX 507    GT_PK(2,2)      1220  2417  1253  2419  2401  1252
-CONVEX 508    GT_PK(2,2)      665  2422  704  2423  1774  705
-CONVEX 509    GT_PK(2,2)      547  2424  508  2425  1765  546
-CONVEX 510    GT_PK(2,2)      586  2426  587  2427  2428  625
-CONVEX 511    GT_PK(2,2)      586  2429  585  2427  2430  625
-CONVEX 512    GT_PK(2,2)      586  2429  585  2431  1778  546
-CONVEX 513    GT_PK(2,2)      586  2432  547  2431  2425  546
-CONVEX 514    GT_PK(2,2)      586  2432  547  2426  2433  587
-CONVEX 515    GT_PK(2,2)      624  2434  585  2435  2430  625
-CONVEX 516    GT_PK(2,2)      899  2436  898  2437  1780  938
-CONVEX 517    GT_PK(2,2)      899  2438  939  2437  2439  938
-CONVEX 518    GT_PK(2,2)      899  2438  939  2440  1814  900
-CONVEX 519    GT_PK(2,2)      739  2441  779  2442  1804  778
-CONVEX 520    GT_PK(2,2)      739  2443  738  2442  2444  778
-CONVEX 521    GT_PK(2,2)      819  2445  818  2446  2447  858
-CONVEX 522    GT_PK(2,2)      819  2445  818  2448  1802  779
-CONVEX 523    GT_PK(2,2)      623  2449  624  2450  2451  663
-CONVEX 524    GT_PK(2,2)      742  2452  743  2453  1531  781
-CONVEX 525    GT_PK(2,2)      742  2454  741  2453  2455  781
-CONVEX 526    GT_PK(2,2)      780  2456  820  2457  1807  781
-CONVEX 527    GT_PK(2,2)      780  2458  741  2457  2455  781
-CONVEX 528    GT_PK(2,2)      780  2459  819  2456  2460  820
-CONVEX 529    GT_PK(2,2)      780  2459  819  2461  2448  779
-CONVEX 530    GT_PK(2,2)      662  2462  623  2463  2450  663
-CONVEX 531    GT_PK(2,2)      979  2464  1017  2465  2466  978
-CONVEX 532    GT_PK(2,2)      979  2467  940  2465  1811  978
-CONVEX 533    GT_PK(2,2)      979  2467  940  2468  2469  941
-CONVEX 534    GT_PK(2,2)      1056  2470  1057  2471  2472  1094
-CONVEX 535    GT_PK(2,2)      1055  2473  1056  2474  2475  1017
-CONVEX 536    GT_PK(2,2)      1295  2476  1294  2477  2478  1262
-CONVEX 537    GT_PK(2,2)      1295  2479  1263  2477  1790  1262
-CONVEX 538    GT_PK(2,2)      1295  2479  1263  2480  1794  1264
-CONVEX 539    GT_PK(2,2)      817  2481  818  2482  1803  778
-CONVEX 540    GT_PK(2,2)      860  2483  821  2484  1805  820
-CONVEX 541    GT_PK(2,2)      860  2485  899  2486  2440  900
-CONVEX 542    GT_PK(2,2)      977  2487  939  2488  1812  978
-CONVEX 543    GT_PK(2,2)      977  2487  939  2489  2439  938
-CONVEX 544    GT_PK(2,2)      977  2490  976  2489  1821  938
-CONVEX 545    GT_PK(2,2)      977  2490  976  2491  2492  1015
-CONVEX 546    GT_PK(2,2)      980  2493  942  2494  1819  941
-CONVEX 547    GT_PK(2,2)      980  2495  979  2496  2497  1019
-CONVEX 548    GT_PK(2,2)      980  2495  979  2494  2468  941
-CONVEX 549    GT_PK(2,2)      861  2498  821  2499  1809  822
-CONVEX 550    GT_PK(2,2)      861  2500  860  2501  2486  900
-CONVEX 551    GT_PK(2,2)      861  2500  860  2498  2483  821
-CONVEX 552    GT_PK(2,2)      901  2502  940  2503  2469  941
-CONVEX 553    GT_PK(2,2)      901  2504  902  2503  1818  941
-CONVEX 554    GT_PK(2,2)      901  2502  940  2505  1813  900
-CONVEX 555    GT_PK(2,2)      901  2506  861  2505  2501  900
-CONVEX 556    GT_PK(2,2)      427  2507  428  2508  1838  390
-CONVEX 557    GT_PK(2,2)      356  2509  392  2510  1842  355
-CONVEX 558    GT_PK(2,2)      356  2511  393  2509  1833  392
-CONVEX 559    GT_PK(2,2)      356  2512  320  2510  1560  355
-CONVEX 560    GT_PK(2,2)      353  2513  318  2514  2515  317
-CONVEX 561    GT_PK(2,2)      353  2516  352  2514  1824  317
-CONVEX 562    GT_PK(2,2)      353  2517  354  2518  1840  390
-CONVEX 563    GT_PK(2,2)      353  2513  318  2517  1846  354
-CONVEX 564    GT_PK(2,2)      838  2519  839  2520  2521  878
-CONVEX 565    GT_PK(2,2)      517  2522  556  2523  2524  557
-CONVEX 566    GT_PK(2,2)      516  2525  478  2526  1608  477
-CONVEX 567    GT_PK(2,2)      516  2527  517  2525  2528  478
-CONVEX 568    GT_PK(2,2)      516  2527  517  2529  2522  556
-CONVEX 569    GT_PK(2,2)      596  2530  556  2531  2524  557
-CONVEX 570    GT_PK(2,2)      596  2532  597  2531  2533  557
-CONVEX 571    GT_PK(2,2)      596  2532  597  2534  2535  636
-CONVEX 572    GT_PK(2,2)      714  2536  715  2537  2538  675
-CONVEX 573    GT_PK(2,2)      982  2539  983  2540  2541  1021
-CONVEX 574    GT_PK(2,2)      982  2542  1020  2540  1466  1021
-CONVEX 575    GT_PK(2,2)      982  2543  981  2542  2544  1020
-CONVEX 576    GT_PK(2,2)      787  2545  786  2546  2547  826
-CONVEX 577    GT_PK(2,2)      787  2545  786  2548  1858  747
-CONVEX 578    GT_PK(2,2)      1100  2549  1135  2550  2551  1136
-CONVEX 579    GT_PK(2,2)      1100  2549  1135  2552  1868  1099
-CONVEX 580    GT_PK(2,2)      1098  2553  1134  2554  1867  1099
-CONVEX 581    GT_PK(2,2)      1098  2555  1062  2554  2556  1099
-CONVEX 582    GT_PK(2,2)      1133  2557  1134  2558  2559  1168
-CONVEX 583    GT_PK(2,2)      1133  2560  1098  2557  2553  1134
-CONVEX 584    GT_PK(2,2)      1097  2561  1133  2562  2563  1132
-CONVEX 585    GT_PK(2,2)      1097  2561  1133  2564  2560  1098
-CONVEX 586    GT_PK(2,2)      1167  2565  1201  2566  1864  1200
-CONVEX 587    GT_PK(2,2)      1167  2567  1166  2566  2568  1200
-CONVEX 588    GT_PK(2,2)      1167  2569  1132  2567  1869  1166
-CONVEX 589    GT_PK(2,2)      1167  2570  1133  2569  2563  1132
-CONVEX 590    GT_PK(2,2)      1167  2565  1201  2571  2572  1168
-CONVEX 591    GT_PK(2,2)      1167  2570  1133  2571  2558  1168
-CONVEX 592    GT_PK(2,2)      1096  2573  1095  2574  1872  1059
-CONVEX 593    GT_PK(2,2)      1096  2575  1097  2576  2562  1132
-CONVEX 594    GT_PK(2,2)      1096  2576  1132  2577  1870  1131
-CONVEX 595    GT_PK(2,2)      1096  2573  1095  2577  2578  1131
-CONVEX 596    GT_PK(2,2)      1096  2574  1059  2579  2580  1060
-CONVEX 597    GT_PK(2,2)      1096  2575  1097  2579  2581  1060
-CONVEX 598    GT_PK(2,2)      1065  2582  1027  2583  2584  1064
-CONVEX 599    GT_PK(2,2)      1065  2582  1027  2585  2586  1028
-CONVEX 600    GT_PK(2,2)      751  2587  711  2588  2589  712
-CONVEX 601    GT_PK(2,2)      1063  2590  1062  2591  2556  1099
-CONVEX 602    GT_PK(2,2)      1063  2592  1100  2591  2552  1099
-CONVEX 603    GT_PK(2,2)      1063  2592  1100  2593  2594  1064
-CONVEX 604    GT_PK(2,2)      1022  2595  1023  2596  2597  1060
-CONVEX 605    GT_PK(2,2)      1022  2598  1059  2599  1564  1021
-CONVEX 606    GT_PK(2,2)      1022  2598  1059  2596  2580  1060
-CONVEX 607    GT_PK(2,2)      1022  2600  983  2599  2541  1021
-CONVEX 608    GT_PK(2,2)      985  2601  1023  2602  2603  1024
-CONVEX 609    GT_PK(2,2)      949  2604  950  2605  2606  988
-CONVEX 610    GT_PK(2,2)      949  2604  950  2607  2608  911
-CONVEX 611    GT_PK(2,2)      949  2607  911  2609  2610  910
-CONVEX 612    GT_PK(2,2)      949  2611  948  2609  1875  910
-CONVEX 613    GT_PK(2,2)      1030  2612  1029  2613  2614  1067
-CONVEX 614    GT_PK(2,2)      989  2615  950  2616  2606  988
-CONVEX 615    GT_PK(2,2)      989  2617  1027  2616  2618  988
-CONVEX 616    GT_PK(2,2)      989  2617  1027  2619  2586  1028
-CONVEX 617    GT_PK(2,2)      912  2620  872  2621  2622  873
-CONVEX 618    GT_PK(2,2)      912  2623  950  2624  2608  911
-CONVEX 619    GT_PK(2,2)      912  2620  872  2624  2625  911
-CONVEX 620    GT_PK(2,2)      1206  2626  1207  2627  2628  1173
-CONVEX 621    GT_PK(2,2)      758  2629  797  2630  1892  757
-CONVEX 622    GT_PK(2,2)      758  2631  718  2630  1911  757
-CONVEX 623    GT_PK(2,2)      758  2631  718  2632  1908  719
-CONVEX 624    GT_PK(2,2)      758  2633  759  2632  1903  719
-CONVEX 625    GT_PK(2,2)      758  2629  797  2634  2635  798
-CONVEX 626    GT_PK(2,2)      758  2633  759  2634  2636  798
-CONVEX 627    GT_PK(2,2)      875  2637  835  2638  1896  836
-CONVEX 628    GT_PK(2,2)      875  2639  914  2640  2641  915
-CONVEX 629    GT_PK(2,2)      875  2637  835  2642  2643  874
-CONVEX 630    GT_PK(2,2)      875  2639  914  2642  2644  874
-CONVEX 631    GT_PK(2,2)      754  2645  714  2646  2536  715
-CONVEX 632    GT_PK(2,2)      794  2647  754  2648  2649  793
-CONVEX 633    GT_PK(2,2)      638  2650  599  2651  1898  598
-CONVEX 634    GT_PK(2,2)      638  2652  677  2653  1885  678
-CONVEX 635    GT_PK(2,2)      639  2654  678  2655  1907  679
-CONVEX 636    GT_PK(2,2)      639  2656  640  2655  1926  679
-CONVEX 637    GT_PK(2,2)      639  2657  638  2654  2653  678
-CONVEX 638    GT_PK(2,2)      639  2657  638  2658  2650  599
-CONVEX 639    GT_PK(2,2)      560  2659  559  2660  2661  520
-CONVEX 640    GT_PK(2,2)      560  2662  599  2659  1897  559
-CONVEX 641    GT_PK(2,2)      560  2663  521  2660  2664  520
-CONVEX 642    GT_PK(2,2)      560  2663  521  2665  2060  561
-CONVEX 643    GT_PK(2,2)      762  2666  761  2667  2668  801
-CONVEX 644    GT_PK(2,2)      722  2669  721  2670  1916  682
-CONVEX 645    GT_PK(2,2)      722  2669  721  2671  1918  761
-CONVEX 646    GT_PK(2,2)      722  2672  683  2670  2673  682
-CONVEX 647    GT_PK(2,2)      722  2674  762  2671  2666  761
-CONVEX 648    GT_PK(2,2)      1404  2675  1405  2676  1942  1383
-CONVEX 649    GT_PK(2,2)      1423  2677  1424  2678  1579  1405
-CONVEX 650    GT_PK(2,2)      1423  2679  1404  2678  2675  1405
-CONVEX 651    GT_PK(2,2)      1423  2679  1404  2680  2681  1422
-CONVEX 652    GT_PK(2,2)      1360  2682  1384  2683  1941  1383
-CONVEX 653    GT_PK(2,2)      1360  2682  1384  2684  1937  1361
-CONVEX 654    GT_PK(2,2)      1335  2685  1360  2686  2687  1334
-CONVEX 655    GT_PK(2,2)      1335  2688  1361  2689  2278  1336
-CONVEX 656    GT_PK(2,2)      1335  2685  1360  2688  2684  1361
-CONVEX 657    GT_PK(2,2)      1212  2690  1178  2691  2692  1211
-CONVEX 658    GT_PK(2,2)      1212  2693  1244  2691  2694  1211
-CONVEX 659    GT_PK(2,2)      1179  2695  1212  2696  2697  1213
-CONVEX 660    GT_PK(2,2)      1179  2695  1212  2698  2690  1178
-CONVEX 661    GT_PK(2,2)      1245  2699  1212  2700  2697  1213
-CONVEX 662    GT_PK(2,2)      1245  2699  1212  2701  2693  1244
-CONVEX 663    GT_PK(2,2)      1182  2702  1183  2703  2393  1216
-CONVEX 664    GT_PK(2,2)      1182  2702  1183  2704  1751  1148
-CONVEX 665    GT_PK(2,2)      1147  2705  1112  2706  2372  1148
-CONVEX 666    GT_PK(2,2)      1147  2707  1182  2706  2704  1148
-CONVEX 667    GT_PK(2,2)      1147  2707  1182  2708  2709  1181
-CONVEX 668    GT_PK(2,2)      1308  2710  1278  2711  1580  1279
-CONVEX 669    GT_PK(2,2)      1308  2712  1309  2711  2389  1279
-CONVEX 670    GT_PK(2,2)      1308  2712  1309  2713  2271  1336
-CONVEX 671    GT_PK(2,2)      1308  2714  1335  2713  2689  1336
-CONVEX 672    GT_PK(2,2)      1268  2715  1298  2716  2717  1297
-CONVEX 673    GT_PK(2,2)      1268  2718  1236  2719  2720  1237
-CONVEX 674    GT_PK(2,2)      1268  2721  1269  2719  2722  1237
-CONVEX 675    GT_PK(2,2)      1268  2721  1269  2715  2723  1298
-CONVEX 676    GT_PK(2,2)      1299  2724  1269  2725  2726  1270
-CONVEX 677    GT_PK(2,2)      1299  2724  1269  2727  2723  1298
-CONVEX 678    GT_PK(2,2)      1137  2728  1171  2729  2730  1136
-CONVEX 679    GT_PK(2,2)      1137  2731  1138  2732  1879  1102
-CONVEX 680    GT_PK(2,2)      1169  2733  1134  2734  2559  1168
-CONVEX 681    GT_PK(2,2)      1169  2733  1134  2735  1866  1135
-CONVEX 682    GT_PK(2,2)      1267  2736  1268  2737  2716  1297
-CONVEX 683    GT_PK(2,2)      1267  2736  1268  2738  2718  1236
-CONVEX 684    GT_PK(2,2)      1204  2739  1236  2740  2720  1237
-CONVEX 685    GT_PK(2,2)      1240  2741  1207  2742  2743  1208
-CONVEX 686    GT_PK(2,2)      1271  2744  1240  2745  2746  1272
-CONVEX 687    GT_PK(2,2)      1243  2747  1244  2748  2694  1211
-CONVEX 688    GT_PK(2,2)      972  2749  971  2750  1952  933
-CONVEX 689    GT_PK(2,2)      1083  2751  1046  2752  2753  1045
-CONVEX 690    GT_PK(2,2)      1002  2754  1003  2755  2756  964
-CONVEX 691    GT_PK(2,2)      1002  2757  1040  2758  2286  1001
-CONVEX 692    GT_PK(2,2)      1002  2754  1003  2759  2760  1041
-CONVEX 693    GT_PK(2,2)      1002  2757  1040  2759  2289  1041
-CONVEX 694    GT_PK(2,2)      1081  2761  1043  2762  2763  1080
-CONVEX 695    GT_PK(2,2)      929  2764  930  2765  1958  968
-CONVEX 696    GT_PK(2,2)      1008  2766  969  2767  1953  970
-CONVEX 697    GT_PK(2,2)      1008  2767  970  2768  1946  1009
-CONVEX 698    GT_PK(2,2)      1157  2769  1192  2770  1742  1158
-CONVEX 699    GT_PK(2,2)      1010  2771  1049  2772  2773  1011
-CONVEX 700    GT_PK(2,2)      1010  2774  972  2772  2775  1011
-CONVEX 701    GT_PK(2,2)      1010  2776  971  2777  1945  1009
-CONVEX 702    GT_PK(2,2)      1010  2774  972  2776  2749  971
-CONVEX 703    GT_PK(2,2)      974  2778  936  2779  1551  975
-CONVEX 704    GT_PK(2,2)      974  2780  1013  2779  2781  975
-CONVEX 705    GT_PK(2,2)      1014  2782  1013  2783  2784  1052
-CONVEX 706    GT_PK(2,2)      1014  2782  1013  2785  2781  975
-CONVEX 707    GT_PK(2,2)      1014  2786  976  2785  1822  975
-CONVEX 708    GT_PK(2,2)      1014  2786  976  2787  2492  1015
-CONVEX 709    GT_PK(2,2)      1051  2788  1013  2789  2784  1052
-CONVEX 710    GT_PK(2,2)      1124  2790  1123  2791  2792  1087
-CONVEX 711    GT_PK(2,2)      1163  2793  1164  2794  1538  1198
-CONVEX 712    GT_PK(2,2)      1163  2795  1197  2794  1965  1198
-CONVEX 713    GT_PK(2,2)      725  2796  685  2797  2798  724
-CONVEX 714    GT_PK(2,2)      725  2799  764  2797  2800  724
-CONVEX 715    GT_PK(2,2)      684  2801  685  2802  2803  645
-CONVEX 716    GT_PK(2,2)      684  2801  685  2804  2798  724
-CONVEX 717    GT_PK(2,2)      570  2805  571  2806  2807  610
-CONVEX 718    GT_PK(2,2)      570  2808  609  2806  1966  610
-CONVEX 719    GT_PK(2,2)      570  2809  531  2810  2811  530
-CONVEX 720    GT_PK(2,2)      570  2809  531  2805  2812  571
-CONVEX 721    GT_PK(2,2)      646  2813  685  2814  2803  645
-CONVEX 722    GT_PK(2,2)      646  2815  606  2814  2816  645
-CONVEX 723    GT_PK(2,2)      30  2817  29  2818  1975  15
-CONVEX 724    GT_PK(2,2)      30  2817  29  2819  2820  48
-CONVEX 725    GT_PK(2,2)      28  2821  29  2822  1974  14
-CONVEX 726    GT_PK(2,2)      28  2822  14  2823  2824  13
-CONVEX 727    GT_PK(2,2)      28  2825  27  2823  1704  13
-CONVEX 728    GT_PK(2,2)      89  2826  66  2827  2828  90
-CONVEX 729    GT_PK(2,2)      89  2829  114  2830  2831  88
-CONVEX 730    GT_PK(2,2)      89  2832  65  2830  1493  88
-CONVEX 731    GT_PK(2,2)      89  2826  66  2832  1980  65
-CONVEX 732    GT_PK(2,2)      528  2833  529  2834  2835  490
-CONVEX 733    GT_PK(2,2)      489  2836  451  2837  2838  490
-CONVEX 734    GT_PK(2,2)      489  2839  528  2840  2841  527
-CONVEX 735    GT_PK(2,2)      489  2839  528  2837  2834  490
-CONVEX 736    GT_PK(2,2)      452  2842  451  2843  2844  413
-CONVEX 737    GT_PK(2,2)      452  2842  451  2845  2838  490
-CONVEX 738    GT_PK(2,2)      414  2846  452  2847  2843  413
-CONVEX 739    GT_PK(2,2)      414  2846  452  2848  2849  453
-CONVEX 740    GT_PK(2,2)      491  2850  529  2851  2852  530
-CONVEX 741    GT_PK(2,2)      491  2850  529  2853  2835  490
-CONVEX 742    GT_PK(2,2)      491  2854  452  2853  2845  490
-CONVEX 743    GT_PK(2,2)      491  2854  452  2855  2849  453
-CONVEX 744    GT_PK(2,2)      385  2856  423  2857  2858  422
-CONVEX 745    GT_PK(2,2)      311  2859  310  2860  1995  346
-CONVEX 746    GT_PK(2,2)      311  2859  310  2861  1997  276
-CONVEX 747    GT_PK(2,2)      382  2862  345  2863  1996  346
-CONVEX 748    GT_PK(2,2)      382  2864  383  2863  2865  346
-CONVEX 749    GT_PK(2,2)      382  2866  381  2862  2867  345
-CONVEX 750    GT_PK(2,2)      382  2868  420  2864  2869  383
-CONVEX 751    GT_PK(2,2)      382  2866  381  2870  2871  419
-CONVEX 752    GT_PK(2,2)      382  2868  420  2870  2872  419
-CONVEX 753    GT_PK(2,2)      347  2873  383  2874  2865  346
-CONVEX 754    GT_PK(2,2)      347  2875  311  2874  2860  346
-CONVEX 755    GT_PK(2,2)      494  2876  455  2877  2002  456
-CONVEX 756    GT_PK(2,2)      494  2878  495  2877  2879  456
-CONVEX 757    GT_PK(2,2)      494  2876  455  2880  1989  493
-CONVEX 758    GT_PK(2,2)      494  2878  495  2881  2882  533
-CONVEX 759    GT_PK(2,2)      497  2883  459  2884  1983  498
-CONVEX 760    GT_PK(2,2)      457  2885  495  2886  2879  456
-CONVEX 761    GT_PK(2,2)      235  2887  268  2888  2889  234
-CONVEX 762    GT_PK(2,2)      235  2890  202  2888  2239  234
-CONVEX 763    GT_PK(2,2)      235  2891  203  2890  2892  202
-CONVEX 764    GT_PK(2,2)      309  2893  310  2894  1994  345
-CONVEX 765    GT_PK(2,2)      309  2895  274  2896  2897  308
-CONVEX 766    GT_PK(2,2)      309  2895  274  2898  1973  275
-CONVEX 767    GT_PK(2,2)      309  2893  310  2898  1998  275
-CONVEX 768    GT_PK(2,2)      344  2899  343  2900  2008  308
-CONVEX 769    GT_PK(2,2)      344  2901  309  2900  2896  308
-CONVEX 770    GT_PK(2,2)      344  2901  309  2902  2894  345
-CONVEX 771    GT_PK(2,2)      344  2903  381  2902  2867  345
-CONVEX 772    GT_PK(2,2)      344  2903  381  2904  2905  380
-CONVEX 773    GT_PK(2,2)      344  2899  343  2904  2013  380
-CONVEX 774    GT_PK(2,2)      376  2906  414  2907  2847  413
-CONVEX 775    GT_PK(2,2)      376  2906  414  2908  2909  377
-CONVEX 776    GT_PK(2,2)      378  2910  341  2911  2912  377
-CONVEX 777    GT_PK(2,2)      378  2913  379  2914  2004  416
-CONVEX 778    GT_PK(2,2)      378  2913  379  2915  2012  342
-CONVEX 779    GT_PK(2,2)      378  2910  341  2915  2018  342
-CONVEX 780    GT_PK(2,2)      305  2916  341  2917  2017  306
-CONVEX 781    GT_PK(2,2)      340  2918  341  2919  2912  377
-CONVEX 782    GT_PK(2,2)      340  2920  376  2919  2908  377
-CONVEX 783    GT_PK(2,2)      340  2920  376  2921  2922  339
-CONVEX 784    GT_PK(2,2)      340  2923  305  2918  2916  341
-CONVEX 785    GT_PK(2,2)      340  2921  339  2924  2014  304
-CONVEX 786    GT_PK(2,2)      340  2923  305  2924  2925  304
-CONVEX 787    GT_PK(2,2)      765  2926  805  2927  1592  766
-CONVEX 788    GT_PK(2,2)      765  2928  725  2929  2930  1
-CONVEX 789    GT_PK(2,2)      765  2928  725  2931  2799  764
-CONVEX 790    GT_PK(2,2)      765  2932  726  2929  2933  1
-CONVEX 791    GT_PK(2,2)      765  2932  726  2927  2020  766
-CONVEX 792    GT_PK(2,2)      844  2934  805  2935  1593  845
-CONVEX 793    GT_PK(2,2)      802  2936  762  2937  2667  801
-CONVEX 794    GT_PK(2,2)      648  2938  609  2939  1967  649
-CONVEX 795    GT_PK(2,2)      648  2940  688  2939  2941  649
-CONVEX 796    GT_PK(2,2)      648  2942  608  2943  2944  647
-CONVEX 797    GT_PK(2,2)      648  2942  608  2938  2945  609
-CONVEX 798    GT_PK(2,2)      687  2946  726  2947  2019  727
-CONVEX 799    GT_PK(2,2)      687  2948  688  2947  2021  727
-CONVEX 800    GT_PK(2,2)      687  2949  648  2948  2940  688
-CONVEX 801    GT_PK(2,2)      687  2949  648  2950  2943  647
-CONVEX 802    GT_PK(2,2)      613  2951  652  2952  2953  653
-CONVEX 803    GT_PK(2,2)      532  2954  531  2955  2812  571
-CONVEX 804    GT_PK(2,2)      532  2956  572  2957  2958  533
-CONVEX 805    GT_PK(2,2)      532  2956  572  2955  2959  571
-CONVEX 806    GT_PK(2,2)      532  2954  531  2960  2961  493
-CONVEX 807    GT_PK(2,2)      532  2962  494  2957  2881  533
-CONVEX 808    GT_PK(2,2)      532  2962  494  2960  2880  493
-CONVEX 809    GT_PK(2,2)      808  2963  769  2964  2965  768
-CONVEX 810    GT_PK(2,2)      808  2966  807  2964  1598  768
-CONVEX 811    GT_PK(2,2)      808  2966  807  2967  1600  847
-CONVEX 812    GT_PK(2,2)      729  2968  769  2969  2970  730
-CONVEX 813    GT_PK(2,2)      729  2971  690  2969  2972  730
-CONVEX 814    GT_PK(2,2)      729  2973  728  2974  1468  768
-CONVEX 815    GT_PK(2,2)      729  2968  769  2974  2965  768
-CONVEX 816    GT_PK(2,2)      689  2975  688  2976  2941  649
-CONVEX 817    GT_PK(2,2)      689  2975  688  2977  2022  728
-CONVEX 818    GT_PK(2,2)      689  2978  729  2977  2973  728
-CONVEX 819    GT_PK(2,2)      689  2978  729  2979  2971  690
-CONVEX 820    GT_PK(2,2)      691  2980  690  2981  2972  730
-CONVEX 821    GT_PK(2,2)      611  2982  571  2983  2807  610
-CONVEX 822    GT_PK(2,2)      611  2984  572  2982  2959  571
-CONVEX 823    GT_PK(2,2)      854  2985  894  2986  1961  855
-CONVEX 824    GT_PK(2,2)      891  2987  930  2988  1956  931
-CONVEX 825    GT_PK(2,2)      536  2989  497  2990  2884  498
-CONVEX 826    GT_PK(2,2)      614  2991  575  2992  2993  574
-CONVEX 827    GT_PK(2,2)      614  2994  613  2995  2952  653
-CONVEX 828    GT_PK(2,2)      614  2994  613  2992  2996  574
-CONVEX 829    GT_PK(2,2)      774  2997  813  2998  2999  773
-CONVEX 830    GT_PK(2,2)      627  3000  628  3001  2026  667
-CONVEX 831    GT_PK(2,2)      627  3000  628  3002  2030  588
-CONVEX 832    GT_PK(2,2)      549  3003  510  3004  3005  509
-CONVEX 833    GT_PK(2,2)      433  3006  395  3007  1470  394
-CONVEX 834    GT_PK(2,2)      404  3008  403  3009  1604  366
-CONVEX 835    GT_PK(2,2)      404  3010  367  3009  2047  366
-CONVEX 836    GT_PK(2,2)      404  3010  367  3011  3012  405
-CONVEX 837    GT_PK(2,2)      404  3013  443  3011  3014  405
-CONVEX 838    GT_PK(2,2)      642  3015  681  3016  1917  682
-CONVEX 839    GT_PK(2,2)      642  3015  681  3017  1924  641
-CONVEX 840    GT_PK(2,2)      644  3018  684  3019  2802  645
-CONVEX 841    GT_PK(2,2)      644  3018  684  3020  3021  683
-CONVEX 842    GT_PK(2,2)      484  3022  523  3023  2056  522
-CONVEX 843    GT_PK(2,2)      524  3024  523  3025  2057  563
-CONVEX 844    GT_PK(2,2)      482  3026  521  3027  2664  520
-CONVEX 845    GT_PK(2,2)      558  3028  597  3029  2533  557
-CONVEX 846    GT_PK(2,2)      558  3030  559  3031  1899  598
-CONVEX 847    GT_PK(2,2)      558  3028  597  3031  3032  598
-CONVEX 848    GT_PK(2,2)      436  3033  397  3034  2061  398
-CONVEX 849    GT_PK(2,2)      436  3035  437  3034  2064  398
-CONVEX 850    GT_PK(2,2)      440  3036  439  3037  1606  478
-CONVEX 851    GT_PK(2,2)      440  3036  439  3038  2095  401
-CONVEX 852    GT_PK(2,2)      440  3039  402  3038  2092  401
-CONVEX 853    GT_PK(2,2)      221  3040  254  3041  2117  255
-CONVEX 854    GT_PK(2,2)      221  3041  255  3042  1628  222
-CONVEX 855    GT_PK(2,2)      221  3043  188  3044  2114  220
-CONVEX 856    GT_PK(2,2)      221  3040  254  3044  2116  220
-CONVEX 857    GT_PK(2,2)      221  3045  189  3042  1620  222
-CONVEX 858    GT_PK(2,2)      221  3043  188  3045  2110  189
-CONVEX 859    GT_PK(2,2)      323  3046  359  3047  2086  322
-CONVEX 860    GT_PK(2,2)      323  3048  287  3047  2124  322
-CONVEX 861    GT_PK(2,2)      323  3046  359  3049  2079  360
-CONVEX 862    GT_PK(2,2)      213  3050  214  3051  2162  182
-CONVEX 863    GT_PK(2,2)      213  3050  214  3052  2164  246
-CONVEX 864    GT_PK(2,2)      213  3053  181  3051  1662  182
-CONVEX 865    GT_PK(2,2)      213  3054  212  3053  3055  181
-CONVEX 866    GT_PK(2,2)      213  3052  246  3056  2201  245
-CONVEX 867    GT_PK(2,2)      213  3054  212  3056  3057  245
-CONVEX 868    GT_PK(2,2)      180  3058  212  3059  3055  181
-CONVEX 869    GT_PK(2,2)      180  3060  151  3059  2179  181
-CONVEX 870    GT_PK(2,2)      180  3061  211  3058  3062  212
-CONVEX 871    GT_PK(2,2)      74  3063  52  3064  3065  53
-CONVEX 872    GT_PK(2,2)      74  3066  73  3063  2182  52
-CONVEX 873    GT_PK(2,2)      74  3064  53  3067  1681  98
-CONVEX 874    GT_PK(2,2)      283  3068  282  3069  1699  249
-CONVEX 875    GT_PK(2,2)      283  3070  250  3069  2190  249
-CONVEX 876    GT_PK(2,2)      283  3068  282  3071  1695  317
-CONVEX 877    GT_PK(2,2)      283  3072  318  3071  2515  317
-CONVEX 878    GT_PK(2,2)      283  3072  318  3073  1844  284
-CONVEX 879    GT_PK(2,2)      283  3070  250  3073  2187  284
-CONVEX 880    GT_PK(2,2)      26  3074  12  3075  1702  27
-CONVEX 881    GT_PK(2,2)      26  3076  11  3074  3077  12
-CONVEX 882    GT_PK(2,2)      26  3076  11  3078  2207  25
-CONVEX 883    GT_PK(2,2)      26  3078  25  3079  1716  44
-CONVEX 884    GT_PK(2,2)      26  3079  44  3080  1979  45
-CONVEX 885    GT_PK(2,2)      26  3075  27  3080  3081  45
-CONVEX 886    GT_PK(2,2)      81  3082  57  3083  2211  80
-CONVEX 887    GT_PK(2,2)      81  3084  107  3085  3086  82
-CONVEX 888    GT_PK(2,2)      81  3087  106  3083  2220  80
-CONVEX 889    GT_PK(2,2)      81  3084  107  3087  3088  106
-CONVEX 890    GT_PK(2,2)      193  3089  161  3090  1640  192
-CONVEX 891    GT_PK(2,2)      193  3091  162  3089  2228  161
-CONVEX 892    GT_PK(2,2)      193  3092  225  3090  1482  192
-CONVEX 893    GT_PK(2,2)      338  3093  339  3094  2015  303
-CONVEX 894    GT_PK(2,2)      338  3095  302  3094  2231  303
-CONVEX 895    GT_PK(2,2)      58  3096  37  3097  2234  36
-CONVEX 896    GT_PK(2,2)      58  3098  81  3099  3085  82
-CONVEX 897    GT_PK(2,2)      58  3100  57  3097  2213  36
-CONVEX 898    GT_PK(2,2)      58  3098  81  3100  3082  57
-CONVEX 899    GT_PK(2,2)      200  3101  168  3102  2246  169
-CONVEX 900    GT_PK(2,2)      200  3103  201  3102  3104  169
-CONVEX 901    GT_PK(2,2)      200  3103  201  3105  2240  233
-CONVEX 902    GT_PK(2,2)      86  3106  87  3107  3108  112
-CONVEX 903    GT_PK(2,2)      113  3109  87  3110  3108  112
-CONVEX 904    GT_PK(2,2)      113  3111  141  3112  3113  114
-CONVEX 905    GT_PK(2,2)      113  3112  114  3114  2831  88
-CONVEX 906    GT_PK(2,2)      113  3109  87  3114  2243  88
-CONVEX 907    GT_PK(2,2)      40  3115  39  3116  2260  21
-CONVEX 908    GT_PK(2,2)      40  3117  22  3118  1726  41
-CONVEX 909    GT_PK(2,2)      40  3117  22  3116  1720  21
-CONVEX 910    GT_PK(2,2)      40  3115  39  3119  3120  61
-CONVEX 911    GT_PK(2,2)      59  3121  58  3122  3099  82
-CONVEX 912    GT_PK(2,2)      59  3121  58  3123  3096  37
-CONVEX 913    GT_PK(2,2)      108  3124  107  3125  3086  82
-CONVEX 914    GT_PK(2,2)      1364  3126  1365  3127  3128  1339
-CONVEX 915    GT_PK(2,2)      963  3129  1002  3130  2755  964
-CONVEX 916    GT_PK(2,2)      963  3129  1002  3131  2758  1001
-CONVEX 917    GT_PK(2,2)      963  3132  925  3130  3133  964
-CONVEX 918    GT_PK(2,2)      963  3132  925  3134  2298  924
-CONVEX 919    GT_PK(2,2)      1038  3135  1000  3136  2284  1039
-CONVEX 920    GT_PK(2,2)      1038  3137  1076  3136  3138  1039
-CONVEX 921    GT_PK(2,2)      1038  3137  1076  3139  2280  1075
-CONVEX 922    GT_PK(2,2)      965  3140  927  3141  2291  966
-CONVEX 923    GT_PK(2,2)      965  3142  1003  3143  2756  964
-CONVEX 924    GT_PK(2,2)      965  3144  1004  3141  3145  966
-CONVEX 925    GT_PK(2,2)      965  3144  1004  3142  3146  1003
-CONVEX 926    GT_PK(2,2)      886  3147  925  3148  2299  885
-CONVEX 927    GT_PK(2,2)      886  3148  885  3149  1739  846
-CONVEX 928    GT_PK(2,2)      886  3150  847  3149  1602  846
-CONVEX 929    GT_PK(2,2)      886  3151  887  3150  3152  847
-CONVEX 930    GT_PK(2,2)      1393  3153  1369  3154  2338  1370
-CONVEX 931    GT_PK(2,2)      1393  3153  1369  3155  2357  1392
-CONVEX 932    GT_PK(2,2)      1393  3156  1414  3155  2367  1392
-CONVEX 933    GT_PK(2,2)      1393  3157  1415  3156  2304  1414
-CONVEX 934    GT_PK(2,2)      1254  3158  1286  3159  3160  1285
-CONVEX 935    GT_PK(2,2)      1254  3161  1253  3159  2399  1285
-CONVEX 936    GT_PK(2,2)      1254  3162  1222  3163  2311  1221
-CONVEX 937    GT_PK(2,2)      1254  3161  1253  3163  2418  1221
-CONVEX 938    GT_PK(2,2)      1374  3164  1348  3165  2313  1397
-CONVEX 939    GT_PK(2,2)      1293  3166  1294  3167  3168  1323
-CONVEX 940    GT_PK(2,2)      1293  3166  1294  3169  2478  1262
-CONVEX 941    GT_PK(2,2)      1321  3170  1348  3171  2317  1320
-CONVEX 942    GT_PK(2,2)      1321  3172  1291  3171  3173  1320
-CONVEX 943    GT_PK(2,2)      1319  3174  1347  3175  2328  1346
-CONVEX 944    GT_PK(2,2)      1319  3174  1347  3176  2316  1320
-CONVEX 945    GT_PK(2,2)      1394  3177  1416  3178  2318  1395
-CONVEX 946    GT_PK(2,2)      1394  3179  1415  3180  2302  1434
-CONVEX 947    GT_PK(2,2)      1394  3177  1416  3180  3181  1434
-CONVEX 948    GT_PK(2,2)      1394  3182  1371  3183  2324  1370
-CONVEX 949    GT_PK(2,2)      1394  3182  1371  3178  2332  1395
-CONVEX 950    GT_PK(2,2)      1394  3184  1393  3183  3154  1370
-CONVEX 951    GT_PK(2,2)      1394  3184  1393  3179  3157  1415
-CONVEX 952    GT_PK(2,2)      1195  3185  1196  3186  1583  1229
-CONVEX 953    GT_PK(2,2)      1261  3187  1262  3188  1535  1229
-CONVEX 954    GT_PK(2,2)      1261  3189  1293  3187  3169  1262
-CONVEX 955    GT_PK(2,2)      1411  3190  1390  3191  1747  1412
-CONVEX 956    GT_PK(2,2)      1411  3192  1430  3191  1512  1412
-CONVEX 957    GT_PK(2,2)      1411  3193  1429  3192  2351  1430
-CONVEX 958    GT_PK(2,2)      1411  3194  1410  3193  2354  1429
-CONVEX 959    GT_PK(2,2)      1077  3195  1113  3196  2374  1076
-CONVEX 960    GT_PK(2,2)      1077  3197  1040  3198  2288  1078
-CONVEX 961    GT_PK(2,2)      1077  3196  1076  3199  3138  1039
-CONVEX 962    GT_PK(2,2)      1077  3197  1040  3199  2287  1039
-CONVEX 963    GT_PK(2,2)      1151  3200  1150  3201  2375  1185
-CONVEX 964    GT_PK(2,2)      1151  3202  1116  3203  3204  1152
-CONVEX 965    GT_PK(2,2)      1151  3202  1116  3205  2382  1115
-CONVEX 966    GT_PK(2,2)      1151  3200  1150  3205  3206  1115
-CONVEX 967    GT_PK(2,2)      1249  3207  1280  3208  2386  1248
-CONVEX 968    GT_PK(2,2)      1249  3208  1248  3209  3210  1216
-CONVEX 969    GT_PK(2,2)      1249  3211  1217  3212  2395  1250
-CONVEX 970    GT_PK(2,2)      1249  3211  1217  3209  2392  1216
-CONVEX 971    GT_PK(2,2)      1251  3213  1282  3214  3215  1250
-CONVEX 972    GT_PK(2,2)      1251  3216  1218  3214  2396  1250
-CONVEX 973    GT_PK(2,2)      1251  3216  1218  3217  1520  1219
-CONVEX 974    GT_PK(2,2)      1251  3218  1252  3217  2421  1219
-CONVEX 975    GT_PK(2,2)      1281  3219  1311  3220  2406  1282
-CONVEX 976    GT_PK(2,2)      1281  3221  1249  3222  3207  1280
-CONVEX 977    GT_PK(2,2)      1281  3222  1280  3223  2390  1310
-CONVEX 978    GT_PK(2,2)      1281  3219  1311  3223  3224  1310
-CONVEX 979    GT_PK(2,2)      1281  3220  1282  3225  3215  1250
-CONVEX 980    GT_PK(2,2)      1281  3221  1249  3225  3212  1250
-CONVEX 981    GT_PK(2,2)      1367  3226  1391  3227  1745  1390
-CONVEX 982    GT_PK(2,2)      1367  3228  1368  3226  2358  1391
-CONVEX 983    GT_PK(2,2)      1367  3229  1366  3227  3230  1390
-CONVEX 984    GT_PK(2,2)      1367  3229  1366  3231  3232  1341
-CONVEX 985    GT_PK(2,2)      1342  3233  1368  3234  2360  1343
-CONVEX 986    GT_PK(2,2)      1342  3235  1367  3233  3228  1368
-CONVEX 987    GT_PK(2,2)      1342  3235  1367  3236  3231  1341
-CONVEX 988    GT_PK(2,2)      1155  3237  1154  3238  3239  1119
-CONVEX 989    GT_PK(2,2)      1155  3237  1154  3240  2413  1189
-CONVEX 990    GT_PK(2,2)      1155  3241  1190  3240  3242  1189
-CONVEX 991    GT_PK(2,2)      1155  3241  1190  3243  3244  1156
-CONVEX 992    GT_PK(2,2)      1186  3245  1220  3246  2415  1187
-CONVEX 993    GT_PK(2,2)      1186  3246  1187  3247  2410  1152
-CONVEX 994    GT_PK(2,2)      1186  3248  1185  3249  1521  1219
-CONVEX 995    GT_PK(2,2)      1186  3245  1220  3249  2420  1219
-CONVEX 996    GT_PK(2,2)      1186  3250  1151  3247  3203  1152
-CONVEX 997    GT_PK(2,2)      1186  3250  1151  3248  3201  1185
-CONVEX 998    GT_PK(2,2)      666  3251  665  3252  2423  705
-CONVEX 999    GT_PK(2,2)      664  3253  665  3254  2422  704
-CONVEX 1000    GT_PK(2,2)      664  3255  624  3256  2451  663
-CONVEX 1001    GT_PK(2,2)      664  3253  665  3257  3258  625
-CONVEX 1002    GT_PK(2,2)      664  3255  624  3257  2435  625
-CONVEX 1003    GT_PK(2,2)      506  3259  507  3260  1766  545
-CONVEX 1004    GT_PK(2,2)      506  3259  507  3261  1771  468
-CONVEX 1005    GT_PK(2,2)      506  3261  468  3262  1759  467
-CONVEX 1006    GT_PK(2,2)      506  3263  505  3262  3264  467
-CONVEX 1007    GT_PK(2,2)      740  3265  739  3266  2441  779
-CONVEX 1008    GT_PK(2,2)      740  3267  780  3266  2461  779
-CONVEX 1009    GT_PK(2,2)      740  3267  780  3268  2458  741
-CONVEX 1010    GT_PK(2,2)      740  3265  739  3269  3270  700
-CONVEX 1011    GT_PK(2,2)      859  3271  819  3272  2460  820
-CONVEX 1012    GT_PK(2,2)      859  3273  860  3272  2484  820
-CONVEX 1013    GT_PK(2,2)      859  3273  860  3274  2485  899
-CONVEX 1014    GT_PK(2,2)      859  3274  899  3275  2436  898
-CONVEX 1015    GT_PK(2,2)      859  3275  898  3276  1801  858
-CONVEX 1016    GT_PK(2,2)      859  3271  819  3276  2446  858
-CONVEX 1017    GT_PK(2,2)      543  3277  504  3278  3279  505
-CONVEX 1018    GT_PK(2,2)      543  3280  542  3281  3282  582
-CONVEX 1019    GT_PK(2,2)      543  3277  504  3280  3283  542
-CONVEX 1020    GT_PK(2,2)      544  3284  543  3285  3278  505
-CONVEX 1021    GT_PK(2,2)      544  3286  506  3287  3260  545
-CONVEX 1022    GT_PK(2,2)      544  3286  506  3285  3263  505
-CONVEX 1023    GT_PK(2,2)      584  3288  624  3289  2434  585
-CONVEX 1024    GT_PK(2,2)      584  3290  623  3288  2449  624
-CONVEX 1025    GT_PK(2,2)      584  3289  585  3291  1777  545
-CONVEX 1026    GT_PK(2,2)      584  3292  544  3291  3287  545
-CONVEX 1027    GT_PK(2,2)      702  3293  742  3294  2454  741
-CONVEX 1028    GT_PK(2,2)      702  3295  662  3296  2463  663
-CONVEX 1029    GT_PK(2,2)      702  3293  742  3297  2452  743
-CONVEX 1030    GT_PK(2,2)      622  3298  662  3299  2462  623
-CONVEX 1031    GT_PK(2,2)      622  3298  662  3300  3301  661
-CONVEX 1032    GT_PK(2,2)      622  3302  621  3303  3304  582
-CONVEX 1033    GT_PK(2,2)      622  3302  621  3300  3305  661
-CONVEX 1034    GT_PK(2,2)      1093  3306  1092  3307  3308  1129
-CONVEX 1035    GT_PK(2,2)      1093  3309  1056  3310  2471  1094
-CONVEX 1036    GT_PK(2,2)      1093  3311  1055  3306  3312  1092
-CONVEX 1037    GT_PK(2,2)      1093  3311  1055  3309  2473  1056
-CONVEX 1038    GT_PK(2,2)      1093  3313  1130  3307  1534  1129
-CONVEX 1039    GT_PK(2,2)      1093  3310  1094  3313  3314  1130
-CONVEX 1040    GT_PK(2,2)      1018  3315  1057  3316  3317  1019
-CONVEX 1041    GT_PK(2,2)      1018  3318  1056  3315  2470  1057
-CONVEX 1042    GT_PK(2,2)      1018  3318  1056  3319  2475  1017
-CONVEX 1043    GT_PK(2,2)      1018  3320  979  3316  2497  1019
-CONVEX 1044    GT_PK(2,2)      1018  3320  979  3319  2464  1017
-CONVEX 1045    GT_PK(2,2)      1054  3321  1055  3322  3312  1092
-CONVEX 1046    GT_PK(2,2)      777  3323  738  3324  2444  778
-CONVEX 1047    GT_PK(2,2)      777  3325  817  3324  2482  778
-CONVEX 1048    GT_PK(2,2)      856  3326  895  3327  3328  896
-CONVEX 1049    GT_PK(2,2)      856  3326  895  3329  1960  855
-CONVEX 1050    GT_PK(2,2)      857  3330  817  3331  2481  818
-CONVEX 1051    GT_PK(2,2)      857  3332  897  3333  1800  858
-CONVEX 1052    GT_PK(2,2)      857  3331  818  3333  2447  858
-CONVEX 1053    GT_PK(2,2)      857  3332  897  3334  1796  896
-CONVEX 1054    GT_PK(2,2)      857  3335  856  3334  3327  896
-CONVEX 1055    GT_PK(2,2)      857  3335  856  3330  3336  817
-CONVEX 1056    GT_PK(2,2)      1016  3337  1017  3338  2466  978
-CONVEX 1057    GT_PK(2,2)      1016  3339  977  3338  2488  978
-CONVEX 1058    GT_PK(2,2)      1016  3339  977  3340  2491  1015
-CONVEX 1059    GT_PK(2,2)      1016  3341  1054  3340  3342  1015
-CONVEX 1060    GT_PK(2,2)      1016  3343  1055  3337  2474  1017
-CONVEX 1061    GT_PK(2,2)      1016  3341  1054  3343  3321  1055
-CONVEX 1062    GT_PK(2,2)      862  3344  861  3345  2499  822
-CONVEX 1063    GT_PK(2,2)      862  3346  823  3345  1788  822
-CONVEX 1064    GT_PK(2,2)      862  3347  901  3348  2504  902
-CONVEX 1065    GT_PK(2,2)      862  3347  901  3344  2506  861
-CONVEX 1066    GT_PK(2,2)      862  3346  823  3349  1461  863
-CONVEX 1067    GT_PK(2,2)      862  3350  903  3349  3351  863
-CONVEX 1068    GT_PK(2,2)      862  3348  902  3350  1816  903
-CONVEX 1069    GT_PK(2,2)      351  3352  352  3353  1823  316
-CONVEX 1070    GT_PK(2,2)      351  3353  316  3354  1554  315
-CONVEX 1071    GT_PK(2,2)      351  3355  388  3352  3356  352
-CONVEX 1072    GT_PK(2,2)      351  3355  388  3357  3358  387
-CONVEX 1073    GT_PK(2,2)      837  3359  797  3360  1894  836
-CONVEX 1074    GT_PK(2,2)      837  3359  797  3361  2635  798
-CONVEX 1075    GT_PK(2,2)      837  3362  838  3361  3363  798
-CONVEX 1076    GT_PK(2,2)      799  3364  838  3365  2519  839
-CONVEX 1077    GT_PK(2,2)      799  3364  838  3366  3363  798
-CONVEX 1078    GT_PK(2,2)      799  3367  759  3366  2636  798
-CONVEX 1079    GT_PK(2,2)      799  3367  759  3368  1900  760
-CONVEX 1080    GT_PK(2,2)      637  3369  597  3370  2535  636
-CONVEX 1081    GT_PK(2,2)      637  3369  597  3371  3032  598
-CONVEX 1082    GT_PK(2,2)      637  3372  638  3371  2651  598
-CONVEX 1083    GT_PK(2,2)      637  3372  638  3373  2652  677
-CONVEX 1084    GT_PK(2,2)      518  3374  517  3375  2523  557
-CONVEX 1085    GT_PK(2,2)      518  3376  558  3375  3029  557
-CONVEX 1086    GT_PK(2,2)      671  3377  710  3378  3379  670
-CONVEX 1087    GT_PK(2,2)      671  3380  711  3377  3381  710
-CONVEX 1088    GT_PK(2,2)      753  3382  714  3383  3384  713
-CONVEX 1089    GT_PK(2,2)      753  3385  792  3386  3387  793
-CONVEX 1090    GT_PK(2,2)      753  3388  754  3386  2649  793
-CONVEX 1091    GT_PK(2,2)      753  3388  754  3382  2645  714
-CONVEX 1092    GT_PK(2,2)      669  3389  708  3390  3391  707
-CONVEX 1093    GT_PK(2,2)      669  3392  668  3393  2025  629
-CONVEX 1094    GT_PK(2,2)      669  3390  707  3392  1854  668
-CONVEX 1095    GT_PK(2,2)      669  3389  708  3394  3395  670
-CONVEX 1096    GT_PK(2,2)      825  3396  864  3397  3398  826
-CONVEX 1097    GT_PK(2,2)      825  3399  786  3400  1856  785
-CONVEX 1098    GT_PK(2,2)      825  3399  786  3397  2547  826
-CONVEX 1099    GT_PK(2,2)      865  3401  864  3402  3398  826
-CONVEX 1100    GT_PK(2,2)      865  3401  864  3403  3404  904
-CONVEX 1101    GT_PK(2,2)      748  3405  787  3406  3407  788
-CONVEX 1102    GT_PK(2,2)      748  3408  749  3406  3409  788
-CONVEX 1103    GT_PK(2,2)      748  3408  749  3410  3411  708
-CONVEX 1104    GT_PK(2,2)      748  3410  708  3412  3391  707
-CONVEX 1105    GT_PK(2,2)      748  3412  707  3413  1853  747
-CONVEX 1106    GT_PK(2,2)      748  3405  787  3413  2548  747
-CONVEX 1107    GT_PK(2,2)      1061  3414  1098  3415  2555  1062
-CONVEX 1108    GT_PK(2,2)      1061  3416  1023  3417  2597  1060
-CONVEX 1109    GT_PK(2,2)      1061  3418  1097  3417  2581  1060
-CONVEX 1110    GT_PK(2,2)      1061  3418  1097  3414  2564  1098
-CONVEX 1111    GT_PK(2,2)      1061  3415  1062  3419  3420  1024
-CONVEX 1112    GT_PK(2,2)      1061  3416  1023  3419  2603  1024
-CONVEX 1113    GT_PK(2,2)      1066  3421  1103  3422  1878  1102
-CONVEX 1114    GT_PK(2,2)      1066  3423  1065  3422  3424  1102
-CONVEX 1115    GT_PK(2,2)      1066  3421  1103  3425  3426  1067
-CONVEX 1116    GT_PK(2,2)      1066  3423  1065  3427  2585  1028
-CONVEX 1117    GT_PK(2,2)      1066  3428  1029  3425  2614  1067
-CONVEX 1118    GT_PK(2,2)      1066  3428  1029  3427  3429  1028
-CONVEX 1119    GT_PK(2,2)      752  3430  713  3431  3432  712
-CONVEX 1120    GT_PK(2,2)      752  3433  792  3434  3435  791
-CONVEX 1121    GT_PK(2,2)      752  3436  753  3430  3383  713
-CONVEX 1122    GT_PK(2,2)      752  3436  753  3433  3385  792
-CONVEX 1123    GT_PK(2,2)      752  3437  751  3431  2588  712
-CONVEX 1124    GT_PK(2,2)      752  3437  751  3434  3438  791
-CONVEX 1125    GT_PK(2,2)      831  3439  792  3440  3435  791
-CONVEX 1126    GT_PK(2,2)      789  3441  749  3442  3409  788
-CONVEX 1127    GT_PK(2,2)      1026  3443  1027  3444  2584  1064
-CONVEX 1128    GT_PK(2,2)      1026  3445  1063  3444  2593  1064
-CONVEX 1129    GT_PK(2,2)      1026  3443  1027  3446  2618  988
-CONVEX 1130    GT_PK(2,2)      1025  3447  1062  3448  3420  1024
-CONVEX 1131    GT_PK(2,2)      1025  3449  1063  3447  2590  1062
-CONVEX 1132    GT_PK(2,2)      1025  3450  1026  3449  3445  1063
-CONVEX 1133    GT_PK(2,2)      984  3451  1022  3452  2600  983
-CONVEX 1134    GT_PK(2,2)      984  3451  1022  3453  2595  1023
-CONVEX 1135    GT_PK(2,2)      984  3454  985  3453  2601  1023
-CONVEX 1136    GT_PK(2,2)      984  3455  945  3452  3456  983
-CONVEX 1137    GT_PK(2,2)      947  3457  948  3458  1874  909
-CONVEX 1138    GT_PK(2,2)      991  3459  1030  3460  2612  1029
-CONVEX 1139    GT_PK(2,2)      991  3459  1030  3461  3462  992
-CONVEX 1140    GT_PK(2,2)      1033  3463  1032  3464  3465  1070
-CONVEX 1141    GT_PK(2,2)      1031  3466  1030  3467  3462  992
-CONVEX 1142    GT_PK(2,2)      1031  3468  993  3467  3469  992
-CONVEX 1143    GT_PK(2,2)      1031  3468  993  3470  3471  1032
-CONVEX 1144    GT_PK(2,2)      953  3472  914  3473  3474  952
-CONVEX 1145    GT_PK(2,2)      953  3475  991  3473  3476  952
-CONVEX 1146    GT_PK(2,2)      953  3475  991  3477  3461  992
-CONVEX 1147    GT_PK(2,2)      953  3472  914  3478  2641  915
-CONVEX 1148    GT_PK(2,2)      913  3479  912  3480  2621  873
-CONVEX 1149    GT_PK(2,2)      913  3480  873  3481  3482  874
-CONVEX 1150    GT_PK(2,2)      913  3483  914  3481  2644  874
-CONVEX 1151    GT_PK(2,2)      913  3483  914  3484  3474  952
-CONVEX 1152    GT_PK(2,2)      951  3485  989  3486  2615  950
-CONVEX 1153    GT_PK(2,2)      951  3487  912  3486  2623  950
-CONVEX 1154    GT_PK(2,2)      951  3488  913  3487  3479  912
-CONVEX 1155    GT_PK(2,2)      951  3488  913  3489  3484  952
-CONVEX 1156    GT_PK(2,2)      1205  3490  1204  3491  2740  1237
-CONVEX 1157    GT_PK(2,2)      1205  3490  1204  3492  3493  1171
-CONVEX 1158    GT_PK(2,2)      1174  3494  1207  3495  2743  1208
-CONVEX 1159    GT_PK(2,2)      1174  3494  1207  3496  2628  1173
-CONVEX 1160    GT_PK(2,2)      1139  3497  1103  3498  1877  1138
-CONVEX 1161    GT_PK(2,2)      1139  3499  1174  3500  3501  1140
-CONVEX 1162    GT_PK(2,2)      1139  3498  1138  3502  3503  1173
-CONVEX 1163    GT_PK(2,2)      1139  3499  1174  3502  3496  1173
-CONVEX 1164    GT_PK(2,2)      833  3504  872  3505  2622  873
-CONVEX 1165    GT_PK(2,2)      833  3506  794  3507  2648  793
-CONVEX 1166    GT_PK(2,2)      834  3508  873  3509  3482  874
-CONVEX 1167    GT_PK(2,2)      834  3510  835  3509  2643  874
-CONVEX 1168    GT_PK(2,2)      834  3511  833  3508  3505  873
-CONVEX 1169    GT_PK(2,2)      834  3511  833  3512  3506  794
-CONVEX 1170    GT_PK(2,2)      755  3513  754  3514  2646  715
-CONVEX 1171    GT_PK(2,2)      755  3515  794  3513  2647  754
-CONVEX 1172    GT_PK(2,2)      755  3514  715  3516  3517  716
-CONVEX 1173    GT_PK(2,2)      755  3518  756  3516  1887  716
-CONVEX 1174    GT_PK(2,2)      600  3519  601  3520  2048  640
-CONVEX 1175    GT_PK(2,2)      600  3521  639  3520  2656  640
-CONVEX 1176    GT_PK(2,2)      600  3519  601  3522  2054  561
-CONVEX 1177    GT_PK(2,2)      600  3523  560  3522  2665  561
-CONVEX 1178    GT_PK(2,2)      600  3521  639  3524  2658  599
-CONVEX 1179    GT_PK(2,2)      600  3523  560  3524  2662  599
-CONVEX 1180    GT_PK(2,2)      723  3525  722  3526  2674  762
-CONVEX 1181    GT_PK(2,2)      723  3525  722  3527  2672  683
-CONVEX 1182    GT_PK(2,2)      723  3528  684  3529  2804  724
-CONVEX 1183    GT_PK(2,2)      723  3528  684  3527  3021  683
-CONVEX 1184    GT_PK(2,2)      1438  3530  1424  3531  1936  1439
-CONVEX 1185    GT_PK(2,2)      1438  3532  1423  3530  2677  1424
-CONVEX 1186    GT_PK(2,2)      1437  3533  1423  3534  2680  1422
-CONVEX 1187    GT_PK(2,2)      1437  3535  1436  3534  3536  1422
-CONVEX 1188    GT_PK(2,2)      1437  3537  1438  3533  3532  1423
-CONVEX 1189    GT_PK(2,2)      1180  3538  1179  3539  2696  1213
-CONVEX 1190    GT_PK(2,2)      1180  3540  1214  3539  3541  1213
-CONVEX 1191    GT_PK(2,2)      1180  3540  1214  3542  3543  1181
-CONVEX 1192    GT_PK(2,2)      1180  3538  1179  3544  3545  1145
-CONVEX 1193    GT_PK(2,2)      1144  3546  1179  3547  3545  1145
-CONVEX 1194    GT_PK(2,2)      1144  3546  1179  3548  2698  1178
-CONVEX 1195    GT_PK(2,2)      1246  3549  1245  3550  2700  1213
-CONVEX 1196    GT_PK(2,2)      1246  3551  1214  3550  3541  1213
-CONVEX 1197    GT_PK(2,2)      1246  3551  1214  3552  3553  1247
-CONVEX 1198    GT_PK(2,2)      1246  3554  1277  3549  3555  1245
-CONVEX 1199    GT_PK(2,2)      1246  3556  1278  3552  1581  1247
-CONVEX 1200    GT_PK(2,2)      1246  3554  1277  3556  3557  1278
-CONVEX 1201    GT_PK(2,2)      1215  3558  1214  3559  3553  1247
-CONVEX 1202    GT_PK(2,2)      1215  3560  1248  3559  1749  1247
-CONVEX 1203    GT_PK(2,2)      1215  3560  1248  3561  3210  1216
-CONVEX 1204    GT_PK(2,2)      1215  3562  1182  3561  2703  1216
-CONVEX 1205    GT_PK(2,2)      1215  3558  1214  3563  3543  1181
-CONVEX 1206    GT_PK(2,2)      1215  3562  1182  3563  2709  1181
-CONVEX 1207    GT_PK(2,2)      1307  3564  1308  3565  2710  1278
-CONVEX 1208    GT_PK(2,2)      1307  3566  1277  3567  3568  1306
-CONVEX 1209    GT_PK(2,2)      1307  3566  1277  3565  3557  1278
-CONVEX 1210    GT_PK(2,2)      1307  3569  1334  3567  3570  1306
-CONVEX 1211    GT_PK(2,2)      1307  3571  1335  3569  2686  1334
-CONVEX 1212    GT_PK(2,2)      1307  3564  1308  3571  2714  1335
-CONVEX 1213    GT_PK(2,2)      1326  3572  1299  3573  2727  1298
-CONVEX 1214    GT_PK(2,2)      1326  3572  1299  3574  3575  1327
-CONVEX 1215    GT_PK(2,2)      1326  3576  1375  3577  3578  1351
-CONVEX 1216    GT_PK(2,2)      1172  3579  1137  3580  2728  1171
-CONVEX 1217    GT_PK(2,2)      1172  3581  1205  3580  3492  1171
-CONVEX 1218    GT_PK(2,2)      1172  3581  1205  3582  3583  1206
-CONVEX 1219    GT_PK(2,2)      1172  3582  1206  3584  2627  1173
-CONVEX 1220    GT_PK(2,2)      1172  3585  1138  3584  3503  1173
-CONVEX 1221    GT_PK(2,2)      1172  3579  1137  3585  2731  1138
-CONVEX 1222    GT_PK(2,2)      1101  3586  1100  3587  2550  1136
-CONVEX 1223    GT_PK(2,2)      1101  3588  1137  3587  2729  1136
-CONVEX 1224    GT_PK(2,2)      1101  3588  1137  3589  2732  1102
-CONVEX 1225    GT_PK(2,2)      1101  3586  1100  3590  2594  1064
-CONVEX 1226    GT_PK(2,2)      1101  3591  1065  3589  3424  1102
-CONVEX 1227    GT_PK(2,2)      1101  3591  1065  3590  2583  1064
-CONVEX 1228    GT_PK(2,2)      1203  3592  1204  3593  2739  1236
-CONVEX 1229    GT_PK(2,2)      1235  3594  1267  3595  3596  1266
-CONVEX 1230    GT_PK(2,2)      1235  3597  1265  3595  3598  1266
-CONVEX 1231    GT_PK(2,2)      1235  3597  1265  3599  1860  1234
-CONVEX 1232    GT_PK(2,2)      1235  3594  1267  3600  2738  1236
-CONVEX 1233    GT_PK(2,2)      1235  3601  1203  3600  3593  1236
-CONVEX 1234    GT_PK(2,2)      1170  3602  1204  3603  3493  1171
-CONVEX 1235    GT_PK(2,2)      1170  3603  1171  3604  2730  1136
-CONVEX 1236    GT_PK(2,2)      1170  3605  1203  3606  3607  1169
-CONVEX 1237    GT_PK(2,2)      1170  3605  1203  3602  3592  1204
-CONVEX 1238    GT_PK(2,2)      1170  3608  1135  3604  2551  1136
-CONVEX 1239    GT_PK(2,2)      1170  3606  1169  3608  2735  1135
-CONVEX 1240    GT_PK(2,2)      1239  3609  1206  3610  2626  1207
-CONVEX 1241    GT_PK(2,2)      1239  3611  1240  3610  2741  1207
-CONVEX 1242    GT_PK(2,2)      1239  3612  1271  3611  2744  1240
-CONVEX 1243    GT_PK(2,2)      1239  3612  1271  3613  3614  1270
-CONVEX 1244    GT_PK(2,2)      1274  3615  1243  3616  3617  1242
-CONVEX 1245    GT_PK(2,2)      1274  3618  1273  3616  3619  1242
-CONVEX 1246    GT_PK(2,2)      1274  3620  1304  3621  3622  1303
-CONVEX 1247    GT_PK(2,2)      1274  3618  1273  3621  3623  1303
-CONVEX 1248    GT_PK(2,2)      1241  3624  1240  3625  2746  1272
-CONVEX 1249    GT_PK(2,2)      1241  3626  1273  3625  3627  1272
-CONVEX 1250    GT_PK(2,2)      1241  3624  1240  3628  2742  1208
-CONVEX 1251    GT_PK(2,2)      1241  3626  1273  3629  3619  1242
-CONVEX 1252    GT_PK(2,2)      967  3630  1006  3631  3632  968
-CONVEX 1253    GT_PK(2,2)      967  3633  929  3631  2765  968
-CONVEX 1254    GT_PK(2,2)      967  3634  966  3635  2293  928
-CONVEX 1255    GT_PK(2,2)      967  3633  929  3635  3636  928
-CONVEX 1256    GT_PK(2,2)      1082  3637  1083  3638  3639  1119
-CONVEX 1257    GT_PK(2,2)      1082  3637  1083  3640  2752  1045
-CONVEX 1258    GT_PK(2,2)      1044  3641  1081  3642  2761  1043
-CONVEX 1259    GT_PK(2,2)      1044  3643  1006  3644  3645  1045
-CONVEX 1260    GT_PK(2,2)      1044  3646  1082  3644  3640  1045
-CONVEX 1261    GT_PK(2,2)      1044  3646  1082  3641  3647  1081
-CONVEX 1262    GT_PK(2,2)      1117  3648  1116  3649  2384  1080
-CONVEX 1263    GT_PK(2,2)      1117  3650  1081  3649  2762  1080
-CONVEX 1264    GT_PK(2,2)      1117  3648  1116  3651  3204  1152
-CONVEX 1265    GT_PK(2,2)      1117  3652  1153  3651  2409  1152
-CONVEX 1266    GT_PK(2,2)      1005  3653  1004  3654  3655  1043
-CONVEX 1267    GT_PK(2,2)      1005  3656  1044  3654  3642  1043
-CONVEX 1268    GT_PK(2,2)      1005  3656  1044  3657  3643  1006
-CONVEX 1269    GT_PK(2,2)      1005  3658  967  3657  3630  1006
-CONVEX 1270    GT_PK(2,2)      1005  3653  1004  3659  3145  966
-CONVEX 1271    GT_PK(2,2)      1005  3658  967  3659  3634  966
-CONVEX 1272    GT_PK(2,2)      1042  3660  1004  3661  3655  1043
-CONVEX 1273    GT_PK(2,2)      1042  3662  1079  3663  2385  1041
-CONVEX 1274    GT_PK(2,2)      1042  3664  1003  3663  2760  1041
-CONVEX 1275    GT_PK(2,2)      1042  3660  1004  3664  3146  1003
-CONVEX 1276    GT_PK(2,2)      1042  3661  1043  3665  2763  1080
-CONVEX 1277    GT_PK(2,2)      1042  3662  1079  3665  2383  1080
-CONVEX 1278    GT_PK(2,2)      1007  3666  1008  3667  2766  969
-CONVEX 1279    GT_PK(2,2)      1007  3667  969  3668  1957  968
-CONVEX 1280    GT_PK(2,2)      1007  3669  1006  3668  3632  968
-CONVEX 1281    GT_PK(2,2)      1007  3669  1006  3670  3645  1045
-CONVEX 1282    GT_PK(2,2)      1007  3671  1046  3670  2753  1045
-CONVEX 1283    GT_PK(2,2)      1007  3666  1008  3671  3672  1046
-CONVEX 1284    GT_PK(2,2)      1122  3673  1123  3674  3675  1158
-CONVEX 1285    GT_PK(2,2)      1122  3676  1157  3674  2770  1158
-CONVEX 1286    GT_PK(2,2)      973  3677  972  3678  2775  1011
-CONVEX 1287    GT_PK(2,2)      1050  3679  1049  3680  3681  1087
-CONVEX 1288    GT_PK(2,2)      1050  3679  1049  3682  2773  1011
-CONVEX 1289    GT_PK(2,2)      1160  3683  1124  3684  3685  1125
-CONVEX 1290    GT_PK(2,2)      1160  3686  1195  3687  3688  1194
-CONVEX 1291    GT_PK(2,2)      1089  3689  1051  3690  2789  1052
-CONVEX 1292    GT_PK(2,2)      1089  3691  1090  3690  3692  1052
-CONVEX 1293    GT_PK(2,2)      686  3693  646  3694  3695  647
-CONVEX 1294    GT_PK(2,2)      686  3696  687  3694  2950  647
-CONVEX 1295    GT_PK(2,2)      686  3693  646  3697  2813  685
-CONVEX 1296    GT_PK(2,2)      686  3698  726  3699  2933  1
-CONVEX 1297    GT_PK(2,2)      686  3696  687  3698  2946  726
-CONVEX 1298    GT_PK(2,2)      686  3700  725  3699  2930  1
-CONVEX 1299    GT_PK(2,2)      686  3700  725  3697  2796  685
-CONVEX 1300    GT_PK(2,2)      272  3701  307  3702  1991  306
-CONVEX 1301    GT_PK(2,2)      116  3703  91  3704  3705  90
-CONVEX 1302    GT_PK(2,2)      16  3706  30  3707  2818  15
-CONVEX 1303    GT_PK(2,2)      46  3708  27  3709  3081  45
-CONVEX 1304    GT_PK(2,2)      46  3710  28  3708  2825  27
-CONVEX 1305    GT_PK(2,2)      170  3711  201  3712  2237  202
-CONVEX 1306    GT_PK(2,2)      170  3711  201  3713  3104  169
-CONVEX 1307    GT_PK(2,2)      140  3714  139  3715  3716  112
-CONVEX 1308    GT_PK(2,2)      140  3717  113  3715  3110  112
-CONVEX 1309    GT_PK(2,2)      140  3717  113  3718  3111  141
-CONVEX 1310    GT_PK(2,2)      140  3719  170  3718  3720  141
-CONVEX 1311    GT_PK(2,2)      140  3714  139  3721  2245  169
-CONVEX 1312    GT_PK(2,2)      140  3719  170  3721  3713  169
-CONVEX 1313    GT_PK(2,2)      568  3722  528  3723  2833  529
-CONVEX 1314    GT_PK(2,2)      569  3724  570  3725  2808  609
-CONVEX 1315    GT_PK(2,2)      569  3726  608  3725  2945  609
-CONVEX 1316    GT_PK(2,2)      569  3727  568  3726  3728  608
-CONVEX 1317    GT_PK(2,2)      569  3724  570  3729  2810  530
-CONVEX 1318    GT_PK(2,2)      569  3730  529  3729  2852  530
-CONVEX 1319    GT_PK(2,2)      569  3727  568  3730  3723  529
-CONVEX 1320    GT_PK(2,2)      415  3731  414  3732  2909  377
-CONVEX 1321    GT_PK(2,2)      415  3733  378  3734  2914  416
-CONVEX 1322    GT_PK(2,2)      415  3733  378  3732  2911  377
-CONVEX 1323    GT_PK(2,2)      415  3735  454  3734  1988  416
-CONVEX 1324    GT_PK(2,2)      415  3736  453  3735  3737  454
-CONVEX 1325    GT_PK(2,2)      415  3731  414  3736  2848  453
-CONVEX 1326    GT_PK(2,2)      492  3738  531  3739  2811  530
-CONVEX 1327    GT_PK(2,2)      492  3740  491  3739  2851  530
-CONVEX 1328    GT_PK(2,2)      492  3738  531  3741  2961  493
-CONVEX 1329    GT_PK(2,2)      492  3740  491  3742  2855  453
-CONVEX 1330    GT_PK(2,2)      492  3743  454  3741  1990  493
-CONVEX 1331    GT_PK(2,2)      492  3742  453  3743  3737  454
-CONVEX 1332    GT_PK(2,2)      349  3744  314  3745  2206  313
-CONVEX 1333    GT_PK(2,2)      349  3746  348  3745  3747  313
-CONVEX 1334    GT_PK(2,2)      349  3748  385  3746  3749  348
-CONVEX 1335    GT_PK(2,2)      277  3750  311  3751  2861  276
-CONVEX 1336    GT_PK(2,2)      312  3752  348  3753  3747  313
-CONVEX 1337    GT_PK(2,2)      312  3754  277  3755  3750  311
-CONVEX 1338    GT_PK(2,2)      312  3756  347  3752  3757  348
-CONVEX 1339    GT_PK(2,2)      312  3756  347  3755  2875  311
-CONVEX 1340    GT_PK(2,2)      312  3758  278  3753  2205  313
-CONVEX 1341    GT_PK(2,2)      312  3754  277  3758  3759  278
-CONVEX 1342    GT_PK(2,2)      421  3760  460  3761  1981  459
-CONVEX 1343    GT_PK(2,2)      421  3762  420  3761  3763  459
-CONVEX 1344    GT_PK(2,2)      421  3760  460  3764  3765  422
-CONVEX 1345    GT_PK(2,2)      421  3762  420  3766  2869  383
-CONVEX 1346    GT_PK(2,2)      384  3767  347  3768  2873  383
-CONVEX 1347    GT_PK(2,2)      384  3769  421  3770  3764  422
-CONVEX 1348    GT_PK(2,2)      384  3769  421  3768  3766  383
-CONVEX 1349    GT_PK(2,2)      384  3771  385  3770  2857  422
-CONVEX 1350    GT_PK(2,2)      384  3771  385  3772  3749  348
-CONVEX 1351    GT_PK(2,2)      384  3767  347  3772  3757  348
-CONVEX 1352    GT_PK(2,2)      535  3773  575  3774  2993  574
-CONVEX 1353    GT_PK(2,2)      535  3775  536  3773  3776  575
-CONVEX 1354    GT_PK(2,2)      535  3775  536  3777  2989  497
-CONVEX 1355    GT_PK(2,2)      418  3778  417  3779  2001  456
-CONVEX 1356    GT_PK(2,2)      418  3780  457  3779  2886  456
-CONVEX 1357    GT_PK(2,2)      418  3780  457  3781  3782  419
-CONVEX 1358    GT_PK(2,2)      418  3778  417  3783  2005  380
-CONVEX 1359    GT_PK(2,2)      418  3784  381  3781  2871  419
-CONVEX 1360    GT_PK(2,2)      418  3784  381  3783  2905  380
-CONVEX 1361    GT_PK(2,2)      458  3785  497  3786  2883  459
-CONVEX 1362    GT_PK(2,2)      458  3787  457  3788  3782  419
-CONVEX 1363    GT_PK(2,2)      458  3789  420  3788  2872  419
-CONVEX 1364    GT_PK(2,2)      458  3789  420  3786  3763  459
-CONVEX 1365    GT_PK(2,2)      884  3790  844  3791  3792  883
-CONVEX 1366    GT_PK(2,2)      884  3793  924  3794  2300  885
-CONVEX 1367    GT_PK(2,2)      884  3794  885  3795  1738  845
-CONVEX 1368    GT_PK(2,2)      884  3790  844  3795  2935  845
-CONVEX 1369    GT_PK(2,2)      884  3791  883  3796  3797  923
-CONVEX 1370    GT_PK(2,2)      884  3793  924  3796  3798  923
-CONVEX 1371    GT_PK(2,2)      843  3799  844  3800  3792  883
-CONVEX 1372    GT_PK(2,2)      763  3801  802  3802  2936  762
-CONVEX 1373    GT_PK(2,2)      763  3803  723  3804  3529  724
-CONVEX 1374    GT_PK(2,2)      763  3803  723  3802  3526  762
-CONVEX 1375    GT_PK(2,2)      763  3805  764  3804  2800  724
-CONVEX 1376    GT_PK(2,2)      573  3806  613  3807  2996  574
-CONVEX 1377    GT_PK(2,2)      573  3808  572  3809  2958  533
-CONVEX 1378    GT_PK(2,2)      848  3810  808  3811  2967  847
-CONVEX 1379    GT_PK(2,2)      848  3812  887  3813  2297  888
-CONVEX 1380    GT_PK(2,2)      848  3812  887  3811  3152  847
-CONVEX 1381    GT_PK(2,2)      692  3814  652  3815  2953  653
-CONVEX 1382    GT_PK(2,2)      692  3816  691  3814  3817  652
-CONVEX 1383    GT_PK(2,2)      612  3818  613  3819  2951  652
-CONVEX 1384    GT_PK(2,2)      612  3820  573  3818  3806  613
-CONVEX 1385    GT_PK(2,2)      612  3821  611  3822  2984  572
-CONVEX 1386    GT_PK(2,2)      612  3820  573  3822  3808  572
-CONVEX 1387    GT_PK(2,2)      651  3823  612  3824  3821  611
-CONVEX 1388    GT_PK(2,2)      651  3823  612  3825  3819  652
-CONVEX 1389    GT_PK(2,2)      651  3826  691  3825  3817  652
-CONVEX 1390    GT_PK(2,2)      651  3826  691  3827  2980  690
-CONVEX 1391    GT_PK(2,2)      650  3828  689  3829  2976  649
-CONVEX 1392    GT_PK(2,2)      650  3830  610  3829  1968  649
-CONVEX 1393    GT_PK(2,2)      650  3831  611  3830  2983  610
-CONVEX 1394    GT_PK(2,2)      650  3832  651  3831  3824  611
-CONVEX 1395    GT_PK(2,2)      650  3828  689  3833  2979  690
-CONVEX 1396    GT_PK(2,2)      650  3832  651  3833  3827  690
-CONVEX 1397    GT_PK(2,2)      815  3834  854  3835  2986  855
-CONVEX 1398    GT_PK(2,2)      893  3836  894  3837  3838  933
-CONVEX 1399    GT_PK(2,2)      893  3839  854  3836  2985  894
-CONVEX 1400    GT_PK(2,2)      893  3840  932  3837  1951  933
-CONVEX 1401    GT_PK(2,2)      893  3841  853  3839  3842  854
-CONVEX 1402    GT_PK(2,2)      812  3843  813  3844  2999  773
-CONVEX 1403    GT_PK(2,2)      889  3845  888  3846  2295  928
-CONVEX 1404    GT_PK(2,2)      889  3847  929  3846  3636  928
-CONVEX 1405    GT_PK(2,2)      695  3848  694  3849  3850  655
-CONVEX 1406    GT_PK(2,2)      770  3851  769  3852  2970  730
-CONVEX 1407    GT_PK(2,2)      615  3853  614  3854  2991  575
-CONVEX 1408    GT_PK(2,2)      548  3855  549  3856  3004  509
-CONVEX 1409    GT_PK(2,2)      548  3857  589  3858  2029  588
-CONVEX 1410    GT_PK(2,2)      548  3855  549  3857  3859  589
-CONVEX 1411    GT_PK(2,2)      434  3860  395  3861  2088  396
-CONVEX 1412    GT_PK(2,2)      434  3862  433  3860  3006  395
-CONVEX 1413    GT_PK(2,2)      434  3863  472  3864  3865  473
-CONVEX 1414    GT_PK(2,2)      434  3863  472  3862  3866  433
-CONVEX 1415    GT_PK(2,2)      442  3867  404  3868  3013  443
-CONVEX 1416    GT_PK(2,2)      442  3867  404  3869  3008  403
-CONVEX 1417    GT_PK(2,2)      643  3870  683  3871  2673  682
-CONVEX 1418    GT_PK(2,2)      643  3872  642  3871  3016  682
-CONVEX 1419    GT_PK(2,2)      643  3872  642  3873  3874  603
-CONVEX 1420    GT_PK(2,2)      643  3875  644  3870  3020  683
-CONVEX 1421    GT_PK(2,2)      602  3876  642  3877  3874  603
-CONVEX 1422    GT_PK(2,2)      602  3878  562  3879  2053  601
-CONVEX 1423    GT_PK(2,2)      602  3879  601  3880  2049  641
-CONVEX 1424    GT_PK(2,2)      602  3876  642  3880  3017  641
-CONVEX 1425    GT_PK(2,2)      602  3878  562  3881  2058  563
-CONVEX 1426    GT_PK(2,2)      602  3877  603  3881  3882  563
-CONVEX 1427    GT_PK(2,2)      565  3883  526  3884  3885  525
-CONVEX 1428    GT_PK(2,2)      488  3886  489  3887  2840  527
-CONVEX 1429    GT_PK(2,2)      488  3888  526  3887  3889  527
-CONVEX 1430    GT_PK(2,2)      486  3890  524  3891  3892  525
-CONVEX 1431    GT_PK(2,2)      444  3893  482  3894  3895  443
-CONVEX 1432    GT_PK(2,2)      444  3894  443  3896  3014  405
-CONVEX 1433    GT_PK(2,2)      483  3897  482  3898  3026  521
-CONVEX 1434    GT_PK(2,2)      483  3898  521  3899  2059  522
-CONVEX 1435    GT_PK(2,2)      483  3900  484  3899  3023  522
-CONVEX 1436    GT_PK(2,2)      483  3900  484  3901  3902  445
-CONVEX 1437    GT_PK(2,2)      483  3903  444  3901  3904  445
-CONVEX 1438    GT_PK(2,2)      483  3903  444  3897  3893  482
-CONVEX 1439    GT_PK(2,2)      519  3905  559  3906  2661  520
-CONVEX 1440    GT_PK(2,2)      519  3907  558  3905  3030  559
-CONVEX 1441    GT_PK(2,2)      519  3908  518  3909  3910  480
-CONVEX 1442    GT_PK(2,2)      519  3908  518  3907  3376  558
-CONVEX 1443    GT_PK(2,2)      288  3911  287  3912  2120  253
-CONVEX 1444    GT_PK(2,2)      288  3913  323  3911  3048  287
-CONVEX 1445    GT_PK(2,2)      288  3914  254  3912  2115  253
-CONVEX 1446    GT_PK(2,2)      288  3914  254  3915  2118  289
-CONVEX 1447    GT_PK(2,2)      244  3916  212  3917  3057  245
-CONVEX 1448    GT_PK(2,2)      244  3918  211  3916  3062  212
-CONVEX 1449    GT_PK(2,2)      244  3919  278  3917  2203  245
-CONVEX 1450    GT_PK(2,2)      244  3920  277  3919  3759  278
-CONVEX 1451    GT_PK(2,2)      150  3921  180  3922  3060  151
-CONVEX 1452    GT_PK(2,2)      150  3923  122  3924  3925  149
-CONVEX 1453    GT_PK(2,2)      121  3926  122  3927  3928  96
-CONVEX 1454    GT_PK(2,2)      121  3926  122  3929  3925  149
-CONVEX 1455    GT_PK(2,2)      97  3930  122  3931  3928  96
-CONVEX 1456    GT_PK(2,2)      97  3932  73  3931  3933  96
-CONVEX 1457    GT_PK(2,2)      97  3934  74  3932  3066  73
-CONVEX 1458    GT_PK(2,2)      97  3934  74  3935  3067  98
-CONVEX 1459    GT_PK(2,2)      93  3936  69  3937  3938  92
-CONVEX 1460    GT_PK(2,2)      51  3939  73  3940  2183  33
-CONVEX 1461    GT_PK(2,2)      51  3941  32  3940  3942  33
-CONVEX 1462    GT_PK(2,2)      226  3943  225  3944  1474  259
-CONVEX 1463    GT_PK(2,2)      226  3945  193  3943  3092  225
-CONVEX 1464    GT_PK(2,2)      294  3946  259  3947  1449  293
-CONVEX 1465    GT_PK(2,2)      294  3948  329  3947  2044  293
-CONVEX 1466    GT_PK(2,2)      294  3948  329  3949  2041  330
-CONVEX 1467    GT_PK(2,2)      294  3950  295  3949  3951  330
-CONVEX 1468    GT_PK(2,2)      331  3952  367  3953  2046  330
-CONVEX 1469    GT_PK(2,2)      331  3954  295  3953  3951  330
-CONVEX 1470    GT_PK(2,2)      134  3955  107  3956  3088  106
-CONVEX 1471    GT_PK(2,2)      134  3957  163  3958  3959  164
-CONVEX 1472    GT_PK(2,2)      195  3960  196  3961  3962  164
-CONVEX 1473    GT_PK(2,2)      195  3963  163  3961  3959  164
-CONVEX 1474    GT_PK(2,2)      232  3964  200  3965  3105  233
-CONVEX 1475    GT_PK(2,2)      111  3966  139  3967  3716  112
-CONVEX 1476    GT_PK(2,2)      111  3968  86  3967  3107  112
-CONVEX 1477    GT_PK(2,2)      63  3969  86  3970  3106  87
-CONVEX 1478    GT_PK(2,2)      63  3970  87  3971  2242  64
-CONVEX 1479    GT_PK(2,2)      63  3972  42  3973  2256  41
-CONVEX 1480    GT_PK(2,2)      63  3972  42  3971  2258  64
-CONVEX 1481    GT_PK(2,2)      62  3974  40  3975  3119  61
-CONVEX 1482    GT_PK(2,2)      62  3976  63  3977  3969  86
-CONVEX 1483    GT_PK(2,2)      62  3974  40  3978  3118  41
-CONVEX 1484    GT_PK(2,2)      62  3976  63  3978  3973  41
-CONVEX 1485    GT_PK(2,2)      38  3979  59  3980  3123  37
-CONVEX 1486    GT_PK(2,2)      38  3980  37  3981  2235  19
-CONVEX 1487    GT_PK(2,2)      38  3982  39  3983  2261  20
-CONVEX 1488    GT_PK(2,2)      38  3983  20  3984  1496  5
-CONVEX 1489    GT_PK(2,2)      38  3981  19  3984  3985  5
-CONVEX 1490    GT_PK(2,2)      83  3986  59  3987  3122  82
-CONVEX 1491    GT_PK(2,2)      83  3988  108  3987  3125  82
-CONVEX 1492    GT_PK(2,2)      83  3988  108  3989  3990  109
-CONVEX 1493    GT_PK(2,2)      165  3991  196  3992  3962  164
-CONVEX 1494    GT_PK(2,2)      1338  3993  1364  3994  3127  1339
-CONVEX 1495    GT_PK(2,2)      1338  3995  1337  3996  2272  1310
-CONVEX 1496    GT_PK(2,2)      1338  3997  1311  3994  2404  1339
-CONVEX 1497    GT_PK(2,2)      1338  3997  1311  3996  3224  1310
-CONVEX 1498    GT_PK(2,2)      1388  3998  1364  3999  4000  1387
-CONVEX 1499    GT_PK(2,2)      1388  3999  1387  4001  2267  1409
-CONVEX 1500    GT_PK(2,2)      1388  4002  1410  4001  2353  1409
-CONVEX 1501    GT_PK(2,2)      1388  3998  1364  4003  3126  1365
-CONVEX 1502    GT_PK(2,2)      1363  4004  1362  4005  2279  1337
-CONVEX 1503    GT_PK(2,2)      1363  4006  1338  4005  3995  1337
-CONVEX 1504    GT_PK(2,2)      1363  4006  1338  4007  3993  1364
-CONVEX 1505    GT_PK(2,2)      1363  4007  1364  4008  4000  1387
-CONVEX 1506    GT_PK(2,2)      1363  4008  1387  4009  2268  1386
-CONVEX 1507    GT_PK(2,2)      1363  4004  1362  4009  2276  1386
-CONVEX 1508    GT_PK(2,2)      1109  4010  1144  4011  3547  1145
-CONVEX 1509    GT_PK(2,2)      1109  4010  1144  4012  4013  1108
-CONVEX 1510    GT_PK(2,2)      1037  4014  1038  4015  3139  1075
-CONVEX 1511    GT_PK(2,2)      1037  4016  1074  4015  4017  1075
-CONVEX 1512    GT_PK(2,2)      962  4018  1000  4019  2283  1001
-CONVEX 1513    GT_PK(2,2)      962  4020  963  4019  3131  1001
-CONVEX 1514    GT_PK(2,2)      962  4021  924  4022  3798  923
-CONVEX 1515    GT_PK(2,2)      962  4020  963  4021  3134  924
-CONVEX 1516    GT_PK(2,2)      926  4023  886  4024  3147  925
-CONVEX 1517    GT_PK(2,2)      926  4024  925  4025  3133  964
-CONVEX 1518    GT_PK(2,2)      926  4026  927  4027  2296  887
-CONVEX 1519    GT_PK(2,2)      926  4023  886  4027  3151  887
-CONVEX 1520    GT_PK(2,2)      926  4028  965  4025  3143  964
-CONVEX 1521    GT_PK(2,2)      926  4028  965  4026  3140  927
-CONVEX 1522    GT_PK(2,2)      1349  4029  1374  4030  3164  1348
-CONVEX 1523    GT_PK(2,2)      1349  4031  1321  4030  3170  1348
-CONVEX 1524    GT_PK(2,2)      1349  4029  1374  4032  4033  1350
-CONVEX 1525    GT_PK(2,2)      1191  4034  1157  4035  2769  1192
-CONVEX 1526    GT_PK(2,2)      1191  4036  1190  4037  3244  1156
-CONVEX 1527    GT_PK(2,2)      1191  4034  1157  4037  4038  1156
-CONVEX 1528    GT_PK(2,2)      1292  4039  1261  4040  3189  1293
-CONVEX 1529    GT_PK(2,2)      1292  4041  1321  4042  3172  1291
-CONVEX 1530    GT_PK(2,2)      1226  4043  1259  4044  4045  1258
-CONVEX 1531    GT_PK(2,2)      1226  4046  1193  4047  1740  1192
-CONVEX 1532    GT_PK(2,2)      1260  4048  1292  4049  4039  1261
-CONVEX 1533    GT_PK(2,2)      1260  4050  1259  4051  4052  1291
-CONVEX 1534    GT_PK(2,2)      1260  4048  1292  4051  4042  1291
-CONVEX 1535    GT_PK(2,2)      1114  4053  1077  4054  3198  1078
-CONVEX 1536    GT_PK(2,2)      1114  4053  1077  4055  3195  1113
-CONVEX 1537    GT_PK(2,2)      1114  4054  1078  4056  2380  1115
-CONVEX 1538    GT_PK(2,2)      1114  4057  1150  4056  3206  1115
-CONVEX 1539    GT_PK(2,2)      1114  4055  1113  4058  2373  1149
-CONVEX 1540    GT_PK(2,2)      1114  4057  1150  4058  2377  1149
-CONVEX 1541    GT_PK(2,2)      1283  4059  1251  4060  3213  1282
-CONVEX 1542    GT_PK(2,2)      1283  4061  1313  4062  4063  1284
-CONVEX 1543    GT_PK(2,2)      1283  4064  1252  4062  2402  1284
-CONVEX 1544    GT_PK(2,2)      1283  4059  1251  4064  3218  1252
-CONVEX 1545    GT_PK(2,2)      1283  4060  1282  4065  2407  1312
-CONVEX 1546    GT_PK(2,2)      1283  4061  1313  4065  4066  1312
-CONVEX 1547    GT_PK(2,2)      1340  4067  1366  4068  3232  1341
-CONVEX 1548    GT_PK(2,2)      1340  4069  1313  4070  4066  1312
-CONVEX 1549    GT_PK(2,2)      1340  4069  1313  4068  4071  1341
-CONVEX 1550    GT_PK(2,2)      1340  4070  1312  4072  2405  1339
-CONVEX 1551    GT_PK(2,2)      1340  4073  1365  4072  3128  1339
-CONVEX 1552    GT_PK(2,2)      1340  4067  1366  4073  4074  1365
-CONVEX 1553    GT_PK(2,2)      1315  4075  1342  4076  3234  1343
-CONVEX 1554    GT_PK(2,2)      1315  4077  1286  4078  3160  1285
-CONVEX 1555    GT_PK(2,2)      1315  4077  1286  4079  4080  1316
-CONVEX 1556    GT_PK(2,2)      1315  4076  1343  4079  2342  1316
-CONVEX 1557    GT_PK(2,2)      1120  4081  1155  4082  3238  1119
-CONVEX 1558    GT_PK(2,2)      1120  4081  1155  4083  3243  1156
-CONVEX 1559    GT_PK(2,2)      1120  4084  1083  4082  3639  1119
-CONVEX 1560    GT_PK(2,2)      626  4085  665  4086  3258  625
-CONVEX 1561    GT_PK(2,2)      626  4087  666  4085  3251  665
-CONVEX 1562    GT_PK(2,2)      626  4088  587  4086  2428  625
-CONVEX 1563    GT_PK(2,2)      703  4089  704  4090  1775  744
-CONVEX 1564    GT_PK(2,2)      703  4091  664  4089  3254  704
-CONVEX 1565    GT_PK(2,2)      703  4092  743  4090  1529  744
-CONVEX 1566    GT_PK(2,2)      703  4091  664  4093  3256  663
-CONVEX 1567    GT_PK(2,2)      703  4094  702  4093  3296  663
-CONVEX 1568    GT_PK(2,2)      703  4094  702  4092  3297  743
-CONVEX 1569    GT_PK(2,2)      503  4095  504  4096  4097  465
-CONVEX 1570    GT_PK(2,2)      503  4095  504  4098  3283  542
-CONVEX 1571    GT_PK(2,2)      499  4099  460  4100  1982  498
-CONVEX 1572    GT_PK(2,2)      466  4101  504  4102  4097  465
-CONVEX 1573    GT_PK(2,2)      466  4103  428  4104  1556  467
-CONVEX 1574    GT_PK(2,2)      466  4105  505  4104  3264  467
-CONVEX 1575    GT_PK(2,2)      466  4101  504  4105  3279  505
-CONVEX 1576    GT_PK(2,2)      466  4106  427  4102  4107  465
-CONVEX 1577    GT_PK(2,2)      466  4106  427  4103  2507  428
-CONVEX 1578    GT_PK(2,2)      660  4108  661  4109  4110  700
-CONVEX 1579    GT_PK(2,2)      660  4111  621  4108  3305  661
-CONVEX 1580    GT_PK(2,2)      701  4112  702  4113  3294  741
-CONVEX 1581    GT_PK(2,2)      701  4112  702  4114  3295  662
-CONVEX 1582    GT_PK(2,2)      701  4114  662  4115  3301  661
-CONVEX 1583    GT_PK(2,2)      701  4115  661  4116  4110  700
-CONVEX 1584    GT_PK(2,2)      701  4117  740  4116  3269  700
-CONVEX 1585    GT_PK(2,2)      701  4117  740  4113  3268  741
-CONVEX 1586    GT_PK(2,2)      583  4118  584  4119  3290  623
-CONVEX 1587    GT_PK(2,2)      583  4120  622  4119  3299  623
-CONVEX 1588    GT_PK(2,2)      583  4118  584  4121  3292  544
-CONVEX 1589    GT_PK(2,2)      583  4121  544  4122  3284  543
-CONVEX 1590    GT_PK(2,2)      583  4122  543  4123  3281  582
-CONVEX 1591    GT_PK(2,2)      583  4120  622  4123  3303  582
-CONVEX 1592    GT_PK(2,2)      1091  4124  1054  4125  3322  1092
-CONVEX 1593    GT_PK(2,2)      1091  4126  1127  4127  4128  1090
-CONVEX 1594    GT_PK(2,2)      1053  4129  1014  4130  2783  1052
-CONVEX 1595    GT_PK(2,2)      1053  4131  1090  4130  3692  1052
-CONVEX 1596    GT_PK(2,2)      1053  4129  1014  4132  2787  1015
-CONVEX 1597    GT_PK(2,2)      1053  4133  1054  4132  3342  1015
-CONVEX 1598    GT_PK(2,2)      1053  4134  1091  4131  4127  1090
-CONVEX 1599    GT_PK(2,2)      1053  4134  1091  4133  4124  1054
-CONVEX 1600    GT_PK(2,2)      425  4135  388  4136  3358  387
-CONVEX 1601    GT_PK(2,2)      389  4137  427  4138  2508  390
-CONVEX 1602    GT_PK(2,2)      389  4139  388  4140  3356  352
-CONVEX 1603    GT_PK(2,2)      389  4141  353  4138  2518  390
-CONVEX 1604    GT_PK(2,2)      389  4141  353  4140  2516  352
-CONVEX 1605    GT_PK(2,2)      350  4142  314  4143  1701  315
-CONVEX 1606    GT_PK(2,2)      350  4144  351  4143  3354  315
-CONVEX 1607    GT_PK(2,2)      350  4145  349  4142  3744  314
-CONVEX 1608    GT_PK(2,2)      350  4144  351  4146  3357  387
-CONVEX 1609    GT_PK(2,2)      877  4147  838  4148  2520  878
-CONVEX 1610    GT_PK(2,2)      877  4149  837  4147  3362  838
-CONVEX 1611    GT_PK(2,2)      800  4150  799  4151  3365  839
-CONVEX 1612    GT_PK(2,2)      800  4152  761  4153  2668  801
-CONVEX 1613    GT_PK(2,2)      800  4152  761  4154  1919  760
-CONVEX 1614    GT_PK(2,2)      800  4150  799  4154  3368  760
-CONVEX 1615    GT_PK(2,2)      676  4155  637  4156  3370  636
-CONVEX 1616    GT_PK(2,2)      676  4156  636  4157  4158  675
-CONVEX 1617    GT_PK(2,2)      676  4159  715  4157  2538  675
-CONVEX 1618    GT_PK(2,2)      676  4159  715  4160  3517  716
-CONVEX 1619    GT_PK(2,2)      676  4161  677  4160  1888  716
-CONVEX 1620    GT_PK(2,2)      676  4155  637  4161  3373  677
-CONVEX 1621    GT_PK(2,2)      479  4162  518  4163  3374  517
-CONVEX 1622    GT_PK(2,2)      479  4163  517  4164  2528  478
-CONVEX 1623    GT_PK(2,2)      479  4165  440  4164  3037  478
-CONVEX 1624    GT_PK(2,2)      479  4162  518  4166  3910  480
-CONVEX 1625    GT_PK(2,2)      515  4167  516  4168  2526  477
-CONVEX 1626    GT_PK(2,2)      475  4169  436  4170  3035  437
-CONVEX 1627    GT_PK(2,2)      511  4171  472  4172  4173  510
-CONVEX 1628    GT_PK(2,2)      511  4171  472  4174  3865  473
-CONVEX 1629    GT_PK(2,2)      550  4175  549  4176  3859  589
-CONVEX 1630    GT_PK(2,2)      550  4175  549  4177  3003  510
-CONVEX 1631    GT_PK(2,2)      550  4178  511  4177  4172  510
-CONVEX 1632    GT_PK(2,2)      635  4179  636  4180  4158  675
-CONVEX 1633    GT_PK(2,2)      635  4181  596  4179  2534  636
-CONVEX 1634    GT_PK(2,2)      673  4182  713  4183  3432  712
-CONVEX 1635    GT_PK(2,2)      593  4184  592  4185  4186  632
-CONVEX 1636    GT_PK(2,2)      593  4184  592  4187  4188  553
-CONVEX 1637    GT_PK(2,2)      709  4189  749  4190  4191  710
-CONVEX 1638    GT_PK(2,2)      709  4189  749  4192  3411  708
-CONVEX 1639    GT_PK(2,2)      709  4190  710  4193  3379  670
-CONVEX 1640    GT_PK(2,2)      709  4192  708  4193  3395  670
-CONVEX 1641    GT_PK(2,2)      905  4194  865  4195  3403  904
-CONVEX 1642    GT_PK(2,2)      905  4196  943  4195  4197  904
-CONVEX 1643    GT_PK(2,2)      827  4198  787  4199  3407  788
-CONVEX 1644    GT_PK(2,2)      827  4198  787  4200  2546  826
-CONVEX 1645    GT_PK(2,2)      866  4201  867  4202  4203  906
-CONVEX 1646    GT_PK(2,2)      866  4204  905  4202  4205  906
-CONVEX 1647    GT_PK(2,2)      866  4204  905  4206  4194  865
-CONVEX 1648    GT_PK(2,2)      866  4207  827  4201  4208  867
-CONVEX 1649    GT_PK(2,2)      866  4206  865  4209  3402  826
-CONVEX 1650    GT_PK(2,2)      866  4207  827  4209  4200  826
-CONVEX 1651    GT_PK(2,2)      832  4210  831  4211  3439  792
-CONVEX 1652    GT_PK(2,2)      832  4211  792  4212  3387  793
-CONVEX 1653    GT_PK(2,2)      832  4213  833  4212  3507  793
-CONVEX 1654    GT_PK(2,2)      832  4213  833  4214  3504  872
-CONVEX 1655    GT_PK(2,2)      830  4215  831  4216  3440  791
-CONVEX 1656    GT_PK(2,2)      828  4217  867  4218  4219  868
-CONVEX 1657    GT_PK(2,2)      828  4220  789  4221  3442  788
-CONVEX 1658    GT_PK(2,2)      828  4222  827  4221  4199  788
-CONVEX 1659    GT_PK(2,2)      828  4222  827  4217  4208  867
-CONVEX 1660    GT_PK(2,2)      986  4223  1025  4224  3448  1024
-CONVEX 1661    GT_PK(2,2)      986  4225  985  4224  2602  1024
-CONVEX 1662    GT_PK(2,2)      986  4226  947  4227  3457  948
-CONVEX 1663    GT_PK(2,2)      986  4226  947  4225  4228  985
-CONVEX 1664    GT_PK(2,2)      907  4229  867  4230  4219  868
-CONVEX 1665    GT_PK(2,2)      907  4229  867  4231  4203  906
-CONVEX 1666    GT_PK(2,2)      907  4232  945  4231  4233  906
-CONVEX 1667    GT_PK(2,2)      990  4234  991  4235  3460  1029
-CONVEX 1668    GT_PK(2,2)      990  4235  1029  4236  3429  1028
-CONVEX 1669    GT_PK(2,2)      990  4237  989  4236  2619  1028
-CONVEX 1670    GT_PK(2,2)      990  4238  951  4237  3485  989
-CONVEX 1671    GT_PK(2,2)      990  4234  991  4239  3476  952
-CONVEX 1672    GT_PK(2,2)      990  4238  951  4239  3489  952
-CONVEX 1673    GT_PK(2,2)      1072  4240  1073  4241  4242  1035
-CONVEX 1674    GT_PK(2,2)      1072  4243  1109  4244  4012  1108
-CONVEX 1675    GT_PK(2,2)      1072  4243  1109  4240  4245  1073
-CONVEX 1676    GT_PK(2,2)      994  4246  993  4247  3471  1032
-CONVEX 1677    GT_PK(2,2)      994  4248  1033  4247  3463  1032
-CONVEX 1678    GT_PK(2,2)      994  4246  993  4249  4250  955
-CONVEX 1679    GT_PK(2,2)      994  4251  956  4249  4252  955
-CONVEX 1680    GT_PK(2,2)      954  4253  953  4254  3478  915
-CONVEX 1681    GT_PK(2,2)      954  4255  993  4256  4250  955
-CONVEX 1682    GT_PK(2,2)      954  4255  993  4257  3469  992
-CONVEX 1683    GT_PK(2,2)      954  4253  953  4257  3477  992
-CONVEX 1684    GT_PK(2,2)      954  4258  916  4256  4259  955
-CONVEX 1685    GT_PK(2,2)      954  4258  916  4254  4260  915
-CONVEX 1686    GT_PK(2,2)      1238  4261  1269  4262  2722  1237
-CONVEX 1687    GT_PK(2,2)      1238  4263  1205  4262  3491  1237
-CONVEX 1688    GT_PK(2,2)      1238  4261  1269  4264  2726  1270
-CONVEX 1689    GT_PK(2,2)      1238  4265  1239  4264  3613  1270
-CONVEX 1690    GT_PK(2,2)      1238  4263  1205  4266  3583  1206
-CONVEX 1691    GT_PK(2,2)      1238  4265  1239  4266  3609  1206
-CONVEX 1692    GT_PK(2,2)      1210  4267  1243  4268  2748  1211
-CONVEX 1693    GT_PK(2,2)      1210  4267  1243  4269  3617  1242
-CONVEX 1694    GT_PK(2,2)      795  4270  834  4271  3510  835
-CONVEX 1695    GT_PK(2,2)      795  4272  755  4273  3518  756
-CONVEX 1696    GT_PK(2,2)      795  4270  834  4274  3512  794
-CONVEX 1697    GT_PK(2,2)      795  4272  755  4274  3515  794
-CONVEX 1698    GT_PK(2,2)      795  4275  796  4273  1889  756
-CONVEX 1699    GT_PK(2,2)      795  4275  796  4271  1895  835
-CONVEX 1700    GT_PK(2,2)      1403  4276  1404  4277  2681  1422
-CONVEX 1701    GT_PK(2,2)      1403  4278  1402  4279  4280  1381
-CONVEX 1702    GT_PK(2,2)      1333  4281  1334  4282  3570  1306
-CONVEX 1703    GT_PK(2,2)      1333  4283  1305  4282  4284  1306
-CONVEX 1704    GT_PK(2,2)      1296  4285  1324  4286  4287  1297
-CONVEX 1705    GT_PK(2,2)      1296  4288  1267  4289  3596  1266
-CONVEX 1706    GT_PK(2,2)      1296  4288  1267  4286  2737  1297
-CONVEX 1707    GT_PK(2,2)      1325  4290  1324  4291  4292  1351
-CONVEX 1708    GT_PK(2,2)      1325  4293  1326  4294  3573  1298
-CONVEX 1709    GT_PK(2,2)      1325  4293  1326  4291  3577  1351
-CONVEX 1710    GT_PK(2,2)      1325  4294  1298  4295  2717  1297
-CONVEX 1711    GT_PK(2,2)      1325  4290  1324  4295  4287  1297
-CONVEX 1712    GT_PK(2,2)      1398  4296  1353  4297  4298  1376
-CONVEX 1713    GT_PK(2,2)      1146  4299  1147  4300  2708  1181
-CONVEX 1714    GT_PK(2,2)      1146  4301  1180  4300  3542  1181
-CONVEX 1715    GT_PK(2,2)      1146  4301  1180  4302  3544  1145
-CONVEX 1716    GT_PK(2,2)      1276  4303  1305  4304  4284  1306
-CONVEX 1717    GT_PK(2,2)      1276  4305  1277  4304  3568  1306
-CONVEX 1718    GT_PK(2,2)      1276  4305  1277  4306  3555  1245
-CONVEX 1719    GT_PK(2,2)      1276  4306  1245  4307  2701  1244
-CONVEX 1720    GT_PK(2,2)      1352  4308  1326  4309  3574  1327
-CONVEX 1721    GT_PK(2,2)      1352  4308  1326  4310  3576  1375
-CONVEX 1722    GT_PK(2,2)      1352  4311  1353  4309  4312  1327
-CONVEX 1723    GT_PK(2,2)      1352  4310  1375  4313  4314  1376
-CONVEX 1724    GT_PK(2,2)      1352  4311  1353  4313  4298  1376
-CONVEX 1725    GT_PK(2,2)      1202  4315  1203  4316  3607  1169
-CONVEX 1726    GT_PK(2,2)      1202  4316  1169  4317  2734  1168
-CONVEX 1727    GT_PK(2,2)      1202  4318  1235  4319  3599  1234
-CONVEX 1728    GT_PK(2,2)      1202  4318  1235  4315  3601  1203
-CONVEX 1729    GT_PK(2,2)      1202  4320  1201  4319  1863  1234
-CONVEX 1730    GT_PK(2,2)      1202  4320  1201  4317  2572  1168
-CONVEX 1731    GT_PK(2,2)      1275  4321  1274  4322  3620  1304
-CONVEX 1732    GT_PK(2,2)      1275  4321  1274  4323  3615  1243
-CONVEX 1733    GT_PK(2,2)      1275  4324  1305  4322  4325  1304
-CONVEX 1734    GT_PK(2,2)      1275  4326  1276  4324  4303  1305
-CONVEX 1735    GT_PK(2,2)      1275  4323  1243  4327  2747  1244
-CONVEX 1736    GT_PK(2,2)      1275  4326  1276  4327  4307  1244
-CONVEX 1737    GT_PK(2,2)      1118  4328  1082  4329  3647  1081
-CONVEX 1738    GT_PK(2,2)      1118  4330  1117  4329  3650  1081
-CONVEX 1739    GT_PK(2,2)      1118  4328  1082  4331  3638  1119
-CONVEX 1740    GT_PK(2,2)      1118  4330  1117  4332  3652  1153
-CONVEX 1741    GT_PK(2,2)      1118  4333  1154  4331  3239  1119
-CONVEX 1742    GT_PK(2,2)      1118  4333  1154  4332  2414  1153
-CONVEX 1743    GT_PK(2,2)      1086  4334  1123  4335  2792  1087
-CONVEX 1744    GT_PK(2,2)      1086  4336  1122  4334  3673  1123
-CONVEX 1745    GT_PK(2,2)      1086  4337  1049  4335  3681  1087
-CONVEX 1746    GT_PK(2,2)      1121  4338  1157  4339  4038  1156
-CONVEX 1747    GT_PK(2,2)      1121  4340  1122  4338  3676  1157
-CONVEX 1748    GT_PK(2,2)      1121  4341  1120  4339  4083  1156
-CONVEX 1749    GT_PK(2,2)      935  4342  973  4343  4344  974
-CONVEX 1750    GT_PK(2,2)      935  4345  895  4346  3328  896
-CONVEX 1751    GT_PK(2,2)      935  4347  936  4346  1797  896
-CONVEX 1752    GT_PK(2,2)      935  4343  974  4347  2778  936
-CONVEX 1753    GT_PK(2,2)      934  4348  895  4349  1959  894
-CONVEX 1754    GT_PK(2,2)      934  4350  973  4351  3677  972
-CONVEX 1755    GT_PK(2,2)      934  4352  935  4348  4345  895
-CONVEX 1756    GT_PK(2,2)      934  4352  935  4350  4342  973
-CONVEX 1757    GT_PK(2,2)      934  4349  894  4353  3838  933
-CONVEX 1758    GT_PK(2,2)      934  4351  972  4353  2750  933
-CONVEX 1759    GT_PK(2,2)      1012  4354  1051  4355  2788  1013
-CONVEX 1760    GT_PK(2,2)      1012  4356  974  4355  2780  1013
-CONVEX 1761    GT_PK(2,2)      1012  4357  973  4356  4344  974
-CONVEX 1762    GT_PK(2,2)      1012  4357  973  4358  3678  1011
-CONVEX 1763    GT_PK(2,2)      1012  4359  1050  4358  3682  1011
-CONVEX 1764    GT_PK(2,2)      1012  4359  1050  4354  4360  1051
-CONVEX 1765    GT_PK(2,2)      1159  4361  1160  4362  3683  1124
-CONVEX 1766    GT_PK(2,2)      1159  4363  1193  4364  1741  1158
-CONVEX 1767    GT_PK(2,2)      1159  4365  1194  4363  4366  1193
-CONVEX 1768    GT_PK(2,2)      1159  4361  1160  4365  3687  1194
-CONVEX 1769    GT_PK(2,2)      1159  4367  1123  4364  3675  1158
-CONVEX 1770    GT_PK(2,2)      1159  4362  1124  4367  2790  1123
-CONVEX 1771    GT_PK(2,2)      1088  4368  1124  4369  3685  1125
-CONVEX 1772    GT_PK(2,2)      1088  4370  1089  4369  4371  1125
-CONVEX 1773    GT_PK(2,2)      1088  4368  1124  4372  2791  1087
-CONVEX 1774    GT_PK(2,2)      1088  4370  1089  4373  3689  1051
-CONVEX 1775    GT_PK(2,2)      1088  4374  1050  4372  3680  1087
-CONVEX 1776    GT_PK(2,2)      1088  4374  1050  4373  4360  1051
-CONVEX 1777    GT_PK(2,2)      1128  4375  1127  4376  4377  1163
-CONVEX 1778    GT_PK(2,2)      1128  4378  1092  4379  3308  1129
-CONVEX 1779    GT_PK(2,2)      1128  4380  1091  4378  4125  1092
-CONVEX 1780    GT_PK(2,2)      1128  4380  1091  4375  4126  1127
-CONVEX 1781    GT_PK(2,2)      1128  4381  1164  4379  1542  1129
-CONVEX 1782    GT_PK(2,2)      1128  4376  1163  4381  2793  1164
-CONVEX 1783    GT_PK(2,2)      1161  4382  1160  4383  3684  1125
-CONVEX 1784    GT_PK(2,2)      1161  4384  1195  4385  3185  1196
-CONVEX 1785    GT_PK(2,2)      1161  4382  1160  4384  3686  1195
-CONVEX 1786    GT_PK(2,2)      1162  4386  1163  4387  2795  1197
-CONVEX 1787    GT_PK(2,2)      1162  4388  1127  4386  4377  1163
-CONVEX 1788    GT_PK(2,2)      1162  4387  1197  4389  1964  1196
-CONVEX 1789    GT_PK(2,2)      1162  4390  1161  4389  4385  1196
-CONVEX 1790    GT_PK(2,2)      271  4391  305  4392  2917  306
-CONVEX 1791    GT_PK(2,2)      271  4393  272  4392  3702  306
-CONVEX 1792    GT_PK(2,2)      240  4394  241  4395  1972  274
-CONVEX 1793    GT_PK(2,2)      273  4396  307  4397  2009  308
-CONVEX 1794    GT_PK(2,2)      273  4398  272  4396  3701  307
-CONVEX 1795    GT_PK(2,2)      273  4399  274  4397  2897  308
-CONVEX 1796    GT_PK(2,2)      273  4400  240  4399  4395  274
-CONVEX 1797    GT_PK(2,2)      67  4401  91  4402  3705  90
-CONVEX 1798    GT_PK(2,2)      67  4403  66  4402  2828  90
-CONVEX 1799    GT_PK(2,2)      67  4403  66  4404  1978  45
-CONVEX 1800    GT_PK(2,2)      67  4405  46  4404  3709  45
-CONVEX 1801    GT_PK(2,2)      47  4406  28  4407  2821  29
-CONVEX 1802    GT_PK(2,2)      47  4408  46  4406  3710  28
-CONVEX 1803    GT_PK(2,2)      47  4407  29  4409  2820  48
-CONVEX 1804    GT_PK(2,2)      47  4410  69  4409  4411  48
-CONVEX 1805    GT_PK(2,2)      567  4412  528  4413  2841  527
-CONVEX 1806    GT_PK(2,2)      567  4414  568  4412  3722  528
-CONVEX 1807    GT_PK(2,2)      607  4415  608  4416  2944  647
-CONVEX 1808    GT_PK(2,2)      607  4417  568  4415  3728  608
-CONVEX 1809    GT_PK(2,2)      607  4418  567  4417  4414  568
-CONVEX 1810    GT_PK(2,2)      607  4419  646  4416  3695  647
-CONVEX 1811    GT_PK(2,2)      607  4419  646  4420  2815  606
-CONVEX 1812    GT_PK(2,2)      607  4418  567  4420  4421  606
-CONVEX 1813    GT_PK(2,2)      386  4422  349  4423  3748  385
-CONVEX 1814    GT_PK(2,2)      386  4423  385  4424  2856  423
-CONVEX 1815    GT_PK(2,2)      386  4425  350  4426  4146  387
-CONVEX 1816    GT_PK(2,2)      386  4425  350  4422  4145  349
-CONVEX 1817    GT_PK(2,2)      496  4427  535  4428  3777  497
-CONVEX 1818    GT_PK(2,2)      496  4429  457  4430  2885  495
-CONVEX 1819    GT_PK(2,2)      496  4431  458  4428  3785  497
-CONVEX 1820    GT_PK(2,2)      496  4431  458  4429  3787  457
-CONVEX 1821    GT_PK(2,2)      534  4432  535  4433  3774  574
-CONVEX 1822    GT_PK(2,2)      534  4434  573  4435  3809  533
-CONVEX 1823    GT_PK(2,2)      534  4434  573  4433  3807  574
-CONVEX 1824    GT_PK(2,2)      534  4436  495  4435  2882  533
-CONVEX 1825    GT_PK(2,2)      534  4437  496  4436  4430  495
-CONVEX 1826    GT_PK(2,2)      534  4437  496  4432  4427  535
-CONVEX 1827    GT_PK(2,2)      803  4438  763  4439  3805  764
-CONVEX 1828    GT_PK(2,2)      803  4438  763  4440  3801  802
-CONVEX 1829    GT_PK(2,2)      804  4441  843  4442  3799  844
-CONVEX 1830    GT_PK(2,2)      804  4443  765  4444  2926  805
-CONVEX 1831    GT_PK(2,2)      804  4442  844  4444  2934  805
-CONVEX 1832    GT_PK(2,2)      804  4443  765  4445  2931  764
-CONVEX 1833    GT_PK(2,2)      804  4446  803  4445  4439  764
-CONVEX 1834    GT_PK(2,2)      804  4446  803  4441  4447  843
-CONVEX 1835    GT_PK(2,2)      693  4448  692  4449  4450  732
-CONVEX 1836    GT_PK(2,2)      693  4451  733  4449  4452  732
-CONVEX 1837    GT_PK(2,2)      693  4451  733  4453  4454  694
-CONVEX 1838    GT_PK(2,2)      693  4448  692  4455  3815  653
-CONVEX 1839    GT_PK(2,2)      731  4456  692  4457  4450  732
-CONVEX 1840    GT_PK(2,2)      731  4458  771  4457  4459  732
-CONVEX 1841    GT_PK(2,2)      731  4460  691  4461  2981  730
-CONVEX 1842    GT_PK(2,2)      731  4456  692  4460  3816  691
-CONVEX 1843    GT_PK(2,2)      731  4462  770  4461  3852  730
-CONVEX 1844    GT_PK(2,2)      731  4462  770  4458  4463  771
-CONVEX 1845    GT_PK(2,2)      892  4464  932  4465  1948  931
-CONVEX 1846    GT_PK(2,2)      892  4466  891  4465  2988  931
-CONVEX 1847    GT_PK(2,2)      892  4467  893  4464  3840  932
-CONVEX 1848    GT_PK(2,2)      892  4467  893  4468  3841  853
-CONVEX 1849    GT_PK(2,2)      816  4469  815  4470  3835  855
-CONVEX 1850    GT_PK(2,2)      816  4471  856  4470  3329  855
-CONVEX 1851    GT_PK(2,2)      816  4472  777  4473  3325  817
-CONVEX 1852    GT_PK(2,2)      816  4471  856  4473  3336  817
-CONVEX 1853    GT_PK(2,2)      814  4474  815  4475  3834  854
-CONVEX 1854    GT_PK(2,2)      814  4476  853  4475  3842  854
-CONVEX 1855    GT_PK(2,2)      814  4477  774  4478  2997  813
-CONVEX 1856    GT_PK(2,2)      814  4476  853  4478  4479  813
-CONVEX 1857    GT_PK(2,2)      772  4480  812  4481  3844  773
-CONVEX 1858    GT_PK(2,2)      772  4482  733  4481  4483  773
-CONVEX 1859    GT_PK(2,2)      772  4482  733  4484  4452  732
-CONVEX 1860    GT_PK(2,2)      772  4485  771  4484  4459  732
-CONVEX 1861    GT_PK(2,2)      849  4486  848  4487  3813  888
-CONVEX 1862    GT_PK(2,2)      849  4488  889  4487  3845  888
-CONVEX 1863    GT_PK(2,2)      734  4489  695  4490  3848  694
-CONVEX 1864    GT_PK(2,2)      734  4491  774  4492  2998  773
-CONVEX 1865    GT_PK(2,2)      734  4491  774  4493  4494  735
-CONVEX 1866    GT_PK(2,2)      734  4489  695  4493  4495  735
-CONVEX 1867    GT_PK(2,2)      734  4496  733  4492  4483  773
-CONVEX 1868    GT_PK(2,2)      734  4496  733  4490  4454  694
-CONVEX 1869    GT_PK(2,2)      471  4497  510  4498  3005  509
-CONVEX 1870    GT_PK(2,2)      471  4499  472  4497  4173  510
-CONVEX 1871    GT_PK(2,2)      435  4500  436  4501  3033  397
-CONVEX 1872    GT_PK(2,2)      435  4501  397  4502  2078  396
-CONVEX 1873    GT_PK(2,2)      435  4503  434  4502  3861  396
-CONVEX 1874    GT_PK(2,2)      435  4503  434  4504  3864  473
-CONVEX 1875    GT_PK(2,2)      604  4505  643  4506  3873  603
-CONVEX 1876    GT_PK(2,2)      604  4505  643  4507  3875  644
-CONVEX 1877    GT_PK(2,2)      487  4508  526  4509  3885  525
-CONVEX 1878    GT_PK(2,2)      487  4510  488  4508  3888  526
-CONVEX 1879    GT_PK(2,2)      487  4511  486  4509  3891  525
-CONVEX 1880    GT_PK(2,2)      485  4512  524  4513  3024  523
-CONVEX 1881    GT_PK(2,2)      485  4514  486  4512  3890  524
-CONVEX 1882    GT_PK(2,2)      485  4515  484  4513  3022  523
-CONVEX 1883    GT_PK(2,2)      485  4514  486  4516  4517  447
-CONVEX 1884    GT_PK(2,2)      481  4518  482  4519  3027  520
-CONVEX 1885    GT_PK(2,2)      481  4520  519  4519  3906  520
-CONVEX 1886    GT_PK(2,2)      481  4518  482  4521  3895  443
-CONVEX 1887    GT_PK(2,2)      481  4520  519  4522  3909  480
-CONVEX 1888    GT_PK(2,2)      481  4523  442  4521  3868  443
-CONVEX 1889    GT_PK(2,2)      481  4523  442  4522  4524  480
-CONVEX 1890    GT_PK(2,2)      324  4525  288  4526  3915  289
-CONVEX 1891    GT_PK(2,2)      324  4527  325  4526  2141  289
-CONVEX 1892    GT_PK(2,2)      324  4528  323  4529  3049  360
-CONVEX 1893    GT_PK(2,2)      324  4525  288  4528  3913  323
-CONVEX 1894    GT_PK(2,2)      324  4530  361  4529  2068  360
-CONVEX 1895    GT_PK(2,2)      324  4530  361  4527  2069  325
-CONVEX 1896    GT_PK(2,2)      179  4531  180  4532  3061  211
-CONVEX 1897    GT_PK(2,2)      179  4532  211  4533  4534  210
-CONVEX 1898    GT_PK(2,2)      179  4535  178  4533  4536  210
-CONVEX 1899    GT_PK(2,2)      179  4535  178  4537  4538  149
-CONVEX 1900    GT_PK(2,2)      179  4539  150  4537  3924  149
-CONVEX 1901    GT_PK(2,2)      179  4539  150  4531  3921  180
-CONVEX 1902    GT_PK(2,2)      243  4540  211  4541  4534  210
-CONVEX 1903    GT_PK(2,2)      243  4542  244  4540  3918  211
-CONVEX 1904    GT_PK(2,2)      243  4541  210  4543  4544  242
-CONVEX 1905    GT_PK(2,2)      243  4542  244  4545  3920  277
-CONVEX 1906    GT_PK(2,2)      243  4546  276  4543  1985  242
-CONVEX 1907    GT_PK(2,2)      243  4545  277  4546  3751  276
-CONVEX 1908    GT_PK(2,2)      123  4547  150  4548  3923  122
-CONVEX 1909    GT_PK(2,2)      123  4549  97  4548  3930  122
-CONVEX 1910    GT_PK(2,2)      123  4550  151  4551  2181  124
-CONVEX 1911    GT_PK(2,2)      123  4547  150  4550  3922  151
-CONVEX 1912    GT_PK(2,2)      123  4551  124  4552  1668  98
-CONVEX 1913    GT_PK(2,2)      123  4549  97  4552  3935  98
-CONVEX 1914    GT_PK(2,2)      95  4553  121  4554  4555  120
-CONVEX 1915    GT_PK(2,2)      95  4553  121  4556  3927  96
-CONVEX 1916    GT_PK(2,2)      70  4557  69  4558  4411  48
-CONVEX 1917    GT_PK(2,2)      70  4559  93  4557  3936  69
-CONVEX 1918    GT_PK(2,2)      50  4560  32  4561  4562  31
-CONVEX 1919    GT_PK(2,2)      50  4563  51  4560  3941  32
-CONVEX 1920    GT_PK(2,2)      368  4564  367  4565  3012  405
-CONVEX 1921    GT_PK(2,2)      368  4566  331  4564  3952  367
-CONVEX 1922    GT_PK(2,2)      446  4567  484  4568  3902  445
-CONVEX 1923    GT_PK(2,2)      446  4569  485  4570  4516  447
-CONVEX 1924    GT_PK(2,2)      446  4569  485  4567  4515  484
-CONVEX 1925    GT_PK(2,2)      267  4571  302  4572  2230  268
-CONVEX 1926    GT_PK(2,2)      267  4572  268  4573  2889  234
-CONVEX 1927    GT_PK(2,2)      267  4574  233  4573  2241  234
-CONVEX 1928    GT_PK(2,2)      264  4575  263  4576  4577  298
-CONVEX 1929    GT_PK(2,2)      133  4578  134  4579  3956  106
-CONVEX 1930    GT_PK(2,2)      133  4580  105  4581  2221  132
-CONVEX 1931    GT_PK(2,2)      133  4580  105  4579  2219  106
-CONVEX 1932    GT_PK(2,2)      133  4582  162  4581  2229  132
-CONVEX 1933    GT_PK(2,2)      133  4583  163  4582  4584  162
-CONVEX 1934    GT_PK(2,2)      133  4578  134  4583  3957  163
-CONVEX 1935    GT_PK(2,2)      135  4585  108  4586  3124  107
-CONVEX 1936    GT_PK(2,2)      135  4587  134  4586  3955  107
-CONVEX 1937    GT_PK(2,2)      135  4587  134  4588  3958  164
-CONVEX 1938    GT_PK(2,2)      135  4589  165  4588  3992  164
-CONVEX 1939    GT_PK(2,2)      194  4590  226  4591  3945  193
-CONVEX 1940    GT_PK(2,2)      194  4592  195  4593  3963  163
-CONVEX 1941    GT_PK(2,2)      194  4594  227  4590  4595  226
-CONVEX 1942    GT_PK(2,2)      194  4594  227  4592  4596  195
-CONVEX 1943    GT_PK(2,2)      194  4593  163  4597  4584  162
-CONVEX 1944    GT_PK(2,2)      194  4591  193  4597  3091  162
-CONVEX 1945    GT_PK(2,2)      375  4598  376  4599  2907  413
-CONVEX 1946    GT_PK(2,2)      375  4600  374  4601  4602  338
-CONVEX 1947    GT_PK(2,2)      375  4598  376  4603  2922  339
-CONVEX 1948    GT_PK(2,2)      375  4601  338  4603  3093  339
-CONVEX 1949    GT_PK(2,2)      199  4604  232  4605  3964  200
-CONVEX 1950    GT_PK(2,2)      199  4606  167  4607  4608  198
-CONVEX 1951    GT_PK(2,2)      199  4607  198  4609  4610  231
-CONVEX 1952    GT_PK(2,2)      199  4604  232  4609  4611  231
-CONVEX 1953    GT_PK(2,2)      199  4605  200  4612  3101  168
-CONVEX 1954    GT_PK(2,2)      199  4606  167  4612  4613  168
-CONVEX 1955    GT_PK(2,2)      138  4614  111  4615  3966  139
-CONVEX 1956    GT_PK(2,2)      138  4615  139  4616  2244  168
-CONVEX 1957    GT_PK(2,2)      138  4617  167  4618  4619  137
-CONVEX 1958    GT_PK(2,2)      138  4617  167  4616  4613  168
-CONVEX 1959    GT_PK(2,2)      110  4620  138  4621  4614  111
-CONVEX 1960    GT_PK(2,2)      110  4622  109  4623  4624  137
-CONVEX 1961    GT_PK(2,2)      110  4620  138  4623  4618  137
-CONVEX 1962    GT_PK(2,2)      85  4625  111  4626  3968  86
-CONVEX 1963    GT_PK(2,2)      85  4627  62  4628  3975  61
-CONVEX 1964    GT_PK(2,2)      85  4627  62  4626  3977  86
-CONVEX 1965    GT_PK(2,2)      85  4629  110  4625  4621  111
-CONVEX 1966    GT_PK(2,2)      60  4630  83  4631  3986  59
-CONVEX 1967    GT_PK(2,2)      60  4632  38  4633  3982  39
-CONVEX 1968    GT_PK(2,2)      60  4632  38  4631  3979  59
-CONVEX 1969    GT_PK(2,2)      60  4633  39  4634  3120  61
-CONVEX 1970    GT_PK(2,2)      136  4635  109  4636  4624  137
-CONVEX 1971    GT_PK(2,2)      136  4637  108  4635  3990  109
-CONVEX 1972    GT_PK(2,2)      136  4638  135  4637  4585  108
-CONVEX 1973    GT_PK(2,2)      136  4638  135  4639  4589  165
-CONVEX 1974    GT_PK(2,2)      197  4640  165  4641  3991  196
-CONVEX 1975    GT_PK(2,2)      1389  4642  1388  4643  4003  1365
-CONVEX 1976    GT_PK(2,2)      1389  4644  1411  4645  3190  1390
-CONVEX 1977    GT_PK(2,2)      1389  4644  1411  4646  3194  1410
-CONVEX 1978    GT_PK(2,2)      1389  4642  1388  4646  4002  1410
-CONVEX 1979    GT_PK(2,2)      1389  4647  1366  4645  3230  1390
-CONVEX 1980    GT_PK(2,2)      1389  4647  1366  4643  4074  1365
-CONVEX 1981    GT_PK(2,2)      1110  4648  1074  4649  4650  1073
-CONVEX 1982    GT_PK(2,2)      1110  4651  1109  4649  4245  1073
-CONVEX 1983    GT_PK(2,2)      1110  4651  1109  4652  4011  1145
-CONVEX 1984    GT_PK(2,2)      1110  4653  1146  4652  4302  1145
-CONVEX 1985    GT_PK(2,2)      840  4654  800  4655  4153  801
-CONVEX 1986    GT_PK(2,2)      840  4654  800  4656  4151  839
-CONVEX 1987    GT_PK(2,2)      842  4657  803  4658  4440  802
-CONVEX 1988    GT_PK(2,2)      842  4657  803  4659  4447  843
-CONVEX 1989    GT_PK(2,2)      999  4660  1038  4661  3135  1000
-CONVEX 1990    GT_PK(2,2)      999  4662  1037  4660  4014  1038
-CONVEX 1991    GT_PK(2,2)      1036  4663  1037  4664  4016  1074
-CONVEX 1992    GT_PK(2,2)      1036  4665  1073  4666  4242  1035
-CONVEX 1993    GT_PK(2,2)      1036  4664  1074  4665  4650  1073
-CONVEX 1994    GT_PK(2,2)      1225  4667  1226  4668  4044  1258
-CONVEX 1995    GT_PK(2,2)      1225  4669  1191  4670  4035  1192
-CONVEX 1996    GT_PK(2,2)      1225  4667  1226  4670  4047  1192
-CONVEX 1997    GT_PK(2,2)      1287  4671  1317  4672  2345  1316
-CONVEX 1998    GT_PK(2,2)      1287  4673  1286  4672  4080  1316
-CONVEX 1999    GT_PK(2,2)      1255  4674  1254  4675  3158  1286
-CONVEX 2000    GT_PK(2,2)      1255  4676  1287  4675  4673  1286
-CONVEX 2001    GT_PK(2,2)      1255  4676  1287  4677  4678  1256
-CONVEX 2002    GT_PK(2,2)      1255  4674  1254  4679  3162  1222
-CONVEX 2003    GT_PK(2,2)      1318  4680  1289  4681  4682  1319
-CONVEX 2004    GT_PK(2,2)      1318  4683  1317  4684  2346  1345
-CONVEX 2005    GT_PK(2,2)      1318  4684  1345  4685  2323  1346
-CONVEX 2006    GT_PK(2,2)      1318  4681  1319  4685  3175  1346
-CONVEX 2007    GT_PK(2,2)      1288  4686  1287  4687  4678  1256
-CONVEX 2008    GT_PK(2,2)      1288  4686  1287  4688  4671  1317
-CONVEX 2009    GT_PK(2,2)      1288  4689  1318  4688  4683  1317
-CONVEX 2010    GT_PK(2,2)      1288  4689  1318  4690  4680  1289
-CONVEX 2011    GT_PK(2,2)      1290  4691  1289  4692  4682  1319
-CONVEX 2012    GT_PK(2,2)      1290  4693  1291  4694  3173  1320
-CONVEX 2013    GT_PK(2,2)      1290  4692  1319  4694  3176  1320
-CONVEX 2014    GT_PK(2,2)      1290  4691  1289  4695  4696  1258
-CONVEX 2015    GT_PK(2,2)      1290  4697  1259  4693  4052  1291
-CONVEX 2016    GT_PK(2,2)      1290  4697  1259  4695  4045  1258
-CONVEX 2017    GT_PK(2,2)      1322  4698  1292  4699  4040  1293
-CONVEX 2018    GT_PK(2,2)      1322  4700  1349  4701  4032  1350
-CONVEX 2019    GT_PK(2,2)      1322  4700  1349  4702  4031  1321
-CONVEX 2020    GT_PK(2,2)      1322  4698  1292  4702  4041  1321
-CONVEX 2021    GT_PK(2,2)      1322  4701  1350  4703  4704  1323
-CONVEX 2022    GT_PK(2,2)      1322  4699  1293  4703  3167  1323
-CONVEX 2023    GT_PK(2,2)      1228  4705  1195  4706  3688  1194
-CONVEX 2024    GT_PK(2,2)      1228  4705  1195  4707  3186  1229
-CONVEX 2025    GT_PK(2,2)      1228  4708  1261  4707  3188  1229
-CONVEX 2026    GT_PK(2,2)      1228  4709  1260  4708  4049  1261
-CONVEX 2027    GT_PK(2,2)      1314  4710  1315  4711  4075  1342
-CONVEX 2028    GT_PK(2,2)      1314  4712  1313  4713  4063  1284
-CONVEX 2029    GT_PK(2,2)      1314  4713  1284  4714  2400  1285
-CONVEX 2030    GT_PK(2,2)      1314  4710  1315  4714  4078  1285
-CONVEX 2031    GT_PK(2,2)      1314  4712  1313  4715  4071  1341
-CONVEX 2032    GT_PK(2,2)      1314  4711  1342  4715  3236  1341
-CONVEX 2033    GT_PK(2,2)      461  4716  460  4717  3765  422
-CONVEX 2034    GT_PK(2,2)      461  4718  499  4716  4099  460
-CONVEX 2035    GT_PK(2,2)      461  4719  423  4717  2858  422
-CONVEX 2036    GT_PK(2,2)      620  4720  660  4721  4111  621
-CONVEX 2037    GT_PK(2,2)      620  4720  660  4722  4723  659
-CONVEX 2038    GT_PK(2,2)      620  4724  619  4722  4725  659
-CONVEX 2039    GT_PK(2,2)      699  4726  739  4727  3270  700
-CONVEX 2040    GT_PK(2,2)      699  4728  660  4727  4109  700
-CONVEX 2041    GT_PK(2,2)      699  4728  660  4729  4723  659
-CONVEX 2042    GT_PK(2,2)      699  4726  739  4730  2443  738
-CONVEX 2043    GT_PK(2,2)      698  4731  699  4732  4730  738
-CONVEX 2044    GT_PK(2,2)      698  4731  699  4733  4729  659
-CONVEX 2045    GT_PK(2,2)      776  4734  816  4735  4472  777
-CONVEX 2046    GT_PK(2,2)      776  4734  816  4736  4469  815
-CONVEX 2047    GT_PK(2,2)      464  4737  463  4738  4739  425
-CONVEX 2048    GT_PK(2,2)      464  4737  463  4740  4741  502
-CONVEX 2049    GT_PK(2,2)      464  4742  503  4743  4096  465
-CONVEX 2050    GT_PK(2,2)      464  4742  503  4740  4744  502
-CONVEX 2051    GT_PK(2,2)      426  4745  425  4746  4135  388
-CONVEX 2052    GT_PK(2,2)      426  4747  389  4748  4137  427
-CONVEX 2053    GT_PK(2,2)      426  4747  389  4746  4139  388
-CONVEX 2054    GT_PK(2,2)      426  4749  464  4745  4738  425
-CONVEX 2055    GT_PK(2,2)      426  4748  427  4750  4107  465
-CONVEX 2056    GT_PK(2,2)      426  4749  464  4750  4743  465
-CONVEX 2057    GT_PK(2,2)      917  4751  877  4752  4148  878
-CONVEX 2058    GT_PK(2,2)      917  4751  877  4753  4754  916
-CONVEX 2059    GT_PK(2,2)      917  4755  956  4756  4252  955
-CONVEX 2060    GT_PK(2,2)      917  4753  916  4756  4259  955
-CONVEX 2061    GT_PK(2,2)      876  4757  877  4758  4754  916
-CONVEX 2062    GT_PK(2,2)      876  4758  916  4759  4260  915
-CONVEX 2063    GT_PK(2,2)      876  4760  837  4761  3360  836
-CONVEX 2064    GT_PK(2,2)      876  4757  877  4760  4149  837
-CONVEX 2065    GT_PK(2,2)      876  4762  875  4761  2638  836
-CONVEX 2066    GT_PK(2,2)      876  4762  875  4759  2640  915
-CONVEX 2067    GT_PK(2,2)      441  4763  479  4764  4165  440
-CONVEX 2068    GT_PK(2,2)      441  4765  442  4766  3869  403
-CONVEX 2069    GT_PK(2,2)      441  4765  442  4767  4524  480
-CONVEX 2070    GT_PK(2,2)      441  4763  479  4767  4166  480
-CONVEX 2071    GT_PK(2,2)      441  4768  402  4766  2089  403
-CONVEX 2072    GT_PK(2,2)      441  4764  440  4768  3039  402
-CONVEX 2073    GT_PK(2,2)      555  4769  516  4770  2529  556
-CONVEX 2074    GT_PK(2,2)      555  4771  515  4769  4167  516
-CONVEX 2075    GT_PK(2,2)      476  4772  475  4773  4170  437
-CONVEX 2076    GT_PK(2,2)      476  4774  515  4775  4168  477
-CONVEX 2077    GT_PK(2,2)      476  4776  438  4775  2100  477
-CONVEX 2078    GT_PK(2,2)      476  4776  438  4773  2101  437
-CONVEX 2079    GT_PK(2,2)      512  4777  511  4778  4174  473
-CONVEX 2080    GT_PK(2,2)      631  4779  671  4780  4781  632
-CONVEX 2081    GT_PK(2,2)      631  4782  592  4780  4186  632
-CONVEX 2082    GT_PK(2,2)      631  4779  671  4783  3378  670
-CONVEX 2083    GT_PK(2,2)      674  4784  714  4785  2537  675
-CONVEX 2084    GT_PK(2,2)      674  4786  635  4785  4180  675
-CONVEX 2085    GT_PK(2,2)      674  4784  714  4787  3384  713
-CONVEX 2086    GT_PK(2,2)      674  4786  635  4788  4789  634
-CONVEX 2087    GT_PK(2,2)      674  4790  673  4787  4182  713
-CONVEX 2088    GT_PK(2,2)      674  4790  673  4788  4791  634
-CONVEX 2089    GT_PK(2,2)      672  4792  671  4793  3380  711
-CONVEX 2090    GT_PK(2,2)      672  4792  671  4794  4781  632
-CONVEX 2091    GT_PK(2,2)      672  4793  711  4795  2589  712
-CONVEX 2092    GT_PK(2,2)      672  4796  673  4795  4183  712
-CONVEX 2093    GT_PK(2,2)      633  4797  673  4798  4791  634
-CONVEX 2094    GT_PK(2,2)      633  4799  672  4797  4796  673
-CONVEX 2095    GT_PK(2,2)      633  4800  593  4801  4185  632
-CONVEX 2096    GT_PK(2,2)      633  4799  672  4801  4794  632
-CONVEX 2097    GT_PK(2,2)      944  4802  905  4803  4196  943
-CONVEX 2098    GT_PK(2,2)      944  4804  982  4805  2543  981
-CONVEX 2099    GT_PK(2,2)      944  4803  943  4805  4806  981
-CONVEX 2100    GT_PK(2,2)      944  4804  982  4807  2539  983
-CONVEX 2101    GT_PK(2,2)      944  4808  945  4807  3456  983
-CONVEX 2102    GT_PK(2,2)      944  4808  945  4809  4233  906
-CONVEX 2103    GT_PK(2,2)      944  4802  905  4809  4205  906
-CONVEX 2104    GT_PK(2,2)      871  4810  832  4811  4210  831
-CONVEX 2105    GT_PK(2,2)      871  4812  911  4813  2610  910
-CONVEX 2106    GT_PK(2,2)      871  4814  872  4812  2625  911
-CONVEX 2107    GT_PK(2,2)      871  4810  832  4814  4214  872
-CONVEX 2108    GT_PK(2,2)      870  4815  830  4816  4215  831
-CONVEX 2109    GT_PK(2,2)      870  4817  909  4818  1876  910
-CONVEX 2110    GT_PK(2,2)      870  4819  869  4817  4820  909
-CONVEX 2111    GT_PK(2,2)      870  4819  869  4815  4821  830
-CONVEX 2112    GT_PK(2,2)      870  4822  871  4818  4813  910
-CONVEX 2113    GT_PK(2,2)      870  4822  871  4816  4811  831
-CONVEX 2114    GT_PK(2,2)      790  4823  751  4824  3438  791
-CONVEX 2115    GT_PK(2,2)      790  4825  830  4824  4216  791
-CONVEX 2116    GT_PK(2,2)      987  4826  986  4827  4223  1025
-CONVEX 2117    GT_PK(2,2)      987  4828  949  4829  2605  988
-CONVEX 2118    GT_PK(2,2)      987  4828  949  4830  2611  948
-CONVEX 2119    GT_PK(2,2)      987  4826  986  4830  4227  948
-CONVEX 2120    GT_PK(2,2)      987  4831  1026  4829  3446  988
-CONVEX 2121    GT_PK(2,2)      987  4827  1025  4831  3450  1026
-CONVEX 2122    GT_PK(2,2)      908  4832  907  4833  4230  868
-CONVEX 2123    GT_PK(2,2)      908  4834  869  4833  4835  868
-CONVEX 2124    GT_PK(2,2)      908  4836  947  4837  3458  909
-CONVEX 2125    GT_PK(2,2)      908  4834  869  4837  4820  909
-CONVEX 2126    GT_PK(2,2)      1034  4838  1072  4839  4241  1035
-CONVEX 2127    GT_PK(2,2)      1071  4840  1033  4841  3464  1070
-CONVEX 2128    GT_PK(2,2)      1071  4842  1072  4843  4244  1108
-CONVEX 2129    GT_PK(2,2)      1071  4844  1034  4840  4845  1033
-CONVEX 2130    GT_PK(2,2)      1071  4844  1034  4842  4838  1072
-CONVEX 2131    GT_PK(2,2)      1142  4846  1106  4847  4848  1141
-CONVEX 2132    GT_PK(2,2)      1104  4849  1103  4850  3426  1067
-CONVEX 2133    GT_PK(2,2)      1104  4851  1139  4849  3497  1103
-CONVEX 2134    GT_PK(2,2)      1104  4851  1139  4852  3500  1140
-CONVEX 2135    GT_PK(2,2)      1209  4853  1210  4854  4269  1242
-CONVEX 2136    GT_PK(2,2)      1209  4855  1241  4856  3628  1208
-CONVEX 2137    GT_PK(2,2)      1209  4855  1241  4854  3629  1242
-CONVEX 2138    GT_PK(2,2)      1382  4857  1404  4858  2676  1383
-CONVEX 2139    GT_PK(2,2)      1382  4859  1403  4857  4276  1404
-CONVEX 2140    GT_PK(2,2)      1382  4859  1403  4860  4279  1381
-CONVEX 2141    GT_PK(2,2)      1421  4861  1403  4862  4277  1422
-CONVEX 2142    GT_PK(2,2)      1421  4863  1436  4864  4865  1435
-CONVEX 2143    GT_PK(2,2)      1421  4863  1436  4862  3536  1422
-CONVEX 2144    GT_PK(2,2)      1421  4866  1402  4864  4867  1435
-CONVEX 2145    GT_PK(2,2)      1421  4861  1403  4866  4278  1402
-CONVEX 2146    GT_PK(2,2)      1332  4868  1305  4869  4325  1304
-CONVEX 2147    GT_PK(2,2)      1332  4870  1333  4868  4283  1305
-CONVEX 2148    GT_PK(2,2)      1377  4871  1398  4872  4296  1353
-CONVEX 2149    GT_PK(2,2)      1328  4873  1353  4874  4312  1327
-CONVEX 2150    GT_PK(2,2)      1302  4875  1273  4876  3623  1303
-CONVEX 2151    GT_PK(2,2)      1302  4875  1273  4877  3627  1272
-CONVEX 2152    GT_PK(2,2)      1420  4878  1402  4879  4867  1435
-CONVEX 2153    GT_PK(2,2)      1048  4880  1086  4881  4337  1049
-CONVEX 2154    GT_PK(2,2)      1048  4882  1010  4883  2777  1009
-CONVEX 2155    GT_PK(2,2)      1048  4882  1010  4881  2771  1049
-CONVEX 2156    GT_PK(2,2)      1085  4884  1086  4885  4336  1122
-CONVEX 2157    GT_PK(2,2)      1085  4886  1121  4885  4340  1122
-CONVEX 2158    GT_PK(2,2)      1085  4887  1048  4884  4880  1086
-CONVEX 2159    GT_PK(2,2)      1126  4888  1127  4889  4128  1090
-CONVEX 2160    GT_PK(2,2)      1126  4890  1162  4888  4388  1127
-CONVEX 2161    GT_PK(2,2)      1126  4891  1089  4892  4371  1125
-CONVEX 2162    GT_PK(2,2)      1126  4891  1089  4889  3691  1090
-CONVEX 2163    GT_PK(2,2)      1126  4893  1161  4892  4383  1125
-CONVEX 2164    GT_PK(2,2)      1126  4890  1162  4893  4390  1161
-CONVEX 2165    GT_PK(2,2)      238  4894  271  4895  4393  272
-CONVEX 2166    GT_PK(2,2)      236  4896  235  4897  2891  203
-CONVEX 2167    GT_PK(2,2)      236  4898  204  4897  4899  203
-CONVEX 2168    GT_PK(2,2)      270  4900  305  4901  2925  304
-CONVEX 2169    GT_PK(2,2)      270  4902  271  4900  4391  305
-CONVEX 2170    GT_PK(2,2)      172  4903  204  4904  4899  203
-CONVEX 2171    GT_PK(2,2)      172  4903  204  4905  4906  173
-CONVEX 2172    GT_PK(2,2)      68  4907  47  4908  4410  69
-CONVEX 2173    GT_PK(2,2)      68  4909  91  4910  4911  92
-CONVEX 2174    GT_PK(2,2)      68  4908  69  4910  3938  92
-CONVEX 2175    GT_PK(2,2)      68  4912  67  4909  4401  91
-CONVEX 2176    GT_PK(2,2)      68  4912  67  4913  4405  46
-CONVEX 2177    GT_PK(2,2)      68  4907  47  4913  4408  46
-CONVEX 2178    GT_PK(2,2)      566  4914  567  4915  4421  606
-CONVEX 2179    GT_PK(2,2)      566  4916  565  4917  3883  526
-CONVEX 2180    GT_PK(2,2)      566  4917  526  4918  3889  527
-CONVEX 2181    GT_PK(2,2)      566  4914  567  4918  4413  527
-CONVEX 2182    GT_PK(2,2)      424  4919  425  4920  4136  387
-CONVEX 2183    GT_PK(2,2)      424  4921  386  4920  4426  387
-CONVEX 2184    GT_PK(2,2)      424  4921  386  4922  4424  423
-CONVEX 2185    GT_PK(2,2)      424  4923  463  4919  4739  425
-CONVEX 2186    GT_PK(2,2)      654  4924  693  4925  4453  694
-CONVEX 2187    GT_PK(2,2)      654  4925  694  4926  3850  655
-CONVEX 2188    GT_PK(2,2)      654  4927  615  4926  4928  655
-CONVEX 2189    GT_PK(2,2)      654  4927  615  4929  3853  614
-CONVEX 2190    GT_PK(2,2)      654  4929  614  4930  2995  653
-CONVEX 2191    GT_PK(2,2)      654  4924  693  4930  4455  653
-CONVEX 2192    GT_PK(2,2)      852  4931  892  4932  4466  891
-CONVEX 2193    GT_PK(2,2)      852  4933  812  4934  3843  813
-CONVEX 2194    GT_PK(2,2)      852  4935  853  4934  4479  813
-CONVEX 2195    GT_PK(2,2)      852  4931  892  4935  4468  853
-CONVEX 2196    GT_PK(2,2)      852  4936  851  4932  4937  891
-CONVEX 2197    GT_PK(2,2)      852  4936  851  4933  4938  812
-CONVEX 2198    GT_PK(2,2)      775  4939  814  4940  4474  815
-CONVEX 2199    GT_PK(2,2)      775  4941  776  4942  4943  736
-CONVEX 2200    GT_PK(2,2)      775  4941  776  4940  4736  815
-CONVEX 2201    GT_PK(2,2)      775  4944  735  4942  4945  736
-CONVEX 2202    GT_PK(2,2)      775  4946  774  4944  4494  735
-CONVEX 2203    GT_PK(2,2)      775  4939  814  4946  4477  774
-CONVEX 2204    GT_PK(2,2)      890  4947  851  4948  4937  891
-CONVEX 2205    GT_PK(2,2)      890  4949  889  4950  3847  929
-CONVEX 2206    GT_PK(2,2)      890  4950  929  4951  2764  930
-CONVEX 2207    GT_PK(2,2)      890  4948  891  4951  2987  930
-CONVEX 2208    GT_PK(2,2)      809  4952  770  4953  3851  769
-CONVEX 2209    GT_PK(2,2)      809  4954  808  4953  2963  769
-CONVEX 2210    GT_PK(2,2)      809  4955  848  4954  3810  808
-CONVEX 2211    GT_PK(2,2)      809  4956  849  4955  4486  848
-CONVEX 2212    GT_PK(2,2)      810  4957  809  4958  4956  849
-CONVEX 2213    GT_PK(2,2)      810  4959  770  4960  4463  771
-CONVEX 2214    GT_PK(2,2)      810  4957  809  4959  4952  770
-CONVEX 2215    GT_PK(2,2)      432  4961  472  4962  3866  433
-CONVEX 2216    GT_PK(2,2)      432  4963  471  4961  4499  472
-CONVEX 2217    GT_PK(2,2)      432  4962  433  4964  3007  394
-CONVEX 2218    GT_PK(2,2)      474  4965  475  4966  4169  436
-CONVEX 2219    GT_PK(2,2)      474  4967  435  4966  4500  436
-CONVEX 2220    GT_PK(2,2)      474  4967  435  4968  4504  473
-CONVEX 2221    GT_PK(2,2)      474  4969  512  4968  4778  473
-CONVEX 2222    GT_PK(2,2)      564  4970  603  4971  3882  563
-CONVEX 2223    GT_PK(2,2)      564  4972  604  4970  4506  603
-CONVEX 2224    GT_PK(2,2)      564  4972  604  4973  4974  565
-CONVEX 2225    GT_PK(2,2)      564  4975  524  4971  3025  563
-CONVEX 2226    GT_PK(2,2)      564  4975  524  4976  3892  525
-CONVEX 2227    GT_PK(2,2)      564  4973  565  4976  3884  525
-CONVEX 2228    GT_PK(2,2)      605  4977  604  4978  4974  565
-CONVEX 2229    GT_PK(2,2)      605  4979  606  4980  2816  645
-CONVEX 2230    GT_PK(2,2)      605  4981  644  4980  3019  645
-CONVEX 2231    GT_PK(2,2)      605  4977  604  4981  4507  644
-CONVEX 2232    GT_PK(2,2)      605  4982  566  4979  4915  606
-CONVEX 2233    GT_PK(2,2)      605  4982  566  4978  4916  565
-CONVEX 2234    GT_PK(2,2)      148  4983  177  4984  4985  178
-CONVEX 2235    GT_PK(2,2)      148  4984  178  4986  4538  149
-CONVEX 2236    GT_PK(2,2)      148  4987  121  4986  3929  149
-CONVEX 2237    GT_PK(2,2)      148  4987  121  4988  4555  120
-CONVEX 2238    GT_PK(2,2)      208  4989  240  4990  4394  241
-CONVEX 2239    GT_PK(2,2)      208  4989  240  4991  4992  207
-CONVEX 2240    GT_PK(2,2)      209  4993  178  4994  4536  210
-CONVEX 2241    GT_PK(2,2)      209  4995  177  4993  4985  178
-CONVEX 2242    GT_PK(2,2)      209  4994  210  4996  4544  242
-CONVEX 2243    GT_PK(2,2)      209  4997  208  4995  4998  177
-CONVEX 2244    GT_PK(2,2)      209  4999  241  4996  1970  242
-CONVEX 2245    GT_PK(2,2)      209  4997  208  4999  4990  241
-CONVEX 2246    GT_PK(2,2)      94  5000  95  5001  4554  120
-CONVEX 2247    GT_PK(2,2)      94  5000  95  5002  5003  71
-CONVEX 2248    GT_PK(2,2)      94  5004  70  5002  5005  71
-CONVEX 2249    GT_PK(2,2)      94  5004  70  5006  4559  93
-CONVEX 2250    GT_PK(2,2)      72  5007  95  5008  5003  71
-CONVEX 2251    GT_PK(2,2)      72  5009  50  5008  5010  71
-CONVEX 2252    GT_PK(2,2)      72  5009  50  5011  4563  51
-CONVEX 2253    GT_PK(2,2)      72  5007  95  5012  4556  96
-CONVEX 2254    GT_PK(2,2)      72  5013  73  5012  3933  96
-CONVEX 2255    GT_PK(2,2)      72  5011  51  5013  3939  73
-CONVEX 2256    GT_PK(2,2)      175  5014  207  5015  5016  206
-CONVEX 2257    GT_PK(2,2)      49  5017  70  5018  5005  71
-CONVEX 2258    GT_PK(2,2)      49  5019  50  5018  5010  71
-CONVEX 2259    GT_PK(2,2)      49  5020  30  5021  2819  48
-CONVEX 2260    GT_PK(2,2)      49  5017  70  5021  4558  48
-CONVEX 2261    GT_PK(2,2)      49  5019  50  5022  4561  31
-CONVEX 2262    GT_PK(2,2)      49  5023  16  5022  5024  31
-CONVEX 2263    GT_PK(2,2)      49  5023  16  5020  3706  30
-CONVEX 2264    GT_PK(2,2)      406  5025  368  5026  4565  405
-CONVEX 2265    GT_PK(2,2)      406  5027  444  5026  3896  405
-CONVEX 2266    GT_PK(2,2)      406  5027  444  5028  3904  445
-CONVEX 2267    GT_PK(2,2)      301  5029  267  5030  4571  302
-CONVEX 2268    GT_PK(2,2)      299  5031  264  5032  4576  298
-CONVEX 2269    GT_PK(2,2)      265  5033  299  5034  5035  300
-CONVEX 2270    GT_PK(2,2)      265  5033  299  5036  5031  264
-CONVEX 2271    GT_PK(2,2)      265  5037  232  5038  4611  231
-CONVEX 2272    GT_PK(2,2)      265  5036  264  5038  5039  231
-CONVEX 2273    GT_PK(2,2)      260  5040  226  5041  3944  259
-CONVEX 2274    GT_PK(2,2)      260  5042  227  5040  4595  226
-CONVEX 2275    GT_PK(2,2)      260  5043  261  5042  5044  227
-CONVEX 2276    GT_PK(2,2)      260  5045  294  5041  3946  259
-CONVEX 2277    GT_PK(2,2)      260  5045  294  5046  3950  295
-CONVEX 2278    GT_PK(2,2)      260  5043  261  5046  5047  295
-CONVEX 2279    GT_PK(2,2)      412  5048  451  5049  2844  413
-CONVEX 2280    GT_PK(2,2)      412  5050  375  5049  4599  413
-CONVEX 2281    GT_PK(2,2)      412  5050  375  5051  4600  374
-CONVEX 2282    GT_PK(2,2)      412  5052  411  5051  5053  374
-CONVEX 2283    GT_PK(2,2)      84  5054  83  5055  3989  109
-CONVEX 2284    GT_PK(2,2)      84  5056  110  5055  4622  109
-CONVEX 2285    GT_PK(2,2)      84  5057  60  5058  4634  61
-CONVEX 2286    GT_PK(2,2)      84  5057  60  5054  4630  83
-CONVEX 2287    GT_PK(2,2)      84  5059  85  5058  4628  61
-CONVEX 2288    GT_PK(2,2)      84  5059  85  5056  4629  110
-CONVEX 2289    GT_PK(2,2)      166  5060  167  5061  4619  137
-CONVEX 2290    GT_PK(2,2)      166  5062  136  5061  4636  137
-CONVEX 2291    GT_PK(2,2)      166  5060  167  5063  4608  198
-CONVEX 2292    GT_PK(2,2)      166  5064  197  5063  5065  198
-CONVEX 2293    GT_PK(2,2)      166  5062  136  5066  4639  165
-CONVEX 2294    GT_PK(2,2)      166  5064  197  5066  4640  165
-CONVEX 2295    GT_PK(2,2)      230  5067  264  5068  5039  231
-CONVEX 2296    GT_PK(2,2)      230  5067  264  5069  4575  263
-CONVEX 2297    GT_PK(2,2)      230  5070  198  5068  4610  231
-CONVEX 2298    GT_PK(2,2)      230  5071  197  5070  5065  198
-CONVEX 2299    GT_PK(2,2)      1111  5072  1110  5073  4648  1074
-CONVEX 2300    GT_PK(2,2)      1111  5074  1075  5075  2282  1112
-CONVEX 2301    GT_PK(2,2)      1111  5073  1074  5074  4017  1075
-CONVEX 2302    GT_PK(2,2)      1111  5072  1110  5076  4653  1146
-CONVEX 2303    GT_PK(2,2)      1111  5077  1147  5075  2705  1112
-CONVEX 2304    GT_PK(2,2)      1111  5076  1146  5077  4299  1147
-CONVEX 2305    GT_PK(2,2)      841  5078  840  5079  5080  880
-CONVEX 2306    GT_PK(2,2)      841  5081  842  5082  4658  802
-CONVEX 2307    GT_PK(2,2)      841  5082  802  5083  2937  801
-CONVEX 2308    GT_PK(2,2)      841  5078  840  5083  4655  801
-CONVEX 2309    GT_PK(2,2)      881  5084  920  5085  5086  880
-CONVEX 2310    GT_PK(2,2)      881  5087  841  5085  5079  880
-CONVEX 2311    GT_PK(2,2)      881  5087  841  5088  5081  842
-CONVEX 2312    GT_PK(2,2)      879  5089  840  5090  5080  880
-CONVEX 2313    GT_PK(2,2)      879  5091  839  5092  2521  878
-CONVEX 2314    GT_PK(2,2)      879  5089  840  5091  4656  839
-CONVEX 2315    GT_PK(2,2)      959  5093  920  5094  5095  958
-CONVEX 2316    GT_PK(2,2)      961  5096  962  5097  4018  1000
-CONVEX 2317    GT_PK(2,2)      961  5098  999  5097  4661  1000
-CONVEX 2318    GT_PK(2,2)      961  5096  962  5099  4022  923
-CONVEX 2319    GT_PK(2,2)      998  5100  999  5101  4662  1037
-CONVEX 2320    GT_PK(2,2)      998  5102  1036  5101  4663  1037
-CONVEX 2321    GT_PK(2,2)      1224  5103  1225  5104  4669  1191
-CONVEX 2322    GT_PK(2,2)      1224  5104  1191  5105  4036  1190
-CONVEX 2323    GT_PK(2,2)      1257  5106  1288  5107  4687  1256
-CONVEX 2324    GT_PK(2,2)      1257  5108  1225  5109  4668  1258
-CONVEX 2325    GT_PK(2,2)      1257  5110  1289  5109  4696  1258
-CONVEX 2326    GT_PK(2,2)      1257  5106  1288  5110  4690  1289
-CONVEX 2327    GT_PK(2,2)      1257  5111  1224  5107  5112  1256
-CONVEX 2328    GT_PK(2,2)      1257  5111  1224  5108  5103  1225
-CONVEX 2329    GT_PK(2,2)      1227  5113  1228  5114  4706  1194
-CONVEX 2330    GT_PK(2,2)      1227  5113  1228  5115  4709  1260
-CONVEX 2331    GT_PK(2,2)      1227  5115  1260  5116  4050  1259
-CONVEX 2332    GT_PK(2,2)      1227  5117  1226  5116  4043  1259
-CONVEX 2333    GT_PK(2,2)      1227  5114  1194  5118  4366  1193
-CONVEX 2334    GT_PK(2,2)      1227  5117  1226  5118  4046  1193
-CONVEX 2335    GT_PK(2,2)      541  5119  503  5120  4098  542
-CONVEX 2336    GT_PK(2,2)      541  5119  503  5121  4744  502
-CONVEX 2337    GT_PK(2,2)      658  5122  698  5123  5124  697
-CONVEX 2338    GT_PK(2,2)      658  5125  619  5126  4725  659
-CONVEX 2339    GT_PK(2,2)      658  5122  698  5126  4733  659
-CONVEX 2340    GT_PK(2,2)      737  5127  698  5128  5124  697
-CONVEX 2341    GT_PK(2,2)      737  5128  697  5129  5130  736
-CONVEX 2342    GT_PK(2,2)      737  5131  776  5129  4943  736
-CONVEX 2343    GT_PK(2,2)      737  5131  776  5132  4735  777
-CONVEX 2344    GT_PK(2,2)      737  5132  777  5133  3323  738
-CONVEX 2345    GT_PK(2,2)      737  5127  698  5133  4732  738
-CONVEX 2346    GT_PK(2,2)      616  5134  615  5135  4928  655
-CONVEX 2347    GT_PK(2,2)      696  5136  697  5137  5130  736
-CONVEX 2348    GT_PK(2,2)      696  5138  735  5137  4945  736
-CONVEX 2349    GT_PK(2,2)      696  5139  695  5138  4495  735
-CONVEX 2350    GT_PK(2,2)      918  5140  957  5141  5142  956
-CONVEX 2351    GT_PK(2,2)      918  5143  917  5141  4755  956
-CONVEX 2352    GT_PK(2,2)      918  5143  917  5144  4752  878
-CONVEX 2353    GT_PK(2,2)      918  5145  879  5144  5092  878
-CONVEX 2354    GT_PK(2,2)      595  5146  635  5147  4789  634
-CONVEX 2355    GT_PK(2,2)      595  5148  555  5149  4770  556
-CONVEX 2356    GT_PK(2,2)      595  5150  596  5149  2530  556
-CONVEX 2357    GT_PK(2,2)      595  5146  635  5150  4181  596
-CONVEX 2358    GT_PK(2,2)      554  5151  555  5152  4771  515
-CONVEX 2359    GT_PK(2,2)      554  5153  593  5154  4187  553
-CONVEX 2360    GT_PK(2,2)      551  5155  550  5156  4178  511
-CONVEX 2361    GT_PK(2,2)      551  5157  512  5156  4777  511
-CONVEX 2362    GT_PK(2,2)      630  5158  631  5159  4783  670
-CONVEX 2363    GT_PK(2,2)      630  5160  669  5161  3393  629
-CONVEX 2364    GT_PK(2,2)      630  5160  669  5159  3394  670
-CONVEX 2365    GT_PK(2,2)      750  5162  790  5163  4823  751
-CONVEX 2366    GT_PK(2,2)      750  5164  711  5165  3381  710
-CONVEX 2367    GT_PK(2,2)      750  5163  751  5164  2587  711
-CONVEX 2368    GT_PK(2,2)      750  5162  790  5166  5167  789
-CONVEX 2369    GT_PK(2,2)      750  5168  749  5165  4191  710
-CONVEX 2370    GT_PK(2,2)      750  5166  789  5168  3441  749
-CONVEX 2371    GT_PK(2,2)      829  5169  869  5170  4821  830
-CONVEX 2372    GT_PK(2,2)      829  5171  790  5170  4825  830
-CONVEX 2373    GT_PK(2,2)      829  5169  869  5172  4835  868
-CONVEX 2374    GT_PK(2,2)      829  5171  790  5173  5167  789
-CONVEX 2375    GT_PK(2,2)      829  5174  828  5172  4218  868
-CONVEX 2376    GT_PK(2,2)      829  5174  828  5173  4220  789
-CONVEX 2377    GT_PK(2,2)      946  5175  908  5176  4832  907
-CONVEX 2378    GT_PK(2,2)      946  5177  984  5178  3455  945
-CONVEX 2379    GT_PK(2,2)      946  5176  907  5178  4232  945
-CONVEX 2380    GT_PK(2,2)      946  5175  908  5179  4836  947
-CONVEX 2381    GT_PK(2,2)      946  5177  984  5180  3454  985
-CONVEX 2382    GT_PK(2,2)      946  5179  947  5180  4228  985
-CONVEX 2383    GT_PK(2,2)      995  5181  957  5182  5142  956
-CONVEX 2384    GT_PK(2,2)      995  5183  994  5182  4251  956
-CONVEX 2385    GT_PK(2,2)      995  5183  994  5184  4248  1033
-CONVEX 2386    GT_PK(2,2)      995  5185  1034  5184  4845  1033
-CONVEX 2387    GT_PK(2,2)      1176  5186  1142  5187  4847  1141
-CONVEX 2388    GT_PK(2,2)      1176  5188  1209  5189  4853  1210
-CONVEX 2389    GT_PK(2,2)      1107  5190  1142  5191  4846  1106
-CONVEX 2390    GT_PK(2,2)      1107  5191  1106  5192  5193  1070
-CONVEX 2391    GT_PK(2,2)      1107  5194  1071  5192  4841  1070
-CONVEX 2392    GT_PK(2,2)      1107  5194  1071  5195  4843  1108
-CONVEX 2393    GT_PK(2,2)      1143  5196  1144  5197  3548  1178
-CONVEX 2394    GT_PK(2,2)      1143  5198  1107  5199  5190  1142
-CONVEX 2395    GT_PK(2,2)      1143  5196  1144  5200  4013  1108
-CONVEX 2396    GT_PK(2,2)      1143  5198  1107  5200  5195  1108
-CONVEX 2397    GT_PK(2,2)      1068  5201  1104  5202  4850  1067
-CONVEX 2398    GT_PK(2,2)      1068  5203  1030  5202  2613  1067
-CONVEX 2399    GT_PK(2,2)      1068  5204  1031  5203  3466  1030
-CONVEX 2400    GT_PK(2,2)      1358  5205  1357  5206  5207  1381
-CONVEX 2401    GT_PK(2,2)      1358  5208  1382  5206  4860  1381
-CONVEX 2402    GT_PK(2,2)      1358  5209  1332  5205  5210  1357
-CONVEX 2403    GT_PK(2,2)      1358  5209  1332  5211  4870  1333
-CONVEX 2404    GT_PK(2,2)      1359  5212  1333  5213  4281  1334
-CONVEX 2405    GT_PK(2,2)      1359  5214  1360  5213  2687  1334
-CONVEX 2406    GT_PK(2,2)      1359  5215  1358  5212  5211  1333
-CONVEX 2407    GT_PK(2,2)      1359  5215  1358  5216  5208  1382
-CONVEX 2408    GT_PK(2,2)      1359  5214  1360  5217  2683  1383
-CONVEX 2409    GT_PK(2,2)      1359  5216  1382  5217  4858  1383
-CONVEX 2410    GT_PK(2,2)      1355  5218  1379  5219  5220  1378
-CONVEX 2411    GT_PK(2,2)      1355  5218  1379  5221  5222  1356
-CONVEX 2412    GT_PK(2,2)      1399  5223  1377  5224  4871  1398
-CONVEX 2413    GT_PK(2,2)      1399  5225  1418  5226  5227  1378
-CONVEX 2414    GT_PK(2,2)      1399  5223  1377  5226  5228  1378
-CONVEX 2415    GT_PK(2,2)      1301  5229  1328  5230  5231  1329
-CONVEX 2416    GT_PK(2,2)      1301  5232  1302  5230  5233  1329
-CONVEX 2417    GT_PK(2,2)      1301  5234  1271  5235  2745  1272
-CONVEX 2418    GT_PK(2,2)      1301  5232  1302  5235  4877  1272
-CONVEX 2419    GT_PK(2,2)      1330  5236  1302  5237  5233  1329
-CONVEX 2420    GT_PK(2,2)      1330  5238  1355  5237  5239  1329
-CONVEX 2421    GT_PK(2,2)      1330  5238  1355  5240  5221  1356
-CONVEX 2422    GT_PK(2,2)      1330  5236  1302  5241  4876  1303
-CONVEX 2423    GT_PK(2,2)      1331  5242  1304  5243  3622  1303
-CONVEX 2424    GT_PK(2,2)      1331  5244  1330  5243  5241  1303
-CONVEX 2425    GT_PK(2,2)      1331  5244  1330  5245  5240  1356
-CONVEX 2426    GT_PK(2,2)      1331  5246  1332  5242  4869  1304
-CONVEX 2427    GT_PK(2,2)      1331  5246  1332  5247  5210  1357
-CONVEX 2428    GT_PK(2,2)      1331  5245  1356  5247  5248  1357
-CONVEX 2429    GT_PK(2,2)      1401  5249  1420  5250  4878  1402
-CONVEX 2430    GT_PK(2,2)      1401  5249  1420  5251  5252  1419
-CONVEX 2431    GT_PK(2,2)      1380  5253  1402  5254  4280  1381
-CONVEX 2432    GT_PK(2,2)      1380  5255  1357  5254  5207  1381
-CONVEX 2433    GT_PK(2,2)      1380  5256  1401  5253  5250  1402
-CONVEX 2434    GT_PK(2,2)      1380  5256  1401  5257  5258  1379
-CONVEX 2435    GT_PK(2,2)      1380  5259  1356  5255  5248  1357
-CONVEX 2436    GT_PK(2,2)      1380  5257  1379  5259  5222  1356
-CONVEX 2437    GT_PK(2,2)      1047  5260  1085  5261  4887  1048
-CONVEX 2438    GT_PK(2,2)      1047  5261  1048  5262  4883  1009
-CONVEX 2439    GT_PK(2,2)      1047  5263  1008  5262  2768  1009
-CONVEX 2440    GT_PK(2,2)      1047  5263  1008  5264  3672  1046
-CONVEX 2441    GT_PK(2,2)      1084  5265  1121  5266  4341  1120
-CONVEX 2442    GT_PK(2,2)      1084  5267  1085  5265  4886  1121
-CONVEX 2443    GT_PK(2,2)      1084  5266  1120  5268  4084  1083
-CONVEX 2444    GT_PK(2,2)      1084  5269  1047  5267  5260  1085
-CONVEX 2445    GT_PK(2,2)      1084  5268  1083  5270  2751  1046
-CONVEX 2446    GT_PK(2,2)      1084  5269  1047  5270  5264  1046
-CONVEX 2447    GT_PK(2,2)      205  5271  204  5272  4906  173
-CONVEX 2448    GT_PK(2,2)      205  5273  238  5274  5275  206
-CONVEX 2449    GT_PK(2,2)      239  5276  273  5277  4400  240
-CONVEX 2450    GT_PK(2,2)      239  5277  240  5278  4992  207
-CONVEX 2451    GT_PK(2,2)      239  5276  273  5279  4398  272
-CONVEX 2452    GT_PK(2,2)      239  5280  238  5279  4895  272
-CONVEX 2453    GT_PK(2,2)      239  5278  207  5281  5016  206
-CONVEX 2454    GT_PK(2,2)      239  5280  238  5281  5275  206
-CONVEX 2455    GT_PK(2,2)      237  5282  270  5283  5284  236
-CONVEX 2456    GT_PK(2,2)      237  5285  205  5286  5273  238
-CONVEX 2457    GT_PK(2,2)      237  5286  238  5287  4894  271
-CONVEX 2458    GT_PK(2,2)      237  5282  270  5287  4902  271
-CONVEX 2459    GT_PK(2,2)      237  5283  236  5288  4898  204
-CONVEX 2460    GT_PK(2,2)      237  5285  205  5288  5271  204
-CONVEX 2461    GT_PK(2,2)      269  5289  304  5290  2016  303
-CONVEX 2462    GT_PK(2,2)      269  5291  270  5289  4901  304
-CONVEX 2463    GT_PK(2,2)      269  5292  268  5290  2232  303
-CONVEX 2464    GT_PK(2,2)      269  5291  270  5293  5284  236
-CONVEX 2465    GT_PK(2,2)      269  5294  235  5292  2887  268
-CONVEX 2466    GT_PK(2,2)      269  5293  236  5294  4896  235
-CONVEX 2467    GT_PK(2,2)      171  5295  172  5296  4904  203
-CONVEX 2468    GT_PK(2,2)      171  5296  203  5297  2892  202
-CONVEX 2469    GT_PK(2,2)      171  5298  170  5297  3712  202
-CONVEX 2470    GT_PK(2,2)      171  5298  170  5299  3720  141
-CONVEX 2471    GT_PK(2,2)      115  5300  116  5301  3704  90
-CONVEX 2472    GT_PK(2,2)      115  5302  89  5301  2827  90
-CONVEX 2473    GT_PK(2,2)      115  5302  89  5303  2829  114
-CONVEX 2474    GT_PK(2,2)      143  5304  172  5305  4905  173
-CONVEX 2475    GT_PK(2,2)      143  5306  115  5307  5300  116
-CONVEX 2476    GT_PK(2,2)      850  5308  890  5309  4947  851
-CONVEX 2477    GT_PK(2,2)      850  5310  810  5311  4958  849
-CONVEX 2478    GT_PK(2,2)      850  5311  849  5312  4488  889
-CONVEX 2479    GT_PK(2,2)      850  5308  890  5312  4949  889
-CONVEX 2480    GT_PK(2,2)      811  5313  851  5314  4938  812
-CONVEX 2481    GT_PK(2,2)      811  5315  810  5316  4960  771
-CONVEX 2482    GT_PK(2,2)      811  5317  850  5313  5309  851
-CONVEX 2483    GT_PK(2,2)      811  5317  850  5315  5310  810
-CONVEX 2484    GT_PK(2,2)      811  5318  772  5316  4485  771
-CONVEX 2485    GT_PK(2,2)      811  5318  772  5314  4480  812
-CONVEX 2486    GT_PK(2,2)      513  5319  474  5320  4969  512
-CONVEX 2487    GT_PK(2,2)      513  5319  474  5321  4965  475
-CONVEX 2488    GT_PK(2,2)      119  5322  94  5323  5006  93
-CONVEX 2489    GT_PK(2,2)      119  5322  94  5324  5001  120
-CONVEX 2490    GT_PK(2,2)      145  5325  175  5326  5327  146
-CONVEX 2491    GT_PK(2,2)      176  5328  208  5329  4998  177
-CONVEX 2492    GT_PK(2,2)      176  5330  175  5331  5327  146
-CONVEX 2493    GT_PK(2,2)      176  5328  208  5332  4991  207
-CONVEX 2494    GT_PK(2,2)      176  5330  175  5332  5014  207
-CONVEX 2495    GT_PK(2,2)      407  5333  446  5334  4568  445
-CONVEX 2496    GT_PK(2,2)      407  5335  406  5334  5028  445
-CONVEX 2497    GT_PK(2,2)      297  5336  263  5337  4577  298
-CONVEX 2498    GT_PK(2,2)      297  5338  333  5337  5339  298
-CONVEX 2499    GT_PK(2,2)      369  5340  406  5341  5025  368
-CONVEX 2500    GT_PK(2,2)      369  5342  407  5340  5335  406
-CONVEX 2501    GT_PK(2,2)      336  5343  301  5344  5345  300
-CONVEX 2502    GT_PK(2,2)      335  5346  336  5347  5348  372
-CONVEX 2503    GT_PK(2,2)      335  5349  299  5350  5035  300
-CONVEX 2504    GT_PK(2,2)      335  5346  336  5350  5344  300
-CONVEX 2505    GT_PK(2,2)      266  5351  265  5352  5037  232
-CONVEX 2506    GT_PK(2,2)      266  5352  232  5353  3965  233
-CONVEX 2507    GT_PK(2,2)      266  5354  267  5353  4574  233
-CONVEX 2508    GT_PK(2,2)      266  5355  301  5354  5029  267
-CONVEX 2509    GT_PK(2,2)      266  5355  301  5356  5345  300
-CONVEX 2510    GT_PK(2,2)      266  5351  265  5356  5034  300
-CONVEX 2511    GT_PK(2,2)      229  5357  230  5358  5069  263
-CONVEX 2512    GT_PK(2,2)      229  5359  197  5360  4641  196
-CONVEX 2513    GT_PK(2,2)      229  5357  230  5359  5071  197
-CONVEX 2514    GT_PK(2,2)      450  5361  412  5362  5048  451
-CONVEX 2515    GT_PK(2,2)      450  5361  412  5363  5052  411
-CONVEX 2516    GT_PK(2,2)      450  5364  489  5362  2836  451
-CONVEX 2517    GT_PK(2,2)      450  5365  488  5364  3886  489
-CONVEX 2518    GT_PK(2,2)      448  5366  486  5367  4517  447
-CONVEX 2519    GT_PK(2,2)      448  5368  487  5366  4511  486
-CONVEX 2520    GT_PK(2,2)      921  5369  881  5370  5084  920
-CONVEX 2521    GT_PK(2,2)      921  5371  959  5370  5093  920
-CONVEX 2522    GT_PK(2,2)      960  5372  961  5373  5098  999
-CONVEX 2523    GT_PK(2,2)      960  5374  998  5373  5100  999
-CONVEX 2524    GT_PK(2,2)      960  5374  998  5375  5376  959
-CONVEX 2525    GT_PK(2,2)      960  5377  921  5375  5371  959
-CONVEX 2526    GT_PK(2,2)      997  5378  1036  5379  4666  1035
-CONVEX 2527    GT_PK(2,2)      997  5380  998  5378  5102  1036
-CONVEX 2528    GT_PK(2,2)      997  5381  959  5382  5094  958
-CONVEX 2529    GT_PK(2,2)      997  5380  998  5381  5376  959
-CONVEX 2530    GT_PK(2,2)      1223  5383  1255  5384  4677  1256
-CONVEX 2531    GT_PK(2,2)      1223  5385  1224  5384  5112  1256
-CONVEX 2532    GT_PK(2,2)      1223  5383  1255  5386  4679  1222
-CONVEX 2533    GT_PK(2,2)      1223  5385  1224  5387  5105  1190
-CONVEX 2534    GT_PK(2,2)      1223  5386  1222  5388  2309  1189
-CONVEX 2535    GT_PK(2,2)      1223  5387  1190  5388  3242  1189
-CONVEX 2536    GT_PK(2,2)      581  5389  541  5390  5120  542
-CONVEX 2537    GT_PK(2,2)      581  5391  620  5392  4721  621
-CONVEX 2538    GT_PK(2,2)      581  5390  542  5393  3282  582
-CONVEX 2539    GT_PK(2,2)      581  5392  621  5393  3304  582
-CONVEX 2540    GT_PK(2,2)      657  5394  658  5395  5123  697
-CONVEX 2541    GT_PK(2,2)      657  5396  696  5395  5136  697
-CONVEX 2542    GT_PK(2,2)      618  5397  658  5398  5125  619
-CONVEX 2543    GT_PK(2,2)      618  5399  657  5400  5401  617
-CONVEX 2544    GT_PK(2,2)      618  5399  657  5397  5394  658
-CONVEX 2545    GT_PK(2,2)      576  5402  616  5403  5134  615
-CONVEX 2546    GT_PK(2,2)      576  5404  536  5405  3776  575
-CONVEX 2547    GT_PK(2,2)      576  5403  615  5405  3854  575
-CONVEX 2548    GT_PK(2,2)      656  5406  616  5407  5408  617
-CONVEX 2549    GT_PK(2,2)      656  5409  657  5407  5401  617
-CONVEX 2550    GT_PK(2,2)      656  5409  657  5410  5396  696
-CONVEX 2551    GT_PK(2,2)      656  5410  696  5411  5139  695
-CONVEX 2552    GT_PK(2,2)      656  5411  695  5412  3849  655
-CONVEX 2553    GT_PK(2,2)      656  5406  616  5412  5135  655
-CONVEX 2554    GT_PK(2,2)      540  5413  541  5414  5121  502
-CONVEX 2555    GT_PK(2,2)      462  5415  461  5416  4719  423
-CONVEX 2556    GT_PK(2,2)      462  5417  424  5416  4922  423
-CONVEX 2557    GT_PK(2,2)      462  5417  424  5418  4923  463
-CONVEX 2558    GT_PK(2,2)      919  5419  957  5420  5421  958
-CONVEX 2559    GT_PK(2,2)      919  5422  918  5419  5140  957
-CONVEX 2560    GT_PK(2,2)      919  5423  920  5420  5095  958
-CONVEX 2561    GT_PK(2,2)      919  5423  920  5424  5086  880
-CONVEX 2562    GT_PK(2,2)      919  5425  879  5424  5090  880
-CONVEX 2563    GT_PK(2,2)      919  5422  918  5425  5145  879
-CONVEX 2564    GT_PK(2,2)      594  5426  633  5427  4800  593
-CONVEX 2565    GT_PK(2,2)      594  5428  554  5427  5153  593
-CONVEX 2566    GT_PK(2,2)      594  5426  633  5429  4798  634
-CONVEX 2567    GT_PK(2,2)      594  5428  554  5430  5151  555
-CONVEX 2568    GT_PK(2,2)      594  5431  595  5429  5147  634
-CONVEX 2569    GT_PK(2,2)      594  5431  595  5430  5148  555
-CONVEX 2570    GT_PK(2,2)      514  5432  476  5433  4772  475
-CONVEX 2571    GT_PK(2,2)      514  5434  554  5435  5154  553
-CONVEX 2572    GT_PK(2,2)      514  5432  476  5436  4774  515
-CONVEX 2573    GT_PK(2,2)      514  5434  554  5436  5152  515
-CONVEX 2574    GT_PK(2,2)      514  5437  513  5435  5438  553
-CONVEX 2575    GT_PK(2,2)      514  5437  513  5433  5321  475
-CONVEX 2576    GT_PK(2,2)      591  5439  631  5440  4782  592
-CONVEX 2577    GT_PK(2,2)      591  5441  630  5439  5158  631
-CONVEX 2578    GT_PK(2,2)      590  5442  630  5443  5161  629
-CONVEX 2579    GT_PK(2,2)      590  5444  589  5443  2028  629
-CONVEX 2580    GT_PK(2,2)      590  5445  550  5444  4176  589
-CONVEX 2581    GT_PK(2,2)      590  5446  591  5442  5441  630
-CONVEX 2582    GT_PK(2,2)      590  5447  551  5445  5155  550
-CONVEX 2583    GT_PK(2,2)      590  5446  591  5447  5448  551
-CONVEX 2584    GT_PK(2,2)      1177  5449  1176  5450  5186  1142
-CONVEX 2585    GT_PK(2,2)      1177  5451  1143  5452  5197  1178
-CONVEX 2586    GT_PK(2,2)      1177  5451  1143  5450  5199  1142
-CONVEX 2587    GT_PK(2,2)      1177  5452  1178  5453  2692  1211
-CONVEX 2588    GT_PK(2,2)      1177  5454  1210  5453  4268  1211
-CONVEX 2589    GT_PK(2,2)      1177  5449  1176  5454  5189  1210
-CONVEX 2590    GT_PK(2,2)      1175  5455  1176  5456  5188  1209
-CONVEX 2591    GT_PK(2,2)      1175  5457  1174  5458  3495  1208
-CONVEX 2592    GT_PK(2,2)      1175  5456  1209  5458  4856  1208
-CONVEX 2593    GT_PK(2,2)      1175  5457  1174  5459  3501  1140
-CONVEX 2594    GT_PK(2,2)      1175  5460  1141  5459  5461  1140
-CONVEX 2595    GT_PK(2,2)      1175  5455  1176  5460  5187  1141
-CONVEX 2596    GT_PK(2,2)      1105  5462  1068  5463  5201  1104
-CONVEX 2597    GT_PK(2,2)      1105  5464  1106  5465  4848  1141
-CONVEX 2598    GT_PK(2,2)      1105  5465  1141  5466  5461  1140
-CONVEX 2599    GT_PK(2,2)      1105  5463  1104  5466  4852  1140
-CONVEX 2600    GT_PK(2,2)      1069  5467  1106  5468  5193  1070
-CONVEX 2601    GT_PK(2,2)      1069  5469  1068  5470  5204  1031
-CONVEX 2602    GT_PK(2,2)      1069  5471  1105  5467  5464  1106
-CONVEX 2603    GT_PK(2,2)      1069  5471  1105  5469  5462  1068
-CONVEX 2604    GT_PK(2,2)      1069  5472  1032  5468  3465  1070
-CONVEX 2605    GT_PK(2,2)      1069  5470  1031  5472  3470  1032
-CONVEX 2606    GT_PK(2,2)      1354  5473  1377  5474  4872  1353
-CONVEX 2607    GT_PK(2,2)      1354  5475  1328  5474  4873  1353
-CONVEX 2608    GT_PK(2,2)      1354  5473  1377  5476  5228  1378
-CONVEX 2609    GT_PK(2,2)      1354  5477  1355  5476  5219  1378
-CONVEX 2610    GT_PK(2,2)      1354  5475  1328  5478  5231  1329
-CONVEX 2611    GT_PK(2,2)      1354  5477  1355  5478  5239  1329
-CONVEX 2612    GT_PK(2,2)      1300  5479  1328  5480  4874  1327
-CONVEX 2613    GT_PK(2,2)      1300  5481  1301  5479  5229  1328
-CONVEX 2614    GT_PK(2,2)      1300  5482  1299  5483  2725  1270
-CONVEX 2615    GT_PK(2,2)      1300  5482  1299  5480  3575  1327
-CONVEX 2616    GT_PK(2,2)      1300  5484  1271  5483  3614  1270
-CONVEX 2617    GT_PK(2,2)      1300  5481  1301  5484  5234  1271
-CONVEX 2618    GT_PK(2,2)      1400  5485  1401  5486  5258  1379
-CONVEX 2619    GT_PK(2,2)      1400  5487  1418  5488  5227  1378
-CONVEX 2620    GT_PK(2,2)      1400  5486  1379  5488  5220  1378
-CONVEX 2621    GT_PK(2,2)      1400  5489  1419  5487  5490  1418
-CONVEX 2622    GT_PK(2,2)      1400  5485  1401  5489  5251  1419
-CONVEX 2623    GT_PK(2,2)      174  5491  205  5492  5272  173
-CONVEX 2624    GT_PK(2,2)      174  5493  145  5494  5325  175
-CONVEX 2625    GT_PK(2,2)      174  5494  175  5495  5015  206
-CONVEX 2626    GT_PK(2,2)      174  5491  205  5495  5274  206
-CONVEX 2627    GT_PK(2,2)      142  5496  171  5497  5295  172
-CONVEX 2628    GT_PK(2,2)      142  5498  143  5497  5304  172
-CONVEX 2629    GT_PK(2,2)      142  5496  171  5499  5299  141
-CONVEX 2630    GT_PK(2,2)      142  5498  143  5500  5306  115
-CONVEX 2631    GT_PK(2,2)      142  5499  141  5501  3113  114
-CONVEX 2632    GT_PK(2,2)      142  5500  115  5501  5303  114
-CONVEX 2633    GT_PK(2,2)      552  5502  513  5503  5320  512
-CONVEX 2634    GT_PK(2,2)      552  5504  551  5503  5157  512
-CONVEX 2635    GT_PK(2,2)      552  5505  592  5506  4188  553
-CONVEX 2636    GT_PK(2,2)      552  5502  513  5506  5438  553
-CONVEX 2637    GT_PK(2,2)      552  5507  591  5505  5440  592
-CONVEX 2638    GT_PK(2,2)      552  5507  591  5504  5448  551
-CONVEX 2639    GT_PK(2,2)      144  5508  143  5509  5305  173
-CONVEX 2640    GT_PK(2,2)      144  5510  174  5509  5492  173
-CONVEX 2641    GT_PK(2,2)      144  5510  174  5511  5493  145
-CONVEX 2642    GT_PK(2,2)      144  5508  143  5512  5307  116
-CONVEX 2643    GT_PK(2,2)      118  5513  119  5514  5515  146
-CONVEX 2644    GT_PK(2,2)      118  5516  145  5514  5326  146
-CONVEX 2645    GT_PK(2,2)      118  5513  119  5517  5323  93
-CONVEX 2646    GT_PK(2,2)      118  5517  93  5518  3937  92
-CONVEX 2647    GT_PK(2,2)      147  5519  176  5520  5329  177
-CONVEX 2648    GT_PK(2,2)      147  5521  148  5522  4988  120
-CONVEX 2649    GT_PK(2,2)      147  5521  148  5520  4983  177
-CONVEX 2650    GT_PK(2,2)      147  5519  176  5523  5331  146
-CONVEX 2651    GT_PK(2,2)      147  5524  119  5522  5324  120
-CONVEX 2652    GT_PK(2,2)      147  5524  119  5523  5515  146
-CONVEX 2653    GT_PK(2,2)      408  5525  446  5526  4570  447
-CONVEX 2654    GT_PK(2,2)      408  5527  407  5525  5333  446
-CONVEX 2655    GT_PK(2,2)      332  5528  297  5529  5338  333
-CONVEX 2656    GT_PK(2,2)      332  5530  368  5531  4566  331
-CONVEX 2657    GT_PK(2,2)      332  5532  369  5530  5341  368
-CONVEX 2658    GT_PK(2,2)      332  5532  369  5529  5533  333
-CONVEX 2659    GT_PK(2,2)      262  5534  297  5535  5336  263
-CONVEX 2660    GT_PK(2,2)      262  5536  229  5535  5358  263
-CONVEX 2661    GT_PK(2,2)      373  5537  336  5538  5348  372
-CONVEX 2662    GT_PK(2,2)      373  5539  410  5538  5540  372
-CONVEX 2663    GT_PK(2,2)      373  5541  411  5542  5053  374
-CONVEX 2664    GT_PK(2,2)      373  5539  410  5541  5543  411
-CONVEX 2665    GT_PK(2,2)      228  5544  261  5545  5044  227
-CONVEX 2666    GT_PK(2,2)      228  5546  229  5547  5360  196
-CONVEX 2667    GT_PK(2,2)      228  5548  262  5544  5549  261
-CONVEX 2668    GT_PK(2,2)      228  5548  262  5546  5536  229
-CONVEX 2669    GT_PK(2,2)      228  5550  195  5547  3960  196
-CONVEX 2670    GT_PK(2,2)      228  5545  227  5550  4596  195
-CONVEX 2671    GT_PK(2,2)      449  5551  448  5552  5368  487
-CONVEX 2672    GT_PK(2,2)      449  5552  487  5553  4510  488
-CONVEX 2673    GT_PK(2,2)      449  5554  450  5553  5365  488
-CONVEX 2674    GT_PK(2,2)      449  5554  450  5555  5363  411
-CONVEX 2675    GT_PK(2,2)      449  5556  410  5555  5543  411
-CONVEX 2676    GT_PK(2,2)      449  5551  448  5556  5557  410
-CONVEX 2677    GT_PK(2,2)      882  5558  921  5559  5369  881
-CONVEX 2678    GT_PK(2,2)      882  5560  843  5561  3800  883
-CONVEX 2679    GT_PK(2,2)      882  5562  842  5560  4659  843
-CONVEX 2680    GT_PK(2,2)      882  5559  881  5562  5088  842
-CONVEX 2681    GT_PK(2,2)      922  5563  960  5564  5377  921
-CONVEX 2682    GT_PK(2,2)      922  5565  883  5566  3797  923
-CONVEX 2683    GT_PK(2,2)      922  5567  961  5566  5099  923
-CONVEX 2684    GT_PK(2,2)      922  5563  960  5567  5372  961
-CONVEX 2685    GT_PK(2,2)      922  5568  882  5565  5561  883
-CONVEX 2686    GT_PK(2,2)      922  5568  882  5564  5558  921
-CONVEX 2687    GT_PK(2,2)      996  5569  995  5570  5181  957
-CONVEX 2688    GT_PK(2,2)      996  5570  957  5571  5421  958
-CONVEX 2689    GT_PK(2,2)      996  5572  997  5571  5382  958
-CONVEX 2690    GT_PK(2,2)      996  5572  997  5573  5379  1035
-CONVEX 2691    GT_PK(2,2)      996  5574  1034  5573  4839  1035
-CONVEX 2692    GT_PK(2,2)      996  5569  995  5574  5185  1034
-CONVEX 2693    GT_PK(2,2)      578  5575  618  5576  5400  617
-CONVEX 2694    GT_PK(2,2)      578  5577  538  5578  5579  539
-CONVEX 2695    GT_PK(2,2)      580  5580  540  5581  5413  541
-CONVEX 2696    GT_PK(2,2)      580  5582  620  5583  4724  619
-CONVEX 2697    GT_PK(2,2)      580  5584  581  5582  5391  620
-CONVEX 2698    GT_PK(2,2)      580  5584  581  5581  5389  541
-CONVEX 2699    GT_PK(2,2)      579  5585  540  5586  5587  539
-CONVEX 2700    GT_PK(2,2)      579  5588  578  5586  5578  539
-CONVEX 2701    GT_PK(2,2)      579  5588  578  5589  5575  618
-CONVEX 2702    GT_PK(2,2)      579  5589  618  5590  5398  619
-CONVEX 2703    GT_PK(2,2)      579  5591  580  5590  5583  619
-CONVEX 2704    GT_PK(2,2)      579  5591  580  5585  5580  540
-CONVEX 2705    GT_PK(2,2)      501  5592  540  5593  5587  539
-CONVEX 2706    GT_PK(2,2)      501  5594  462  5595  5418  463
-CONVEX 2707    GT_PK(2,2)      501  5595  463  5596  4741  502
-CONVEX 2708    GT_PK(2,2)      501  5592  540  5596  5414  502
-CONVEX 2709    GT_PK(2,2)      577  5597  576  5598  5402  616
-CONVEX 2710    GT_PK(2,2)      577  5598  616  5599  5408  617
-CONVEX 2711    GT_PK(2,2)      577  5600  578  5599  5576  617
-CONVEX 2712    GT_PK(2,2)      577  5600  578  5601  5577  538
-CONVEX 2713    GT_PK(2,2)      500  5602  462  5603  5415  461
-CONVEX 2714    GT_PK(2,2)      500  5604  538  5605  5579  539
-CONVEX 2715    GT_PK(2,2)      500  5606  501  5605  5593  539
-CONVEX 2716    GT_PK(2,2)      500  5606  501  5602  5594  462
-CONVEX 2717    GT_PK(2,2)      500  5603  461  5607  4718  499
-CONVEX 2718    GT_PK(2,2)      500  5604  538  5607  5608  499
-CONVEX 2719    GT_PK(2,2)      117  5609  118  5610  5518  92
-CONVEX 2720    GT_PK(2,2)      117  5611  144  5612  5512  116
-CONVEX 2721    GT_PK(2,2)      117  5611  144  5613  5511  145
-CONVEX 2722    GT_PK(2,2)      117  5609  118  5613  5516  145
-CONVEX 2723    GT_PK(2,2)      117  5614  91  5610  4911  92
-CONVEX 2724    GT_PK(2,2)      117  5612  116  5614  3703  91
-CONVEX 2725    GT_PK(2,2)      409  5615  410  5616  5540  372
-CONVEX 2726    GT_PK(2,2)      409  5617  408  5618  5526  447
-CONVEX 2727    GT_PK(2,2)      409  5619  448  5618  5367  447
-CONVEX 2728    GT_PK(2,2)      409  5619  448  5615  5557  410
-CONVEX 2729    GT_PK(2,2)      371  5620  335  5621  5347  372
-CONVEX 2730    GT_PK(2,2)      371  5622  409  5621  5616  372
-CONVEX 2731    GT_PK(2,2)      371  5622  409  5623  5617  408
-CONVEX 2732    GT_PK(2,2)      296  5624  262  5625  5534  297
-CONVEX 2733    GT_PK(2,2)      296  5626  331  5627  3954  295
-CONVEX 2734    GT_PK(2,2)      296  5628  261  5627  5047  295
-CONVEX 2735    GT_PK(2,2)      296  5624  262  5628  5549  261
-CONVEX 2736    GT_PK(2,2)      296  5629  332  5626  5531  331
-CONVEX 2737    GT_PK(2,2)      296  5629  332  5625  5528  297
-CONVEX 2738    GT_PK(2,2)      337  5630  373  5631  5537  336
-CONVEX 2739    GT_PK(2,2)      337  5631  336  5632  5343  301
-CONVEX 2740    GT_PK(2,2)      337  5633  374  5634  4602  338
-CONVEX 2741    GT_PK(2,2)      337  5630  373  5633  5542  374
-CONVEX 2742    GT_PK(2,2)      337  5634  338  5635  3095  302
-CONVEX 2743    GT_PK(2,2)      337  5632  301  5635  5030  302
-CONVEX 2744    GT_PK(2,2)      537  5636  577  5637  5597  576
-CONVEX 2745    GT_PK(2,2)      537  5638  536  5639  2990  498
-CONVEX 2746    GT_PK(2,2)      537  5637  576  5638  5404  536
-CONVEX 2747    GT_PK(2,2)      537  5640  499  5639  4100  498
-CONVEX 2748    GT_PK(2,2)      537  5641  538  5640  5608  499
-CONVEX 2749    GT_PK(2,2)      537  5636  577  5641  5601  538
-CONVEX 2750    GT_PK(2,2)      334  5642  371  5643  5620  335
-CONVEX 2751    GT_PK(2,2)      334  5643  335  5644  5349  299
-CONVEX 2752    GT_PK(2,2)      334  5645  333  5646  5339  298
-CONVEX 2753    GT_PK(2,2)      334  5644  299  5646  5032  298
-CONVEX 2754    GT_PK(2,2)      370  5647  408  5648  5527  407
-CONVEX 2755    GT_PK(2,2)      370  5649  371  5647  5623  408
-CONVEX 2756    GT_PK(2,2)      370  5650  369  5648  5342  407
-CONVEX 2757    GT_PK(2,2)      370  5651  334  5649  5642  371
-CONVEX 2758    GT_PK(2,2)      370  5650  369  5652  5533  333
-CONVEX 2759    GT_PK(2,2)      370  5651  334  5652  5645  333
-
-END MESH STRUCTURE DESCRIPTION
diff --git a/tests/meshes/disc_P2_h0.15.mesh b/tests/meshes/disc_P2_h0_3.mesh
old mode 100755
new mode 100644
similarity index 100%
rename from tests/meshes/disc_P2_h0.15.mesh
rename to tests/meshes/disc_P2_h0_3.mesh
diff --git a/tests/meshes/disc_P2_h0.25.mesh b/tests/meshes/disc_P2_h0_5.mesh
old mode 100755
new mode 100644
similarity index 100%
rename from tests/meshes/disc_P2_h0.25.mesh
rename to tests/meshes/disc_P2_h0_5.mesh
diff --git a/tests/meshes/disc_P2_h1.mesh b/tests/meshes/disc_P2_h1.mesh
old mode 100755
new mode 100644
index 35b2731..90ef1cb
--- a/tests/meshes/disc_P2_h1.mesh
+++ b/tests/meshes/disc_P2_h1.mesh
@@ -10,1392 +10,5654 @@ BEGIN POINTS LIST
   POINT  2  -20  20
   POINT  3  20  20
   POINT  4  0  40
-  POINT  5  -7.08999439411224  1.298877587388341
-  POINT  6  -5.282004223598042  0.7100950914239894
-  POINT  7  -3.47031521720064  0.3033781502190239
-  POINT  8  -1.689974063564663  0.07152821552843025
-  POINT  9  1.689960162663852  0.07152703670926773
-  POINT  10  3.470291113247503  0.3033739033986539
-  POINT  11  5.281972434142698  0.7100863867937268
-  POINT  12  7.089956578995546  1.298863250915369
-  POINT  13  -10.33788236531681  2.879013223504487
-  POINT  14  -8.728323343402396  2.005101511455367
-  POINT  15  -6.155723063676203  2.801434963065342
-  POINT  16  -4.091201195594828  2.459658715166061
-  POINT  17  -2.066659832781266  2.187655143712953
-  POINT  18  -4.444059962388502e-06  2.064287137447093
-  POINT  19  2.066650046418929  2.187657831466219
-  POINT  20  4.091191239691891  2.459658150301677
-  POINT  21  6.155715570419536  2.801429443148412
-  POINT  22  8.728292838334855  2.005086715177716
-  POINT  23  10.3378510065  2.878994288669519
-  POINT  24  -13.31700959313135  5.078295824654251
-  POINT  25  -11.8842697780299  3.913852796799773
-  POINT  26  -9.460448082417175  4.366488604800259
-  POINT  27  -7.512025315084293  4.126002865730436
-  POINT  28  -5.172892121816004  4.455275571417475
-  POINT  29  -3.057534701397881  4.267955770521298
-  POINT  30  -1.012355277947994  4.110780430542055
-  POINT  31  1.012349419089582  4.110782567666035
-  POINT  32  3.057529483199409  4.267957853121388
-  POINT  33  5.172886691584971  4.455272913530382
-  POINT  34  7.512016782430195  4.125998677146069
-  POINT  35  9.460436885249777  4.366480067235193
-  POINT  36  11.88424594459136  3.913835188943747
-  POINT  37  13.31698679929866  5.078275482126558
-  POINT  38  -14.7498830675396  6.492929647996144
-  POINT  39  -12.45509720824102  6.556537137387828
-  POINT  40  -10.6482491458674  5.948211070168938
-  POINT  41  -8.422109451390526  6.167912606077227
-  POINT  42  -6.353060403793894  6.112985632708121
-  POINT  43  -4.1407681774423  6.228053553808773
-  POINT  44  -2.044474263097546  6.130734213928414
-  POINT  45  -1.590000917432027e-06  6.079527809516725
-  POINT  46  2.044472146376001  6.130736081211611
-  POINT  47  4.140767470322072  6.22805374467435
-  POINT  48  6.353058937427791  6.112982734736828
-  POINT  49  8.422108492096564  6.167907314850485
-  POINT  50  10.64824854146091  5.948202934940974
-  POINT  51  12.45509688415863  6.556538659055924
-  POINT  52  14.74986960384593  6.492914945498344
-  POINT  53  -16.04355519086491  8.058294224118221
-  POINT  54  -13.74135223644284  8.192183278283656
-  POINT  55  -11.47752803375488  8.160729976898475
-  POINT  56  -9.493527168153337  7.92578225082361
-  POINT  57  -7.348476128284648  8.030483731407866
-  POINT  58  -5.251990097092846  8.021830105465815
-  POINT  59  -3.111403417400961  8.061569553457121
-  POINT  60  -1.03035566619991  8.025902010406856
-  POINT  61  1.030354767138576  8.025902400729668
-  POINT  62  3.111403710309801  8.061569941428463
-  POINT  63  5.251991017315566  8.021829123575905
-  POINT  64  7.348476568276788  8.030480163525478
-  POINT  65  9.49352663676625  7.92577656119784
-  POINT  66  11.47752506667806  8.160726192772536
-  POINT  67  13.74135116972482  8.192181839463158
-  POINT  68  16.04354708966182  8.058283340247721
-  POINT  69  -17.19580986241097  9.787060992258192
-  POINT  70  -14.93702314944201  9.823933424582281
-  POINT  71  -12.67351421081692  9.907845730886832
-  POINT  72  -10.48194789872941  9.921029402134767
-  POINT  73  -8.415247672061369  9.840575684874789
-  POINT  74  -6.293821461179366  9.890161035967978
-  POINT  75  -4.18979493172746  9.895564239362063
-  POINT  76  -2.081243704999238  9.916613908721169
-  POINT  77  5.730172508017217e-08  9.910960593168005
-  POINT  78  2.081244132593595  9.916613808527552
-  POINT  79  4.189795976700378  9.895563750716825
-  POINT  80  6.293822706796825  9.890159478467984
-  POINT  81  8.415248200245212  9.840572417227369
-  POINT  82  10.48194698614503  9.921026346494969
-  POINT  83  12.67351249301398  9.90784290415405
-  POINT  84  14.93702196401547  9.823930709655935
-  POINT  85  17.19580506925672  9.787052921897237
-  POINT  86  -18.1760415240729  11.65545001122227
-  POINT  87  -15.97553246064111  11.5448525408589
-  POINT  88  -13.78571642443011  11.61751913076442
-  POINT  89  -11.59628723826348  11.69602393958708
-  POINT  90  -9.442169657304916  11.7276271718398
-  POINT  91  -7.349624558628578  11.71151253389753
-  POINT  92  -5.24282073613147  11.73166174921223
-  POINT  93  -3.137905182843987  11.749161104766
-  POINT  94  -1.042556134226208  11.76547185321201
-  POINT  95  1.042556695466196  11.76547172930404
-  POINT  96  3.13790593838561  11.74916068398455
-  POINT  97  5.242821722657395  11.73166093775092
-  POINT  98  7.349625501825332  11.7115109952139
-  POINT  99  9.442169874348188  11.72762525690472
-  POINT  100  11.59628683371615  11.69602200942614
-  POINT  101  13.78571564810794  11.61751684765504
-  POINT  102  15.97553159279355  11.54484971825705
-  POINT  103  18.17603883633879  11.65544415682245
-  POINT  104  -18.9605397782243  13.63620150237337
-  POINT  105  -16.8378114819632  13.34701391345798
-  POINT  106  -14.74755920142683  13.39190264700377
-  POINT  107  -12.63015409928628  13.45515225576576
-  POINT  108  -10.4974158537763  13.51638952902862
-  POINT  109  -8.377087236386718  13.55137598391785
-  POINT  110  -6.285880485474346  13.5571522438029
-  POINT  111  -4.197964629953373  13.554499339371
-  POINT  112  -2.088214950681028  13.58585648886253
-  POINT  113  2.731150748891409e-07  13.59731244193799
-  POINT  114  2.088215540160786  13.58585624443037
-  POINT  115  4.197965288358211  13.55449885456938
-  POINT  116  6.285881219549023  13.55715142631005
-  POINT  117  8.377087797482492  13.5513749885778
-  POINT  118  10.49741609890272  13.51638838986579
-  POINT  119  12.63015411255437  13.45515089704564
-  POINT  120  14.74755900190871  13.3919008647022
-  POINT  121  16.83781104922592  13.34701152878708
-  POINT  122  18.96053842326367  13.63619746535554
-  POINT  123  -19.5357573624754  15.71582163367355
-  POINT  124  -17.53374306722162  15.20882267305824
-  POINT  125  -15.57069741754931  15.24451363995668
-  POINT  126  -13.55098734811856  15.27194090964616
-  POINT  127  -11.4874826074671  15.31182390849893
-  POINT  128  -9.398270307101383  15.3521915525082
-  POINT  129  -7.307964300837752  15.3807112166889
-  POINT  130  -5.231490199222396  15.39200882295255
-  POINT  131  -3.169152633696715  15.35291249391119
-  POINT  132  -1.041499472772248  15.40847695692984
-  POINT  133  1.041499922227459  15.40847686112553
-  POINT  134  3.169153095957357  15.35291225824823
-  POINT  135  5.231490717147384  15.39200836588829
-  POINT  136  7.307964797170775  15.38071066913708
-  POINT  137  9.398270745362067  15.35219096658757
-  POINT  138  11.48748296447435  15.31182320391143
-  POINT  139  13.55098760797554  15.27193995853761
-  POINT  140  15.57069756108526  15.24451232768288
-  POINT  141  17.5337430129703  15.20882089303506
-  POINT  142  19.53575681130713  15.71581912036011
-  POINT  143  -18.2269232082509  17.13021291903821
-  POINT  144  -16.40696619670878  17.17145148168169
-  POINT  145  -14.46503683750223  17.15281425943443
-  POINT  146  -12.45424174106675  17.15199836204197
-  POINT  147  -10.39981013664358  17.16515504075176
-  POINT  148  -8.328026293006795  17.18988295252257
-  POINT  149  -6.256758829896484  17.21190086556036
-  POINT  150  -4.196112455235621  17.22388615617422
-  POINT  151  -2.171217513306863  17.11254059462183
-  POINT  152  1.665915350806957e-07  17.22074676082319
-  POINT  153  2.171217828945217  17.1125405142267
-  POINT  154  4.19611284158213  17.22388591748381
-  POINT  155  6.256759233014987  17.21190057227975
-  POINT  156  8.32802671761999  17.18988265372117
-  POINT  157  10.39981059340922  17.16515474428726
-  POINT  158  12.45424219159261  17.15199799003971
-  POINT  159  14.46503723679426  17.15281363556374
-  POINT  160  16.40696659288819  17.17145057879611
-  POINT  161  18.22692352993353  17.13021164782587
-  POINT  162  -19.89780896458842  17.98079262859248
-  POINT  163  -17.84230000449807  19.0216744028301
-  POINT  164  -15.67627065513821  19.02313060013363
-  POINT  165  -13.55906626932976  19.0036025225671
-  POINT  166  -11.45548002657009  18.98870888881037
-  POINT  167  -9.365348057261556  18.99918972787285
-  POINT  168  -7.287998267664897  19.0218085635537
-  POINT  169  -5.225476971032742  19.04419029905378
-  POINT  170  -3.181207515747626  19.06061320124515
-  POINT  171  -1.234450813224698  18.81027364364246
-  POINT  172  1.234451001429794  18.8102736784703
-  POINT  173  3.181207777678578  19.06061305006857
-  POINT  174  5.225477302694968  19.04419014960234
-  POINT  175  7.287998656796332  19.02180842950959
-  POINT  176  9.365348511226138  18.99918964629332
-  POINT  177  11.45548052731511  18.98870888549819
-  POINT  178  13.55906673221513  19.00360248933783
-  POINT  179  15.6762709640833  19.02313030096059
-  POINT  180  17.84230024444024  19.02167396477342
-  POINT  181  19.89780885181004  17.98079151724459
-  POINT  182  -18.34809671121251  20.89054860233434
-  POINT  183  -16.5148528869666  20.87800710044906
-  POINT  184  -14.52694695679922  20.85426661015416
-  POINT  185  -12.45599638977427  20.8108810324845
-  POINT  186  -10.37011211347385  20.80605366101868
-  POINT  187  -8.288100923056527  20.82387931457176
-  POINT  188  -6.210897946834899  20.84807602452601
-  POINT  189  -4.130583790032196  20.86687448767059
-  POINT  190  -2.030932593701857  20.87063865748742
-  POINT  191  9.744431586633517e-08  21.64935021861394
-  POINT  192  2.030932751362846  20.87063857502341
-  POINT  193  4.130584013659444  20.86687431844705
-  POINT  194  6.210898346296974  20.84807594605767
-  POINT  195  8.288101445193462  20.82387932992417
-  POINT  196  10.37011274159265  20.80605382218947
-  POINT  197  12.45599711658471  20.8108813744629
-  POINT  198  14.52694762208812  20.85426702370534
-  POINT  199  16.51485331119099  20.87800725634424
-  POINT  200  18.348097009919  20.89054895986076
-  POINT  201  -19.88382274553589  22.15257822717576
-  POINT  202  -17.85872906553023  22.79187608979278
-  POINT  203  -15.75836820209814  22.71857538973881
-  POINT  204  -13.57945048306569  22.62787433244293
-  POINT  205  -11.43502337227142  22.60571660119635
-  POINT  206  -9.32896785495339  22.62172230713452
-  POINT  207  -7.252191943285577  22.65010775210676
-  POINT  208  -5.19352107545026  22.67271964550248
-  POINT  209  -3.145718127729072  22.67904520073677
-  POINT  210  -1.19802941618547  22.93488185752093
-  POINT  211  1.198029575535804  22.93488182516196
-  POINT  212  3.145718298303114  22.67904507452085
-  POINT  213  5.193521324838902  22.67271937177574
-  POINT  214  7.252192530636423  22.65010772431655
-  POINT  215  9.328968618053137  22.62172251326393
-  POINT  216  11.43502432491394  22.60571702295378
-  POINT  217  13.57945157268804  22.62787513308746
-  POINT  218  15.75836910518877  22.71857642015902
-  POINT  219  17.85872913941462  22.7918771500154
-  POINT  220  19.88382260621709  22.15257951409296
-  POINT  221  -19.56496589012501  24.14874796995999
-  POINT  222  -17.12378015908613  24.49263729810405
-  POINT  223  -14.75261366404331  24.36653106466741
-  POINT  224  -12.51545015644557  24.36405857012063
-  POINT  225  -10.36487612468117  24.40059700241373
-  POINT  226  -8.270782662155399  24.44922254990688
-  POINT  227  -6.207288303035652  24.48752518657241
-  POINT  228  -4.152672439085122  24.50430982838724
-  POINT  229  -2.144764510838116  24.6392641397031
-  POINT  230  6.736184551131563e-08  24.56637229685156
-  POINT  231  2.144764639428793  24.6392640566236
-  POINT  232  4.152672593221236  24.5043096033403
-  POINT  233  6.207288592802848  24.48752465778632
-  POINT  234  8.270783499471428  24.44922265688236
-  POINT  235  10.36487726829784  24.4005974184117
-  POINT  236  12.51545141239867  24.36405943508291
-  POINT  237  14.75261493047371  24.36653271363972
-  POINT  238  17.12378075459493  24.4926401834798
-  POINT  239  19.56496529523762  24.14875077537231
-  POINT  240  -19.08648829040304  25.9754468234863
-  POINT  241  -17.2845615037453  26.31014844212238
-  POINT  242  -15.41261905344529  26.10941999036963
-  POINT  243  -13.37179093546351  26.11632995430249
-  POINT  244  -11.29591265365937  26.16877399507631
-  POINT  245  -9.236109783161917  26.24563353410026
-  POINT  246  -7.197506282144635  26.30683884552605
-  POINT  247  -5.148124747507762  26.32635712487787
-  POINT  248  -3.122954853611116  26.40463970225008
-  POINT  249  -1.028840474391874  26.37582534616704
-  POINT  250  1.028840597301122  26.37582532979795
-  POINT  251  3.122954923639289  26.40463955141999
-  POINT  252  5.148124848876652  26.32635667877105
-  POINT  253  7.197506356103443  26.30683804371632
-  POINT  254  9.236111124219747  26.24563372506302
-  POINT  255  11.29591412227338  26.16877501716782
-  POINT  256  13.3717921011747  26.11633170886203
-  POINT  257  15.41261961645513  26.1094231779272
-  POINT  258  17.28456075910474  26.31015378144565
-  POINT  259  19.08648669351269  25.97545192419629
-  POINT  260  -18.31673994912508  28.03100477126815
-  POINT  261  -16.29279631468638  28.07734896422777
-  POINT  262  -14.29108105178232  27.93826211324394
-  POINT  263  -12.23205698562959  27.95454691920996
-  POINT  264  -10.1921242779246  28.04641052160824
-  POINT  265  -8.184908522052318  28.14581978804722
-  POINT  266  -6.142892720399755  28.15468429908139
-  POINT  267  -4.115765842832939  28.20978375998045
-  POINT  268  -2.044953225702631  28.19763670818671
-  POINT  269  1.215817429928157e-07  28.20528019734085
-  POINT  270  2.044953387448034  28.19763672758267
-  POINT  271  4.115765884875199  28.20978350344839
-  POINT  272  6.142892053295159  28.15468405294527
-  POINT  273  8.184908802060571  28.1458177672969
-  POINT  274  10.1921266003412  28.04641156253142
-  POINT  275  12.23205881411247  27.95454935528251
-  POINT  276  14.2910815778731  27.93826589300298
-  POINT  277  16.29279479603289  28.07735539177588
-  POINT  278  18.31673641698378  28.0310128272082
-  POINT  279  -17.36678064292307  29.91942186322351
-  POINT  280  -15.30701199611502  29.80163024565981
-  POINT  281  -13.1975126296105  29.73273604910611
-  POINT  282  -11.14232609374812  29.83834011557202
-  POINT  283  -9.18383040196667  30.00598319236085
-  POINT  284  -7.135586668146636  29.99761305864382
-  POINT  285  -5.123286168201119  30.04271988926355
-  POINT  286  -3.053121112865554  30.02630175178171
-  POINT  287  -1.015876570824747  30.05156154994286
-  POINT  288  1.015877381461083  30.05156170293002
-  POINT  289  3.053121697974701  30.02630185030043
-  POINT  290  5.123284228587577  30.0427213293883
-  POINT  291  7.135586245905698  29.99761060242232
-  POINT  292  9.183831168146963  30.00598031130402
-  POINT  293  11.14232972160493  29.83834373724195
-  POINT  294  13.19751369866922  29.73274161644041
-  POINT  295  15.30700948964564  29.80163858123015
-  POINT  296  17.36677404971316  29.91943340651388
-  POINT  297  -16.21450019303935  31.70854318392894
-  POINT  298  -14.18134842576247  31.46072633556853
-  POINT  299  -12.05433474215738  31.57807989769072
-  POINT  300  -10.18803390533311  31.90895778516169
-  POINT  301  -8.127827538982091  31.83562093362241
-  POINT  302  -6.132870312528693  31.91947084481104
-  POINT  303  -4.060514707104238  31.84886116654844
-  POINT  304  -2.023054298900899  31.90620457141977
-  POINT  305  1.779731685490338e-06  31.92616315841029
-  POINT  306  2.023057639192921  31.90620515692421
-  POINT  307  4.060510421402324  31.84886697474238
-  POINT  308  6.132869669181516  31.91946778705557
-  POINT  309  8.127827628663475  31.83561745950141
-  POINT  310  10.18803390203203  31.90895591912609
-  POINT  311  12.05433729770214  31.5780897141657
-  POINT  312  14.18134461110469  31.46073802168817
-  POINT  313  16.21448882325949  31.70855892928177
-  POINT  314  -14.85855987098478  33.38742688347396
-  POINT  315  -12.97622115412793  33.15231979037343
-  POINT  316  -11.24542238667929  33.84152597332419
-  POINT  317  -9.096796145803623  33.67355592311518
-  POINT  318  -7.169110863793735  33.81460869617811
-  POINT  319  -5.025802643706024  33.69074033624606
-  POINT  320  -3.036012504986613  33.74897677262599
-  POINT  321  -1.006001725651425  33.81394161048243
-  POINT  322  1.006017505359627  33.81394238106373
-  POINT  323  3.03600454008222  33.7489957057666
-  POINT  324  5.025801824829388  33.69073476359576
-  POINT  325  7.169110502599582  33.81460511144136
-  POINT  326  9.09679356939724  33.67355436459209
-  POINT  327  11.24541326548703  33.84153193558982
-  POINT  328  12.97621626240949  33.15233833055714
-  POINT  329  14.85854134665239  33.38744744340443
-  POINT  330  -13.24234864752243  34.98800194480442
-  POINT  331  -10.03539086910046  35.3828070140792
-  POINT  332  -8.191323309688949  35.8082238544771
-  POINT  333  -5.969442595277822  35.42728838548917
-  POINT  334  -3.964572821971675  35.68073227615353
-  POINT  335  -2.062446042804255  35.66361537576937
-  POINT  336  3.401394552337428e-05  35.7433135846511
-  POINT  337  2.062435708551036  35.66367717807774
-  POINT  338  3.96457676799794  35.68072163899399
-  POINT  339  5.969444351238414  35.42728363799607
-  POINT  340  8.19131937738778  35.80822453891639
-  POINT  341  10.03538306356879  35.38281277249126
-  POINT  342  13.2423188856883  34.98802824022632
-  POINT  343  -11.71964489363993  36.20647782730662
-  POINT  344  -9.885418518050601  37.38615830834937
-  POINT  345  -6.769213566269587  37.09871131951007
-  POINT  346  -4.834310082657146  37.45809613171494
-  POINT  347  -2.966207997229898  37.80957975457357
-  POINT  348  -1.228951401026502  37.50853541118494
-  POINT  349  1.228967413584314  37.50873516084056
-  POINT  350  2.966244431714553  37.80956888117363
-  POINT  351  4.834322604660215  37.45809313826081
-  POINT  352  6.769215951806145  37.09871058669637
-  POINT  353  9.885380262406448  37.38618005968161
-  POINT  354  11.71961051109886  36.20650269083999
-  POINT  355  -8.160801736293346  38.25928024378061
-  POINT  356  -6.108721403629119  39.04425169999729
-  POINT  357  -4.094025391529261  39.57648988183318
-  POINT  358  -2.032918826278168  39.89641276827972
-  POINT  359  -0.000114943787747096  38.55954134616952
-  POINT  360  2.032857647557499  39.89641901912924
-  POINT  361  4.093978133093873  39.57649976491602
-  POINT  362  6.108678764431183  39.04426537708952
-  POINT  363  8.16076002653128  38.25929888548312
-  POINT  364  19.74927974328947  16.84311090331085
-  POINT  365  19.06236619087178  17.55550158253523
-  POINT  366  18.88134017062033  16.42301538409299
-  POINT  367  18.87005454812514  18.50123274100901
-  POINT  368  18.92115012222012  19.51083698238671
-  POINT  369  19.97443587516672  18.98910375220634
-  POINT  370  18.03461188718688  18.07594280629964
-  POINT  371  -1.016516885032958  39.22797705722462
-  POINT  372  -1.017777998289471  39.97408640454459
-  POINT  373  -5.747189387354801e-05  39.27977067308476
-  POINT  374  1.016371351884876  39.22798018264938
-  POINT  375  1.017747548306818  39.9740879692846
-  POINT  376  2.499551039636026  38.85299395015144
-  POINT  377  3.530111282404213  38.69303432304483
-  POINT  378  3.067591411714378  39.76334698055007
-  POINT  379  -10.9924492306217  14.41410671876377
-  POINT  380  -10.44287645728424  15.33200773050357
-  POINT  381  -9.947843080438842  14.43429054076841
-  POINT  382  -12.05881835337669  14.38348808213234
-  POINT  383  -11.56378497653129  13.48577089239719
-  POINT  384  -19.1159597283742  21.52156341475505
-  POINT  385  -19.17404835560626  20.44527430116717
-  POINT  386  -19.97093456597552  21.07785567562136
-  POINT  387  18.53474991213871  15.46232000669758
-  POINT  388  18.24714071811698  14.4225091791953
-  POINT  389  19.27621315646036  14.66824556999596
-  POINT  390  17.88033327145191  16.16951627043046
-  POINT  391  -1.878316948172965  1.129591679620692
-  POINT  392  -2.768487524990953  1.245516646965989
-  POINT  393  -2.582747461702293  0.167465745146943
-  POINT  394  7.648469065631529  32.82511128547139
-  POINT  395  8.132952035998411  33.74407973801672
-  POINT  396  8.612310599030359  32.75458591204675
-  POINT  397  10.87749678733383  35.79465773166562
-  POINT  398  10.81858671612841  36.82136097977488
-  POINT  399  9.960381662987619  36.38449641608644
-  POINT  400  -11.96631262099795  7.358633557143151
-  POINT  401  -11.55167317705421  6.252374103778383
-  POINT  402  -11.06288858981114  7.054470523533706
-  POINT  403  -12.16968349313546  5.2351949670938
-  POINT  404  -11.26625946194865  4.931031933484356
-  POINT  405  -12.0755211222859  9.034287853892653
-  POINT  406  -11.57773105477317  9.914437566510799
-  POINT  407  -10.97973796624214  9.040879689516622
-  POINT  408  -10.17110926624146  33.75754094821968
-  POINT  409  -10.64040662788987  34.61216649370169
-  POINT  410  -9.566093507452038  34.52818146859719
-  POINT  411  -5.471515743143133  38.25117391585611
-  POINT  412  -5.108309760920813  39.33662769024022
-  POINT  413  -4.464167737093204  38.51729300677406
-  POINT  414  -17.075786992357  11.60015127604059
-  POINT  415  -16.58567116152604  10.66595676655855
-  POINT  416  -17.71058118590639  10.70832033698396
-  POINT  417  -11.04685154601989  12.60620673430785
-  POINT  418  -12.11322066877488  12.57558809767642
-  POINT  419  -12.1349007245402  10.80193483523696
-  POINT  420  -11.03911756849645  10.80852667086092
-  POINT  421  -9.437251545081509  13.53388275647323
-  POINT  422  -8.887678771744049  14.45178376821303
-  POINT  423  -12.51923497779283  15.29188240907255
-  POINT  424  -13.09057072370242  14.36354658270596
-  POINT  425  -18.87005448454325  18.50123351571129
-  POINT  426  -18.03461160637449  18.07594366093415
-  POINT  427  -19.06236608641966  17.55550277381534
-  POINT  428  -18.92115000224904  19.51083720141505
-  POINT  429  -19.97443590274372  18.98910431002001
-  POINT  430  -18.09519835785529  19.95611150258222
-  POINT  431  0.5990148364900598  22.29211602188795
-  POINT  432  -0.599014659370577  22.29211603806743
-  POINT  433  7.967516690854382e-08  22.93488184134145
-  POINT  434  -1.01546624812877  21.25999443805068
-  POINT  435  4.872215793316759e-08  20.82467510930697
-  POINT  436  -1.015466296850928  20.43531932874371
-  POINT  437  -1.614481004943663  21.90276025750417
-  POINT  438  6.782362015092881  16.29630562070841
-  POINT  439  6.26972775715908  15.38635951751268
-  POINT  440  5.744124975081186  16.30195446908402
-  POINT  441  -5.74412451455944  16.30195484425646
-  POINT  442  -5.226435642566052  17.21789351086729
-  POINT  443  -4.713801327229008  16.30794748956339
-  POINT  444  -4.200321416459555  15.37246065843187
-  POINT  445  -3.682632544466168  16.2883993250427
-  POINT  446  -5.718863643637123  1.755765027244666
-  POINT  447  -6.622858728894221  2.050156275226842
-  POINT  448  -6.1930002735872  0.9829879862466689
-  POINT  449  -1.033332138420614  2.125971140580023
-  POINT  450  -0.5061798610039783  3.087533783994574
-  POINT  451  -1.53950755536463  3.149217787127504
-  POINT  452  0.8449778593019447  1.06790708707818
-  POINT  453  -2.222029981194251e-06  1.032143568723546
-  POINT  454  0.8457366719362006  0.01788976042541284
-  POINT  455  -0.8449892538123129  1.067907676487761
-  POINT  456  -0.8457434623547605  0.01789005539397318
-  POINT  457  7.14550668849857  38.67998224759658
-  POINT  458  7.464987989168712  37.67900473608974
-  POINT  459  6.438947358118664  38.07148798189294
-  POINT  460  5.471500684545699  38.25117925767516
-  POINT  461  5.801769278233181  37.27840186247859
-  POINT  462  4.399449686329078  36.5694073886274
-  POINT  463  3.900283518187385  37.63383100971722
-  POINT  464  3.465410599856247  36.74514526008381
-  POINT  465  4.464150368877045  38.51729645158841
-  POINT  466  5.108265028519643  39.33663957465164
-  POINT  467  6.569277426918998  34.62094437471872
-  POINT  468  5.497623088033901  34.55900920079591
-  POINT  469  6.097456163714485  33.75266993751856
-  POINT  470  4.967010559618177  35.55400263849503
-  POINT  471  4.495189296413664  34.68572820129488
-  POINT  472  5.401883477949315  36.44268838812844
-  POINT  473  6.369330151522279  36.26299711234622
-  POINT  474  9.113351220478284  35.59551865570383
-  POINT  475  9.038349819897114  36.597202299299
-  POINT  476  7.080381864313097  35.61775408845623
-  POINT  477  7.480267664596962  36.45346756280638
-  POINT  478  7.680214939993681  34.81141482517887
-  POINT  479  8.64405647339251  34.74088945175424
-  POINT  480  9.566088316483015  34.52818356854168
-  POINT  481  8.17603970195953  37.03376171219976
-  POINT  482  9.033624999701651  37.84358769694784
-  POINT  483  18.72983203648753  27.01380028490616
-  POINT  484  17.80064858804426  27.17058330432692
-  POINT  485  18.18552372630872  26.14280285282097
-  POINT  486  14.85185059716412  27.02384453546509
-  POINT  487  13.8314368395239  27.02729880093251
-  POINT  488  14.39220585881491  26.11287744339462
-  POINT  489  -2.499563411754033  38.85299626142665
-  POINT  490  -3.530116694379579  38.69303481820337
-  POINT  491  -3.067645385176077  39.76333856162318
-  POINT  492  -3.900259039943522  37.63383794314426
-  POINT  493  3.013506238274488  35.67219940853586
-  POINT  494  2.514340070132794  36.73662302962569
-  POINT  495  6.650990085890549  32.86703644924846
-  POINT  496  5.579335747005452  32.80510127532567
-  POINT  497  7.130348648922496  31.87754262327849
-  POINT  498  7.631706937284587  30.91661403096186
-  POINT  499  8.159708707026331  30.00179545686317
-  POINT  500  8.655829398405219  30.92079888540271
-  POINT  501  6.634227957543607  30.95853919473894
-  POINT  502  6.129435237246637  30.02016596590531
-  POINT  503  5.628076948884546  30.98109455822193
-  POINT  504  11.94551072074933  21.70829919870834
-  POINT  505  11.41305492908868  20.80846759832619
-  POINT  506  10.9025685332533  21.70588542257163
-  POINT  507  13.00753192439992  19.90724193190037
-  POINT  508  13.49147236933642  20.83257419908412
-  POINT  509  14.04300717715163  19.92893475652158
-  POINT  510  -1.632691703463277  19.84045615056494
-  POINT  511  -0.617225406612349  19.40513682182123
-  POINT  512  7.881862384261  8.935526290376423
-  POINT  513  6.821149637536807  8.96031982099673
-  POINT  514  7.354535453521018  9.865365947847677
-  POINT  515  1.878305104541391  1.129592434087743
-  POINT  516  2.768470579833216  1.245515867432436
-  POINT  517  2.582728607973412  0.1674632640394325
-  POINT  518  1.033322801179483  2.125972484456656
-  POINT  519  -12.88605340068618  5.81741648102104
-  POINT  520  -14.05126013257847  5.767569248488341
-  POINT  521  -13.60249013789031  6.524733392691986
-  POINT  522  -12.61408342909388  4.479532986874619
-  POINT  523  -13.09822472234193  7.374360207835742
-  POINT  524  -12.60944013509886  8.176456627591065
-  POINT  525  -13.20743322362988  9.050014504585244
-  POINT  526  -14.24561765199122  7.3425564631399
-  POINT  527  -14.89245371365388  8.125238751200939
-  POINT  528  -15.41659981616689  7.259181873308678
-  POINT  529  -12.11082177040361  33.4969228818488
-  POINT  530  -12.51527794814265  32.36519984403208
-  POINT  531  -11.64987856441833  32.70980293550745
-  POINT  532  -10.81862285529724  36.82133760142749
-  POINT  533  -10.87751788137019  35.79464242069291
-  POINT  534  -9.960404693575528  36.38448266121428
-  POINT  535  -11.48253364015961  35.0240019003154
-  POINT  536  -10.7167281460062  32.87524187924294
-  POINT  537  -11.12118432374524  31.74351884142621
-  POINT  538  -9.642415025568365  32.79125685413843
-  POINT  539  -18.53475021484851  15.4623221533659
-  POINT  540  -19.27621404631537  14.6682488620726
-  POINT  541  -18.24714142272296  14.42251208771581
-  POINT  542  -18.88134028536315  16.42301727635588
-  POINT  543  -17.88033313773626  16.16951779604823
-  POINT  544  -19.74928002630716  16.84311272522837
-  POINT  545  -15.49028917015346  8.94111382435025
-  POINT  546  -16.06641650592649  9.805497208420237
-  POINT  547  -16.64214543071471  8.907705737630335
-  POINT  548  -15.45627780504156  10.68439298272059
-  POINT  549  -14.33918769294243  9.008058351432968
-  POINT  550  -13.80526868012947  9.865889577734556
-  POINT  551  -14.1492732747727  14.33192177832496
-  POINT  552  -15.15912830948807  14.31820814348022
-  POINT  553  -14.56084238283394  15.25822727480142
-  POINT  554  -13.68885665035655  13.42352745138476
-  POINT  555  -17.50692650301805  12.50123196234012
-  POINT  556  -17.89917563009375  13.49160770791567
-  POINT  557  -18.59468367857226  12.63537262535845
-  POINT  558  -16.40667197130215  12.44593322715844
-  POINT  559  -17.18577727459241  14.27791829325811
-  POINT  560  -15.79268534169501  13.36945828023087
-  POINT  561  -15.36154583103397  12.46837759393134
-  POINT  562  -16.20425444975626  14.29576377670733
-  POINT  563  -16.55222024238547  15.22666815650746
-  POINT  564  14.61766884814922  19.01336639514921
-  POINT  565  15.10160929308571  19.93869866233297
-  POINT  566  -8.954387420107352  8.883178967849199
-  POINT  567  -8.421001648218994  7.978132991115737
-  POINT  568  -7.881861900173009  8.935529708141328
-  POINT  569  -10.48552760095411  8.043256113861043
-  POINT  570  -10.07088815701037  6.936996660496273
-  POINT  571  -9.987737533441372  8.923405826479188
-  POINT  572  -9.448597785395389  9.880802543504778
-  POINT  573  -8.909628446845817  12.63950157787882
-  POINT  574  -9.96979275554061  12.62200835043421
-  POINT  575  -10.5192284477842  11.71182555571344
-  POINT  576  -9.962058778017163  10.82432828698728
-  POINT  577  -8.928708664683143  10.78410142835729
-  POINT  578  -8.826724490159041  19.9115345212223
-  POINT  579  -7.788049595360713  19.92284393906273
-  POINT  580  -8.326673162463226  19.01049914571327
-  POINT  581  6.796923008359899  14.46893104772356
-  POINT  582  5.758685968348203  14.47457989609917
-  POINT  583  7.331484508515757  13.55426320744392
-  POINT  584  7.842526297326634  14.46604282885744
-  POINT  585  3.183665335263674  17.16821321585526
-  POINT  586  3.688660309630354  18.14224948377619
-  POINT  587  2.676212803311897  18.08657678214764
-  POINT  588  5.226436037298559  17.21789324488178
-  POINT  589  4.713801779364758  16.30794714168605
-  POINT  590  1.702834415187505  17.9614070963485
-  POINT  591  2.207829389554186  18.93544336426943
-  POINT  592  9.410254775410465e-08  18.81027366105638
-  POINT  593  0.6172255007148968  19.40513683923515
-  POINT  594  -9.714117030543257  27.14602202785425
-  POINT  595  -10.74401846579198  27.10759225834228
-  POINT  596  -10.26601121841064  26.20720376458829
-  POINT  597  -15.19792430940091  31.58463475974873
-  POINT  598  -14.51995414837362  32.42407660952124
-  POINT  599  -15.55919105425835  32.56628720680114
-  POINT  600  -13.5787847899452  32.30652306297098
-  POINT  601  -13.91739051255635  33.26987333692369
-  POINT  602  -13.68943052768649  30.59673119233732
-  POINT  603  -13.11784158395992  31.51940311662963
-  POINT  604  -12.62592368588394  30.65540797339841
-  POINT  605  -18.10341288837137  21.84121234606356
-  POINT  606  -18.87127590553306  22.47222715848427
-  POINT  607  -17.12463310060343  18.09656294225589
-  POINT  608  -17.31694470247984  17.15083220035995
-  POINT  609  -16.9703546319652  16.19013707736997
-  POINT  610  -15.98883180712904  16.20798256081918
-  POINT  611  10.38199647148354  22.61371976810885
-  POINT  612  9.849540679822894  21.7138881677267
-  POINT  613  8.8085350316233  21.72280092159405
-  POINT  614  9.329107093393057  20.81496657605682
-  POINT  615  8.9287090372967  10.78409883706605
-  POINT  616  9.962058430246611  10.82432580169985
-  POINT  617  9.448597593195121  9.88079938186117
-  POINT  618  9.969792986625455  12.62200682338526
-  POINT  619  8.90962883591534  12.63950012274126
-  POINT  620  9.437251948192607  13.5338816892218
-  POINT  621  10.67234141492057  4.14015762808947
-  POINT  622  9.899143945874886  3.622737177952356
-  POINT  623  11.12308967028839  3.378421352424517
-  POINT  624  10.05434271335534  5.157341501088084
-  POINT  625  11.26624724302613  4.931019061942361
-  POINT  626  11.04685146630943  12.60620519964597
-  POINT  627  12.11322047313526  12.57558645323589
-  POINT  628  11.56378510572855  13.48576964345572
-  POINT  629  10.51922835403217  11.71182363316543
-  POINT  630  11.03911690993059  10.80852417796056
-  POINT  631  8.353117771266421  15.36645081786232
-  POINT  632  8.887679271422279  14.45178297758268
-  POINT  633  9.947843422132394  14.43428967822668
-  POINT  634  -7.354534566620368  9.865368360421384
-  POINT  635  -6.821148794732007  8.960322383687922
-  POINT  636  -5.241808196453412  9.89286263766502
-  POINT  637  -5.768321098655418  10.8109113925901
-  POINT  638  -4.716307833929465  10.81361299428714
-  POINT  639  -8.846687175134175  18.09453634019771
-  POINT  640  -7.808012280335847  18.10584575803814
-  POINT  641  -7.292392561451639  17.20089190904147
-  POINT  642  -6.77237854878069  18.11685471455703
-  POINT  643  -3.663850057285723  10.82236267206403
-  POINT  644  -2.609574443921612  10.83288750674358
-  POINT  645  -3.135519318363349  9.906089074041617
-  POINT  646  -4.190362959487728  11.74041142698911
-  POINT  647  1.022235278187542  6.105131945364167
-  POINT  648  1.537413456757289  7.078319240970639
-  POINT  649  0.5151765885688294  7.052715105123196
-  POINT  650  2.577937928342901  7.096153011320037
-  POINT  651  2.070879238724189  8.043736171079065
-  POINT  652  3.092619808349037  6.17939491294298
-  POINT  653  3.626085590315936  7.144811843051406
-  POINT  654  11.48251188829295  35.02401731321491
-  POINT  655  10.64039816452791  34.61217235404054
-  POINT  656  10.17110341744214  33.75754315009095
-  POINT  657  14.6689103389384  22.67322577662324
-  POINT  658  14.05319959738808  21.7410710783964
-  POINT  659  15.14265836363845  21.78642172193218
-  POINT  660  13.01772434463638  21.71937825377518
-  POINT  661  12.50723794880099  22.61679607802062
-  POINT  662  18.09519862717962  19.95611146231709
-  POINT  663  19.1740485049595  20.44527447993038
-  POINT  664  19.11595980806804  21.52156423697686
-  POINT  665  19.97093453194041  21.0778563218991
-  POINT  666  16.26820018552503  25.3010316807035
-  POINT  667  17.20417075684983  25.40139698246272
-  POINT  668  16.34859018777993  26.20978847968642
-  POINT  669  18.10513372405381  25.23404605383805
-  POINT  670  18.34437302491627  24.32069547942606
-  POINT  671  19.34729683337535  25.06775162939346
-  POINT  672  15.85270720624401  27.09338928485154
-  POINT  673  16.78867777756881  27.19375458661076
-  POINT  674  15.291938186953  28.00781064238943
-  POINT  675  17.30476560650833  28.05418410949204
-  POINT  676  16.82978442287303  28.99839439914488
-  POINT  677  17.8667222480114  28.98778277049785
-  POINT  678  11.90568276733603  25.26641722612537
-  POINT  679  12.94362175678668  25.24019557197247
-  POINT  680  12.33385311172404  26.14255336301493
-  POINT  681  13.04745149254336  23.49596728408519
-  POINT  682  11.97523786865631  23.48488822901835
-  POINT  683  13.26157019599279  27.94640762414275
-  POINT  684  12.80192545764358  27.03544053207227
-  POINT  685  11.76398646819293  27.06166218622517
-  POINT  686  12.71478625639084  28.84364548586147
-  POINT  687  13.74429763827116  28.8355037547217
-  POINT  688  11.6871942678587  28.89644654626223
-  POINT  689  12.16992171013707  29.78554267684118
-  POINT  690  -2.645241319283594  23.65915467021994
-  POINT  691  -2.171873771957271  22.80696352912885
-  POINT  692  -1.671396963511793  23.78707299861202
-  POINT  693  -3.638150958880634  21.77295984420368
-  POINT  694  -4.169619601589666  22.67588242311962
-  POINT  695  -4.662052432741228  21.76979706658653
-  POINT  696  -2.588325360715464  21.77484192911209
-  POINT  697  -3.080758191867026  20.868756572579
-  POINT  698  -3.465390409600786  36.74515601536355
-  POINT  699  -4.39944145231441  36.56941420393424
-  POINT  700  -6.438967484949353  38.07148150975368
-  POINT  701  -5.801761824463367  37.27840372561251
-  POINT  702  -7.465007651281466  37.67899578164534
-  POINT  703  -7.145548671869747  38.67996608706892
-  POINT  704  1.645701561067675  36.58620616945915
-  POINT  705  2.097605922649433  37.6591520210071
-  POINT  706  1.630912530570906  38.7025770899849
-  POINT  707  0.6144262348982835  38.03413825350503
-  POINT  708  0.6145007137649187  36.62602437274583
-  POINT  709  1.03123486124828  35.70349538136442
-  POINT  710  3.50029065404008  34.71485867238029
-  POINT  711  4.030903182455804  33.71986523468118
-  POINT  712  2.549220124316628  34.70633644192217
-  POINT  713  5.09669004529192  31.88416738089897
-  POINT  714  4.59189732499495  30.94579415206534
-  POINT  715  4.543156123115856  32.76980086916907
-  POINT  716  3.548257480742272  32.79893134025448
-  POINT  717  3.041784030297622  31.8775360658333
-  POINT  718  2.529531089637571  32.8276004313454
-  POINT  719  6.639239149600429  29.07614732768379
-  POINT  720  5.633088140941368  29.09870269116678
-  POINT  721  -5.741117900464612  18.12804558230707
-  POINT  722  -4.710794713134181  18.134038227614
-  POINT  723  -6.25673761934882  19.03299943130374
-  POINT  724  9.094364861792316  3.185783391206454
-  POINT  725  8.120154810382525  3.065542696161892
-  POINT  726  8.486226833839986  4.246239372190631
-  POINT  727  9.543080762382589  2.423606448705923
-  POINT  728  4.181697363812684  8.041699532502184
-  POINT  729  4.69637924381882  7.124941434125128
-  POINT  730  4.720893497007972  8.958696437146365
-  POINT  731  3.650599843505089  8.978566846072644
-  POINT  732  5.772906862056196  8.955994301021946
-  POINT  733  5.241809341748601  9.892861614592405
-  POINT  734  6.300233792796178  8.026154643550692
-  POINT  735  6.622836074707541  2.05014634703189
-  POINT  736  5.718844002281117  1.755757914971069
-  POINT  737  6.192965581434661  0.9829766219365916
-  POINT  738  5.664301131002254  3.628351178339397
-  POINT  739  6.833866176424866  3.46371406014724
-  POINT  740  6.342451737007583  4.290635795338225
-  POINT  741  7.442004204377196  2.403258079163064
-  POINT  742  7.917003402974732  1.633697762640239
-  POINT  743  8.94127268867317  5.267193691042839
-  POINT  744  7.96706263726338  5.146952995998276
-  POINT  745  9.535178516778736  6.058055124895729
-  POINT  746  -13.10928490082518  34.07016086758892
-  POINT  747  -12.24388551710086  34.4147639590643
-  POINT  748  -12.49585729120814  35.61581090418589
-  POINT  749  -14.07322716081642  34.21070994911054
-  POINT  750  -14.36136978693606  10.72072627767335
-  POINT  751  -14.88062444253561  11.58118583581166
-  POINT  752  -14.26663781292847  12.50471088888409
-  POINT  753  -13.22961531762352  10.76268243082563
-  POINT  754  -13.2079352618582  12.53633569326509
-  POINT  755  -12.6910018313468  11.65677153517575
-  POINT  756  15.07065410043878  18.08797196826217
-  POINT  757  14.01205198450469  18.07820806245078
-  POINT  758  -6.796922393156049  14.4689317302459
-  POINT  759  -6.269727250030074  15.38636001982073
-  POINT  760  -5.758685342348371  14.47458053337772
-  POINT  761  -7.817995296922273  16.28529708460574
-  POINT  762  -8.353117303969567  15.36645138459855
-  POINT  763  -8.863148300054089  16.27103725251539
-  POINT  764  -7.842525768612235  14.46604360030338
-  POINT  765  -7.331483860930532  13.55426411386037
-  POINT  766  -6.782361565367118  16.29630604112463
-  POINT  767  -3.683558631825044  14.45370591664109
-  POINT  768  -4.714727414587884  14.47325408116177
-  POINT  769  -5.24192255771386  13.55582579158695
-  POINT  770  -4.720392683042421  12.64308054429161
-  POINT  771  -5.764350610802907  12.64440699650756
-  POINT  772  -3.667934906398679  12.6518302220685
-  POINT  773  -8.395897107966746  11.71956985286866
-  POINT  774  -7.863355897507648  12.63144425890769
-  POINT  775  -6.817752522051462  12.63433238885021
-  POINT  776  -6.296222647380024  11.72158714155488
-  POINT  777  -6.821723009903972  10.80083678493275
-  POINT  778  -7.882436115344974  10.77604410938616
-  POINT  779  4.716308849678887  10.81361234423387
-  POINT  780  5.76832221472711  10.81091020810945
-  POINT  781  4.190363830521503  11.74041081086773
-  POINT  782  3.663850957542993  10.82236221735069
-  POINT  783  1.564857731194123  14.49716655277795
-  POINT  784  1.04410790663793  13.59158434318418
-  POINT  785  0.5207500976712671  14.50289465153176
-  POINT  786  1.565386117813491  12.67566398686721
-  POINT  787  0.5212784842906355  12.68139208562102
-  POINT  788  2.613060739273198  12.66750846420746
-  POINT  789  2.090231316925903  11.7573162066443
-  POINT  790  2.247276054134772e-07  15.40847690902769
-  POINT  791  -0.5207495998285867  14.50289469943392
-  POINT  792  -11.21209063177709  28.0004787204091
-  POINT  793  -11.76398481964448  27.06166045714313
-  POINT  794  -13.26156901870596  27.94640451622695
-  POINT  795  -12.71478480762005  28.84364148415803
-  POINT  796  -13.74429684069641  28.83549908117502
-  POINT  797  -12.16991936167931  29.78553808233906
-  POINT  798  -11.59833041795275  30.70821000663137
-  POINT  799  -10.66722518583636  28.94237531859013
-  POINT  800  -10.16307824785739  29.92216165396643
-  POINT  801  -9.687977339945633  29.02619685698455
-  POINT  802  -11.68719153968886  28.89644351739098
-  POINT  803  -10.66517999954061  30.87364895036685
-  POINT  804  -9.685932153649887  30.95747048876127
-  POINT  805  -16.82978847880473  28.99838541372564
-  POINT  806  -17.30476813190573  28.05417686774796
-  POINT  807  -17.86672715494531  28.98777290369169
-  POINT  808  -12.80192396054655  27.03543843675622
-  POINT  809  -12.33385179456144  26.1425519746894
-  POINT  810  -13.83143599362291  27.02729603377322
-  POINT  811  -18.71184747782762  23.47031202987638
-  POINT  812  -19.74963048996175  23.15469430712368
-  POINT  813  -19.34729785953139  25.06774765708812
-  POINT  814  -18.34437302460557  24.32069263403202
-  POINT  815  -18.10513422474459  25.23404206079518
-  POINT  816  -17.49125461230818  23.64225669394841
-  POINT  817  7.817995757395382  16.28529666142913
-  POINT  818  7.292392975317489  17.20089161300046
-  POINT  819  7.80801268720816  18.10584554161538
-  POINT  820  6.772378944905659  18.11685450089467
-  POINT  821  8.863148731491028  16.27103681015437
-  POINT  822  1.015466424403581  21.25999439681868
-  POINT  823  1.614481163449325  21.90276020009269
-  POINT  824  1.015466375681423  20.43531928751171
-  POINT  825  1.63269187639632  19.84045612674685
-  POINT  826  2.606070264520712  19.96562581254599
-  POINT  827  4.710795072138549  18.13403803354307
-  POINT  828  4.203342540186773  19.05240159983545
-  POINT  829  5.741118267854977  18.12804536094104
-  POINT  830  6.25673797974565  19.03299928955596
-  POINT  831  8.29058057434478  22.63591511879024
-  POINT  832  7.770146987914942  21.73699352712036
-  POINT  833  7.761488015053925  23.54966519059946
-  POINT  834  8.799876058762283  23.53547258507314
-  POINT  835  7.882436851035273  10.77604170622064
-  POINT  836  6.821724104311079  10.80083523684094
-  POINT  837  8.395897688086761  11.71956812605931
-  POINT  838  6.296223612241364  11.72158596648241
-  POINT  839  7.863356649653912  12.63144299189585
-  POINT  840  6.817753360687178  12.63433121076197
-  POINT  841  5.764351471103209  12.64440618203048
-  POINT  842  15.41658924936081  7.259168960497591
-  POINT  843  14.24561038678537  7.342548392480751
-  POINT  844  14.89244912969332  8.12523258985544
-  POINT  845  12.07551877984602  9.034284548463294
-  POINT  846  13.2074318313694  9.050012371808604
-  POINT  847  12.60943811820144  8.176454016117848
-  POINT  848  12.13489966336506  10.8019324567901
-  POINT  849  11.57772973957951  9.91443462532451
-  POINT  850  10.97973602641154  9.040876269633753
-  POINT  851  11.96631097541835  7.35863242591423
-  POINT  852  11.55167271280977  6.252370796998449
-  POINT  853  11.06288680406948  7.054464563856754
-  POINT  854  12.169671414375  5.235186923999835
-  POINT  855  12.88604184172865  5.817407070591241
-  POINT  856  12.61406020569684  4.479514007912766
-  POINT  857  13.09822402694172  7.374360249259541
-  POINT  858  13.60248324400228  6.524726802277135
-  POINT  859  14.05124229732068  5.767551513356759
-  POINT  860  17.07578521456617  11.60014693753975
-  POINT  861  17.71057756929273  10.70831332876806
-  POINT  862  16.58566833102513  10.66595132007714
-  POINT  863  16.40667132100974  12.44593062352206
-  POINT  864  15.79268502556732  13.36945619674464
-  POINT  865  15.36154529735113  12.46837529147962
-  POINT  866  17.18577703109811  14.27791621091107
-  POINT  867  17.8991747362448  13.49160449707131
-  POINT  868  17.50692494278236  12.50122784280477
-  POINT  869  18.59468174703889  12.63536765117651
-  POINT  870  -5.772905779136106  8.955995570716897
-  POINT  871  -6.300233112688748  8.02615691843684
-  POINT  872  -4.720892514410153  8.958697172413938
-  POINT  873  -2.562097267089574  3.227805457117126
-  POINT  874  -2.034944989672938  4.189368100531676
-  POINT  875  -0.5151786281004135  7.052714909961791
-  POINT  876  -4.495306666907339e-07  8.025902205568261
-  POINT  877  -0.5151778044490922  8.96843130178743
-  POINT  878  -1.555799685599574  8.971257959564014
-  POINT  879  -1.040621823848756  9.913787250944587
-  POINT  880  0.5151774122201507  8.968431496948837
-  POINT  881  2.806199940197374e-07  11.76547179125803
-  POINT  882  -0.5212779305555666  12.681392147575
-  POINT  883  -2.090230658535098  11.75731647898901
-  POINT  884  -1.561899919612723  10.84104288096659
-  POINT  885  -0.5212780384622415  10.83821622319001
-  POINT  886  0.5212783763839607  10.83821616123602
-  POINT  887  -8.95781830977193  7.046847428450418
-  POINT  888  -9.535179298628961  6.058061838123082
-  POINT  889  -7.885292789837587  7.099198168742546
-  POINT  890  -6.342458718450149  4.290639218573956
-  POINT  891  -5.664307592746104  3.628355267241409
-  POINT  892  -6.833874189380248  3.463718914397889
-  POINT  893  -4.115213411606943  4.361615670969387
-  POINT  894  -4.656830149629152  5.341664562613124
-  POINT  895  -3.599151439420091  5.248004662165036
-  POINT  896  -7.4420232035393  2.403268237260354
-  POINT  897  -7.917037371317474  1.633712477540171
-  POINT  898  -8.120174329243344  3.065552188592901
-  POINT  899  0.5061739145443324  5.095155188591381
-  POINT  900  -2.929429205988932e-06  4.110781499104045
-  POINT  901  -0.5061784339744557  5.09515412002939
-  POINT  902  1.528410782732792  5.120759324438823
-  POINT  903  0.5061724875148098  3.087534852556564
-  POINT  904  1.539499732754256  3.149220199566127
-  POINT  905  11.64987528159459  32.70981082487776
-  POINT  906  12.51527678005581  32.36521402236142
-  POINT  907  12.11081476394826  33.49693513307348
-  POINT  908  12.62592549818568  30.65541566530306
-  POINT  909  11.59833350965353  30.70821672570382
-  POINT  910  14.07320338353421  34.21073365839178
-  POINT  911  13.10926757404889  34.07018328539174
-  POINT  912  13.91737880453094  33.26989288698078
-  POINT  913  12.24386607558766  34.41478008790807
-  POINT  914  12.49582536742833  35.61583656588377
-  POINT  915  14.16603325158087  23.49720392336359
-  POINT  916  15.25549201783124  23.54255456689937
-  POINT  917  15.93819784253432  24.42958644855976
-  POINT  918  15.08261727346442  25.23797794578346
-  POINT  919  16.44107492989185  23.60560830181941
-  POINT  920  13.63403317143619  24.36529607436132
-  POINT  921  14.0622035158242  25.24143221125088
-  POINT  922  16.13661120818988  21.79829183825163
-  POINT  923  15.52090046663956  20.86613714002479
-  POINT  924  16.09556213763715  19.95056877865242
-  POINT  925  17.17857677781561  19.94984061055883
-  POINT  926  16.75928560426177  19.02240213286701
-  POINT  927  17.431475160555  20.8842781081025
-  POINT  928  18.71184721732612  23.47031396269385
-  POINT  929  18.87127587281586  22.47222833205418
-  POINT  930  19.74963016806416  23.15469636218577
-  POINT  931  17.49125494700478  23.6422586667476
-  POINT  932  18.10341307466681  21.84121305493807
-  POINT  933  16.8085491223017  22.75522678508721
-  POINT  934  17.18679122530281  21.83494220317982
-  POINT  935  14.51994297887854  32.4240927325463
-  POINT  936  13.57878043675709  32.30653817612266
-  POINT  937  13.11784095440342  31.51941386792693
-  POINT  938  13.68942915488696  30.59673981906429
-  POINT  939  11.44016434034826  24.38232842674731
-  POINT  940  10.89995079660589  23.50315722068274
-  POINT  941  10.83039569528561  25.28468621778976
-  POINT  942  9.846922943175489  23.51115996583782
-  POINT  943  9.317830383884633  24.42491003764703
-  POINT  944  9.800494196258793  25.32311557173736
-  POINT  945  8.753447311845587  25.34742819097269
-  POINT  946  10.26601262324656  26.20720437111542
-  POINT  947  -9.188516399988456  28.09611515482773
-  POINT  948  -8.684369462009494  29.07590149020404
-  POINT  949  -8.710509152607116  27.19572666107374
-  POINT  950  -4.967007708624748  35.55401033082136
-  POINT  951  -5.401876338967484  36.44269225860205
-  POINT  952  -6.369328080773704  36.26299985249962
-  POINT  953  -8.644059727746285  34.74088988879614
-  POINT  954  -9.113357089394702  35.59551543427815
-  POINT  955  -7.680217086741342  34.8114162753276
-  POINT  956  -8.132953504798678  33.74408230964664
-  POINT  957  -9.038370913869775  36.59719108141323
-  POINT  958  -7.080382952483385  35.61775611998313
-  POINT  959  -6.569276729535778  34.62094854083364
-  POINT  960  -7.480268437979268  36.45346758699358
-  POINT  961  -8.176062522991147  37.03375204912885
-  POINT  962  -9.033664824607252  37.8435674405669
-  POINT  963  -3.013509432387965  35.67217382596145
-  POINT  964  -2.514327020017076  36.73659756517147
-  POINT  965  -1.031206014429366  35.70346448021024
-  POINT  966  -1.53422388422784  34.73877849312591
-  POINT  967  -0.5029838558529507  34.77862759756677
-  POINT  968  2.021011022720923  33.78146904341516
-  POINT  969  1.514537572276274  32.86007376899397
-  POINT  970  1.534226606955332  34.73880977957074
-  POINT  971  0.5030257596525753  34.77862798285742
-  POINT  972  7.889854101383875e-06  33.81394199577308
-  POINT  973  1.536896992374578  27.28673102869031
-  POINT  974  2.075897760470205  26.39023244060897
-  POINT  975  2.583954155543661  27.30113813950133
-  POINT  976  3.556816059688512  30.9375844125214
-  POINT  977  4.088202963281139  30.03451158984436
-  POINT  978  2.538089668583811  30.96625350361232
-  POINT  979  0.5030096425456565  32.87005276973701
-  POINT  980  -0.5029999729598695  32.87005238444636
-  POINT  981  1.011529709462303  31.91618415766725
-  POINT  982  11.21209270722683  28.00048045890696
-  POINT  983  10.74402036130729  27.10759328984962
-  POINT  984  9.714118862280475  27.14602264379722
-  POINT  985  10.66722816097306  28.94237764988668
-  POINT  986  9.687978884244082  29.02619593691772
-  POINT  987  10.16308044487594  29.92216202427299
-  POINT  988  7.660247523983134  29.07171418485961
-  POINT  989  8.684369985103768  29.07589903930046
-  POINT  990  7.163900427677865  28.15025091012108
-  POINT  991  9.188517701200887  28.09611466491416
-  POINT  992  8.710509963140158  27.19572574617996
-  POINT  993  -4.203342243390184  19.05240175014947
-  POINT  994  -3.688659985491623  18.14224967870969
-  POINT  995  -3.655895652889911  19.96374384445787
-  POINT  996  -4.678030380532469  19.95553239336218
-  POINT  997  -2.207829164486162  18.93544342244381
-  POINT  998  -2.606070054724741  19.96562592936628
-  POINT  999  -5.170740868433548  20.8574752560983
-  POINT  1000  -5.702209511142579  21.76039783501424
-  POINT  1001  -5.71818745893382  19.94613316178989
-  POINT  1002  -6.731544945060238  21.74909188831638
-  POINT  1003  -6.222856509367919  22.66141369880462
-  POINT  1004  -7.249499434945713  20.83597766954888
-  POINT  1005  -7.770146433171051  21.73699353333926
-  POINT  1006  -6.749448107249898  19.93494229403985
-  POINT  1007  5.802524977371679  7.067405929156367
-  POINT  1008  6.85076775285229  7.071731449131153
-  POINT  1009  7.387583714762178  6.140445024793657
-  POINT  1010  7.885292530186677  7.099193739187982
-  POINT  1011  5.762972814506381  5.284127824133605
-  POINT  1012  5.246913203874932  6.170518239705588
-  POINT  1013  4.656827080953521  5.341663329102365
-  POINT  1014  6.932537859928994  5.119490705941448
-  POINT  1015  5.123453405055713  2.630543796725044
-  POINT  1016  4.686581836917295  1.584872268547702
-  POINT  1017  3.780741176469697  1.381516026850165
-  POINT  1018  4.380854250247183  0.4856945617800922
-  POINT  1019  3.07892064305541  2.323657990883948
-  POINT  1020  4.632038965638431  3.457465531916029
-  POINT  1021  8.957817564431407  7.046841938024162
-  POINT  1022  8.421001602521519  7.978128362361659
-  POINT  1023  8.954387418505732  8.883174489212605
-  POINT  1024  10.48552585172216  8.043251376985188
-  POINT  1025  10.07088758911358  6.936989748069407
-  POINT  1026  9.98773681145564  8.923401453846404
-  POINT  1027  14.14927330494213  14.3319204116199
-  POINT  1028  13.09057086026495  14.36354542779163
-  POINT  1029  13.68885655723154  13.42352588087392
-  POINT  1030  14.5608425845304  15.25822614311025
-  POINT  1031  15.01786739893976  16.19866298162331
-  POINT  1032  14.0080124223849  16.21237679705068
-  POINT  1033  15.15912828149698  14.31820659619254
-  POINT  1034  16.20425430515559  14.29576192823498
-  POINT  1035  16.55222028702778  15.22666661035897
-  POINT  1036  15.43600191484122  17.16213210717993
-  POINT  1037  16.04161877848574  18.09729043987835
-  POINT  1038  17.12463341866421  18.09656227178477
-  POINT  1039  17.31694506141086  17.15083111331099
-  POINT  1040  15.98883207698672  16.2079814532395
-  POINT  1041  16.97035480292924  16.19013573591558
-  POINT  1042  -9.329106518265187  20.81496648779522
-  POINT  1043  -9.8677300853677  19.90262169444576
-  POINT  1044  -16.0416184259235  18.09729104090766
-  POINT  1045  -16.75928532981814  19.02240250148187
-  POINT  1046  -10.94364637205534  16.23848947462534
-  POINT  1047  -9.899040221872481  16.25867329662998
-  POINT  1048  -9.363918214825187  17.17751899663717
-  POINT  1049  -9.882579096952568  18.0821723843123
-  POINT  1050  1.561900414029895  10.8410427689158
-  POINT  1051  2.609575035489602  10.83288724625605
-  POINT  1052  1.04062209494766  9.913787200847779
-  POINT  1053  3.135520054646986  9.906088779622188
-  POINT  1054  2.596323921451698  8.989091874978008
-  POINT  1055  1.555799449866085  8.97125810462861
-  POINT  1056  5.241923253953617  13.55582514043971
-  POINT  1057  4.714728002752798  14.47325361022883
-  POINT  1058  3.143090414259499  13.57017754949987
-  POINT  1059  3.667935613371911  12.65182976927697
-  POINT  1060  4.720393505507803  12.64307989616015
-  POINT  1061  2.105326509092408  15.38069455968688
-  POINT  1062  2.670185462451287  16.23272638623747
-  POINT  1063  1.606358875586338  16.26050868767612
-  POINT  1064  2.628684318059071  14.4693842513393
-  POINT  1065  3.683559192157784  14.45370555640881
-  POINT  1066  4.200321906552371  15.37246031206826
-  POINT  1067  3.682632968769743  16.28839908786602
-  POINT  1068  -1.606358493039556  16.26050877577584
-  POINT  1069  -2.670185073501789  16.23272654426651
-  POINT  1070  -2.105326053234482  15.38069472542052
-  POINT  1071  -3.183664984271242  17.16821337539803
-  POINT  1072  -2.676212514527244  18.08657689793349
-  POINT  1073  -1.70283416326578  17.96140711913215
-  POINT  1074  0.6172255840106643  18.01551021964674
-  POINT  1075  -0.6172253233165815  18.01551020223283
-  POINT  1076  -1.085608673357664  17.16664367772251
-  POINT  1077  -0.5207496530903567  16.31461185887652
-  POINT  1078  0.5207500444094971  16.31461181097436
-  POINT  1079  1.085608997768376  17.16664363752495
-  POINT  1080  -16.26819960626571  25.30102864423684
-  POINT  1081  -15.0826163587443  25.23797552751852
-  POINT  1082  -15.93819691156472  24.42958418138574
-  POINT  1083  -15.85270768406584  27.0933844772987
-  POINT  1084  -14.85185005261381  27.02384105180678
-  POINT  1085  -15.29193868323435  28.00780553873586
-  POINT  1086  -14.3922049944544  26.11287497233606
-  POINT  1087  -14.06220229975341  25.24143050948495
-  POINT  1088  -15.7999041554007  28.93948960494379
-  POINT  1089  -16.33689631951905  29.86052605444166
-  POINT  1090  -14.74418021093874  30.63117829061417
-  POINT  1091  -15.76075609457718  30.75508671479437
-  POINT  1092  -16.81445339648837  30.82931935765637
-  POINT  1093  -14.25226231286276  29.76718314738296
-  POINT  1094  -14.79904652394867  28.86994617945188
-  POINT  1095  8.846687614423065  18.09453615000725
-  POINT  1096  8.326673584011235  19.01049903790145
-  POINT  1097  8.8267249782098  19.91153448810875
-  POINT  1098  9.867730626409395  19.90262173424139
-  POINT  1099  7.788050050994897  19.92284387971688
-  POINT  1100  4.650398721048944  25.41533314105567
-  POINT  1101  4.13553988625797  26.36549811509552
-  POINT  1102  3.637813758430262  25.45447457738014
-  POINT  1103  3.148718616325014  24.57178682998195
-  POINT  1104  2.633859781534041  25.52195180402179
-  POINT  1105  1.586802618364957  25.50754469321078
-  POINT  1106  3.649195445762174  23.59167733893057
-  POINT  1107  4.169619811571008  22.67588222314829
-  POINT  1108  4.673096959030069  23.58851448755802
-  POINT  1109  2.58832552483298  21.77484182477213
-  POINT  1110  2.171873936919459  22.8069634498414
-  POINT  1111  2.645241468865954  23.65915456557222
-  POINT  1112  1.671397107482298  23.78707294089278
-  POINT  1113  4.678030658177207  19.95553223402469
-  POINT  1114  3.655895895669011  19.96374368425781
-  POINT  1115  3.638151155981279  21.77295969648394
-  POINT  1116  4.662052669249173  21.76979684511139
-  POINT  1117  3.080758382511145  20.86875644673523
-  POINT  1118  6.731545438466698  21.74909183518711
-  POINT  1119  7.249499895745219  20.83597763799092
-  POINT  1120  6.749448501546653  19.93494218778363
-  POINT  1121  5.718187824495971  19.94613304783
-  POINT  1122  5.702209835567938  21.7603976589167
-  POINT  1123  6.222856927737663  22.66141354804614
-  POINT  1124  5.17074117997821  20.85747513225235
-  POINT  1125  14.88062362045075  11.58118328295605
-  POINT  1126  14.26663732500833  12.50470885617862
-  POINT  1127  13.20793488033116  12.53633387235034
-  POINT  1128  12.69100124091205  11.65676942854059
-  POINT  1129  13.22961407056096  10.76267987590455
-  POINT  1130  -4.181696757246904  8.041699829461468
-  POINT  1131  -3.650599174564211  8.978566896409593
-  POINT  1132  -3.626085797421631  7.144811553632946
-  POINT  1133  -4.696379137267573  7.124941829637294
-  POINT  1134  -2.5963235612001  8.989091731089145
-  POINT  1135  -2.070879541800435  8.043735781931989
-  POINT  1136  -3.574367948496355  3.363807242843679
-  POINT  1137  -3.078930514188047  2.323656929439507
-  POINT  1138  -5.123462129635516  2.630546839115701
-  POINT  1139  -4.686602709596436  1.584876903295025
-  POINT  1140  -4.632046658705416  3.457467143291768
-  POINT  1141  -3.780758206397734  1.381518432692542
-  POINT  1142  -4.380882064820396  0.4857008521467929
-  POINT  1143  -1.537414964648728  7.078318112167635
-  POINT  1144  -1.022237926549232  6.10513101172257
-  POINT  1145  -2.551004482247714  5.199344992224856
-  POINT  1146  -3.092621220269923  6.179393883868594
-  POINT  1147  -2.577938840249254  7.096151883692768
-  POINT  1148  -1.52841477052277  5.120757322235234
-  POINT  1149  -1.565385542453618  12.67566417103727
-  POINT  1150  -1.044107338782977  13.59158446540026
-  POINT  1151  -1.564857211726638  14.49716672289619
-  POINT  1152  -2.628683792188871  14.46938449138686
-  POINT  1153  -2.613060066762507  12.66750879681426
-  POINT  1154  -3.143089790317201  13.57017791411676
-  POINT  1155  -8.941278766903849  5.267200605438743
-  POINT  1156  -8.486236698750734  4.246245735265347
-  POINT  1157  -7.96706738323741  5.146957735903831
-  POINT  1158  -9.094385712909785  3.185795058127813
-  POINT  1159  -9.899165223866994  3.622750914152373
-  POINT  1160  -9.543111594457244  2.423623277029117
-  POINT  1161  -10.05434861414229  5.157349837484599
-  POINT  1162  -10.67235893022354  4.140170700800017
-  POINT  1163  -11.12311705597741  3.378439779022869
-  POINT  1164  -7.38758492759221  6.140449119392674
-  POINT  1165  -6.932542859439094  5.119494249219278
-  POINT  1166  -5.762976262804949  5.284130602062798
-  POINT  1167  -6.850768266039271  7.071734682057993
-  POINT  1168  -5.80252525044337  7.067407869086968
-  POINT  1169  -5.246914290618097  6.170519593258447
-  POINT  1170  10.71672358375953  32.87524392735796
-  POINT  1171  9.642413735714634  32.79125514185909
-  POINT  1172  11.12118559986708  31.74352281664589
-  POINT  1173  9.15793076534775  31.87228668931375
-  POINT  1174  9.685932535089496  30.95746811521505
-  POINT  1175  10.66518181181848  30.87364982818402
-  POINT  1176  15.19791671718209  31.58464847548497
-  POINT  1177  15.55917637400988  32.56630552600364
-  POINT  1178  15.79990214283926  28.93949698650302
-  POINT  1179  16.3368917696794  29.86053599387202
-  POINT  1180  15.76074915645257  30.75509875525596
-  POINT  1181  16.81444462265249  30.82933310971594
-  POINT  1182  14.74417705037517  30.63118830145916
-  POINT  1183  14.25226159415743  29.76719009883528
-  POINT  1184  14.79904553375937  28.86995223711657
-  POINT  1185  -7.660247595099477  29.07171642334552
-  POINT  1186  -8.159708535056653  30.00179812550234
-  POINT  1187  -6.639239694273195  29.0761486788626
-  POINT  1188  -7.163900621226036  28.1502520435643
-  POINT  1189  -5.497622619491922  34.55901436086761
-  POINT  1190  -4.49518773283885  34.6857363061998
-  POINT  1191  -5.579336478117359  32.80510559052856
-  POINT  1192  -6.09745675374988  33.75267451621208
-  POINT  1193  -6.650990588161214  32.86703977049458
-  POINT  1194  -5.700404689242956  23.58012241603744
-  POINT  1195  -6.729740123160614  23.56881646933958
-  POINT  1196  -7.239035482595526  24.46837386823964
-  POINT  1197  -7.761487302720488  23.54966515100682
-  POINT  1198  -7.691207402098477  27.22632931678663
-  POINT  1199  -6.670199501272196  27.23076157230372
-  POINT  1200  -6.172815514826199  26.31659798520196
-  POINT  1201  -5.645508733953759  27.24052071197963
-  POINT  1202  -8.216808032653276  26.27623618981316
-  POINT  1203  -6.702397292590144  25.39718201604923
-  POINT  1204  -5.677706525271708  25.40694115572514
-  POINT  1205  -7.734144472150017  25.37803069771646
-  POINT  1206  -8.753446222658658  25.34742804200357
-  POINT  1207  -1.645698721915378  36.58607539347716
-  POINT  1208  -2.0975796991282  37.65905758287926
-  POINT  1209  -1.630935113652335  38.70247408973233
-  POINT  1210  -0.6145331724071246  38.03403837867723
-  POINT  1211  -0.6144586935404894  36.62592449791802
-  POINT  1212  8.00627890595873e-06  37.50863528601275
-  POINT  1213  0.5990148214488246  23.75062706100676
-  POINT  1214  -0.5990146744118122  23.75062707718625
-  POINT  1215  -1.072382221738135  24.60281821827733
-  POINT  1216  1.072382353395319  24.60281817673758
-  POINT  1217  0.5144203323314835  25.47109881332476
-  POINT  1218  3.58444379142495  29.11804267687441
-  POINT  1219  3.080359636161616  28.20371011551553
-  POINT  1220  2.549037542711368  29.11196928894155
-  POINT  1221  3.619360404257244  27.30721152743419
-  POINT  1222  5.129328969085179  28.18223377819683
-  POINT  1223  4.619525056731388  29.12625241641835
-  POINT  1224  4.631945366875925  27.26807009110972
-  POINT  1225  5.645508451085906  27.24052036585816
-  POINT  1226  2.034499539717892  30.03893177661523
-  POINT  1227  1.530415384454558  29.12459921525634
-  POINT  1228  1.519467510327002  30.97888342992712
-  POINT  1229  0.5079395805963843  30.98886243067015
-  POINT  1230  3.57436036144565  3.363808001711532
-  POINT  1231  4.115208087392189  4.361615383325885
-  POINT  1232  2.034939451144496  4.189370210393712
-  POINT  1233  2.551000814787705  5.199346967166499
-  POINT  1234  2.562089764809169  3.227807842293803
-  POINT  1235  3.599148476760741  5.248005798897869
-  POINT  1236  -8.808534389004958  21.72280081085314
-  POINT  1237  -8.290579899119484  22.63591502962064
-  POINT  1238  -9.849539984213617  21.7138879840766
-  POINT  1239  -8.799875258554394  23.5354724285207
-  POINT  1240  -14.05319871993245  21.74107047129854
-  POINT  1241  -13.49147167328674  20.83257382131933
-  POINT  1242  -13.01772343641998  21.71937768246372
-  POINT  1243  -15.07065374632022  18.08797242978403
-  POINT  1244  -15.4360015171055  17.16213287055806
-  POINT  1245  -14.0080120928104  16.21237758454029
-  POINT  1246  -15.01786712752577  16.19866394969555
-  POINT  1247  -17.17857644573234  19.94984075163958
-  POINT  1248  -17.43147479908956  20.8842778513917
-  POINT  1249  -16.09556177105241  19.95056885029135
-  POINT  1250  -15.52089992188291  20.86613685530161
-  POINT  1251  -15.10160880596872  19.93869860514389
-  POINT  1252  -17.18679097624842  21.83494159512092
-  POINT  1253  -18.18552489707417  26.14279763280435
-  POINT  1254  -17.20417083141572  25.40139287011322
-  POINT  1255  -16.3485902785953  26.20978421624601
-  POINT  1256  -16.78867890921584  27.19374870317508
-  POINT  1257  -17.80065072643519  27.17057660669527
-  POINT  1258  -18.72983447894121  27.01379366339507
-  POINT  1259  11.95573882194991  19.89979512998055
-  POINT  1260  10.91279663445388  19.89738135384383
-  POINT  1261  10.41041451927062  18.99394926589576
-  POINT  1262  12.50727362976512  18.99615568741801
-  POINT  1263  5.677706720839749  25.40694066827868
-  POINT  1264  5.179980593012042  24.49591713056331
-  POINT  1265  5.700404958820875  23.58012201478103
-  POINT  1266  6.729740561719636  23.56881619105143
-  POINT  1267  7.239036046137137  24.46837365733434
-  POINT  1268  7.691207579082008  27.22632790550661
-  POINT  1269  6.670199204699301  27.23076104833079
-  POINT  1270  6.172815602490047  26.31659736124369
-  POINT  1271  8.216808740161595  26.27623588438967
-  POINT  1272  6.702397474453146  25.39718135075132
-  POINT  1273  7.734144927787435  25.37803035029934
-  POINT  1274  14.36136880606171  10.72072377865549
-  POINT  1275  15.45627677840451  10.68439021395649
-  POINT  1276  15.49028452683864  8.941107024951828
-  POINT  1277  14.33918656687014  9.008056274559546
-  POINT  1278  13.80526722851472  9.865886806904992
-  POINT  1279  16.06641351663609  9.805491815776586
-  POINT  1280  16.64213914845493  8.907696187396814
-  POINT  1281  -7.631707103564363  30.91661699613311
-  POINT  1282  -8.655828970474381  30.92080206299163
-  POINT  1283  -7.130348925755392  31.87754588921673
-  POINT  1284  -6.634228490337664  30.95854195172743
-  POINT  1285  -9.157930722157598  31.87228935939205
-  POINT  1286  -8.612311842392856  32.75458842836879
-  POINT  1287  -7.648469201387913  32.82511481490026
-  POINT  1288  -2.549229273895434  34.70629607419768
-  POINT  1289  -2.021007115319019  33.78145919155421
-  POINT  1290  -3.500292663479144  34.71485452438976
-  POINT  1291  -4.030907574346319  33.71985855443602
-  POINT  1292  -5.179980371060386  24.49591750747982
-  POINT  1293  -4.650398593296442  25.41533347663255
-  POINT  1294  -3.649195283407097  23.591677514562
-  POINT  1295  -3.148718474961619  24.57178698404517
-  POINT  1296  -4.673096757267691  23.58851473694486
-  POINT  1297  0.5144203594414323  27.2905527635694
-  POINT  1298  1.022476754514889  28.20145846246176
-  POINT  1299  0.507938751521413  29.12842095013544
-  POINT  1300  -9.846921989817281  23.51115965477413
-  POINT  1301  -9.317829393418286  24.42490977616031
-  POINT  1302  -9.800492953921545  25.323115268257
-  POINT  1303  -10.83039438917027  25.28468549874502
-  POINT  1304  -10.92764508160684  18.07693196478106
-  POINT  1305  -10.41041404191582  18.99394930834161
-  POINT  1306  -10.91279607002197  19.89738127491452
-  POINT  1307  -11.95573820817218  19.89979496064743
-  POINT  1308  -11.41305425162406  20.80846734675159
-  POINT  1309  -15.14265757944868  21.78642099994649
-  POINT  1310  -14.66890934258192  22.67322486109087
-  POINT  1311  -16.13661054453237  21.79829124509394
-  POINT  1312  -15.25549093307073  23.54255322720311
-  POINT  1313  -14.1660320735545  23.49720269855517
-  POINT  1314  -16.80854863381419  22.75522573976579
-  POINT  1315  -16.44107418059214  23.60560634392143
-  POINT  1316  10.44287685491821  15.3320070852495
-  POINT  1317  10.99244953168854  14.41410579688861
-  POINT  1318  12.05881853851436  14.38348705047854
-  POINT  1319  12.51923528622494  15.29188158122452
-  POINT  1320  9.882579552317679  18.08217219529029
-  POINT  1321  9.363918655514606  17.17751869900422
-  POINT  1322  10.92764556036217  18.07693181489272
-  POINT  1323  9.899040669385645  16.25867285543741
-  POINT  1324  10.94364677894179  16.23848897409934
-  POINT  1325  -0.5144201764050657  27.29055277175395
-  POINT  1326  6.145462372320054e-08  26.3758253379825
-  POINT  1327  -0.5144202035150144  25.4710988215093
-  POINT  1328  -1.586802492614995  25.50754474293507
-  POINT  1329  4.053181679175566e-07  30.05156162643644
-  POINT  1330  -0.5079373955465308  30.98886235417658
-  POINT  1331  -0.5079382246215022  29.12842087364186
-  POINT  1332  -12.94362054595454  25.24019426221156
-  POINT  1333  -13.63403191024444  24.36529481739402
-  POINT  1334  -13.04745031975563  23.49596645128178
-  POINT  1335  -11.90568140505247  25.26641628259847
-  POINT  1336  -11.44016314056337  24.38232778626718
-  POINT  1337  -10.38199561361241  22.61371945416543
-  POINT  1338  -10.90256774287263  21.70588513110751
-  POINT  1339  -10.8999497484763  23.50315680180504
-  POINT  1340  -11.94550988102284  21.70829881684042
-  POINT  1341  -11.9752367643585  23.48488758565849
-  POINT  1342  -12.50723692766855  22.61679546681964
-  POINT  1343  -11.95486088381842  18.07035362542616
-  POINT  1344  -11.42702593885517  17.15857670139686
-  POINT  1345  -11.97086217426693  16.23191113527045
-  POINT  1346  -13.00261454459266  16.21196963584406
-  POINT  1347  -13.45963928928449  17.15240631073819
-  POINT  1348  -14.04300661306449  19.92893456636063
-  POINT  1349  -14.61766846223399  19.01336656135037
-  POINT  1350  -14.012051553416  18.07820839100076
-  POINT  1351  -13.00753132955202  19.9072417775258
-  POINT  1352  -12.50727314794993  18.99615570568874
-  POINT  1353  -13.00665400519826  18.07780044230454
-  POINT  1354  11.42702639250091  17.15857636716348
-  POINT  1355  11.95486135945386  18.07035343776895
-  POINT  1356  13.45963971419343  17.15240581280172
-  POINT  1357  13.00665446190387  18.07780023968877
-  POINT  1358  11.97086257803348  16.23191059697557
-  POINT  1359  13.00261489978407  16.21196897428866
-  POINT  1360  -4.63194529517035  27.26807044242916
-  POINT  1361  -5.129329281616346  28.18223402953092
-  POINT  1362  -2.075897664001495  26.39023252420856
-  POINT  1363  -2.633859682224616  25.52195192097659
-  POINT  1364  -3.619360348222028  27.30721173111527
-  POINT  1365  -4.135539800559439  26.36549841356398
-  POINT  1366  -3.637813646348119  25.45447476531866
-  POINT  1367  -1.530414898263689  29.12459912906478
-  POINT  1368  -1.022476552060444  28.20145845276378
-  POINT  1369  -2.583954039656873  27.30113820521839
-  POINT  1370  -3.080359534267785  28.20371023408358
-  POINT  1371  -1.536896850047253  27.28673102717688
-  POINT  1372  -4.543158675405131  32.76980075139725
-  POINT  1373  -5.096692509816465  31.88416600567974
-  POINT  1374  -3.548263606045425  32.79891896958721
-  POINT  1375  -2.549037169284093  29.11196922998421
-  POINT  1376  -2.034498841845151  30.03893165086228
-  POINT  1377  -3.584443477849247  29.11804275588108
-  POINT  1378  -1.519465434862823  30.97888306068132
-  POINT  1379  -1.011526259584607  31.91618386491503
-  POINT  1380  -3.041784503002568  31.8775328689841
-  POINT  1381  -2.529533401943756  32.82759067202288
-  POINT  1382  -2.538087705883227  30.96625316160074
-  POINT  1383  -3.556817909984896  30.93758145916507
-  POINT  1384  -1.514528012276162  32.8600730909511
-  POINT  1385  -4.088203640533337  30.03451082052263
-  POINT  1386  -4.591900437652678  30.94579052790599
-  POINT  1387  -6.129436418173878  30.02016647395368
-  POINT  1388  -5.628078240364906  30.9810953670373
-  POINT  1389  -4.619526005517029  29.126251824622
-  POINT  1390  -5.633089444300436  29.09870209417247
+  POINT  5  -5.494590158705203  0.769568933904214
+  POINT  6  -4.555054354703293  0.5256199116454576
+  POINT  7  -3.62510614201392  0.3312784996295808
+  POINT  8  -2.686413338358856  0.1812416288131739
+  POINT  9  -1.753728402849995  0.077037451999329
+  POINT  10  -0.851420720971519  0.01813114404021269
+  POINT  11  0.8514160122311216  0.01813095400480157
+  POINT  12  1.753719324465416  0.07703666291032139
+  POINT  13  2.686401050802698  0.181239963250821
+  POINT  14  3.625091324513498  0.3312757686489166
+  POINT  15  4.555037637659274  0.5256160015391538
+  POINT  16  5.494572548479121  0.7695639022537971
+  POINT  17  -8.14748720023632  1.73477478041978
+  POINT  18  -7.204326158760607  1.342623855477397
+  POINT  19  -6.323306730319925  1.025917887963812
+  POINT  20  -5.012043637681486  1.487026562234344
+  POINT  21  -4.001504680231534  1.348769869720156
+  POINT  22  -3.020446348008669  1.193123454693629
+  POINT  23  -2.033096162687354  1.074468404199018
+  POINT  24  -1.029250259109854  0.9952937048620419
+  POINT  25  -4.743693576426955e-06  0.9550846747893821
+  POINT  26  1.029241591782402  0.9952938914888843
+  POINT  27  2.033087778001799  1.074468514560464
+  POINT  28  3.020437785114206  1.193122951441658
+  POINT  29  4.001495610537607  1.348768371554737
+  POINT  30  5.012033480242295  1.487023534523747
+  POINT  31  6.323291483458299  1.025912806798219
+  POINT  32  7.20431240676467  1.342618545311957
+  POINT  33  8.147472348609107  1.734768155628285
+  POINT  34  -9.874839229995656  2.607830779866931
+  POINT  35  -8.967401898964656  2.123039878590955
+  POINT  36  -7.43893966884391  2.316523461127632
+  POINT  37  -6.505937339794322  2.123067897852342
+  POINT  38  -5.617471023440036  2.128732087831175
+  POINT  39  -4.504938941140685  2.292372023343256
+  POINT  40  -3.474895393652287  2.188889537474249
+  POINT  41  -2.477789827740728  2.069417744488129
+  POINT  42  -1.486533939627704  1.978390111577929
+  POINT  43  -0.4945351927920381  1.920788208193323
+  POINT  44  0.494530028654747  1.920788180673721
+  POINT  45  1.48652903784696  1.978390363793194
+  POINT  46  2.477785286357576  2.069417875067633
+  POINT  47  3.474891314117997  2.188889007881329
+  POINT  48  4.504935616060729  2.292369967247126
+  POINT  49  5.617468616717059  2.128722558769742
+  POINT  50  6.505934206344425  2.123064219351945
+  POINT  51  7.438934955645484  2.316522386860346
+  POINT  52  8.967386714216421  2.123032261658711
+  POINT  53  9.874824441340188  2.607822383246229
+  POINT  54  -11.51772618471706  3.649404184131703
+  POINT  55  -10.65697220336667  3.075788247109521
+  POINT  56  -9.073837487095867  3.098945367911463
+  POINT  57  -8.146481814508759  2.93463496665957
+  POINT  58  -7.049600453276345  3.146247627644996
+  POINT  59  -6.068284496299216  3.100104651100007
+  POINT  60  -5.072988891537222  3.091827459666651
+  POINT  61  -3.993877927928949  3.131132225510109
+  POINT  62  -2.967955349130637  3.051608081751008
+  POINT  63  -1.969358890547338  2.964205195218535
+  POINT  64  -0.9811566490131486  2.90071553814206
+  POINT  65  -1.32163243384692e-06  2.877135624667564
+  POINT  66  0.9811540073798326  2.900715668778548
+  POINT  67  1.969356448130425  2.964205359405151
+  POINT  68  2.967953292680015  3.051607771536507
+  POINT  69  3.993876536191101  3.131130560601491
+  POINT  70  5.07298836313739  3.09182201424316
+  POINT  71  6.06828189330052  3.10009883043144
+  POINT  72  7.049596028910742  3.146246238867447
+  POINT  73  8.146475803362755  2.934633378296194
+  POINT  74  9.073829870567886  3.098941319319342
+  POINT  75  10.65695825761416  3.075779465645408
+  POINT  76  11.51771371828971  3.649395402508161
+  POINT  77  -12.25874124373426  4.197365310835768
+  POINT  78  -10.64940593588828  4.039054822049597
+  POINT  79  -9.738991551137142  3.788828249782045
+  POINT  80  -8.645496432574655  3.944646023442154
+  POINT  81  -7.660083249538626  3.927642758322452
+  POINT  82  -6.59386271210862  4.037468940686985
+  POINT  83  -5.568600019856155  4.018665115993096
+  POINT  84  -4.542276038525629  3.999836078704063
+  POINT  85  -3.491369657240189  3.994992924822852
+  POINT  86  -2.474009349355216  3.935011777572696
+  POINT  87  -1.477288819485819  3.874958764735967
+  POINT  88  -0.4912058119350093  3.84024391890156
+  POINT  89  0.4912045861343114  3.840244004832297
+  POINT  90  1.477287661196852  3.874958892229309
+  POINT  91  2.474008420090503  3.935011605232642
+  POINT  92  3.491369140152303  3.994991746916046
+  POINT  93  4.542275958327673  3.999832734657181
+  POINT  94  5.568598961382722  4.018661009084565
+  POINT  95  6.593859756639968  4.037466906689763
+  POINT  96  7.660079741658018  3.927642484330992
+  POINT  97  8.64549214777098  3.944645135772696
+  POINT  98  9.738984400934594  3.788824210856252
+  POINT  99  10.64939834126311  4.039049114973768
+  POINT  100  12.25873013918693  4.197356696596919
+  POINT  101  -13.06808399305144  4.859815696281542
+  POINT  102  -12.14172415206427  5.120456490850303
+  POINT  103  -11.26850058845588  4.78253504757261
+  POINT  104  -10.17404214944296  4.845047406793981
+  POINT  105  -9.208059651222554  4.766866668801151
+  POINT  106  -8.164339019401956  4.857476344060355
+  POINT  107  -7.149967162775942  4.875867152053067
+  POINT  108  -6.093958019589567  4.926093683238227
+  POINT  109  -5.058077545048842  4.913790131101954
+  POINT  110  -4.028039828119854  4.894648028971938
+  POINT  111  -2.995365612046738  4.876648223313875
+  POINT  112  -1.984673486096534  4.833837916766388
+  POINT  113  -0.9889438049108867  4.797769562520688
+  POINT  114  -2.362747113168751e-07  4.784386125986646
+  POINT  115  0.9889433725237518  4.797769655939185
+  POINT  116  1.984673180431574  4.833837841092998
+  POINT  117  2.995365534870316  4.876647488912344
+  POINT  118  4.028039920473764  4.894645987409467
+  POINT  119  5.05807704187145  4.913787423329794
+  POINT  120  6.09395626231969  4.926092028666856
+  POINT  121  7.149964792987238  4.875866809291987
+  POINT  122  8.164336682555421  4.857476643496101
+  POINT  123  9.208056699547432  4.766865857979807
+  POINT  124  10.17403815454237  4.845044126893953
+  POINT  125  11.26849448251217  4.782529900161253
+  POINT  126  12.14171794981946  5.120450644819872
+  POINT  127  13.06807455950774  4.859807553827244
+  POINT  128  -13.79621135610305  5.520201927590952
+  POINT  129  -12.80117439670994  5.856589459482491
+  POINT  130  -11.67938537881067  5.871675730352508
+  POINT  131  -10.7214199084595  5.705740655756915
+  POINT  132  -9.682832193302595  5.735754340027762
+  POINT  133  -8.688206795148123  5.723107658281122
+  POINT  134  -7.655630079002389  5.775975918064022
+  POINT  135  -6.627659763072258  5.792669306732381
+  POINT  136  -5.582314228446745  5.814411012773447
+  POINT  137  -4.548885425945512  5.805126115268295
+  POINT  138  -3.522722077771634  5.788884500830754
+  POINT  139  -2.501187311366817  5.770380462326169
+  POINT  140  -1.494394371192296  5.742942846788264
+  POINT  141  -0.4971264884626344  5.724801584483487
+  POINT  142  0.4971264114179549  5.724801616093884
+  POINT  143  1.494394375253193  5.742942820679326
+  POINT  144  2.501187449167741  5.770380046330405
+  POINT  145  3.522722282985142  5.788883304381674
+  POINT  146  4.548885254065114  5.80512440450948
+  POINT  147  5.582313237121974  5.814409778421799
+  POINT  148  6.627658274246912  5.792668907910858
+  POINT  149  7.655628672903336  5.775976131426517
+  POINT  150  8.688205683983837  5.723107897941759
+  POINT  151  9.682831053695072  5.735753339275631
+  POINT  152  10.72141774219851  5.705737949417665
+  POINT  153  11.67938249802985  5.871671763668828
+  POINT  154  12.80116985277255  5.856584114327579
+  POINT  155  13.79620361018442  5.52019455095268
+  POINT  156  -15.07551414433484  6.857364294633759
+  POINT  157  -14.47383155813855  6.197529205731446
+  POINT  158  -13.45485475009742  6.553837837714978
+  POINT  159  -12.31042185688016  6.683440243020864
+  POINT  160  -11.21350161895065  6.69819718995942
+  POINT  161  -10.20833342071787  6.628047644175917
+  POINT  162  -9.180105769142591  6.64834742192738
+  POINT  163  -8.167115514052471  6.65576641169878
+  POINT  164  -7.135706515094646  6.685162961807312
+  POINT  165  -6.105345078296335  6.696209760357505
+  POINT  166  -5.069576645378604  6.705314119570696
+  POINT  167  -4.041800732917723  6.698207423904568
+  POINT  168  -3.020761532842517  6.685782557740071
+  POINT  169  -2.005808074374162  6.671737301319939
+  POINT  170  -1.000288933333046  6.656398725132026
+  POINT  171  4.397573777348285e-08  6.650034053590167
+  POINT  172  1.000289057350326  6.656398701633271
+  POINT  173  2.005808282761941  6.671737074424545
+  POINT  174  3.020761779503171  6.685781881995771
+  POINT  175  4.041800760087482  6.698206389869481
+  POINT  176  5.069576162857779  6.705313264812579
+  POINT  177  6.10534421344702  6.69620937563182
+  POINT  178  7.135705654446768  6.685162970448084
+  POINT  179  8.167114943754402  6.655766632853415
+  POINT  180  9.180105544149159  6.648347310133159
+  POINT  181  10.20833306114628  6.628046599517105
+  POINT  182  11.21350079915651  6.698194920239427
+  POINT  183  12.31041989729133  6.683437342390677
+  POINT  184  13.45485102688512  6.553833543240082
+  POINT  185  14.47382501191121  6.197522339217816
+  POINT  186  15.07550853647004  6.85735785101832
+  POINT  187  -15.74070185460795  7.661835423193954
+  POINT  188  -14.74687538651157  7.702960989661571
+  POINT  189  -13.93188920478376  7.345232089754496
+  POINT  190  -12.86506131544698  7.471088086950771
+  POINT  191  -11.77211701495691  7.547677194388092
+  POINT  192  -10.70587046671523  7.565284924165475
+  POINT  193  -9.687660424643854  7.54461386330666
+  POINT  194  -8.662563218479574  7.560951116274378
+  POINT  195  -7.642034647994548  7.571360794157137
+  POINT  196  -6.613518858753616  7.588082984279957
+  POINT  197  -5.586073186048593  7.595112879441636
+  POINT  198  -4.558140690092682  7.598809924577656
+  POINT  199  -3.535939593111036  7.59366155618144
+  POINT  200  -2.519295513626756  7.585207729094968
+  POINT  201  -1.507828110570193  7.576464832977407
+  POINT  202  -0.5019148548267611  7.569504441473947
+  POINT  203  0.5019150140751154  7.569504419051911
+  POINT  204  1.507828313373964  7.576464701318211
+  POINT  205  2.51929574421762  7.58520735259712
+  POINT  206  3.535939709005314  7.593660949468794
+  POINT  207  4.558140510818687  7.598809363042038
+  POINT  208  5.58607274341326  7.595112562629756
+  POINT  209  6.613518369190103  7.588082887213245
+  POINT  210  7.642034309561478  7.571360854887308
+  POINT  211  8.662563167404116  7.560951138691602
+  POINT  212  9.687660573872202  7.54461354186692
+  POINT  213  10.70587058429081  7.565283863779716
+  POINT  214  11.77211666522259  7.547675581264719
+  POINT  215  12.8650605916635  7.471085619230291
+  POINT  216  13.93188849368163  7.345227696048455
+  POINT  217  14.74687398655421  7.702958601368711
+  POINT  218  15.74069772046266  7.661830148963676
+  POINT  219  -16.34008243157374  8.467363435476578
+  POINT  220  -15.28567534644808  8.552905620836993
+  POINT  221  -14.22089501094071  8.468579625245626
+  POINT  222  -13.29774920244363  8.333212052076258
+  POINT  223  -12.27300453476784  8.396001904827241
+  POINT  224  -11.224449672806  8.44025834990769
+  POINT  225  -10.1842020715159  8.457472361197105
+  POINT  226  -9.163914101356678  8.456332255719779
+  POINT  227  -8.14059852678059  8.468750713098206
+  POINT  228  -7.118690004259524  8.477698841262107
+  POINT  229  -6.093911741800466  8.487745637900247
+  POINT  230  -5.070537359203934  8.492297494254309
+  POINT  231  -4.048497389531928  8.493845716618845
+  POINT  232  -3.030710235690668  8.490541970764172
+  POINT  233  -2.017113078017005  8.485534154569866
+  POINT  234  -1.007152862458606  8.481122761690685
+  POINT  235  8.070285670638833e-08  8.479054147646179
+  POINT  236  1.007153037203349  8.481122683637645
+  POINT  237  2.017113267583667  8.485533940823723
+  POINT  238  3.030710370157321  8.490541618084078
+  POINT  239  4.048497363984429  8.493845358028667
+  POINT  240  5.070537168629906  8.49229725406053
+  POINT  241  6.093911495339211  8.487745514844656
+  POINT  242  7.11868981343622  8.477698810261961
+  POINT  243  8.140598491031323  8.468750699179775
+  POINT  244  9.163914246108916  8.456332131143173
+  POINT  245  10.18420232498191  8.457471896486332
+  POINT  246  11.22444978036375  8.440257512134613
+  POINT  247  12.27300442131762  8.396000443618357
+  POINT  248  13.29774885774807  8.333209357606099
+  POINT  249  14.22089386884885  8.468576880391957
+  POINT  250  15.28567398016187  8.552903295969026
+  POINT  251  16.34007933974851  8.46735905480778
+  POINT  252  -16.89879506132182  9.30277019619324
+  POINT  253  -15.84083890009481  9.368103783320413
+  POINT  254  -14.75936630448394  9.376434710940254
+  POINT  255  -13.72667446491556  9.338668036765469
+  POINT  256  -12.7458829592818  9.286293637722791
+  POINT  257  -11.72514144039831  9.317880286978371
+  POINT  258  -10.69307226518711  9.344364735918155
+  POINT  259  -9.663652464211705  9.358107425253532
+  POINT  260  -8.642457994516798  9.362656816289235
+  POINT  261  -7.620361904257799  9.371754129812164
+  POINT  262  -6.599324604837983  9.378698501517102
+  POINT  263  -5.577936443480438  9.385133261260403
+  POINT  264  -4.558210845970175  9.388247898190615
+  POINT  265  -3.540361900824579  9.389121481751587
+  POINT  266  -2.52566238019628  9.387374370414491
+  POINT  267  -1.513887157671833  9.384925984750414
+  POINT  268  -0.504297186178584  9.383298051709803
+  POINT  269  0.5042973320602566  9.383298015668299
+  POINT  270  1.51388730668141  9.384925862954564
+  POINT  271  2.525662501619651  9.387374163645836
+  POINT  272  3.540361939509808  9.389121254735599
+  POINT  273  4.558210789027288  9.388247723190803
+  POINT  274  5.577936342341931  9.385133146588913
+  POINT  275  6.599324518449944  9.378698438465905
+  POINT  276  7.62036189183867  9.371754085979447
+  POINT  277  8.642458092973191  9.362656736309578
+  POINT  278  9.663652671231812  9.358107201585797
+  POINT  279  10.6930724783395  9.344364317591429
+  POINT  280  11.72514158518201  9.31787949717938
+  POINT  281  12.74588295478644  9.286292109076781
+  POINT  282  13.72667400654556  9.338666111495892
+  POINT  283  14.75936532452434  9.376432764986804
+  POINT  284  15.84083766707554  9.368101537096484
+  POINT  285  16.8987927411374  9.302766530916411
+  POINT  286  -17.41541814741128  10.16622093237684
+  POINT  287  -16.36597467943507  10.20674001010058
+  POINT  288  -15.30570510771474  10.23673169382489
+  POINT  289  -14.25334124093768  10.24705991000825
+  POINT  290  -13.22518371810642  10.23169262743967
+  POINT  291  -12.21928286812764  10.21375315134102
+  POINT  292  -11.19741423399891  10.23174369517853
+  POINT  293  -10.17050417537597  10.2482576748095
+  POINT  294  -9.145044199699443  10.25842856407609
+  POINT  295  -8.123750354518931  10.26388718261748
+  POINT  296  -7.10298550942124  10.2706284602633
+  POINT  297  -6.083575083515306  10.2759394046698
+  POINT  298  -5.065015567249327  10.28034882788564
+  POINT  299  -4.048200146803218  10.28265723277545
+  POINT  300  -3.033238075903394  10.28342728339184
+  POINT  301  -2.02054894726801  10.28280355683485
+  POINT  302  -1.009738819288446  10.28194446006377
+  POINT  303  5.919699467074602e-08  10.28162989140187
+  POINT  304  1.009738935910972  10.2819443965436
+  POINT  305  2.020549047902884  10.28280343604998
+  POINT  306  3.033238133655776  10.28342713958931
+  POINT  307  4.048200151873941  10.2826571076832
+  POINT  308  5.065015543299326  10.28034873191634
+  POINT  309  6.083575061485952  10.27593933706552
+  POINT  310  7.102985523625926  10.27062840654225
+  POINT  311  8.123750433256964  10.26388711645833
+  POINT  312  9.14504435731642  10.25842843597803
+  POINT  313  10.17050438210141  10.24825745265531
+  POINT  314  11.19741445812459  10.23174327923734
+  POINT  315  12.21928304966143  10.21375232985006
+  POINT  316  13.22518366386299  10.23169143671009
+  POINT  317  14.25334082737309  10.24705856617686
+  POINT  318  15.30570438725816  10.2367300912412
+  POINT  319  16.36597364727631  10.20673788845324
+  POINT  320  17.41541641117195  10.16621785753401
+  POINT  321  -17.88625803484845  11.05115797933476
+  POINT  322  -16.85120422054986  11.06936232054822
+  POINT  323  -15.81832377296524  11.10623835603135
+  POINT  324  -14.77936586062894  11.12671433185663
+  POINT  325  -13.74209116444094  11.13500853711859
+  POINT  326  -12.71605470869173  11.13080637203836
+  POINT  327  -11.69940028612606  11.12659743667363
+  POINT  328  -10.67625961071982  11.13773567839252
+  POINT  329  -9.651329983156939  11.14840741093704
+  POINT  330  -8.627923790323184  11.15586543586765
+  POINT  331  -7.607383209356573  11.16085887302131
+  POINT  332  -6.588183874293925  11.16597912139563
+  POINT  333  -5.570592864708988  11.17006260278196
+  POINT  334  -4.55434815440509  11.17325037576849
+  POINT  335  -3.539757168979546  11.17505634294026
+  POINT  336  -2.526758778403693  11.17584237662288
+  POINT  337  -1.515331628371982  11.17586700307951
+  POINT  338  -0.5049906539082446  11.17574820189833
+  POINT  339  0.5049907444555864  11.17574817768458
+  POINT  340  1.5153317094028  11.17586693621212
+  POINT  341  2.526758836407911  11.17584228689916
+  POINT  342  3.539757198178682  11.17505625511356
+  POINT  343  4.554348166128215  11.17325029975345
+  POINT  344  5.570592875755479  11.17006254133163
+  POINT  345  6.588183905050538  11.16597906858908
+  POINT  346  7.6073832793965  11.16085881572795
+  POINT  347  8.62792391457109  11.15586535027681
+  POINT  348  9.651330158548348  11.14840727911036
+  POINT  349  10.67625983071012  11.13773544977034
+  POINT  350  11.69940052274761  11.12659700092283
+  POINT  351  12.71605485286965  11.13080569362486
+  POINT  352  13.74209110304109  11.13500768317192
+  POINT  353  14.7793655795263  11.12671327386668
+  POINT  354  15.81832324916032  11.10623695423282
+  POINT  355  16.85120337097398  11.06936033777372
+  POINT  356  17.88625674904034  11.05115540936097
+  POINT  357  -18.30877322305379  11.9508495437846
+  POINT  358  -17.29354589755249  11.94920666314173
+  POINT  359  -16.29455300391288  11.99583596159888
+  POINT  360  -15.27946629704285  12.01498717612042
+  POINT  361  -14.25474205301729  12.02594878618006
+  POINT  362  -13.22681809875847  12.03063506970706
+  POINT  363  -12.20220308495755  12.03009391767082
+  POINT  364  -11.18106431040382  12.03032682581759
+  POINT  365  -10.15753313450907  12.03745704775757
+  POINT  366  -9.134027318052762  12.04457505277963
+  POINT  367  -8.11232875700758  12.05009863957686
+  POINT  368  -7.093073740706956  12.05428798841279
+  POINT  369  -6.075537130934441  12.0582085939917
+  POINT  370  -5.05970021646697  12.06132294542906
+  POINT  371  -4.045326070247903  12.06366127251691
+  POINT  372  -3.032406410591747  12.06506238376489
+  POINT  373  -2.020741740391878  12.06579002116175
+  POINT  374  -1.010099115438543  12.06604601638048
+  POINT  375  3.404314703400746e-08  12.06609631184198
+  POINT  376  1.010099179329847  12.06604598427999
+  POINT  377  2.02074179197248  12.06578996792154
+  POINT  378  3.032406446294575  12.06506232425981
+  POINT  379  4.045326095644757  12.06366121500955
+  POINT  380  5.059700241198946  12.06132289396818
+  POINT  381  6.075537167668678  12.05820854699794
+  POINT  382  7.093073802862654  12.05428793944949
+  POINT  383  8.112328856771683  12.05009857666489
+  POINT  384  9.134027460561303  12.04457496575233
+  POINT  385  10.15753332314846  12.03745691162176
+  POINT  386  11.18106453668301  12.03032658694119
+  POINT  387  12.20220329614919  12.03009354250335
+  POINT  388  13.22681822001311  12.03063456472911
+  POINT  389  14.25474204169832  12.02594812574046
+  POINT  390  15.27946612080948  12.01498628420012
+  POINT  391  16.29455261172639  11.99583469575495
+  POINT  392  17.29354519100736  11.94920477604054
+  POINT  393  18.30877230037898  11.95084744504889
+  POINT  394  -18.68349051939805  12.86367167154098
+  POINT  395  -17.69955044194535  12.83783554399056
+  POINT  396  -16.74680072099509  12.90757935532751
+  POINT  397  -15.76140667037218  12.9221400730053
+  POINT  398  -14.75567094155959  12.92630257350449
+  POINT  399  -13.73682065989795  12.92743559025777
+  POINT  400  -12.71214391446095  12.92742694362712
+  POINT  401  -11.68737838806575  12.92678450620815
+  POINT  402  -10.66414648577376  12.92775785019992
+  POINT  403  -9.640754341022918  12.93234383939904
+  POINT  404  -8.618552582613498  12.93719911566106
+  POINT  405  -7.598448596921033  12.94129728244754
+  POINT  406  -6.580657830892998  12.94461961735053
+  POINT  407  -5.564721623493883  12.94754856845896
+  POINT  408  -4.550449594156615  12.94982267896038
+  POINT  409  -3.537564068386769  12.95146460765515
+  POINT  410  -2.525883376596742  12.95246017188719
+  POINT  411  -1.515118380882561  12.95300971020892
+  POINT  412  -0.5049676356087293  12.95322346487957
+  POINT  413  0.5049676844956841  12.95322345397402
+  POINT  414  1.515118423968893  12.95300968152577
+  POINT  415  2.525883411194239  12.95246013386642
+  POINT  416  3.537564097060069  12.95146456643065
+  POINT  417  4.550449622545449  12.94982263848316
+  POINT  418  5.56472165978088  12.9475485292704
+  POINT  419  6.580657884493699  12.94461957666239
+  POINT  420  7.598448677339204  12.9412972341219
+  POINT  421  8.618552696870632  12.93719905370227
+  POINT  422  9.640754495709061  12.93234375105686
+  POINT  423  10.66414668192525  12.927757709954
+  POINT  424  11.6873786049825  12.9267842939533
+  POINT  425  12.7121441131643  12.92742665289655
+  POINT  426  13.73682080368874  12.92743519895239
+  POINT  427  14.75567099253752  12.92630202967495
+  POINT  428  15.76140658474425  12.92213928078801
+  POINT  429  16.74680044196923  12.90757816273018
+  POINT  430  17.69954984610879  12.8378336756992
+  POINT  431  18.6834899076131  12.8636700698384
+  POINT  432  -19.02238328735229  13.82351766220752
+  POINT  433  -18.13955550450578  13.72808332961303
+  POINT  434  -17.24747413019177  13.83334150399983
+  POINT  435  -16.27671854460964  13.8444824687452
+  POINT  436  -15.27456079944098  13.83853174040222
+  POINT  437  -14.25616310884793  13.83020331307981
+  POINT  438  -13.22989658164751  13.82408308329856
+  POINT  439  -12.20135161049109  13.82071634572721
+  POINT  440  -11.17413867021331  13.81944883534201
+  POINT  441  -10.14926702413137  13.8202526514499
+  POINT  442  -9.126057836010542  13.82327629540207
+  POINT  443  -8.104996732868651  13.82665424545745
+  POINT  444  -7.086340525468896  13.82965017200467
+  POINT  445  -6.069982091125469  13.83211598100588
+  POINT  446  -5.055493375580907  13.83414727908586
+  POINT  447  -4.042551432867163  13.8356365177082
+  POINT  448  -3.030821469833524  13.83664074843842
+  POINT  449  -2.020032225634883  13.83720573920392
+  POINT  450  -1.009850751894021  13.83750425714042
+  POINT  451  1.810922449496655e-08  13.83759275454394
+  POINT  452  1.009850786298219  13.83750424406298
+  POINT  453  2.020032256013255  13.83720571680718
+  POINT  454  3.030821497136831  13.83664072069242
+  POINT  455  4.042551460337563  13.83563648775698
+  POINT  456  5.055493408535647  13.83414724818297
+  POINT  457  6.069982136283464  13.83211594828056
+  POINT  458  7.086340590263971  13.82965013439014
+  POINT  459  8.10499682427386  13.82665419928439
+  POINT  460  9.126057961450252  13.82327623361172
+  POINT  461  10.14926718918715  13.82025256130822
+  POINT  462  11.17413887129433  13.81944870576308
+  POINT  463  12.20135183449013  13.82071617071633
+  POINT  464  13.2298968126255  13.82408284872117
+  POINT  465  14.25616332583766  13.83020298488662
+  POINT  466  15.27456097333428  13.83853124901386
+  POINT  467  16.27671863417596  13.84448169655714
+  POINT  468  17.24747406497697  13.8333402848443
+  POINT  469  18.13955510497579  13.72808140596411
+  POINT  470  19.02238297028846  13.82351668571184
+  POINT  471  -19.27564676568709  14.66619818849089
+  POINT  472  -18.09766041208614  14.63187219093411
+  POINT  473  -16.95614347083327  14.72460549592841
+  POINT  474  -15.86921119998628  14.73780837074977
+  POINT  475  -14.81075412562909  14.72985007775523
+  POINT  476  -13.76486885106658  14.71947853532306
+  POINT  477  -12.72555276796724  14.71230313005461
+  POINT  478  -11.69126114605113  14.70886227379599
+  POINT  479  -10.66153612521807  14.70791746350395
+  POINT  480  -9.635755859587105  14.70873065251559
+  POINT  481  -8.613020109485847  14.71088365791704
+  POINT  482  -7.593121578733488  14.71326619553437
+  POINT  483  -6.575848554049146  14.71535684285003
+  POINT  484  -5.560852653819958  14.71698338764731
+  POINT  485  -4.547650629124863  14.71814844465915
+  POINT  486  -3.535804015609155  14.71887158153257
+  POINT  487  -2.524929077240439  14.71927025322356
+  POINT  488  -1.51473317861481  14.71940316393901
+  POINT  489  -0.5048698269273962  14.71947361417091
+  POINT  490  0.5048698535429671  14.71947360989954
+  POINT  491  1.514733203827875  14.71940315211682
+  POINT  492  2.524929101236818  14.7192702358374
+  POINT  493  3.535804040216305  14.718871560705
+  POINT  494  4.547650657766261  14.71814842161689
+  POINT  495  5.560852691237506  14.71698336234047
+  POINT  496  6.575848605965658  14.71535681381056
+  POINT  497  7.593121651312162  14.71326616047178
+  POINT  498  8.613020209763325  14.71088361248173
+  POINT  499  9.635755994552092  14.70873058948735
+  POINT  500  10.66153629879202  14.70791737591909
+  POINT  501  11.6912613588511  14.70886215652677
+  POINT  502  12.72555302053373  14.71230297372473
+  POINT  503  13.76486914422805  14.71947831783373
+  POINT  504  14.81075446037261  14.72984974915426
+  POINT  505  15.86921157538354  14.73780783221082
+  POINT  506  16.95614383875429  14.72460459306813
+  POINT  507  18.09766051890814  14.63187085031223
+  POINT  508  19.27564662677329  14.66619768647507
+  POINT  509  -19.50127447943532  15.56149871265921
+  POINT  510  -18.49586950943177  15.47325546362292
+  POINT  511  -17.47213216627488  15.54874531288023
+  POINT  512  -16.40580641559685  15.60593665709938
+  POINT  513  -15.34601737544395  15.61677435076866
+  POINT  514  -14.2947172695349  15.61000643038673
+  POINT  515  -13.24977965914606  15.60136804308813
+  POINT  516  -12.21061092357855  15.59603464741921
+  POINT  517  -11.1766690651603  15.59374881308825
+  POINT  518  -10.14751831522785  15.59340802755161
+  POINT  519  -9.122560414444946  15.59426088206107
+  POINT  520  -8.101062346441838  15.595824538575
+  POINT  521  -7.082603470679119  15.59741857217645
+  POINT  522  -6.066776863361147  15.59867868119486
+  POINT  523  -5.053111971733885  15.59945020989904
+  POINT  524  -4.041063833280758  15.59972861882586
+  POINT  525  -3.030084669706362  15.599680671072
+  POINT  526  -2.019763038193452  15.59951607389083
+  POINT  527  -1.009857003554932  15.59925577449675
+  POINT  528  1.024755921091858e-08  15.599193476494
+  POINT  529  1.009857023845601  15.59925576915614
+  POINT  530  2.019763058357887  15.59951606388146
+  POINT  531  3.030084690801801  15.59968065751039
+  POINT  532  4.041063857507812  15.59972860263055
+  POINT  533  5.053112002382292  15.59945019127528
+  POINT  534  6.066776904670986  15.59867865945828
+  POINT  535  7.082603527619012  15.59741854590029
+  POINT  536  8.101062424891389  15.59582450492322
+  POINT  537  9.122560520746296  15.59426083642217
+  POINT  538  10.14751845483047  15.59340796487829
+  POINT  539  11.17666924233262  15.59374872859052
+  POINT  540  12.21061114276325  15.59603453344294
+  POINT  541  13.24977992549936  15.60136788386504
+  POINT  542  14.29471758842084  15.61000619229367
+  POINT  543  15.34601774658832  15.61677396966515
+  POINT  544  16.40580680537335  15.60593604543914
+  POINT  545  17.47213241791181  15.54874447015032
+  POINT  546  18.4958693388047  15.47325456203676
+  POINT  547  19.50127443887344  15.56149853444409
+  POINT  548  -19.69120777770086  16.49909493767488
+  POINT  549  -18.82453814407551  16.39668162048823
+  POINT  550  -17.91856863118067  16.45118061991079
+  POINT  551  -16.92410838554749  16.48124398607248
+  POINT  552  -15.88164018773895  16.50096422915104
+  POINT  553  -14.82887068531301  16.49821045669536
+  POINT  554  -13.77807911254733  16.48886297653494
+  POINT  555  -12.7333784111039  16.48193539493605
+  POINT  556  -11.69485118291488  16.47821714148055
+  POINT  557  -10.66193355150254  16.47685701531462
+  POINT  558  -9.634017284309458  16.47687882871921
+  POINT  559  -8.610421523166179  16.47761153274202
+  POINT  560  -7.59043875501705  16.47862741976457
+  POINT  561  -6.573526910504127  16.47948404375377
+  POINT  562  -5.55916420169899  16.47991242318579
+  POINT  563  -4.546789160014427  16.4797742368711
+  POINT  564  -3.535766395032657  16.47908711802946
+  POINT  565  -2.525390013898583  16.4782315399178
+  POINT  566  -1.515222446789751  16.47755978237018
+  POINT  567  -0.505160915759866  16.47693907152057
+  POINT  568  0.5051609320854129  16.4769390697559
+  POINT  569  1.515222463409069  16.47755977720512
+  POINT  570  2.525390031591372  16.47823153173884
+  POINT  571  3.535766415254718  16.47908710738646
+  POINT  572  4.546789185065328  16.47977422398127
+  POINT  573  5.559164234676066  16.47991240775378
+  POINT  574  6.573526955235264  16.47948402492305
+  POINT  575  7.590438816148497  16.47862739571796
+  POINT  576  8.610421605901228  16.47761150046795
+  POINT  577  9.634017393679581  16.47687878455547
+  POINT  578  10.66193369197147  16.47685695525197
+  POINT  579  11.6948513586376  16.47821705943312
+  POINT  580  12.73337862581002  16.48193527915152
+  POINT  581  13.77807936895742  16.48886280392126
+  POINT  582  14.82887098061904  16.49821018706623
+  POINT  583  15.88164049446434  16.50096381647671
+  POINT  584  16.92410861282034  16.48124342897973
+  POINT  585  17.91856863399398  16.45118006156937
+  POINT  586  18.82453798513463  16.39668072056363
+  POINT  587  19.69120781864528  16.4990951679711
+  POINT  588  -19.82328465846074  17.34719293018973
+  POINT  589  -18.68356651268673  17.31043580953861
+  POINT  590  -17.56673240514328  17.36123106358058
+  POINT  591  -16.47414590791442  17.37598986974012
+  POINT  592  -15.39064716739153  17.37819173206542
+  POINT  593  -14.32006602394481  17.37102412556857
+  POINT  594  -13.2634493215721  17.36491520744474
+  POINT  595  -12.21741851257929  17.36094404730209
+  POINT  596  -11.17940525689727  17.35901220028596
+  POINT  597  -10.14779283686373  17.35850451428117
+  POINT  598  -9.121467989502685  17.35873940174785
+  POINT  599  -8.09954906046551  17.35924582268215
+  POINT  600  -7.081277449497645  17.35971278396684
+  POINT  601  -6.066028455702323  17.35983944191427
+  POINT  602  -5.053197717776997  17.35940141983762
+  POINT  603  -4.042124698542789  17.35824695931711
+  POINT  604  -3.032009115389205  17.3564023422576
+  POINT  605  -2.021821824817601  17.35459015065573
+  POINT  606  -1.011040264187739  17.35340280443575
+  POINT  607  6.814640345076395e-09  17.35243938843107
+  POINT  608  1.011040278028748  17.35340280223508
+  POINT  609  2.021821839659843  17.35459014619961
+  POINT  610  3.032009132287029  17.35640233585637
+  POINT  611  4.042124719169761  17.35824695109229
+  POINT  612  5.053197744437713  17.35940140968951
+  POINT  613  6.066028491348846  17.35983942938084
+  POINT  614  7.081277497793296  17.35971276796347
+  POINT  615  8.099549125655424  17.35924580133723
+  POINT  616  9.121468076013995  17.3587393726077
+  POINT  617  10.14779294895601  17.35850447445268
+  POINT  618  11.17940539853177  17.3590121455207
+  POINT  619  12.21741868699975  17.36094396965026
+  POINT  620  13.26344953055692  17.36491509096027
+  POINT  621  14.32006626614396  17.37102394370543
+  POINT  622  15.39064742969177  17.37819145776436
+  POINT  623  16.47414614962407  17.37598951033426
+  POINT  624  17.56673257253595  17.36123068035427
+  POINT  625  18.68356665984462  17.31043516903573
+  POINT  626  19.82328469438627  17.3471931986458
+  POINT  627  -19.92361530225037  18.25370297831815
+  POINT  628  -19.07203628626812  18.19876552320404
+  POINT  629  -18.09128424245282  18.22378292531755
+  POINT  630  -17.02794564635327  18.24352791034031
+  POINT  631  -15.94398258752478  18.24421394845224
+  POINT  632  -14.86112859360125  18.24245684590457
+  POINT  633  -13.79465161119509  18.24206223663435
+  POINT  634  -12.74159853322912  18.24073858102732
+  POINT  635  -11.698529613906  18.23959715961889
+  POINT  636  -10.66316644369302  18.23915626546558
+  POINT  637  -9.633977641977911  18.2392237253931
+  POINT  638  -8.609886644138397  18.23947670834334
+  POINT  639  -7.590062391072585  18.23966317253559
+  POINT  640  -6.573799873479021  18.2395756905061
+  POINT  641  -5.560467629070432  18.23897213290731
+  POINT  642  -4.549395686991836  18.2375962202419
+  POINT  643  -3.53974763298982  18.23518325778423
+  POINT  644  -2.530321009293305  18.23165172954483
+  POINT  645  -1.519299961772805  18.22830303022641
+  POINT  646  -0.5061568241133134  18.22651105869159
+  POINT  647  0.5061568361746052  18.22651105818931
+  POINT  648  1.519299974627625  18.2283030281956
+  POINT  649  2.530321023719614  18.23165172623696
+  POINT  650  3.539747650302188  18.23518325320082
+  POINT  651  4.549395708977971  18.23759621436859
+  POINT  652  5.560467658068336  18.23897212554887
+  POINT  653  6.573799912439206  18.23957568110988
+  POINT  654  7.590062443504756  18.23966316006795
+  POINT  655  8.609886713904036  18.23947669135741
+  POINT  656  9.633977733038876  18.23922370211182
+  POINT  657  10.66316655986387  18.23915623336316
+  POINT  658  11.69852975826159  18.23959711417069
+  POINT  659  12.74159870680618  18.24073851295247
+  POINT  660  13.79465181041776  18.24206212883075
+  POINT  661  14.86112880502805  18.24245668253721
+  POINT  662  15.94398277539668  18.24421374106404
+  POINT  663  17.02794575643996  18.24352769585881
+  POINT  664  18.09128426867969  18.22378260511285
+  POINT  665  19.07203607838779  18.19876510589028
+  POINT  666  19.92361533574309  18.25370336043873
+  POINT  667  -19.9802449810712  19.11128711446231
+  POINT  668  -18.80619197016033  19.09425379941037
+  POINT  669  -17.66225403113433  19.09510203515607
+  POINT  670  -16.52583190669753  19.09866237624121
+  POINT  671  -15.41432354959155  19.0986301021614
+  POINT  672  -14.33063667844831  19.1105065301146
+  POINT  673  -13.26794614671815  19.11638402180332
+  POINT  674  -12.21904679432654  19.11829199267038
+  POINT  675  -11.17975304147024  19.11894075428319
+  POINT  676  -10.14765766280284  19.11928688527702
+  POINT  677  -9.121321606407902  19.1195239082655
+  POINT  678  -8.099811768765214  19.11961774535636
+  POINT  679  -7.082440474765014  19.11946501955149
+  POINT  680  -6.068617555176951  19.11889174400767
+  POINT  681  -5.057733760576324  19.11759686938207
+  POINT  682  -4.048951495282913  19.11510440717879
+  POINT  683  -3.040860967573059  19.11069978972926
+  POINT  684  -2.031062116367802  19.10382972217813
+  POINT  685  -1.01638199358576  19.09746934675944
+  POINT  686  5.469910147222479e-09  19.09799582548251
+  POINT  687  1.016382005544462  19.09746934612121
+  POINT  688  2.031062129425211  19.10382972109414
+  POINT  689  3.040860982727736  19.11069978795467
+  POINT  690  4.048951514001514  19.1151044047146
+  POINT  691  5.057733784810108  19.11759686619456
+  POINT  692  6.06861758741177  19.11889173991558
+  POINT  693  7.082440518000469  19.11946501414825
+  POINT  694  8.099811826393989  19.11961773801307
+  POINT  695  9.121321682045322  19.11952389818466
+  POINT  696  10.14765776004377  19.11928687136565
+  POINT  697  11.1797531633058  19.11894073468605
+  POINT  698  12.21904694182174  19.11829196363125
+  POINT  699  13.26794631623689  19.11638397571452
+  POINT  700  14.33063685706478  19.11050645765263
+  POINT  701  15.41432371433398  19.09863001492938
+  POINT  702  16.52583203632977  19.09866230844884
+  POINT  703  17.6622541458637  19.09510191838969
+  POINT  704  18.80619204599507  19.09425361367645
+  POINT  705  19.9802449892912  19.11128730390016
+  POINT  706  -19.18788556876717  20.00005139493198
+  POINT  707  -18.23752403849579  19.99984302247159
+  POINT  708  -17.29064226017514  19.99925376166535
+  POINT  709  -16.47440002277868  20.00254940092639
+  POINT  710  -15.69589026095225  19.99922347246529
+  POINT  711  -14.75829776969549  19.99999149402495
+  POINT  712  -13.75224907606844  20.00002238976034
+  POINT  713  -12.72358628344629  20.00001314522074
+  POINT  714  -11.69063170189132  20.00000296247429
+  POINT  715  -10.65968425579931  19.99999907815186
+  POINT  716  -9.632679418332129  19.99999847573628
+  POINT  717  -8.610092788959356  19.9999987802438
+  POINT  718  -7.592007815489902  19.99999919201484
+  POINT  719  -6.578584325048967  19.99999952078446
+  POINT  720  -5.570430449173512  19.99999973968279
+  POINT  721  -4.569141973011657  19.99999986982209
+  POINT  722  -3.578262228261103  19.99999994088966
+  POINT  723  -2.605187956284842  19.99999997690123
+  POINT  724  -1.66466516281073  19.99999999380757
+  POINT  725  -0.7826655107941599  20.0000000016338
+  POINT  726  0.7826655154907771  20.00000000163381
+  POINT  727  1.664665170888243  19.99999999380764
+  POINT  728  2.605187967544461  19.99999997690146
+  POINT  729  3.578262243238  19.99999994089031
+  POINT  730  4.569141992985899  19.9999998698238
+  POINT  731  5.570430476094784  19.99999973968696
+  POINT  732  6.578584361468833  19.999999520794
+  POINT  733  7.592007864442903  19.99999919203552
+  POINT  734  8.610092853801689  19.99999878028637
+  POINT  735  9.632679502529101  19.99999847581969
+  POINT  736  10.6596843624034  19.99999907830713
+  POINT  737  11.69063183223476  20.00000296274612
+  POINT  738  12.72358643409481  20.00001314569264
+  POINT  739  13.75224923254777  20.00002239071156
+  POINT  740  14.75829790050601  19.99999149614534
+  POINT  741  15.69589033419841  19.99922348070548
+  POINT  742  16.47440003681302  20.0025493901109
+  POINT  743  17.29064231060998  19.99925377353345
+  POINT  744  18.23752405131307  19.99984302941273
+  POINT  745  19.18788543351031  20.00005138833587
+  POINT  746  -19.98023779283576  20.88887437456774
+  POINT  747  -18.80580843557483  20.90547874653299
+  POINT  748  -17.66161201461446  20.90415650737443
+  POINT  749  -16.52591330812703  20.90273438014319
+  POINT  750  -15.41490978144221  20.90067949213849
+  POINT  751  -14.33087263381866  20.8894508385836
+  POINT  752  -13.26804240623713  20.88362475434566
+  POINT  753  -12.21908307283113  20.88171102490173
+  POINT  754  -11.1797653194024  20.88105596204579
+  POINT  755  -10.14766089752007  20.88070896143329
+  POINT  756  -9.121321787680523  20.8804729634606
+  POINT  757  -8.099811171529218  20.88038023214702
+  POINT  758  -7.082439863957721  20.88053378104001
+  POINT  759  -6.068617118328885  20.88110759648338
+  POINT  760  -5.057733492537352  20.88240279408681
+  POINT  761  -4.048951345696993  20.88489543523155
+  POINT  762  -3.040860889905527  20.88930014517067
+  POINT  763  -2.031062079165233  20.89617025723036
+  POINT  764  -1.016381979500983  20.90253065295888
+  POINT  765  5.469943456515303e-09  20.90200417751546
+  POINT  766  1.016381991459812  20.90253065359715
+  POINT  767  2.03106209222298  20.89617025831457
+  POINT  768  3.040860905061069  20.88930014694594
+  POINT  769  4.048951364417659  20.88489543769765
+  POINT  770  5.057733516775839  20.8824027972792
+  POINT  771  6.06861715057387  20.88110760058708
+  POINT  772  7.082439907213993  20.88053378646916
+  POINT  773  8.099811229198181  20.8803802395451
+  POINT  774  9.121321863390992  20.88047297365156
+  POINT  775  10.14766099488602  20.88070897555551
+  POINT  776  11.17976544143952  20.88105598202432
+  POINT  777  12.21908322063199  20.88171105459812
+  POINT  778  13.26804257619063  20.88362480166985
+  POINT  779  14.33087281298531  20.88945091392941
+  POINT  780  15.41490994607966  20.90067958866326
+  POINT  781  16.52591344201236  20.90273444864004
+  POINT  782  17.66161214257477  20.90415664260873
+  POINT  783  18.80580852434392  20.90547893935344
+  POINT  784  19.98023780197282  20.88887416458981
+  POINT  785  -19.92358828250518  21.74660526428339
+  POINT  786  -19.07217434439901  21.80073889981208
+  POINT  787  -18.09112945874565  21.77562907330344
+  POINT  788  -17.02812405581322  21.75701137151901
+  POINT  789  -15.94366066593676  21.75622850710521
+  POINT  790  -14.86126409690214  21.75722234436677
+  POINT  791  -13.79471434661022  21.75787709872358
+  POINT  792  -12.74162038561464  21.75924454538805
+  POINT  793  -11.69853414597164  21.7603937981996
+  POINT  794  -10.66316512661045  21.76083746123114
+  POINT  795  -9.633974994254842  21.76077236820268
+  POINT  796  -8.609884257109169  21.76052103489894
+  POINT  797  -7.590060667734138  21.76033556874065
+  POINT  798  -6.573798770236956  21.76042363684251
+  POINT  799  -5.560466980079595  21.76102752854904
+  POINT  800  -4.549395330869891  21.76240362299502
+  POINT  801  -3.53974744971968  21.76481667916055
+  POINT  802  -2.5303209212877  21.76834825283947
+  POINT  803  -1.519299924135361  21.77169697292803
+  POINT  804  -0.5061568134041036  21.7734889506532
+  POINT  805  0.5061568254655004  21.77348895115548
+  POINT  806  1.519299936990494  21.77169697495886
+  POINT  807  2.530320935714927  21.76834825614754
+  POINT  808  3.539747467034398  21.76481668374473
+  POINT  809  4.549395352861634  21.76240362887052
+  POINT  810  5.560467009090089  21.76102753591302
+  POINT  811  6.573798809223865  21.76042364625162
+  POINT  812  7.590060720219843  21.76033558123638
+  POINT  813  8.609884326976061  21.76052105194263
+  POINT  814  9.633975085497147  21.76077239159665
+  POINT  815  10.66316524309085  21.76083749354136
+  POINT  816  11.69853429083621  21.7603938440048
+  POINT  817  12.74162056001178  21.75924461407503
+  POINT  818  13.79471454718983  21.75787720786278
+  POINT  819  14.86126431068448  21.75722251199929
+  POINT  820  15.94366086082416  21.756228717586
+  POINT  821  17.02812417119083  21.75701159238045
+  POINT  822  18.09112949141926  21.77562941392504
+  POINT  823  19.07217412140869  21.80073933755012
+  POINT  824  19.92358831980405  21.74660483881377
+  POINT  825  -19.823263456196  22.65296550038718
+  POINT  826  -18.68347167777789  22.6889724670474
+  POINT  827  -17.5669100312704  22.63883478838346
+  POINT  828  -16.47409263224828  22.6242054542872
+  POINT  829  -15.3904367336017  22.62202395225419
+  POINT  830  -14.32006894483515  22.62885094013076
+  POINT  831  -13.26345062953686  22.63505078113978
+  POINT  832  -12.21741436155782  22.63904422561734
+  POINT  833  -11.17939965412427  22.64098178723362
+  POINT  834  -10.14778782482358  22.64149205572087
+  POINT  835  -9.121464141616515  22.64125877788618
+  POINT  836  -8.099546383139796  22.64075324216461
+  POINT  837  -7.081275727631735  22.64028674537108
+  POINT  838  -6.066027421514116  22.64016033445862
+  POINT  839  -5.053197134698077  22.64059848599732
+  POINT  840  -4.042124389521369  22.64175301143073
+  POINT  841  -3.032008961880832  22.64359765889142
+  POINT  842  -2.021821754586955  22.64540986356159
+  POINT  843  -1.011040237264479  22.64659721372332
+  POINT  844  6.814665224480487e-09  22.6475606308115
+  POINT  845  1.011040251105664  22.64659721592393
+  POINT  846  2.021821769429846  22.64540986801763
+  POINT  847  3.032008978780493  22.6435976652927
+  POINT  848  4.042124410152931  22.64175301965603
+  POINT  849  5.053197161369463  22.64059849614706
+  POINT  850  6.066027457183961  22.64016034699624
+  POINT  851  7.081275775975558  22.6402867613839
+  POINT  852  8.099546448423908  22.64075326352899
+  POINT  853  9.121464228302864  22.64125880706316
+  POINT  854  10.14778793722731  22.64149209561295
+  POINT  855  11.17939979629603  22.64098184209338
+  POINT  856  12.21741453689023  22.6390443033786
+  POINT  857  13.26345084008729  22.63505089777322
+  POINT  858  14.32006918987354  22.62885112279828
+  POINT  859  15.39043700219516  22.62202422695843
+  POINT  860  16.47409288234377  22.62420581860266
+  POINT  861  17.56691020844972  22.63883518337205
+  POINT  862  18.68347184009588  22.68897314250563
+  POINT  863  19.82326349779923  22.652965189523
+  POINT  864  -19.69117813060965  23.501071811403
+  POINT  865  -18.8246775584696  23.60270488921595
+  POINT  866  -17.91872317447207  23.54877686754418
+  POINT  867  -16.92421077812897  23.51878118738913
+  POINT  868  -15.88162933414794  23.49913833184728
+  POINT  869  -14.82876942700178  23.5019021870122
+  POINT  870  -13.77806312245109  23.51109818218014
+  POINT  871  -12.7333690497193  23.51805365247506
+  POINT  872  -11.69484326979592  23.5217794620292
+  POINT  873  -10.661927166753  23.52314139532949
+  POINT  874  -9.634012473512842  23.52312044026287
+  POINT  875  -8.610418120559023  23.52238820743955
+  POINT  876  -7.590436502923668  23.52137251796749
+  POINT  877  -6.573525514872875  23.52051596810155
+  POINT  878  -5.559163390593181  23.52008761426355
+  POINT  879  -4.54678871790041  23.52022580633416
+  POINT  880  -3.535766169521851  23.52091292302367
+  POINT  881  -2.525389907129223  23.5217684966976
+  POINT  882  -1.515222401501546  23.52244024975234
+  POINT  883  -0.505160903546754  23.52306095823609
+  POINT  884  0.5051609198722887  23.52306096000069
+  POINT  885  1.515222418121158  23.52244025491717
+  POINT  886  2.525389924823131  23.52176850487623
+  POINT  887  3.535766189747005  23.52091293366626
+  POINT  888  4.546788742958842  23.52022581922355
+  POINT  889  5.559163423587246  23.52008762969507
+  POINT  890  6.573525559639977  23.52051598693144
+  POINT  891  7.590436564126859  23.52137254201168
+  POINT  892  8.610418203429177  23.52238823970576
+  POINT  893  9.634012583123939  23.5231204844028
+  POINT  894  10.66192730763136  23.52314145532485
+  POINT  895  11.69484344618557  23.52177954389795
+  POINT  896  12.73336926547453  23.51805376783202
+  POINT  897  13.77806338049386  23.51109835404176
+  POINT  898  14.82876972514016  23.50190245509659
+  POINT  899  15.88162964366185  23.49913874577929
+  POINT  900  16.92421100623148  23.5187817528495
+  POINT  901  17.9187231720003  23.54877744101314
+  POINT  902  18.82467738720799  23.60270583207815
+  POINT  903  19.69117818073977  23.50107152945477
+  POINT  904  -19.50128258193048  24.4384656875654
+  POINT  905  -18.49603377721733  24.52645328847083
+  POINT  906  -17.47222047478762  24.45122954140129
+  POINT  907  -16.40586225838657  24.39407159976292
+  POINT  908  -15.34601775579845  24.38327897298187
+  POINT  909  -14.29467265709022  24.390055636783
+  POINT  910  -13.24976676348197  24.39862650284665
+  POINT  911  -12.21060209619167  24.40396573526314
+  POINT  912  -11.17666203331493  24.40625240812431
+  POINT  913  -10.14751294202745  24.40659288968487
+  POINT  914  -9.122556531432314  24.40573982553234
+  POINT  915  -8.101059706484772  24.40417598818402
+  POINT  916  -7.082601789515715  24.40258179050725
+  POINT  917  -6.066775861079858  24.401321559102
+  POINT  918  -5.053111412995462  24.40054994850132
+  POINT  919  -4.041063542992159  24.40027148711376
+  POINT  920  -3.030084530115851  24.40031940219774
+  POINT  921  -2.019762977092939  24.40048397969316
+  POINT  922  -1.009856981565384  24.40074426873068
+  POINT  923  1.024744895883334e-08  24.40080656348254
+  POINT  924  1.009857001855979  24.40074427407103
+  POINT  925  2.019762997257817  24.40048398970201
+  POINT  926  3.030084551212998  24.40031941575852
+  POINT  927  4.041063567223794  24.40027150330772
+  POINT  928  5.053111443654583  24.40054996712262
+  POINT  929  6.066775902412783  24.40132158083352
+  POINT  930  7.082601846501917  24.40258181677218
+  POINT  931  8.101059785020986  24.40417602181029
+  POINT  932  9.122556637884827  24.40573987111417
+  POINT  933  10.14751308187546  24.40659295223369
+  POINT  934  11.17666221085666  24.40625249235723
+  POINT  935  12.21060231588698  24.40396584869259
+  POINT  936  13.24976703047505  24.39862666102139
+  POINT  937  14.29467297678669  24.39005587293844
+  POINT  938  15.34601812724821  24.38327935339093
+  POINT  939  16.40586264749961  24.39407221667886
+  POINT  940  17.47222072302032  24.45123039885839
+  POINT  941  18.49603359613996  24.52645421647772
+  POINT  942  19.50128254843763  24.438465834723
+  POINT  943  -19.27566297736843  25.33374322431333
+  POINT  944  -18.09775178956348  25.36799483110871
+  POINT  945  -16.95620348221256  25.27537035025225
+  POINT  946  -15.86925210584145  25.2621959819831
+  POINT  947  -14.81076315314948  25.27017923896646
+  POINT  948  -13.76485149074431  25.28055642554051
+  POINT  949  -12.72554494747265  25.2877018915422
+  POINT  950  -11.69125466472678  25.29114191583416
+  POINT  951  -10.66153084238642  25.29208544028669
+  POINT  952  -9.635751893753024  25.29127123899427
+  POINT  953  -8.613017330938026  25.28911759029576
+  POINT  954  -7.593119760102007  25.28673460993404
+  POINT  955  -6.575847443318799  25.28464366208886
+  POINT  956  -5.56085202263591  25.28301692601594
+  POINT  957  -4.547650297377339  25.28185175153692
+  POINT  958  -3.535803856092467  25.28112854408795
+  POINT  959  -2.524929008354851  25.28072983104776
+  POINT  960  -1.514733152989468  25.28059689769103
+  POINT  961  -0.5048698207562641  25.28052643741724
+  POINT  962  0.5048698473713688  25.28052644168841
+  POINT  963  1.51473317820234  25.28059690951267
+  POINT  964  2.524929032351727  25.28072984843296
+  POINT  965  3.535803880701605  25.28112856491395
+  POINT  966  4.54765032602379  25.28185177457648
+  POINT  967  5.560852060064414  25.28301695131759
+  POINT  968  6.575847495256659  25.28464369111745
+  POINT  969  7.593119832718212  25.28673464497304
+  POINT  970  8.613017431274047  25.28911763568033
+  POINT  971  9.635752028795475  25.29127130191628
+  POINT  972  10.66153101603581  25.29208552765603
+  POINT  973  11.6912548775394  25.29114203268002
+  POINT  974  12.72554519985952  25.28770204706892
+  POINT  975  13.76485178333624  25.28055664153414
+  POINT  976  14.81076348639632  25.27017956625211
+  POINT  977  15.86925247881834  25.26219652228766
+  POINT  978  16.95620384751598  25.27537126258778
+  POINT  979  18.09775189289379  25.36799618984021
+  POINT  980  19.27566284513804  25.33374370218195
+  POINT  981  -19.02239954985974  26.17643225215792
+  POINT  982  -18.13957375669325  26.27182967555013
+  POINT  983  -17.24752991244937  26.16660408857279
+  POINT  984  -16.27676195998304  26.15550609242113
+  POINT  985  -15.27459027941854  26.16147153179269
+  POINT  986  -14.25617297779009  26.16981316221108
+  POINT  987  -13.2298905244963  26.17593671197166
+  POINT  988  -12.20134707994185  26.17929019701242
+  POINT  989  -11.17413433418612  26.18055581832264
+  POINT  990  -10.14926347567323  26.17975046130899
+  POINT  991  -9.126055233191323  26.1767257214049
+  POINT  992  -8.104994973232515  26.17334704655403
+  POINT  993  -7.086339423772932  26.17035063568784
+  POINT  994  -6.069981455507479  26.16788451762503
+  POINT  995  -5.055493041319419  26.16585302924196
+  POINT  996  -4.042551276201685  26.16436367569299
+  POINT  997  -3.030821407389114  26.16335937686056
+  POINT  998  -2.020032206493706  26.16279434727297
+  POINT  999  -1.009850748200918  26.16249580956691
+  POINT  1000  1.810878547461869e-08  26.16240730616165
+  POINT  1001  1.009850782604362  26.16249582264381
+  POINT  1002  2.020032236871754  26.1627943696687
+  POINT  1003  3.030821434692971  26.163359404605
+  POINT  1004  4.04255130367432  26.16436370564181
+  POINT  1005  5.055493074279512  26.16585306014084
+  POINT  1006  6.069981500676009  26.16788455034281
+  POINT  1007  7.086339488585687  26.17035067328725
+  POINT  1008  8.104995064661678  26.17334709269614
+  POINT  1009  9.126055358650662  26.17672578313303
+  POINT  1010  10.14926364070988  26.17975055132968
+  POINT  1011  11.17413453512518  26.18055594767594
+  POINT  1012  12.20134730349981  26.17929037161421
+  POINT  1013  13.22989075441856  26.17593694579172
+  POINT  1014  14.25617319248297  26.1698134895775
+  POINT  1015  15.27459044923737  26.16147202351487
+  POINT  1016  16.27676204411003  26.15550686826468
+  POINT  1017  17.24752984252422  26.16660531696369
+  POINT  1018  18.13957335417382  26.27183161770785
+  POINT  1019  19.02239923981158  26.17643320705552
+  POINT  1020  -18.68351052659932  27.13627594775126
+  POINT  1021  -17.69958032840385  27.16211878258065
+  POINT  1022  -16.74683156791625  27.09239213947461
+  POINT  1023  -15.76142860035137  27.07785332363176
+  POINT  1024  -14.75568523901815  27.07369952580982
+  POINT  1025  -13.73682530497883  27.07257389333525
+  POINT  1026  -12.71214081282853  27.07258462878146
+  POINT  1027  -11.68737540619582  27.07322119480453
+  POINT  1028  -10.66414374485063  27.07224624332165
+  POINT  1029  -9.640752201106791  27.06765889268107
+  POINT  1030  -8.618551085348614  27.06280265021007
+  POINT  1031  -7.598447638413528  27.0587038340893
+  POINT  1032  -6.580657275128921  27.05538108021106
+  POINT  1033  -5.564721338620957  27.05245186732603
+  POINT  1034  -4.55044947250108  27.05017759593697
+  POINT  1035  -3.537564033075582  27.04853556963036
+  POINT  1036  -2.525883378397752  27.04753994742007
+  POINT  1037  -1.515118391171542  27.04699037668727
+  POINT  1038  -0.5049676403738673  27.04677660797433
+  POINT  1039  0.5049676892594587  27.04677661887949
+  POINT  1040  1.515118434256783  27.04699040536934
+  POINT  1041  2.525883412994776  27.04753998543922
+  POINT  1042  3.537564061749419  27.04853561085263
+  POINT  1043  4.550449500892171  27.05017763641098
+  POINT  1044  5.564721374913006  27.05245190650947
+  POINT  1045  6.580657328738541  27.0553811208901
+  POINT  1046  7.598447718844161  27.05870388239782
+  POINT  1047  8.618551199616206  27.0628027121368
+  POINT  1048  9.640752355782366  27.06765898096566
+  POINT  1049  10.66414394092225  27.07224638347101
+  POINT  1050  11.6873756228595  27.07322140691138
+  POINT  1051  12.71214101090778  27.07258491927569
+  POINT  1052  13.7368254473805  27.07257428445428
+  POINT  1053  14.75568528734847  27.07370007007758
+  POINT  1054  15.76142851055736  27.07785411803665
+  POINT  1055  16.74683128376763  27.09239333698052
+  POINT  1056  17.6995797272013  27.16212066124442
+  POINT  1057  18.68350991969133  27.13627753669932
+  POINT  1058  -18.3087899994487  28.0491122961534
+  POINT  1059  -17.29356305303868  28.05076474633064
+  POINT  1060  -16.29456855134103  28.00414807613013
+  POINT  1061  -15.27947676947299  27.98500923824287
+  POINT  1062  -14.25474850756761  27.97405313016844
+  POINT  1063  -13.22681991964508  27.96937104967781
+  POINT  1064  -12.20220140205727  27.96991345424442
+  POINT  1065  -11.18106269960114  27.96967783441059
+  POINT  1066  -10.1575317295533  27.96254624095482
+  POINT  1067  -9.134026282902123  27.9554271272794
+  POINT  1068  -8.11232808124951  27.94990275991905
+  POINT  1069  -7.093073357937705  27.94571290375888
+  POINT  1070  -6.075536956332379  27.94179197610055
+  POINT  1071  -5.059700169738454  27.9386774220445
+  POINT  1072  -4.045326088931555  27.93633896816423
+  POINT  1073  -3.03240645241726  27.93493777823327
+  POINT  1074  -2.020741779449279  27.93421009321045
+  POINT  1075  -1.010099138076054  27.93395407311486
+  POINT  1076  3.404211895013942e-08  27.93390377024507
+  POINT  1077  1.010099201965424  27.93395410521433
+  POINT  1078  2.020741831028424  27.93421014644879
+  POINT  1079  3.032406488119535  27.93493783773603
+  POINT  1080  4.045326114328983  27.93633902566877
+  POINT  1081  5.059700194472554  27.93867747350166
+  POINT  1082  6.075536993070713  27.94179202308874
+  POINT  1083  7.09307342009923  27.94571295271277
+  POINT  1084  8.112328181018478  27.94990282281439
+  POINT  1085  9.134026425405688  27.95542721427844
+  POINT  1086  10.15753191815605  27.96254637704741
+  POINT  1087  11.18106292576653  27.96967807323303
+  POINT  1088  12.2022016129779  27.96991382936287
+  POINT  1089  13.22682004031123  27.9693715547119
+  POINT  1090  14.25474849512003  27.97405379109089
+  POINT  1091  15.27947659137026  27.98501013174536
+  POINT  1092  16.29456815670813  28.00414934511754
+  POINT  1093  17.29356234408891  28.05076663883557
+  POINT  1094  18.30878908050798  28.04911438640772
+  POINT  1095  -17.88627195115217  28.94881420577205
+  POINT  1096  -16.85121623860757  28.93061933343462
+  POINT  1097  -15.81833314037684  28.89375235827191
+  POINT  1098  -14.77937167335351  28.87328385036637
+  POINT  1099  -13.74209446540223  28.86499338776666
+  POINT  1100  -12.71605582999688  28.86919825138711
+  POINT  1101  -11.69940001494518  28.87340789918018
+  POINT  1102  -10.67625922348492  28.86226791658786
+  POINT  1103  -9.65132961605895  28.851595071435
+  POINT  1104  -8.627923539340028  28.8441361901345
+  POINT  1105  -7.607383097319782  28.83914218931285
+  POINT  1106  -6.588183876610444  28.834021579554
+  POINT  1107  -5.570592938796751  28.82993786493235
+  POINT  1108  -4.554348259497055  28.82674994031302
+  POINT  1109  -3.539757274765657  28.82494387416716
+  POINT  1110  -2.526758864903647  28.82415777580468
+  POINT  1111  -1.515331685041841  28.82413311065559
+  POINT  1112  -0.5049906739901562  28.82425189305842
+  POINT  1113  0.5049907645346323  28.82425191727151
+  POINT  1114  1.515331766070061  28.82413317752096
+  POINT  1115  2.526758922906133  28.82415786552549
+  POINT  1116  3.539757303964481  28.82494396199095
+  POINT  1117  4.554348271221096  28.82675001632507
+  POINT  1118  5.5705929498453  28.82993792637928
+  POINT  1119  6.588183907369825  28.83402163235582
+  POINT  1120  7.607383167361471  28.83914224659848
+  POINT  1121  8.627923663583609  28.84413627571221
+  POINT  1122  9.651329791428106  28.85159520324159
+  POINT  1123  10.67625944341114  28.86226814518679
+  POINT  1124  11.69940025142002  28.87340833491707
+  POINT  1125  12.71605597388189  28.86919892986707
+  POINT  1126  13.74209440347107  28.86499424204478
+  POINT  1127  14.77937139138959  28.87328490937882
+  POINT  1128  15.81833261547568  28.89375376208559
+  POINT  1129  16.85121538818617  28.93062131895283
+  POINT  1130  17.88627066804774  28.94881677035237
+  POINT  1131  -17.41542967730917  29.83375864838565
+  POINT  1132  -16.36598381746591  29.79324716653365
+  POINT  1133  -15.30571123700743  29.76326236085124
+  POINT  1134  -14.25334486558897  29.75293926663301
+  POINT  1135  -13.22518619984562  29.7683098214614
+  POINT  1136  -12.21928477595643  29.78625116079143
+  POINT  1137  -11.19741514236947  29.76826012438021
+  POINT  1138  -10.17050471136325  29.75174492628818
+  POINT  1139  -9.145044524339205  29.74157318849883
+  POINT  1140  -8.1237506134133  29.73611400010283
+  POINT  1141  -7.102985757155311  29.72937235399485
+  POINT  1142  -6.083575327030116  29.72406116587013
+  POINT  1143  -5.065015794708289  29.71965157618854
+  POINT  1144  -4.048200344643696  29.7173430556003
+  POINT  1145  -3.033238232867113  29.71657292251867
+  POINT  1146  -2.020549058249011  29.71719659405831
+  POINT  1147  -1.009738878373672  29.71805565528834
+  POINT  1148  5.919503985596375e-08  29.71837020929849
+  POINT  1149  1.009738994992378  29.71805571880686
+  POINT  1150  2.020549158880593  29.71719671483972
+  POINT  1151  3.033238290617864  29.71657306631699
+  POINT  1152  4.048200349715117  29.71734318068954
+  POINT  1153  5.065015770760248  29.7196516721558
+  POINT  1154  6.083575305003133  29.72406123347293
+  POINT  1155  7.102985771361372  29.72937240771407
+  POINT  1156  8.123750692148713  29.73611406625849
+  POINT  1157  9.145044681942796  29.74157331659041
+  POINT  1158  10.17050491805136  29.75174514843446
+  POINT  1159  11.19741536641047  29.76826054031946
+  POINT  1160  12.2192849573198  29.78625198231071
+  POINT  1161  13.22518614531627  29.76831101236639
+  POINT  1162  14.25334445158184  29.75294061103708
+  POINT  1163  15.30571051603222  29.76326396462168
+  POINT  1164  16.36598278510637  29.79324928955189
+  POINT  1165  17.41542794295087  29.83376171990615
+  POINT  1166  -16.89880493119268  30.69721421200391
+  POINT  1167  -15.84084671744584  30.63188582080215
+  POINT  1168  -14.75937079783184  30.62356117741139
+  POINT  1169  -13.72667803874304  30.6613328279952
+  POINT  1170  -12.74588714172752  30.71371027983801
+  POINT  1171  -11.72514438910883  30.68212290710705
+  POINT  1172  -10.69307402425253  30.65563776551792
+  POINT  1173  -9.663653547397562  30.64189426397848
+  POINT  1174  -8.642458727492786  30.63734439158867
+  POINT  1175  -7.620362459906692  30.62824675701598
+  POINT  1176  -6.599325061244341  30.62130216573695
+  POINT  1177  -5.577936826951563  30.6148672434393
+  POINT  1178  -4.558211164728247  30.61175248302345
+  POINT  1179  -3.540362154667188  30.61087880095583
+  POINT  1180  -2.525662571249494  30.61262583895858
+  POINT  1181  -1.513887280056144  30.61507416610434
+  POINT  1182  -0.5042972278699956  30.61670205839328
+  POINT  1183  0.5042973737465498  30.61670209443389
+  POINT  1184  1.513887429060817  30.61507428789713
+  POINT  1185  2.525662692669032  30.61262604572162
+  POINT  1186  3.54036219335181  30.61087902796626
+  POINT  1187  4.558211107788653  30.61175265802142
+  POINT  1188  5.577936725817437  30.61486735811178
+  POINT  1189  6.599324974859706  30.62130222879121
+  POINT  1190  7.620362447487361  30.62824680085264
+  POINT  1191  8.642458825941324  30.63734447157217
+  POINT  1192  9.663653754394943  30.64189448764897
+  POINT  1193  10.69307423735651  30.65563818384975
+  POINT  1194  11.72514453379872  30.68212369692436
+  POINT  1195  12.74588713706405  30.71371180853617
+  POINT  1196  13.72667758015037  30.66133475353996
+  POINT  1197  14.75936981763983  30.62356312399664
+  POINT  1198  15.84084548444188  30.63188806768807
+  POINT  1199  16.89880261226452  30.69721787530422
+  POINT  1200  -16.34009128149359  31.53262402545307
+  POINT  1201  -15.28568336821521  31.44708435232277
+  POINT  1202  -14.2209000727431  31.53141889752363
+  POINT  1203  -13.2977569951397  31.66679256172576
+  POINT  1204  -12.27301009857187  31.6040005347632
+  POINT  1205  -11.22445310392184  31.55974332082998
+  POINT  1206  -10.18420406298538  31.54252893027452
+  POINT  1207  -9.163915367393241  31.5436687933713
+  POINT  1208  -8.140599406135669  31.53125016600776
+  POINT  1209  -7.118690682844557  31.52230190448825
+  POINT  1210  -6.093912293860901  31.51225498074955
+  POINT  1211  -5.07053781765046  31.50770300997673
+  POINT  1212  -4.04849776527412  31.50615467955022
+  POINT  1213  -3.030710538587649  31.50945833368958
+  POINT  1214  -2.017113296966526  31.51446605862232
+  POINT  1215  -1.007152972521004  31.5188773687048
+  POINT  1216  8.069955546863294e-08  31.52094595365134
+  POINT  1217  1.007153147259242  31.51887744675579
+  POINT  1218  2.017113486527146  31.51446627236329
+  POINT  1219  3.030710673050414  31.50945868636081
+  POINT  1220  4.048497739728965  31.5061550381337
+  POINT  1221  5.070537627085144  31.50770325017226
+  POINT  1222  6.093912047408612  31.51225510381275
+  POINT  1223  7.118690492026126  31.52230193550043
+  POINT  1224  8.140599370382356  31.53125017994062
+  POINT  1225  9.163915512128149  31.54366891796288
+  POINT  1226  10.18420431641738  31.5425293949968
+  POINT  1227  11.22445321142737  31.55974415861684
+  POINT  1228  12.27300998503818  31.60400199599792
+  POINT  1229  13.29775665030186  31.66679525624402
+  POINT  1230  14.22089893057988  31.53142164267454
+  POINT  1231  15.28568200198485  31.44708667752904
+  POINT  1232  16.34008819047632  31.53262840498486
+  POINT  1233  -15.74070991046201  32.33815429935463
+  POINT  1234  -14.74688528329741  32.29702825850423
+  POINT  1235  -13.93190385661229  32.65477363083443
+  POINT  1236  -12.86506936822592  32.52891304941449
+  POINT  1237  -11.77212159391218  32.45232300476276
+  POINT  1238  -10.70587315849742  32.4347153350411
+  POINT  1239  -9.687662057866612  32.45538673008075
+  POINT  1240  -8.662564266803992  32.43904962117873
+  POINT  1241  -7.6420354397583  32.42864000943801
+  POINT  1242  -6.613519518949163  32.41191777411576
+  POINT  1243  -5.586073763699214  32.40488779735104
+  POINT  1244  -4.558141198059786  32.40119064612167
+  POINT  1245  -3.535940044697491  32.40633890872039
+  POINT  1246  -2.519295876494282  32.41479259504359
+  POINT  1247  -1.507828324987365  32.42353533511525
+  POINT  1248  -0.5019149230875003  32.43049565557803
+  POINT  1249  0.5019150823275319  32.43049567799903
+  POINT  1250  1.507828527783088  32.42353546677084
+  POINT  1251  2.519296107078045  32.41479297153293
+  POINT  1252  3.535940160588894  32.40633951541907
+  POINT  1253  4.558141018794441  32.40119120765029
+  POINT  1254  5.58607332108212  32.40488811417254
+  POINT  1255  6.613519029401044  32.41191787120312
+  POINT  1256  7.642035101328529  32.4286399487375
+  POINT  1257  8.662564215711519  32.43904959879422
+  POINT  1258  9.687662207059672  32.45538705154674
+  POINT  1259  10.70587327603016  32.43471639543523
+  POINT  1260  11.77212124413756  32.45232461789568
+  POINT  1261  12.86506864437663  32.5289155171651
+  POINT  1262  13.9319031453721  32.65477802453022
+  POINT  1263  14.74688388336436  32.29703064706029
+  POINT  1264  15.74070577682765  32.33815957294095
+  POINT  1265  -15.07552072766293  33.14262814282181
+  POINT  1266  -14.47383699079426  33.80246509548604
+  POINT  1267  -13.45485613851754  33.44616152809291
+  POINT  1268  -12.31042376721847  33.31655850201416
+  POINT  1269  -11.2135033566313  33.30180198841559
+  POINT  1270  -10.20833474124087  33.37195219581763
+  POINT  1271  -9.180106558323141  33.35165297473918
+  POINT  1272  -8.167116093012913  33.3442344487901
+  POINT  1273  -7.135707070230799  33.31483801144155
+  POINT  1274  -6.105345665605076  33.30379118897195
+  POINT  1275  -5.06957725725357  33.29468673625933
+  POINT  1276  -4.041801375578952  33.30179332186751
+  POINT  1277  -3.020762110140957  33.31421796476505
+  POINT  1278  -2.005808444215231  33.32826293060971
+  POINT  1279  -1.000289102538041  33.34360137140605
+  POINT  1280  4.397051474314129e-08  33.34996601347633
+  POINT  1281  1.000289226544982  33.34360139490249
+  POINT  1282  2.005808652593252  33.32826315749907
+  POINT  1283  3.020762356793561  33.31421864049496
+  POINT  1284  4.04180140274841  33.30179435588055
+  POINT  1285  5.069576774752012  33.29468759101248
+  POINT  1286  6.105344800786285  33.30379157372327
+  POINT  1287  7.135706209600581  33.31483800284786
+  POINT  1288  8.167115522703435  33.3442342276991
+  POINT  1289  9.180106333286005  33.35165308658632
+  POINT  1290  10.20833438162417  33.37195324049043
+  POINT  1291  11.21350253681438  33.30180425811116
+  POINT  1292  12.31042180764285  33.31656140263814
+  POINT  1293  13.4548524153751  33.44616582254692
+  POINT  1294  14.47383044482127  33.80247196173818
+  POINT  1295  15.07551512015369  33.14263458603429
+  POINT  1296  -13.79621587368983  34.47979377169069
+  POINT  1297  -12.80117612552641  34.14340935306568
+  POINT  1298  -11.67938708456585  34.12832297638581
+  POINT  1299  -10.72142132443546  34.29425844362311
+  POINT  1300  -9.682832980733666  34.26424534470635
+  POINT  1301  -8.688207103612132  34.27689307018375
+  POINT  1302  -7.65563025945943  34.22402537362621
+  POINT  1303  -6.627660152089107  34.20733211365729
+  POINT  1304  -5.582314868145199  34.18559033550888
+  POINT  1305  -4.548886327711884  34.19487513879358
+  POINT  1306  -3.522722983675548  34.21111636664738
+  POINT  1307  -2.501187911497048  34.22961986771382
+  POINT  1308  -1.494394684397123  34.25705724567609
+  POINT  1309  -0.4971265849464807  34.27519845138761
+  POINT  1310  0.4971265078887681  34.27519841977612
+  POINT  1311  1.494394688445157  34.25705727178087
+  POINT  1312  2.501188049285862  34.22962028369921
+  POINT  1313  3.522723188878942  34.21111756307139
+  POINT  1314  4.548886155833521  34.19487684951891
+  POINT  1315  5.582313876849914  34.18559156986573
+  POINT  1316  6.627658663296168  34.20733251253952
+  POINT  1317  7.655628853358176  34.22402516036131
+  POINT  1318  8.68820599240011  34.27689283063138
+  POINT  1319  9.682831841060921  34.26424634549341
+  POINT  1320  10.72141915815556  34.29426114991747
+  POINT  1321  11.67938420379727  34.12832694300539
+  POINT  1322  12.80117158164824  34.14341469815486
+  POINT  1323  13.79620812794538  34.47980114816573
+  POINT  1324  -13.06808813704192  35.14018072687722
+  POINT  1325  -12.14172620096994  34.87954210817981
+  POINT  1326  -11.26850255798744  35.2174633859475
+  POINT  1327  -10.17404344203454  35.15495143560162
+  POINT  1328  -9.208060341626505  35.23313312650344
+  POINT  1329  -8.164338718552617  35.1425249690552
+  POINT  1330  -7.149966973739355  35.12413503072115
+  POINT  1331  -6.093958485983832  35.07390856861841
+  POINT  1332  -5.058078832983085  35.0862120839201
+  POINT  1333  -4.028041239492521  35.10535340409478
+  POINT  1334  -2.995366542760057  35.12335223032324
+  POINT  1335  -1.984673994347679  35.16616214935111
+  POINT  1336  -0.9889440302704526  35.202230425387
+  POINT  1337  -2.362829220701329e-07  35.21561385455021
+  POINT  1338  0.9889435978667032  35.20223033196604
+  POINT  1339  1.984673688665513  35.16616222501731
+  POINT  1340  2.995366465565271  35.12335296470669
+  POINT  1341  4.028041331825868  35.10535544561446
+  POINT  1342  5.05807832979828  35.08621479165007
+  POINT  1343  6.093956728733247  35.07391022323044
+  POINT  1344  7.149964603949941  35.12413537360996
+  POINT  1345  8.16433638165371  35.14252466978046
+  POINT  1346  9.208057389898194  35.23313393742545
+  POINT  1347  10.17403944712447  35.15495471543825
+  POINT  1348  11.26849645211291  35.21746853325359
+  POINT  1349  12.14171999880287  34.87954795411678
+  POINT  1350  13.0680787036588  35.14018886919808
+  POINT  1351  -12.25874524554923  35.80263158479386
+  POINT  1352  -10.64940816662681  35.9609434482652
+  POINT  1353  -9.738993523076187  36.21117036120386
+  POINT  1354  -8.645496887251596  36.05535363229623
+  POINT  1355  -7.660082219217359  36.07236004253533
+  POINT  1356  -6.59386247522779  35.96253496561209
+  POINT  1357  -5.568601871711349  35.98133911135642
+  POINT  1358  -4.542278169739824  36.00016620825533
+  POINT  1359  -3.491371001354527  36.00500762088945
+  POINT  1360  -2.474010083407105  36.06498819452312
+  POINT  1361  -1.477289195045545  36.12504113606641
+  POINT  1362  -0.4912059285544867  36.15975599214231
+  POINT  1363  0.4912047027322386  36.15975590621064
+  POINT  1364  1.477288036732875  36.12504100856928
+  POINT  1365  2.474009154113311  36.06498836685221
+  POINT  1366  3.491370484225889  36.005008798768
+  POINT  1367  4.542278089478654  36.00016955223765
+  POINT  1368  5.568600813180165  35.98134321823733
+  POINT  1369  6.593859519726857  35.96253699972355
+  POINT  1370  7.660078711252875  36.07236031674334
+  POINT  1371  8.64549260236045  36.05535452011431
+  POINT  1372  9.738986372954258  36.21117440008044
+  POINT  1373  10.64940057210636  35.96094915519707
+  POINT  1374  12.25873414120749  35.80264019887823
+  POINT  1375  -11.51773025350177  36.35059294972418
+  POINT  1376  -10.65697659081121  36.92420899016856
+  POINT  1377  -9.073839610332337  36.90105300548846
+  POINT  1378  -8.146483166419303  37.06536476868484
+  POINT  1379  -7.049598100139526  36.85375720886346
+  POINT  1380  -6.068285778904927  36.89990321056391
+  POINT  1381  -5.072991493907814  36.90817616854977
+  POINT  1382  -3.99387954502805  36.86886824762014
+  POINT  1383  -2.967956221366422  36.948391661155
+  POINT  1384  -1.969359381657599  37.03579454421214
+  POINT  1385  -0.9811568690244843  37.09928427270614
+  POINT  1386  -1.321646322029191e-06  37.12286421524274
+  POINT  1387  0.9811542273605319  37.09928414206929
+  POINT  1388  1.969356939200988  37.03579438002285
+  POINT  1389  2.967954164856175  36.94839197135881
+  POINT  1390  3.993878153189894  36.86886991249742
+  POINT  1391  5.072990965328807  36.90818161389328
+  POINT  1392  6.068283175739424  36.89990903124271
+  POINT  1393  7.049593675630685  36.85375859784719
+  POINT  1394  8.146477155142176  37.06536635726837
+  POINT  1395  9.073831993817508  36.90105705402716
+  POINT  1396  10.65696264541113  36.92421777141614
+  POINT  1397  11.51771778734179  36.35060173116444
+  POINT  1398  -9.874844025420192  37.39216649740979
+  POINT  1399  -8.96740748095799  37.87695732138048
+  POINT  1400  -7.438938982686154  37.68347468260948
+  POINT  1401  -6.50593626267252  37.87694008295671
+  POINT  1402  -5.61747021210558  37.87127533952164
+  POINT  1403  -4.50493919684402  37.70762847888211
+  POINT  1404  -3.474895680182776  37.81110994000395
+  POINT  1405  -2.47779011320007  37.9305818016129
+  POINT  1406  -1.486534122834006  38.0216095618874
+  POINT  1407  -0.4945352453330601  38.07921156797903
+  POINT  1408  0.4945300811634933  38.07921159550066
+  POINT  1409  1.486529221010789  38.02160930967654
+  POINT  1410  2.477785571750189  37.9305816710405
+  POINT  1411  3.474891600531238  37.81111046960394
+  POINT  1412  4.504935871545127  37.70763053498042
+  POINT  1413  5.617467804911568  37.87128486851104
+  POINT  1414  6.505933128734337  37.87694376153858
+  POINT  1415  7.438934268999978  37.68347575716164
+  POINT  1416  8.967392296606542  37.87696493811983
+  POINT  1417  9.874829237160435  37.39217489381149
+  POINT  1418  -8.147493943469181  38.26522221165496
+  POINT  1419  -7.204335412055579  38.65737257146897
+  POINT  1420  -6.323312496190199  38.97408019050001
+  POINT  1421  -5.01203726983948  38.51297624845616
+  POINT  1422  -4.001501092985738  38.651230540567
+  POINT  1423  -3.020444675311309  38.806876475282
+  POINT  1424  -2.033095442850132  38.92553139969691
+  POINT  1425  -1.029249995848707  39.00470609623093
+  POINT  1426  -4.74370389105111e-06  39.04491520100409
+  POINT  1427  1.029241328499785  39.00470590960975
+  POINT  1428  2.033087058128695  38.92553128934863
+  POINT  1429  3.020436112344315  38.80687697855863
+  POINT  1430  4.001492023142893  38.65123203877156
+  POINT  1431  5.01202711215084  38.51297927624825
+  POINT  1432  6.323297249481397  38.97408527161986
+  POINT  1433  7.204321660158831  38.6573778816041
+  POINT  1434  8.147479092148298  38.26522883631657
+  POINT  1435  -5.49459488339432  39.2304297161394
+  POINT  1436  -4.555054134591538  39.47438013983862
+  POINT  1437  -3.625104797446435  39.66872174818514
+  POINT  1438  -2.68641217378018  39.8187585290443
+  POINT  1439  -1.753727660812683  39.92296262335634
+  POINT  1440  -0.8514203504713909  39.98186887129251
+  POINT  1441  0.8514156417348741  39.98186906132761
+  POINT  1442  1.753718582443226  39.92296341244428
+  POINT  1443  2.686399886263002  39.81876019460063
+  POINT  1444  3.625089980059974  39.66872447914377
+  POINT  1445  4.555037417817725  39.47438404988157
+  POINT  1446  5.494577273669186  39.23043474765144
+  POINT  1447  -10.17836236469941  9.351236080585844
+  POINT  1448  -10.43178822028154  9.796311205363828
+  POINT  1449  -9.917078319793836  9.803182550031517
+  POINT  1450  -0.4257127323325477  0.4866079094147974
+  POINT  1451  -2.371846788213477e-06  0.477542337394691
+  POINT  1452  -0.4258068646365975  0.004533301166143754
+  POINT  1453  -7.678410559861725  1.532677211575885
+  POINT  1454  -7.321632913802258  1.829573658302515
+  POINT  1455  -7.793213434540115  2.025649120773706
+  POINT  1456  -0.4257125470876409  39.5133920361483
+  POINT  1457  -2.371851945525555e-06  39.52245760050205
+  POINT  1458  -0.4258066792652949  39.99546670279175
+  POINT  1459  19.49788122060637  21.77367208818195
+  POINT  1460  19.87859224467908  22.20035688754039
+  POINT  1461  19.44771880960396  22.22685226353656
+  POINT  1462  19.95652174895268  21.31804389755909
+  POINT  1463  19.52620596169076  21.34480675106996
+  POINT  1464  -18.50178077972164  27.59500547042333
+  POINT  1465  -18.00418516392628  27.60561553936703
+  POINT  1466  -18.19154542750159  27.14919736516595
+  POINT  1467  2.318125029883721  20.44808511760801
+  POINT  1468  2.823024436302765  20.4446500619237
+  POINT  1469  2.535961498642024  20.89273520263026
+  POINT  1470  -18.1915204806717  12.85075360776577
+  POINT  1471  -18.00416183249957  12.39434254388758
+  POINT  1472  -18.50176221811813  12.40494933886966
+  POINT  1473  -10.43863716835151  8.90091854855763
+  POINT  1474  -9.923927267863803  8.907789893225319
+  POINT  1475  -10.95968604283294  7.131741057062447
+  POINT  1476  -11.49280931695378  7.122937192173756
+  POINT  1477  -11.23899374083607  7.556481059276784
+  POINT  1478  -10.96516006976062  8.002771637036583
+  POINT  1479  -11.49828334388146  7.993967772147892
+  POINT  1480  -10.70432587216095  8.448865355552398
+  POINT  1481  -10.95876096899656  8.892311542912923
+  POINT  1482  -10.44503626911557  8.01137864268129
+  POINT  1483  14.20285675279642  6.771375017633135
+  POINT  1484  14.50369851507584  7.101292773533388
+  POINT  1485  14.77834984324904  6.524081630761735
+  POINT  1486  12.23551226998423  9.30208580312808
+  POINT  1487  11.99907300324982  8.856939970398869
+  POINT  1488  12.50944368805203  8.841146276347569
+  POINT  1489  11.97221231742172  9.765815913514722
+  POINT  1490  12.48258300222394  9.750022219463421
+  POINT  1491  -0.4905789853227912  2.888925581404812
+  POINT  1492  -0.7361812304740789  3.37047972852181
+  POINT  1493  -0.2456035667837216  3.358689771784562
+  POINT  1494  -4.783548996192389  1.006323236939901
+  POINT  1495  -5.026302453506227  0.6418935979999102
+  POINT  1496  -5.253316898193344  1.128297748069279
+  POINT  1497  -4.278279517467413  0.9371948906828067
+  POINT  1498  -4.50677415895651  1.41789821597725
+  POINT  1499  -3.813305411122727  0.8400241846748683
+  POINT  1500  -4.09123434595309  0.4229266387245523
+  POINT  1501  1.893402820285961  39.42424735089645
+  POINT  1502  2.359743472195849  39.37214574197463
+  POINT  1503  2.220670538841968  39.87633322383852
+  POINT  1504  0.2472626687298011  38.56206339825238
+  POINT  1505  -2.582084783431249e-06  38.07921158173984
+  POINT  1506  -0.2472699945184756  38.56206338449157
+  POINT  1507  10.65318160875874  36.4425834633066
+  POINT  1508  11.08355917972408  36.15577544318076
+  POINT  1509  11.09104919162302  36.64297534268243
+  POINT  1510  4.506759567646867  38.5821056575099
+  POINT  1511  4.758481491847984  38.11030490561433
+  POINT  1512  4.25321394734401  38.179431286876
+  POINT  1513  4.783532264984283  38.9936816630649
+  POINT  1514  5.253302192910013  38.87170701194984
+  POINT  1515  5.026287577931008  39.35811027344018
+  POINT  1516  4.278264720480308  39.06280804432657
+  POINT  1517  2.271388089598089  31.06354615904246
+  POINT  1518  1.765500457793982  31.06477028013021
+  POINT  1519  2.019775060864925  30.61385016680937
+  POINT  1520  2.52391207978878  31.51196247936205
+  POINT  1521  2.778186682859723  31.06104236604121
+  POINT  1522  19.58406521140076  19.55566934611801
+  POINT  1523  19.59394271675515  20.00002569416793
+  POINT  1524  19.99506063684425  19.5555338953416
+  POINT  1525  19.58406161774156  20.44446277646284
+  POINT  1526  19.99505884072375  20.44454692352635
+  POINT  1527  17.47612722659238  20.45170520807109
+  POINT  1528  17.94956809694392  20.45199983601073
+  POINT  1529  17.76408318096152  19.99954840147309
+  POINT  1530  17.09376279229357  20.90344554562439
+  POINT  1531  16.90827787631117  20.45099411108675
+  POINT  1532  17.65639440029453  29.39423957186695
+  POINT  1533  17.13332166556852  29.38219151942949
+  POINT  1534  17.36874302811696  28.9397190446526
+  POINT  1535  13.61482989783698  32.16078664038712
+  POINT  1536  14.07640103797599  32.09309983360238
+  POINT  1537  13.75932779044087  31.59910844945928
+  POINT  1538  16.10341413477412  30.21256867861998
+  POINT  1539  16.63239269868544  30.24523358242805
+  POINT  1540  16.3698240483532  30.66455297149614
+  POINT  1541  16.89070536402862  29.81350550472902
+  POINT  1542  16.60859908664627  29.36193530425236
+  POINT  1543  17.1625462541375  30.26873928275396
+  POINT  1544  16.0904668374591  31.08225823633646
+  POINT  1545  16.6246937806281  31.11843321269683
+  POINT  1546  15.81288509623059  31.48985754125695
+  POINT  1547  16.04545280411266  31.9391559472781
+  POINT  1548  15.51319388940625  31.89262312523499
+  POINT  1549  15.56326374321337  31.03948737260855
+  POINT  1550  13.77222000363087  24.39434126697991
+  POINT  1551  13.50730940690564  24.83959165127776
+  POINT  1552  14.02976238006146  24.83530625723629
+  POINT  1553  12.98553330932471  9.758991772893435
+  POINT  1554  12.72223335676221  10.22272188328008
+  POINT  1555  16.25410351335674  12.9148587217591
+  POINT  1556  16.01906260946011  13.38331048867258
+  POINT  1557  16.5117595380726  13.37602992964366
+  POINT  1558  16.89069502922413  10.18647787299363
+  POINT  1559  16.60858850912514  10.63804911311348
+  POINT  1560  17.13330989107297  10.61778909765387
+  POINT  1561  16.09214844821832  10.65648742134303
+  POINT  1562  16.33476331006715  11.08779864600327
+  POINT  1563  -17.80117652624369  28.04993852124202
+  POINT  1564  -17.49657169072127  27.60644176445565
+  POINT  1565  -19.58406168080147  20.44446288474986
+  POINT  1566  -19.59394278438359  20.00002569746599
+  POINT  1567  -19.99505883837563  20.44454702859078
+  POINT  1568  -18.996847002171  20.45276507073249
+  POINT  1569  -19.3930231142053  20.89717656055036
+  POINT  1570  -19.58406527491918  19.55566925469715
+  POINT  1571  -19.99506063472496  19.55553380055498
+  POINT  1572  -18.99703876946375  19.54715259717118
+  POINT  1573  -19.39321847561576  19.10277045693634
+  POINT  1574  -1.233845495929245  37.56044691729677
+  POINT  1575  -0.9905346840835332  38.05041056493322
+  POINT  1576  -0.7378460571787722  37.58924792034259
+  POINT  1577  -1.759814782842069  38.47357048079215
+  POINT  1578  -1.982162118017038  37.97609568175015
+  POINT  1579  -2.255442778025101  38.42805660065491
+  POINT  1580  -1.503048773376636  33.33593215100788
+  POINT  1581  -1.756818384601298  32.87589913286249
+  POINT  1582  -1.254058713762703  32.88356835326066
+  POINT  1583  13.51221711522611  31.16406500489199
+  POINT  1584  13.97378825536513  31.09637819810725
+  POINT  1585  1.775181014606737  21.33393361663671
+  POINT  1586  1.267840964225153  21.33711381427801
+  POINT  1587  1.523722041841396  20.89935045595586
+  POINT  1588  1.265170094048079  22.20914709544139
+  POINT  1589  1.77056085321017  22.20855342148825
+  POINT  1590  1.516431010267755  22.64600354197079
+  POINT  1591  1.012728381227997  21.77259296305717
+  POINT  1592  0.7612694084626562  21.33800980237632
+  POINT  1593  0.758598538285582  22.21004308353971
+  POINT  1594  1.847863631555612  20.4480851260611
+  POINT  1595  1.340523581174028  20.45126532370239
+  POINT  1596  2.134926569216352  19.99999998535455
+  POINT  1597  2.280691513968954  21.33225925723105
+  POINT  1598  2.785590920387998  21.32882420154674
+  POINT  1599  2.02481043635271  21.7700226155532
+  POINT  1600  2.78116495724771  22.20597296072012
+  POINT  1601  2.276071352572386  22.20687906208259
+  POINT  1602  2.52691537410517  22.64450376665516
+  POINT  1603  -9.899143737765993  12.4849004435783
+  POINT  1604  -9.387390829537839  12.48845944608934
+  POINT  1605  -9.645780226280916  12.0410160502686
+  POINT  1606  -11.94630637827111  14.2647893097616
+  POINT  1607  -12.46345218922917  14.26650973789091
+  POINT  1608  -12.20840695700918  14.7105827019253
+  POINT  1609  -13.22907293656634  11.13290745457848
+  POINT  1610  -13.48445463159971  11.58282180341283
+  POINT  1611  -12.9714364037251  11.58072072087271
+  POINT  1612  -12.45912889682464  11.58045014485459
+  POINT  1613  -11.9508016855418  11.57834567717223
+  POINT  1614  -12.20772749740889  11.128701904356
+  POINT  1615  -12.71451059185801  12.03036449368894
+  POINT  1616  -13.62553305310023  6.037019882652965
+  POINT  1617  -14.1390779208095  5.854807348663457
+  POINT  1618  -13.96434315411798  6.375683521723212
+  POINT  1619  -13.39847526011537  7.408160088352634
+  POINT  1620  -13.61481920361369  7.839222070915377
+  POINT  1621  -13.0814052589453  7.902150069513514
+  POINT  1622  -13.69337197744059  6.949534963734737
+  POINT  1623  -13.1599580327722  7.012462962332874
+  POINT  1624  -14.5037016745593  7.101298192194127
+  POINT  1625  -14.20286038146115  6.771380647742971
+  POINT  1626  -14.7783559058492  6.524088291719242
+  POINT  1627  -13.23627871209868  9.312480837244131
+  POINT  1628  -13.51221183367959  8.835940044420862
+  POINT  1629  -13.02181608086271  8.809752844899524
+  POINT  1630  -16.36981698070831  9.335436989756825
+  POINT  1631  -16.09046066583428  8.917733609398496
+  POINT  1632  -16.62468707069794  8.881556790786455
+  POINT  1633  -15.56325712327145  8.960504702078703
+  POINT  1634  -15.81287888901091  8.510134528156787
+  POINT  1635  -15.51318860052802  8.107370522015474
+  POINT  1636  -16.04544791423854  8.060837516432803
+  POINT  1637  -12.46766878840969  10.67227976168969
+  POINT  1638  -11.95934157712685  10.67017529400733
+  POINT  1639  -10.71091751983426  6.663122417067669
+  POINT  1640  -10.45710194371655  7.096666284170696
+  POINT  1641  -10.46487666458869  6.166894149966415
+  POINT  1642  -10.96746076370507  6.201968922858168
+  POINT  1643  -10.44773102895123  5.275394031275448
+  POINT  1644  -10.20212605088105  5.720747497892338
+  POINT  1645  -9.928437171372778  5.290400873410871
+  POINT  1646  -9.945582807010235  6.18190099210184
+  POINT  1647  -13.2986928764065  5.688395693536721
+  POINT  1648  -13.12801457340368  6.205213648598734
+  POINT  1649  -11.74872710378692  8.418130127367466
+  POINT  1650  -12.02256077486237  7.971839549607667
+  POINT  1651  -12.50944374702482  8.841147771275015
+  POINT  1652  -12.78537686860573  8.36460697845175
+  POINT  1653  -12.56903292510741  7.933544995889006
+  POINT  1654  -12.31858916520195  7.509382640669432
+  POINT  1655  13.43619694655841  5.185526953886848
+  POINT  1656  12.93462220614015  5.358195834077412
+  POINT  1657  13.29868673147849  5.68838933264013
+  POINT  1658  12.6048962546636  4.990129099323558
+  POINT  1659  12.47144390129601  5.488517379573725
+  POINT  1660  12.66773340441992  4.523290710179079
+  POINT  1661  12.20022404450319  4.658903670708396
+  POINT  1662  10.71091693015139  6.663120759878266
+  POINT  1663  10.46487540167239  6.166892274467385
+  POINT  1664  10.96745927067751  6.201966434828546
+  POINT  1665  11.47479568277288  8.879068504656995
+  POINT  1666  11.74872710084068  8.418128977876485
+  POINT  1667  10.41171824790274  4.44204662093386
+  POINT  1668  9.95651127773848  4.316934168875102
+  POINT  1669  10.19419137109885  3.91393666291501
+  POINT  1670  10.72126631852727  4.813787013527604
+  POINT  1671  10.99495611235534  5.244133924789459
+  POINT  1672  10.44772794837044  5.275391038155809
+  POINT  1673  10.95894641188764  4.410789507567511
+  POINT  1674  11.39310410040094  4.215962651334707
+  POINT  1675  11.08355602977641  3.844222258740964
+  POINT  1676  11.76361231084955  4.489943298379086
+  POINT  1677  11.89137865119184  3.919107181901866
+  POINT  1678  11.70510621616581  4.951490272490563
+  POINT  1679  10.26855741345323  2.837344939506088
+  POINT  1680  10.19797132927438  3.43230183825083
+  POINT  1681  9.806904421137391  3.198323297051241
+  POINT  1682  10.65317829943864  3.557414290309588
+  POINT  1683  11.09104496327604  3.357021849792107
+  POINT  1684  15.24378585350844  7.682394375166194
+  POINT  1685  14.91119126151212  7.280158226193516
+  POINT  1686  15.41335252508149  7.2552534786716
+  POINT  1687  14.33938124011792  7.524093148708583
+  POINT  1688  14.48388392770153  8.085767740880334
+  POINT  1689  14.07639118126524  7.906902288220206
+  POINT  1690  13.61481867571485  7.839218526827278
+  POINT  1691  13.75932136329846  8.400893118999029
+  POINT  1692  13.02181590626726  8.80975073334144
+  POINT  1693  12.78537663953285  8.364604900612228
+  POINT  1694  13.47592883520427  9.785178774102992
+  POINT  1695  13.99000741695932  9.792862338836377
+  POINT  1696  13.73926224561804  10.23937500144348
+  POINT  1697  13.236278480666  9.312479110286336
+  POINT  1698  13.51221143214682  8.835937734550996
+  POINT  1699  13.97378393769721  8.903621495943923
+  POINT  1700  11.4612780216533  9.774811388208361
+  POINT  1701  11.70834875389301  10.2227478045437
+  POINT  1702  1.893403551233607  0.5757525887353929
+  POINT  1703  2.220671493500129  0.1236668831597823
+  POINT  1704  2.359744414402249  0.6278542389056427
+  POINT  1705  -9.020619693030262  2.610992623251209
+  POINT  1706  -9.424238324783893  2.359599448271815
+  POINT  1707  -9.474338358545761  2.853388073889197
+  POINT  1708  -9.406414519116504  3.443886808846754
+  POINT  1709  -9.192243991855898  3.8667371366121
+  POINT  1710  -8.859666959835261  3.521795695676809
+  POINT  1711  -9.806915390566399  3.198329514824488
+  POINT  1712  -10.19798187725191  3.432308248445783
+  POINT  1713  -10.26857176218753  2.83735353592188
+  POINT  1714  -0.2472699682428073  1.437936441491353
+  POINT  1715  -2.582068645534674e-06  1.920788194433522
+  POINT  1716  0.2472626424805853  1.437936427731552
+  POINT  1717  -0.247268257212236  2.398961916430443
+  POINT  1718  0.2472643535111566  2.398961902670643
+  POINT  1719  -0.7378459209025934  2.410751873167692
+  POINT  1720  -3.510975514120101  1.270946662206892
+  POINT  1721  -3.322776245011294  0.762200977161605
+  POINT  1722  -2.853429843183762  0.6871825417534015
+  POINT  1723  -3.156651266211425  0.2506822223484442
+  POINT  1724  -2.526771255348011  1.133795929446323
+  POINT  1725  -2.359754750523105  0.6278550165060958
+  POINT  1726  -2.749118087874698  1.631270599590879
+  POINT  1727  -2.255442995214041  1.571943074343573
+  POINT  1728  1.53116419331424  38.96511859947919
+  POINT  1729  1.391479955471506  39.46383466102701
+  POINT  1730  0.7618857048316392  38.5419587525552
+  POINT  1731  0.5146182923979471  39.02481055530693
+  POINT  1732  1.257885274755287  38.51315760964314
+  POINT  1733  1.759808139569742  38.47357029951259
+  POINT  1734  0.9905296510871409  38.0504104525886
+  POINT  1735  -0.4905790953354032  37.11107424397444
+  POINT  1736  -0.2472682834896911  37.60103789161089
+  POINT  1737  0.2472643797585856  37.6010379053717
+  POINT  1738  1.263131334613411  23.08451873542055
+  POINT  1739  1.768522093775502  23.0839250614674
+  POINT  1740  10.17836399587573  30.64876633574936
+  POINT  1741  10.43178957770394  30.2036916661421
+  POINT  1742  9.917079336223154  30.19681981804171
+  POINT  1743  2.526761585236505  38.86620413395363
+  POINT  1744  2.853417999303659  39.31281858657962
+  POINT  1745  4.533434559259351  36.88852576319535
+  POINT  1746  4.788963418436968  37.30790607443685
+  POINT  1747  4.24940701236751  37.28825022373893
+  POINT  1748  -0.7511020128127708  32.88704851349204
+  POINT  1749  -1.004871624037433  32.42701549534664
+  POINT  1750  0.7570181843694639  30.16737890662038
+  POINT  1751  0.2521487164707948  30.16753615186619
+  POINT  1752  0.5048695270937089  29.71821296405268
+  POINT  1753  1.009092401403684  30.61588819116551
+  POINT  1754  1.261813212026598  30.16656500335199
+  POINT  1755  5.068073916803044  30.6133100080666
+  POINT  1756  4.814374367436898  31.05972795409684
+  POINT  1757  5.32423717645129  31.06128530414202
+  POINT  1758  16.9971372534731  13.37045922378724
+  POINT  1759  16.76209634957647  13.83891099070072
+  POINT  1760  18.58096903763212  13.77579904583797
+  POINT  1761  18.85904395297749  13.34143701271937
+  POINT  1762  18.41152250629444  13.29587573790125
+  POINT  1763  18.68665357284071  14.64903426839365
+  POINT  1764  18.29676492885642  15.05256270617449
+  POINT  1765  18.88575798278899  15.06972612425592
+  POINT  1766  17.78489646840998  15.09030766023127
+  POINT  1767  17.98400087835825  15.51099951609354
+  POINT  1768  18.5600217445983  14.22769376801203
+  POINT  1769  18.11860781194196  14.17997612813817
+  POINT  1770  19.15364966814478  14.24346421008305
+  POINT  1771  17.67256729194256  14.23260556757826
+  POINT  1772  17.69351458497638  13.7807108454042
+  POINT  1773  18.99703873975269  19.54715250100616
+  POINT  1774  19.39321851764313  19.1027704587883
+  POINT  1775  18.52185804865407  19.54704832154459
+  POINT  1776  18.71270474241169  19.9999472088743
+  POINT  1777  17.69535052595289  15.99996226585984
+  POINT  1778  18.20721898639934  15.96221731180307
+  POINT  1779  14.56172135096343  23.94597916401752
+  POINT  1780  15.08739392619418  23.94259090424376
+  POINT  1781  14.82034555201745  24.38666761316468
+  POINT  1782  19.39302316315837  20.89717655197163
+  POINT  1783  18.9389913228763  21.35310913845178
+  POINT  1784  18.99684697892711  20.45276516384465
+  POINT  1785  18.5216662878285  20.45266098438309
+  POINT  1786  18.23371033345935  20.90481779098108
+  POINT  1787  18.44846900788159  21.34055417663924
+  POINT  1788  18.58165180641398  21.78818437573758
+  POINT  1789  17.87637081699702  21.33989302826688
+  POINT  1790  14.33939351436823  32.47590433579525
+  POINT  1791  14.48389140697212  31.91422614486741
+  POINT  1792  15.01628294267461  31.87205866229466
+  POINT  1793  14.75329046628237  31.48925416010179
+  POINT  1794  15.24379483009601  32.31759511000062
+  POINT  1795  13.51391520548446  23.95486250753157
+  POINT  1796  13.2557163229842  23.51457606093689
+  POINT  1797  12.99156814797479  23.95834021442671
+  POINT  1798  14.03636817864028  23.9505771134901
+  POINT  1799  14.30341655281701  23.50650040456918
+  POINT  1800  14.0490662851837  23.06997473842002
+  POINT  1801  14.57441945750685  23.06537678894744
+  POINT  1802  14.06279368008757  21.3236640608961
+  POINT  1803  13.53137856169023  21.32075100476631
+  POINT  1804  13.79945769458797  20.88653785779963
+  POINT  1805  16.48589251600749  21.75662015498322
+  POINT  1806  16.7770188066016  21.32987302051025
+  POINT  1807  16.23478715141826  21.32948158311302
+  POINT  1808  17.3448681568828  21.33058411749459
+  POINT  1809  17.55962683130505  21.76632050315274
+  POINT  1810  16.93904168525997  24.42265130776862
+  POINT  1811  17.21421228526815  24.86330083072308
+  POINT  1812  16.6810332475078  24.83472173963332
+  POINT  1813  17.1982158646259  23.98500607585395
+  POINT  1814  16.66503682686555  23.95642698476418
+  POINT  1815  19.16297996782281  24.02058583340057
+  POINT  1816  19.25792778397388  23.55188868076646
+  POINT  1817  19.6018346474257  23.97090400112769
+  POINT  1818  18.66035549167398  24.06458002427793
+  POINT  1819  18.99865807228879  24.48246002560036
+  POINT  1820  14.55271823159151  24.83011771959528
+  POINT  1821  15.07839080682226  24.82672945982152
+  POINT  1822  14.28780763486628  25.27536810389313
+  POINT  1823  13.48363738345204  10.68334955994101
+  POINT  1824  13.99771596520709  10.69103312467439
+  POINT  1825  17.49654751855807  12.39351922586987
+  POINT  1826  17.22317514403901  12.87270591921469
+  POINT  1827  17.0201728164883  12.42839146938536
+  POINT  1828  17.91955247554229  13.28295754083165
+  POINT  1829  18.19151987686094  12.8507518727688
+  POINT  1830  17.47351195554288  13.33558698027175
+  POINT  1831  18.00416107324389  12.39434056037404
+  POINT  1832  18.50176146164216  12.40494748537886
+  POINT  1833  17.80115874569317  11.95002611054472
+  POINT  1834  16.79404890136688  11.97251973589774
+  POINT  1835  16.52067652684781  12.45170642924257
+  POINT  1836  16.02797959823532  12.45898698827148
+  POINT  1837  15.78700936626793  12.00541048997754
+  POINT  1838  15.52043635277687  12.46856278249407
+  POINT  1839  16.05643793044336  11.55103582499389
+  POINT  1840  15.5488946849849  11.56061161921647
+  POINT  1841  16.57287799135018  11.53259751676433
+  POINT  1842  17.07237428099067  11.50928255690713
+  POINT  1843  15.83583901726724  10.22173398984722
+  POINT  1844  15.57327102716685  9.802415814168842
+  POINT  1845  16.10340565717593  9.787419712774863
+  POINT  1846  15.56201381820924  10.67148352273701
+  POINT  1847  16.63238319420686  9.754752209684828
+  POINT  1848  17.16253549533622  9.731242758971581
+  POINT  1849  16.36981520410647  9.335434034006447
+  POINT  1850  16.62468438429443  8.881552759389605
+  POINT  1851  16.09045850341202  8.917730295952133
+  POINT  1852  -18.71270480363148  19.99994720870178
+  POINT  1853  -18.52166623703531  20.45266088450229
+  POINT  1854  -18.52185800432806  19.54704841094098
+  POINT  1855  -19.52620606861738  21.34480663718991
+  POINT  1856  -19.49788131345209  21.77367208204773
+  POINT  1857  -19.95652172785348  21.31804421550326
+  POINT  1858  -18.93899138998692  21.35310882317254
+  POINT  1859  -15.41336472355292  32.74473177212385
+  POINT  1860  -14.91120300548017  32.71982820066302
+  POINT  1861  -15.24379759687971  32.31759127892943
+  POINT  1862  -15.51319663933861  31.8926193258387
+  POINT  1863  -15.01628432575631  31.8720563054135
+  POINT  1864  -15.8128873248544  31.48985418888792
+  POINT  1865  -16.04545639284706  31.93915110915433
+  POINT  1866  -13.73926553271729  29.7606245440472
+  POINT  1867  -13.9977196654956  29.30896632719983
+  POINT  1868  -13.48364033262393  29.31665160461403
+  POINT  1869  -16.63239437432929  30.24523068926878
+  POINT  1870  -16.89070674738754  29.81350290745965
+  POINT  1871  -17.16254826435143  30.26873590905672
+  POINT  1872  -17.58991750209542  28.49978947605134
+  POINT  1873  -18.10312108953776  28.50158849460802
+  POINT  1874  -14.02976207391727  24.83530603116176
+  POINT  1875  -13.50730912711314  24.83959146419358
+  POINT  1876  -13.7722197102861  24.39434106981482
+  POINT  1877  -9.910917163711101  29.30166999886159
+  POINT  1878  -10.16379441977193  28.85693149401143
+  POINT  1879  -10.42338196742408  29.30700642143803
+  POINT  1880  -8.865707288319939  20.4402358718522
+  POINT  1881  -8.354951980244287  20.44018950619541
+  POINT  1882  -8.61056647960487  20.88042659780381
+  POINT  1883  -8.86570719768363  19.55976134425465
+  POINT  1884  -8.354952278862285  19.55980826280008
+  POINT  1885  -8.610566687586559  19.11957082681093
+  POINT  1886  -9.121386103645744  19.99999862799004
+  POINT  1887  -9.377000603006326  20.44023571959844
+  POINT  1888  -9.377000512370016  19.55976119200088
+  POINT  1889  -8.865603022394847  21.32049699917977
+  POINT  1890  -8.354847714319193  21.32045063352298
+  POINT  1891  -8.099972462421654  21.76042830181979
+  POINT  1892  -7.844935919631678  21.32035790044383
+  POINT  1893  -8.354715320124482  22.20063713853177
+  POINT  1894  -7.844803525436967  22.20054440545263
+  POINT  1895  -8.865674199362843  22.20088990639256
+  POINT  1896  -8.610505262378155  22.6410060100254
+  POINT  1897  -8.354985291815844  16.91842867771209
+  POINT  1898  -8.610508524984098  17.358992612215
+  POINT  1899  -8.865944756334432  16.91817546724494
+  POINT  1900  -5.563175305433118  20.88175519528509
+  POINT  1901  -5.819523783751198  20.44055366808308
+  POINT  1902  -5.314081970855431  20.4412012668848
+  POINT  1903  -6.323600721688926  20.44055355863392
+  POINT  1904  -6.07450738711124  19.99999963023362
+  POINT  1905  -7.845909792127558  19.5598084686856
+  POINT  1906  -7.337224145127458  19.55973210578316
+  POINT  1907  -7.591126121765114  19.11954138245392
+  POINT  1908  -7.085296070269434  19.99999935639965
+  POINT  1909  -6.83051239990699  19.55973227016798
+  POINT  1910  -8.101050302224628  19.99999898612932
+  POINT  1911  -7.84590949350956  20.44018971208093
+  POINT  1912  -4.813437732774505  20.44120133195445
+  POINT  1913  -5.069786211092584  19.99999980475244
+  POINT  1914  -4.81343786679399  19.55879836960208
+  POINT  1915  -5.314082104874918  19.55879830453243
+  POINT  1916  -4.309046734147286  19.55755213850044
+  POINT  1917  -4.553342627929618  19.11635063828043
+  POINT  1918  -4.309046659354325  20.44244765252682
+  POINT  1919  -4.553342419117173  20.88364911465918
+  POINT  1920  -6.321208714327986  18.67923371725688
+  POINT  1921  -5.814542592123692  18.67893193845749
+  POINT  1922  -6.067133751274726  18.23927391170671
+  POINT  1923  -5.563175657876638  19.11824430669487
+  POINT  1924  -5.309100694823378  18.67828450114469
+  POINT  1925  -6.575529014970982  19.11917838177958
+  POINT  1926  -6.828120174122017  18.6795203550288
+  POINT  1927  -5.819524002175232  19.55944574184523
+  POINT  1928  -6.323600940112959  19.55944563239606
+  POINT  1929  -0.5146273697762991  39.02481064861751
+  POINT  1930  -0.7618926205908836  38.54195883210498
+  POINT  1931  -1.257892059341357  38.51315782905916
+  POINT  1932  -1.53117271934942  38.96511874796391
+  POINT  1933  -0.940335173160049  39.49328748376172
+  POINT  1934  -1.391488828330695  39.46383435979364
+  POINT  1935  -1.302906939267033  39.95751571405174
+  POINT  1936  -1.893411551831407  39.42424701152662
+  POINT  1937  -1.723324288351572  36.58041784013928
+  POINT  1938  -1.475258125341042  37.06753940845914
+  POINT  1939  -1.229223032035015  36.61216270438628
+  POINT  1940  -2.223574747428835  37.48318817291252
+  POINT  1941  -2.46865780151201  36.99209310268357
+  POINT  1942  -2.722873167283246  37.43948673138395
+  POINT  1943  -1.727946752245803  37.52870205304977
+  POINT  1944  9.124384730034761  25.2901944687983
+  POINT  1945  9.380903693723068  25.73399854252466
+  POINT  1946  8.869536394962354  25.73292170940668
+  POINT  1947  8.867787034579436  24.84742875339725
+  POINT  1948  8.611808211452907  24.40495794646223
+  POINT  1949  8.357038608147516  24.84664682874531
+  POINT  1950  9.37915433334015  24.84850558651523
+  POINT  1951  9.635034859880143  24.40616641167393
+  POINT  1952  9.891632555335468  24.84893212707499
+  POINT  1953  8.10306863199613  25.28792614032669
+  POINT  1954  7.847089808869599  24.84545533339167
+  POINT  1955  7.337860839610064  24.84465823087261
+  POINT  1956  7.591830815761451  24.40337891929124
+  POINT  1957  7.084483663987436  25.28568916804524
+  POINT  1958  6.829224670879288  24.84361275394481
+  POINT  1959  11.17838537690847  23.52246049961141
+  POINT  1960  11.4371216212408  23.08138069299567
+  POINT  1961  10.9206635519637  23.08206164870911
+  POINT  1962  15.02252590981234  31.03532490076284
+  POINT  1963  14.49013437410986  31.07749238333559
+  POINT  1964  14.2430236988951  30.6424489387683
+  POINT  1965  15.30010765104086  30.62772559584235
+  POINT  1966  2.526915485973436  17.35549624102799
+  POINT  1967  2.276071431689728  17.79312093621829
+  POINT  1968  2.781165078003321  17.79402703104667
+  POINT  1969  6.346618006894577  8.933221976655281
+  POINT  1970  6.606300654387716  8.482722162553308
+  POINT  1971  6.859007165943082  8.928198624363933
+  POINT  1972  5.835923918840571  8.936439330716784
+  POINT  1973  6.088630430395938  9.381915792527408
+  POINT  1974  3.813293467525553  0.8400220701018267
+  POINT  1975  4.278266624098441  0.9371921865469454
+  POINT  1976  4.091218596162663  0.4229233416757498
+  POINT  1977  0.7378420180172898  2.410751924726134
+  POINT  1978  1.233841522613396  2.439553016285871
+  POINT  1979  0.9905295332508535  1.949589272233458
+  POINT  1980  0.4905763428736994  2.888925646723056
+  POINT  1981  8.615527392862056  13.82496521644805
+  POINT  1982  8.869539085606789  14.26707992304672
+  POINT  1983  8.359008517018593  14.26876890588306
+  POINT  1984  7.109843205144307  9.375226262222675
+  POINT  1985  7.369525852637445  8.924726448120705
+  POINT  1986  3.536686478737197  13.8361386042247
+  POINT  1987  3.790057778698816  13.39355052709382
+  POINT  1988  3.284192797098449  13.39405264356153
+  POINT  1989  3.789177750276934  14.27725402423099
+  POINT  1990  3.283312768676568  14.27775614069871
+  POINT  1991  3.540719142764858  10.28304212363626
+  POINT  1992  3.793978675026311  10.72885668139838
+  POINT  1993  3.286497665917229  10.72924169735144
+  POINT  1994  6.845584714338232  10.71830373756566
+  POINT  1995  7.355184401511213  10.7157436111351
+  POINT  1996  7.09778359222352  11.16341894215851
+  POINT  1997  7.361673707732298  9.821191246260845
+  POINT  1998  6.851155021037934  9.824663422504075
+  POINT  1999  4.296500541441507  13.39272956312007
+  POINT  2000  4.044006859802759  12.95064360245691
+  POINT  2001  4.802971515540548  13.39198494333306
+  POINT  2002  4.549022434436605  13.83489186796998
+  POINT  2003  4.297887859095104  12.50674192674635
+  POINT  2004  3.791445096352413  12.5075628907201
+  POINT  2005  4.805074931872197  12.50557276622567
+  POINT  2006  4.552513168421852  12.06249205448886
+  POINT  2007  4.301274159001078  10.72795370371833
+  POINT  2008  4.809681854713771  10.7267995158349
+  POINT  2009  4.556607847586633  10.28150291979977
+  POINT  2010  4.047052682153449  11.17415327743351
+  POINT  2011  4.299837130886486  11.6184557573815
+  POINT  2012  3.79254164691172  11.61935873506155
+  POINT  2013  4.80702420366358  11.61728659686082
+  POINT  2014  0.7573648401832791  10.72884628711409
+  POINT  2015  0.2524954018262905  10.72868903454322
+  POINT  2016  0.5048694975539831  10.28178714397273
+  POINT  2017  2.779998485031843  10.72963471324423
+  POINT  2018  3.033258017293297  11.17544927100636
+  POINT  2019  1.22366534318951  19.99999999772072
+  POINT  2020  0.8995237534752946  20.45126532761548
+  POINT  2021  1.847863650156727  19.55191485745089
+  POINT  2022  2.318125048484836  19.5519148489978
+  POINT  2023  -18.93911412821423  18.64650966130721
+  POINT  2024  -18.58166026436047  18.21127422426079
+  POINT  2025  -18.44873810630657  18.65901836236396
+  POINT  2026  -19.52614063366966  18.65502631883318
+  POINT  2027  -18.87780139947743  17.75460066637132
+  POINT  2028  -18.38742537756978  17.76710936742808
+  POINT  2029  -19.25342558557374  17.32881436986417
+  POINT  2030  -19.44766047236443  17.77297922669689
+  POINT  2031  -11.69163369768068  12.03021037174421
+  POINT  2032  -11.44023229826493  11.57846213124561
+  POINT  2033  -11.43422134923478  12.47855566601287
+  POINT  2034  -11.94479073651165  12.47843921193948
+  POINT  2035  -10.92866196056182  11.58403125210506
+  POINT  2036  -10.41689637261445  11.58759636307505
+  POINT  2037  -10.66929872245644  12.03389193678758
+  POINT  2038  -11.18782994842294  11.13216655753308
+  POINT  2039  -9.904431558833004  11.59293222934731
+  POINT  2040  -9.39267865060485  11.59649123185834
+  POINT  2041  -9.139626886740061  11.15213642340234
+  POINT  2042  -8.880975554187973  11.60022024432364
+  POINT  2043  -10.16379479693838  11.14307154466478
+  POINT  2044  -9.910917079266454  10.69833254287327
+  POINT  2045  -10.4233818930479  10.69299667660101
+  POINT  2046  -8.370126273665381  11.60298203772225
+  POINT  2047  -8.62317803753017  12.04733684617825
+  POINT  2048  -6.319914164590672  17.79970756621019
+  POINT  2049  -5.813248042386378  17.79940578741079
+  POINT  2050  -5.812970532530068  16.03929555219032
+  POINT  2051  -6.066345556101558  16.47969823346978
+  POINT  2052  -6.320151886932637  16.03908136247431
+  POINT  2053  -5.812596328700657  16.91987593255003
+  POINT  2054  -6.319777683103225  16.91966174283402
+  POINT  2055  -5.306138086716437  16.03968131654242
+  POINT  2056  -5.559944417547516  15.59906444554695
+  POINT  2057  -4.799950565874155  16.03961222338507
+  POINT  2058  -5.052976680856709  16.47984333002844
+  POINT  2059  -6.574690167020133  15.59804862668566
+  POINT  2060  -6.828065190591623  16.03845130796511
+  POINT  2061  -15.25853880596588  12.9242213232549
+  POINT  2062  -15.52043648370752  12.46856362456286
+  POINT  2063  -15.01756861930122  12.47064487481246
+  POINT  2064  -14.50591702520376  13.37825294329215
+  POINT  2065  -13.99649188437294  13.37881945166879
+  POINT  2066  -14.24624580072877  12.92686908188113
+  POINT  2067  -14.50520649728844  12.47612567984228
+  POINT  2068  -14.76710417503007  12.02046798115024
+  POINT  2069  -13.99841660872912  11.58047866164933
+  POINT  2070  -13.74078007588788  12.02829192794356
+  POINT  2071  -13.99578135645762  12.47669218821891
+  POINT  2072  -13.48181937932821  12.47903532998241
+  POINT  2073  -17.13331118398057  10.61779162646253
+  POINT  2074  -17.656383083496  10.60573919584698
+  POINT  2075  -17.36873112769916  11.06026014994149
+  POINT  2076  -16.02797983714253  12.45898801730209
+  POINT  2077  -16.52067686245398  12.45170765846319
+  POINT  2078  -16.25410369568363  12.9148597141664
+  POINT  2079  -15.78700965047787  12.00541156885965
+  POINT  2080  -17.58990196620047  11.50018232123824
+  POINT  2081  -17.80115956030314  11.95002810346316
+  POINT  2082  -18.10310561939233  11.49837858894322
+  POINT  2083  -17.07237505905118  11.50928449184498
+  POINT  2084  -17.49654816974892  12.39352110356614
+  POINT  2085  -16.79404945073268  11.9725213123703
+  POINT  2086  -16.57287861223137  11.53259914107355
+  POINT  2087  -17.02017330927379  12.42839300923462
+  POINT  2088  -17.22317558147022  12.87270744965903
+  POINT  2089  -10.15245041339834  12.93005084479948
+  POINT  2090  -10.41083981014142  12.48260744897875
+  POINT  2091  -10.92260539808879  12.47904233800876
+  POINT  2092  -11.17576243691975  12.92727117820404
+  POINT  2093  -12.45674776247602  13.37407164467716
+  POINT  2094  -12.19976115126335  12.92710572491763
+  POINT  2095  -11.94436499927842  13.37375042596768
+  POINT  2096  -12.45717349970925  12.47876043064897
+  POINT  2097  -12.96948100660971  12.47903100666709
+  POINT  2098  -13.22448228717945  12.92743126694244
+  POINT  2099  -12.7156240960693  13.82239971451288
+  POINT  2100  -12.97772467480737  14.26819310667658
+  POINT  2101  -13.74302984524772  13.82714319818918
+  POINT  2102  -13.48335862077273  13.37575933677816
+  POINT  2103  -12.97102024805423  13.37575501346284
+  POINT  2104  -12.66774364330618  4.523299107507239
+  POINT  2105  -12.60490407255786  4.990136093565923
+  POINT  2106  -12.20023269789926  4.658910900843035
+  POINT  2107  -12.93462919488069  5.358202577882016
+  POINT  2108  -12.47144927438711  5.488522975166397
+  POINT  2109  -13.43620550685972  5.185534732811357
+  POINT  2110  -14.33938229564766  7.524096539708034
+  POINT  2111  -14.9111947654232  7.280162642147666
+  POINT  2112  -15.24378862055976  7.682398206427763
+  POINT  2113  -15.41335736818264  7.255259352596772
+  POINT  2114  -15.01627536647982  8.127933305249282
+  POINT  2115  -15.30010260228938  9.372269247130333
+  POINT  2116  -15.02252082546601  8.964670165888624
+  POINT  2117  -14.24302038469975  9.357551373852861
+  POINT  2118  -14.50635377271081  9.811747310474253
+  POINT  2119  -13.99000785292662  9.792863973386861
+  POINT  2120  -16.10340678976494  9.787421896710498
+  POINT  2121  -16.63238487037844  9.754755103146911
+  POINT  2122  -16.89069641342317  10.18648047123871
+  POINT  2123  -17.16253750713551  9.731246135309691
+  POINT  2124  -16.60858944999246  10.6380511653244
+  POINT  2125  -11.70834855106328  10.22274842325977
+  POINT  2126  -11.44840726006248  10.67917056592608
+  POINT  2127  -10.94524324959301  9.788054215548343
+  POINT  2128  -10.68395920468744  10.24000068499402
+  POINT  2129  -10.93683692235937  10.68473968678553
+  POINT  2130  -11.47479555660216  8.87906931844303
+  POINT  2131  -11.20910685279271  9.331122511448264
+  POINT  2132  -11.46127783719861  9.774811991078451
+  POINT  2133  -11.97221215426297  9.765816719159695
+  POINT  2134  -12.23551219984005  9.302086962350581
+  POINT  2135  -12.48258291370472  9.750023394531905
+  POINT  2136  -11.99907298758307  8.856941095902805
+  POINT  2137  -13.48363744127368  10.68335058227913
+  POINT  2138  -12.97061921339908  10.68124949973901
+  POINT  2139  -12.72223329311703  10.22272288939034
+  POINT  2140  -13.73926247952205  10.23937626872396
+  POINT  2141  -13.99771620268931  10.69103422356342
+  POINT  2142  -13.47592909151099  9.785180332102566
+  POINT  2143  -12.98553333869411  9.758993132581228
+  POINT  2144  -10.99496024845769  5.244137851664762
+  POINT  2145  -10.72127136894942  4.813791227183295
+  POINT  2146  -11.76362091609507  4.48995017920419
+  POINT  2147  -11.70511237026007  4.951495769211457
+  POINT  2148  -11.39311338658647  4.215969615852156
+  POINT  2149  -11.89139041445578  3.919115893213245
+  POINT  2150  -12.24027988776031  5.8641325949175
+  POINT  2151  -11.91055476543747  5.496066110601405
+  POINT  2152  -11.20040264363509  5.788708193054712
+  POINT  2153  -11.44644349888066  6.284936460155964
+  POINT  2154  -11.47394298363328  5.327105388962559
+  POINT  2155  -12.58774158616357  7.077264164985817
+  POINT  2156  -12.04126943591853  7.115558718704478
+  POINT  2157  -11.99490361784541  6.277557986686686
+  POINT  2158  -12.55579812679505  6.270014851251677
+  POINT  2159  -12.88263830348879  6.618639040367921
+  POINT  2160  -11.7619617379154  6.690818716490142
+  POINT  2161  12.04126828125696  7.115556461827698
+  POINT  2162  11.49280873218955  7.122935250752073
+  POINT  2163  11.76196034822392  6.690816131315052
+  POINT  2164  11.49828322279317  7.993966546699665
+  POINT  2165  12.0225605432701  7.971838012441538
+  POINT  2166  12.88263546208822  6.61863544281538
+  POINT  2167  13.12801043982883  6.205208828783831
+  POINT  2168  12.55579487503194  6.270010728359129
+  POINT  2169  13.69336976028337  6.949530619644269
+  POINT  2170  13.96433801939816  6.375677941228949
+  POINT  2171  13.62552731853477  6.037014047096381
+  POINT  2172  14.13907079774611  5.854800214333848
+  POINT  2173  11.99490119766059  6.277554553029752
+  POINT  2174  11.44644164859318  6.284933341954128
+  POINT  2175  11.20040012011418  5.788704856543246
+  POINT  2176  11.91055022392465  5.49606120424435
+  POINT  2177  12.2402761754012  5.864127938998204
+  POINT  2178  11.47393849027101  5.327100831915041
+  POINT  2179  9.945582057420673  6.181899969396367
+  POINT  2180  10.20212439794679  5.720745644346648
+  POINT  2181  9.928434604118719  5.290398733084792
+  POINT  2182  8.556931258789588  2.528832819977453
+  POINT  2183  8.146974075985931  2.334700766962239
+  POINT  2184  8.559631278214885  1.92425070776564
+  POINT  2185  15.01627398335804  8.127930948668869
+  POINT  2186  15.51318585031227  8.107366722466351
+  POINT  2187  15.56325582361871  8.960502416532755
+  POINT  2188  15.81287665995519  8.510131175388402
+  POINT  2189  16.04544432483895  8.060832677422217
+  POINT  2190  14.75328392450536  8.510740088180491
+  POINT  2191  13.08140472470578  7.902147488418196
+  POINT  2192  13.39847454267256  7.408156657639373
+  POINT  2193  13.15995580927431  7.012459581235187
+  POINT  2194  12.58774024447741  7.077261480810485
+  POINT  2195  12.31858862844304  7.509380600247505
+  POINT  2196  12.56903250649056  7.933543031424325
+  POINT  2197  10.94524346823205  9.788053798414385
+  POINT  2198  11.20910703176076  9.331121907385405
+  POINT  2199  10.95876112935163  8.892310914863021
+  POINT  2200  10.43863740166071  8.90091810703888
+  POINT  2201  10.70432605267283  8.448864704310473
+  POINT  2202  10.17836257478566  9.351235759588613
+  POINT  2203  9.923927498106863  8.907789549036064
+  POINT  2204  10.43178843022046  9.796310885123368
+  POINT  2205  9.917078526666614  9.803182327120552
+  POINT  2206  10.683959420113  10.24000036594633
+  POINT  2207  0.4257056342687726  0.4866078143970918
+  POINT  2208  0.4258045314381747  0.00453325099778762
+  POINT  2209  -8.556941856736707  2.528837422625263
+  POINT  2210  -8.610159650802313  3.016790167285516
+  POINT  2211  -8.395989123541707  3.439640495050862
+  POINT  2212  -8.14698450737254  2.334704873539675
+  POINT  2213  -7.792710741676334  2.625579213893601
+  POINT  2214  -8.55964628277413  1.924257823018384
+  POINT  2215  -9.473525601179848  4.277847459291598
+  POINT  2216  -8.926778041898604  4.355756346121653
+  POINT  2217  -9.691050900332758  4.805957037797565
+  POINT  2218  -9.956516850290052  4.316937828288013
+  POINT  2219  -8.686199335312255  4.812171506430753
+  POINT  2220  -8.404917725988305  4.401061183751255
+  POINT  2221  -9.445445922262575  5.251310504414456
+  POINT  2222  -10.19419874351271  3.913941535915821
+  POINT  2223  -10.41172404266562  4.442051114421789
+  POINT  2224  -10.95895326217208  4.410794934811104
+  POINT  2225  -11.08356606030267  3.84422950309065
+  POINT  2226  -10.65318906962747  3.557421534579559
+  POINT  2227  -11.09105814178689  3.357030647526714
+  POINT  2228  -9.694219594930232  6.638197533051649
+  POINT  2229  -9.431468981222594  6.192050880977571
+  POINT  2230  -0.7570180027335149  9.832621255886785
+  POINT  2231  -0.5048693800457256  10.28178717573282
+  POINT  2232  -0.2521485634907947  9.832463971555836
+  POINT  2233  -6.855131749277465  1.732845876664869
+  POINT  2234  -6.972438504319116  2.219795679489987
+  POINT  2235  -6.414622035057123  1.574492892908077
+  POINT  2236  -6.765669841096464  1.179115021389632
+  POINT  2237  -1.004871482698477  7.572984637225677
+  POINT  2238  -1.257490486514399  8.028793797334046
+  POINT  2239  -0.7545338586426834  8.025313601582315
+  POINT  2240  -1.762470594293599  8.030999493773637
+  POINT  2241  -1.512132970237805  8.483328458130275
+  POINT  2242  -1.229222734249484  3.387837151439014
+  POINT  2243  -0.9842473157104142  3.857601341818763
+  POINT  2244  -2.760974422104667  6.228081510033119
+  POINT  2245  -2.253497692870489  6.221058881823054
+  POINT  2246  -2.513284803608339  6.678759929530004
+  POINT  2247  -2.22068215594449  0.1236680774559861
+  POINT  2248  -1.893412282768675  0.5757529280991733
+  POINT  2249  -0.7618927259509458  1.458040956527683
+  POINT  2250  -0.514627501401715  0.975189189825712
+  POINT  2251  -0.9403354900406863  0.5067124244511273
+  POINT  2252  -1.391489330979924  0.5361655784306855
+  POINT  2253  -1.302907496264832  0.04248432242006185
+  POINT  2254  -1.531173210898604  1.03488105453053
+  POINT  2255  -1.759815051157529  1.526429257888473
+  POINT  2256  -1.982161883684216  2.023903928033029
+  POINT  2257  -0.9905345662098708  1.949589159885626
+  POINT  2258  -1.233845294320426  2.439552824859994
+  POINT  2259  -1.257892099368779  1.486841908219986
+  POINT  2260  -4.253221810686109  1.820570946531706
+  POINT  2261  -4.758491289411085  1.8896992927888
+  POINT  2262  0.9403284851173297  39.49328748546868
+  POINT  2263  1.302900066834092  39.9575161643721
+  POINT  2264  0.4257054490154915  39.51339213116585
+  POINT  2265  0.4258043460689575  39.99546675296004
+  POINT  2266  0.7378421542620126  37.58924786878497
+  POINT  2267  1.23384172418566  37.56044672587291
+  POINT  2268  0.4905764528571049  37.11107417865601
+  POINT  2269  -0.2485634106147014  34.74540615296891
+  POINT  2270  -0.4944721332766874  35.20892213996861
+  POINT  2271  -0.7430353076084667  34.7387144383873
+  POINT  2272  0.248563135802923  34.74540613716317
+  POINT  2273  -3.852885629984648e-08  34.27519843558186
+  POINT  2274  -0.984247561800016  36.14239856410436
+  POINT  2275  -0.7361813987894855  36.62952013242423
+  POINT  2276  -0.2456036251004044  36.64131010369253
+  POINT  2277  -0.7400749794124697  35.68099320876465
+  POINT  2278  -1.233116612657999  35.66363578072671
+  POINT  2279  -0.2456030824187044  35.68768492334626
+  POINT  2280  -0.5050495520169673  27.93392892167996
+  POINT  2281  -0.2524953199740186  28.37907783165175
+  POINT  2282  -0.7575449060331049  28.37910298308664
+  POINT  2283  0.5049254003565739  26.16245156440273
+  POINT  2284  0.2524838536841221  26.60459196252057
+  POINT  2285  0.7574092359319105  26.60463622076165
+  POINT  2286  1.262484608430572  26.60474311400658
+  POINT  2287  1.010043061758121  27.04688351212442
+  POINT  2288  1.767930132642603  27.49060027590907
+  POINT  2289  2.02050092362578  27.04726519540428
+  POINT  2290  2.2733126220116  27.490875065944
+  POINT  2291  4.294356946623791  24.8410616389421
+  POINT  2292  4.547087505439189  24.40041073521517
+  POINT  2293  4.800380884839186  24.84120087084955
+  POINT  2294  4.293926155091318  23.96024866126563
+  POINT  2295  4.799950093306713  23.96038789317308
+  POINT  2296  3.788414878485399  23.96059221848699
+  POINT  2297  4.041277466352923  23.5205693764449
+  POINT  2298  1.514809999556898  24.40061413188652
+  POINT  2299  1.767492707689488  23.96146212230959
+  POINT  2300  1.262539709988568  23.9615922644941
+  POINT  2301  7.321627964579404  38.17042681938287
+  POINT  2302  7.793206680574138  37.97435229673911
+  POINT  2303  7.678404262385088  38.46732542318286
+  POINT  2304  6.972433698867157  37.78020975935011
+  POINT  2305  6.855127394446583  38.26716082157134
+  POINT  2306  6.414615189107867  38.42551451657923
+  POINT  2307  6.765662894204413  38.82088748771397
+  POINT  2308  5.835924386613025  31.06356123096226
+  POINT  2309  6.346618511134158  31.06677866630198
+  POINT  2310  6.088630850338571  30.61808479345149
+  POINT  2311  5.582224837246878  31.5099791769925
+  POINT  2312  10.95894851210964  35.58920884422533
+  POINT  2313  11.39310711972735  35.78403513220901
+  POINT  2314  10.72126794961869  35.18621162434592
+  POINT  2315  10.41172000961541  35.55795193531766
+  POINT  2316  10.44772930264001  34.72460793267786
+  POINT  2317  10.99495780513424  34.75586484158553
+  POINT  2318  9.020612145212025  37.38901099607349
+  POINT  2319  9.424228545153195  37.64040579751443
+  POINT  2320  9.474330615488972  37.14661597391932
+  POINT  2321  8.40491449200708  35.59893959494738
+  POINT  2322  8.926774996129321  35.64424422876988
+  POINT  2323  8.686196885775953  35.18782930360295
+  POINT  2324  8.152785656806662  36.06385741842882
+  POINT  2325  7.912207546453292  35.6074424932619
+  POINT  2326  9.956512910039363  35.68306455775935
+  POINT  2327  9.473521881426226  35.72215416875295
+  POINT  2328  9.691048418511331  35.19404432643185
+  POINT  2329  10.19419347253031  36.08606177763876
+  POINT  2330  9.192239487657353  36.13326446009738
+  POINT  2331  9.406409183385882  36.55611572705381
+  POINT  2332  8.859662298088979  36.47820578707073
+  POINT  2333  10.19797450918269  36.5676960857483
+  POINT  2334  9.806907805057346  36.80167464694597
+  POINT  2335  10.26856200452538  37.16265232046304
+  POINT  2336  6.871912061838399  35.54333618666676
+  POINT  2337  7.405021657601408  35.59824784517664
+  POINT  2338  7.126969115489866  36.01744865823345
+  POINT  2339  7.657150492801826  35.13333002169522
+  POINT  2340  6.621960666341595  35.0990227984202
+  POINT  2341  6.888811633623055  34.66573394307474
+  POINT  2342  6.360807696014708  34.64062136788498
+  POINT  2343  6.343908124230053  35.518223611477
+  POINT  2344  7.402796728654058  34.67408026698564
+  POINT  2345  7.141643758327172  34.21567883645042
+  POINT  2346  7.909982617505943  34.68327491507089
+  POINT  2347  3.322763046202144  39.2378007288512
+  POINT  2348  3.15663647718721  39.74932014657087
+  POINT  2349  3.813291001601433  39.15997825895766
+  POINT  2350  4.091217816567636  39.57707682242515
+  POINT  2351  3.510964067743604  38.72905450866509
+  POINT  2352  2.255436314939442  38.42805648019456
+  POINT  2353  1.982157396380489  37.97609549035852
+  POINT  2354  2.749110842047252  38.36872932479956
+  POINT  2355  6.081230166453511  35.97194010898045
+  POINT  2356  5.818441994459794  36.44062612474002
+  POINT  2357  6.331071347733141  36.43122301548313
+  POINT  2358  5.320795889254486  36.4447624160653
+  POINT  2359  5.570637070534115  36.904045322568
+  POINT  2360  5.831278770956706  35.52762672073389
+  POINT  2361  5.970382527196483  38.42268507006546
+  POINT  2362  6.061700466822952  37.87411431502481
+  POINT  2363  5.314747458531205  38.19213207237964
+  POINT  2364  5.061201838228348  37.78945770174573
+  POINT  2365  5.345229385120188  37.38973324120216
+  POINT  2366  5.842875490325496  37.38559694987687
+  POINT  2367  6.287108152236881  37.38842639639064
+  POINT  2368  5.556022539290377  38.55085980808124
+  POINT  2369  5.910327271106762  39.10675356293056
+  POINT  2370  4.527223806949365e-08  28.82425190516497
+  POINT  2371  0.2524954118648361  29.271311063285
+  POINT  2372  -0.2524953073975582  29.27131105117846
+  POINT  2373  0.7573648797635052  29.27115381803919
+  POINT  2374  0.2524953992883756  28.37907784375829
+  POINT  2375  2.273105925774813  30.16491138028067
+  POINT  2376  1.767218293970705  30.16613550136842
+  POINT  2377  1.515144076936485  29.71762621682329
+  POINT  2378  2.526574159573979  27.93457399209241
+  POINT  2379  2.779582705512834  28.37954785163075
+  POINT  2380  2.273750376967278  28.37918400598714
+  POINT  2381  3.286081896042008  28.37994089986349
+  POINT  2382  3.033258113435307  28.82455091375822
+  POINT  2383  3.538866301224259  27.9356384317024
+  POINT  2384  3.792541709146731  28.38064149382986
+  POINT  2385  2.779144950557156  27.49123891158762
+  POINT  2386  -0.2509574395584928  32.89023083452718
+  POINT  2387  -0.5001445292837633  33.34678369244119
+  POINT  2388  -0.248563270487983  33.81258223243197
+  POINT  2389  -0.7487078437422611  33.80939991139683
+  POINT  2390  0.2485632759296414  33.81258221662623
+  POINT  2391  0.7557252605028959  31.06778977059484
+  POINT  2392  0.5035766139793988  31.51991170020357
+  POINT  2393  0.2521487272230526  31.06882402404262
+  POINT  2394  1.512133316893194  31.51667185955954
+  POINT  2395  1.257490837521165  31.97120645676332
+  POINT  2396  1.762471007155117  31.96900086956706
+  POINT  2397  1.26052028816003  31.06697586732646
+  POINT  2398  4.299971210771425  32.85149278176542
+  POINT  2399  4.813858896773226  32.84793939933139
+  POINT  2400  4.555689088750212  33.29824097344651
+  POINT  2401  4.047040589691667  32.40376536153468
+  POINT  2402  3.788870781668652  32.85406693564981
+  POINT  2403  1.99779136886551  34.24333877774004
+  POINT  2404  1.739534188555335  34.71160974839909
+  POINT  2405  2.242930868975687  34.69789125435826
+  POINT  2406  1.750101670519205  33.79266021463997
+  POINT  2407  2.253498350939557  33.77894172059914
+  POINT  2408  4.811613439274451  30.16570216508861
+  POINT  2409  4.556608060237682  29.71849742642267
+  POINT  2410  4.303205728751885  30.16454791935548
+  POINT  2411  5.321476248288842  30.16725951513379
+  POINT  2412  5.830756015410285  30.16946429579235
+  POINT  2413  6.341450139931419  30.17268173113207
+  POINT  2414  5.574295537881691  29.72185645281436
+  POINT  2415  4.303354423758809  31.05895384807756
+  POINT  2416  4.559517683407055  31.50692914415298
+  POINT  2417  4.303319379261703  31.953673122892
+  POINT  2418  4.814339322939793  31.95444722891127
+  POINT  2419  3.792218950158929  31.95624727677639
+  POINT  2420  3.53960420638969  31.50780686224725
+  POINT  2421  3.283325416819654  31.95789910088994
+  POINT  2422  18.93911406219143  18.64650935978337
+  POINT  2423  19.5261405338395  18.65502620489522
+  POINT  2424  19.39362763295739  15.11254594470878
+  POINT  2425  18.99857188883907  15.51737654824043
+  POINT  2426  19.25787290188996  16.44788794426737
+  POINT  2427  18.75405232248962  16.85355794479968
+  POINT  2428  19.18738723924495  16.90476516850342
+  POINT  2429  18.37155330956431  16.4239303910665
+  POINT  2430  18.3010676469193  16.88080761530255
+  POINT  2431  18.66020366196966  15.9349676413002
+  POINT  2432  19.16290621200404  15.97908962750386
+  POINT  2433  19.60184782770187  16.0291610895696
+  POINT  2434  17.74265060326497  16.90620537096182
+  POINT  2435  18.12514961619028  17.335832924695
+  POINT  2436  15.35519968440101  23.50052060043794
+  POINT  2437  15.61382388545503  23.94120904958511
+  POINT  2438  16.14374614558074  23.94660548122907
+  POINT  2439  15.87594038737391  24.38867578503489
+  POINT  2440  16.40292032494667  23.50896024931439
+  POINT  2441  14.04156102276654  20.44473665232049
+  POINT  2442  13.5101459043692  20.44182359619071
+  POINT  2443  13.23791783332129  20.0000177682021
+  POINT  2444  12.99581450514272  20.44181897368124
+  POINT  2445  14.32798942893715  21.75754985993104
+  POINT  2446  14.59066675027901  22.19303681739878
+  POINT  2447  14.05739186853169  22.19336416533053
+  POINT  2448  14.59606856183489  21.32333671296435
+  POINT  2449  17.02043936108002  17.36861009534426
+  POINT  2450  16.75104595303201  17.80975860309653
+  POINT  2451  17.29733916448795  17.80237918810654
+  POINT  2452  16.8825211737115  20.00090158182218
+  POINT  2453  16.50015673941269  20.45264191937547
+  POINT  2454  16.08514518550571  20.00088643540819
+  POINT  2455  16.11090188810538  20.45097896467276
+  POINT  2456  15.67928540345191  21.32845415312463
+  POINT  2457  15.97041169404601  20.90170701865165
+  POINT  2458  15.55540014013904  20.44995153468437
+  POINT  2459  15.13808712838207  21.32895105033127
+  POINT  2460  15.40246258575432  21.75672561479265
+  POINT  2461  14.87289137953249  20.89506525129633
+  POINT  2462  16.20906446251038  17.81010162569915
+  POINT  2463  16.48596426591832  18.24387071846142
+  POINT  2464  17.67264086770901  25.76730075340195
+  POINT  2465  17.52697787020489  25.32168372621399
+  POINT  2466  17.1018668450201  25.72098828977573
+  POINT  2467  17.78498630795706  24.9096132943493
+  POINT  2468  18.29689274451687  24.94722520315896
+  POINT  2469  17.98412715958014  24.48884230766805
+  POINT  2470  18.19154482344632  27.14919909897187
+  POINT  2471  18.00418440385464  27.60561752382607
+  POINT  2472  18.50178002760287  27.59500731331329
+  POINT  2473  17.22320550548447  27.12725699911247
+  POINT  2474  16.99718056314592  26.6294993269721
+  POINT  2475  17.47355478486276  26.66436298910405
+  POINT  2476  14.77835587396051  33.47591176927389
+  POINT  2477  14.5037091327629  32.89870630528225
+  POINT  2478  14.20286679509669  33.2286249931342
+  POINT  2479  14.91119950175903  32.71983261654729
+  POINT  2480  15.41335988088872  32.74473764552774
+  POINT  2481  13.26816755360081  21.75856091096891
+  POINT  2482  13.0048315681012  21.32143470787244
+  POINT  2483  16.7511085267673  22.19060870549156
+  POINT  2484  16.20887687158396  22.19021726809433
+  POINT  2485  16.17786126300281  23.06167228219098
+  POINT  2486  16.69915194428762  23.07149378572608
+  POINT  2487  16.13755756315898  24.82813436948326
+  POINT  2488  16.41272816316716  25.26878389243772
+  POINT  2489  15.60763530303328  24.82273793783929
+  POINT  2490  15.34000798260733  25.26618804426989
+  POINT  2491  15.57192146402785  25.71183427290126
+  POINT  2492  15.04267696781684  25.71582579488349
+  POINT  2493  19.39363952846237  24.88740687823191
+  POINT  2494  18.885848220639  24.93009895932983
+  POINT  2495  18.68670736901592  25.35086994601108
+  POINT  2496  19.15366600169464  25.75648146541981
+  POINT  2497  18.56007556635269  25.77221469844787
+  POINT  2498  17.29751718982028  22.19792338787625
+  POINT  2499  17.82901984993449  22.20723229864854
+  POINT  2500  17.02050154539675  22.63152050098736
+  POINT  2501  17.2455606073406  23.07880846811078
+  POINT  2502  17.69547194751031  24.00000391993576
+  POINT  2503  18.20737838407013  24.03761582874543
+  POINT  2504  18.37170027960414  23.57574163654564
+  POINT  2505  17.42146708911589  23.53377959693132
+  POINT  2506  17.74281669022501  23.0938063121926
+  POINT  2507  15.25853878864088  12.92422065523148
+  POINT  2508  15.0175685566735  12.47064415693754
+  POINT  2509  17.58990097002385  11.50018009270076
+  POINT  2510  17.36873006000716  11.06025787356734
+  POINT  2511  18.10310452692819  11.49837625079764
+  POINT  2512  17.65638158620408  10.60573636868109
+  POINT  2513  15.04253498339223  10.68172168255394
+  POINT  2514  14.51635320344969  10.68688592002177
+  POINT  2515  14.77952260731562  10.24189432870903
+  POINT  2516  14.26072834128369  11.1308604785193
+  POINT  2517  15.29884441434331  11.11647511404975
+  POINT  2518  15.02941585016789  11.5708497790334
+  POINT  2519  -5.559612278106096  22.64037941022797
+  POINT  2520  -5.812595406053648  23.08012397436108
+  POINT  2521  -5.306180262645629  23.08034305013044
+  POINT  2522  -11.43576012403759  16.0359829772844
+  POINT  2523  -10.91930130833142  16.03530291420144
+  POINT  2524  -11.17839236720871  16.47753707839758
+  POINT  2525  -11.95093603481484  15.1524484606076
+  POINT  2526  -12.46808184577289  15.15416888873691
+  POINT  2527  -11.69363999436943  15.59489173025373
+  POINT  2528  -11.43396510560572  15.15130554344212
+  POINT  2529  -11.95273105324672  16.03712589444988
+  POINT  2530  -11.43712821990608  16.91861467088325
+  POINT  2531  -10.92066940419991  16.91793460780029
+  POINT  2532  -10.6635990468805  17.35875835728356
+  POINT  2533  -10.40486319418314  16.91768076479789
+  POINT  2534  -10.92128585029515  17.79908423287577
+  POINT  2535  -10.40547964027838  17.79883038987337
+  POINT  2536  -11.17515797884532  20.00000102031307
+  POINT  2537  -11.43519237168078  19.55947185837874
+  POINT  2538  -10.91971864863478  19.55946991621752
+  POINT  2539  -17.69355183457131  26.21921688206146
+  POINT  2540  -17.91957704254855  26.71697422906539
+  POINT  2541  -17.47355512042661  26.66436143557672
+  POINT  2542  -18.41154214164629  26.7040528116507
+  POINT  2543  -18.5809866532765  26.22413096385403
+  POINT  2544  -18.85906250548473  26.65851045942693
+  POINT  2545  -18.58165190157233  21.78818398655776
+  POINT  2546  -18.38730056826177  22.23230077017542
+  POINT  2547  -18.87782301108845  22.24485568342974
+  POINT  2548  -18.44846894716024  21.34055390991821
+  POINT  2549  -12.97062101492125  29.31875403642425
+  POINT  2550  -12.46767030297665  29.32772470608927
+  POINT  2551  -12.72223548790102  29.77728049112642
+  POINT  2552  -13.22907514769955  28.86709581957689
+  POINT  2553  -14.51635826947124  29.31311155849969
+  POINT  2554  -14.26073306937787  28.86913861906651
+  POINT  2555  -14.51706009046056  28.4236684902674
+  POINT  2556  -13.99842148648492  28.41952325896755
+  POINT  2557  -14.7795280512982  29.75810081374213
+  POINT  2558  -15.03254101741964  30.19341176913132
+  POINT  2559  -14.50635783171041  30.1882502220222
+  POINT  2560  -15.04254145518047  29.31827310560881
+  POINT  2561  -15.56202218869213  29.32850735956158
+  POINT  2562  -16.09215847892137  29.34349976240278
+  POINT  2563  -15.83584752723667  29.77825476369244
+  POINT  2564  -15.29885240686518  28.88351810431914
+  POINT  2565  -15.56326504283053  31.03948508656246
+  POINT  2566  -16.09046899946972  31.08225492312761
+  POINT  2567  -16.36982582431926  30.66455001640303
+  POINT  2568  -16.62469646598935  31.11842918285091
+  POINT  2569  -16.10341526745587  30.2125664936679
+  POINT  2570  -15.57327897722664  30.1975740908267
+  POINT  2571  -15.30010875763884  30.62772349910677
+  POINT  2572  -15.02252708302353  31.03532276486708
+  POINT  2573  -17.36874409487987  28.93971676960333
+  POINT  2574  -17.07238964582313  28.49069203988263
+  POINT  2575  -16.33477468949221  28.91218584585327
+  POINT  2576  -16.60860002803674  29.36193324998413
+  POINT  2577  -17.13332295795837  29.38218899091014
+  POINT  2578  -17.65639589526919  29.39423674904752
+  POINT  2579  -16.5728923949743  28.46738370478237
+  POINT  2580  -16.79406580218986  28.02745641123038
+  POINT  2581  -16.05645084585894  28.44895021720102
+  POINT  2582  -11.43421905289848  27.52144951460756
+  POINT  2583  -11.6916320508292  27.96979564432751
+  POINT  2584  -11.94478840412654  27.52156732452448
+  POINT  2585  -10.92260322222589  27.52096203886612
+  POINT  2586  -11.17575957552322  27.07273371906309
+  POINT  2587  -14.54458520175707  20.44472116630428
+  POINT  2588  -14.04156085494355  20.44473661417197
+  POINT  2589  -14.25527342288196  20.00000694189264
+  POINT  2590  -13.74078421360634  27.97171208992312
+  POINT  2591  -13.48445719252365  28.41718221872224
+  POINT  2592  -12.97143787482097  28.41928465053246
+  POINT  2593  -12.71451066085117  27.96964225196112
+  POINT  2594  -12.45912861602707  28.41955585281577
+  POINT  2595  -16.25413008413381  27.08512273155318
+  POINT  2596  -16.52070005962864  27.54827010780237
+  POINT  2597  -16.0279985758462  27.54100069988094
+  POINT  2598  -17.02019731047746  27.57157844290263
+  POINT  2599  -17.22320594816005  27.12725546102763
+  POINT  2600  -16.99718074018281  26.6294981140237
+  POINT  2601  -15.51800943988496  26.61966242771222
+  POINT  2602  -15.01513775921834  26.61758552880125
+  POINT  2603  -15.25855691968476  27.07577642472079
+  POINT  2604  -12.20839980609971  25.28942190368818
+  POINT  2605  -12.46344601370725  25.73349604427731
+  POINT  2606  -11.94630087233431  25.73521605642329
+  POINT  2607  -12.46807352183216  24.84583381340267
+  POINT  2608  -11.95092838045923  24.84755382554865
+  POINT  2609  -12.98765585547731  24.84316419719443
+  POINT  2610  -12.73018442983683  24.40129611905489
+  POINT  2611  -13.24519821910848  25.28412915854135
+  POINT  2612  -9.129651643227703  27.06523077144557
+  POINT  2613  -8.876288684125369  27.50911488874473
+  POINT  2614  -9.387389242004456  27.51154300998024
+  POINT  2615  -11.43269449945645  25.7358488670784
+  POINT  2616  -11.68774070706399  26.17992300766753
+  POINT  2617  -11.43075487019097  26.62688850656359
+  POINT  2618  -11.94436124306884  26.62625569590848
+  POINT  2619  -10.91913903951838  26.62640103082215
+  POINT  2620  -11.43575265155543  23.96401593507675
+  POINT  2621  -10.91929460003396  23.9646969017269
+  POINT  2622  -11.17838521827446  23.52246042867934
+  POINT  2623  -11.43395834902085  24.84869716197923
+  POINT  2624  -11.6936320647533  24.40510907169372
+  POINT  2625  -11.9527226829938  23.96287259864617
+  POINT  2626  -9.674059715189312  31.54309886182291
+  POINT  2627  -9.923928805191473  31.0922115971265
+  POINT  2628  -9.413784457395401  31.09278152867489
+  POINT  2629  -7.33625026584593  21.32043467489033
+  POINT  2630  -7.591125517743469  20.88045700659352
+  POINT  2631  -7.337223839723812  20.44026648652743
+  POINT  2632  -6.830512094503344  20.44026665091224
+  POINT  2633  -6.575528491143303  20.88082068876169
+  POINT  2634  -6.828119317097339  21.32047870894126
+  POINT  2635  -7.081929718985547  21.76037960279158
+  POINT  2636  -6.321207944282921  21.32076561666295
+  POINT  2637  -8.865941131087769  23.08182349266286
+  POINT  2638  -8.35498225184941  23.08157072480208
+  POINT  2639  -8.866487325995669  23.96406401648594
+  POINT  2640  -8.355738913521897  23.96328209781178
+  POINT  2641  -8.611808118958542  24.40495790685818
+  POINT  2642  -9.122215297035932  23.52275432385121
+  POINT  2643  -9.377738307564679  23.08218960907453
+  POINT  2644  -9.378284502472578  23.9644301328976
+  POINT  2645  -11.43519851064686  20.44052946226004
+  POINT  2646  -10.91972478760085  20.44052752009882
+  POINT  2647  -10.92146522300643  21.32094671163846
+  POINT  2648  -11.18084963629104  21.76061562971537
+  POINT  2649  -11.43914973268702  21.32072488012269
+  POINT  2650  -8.354717852301953  17.79936126551275
+  POINT  2651  -8.865677316820541  17.7991080550456
+  POINT  2652  -8.865604125273149  18.67950030830442
+  POINT  2653  -8.354849206451807  18.67954722684985
+  POINT  2654  -7.8449370799189  18.67964045894598
+  POINT  2655  -7.336251432918799  18.67956409604354
+  POINT  2656  -7.081931132275803  18.23961943152085
+  POINT  2657  -8.09997451760549  18.23956994043947
+  POINT  2658  -7.844805725769048  17.79945449760887
+  POINT  2659  -8.100430139091614  16.47811947625329
+  POINT  2660  -7.845750550729444  16.03722597916978
+  POINT  2661  -8.355741934804009  16.03671803565851
+  POINT  2662  -7.84499390774128  16.91893662122336
+  POINT  2663  -7.336521112848085  16.03802299597051
+  POINT  2664  -7.591832908560479  15.59662155537573
+  POINT  2665  -7.081982832760588  16.47905573175917
+  POINT  2666  -3.54490611780126  20.88709779020111
+  POINT  2667  -3.290304169812604  21.32705841216561
+  POINT  2668  -3.794349397708337  21.32485605719605
+  POINT  2669  -4.07370210063638  19.99999990535588
+  POINT  2670  -3.813606861772008  19.55755217403422
+  POINT  2671  -3.813606786979048  20.4424476880606
+  POINT  2672  -3.309561597917081  19.55534986530946
+  POINT  2673  -3.544906231427986  19.11290209845403
+  POINT  2674  -3.309561559083315  20.44465004303017
+  POINT  2675  -2.976342896691423  37.87084587080842
+  POINT  2676  -3.221425950774599  37.37975080057947
+  POINT  2677  -2.526770059080721  38.86620393748946
+  POINT  2678  -2.74911739425569  38.36872913844745
+  POINT  2679  -3.247670177747043  38.30899320764298
+  POINT  2680  -3.510972884148524  38.7290535079245
+  POINT  2681  -3.738198386584258  38.23117024028548
+  POINT  2682  -2.221684732532352  36.55039136936763
+  POINT  2683  -2.720983152386764  36.50668992783906
+  POINT  2684  -1.975649639226325  36.09501466529477
+  POINT  2685  -2.229342038877392  35.61557517193711
+  POINT  2686  -2.490020268553868  35.14475718983718
+  POINT  2687  -2.734688313083581  35.59417021242318
+  POINT  2688  -1.730981594696612  35.64560164270876
+  POINT  2689  -1.486809012309066  35.18419628736905
+  POINT  2690  -4.303354465001183  31.05895358128684
+  POINT  2691  -4.55951779146229  31.50692884476348
+  POINT  2692  -4.814374491189353  31.05972774650009
+  POINT  2693  -4.303319481666954  31.95367266283595
+  POINT  2694  -4.814339507855124  31.9544468280492
+  POINT  2695  -3.794429959970654  31.05851674025303
+  POINT  2696  -3.285536346627419  31.06016856732271
+  POINT  2697  -3.539604151930885  31.5078065066199
+  POINT  2698  -4.049286659697717  30.61131564198964
+  POINT  2699  -3.792218904985805  31.95624679413531
+  POINT  2700  -3.28332529164257  31.95789862120499
+  POINT  2701  -4.047040621378638  32.40376477742103
+  POINT  2702  7.293827708476641e-08  30.61670207641359
+  POINT  2703  -0.2521485735852201  31.06882400602231
+  POINT  2704  -0.2521485843374779  30.16753613384589
+  POINT  2705  -0.7573647761819143  29.27115377417338
+  POINT  2706  -0.5048694095893164  29.71821293229341
+  POINT  2707  -0.757018053121834  30.16737885684081
+  POINT  2708  -1.261813079214908  30.16656491069634
+  POINT  2709  -1.00909225396307  30.61588811224881
+  POINT  2710  -1.750101564306177  33.7926600881429
+  POINT  2711  -1.247341893467582  33.80032930854107
+  POINT  2712  -0.9957606346718019  34.26612784853185
+  POINT  2713  -1.241669357333788  34.72964383553155
+  POINT  2714  -1.739534339372401  34.71160969751359
+  POINT  2715  -11.99490542589216  33.72244073919998
+  POINT  2716  -12.55579994637244  33.72998392753992
+  POINT  2717  -12.24028160504613  34.13586616472574
+  POINT  2718  -12.58774656772219  32.92273577571433
+  POINT  2719  -12.04127268056533  32.88444075338846
+  POINT  2720  -12.31859548106905  32.49061802708863
+  POINT  2721  -11.76196356192489  33.30918024521488
+  POINT  2722  -11.49281247527174  32.87706249658918
+  POINT  2723  -11.44644522059858  33.7150624824007
+  POINT  2724  -10.96746234053338  33.79803021601935
+  POINT  2725  -10.46487803283816  33.83310531972037
+  POINT  2726  -10.71091904893609  33.33687709211661
+  POINT  2727  -11.20040420450066  34.21129071000446
+  POINT  2728  -11.46127976573915  30.22519151574363
+  POINT  2729  -11.70834995916295  29.77725564258582
+  POINT  2730  -11.97221458253263  30.23418703394924
+  POINT  2731  -10.68395992686636  29.76000252533419
+  POINT  2732  -10.93683718292719  29.31526402048404
+  POINT  2733  -13.99001145216601  30.2071360473141
+  POINT  2734  -14.24302441828744  30.64244700270329
+  POINT  2735  -13.47593211929433  30.2148213247283
+  POINT  2736  -12.882639952868  33.38136001505353
+  POINT  2737  -13.12801613202197  33.79478544057929
+  POINT  2738  -13.15996275337173  32.9875372887537
+  POINT  2739  -12.56903973339889  32.06645679208884
+  POINT  2740  -12.02256584624203  32.02816176976298
+  POINT  2741  -8.913239817098617  31.99135920727501
+  POINT  2742  -8.40158183646983  31.98514989359324
+  POINT  2743  -8.652257386764454  31.53745947968953
+  POINT  2744  -8.921335412563566  32.89535129795895
+  POINT  2745  -8.673611325668027  33.34794371176464
+  POINT  2746  -8.414840179908452  32.89164203498441
+  POINT  2747  -5.072107480879501  32.40303922173636
+  POINT  2748  -5.328305790674837  31.95629540366389
+  POINT  2749  10.14864152241564  25.29167841478616
+  POINT  2750  10.40452204895563  24.84933923994486
+  POINT  2751  7.345760569471696  27.50220841755529
+  POINT  2752  6.836865374418886  27.50054703680143
+  POINT  2753  7.089552523791351  27.05704250164396
+  POINT  2754  2.525426835782363  26.16307688713685
+  POINT  2755  2.272480634611741  25.72176210905083
+  POINT  2756  2.777875233522349  25.72204462651898
+  POINT  2757  1.767575335564268  26.60489238751902
+  POINT  2758  1.514941509738058  26.16264509615625
+  POINT  2759  2.272957824933265  26.60516717755396
+  POINT  2760  2.778352423843874  26.60544969502211
+  POINT  2761  4.805074847682363  27.49442755495632
+  POINT  2762  4.552513154400769  27.93750824958521
+  POINT  2763  4.297887807610577  27.49325833103988
+  POINT  2764  6.57468887445735  24.40195169880285
+  POINT  2765  6.321311698834721  24.84298263597548
+  POINT  2766  7.849057448689945  25.73004086883459
+  POINT  2767  8.359006247967862  25.73123236418823
+  POINT  2768  8.61552521165617  26.17503643791459
+  POINT  2769  9.404349218168869  30.19173390211969
+  POINT  2770  9.65777479999708  29.74665923251244
+  POINT  2771  10.40670379081607  26.62599846740034
+  POINT  2772  10.66169908791753  26.18015324950281
+  POINT  2773  10.91913923802371  26.62640116557348
+  POINT  2774  10.40539732837285  25.73591803949286
+  POINT  2775  10.91783277558049  25.73632073766599
+  POINT  2776  9.89250783475268  25.73551092662298
+  POINT  2777  9.637659499680273  26.17823816723135
+  POINT  2778  12.98765611516729  24.84316435404515
+  POINT  2779  13.24519849159788  25.28412934430153
+  POINT  2780  12.97771797713904  25.73181949643032
+  POINT  2781  13.4973712688774  25.72824679366293
+  POINT  2782  13.74303197345077  26.17287521768461
+  POINT  2783  13.99649931993174  26.62119388701589
+  POINT  2784  13.48335810089953  26.624255615123
+  POINT  2785  14.0105124879096  25.72518506555582
+  POINT  2786  14.53346833943965  25.71999652791481
+  POINT  2787  14.76538182086017  26.16564275654618
+  POINT  2788  12.97101588266317  26.6242609325337
+  POINT  2789  13.22448322914414  27.07257960186498
+  POINT  2790  11.18782984741558  28.86783824005193
+  POINT  2791  11.44023158859328  28.42154320407505
+  POINT  2792  10.92866118458883  28.41597310920991
+  POINT  2793  15.8358466505693  29.77825662708678
+  POINT  2794  15.57327800023705  30.19757601615488
+  POINT  2795  15.03254016683603  30.19341354430916
+  POINT  2796  -0.8995237521899599  19.54873467419662
+  POINT  2797  -1.223665336802445  19.99999999772069
+  POINT  2798  -1.340523578198245  19.5487346702835
+  POINT  2799  -0.8995237451475713  20.45126532729634
+  POINT  2800  -1.340523571155856  20.45126532338323
+  POINT  2801  -1.523722054976781  19.10064953446878
+  POINT  2802  -1.775181039070304  18.66606637620227
+  POINT  2803  -1.267840977679282  18.66288618849292
+  POINT  2804  -1.847863639589266  19.55191485799285
+  POINT  2805  3.030578223423045  16.47865931956265
+  POINT  2806  2.7786995819392  16.9173169337976
+  POINT  2807  3.283887773770873  16.91774472162141
+  POINT  2808  2.273605935625607  16.91641083896922
+  POINT  2809  2.777737361196587  16.03895609462461
+  POINT  2810  2.272576544974629  16.03887379781015
+  POINT  2811  2.524923874579844  15.59959836069592
+  POINT  2812  3.282925553028259  16.03938388244843
+  POINT  2813  -0.7612694088495366  18.66199020272551
+  POINT  2814  -1.012728392943059  18.227407044459
+  POINT  2815  -0.758598544150526  17.78995693156367
+  POINT  2816  -1.265170112980272  17.79085291733108
+  POINT  2817  4.506764545389951  1.417895953039242
+  POINT  2818  4.783535558950785  1.00631976803145
+  POINT  2819  4.758484548151512  1.889696750885436
+  POINT  2820  4.253215613299169  1.820569169400931
+  POINT  2821  3.510966697825907  1.270945661498197
+  POINT  2822  3.322764554813852  0.7621993600452871
+  POINT  2823  2.853419417958452  0.6871814573462394
+  POINT  2824  3.15663773239814  0.2506800547597778
+  POINT  2825  2.526762781558002  1.133795733001061
+  POINT  2826  0.7361792967570719  3.370479836805422
+  POINT  2827  0.984246123665582  3.857601448530803
+  POINT  2828  1.229220834288343  3.387837280503928
+  POINT  2829  0.2456021749298  4.312315065409472
+  POINT  2830  -6.12900348972989e-07  3.840243961866928
+  POINT  2831  -0.2456030241048603  4.312315022444103
+  POINT  2832  0.2456016322509388  3.358689814749931
+  POINT  2833  0.5049285170465799  15.59922462282507
+  POINT  2834  0.2524349318952632  15.15933354319677
+  POINT  2835  0.7573634386942838  15.15936468952784
+  POINT  2836  -0.2524349044090859  14.27853318435742
+  POINT  2837  1.330778542918409e-08  14.71947361203522
+  POINT  2838  0.2524349358260958  14.27853318222174
+  POINT  2839  -0.2524349083399185  15.15933354533245
+  POINT  2840  -0.7573634152411641  15.15936469433383
+  POINT  2841  -0.5049284966536864  15.59922462549537
+  POINT  2842  0.5049254022037216  13.83754849930346
+  POINT  2843  0.7574092353969514  13.3953638490185
+  POINT  2844  0.2524838513024543  13.39540810425898
+  POINT  2845  0.7573603199205929  14.27848892698126
+  POINT  2846  1.262484605133556  13.39525696279437
+  POINT  2847  1.010043054232288  12.95311656774989
+  POINT  2848  1.767575339991074  13.39510769916648
+  POINT  2849  1.514941521155737  13.83735498043508
+  POINT  2850  1.262295113836738  15.15932946063648
+  POINT  2851  1.767248131092881  15.15945960799914
+  POINT  2852  1.514810041101744  15.5993859165188
+  POINT  2853  1.009801528685421  14.71943838100818
+  POINT  2854  1.262291995063047  14.2784536980899
+  POINT  2855  1.767382729920565  14.278304434462
+  POINT  2856  10.41084000253686  12.48260731078788
+  POINT  2857  9.899143909428762  12.48490033133931
+  POINT  2858  10.15245058881716  12.93005073050543
+  POINT  2859  7.613367978441445  10.26725776150029
+  POINT  2860  7.865566856326732  10.71237296609314
+  POINT  2861  7.872056162547818  9.817820601218891
+  POINT  2862  6.840628853956597  11.61013350401928
+  POINT  2863  7.350228541129577  11.60757337758872
+  POINT  2864  7.602701329817169  12.05219325805719
+  POINT  2865  7.859856068084092  11.60547869619642
+  POINT  2866  6.584305485265666  12.05624824322372
+  POINT  2867  6.331860536359608  11.61209380779351
+  POINT  2868  7.345761240100929  12.4977925867857
+  POINT  2869  7.855388767055443  12.4956979053934
+  POINT  2870  6.836865843678177  12.49945375805594
+  POINT  2871  6.328097526081189  12.50141406183017
+  POINT  2872  7.089553280916451  12.94295840539215
+  POINT  2873  8.370126385671387  11.60298196347085
+  POINT  2874  8.117653596983795  11.15836208300238
+  POINT  2875  8.375837173914027  10.70987623336757
+  POINT  2876  4.295101059051913  14.27689245468694
+  POINT  2877  4.801572033150954  14.27614783489993
+  POINT  2878  5.054251674501884  14.71756589197868
+  POINT  2879  5.308173049886577  14.27556530526172
+  POINT  2880  4.041727348991283  14.71850999116095
+  POINT  2881  4.800381330074277  15.15879930644609
+  POINT  2882  5.3069823468099  15.15821677680788
+  POINT  2883  7.849059237793011  14.26996017987809
+  POINT  2884  8.103070930537744  14.71207488647675
+  POINT  2885  5.815417413760485  14.27454965531052
+  POINT  2886  5.562737772409555  13.83313159823176
+  POINT  2887  -0.2521485527378636  8.931176099677991
+  POINT  2888  -0.5035763908778745  8.480088454668433
+  POINT  2889  -0.7557250243185949  8.932210406700243
+  POINT  2890  -0.2509573870619522  8.024279294560063
+  POINT  2891  0.2509575473889861  8.024279283349045
+  POINT  2892  7.962417714058034e-08  7.56950443026293
+  POINT  2893  6.593280292555939  10.27328387180388
+  POINT  2894  6.335879483268245  10.7209592028273
+  POINT  2895  5.830755701913942  9.830536241827216
+  POINT  2896  5.574295302392639  10.27814403449093
+  POINT  2897  5.321475942820628  9.832740939252627
+  POINT  2898  6.341449789967948  9.827318887765713
+  POINT  2899  5.062470520941847  11.17165642054254
+  POINT  2900  5.317804209527402  10.72520563662399
+  POINT  2901  5.827083968620716  10.72300093919858
+  POINT  2902  6.079388390403009  11.16802080496036
+  POINT  2903  5.823065021712079  11.61413554416479
+  POINT  2904  5.315146558477212  11.61569271764991
+  POINT  2905  5.567618704433812  12.05976572048306
+  POINT  2906  1.26260880164937  12.50952783290288
+  POINT  2907  0.7575334319127655  12.509634719127
+  POINT  2908  1.515420485651163  12.06591797610076
+  POINT  2909  1.767930107970686  12.50939982472365
+  POINT  2910  2.779582641351243  11.62045230557948
+  POINT  2911  2.526574119133528  12.06542614609067
+  POINT  2912  2.273750314190195  11.62081612741035
+  POINT  2913  3.538866270969666  12.06436176963468
+  POINT  2914  3.284985271677322  12.50826344534523
+  POINT  2915  3.286081822236629  11.62005928968668
+  POINT  2916  2.273653942155398  10.72932286147457
+  POINT  2917  2.52689359077933  10.28311528781965
+  POINT  2918  2.021045272905355  11.17585461155564
+  POINT  2919  1.76803675068764  11.62082845206683
+  POINT  2920  1.262715444366323  11.62095646024605
+  POINT  2921  1.010161226929193  11.17580755694835
+  POINT  2922  0.7575449618927166  11.62089708098228
+  POINT  2923  1.767940378652842  10.72933518613105
+  POINT  2924  1.262535322656886  10.72890566637786
+  POINT  2925  1.515143991906928  10.28237391629679
+  POINT  2926  0.253078415467722  21.33774656433547
+  POINT  2927  0.5081909984648777  20.90226741555631
+  POINT  2928  -0.3913327526621082  20.45100208957463
+  POINT  2929  2.734971728257651e-09  20.45100208875773
+  POINT  2930  -0.39133275539708  20.0000000008169
+  POINT  2931  -0.5081909870155196  20.90226741523717
+  POINT  2932  0.3913327604803603  20.45100208957464
+  POINT  2933  0.3913327577453886  20.0000000008169
+  POINT  2934  0.2530784161400829  22.21052479098349
+  POINT  2935  0.5055201289601644  22.64707892336772
+  POINT  2936  -2.785590905596614  21.32882419900507
+  POINT  2937  -3.03503418550369  21.76658246600001
+  POINT  2938  1.770560907143734  17.79144658719761
+  POINT  2939  2.024810499173619  18.22997737721628
+  POINT  2940  1.775181052026418  18.66606637464487
+  POINT  2941  2.280691576572412  18.66774072366555
+  POINT  2942  1.265170126328186  17.79085291521534
+  POINT  2943  1.012728405401115  18.22740704319246
+  POINT  2944  0.7585985571016766  17.7899569302122
+  POINT  2945  1.516431058844295  17.35399647421735
+  POINT  2946  0.8995237605176197  19.54873467387751
+  POINT  2947  1.340523588216353  19.54873466996442
+  POINT  2948  1.523722067484837  19.10064953360767
+  POINT  2949  1.267840990086043  18.66288618715841
+  POINT  2950  0.7612694208595338  18.66199020215526
+  POINT  2951  5.813248074708591  17.79940577746486
+  POINT  2952  6.319914201894026  17.79970755524536
+  POINT  2953  6.067133785253771  18.23927390332938
+  POINT  2954  3.535574274154806  15.59970463007047
+  POINT  2955  3.788415136381265  16.0394078550085
+  POINT  2956  4.29392652128657  16.03975141330591
+  POINT  2957  4.547087929945052  15.59958939695291
+  POINT  2958  4.79995059372381  16.03961220762827
+  POINT  2959  4.041277800160023  16.47943066568386
+  POINT  2960  3.788433948862058  15.15930008166777
+  POINT  2961  3.282944365509053  15.1592761091077
+  POINT  2962  4.294357257637037  15.15893851212372
+  POINT  2963  3.794349415726029  21.32485606072119
+  POINT  2964  3.290304186047734  21.32705841534533
+  POINT  2965  3.544906134739364  20.8870977923218
+  POINT  2966  3.035034201374663  21.76658246994613
+  POINT  2967  3.285878222907446  22.20420717451871
+  POINT  2968  3.81360680382783  20.44244768929398
+  POINT  2969  4.073702118111949  19.99999990535705
+  POINT  2970  4.30904667870178  20.44244765376073
+  POINT  2971  3.813606878619757  19.55755217280245
+  POINT  2972  4.309046753493707  19.5575521372692
+  POINT  2973  3.091725105391231  19.99999995889588
+  POINT  2974  3.309561574149535  20.44465004391812
+  POINT  2975  2.535961556076473  19.1072647545244
+  POINT  2976  2.785591003223675  18.67117575709582
+  POINT  2977  2.823024475136099  19.55534988242807
+  POINT  2978  3.309561612982868  19.55534986442249
+  POINT  2979  3.544906248364625  19.11290209633464
+  POINT  2980  4.553342649405812  19.11635063545458
+  POINT  2981  4.813437888898004  19.55879836800918
+  POINT  2982  3.78894556721224  16.91866702923937
+  POINT  2983  3.537066925728395  17.35732464347433
+  POINT  2984  4.294456952117544  16.91901058753678
+  POINT  2985  10.40485762242933  23.0823167754689
+  POINT  2986  10.66359386676167  22.64123696885316
+  POINT  2987  7.336519205314388  23.96197717939193
+  POINT  2988  7.845748174573922  23.96277428191098
+  POINT  2989  7.847092038101775  15.1545453326975
+  POINT  2990  8.357041317327358  15.15335405870247
+  POINT  2991  7.335858156970897  16.91917008184071
+  POINT  2992  6.82740222651428  16.91959839644326
+  POINT  2993  7.081982885691881  16.4790557103205
+  POINT  2994  6.573652994571071  17.35977609867216
+  POINT  2995  6.82753870511625  17.79964422453667
+  POINT  2996  6.319777723292055  16.91966172715194
+  POINT  2997  8.865603095183527  21.32049701279709
+  POINT  2998  8.610566546294587  20.88042660659833
+  POINT  2999  8.354847778087121  21.32045064574386
+  POINT  3000  -19.49782579425925  18.2262342507611
+  POINT  3001  -19.95653724886555  18.68219083235013
+  POINT  3002  -19.87861801615688  17.79987597964446
+  POINT  3003  -18.66020382675364  15.93496854205557
+  POINT  3004  -19.16290631175541  15.97909016657372
+  POINT  3005  -18.99857199443355  15.51737708814106
+  POINT  3006  -17.91955297322556  13.2829594368018
+  POINT  3007  -18.41152301195191  13.295877500577
+  POINT  3008  -9.129653461818208  12.93477147753005
+  POINT  3009  -8.876289950333131  12.49088708422035
+  POINT  3010  -8.365440669810539  12.49364887761896
+  POINT  3011  -8.108500589767266  12.9392481990543
+  POINT  3012  -7.855388676964306  12.4956979610122
+  POINT  3013  -8.361774657741075  13.38192668055925
+  POINT  3014  -7.851722664894842  13.38397576395249
+  POINT  3015  -4.80356472378408  18.67759654481199
+  POINT  3016  -4.299173591137375  18.67635031371034
+  POINT  3017  -5.054931658031134  18.23828417657461
+  POINT  3018  -2.280691562830554  18.66774072586148
+  POINT  3019  -2.024810485533055  18.22997737988562
+  POINT  3020  -2.785590988433182  18.67117575963704
+  POINT  3021  -2.535961541970431  19.1072647559537
+  POINT  3022  -5.306982312776921  15.15821679877318
+  POINT  3023  -5.813814758590553  15.15783103442108
+  POINT  3024  -4.547087902507322  15.59958941436245
+  POINT  3025  -4.293926496647592  16.03975142784848
+  POINT  3026  -7.337862524706304  15.15534238385541
+  POINT  3027  -7.847091962587663  15.15454536705468
+  POINT  3028  -9.890905060586594  16.91769167150019
+  POINT  3029  -10.147975417906  16.47686792201691
+  POINT  3030  -9.122219403737819  16.47724518073061
+  POINT  3031  -9.377742636906071  16.91780911523353
+  POINT  3032  -9.634630413183206  17.35862195801451
+  POINT  3033  -15.51798373490658  13.38033590670376
+  POINT  3034  -15.01511587050028  13.38241715695336
+  POINT  3035  -14.76536195414445  13.83436752674101
+  POINT  3036  -11.6877451403522  13.82008259053461
+  POINT  3037  -11.43269990813222  14.264155554569
+  POINT  3038  -11.43075852913953  13.37311667077508
+  POINT  3039  -10.91914257799354  13.37360334277097
+  POINT  3040  -14.49013065771233  8.92250716809294
+  POINT  3041  -13.97378473792814  8.903623831005547
+  POINT  3042  -13.75932210669217  8.400895838660942
+  POINT  3043  -14.48388519872614  8.085770307453599
+  POINT  3044  -14.7532851786944  8.51074262304131
+  POINT  3045  -14.07639210786223  7.906905857500061
+  POINT  3046  -16.05643838843906  11.55103715881512
+  POINT  3047  -16.33476399675755  11.08780033828979
+  POINT  3048  -16.09214922620015  10.65648918306597
+  POINT  3049  -15.54889503500405  11.56061276607589
+  POINT  3050  11.2389936247567  7.556479722522218
+  POINT  3051  10.95968569172366  7.131739392009571
+  POINT  3052  10.96516018232728  8.002770687957165
+  POINT  3053  10.45710182271854  7.09666523164841
+  POINT  3054  10.19676557908151  7.554948702823318
+  POINT  3055  9.947996817509239  7.086330070692012
+  POINT  3056  10.44503645463636  8.011377880133024
+  POINT  3057  9.935931449427057  8.001042719176626
+  POINT  3058  9.433883059010681  7.09648042600004
+  POINT  3059  9.694219302647717  6.638196954825132
+  POINT  3060  9.431468298922116  6.192050324704395
+  POINT  3061  8.921334355776636  7.10464922441238
+  POINT  3062  9.175111870638158  7.552782340279261
+  POINT  3063  9.020608292392154  2.610986790489027
+  POINT  3064  9.474327155954036  2.853381851282785
+  POINT  3065  9.424223358758637  2.359591439050014
+  POINT  3066  8.61015283696532  3.016787348807768
+  POINT  3067  9.406407135751241  3.443882765087797
+  POINT  3068  14.24301966553495  9.357549438241348
+  POINT  3069  14.4901295966866  8.92250482268938
+  POINT  3070  15.02251965234311  8.964668030477915
+  POINT  3071  14.50635307594872  9.811745665581833
+  POINT  3072  15.03253485589125  9.806581428114002
+  POINT  3073  15.30010149579994  9.372267151041644
+  POINT  3074  1.391480458123909  0.5361652771996028
+  POINT  3075  1.5311646848921  1.034881203024674
+  POINT  3076  0.9403288020067619  0.5067124227468429
+  POINT  3077  1.30290062382262  0.04248387209852996
+  POINT  3078  0.5146184240444129  0.9751892831391331
+  POINT  3079  0.7618858102185746  1.458041036081303
+  POINT  3080  1.257885314814681  1.486842127641039
+  POINT  3081  1.759808407924379  1.526429439176829
+  POINT  3082  -7.903282532023693  3.431138862491011
+  POINT  3083  -8.152789841056642  3.936144390882303
+  POINT  3084  -7.405025206157284  4.401754955187759
+  POINT  3085  -7.126972980823624  3.982555849504718
+  POINT  3086  -6.871914937442281  4.456668046370027
+  POINT  3087  -7.912211134470291  4.392559551191403
+  POINT  3088  -7.657153091088949  4.866671748056711
+  POINT  3089  -9.947996922680865  7.086330753741288
+  POINT  3090  -10.19676544567954  7.554949393736067
+  POINT  3091  -9.433883096893222  7.096480642617021
+  POINT  3092  -9.935931248079878  8.001043112251882
+  POINT  3093  4.527367092332923e-08  11.17574818979146
+  POINT  3094  -0.252495297355625  10.7286890466501
+  POINT  3095  -0.7573647365983451  10.72884633098105
+  POINT  3096  -6.777768896535333  2.634657762748669
+  POINT  3097  -7.244270061060128  2.731385544386314
+  POINT  3098  -7.354841851407485  3.536945192983723
+  POINT  3099  -6.821731582692482  3.591858284165991
+  POINT  3100  -7.598041133892552  3.040441297152283
+  POINT  3101  -2.770028523234636  7.135495143417519
+  POINT  3102  -2.262551794000459  7.128472515207454
+  POINT  3103  -2.013561812098475  7.580836281036188
+  POINT  3104  -1.756818092472177  7.124101067148673
+  POINT  3105  -2.268204295821881  8.035370941832417
+  POINT  3106  -1.975649084420517  3.904985271154332
+  POINT  3107  -2.229341417725875  4.384424847169543
+  POINT  3108  -1.730981152791177  4.354398340751177
+  POINT  3109  -1.233116312198353  4.336364163628327
+  POINT  3110  -1.48680864550371  4.815803739643538
+  POINT  3111  -0.7430351466867606  5.261285573502088
+  POINT  3112  -0.494472020592799  4.791077844253667
+  POINT  3113  -0.2485633623686729  5.254593855235067
+  POINT  3114  -0.740074808422948  4.319006740711124
+  POINT  3115  -3.989917167396486  2.240630780408752
+  POINT  3116  -3.738200036941911  1.768829703597202
+  POINT  3117  -3.247670870830478  1.691006496083939
+  POINT  3118  -2.976342610696507  2.129153640981189
+  POINT  3119  -3.734386660790618  2.660010881492179
+  POINT  3120  -4.249408434534817  2.711752124426682
+  POINT  3121  -6.558942474787781  3.123176139372501
+  POINT  3122  -6.331073604203918  3.568786795893496
+  POINT  3123  -6.287110918046769  2.611586274476174
+  POINT  3124  -6.621962591182754  4.900980417645647
+  POINT  3125  -6.343910365849093  4.481781311962606
+  POINT  3126  1.975648595423093  36.09501468771074
+  POINT  3127  1.730980862699194  35.6456016167933
+  POINT  3128  2.229341421389412  35.61557529593476
+  POINT  3129  1.767382707537047  25.72169563959068
+  POINT  3130  2.019831105277033  25.28066337897281
+  POINT  3131  1.262291980403351  25.72154636607824
+  POINT  3132  1.767248087730079  24.84054044960734
+  POINT  3133  2.272346014804772  24.84060691906749
+  POINT  3134  1.262295090029159  24.84067059179185
+  POINT  3135  -0.2524838111325409  26.60459195706799
+  POINT  3136  2.444279567637153e-08  27.04677661342691
+  POINT  3137  -0.2524838031658742  27.4903401891097
+  POINT  3138  0.2524838616507888  27.49034019456228
+  POINT  3139  -0.7575333892249605  27.4903653405446
+  POINT  3140  3.788433723962699  24.84070003411083
+  POINT  3141  4.041727103362698  25.28149016974522
+  POINT  3142  3.283312657697288  25.72224398475948
+  POINT  3143  3.030366456526666  25.28092920667346
+  POINT  3144  3.789177592187962  25.72274613527788
+  POINT  3145  4.295100814849055  25.72310774010915
+  POINT  3146  3.536686369183645  26.16386155512341
+  POINT  3147  2.272576461040474  23.96112624728912
+  POINT  3148  2.020306171472144  23.5221043798967
+  POINT  3149  2.273605847126488  23.08358918644693
+  POINT  3150  2.778699451801812  23.08268308508446
+  POINT  3151  3.030578057285068  23.52134071927124
+  POINT  3152  3.283887584263749  23.08225529947948
+  POINT  3153  6.82172659767877  36.40814779878537
+  POINT  3154  7.35483619344178  36.46305945729526
+  POINT  3155  6.558938425685055  36.87683381454495
+  POINT  3156  6.777763402182511  37.36535117969289
+  POINT  3157  7.244263972315331  37.26861717750442
+  POINT  3158  5.845709060934203  32.8543398439479
+  POINT  3159  5.327825047917067  32.84978785259251
+  POINT  3160  5.587460787769149  33.29923958236787
+  POINT  3161  5.07210716993828  32.40303966091142
+  POINT  3162  5.839992684245366  31.95857160899264
+  POINT  3163  5.328305474083631  31.9562956821724
+  POINT  3164  11.7636152966602  35.51005436606592
+  POINT  3165  11.89138268840086  36.08088984207926
+  POINT  3166  13.96434143009819  33.62431889214255
+  POINT  3167  13.62553027166024  33.96298348535633
+  POINT  3168  14.13907578790397  34.14519481201172
+  POINT  3169  13.6933777803736  33.05047192353857
+  POINT  3170  11.47394032795509  34.67289773812949
+  POINT  3171  11.20040168097641  34.21129404646143
+  POINT  3172  11.44644337030582  33.71506560055828
+  POINT  3173  10.96746084748497  33.79803270401432
+  POINT  3174  9.928435644092694  34.70960053046583
+  POINT  3175  9.445444615479557  34.74869014145943
+  POINT  3176  10.20212549960824  34.27925374770544
+  POINT  3177  8.55693472587436  37.47116564769411
+  POINT  3178  8.610154574479843  36.98321170564777
+  POINT  3179  7.792705712071077  37.37442105721501
+  POINT  3180  8.146978123645237  37.66529759679247
+  POINT  3181  8.559637437237384  38.07574638038857
+  POINT  3182  8.395984878751314  36.56036043869134
+  POINT  3183  7.903277933197526  36.56886333700585
+  POINT  3184  7.59803541538643  36.95956247755778
+  POINT  3185  13.23628235860721  30.68752328103807
+  POINT  3186  13.02182189368296  31.19025353239009
+  POINT  3187  13.39848589487437  32.59184677084766
+  POINT  3188  13.08141264733925  32.09785538670456
+  POINT  3189  13.15996052987587  32.98754066985602
+  POINT  3190  3.734384876860566  37.33999019105068
+  POINT  3191  3.989913736038182  37.75937050229219
+  POINT  3192  3.738191811837065  38.23117125418775
+  POINT  3193  3.247663856437776  38.30899372408128
+  POINT  3194  2.976338586140713  37.87084607032222
+  POINT  3195  0.7575449832500279  28.37910301124292
+  POINT  3196  0.5050496180037712  27.9339289377297
+  POINT  3197  1.262608818111103  27.49047225529183
+  POINT  3198  1.515420516496924  27.93408212583156
+  POINT  3199  0.7575334456124412  27.49036536204691
+  POINT  3200  2.526893724749228  29.71688489057836
+  POINT  3201  2.779450491643448  30.16459955601931
+  POINT  3202  3.286497797291172  29.27075851415398
+  POINT  3203  3.54071932016649  29.71695812350327
+  POINT  3204  3.793978826839798  29.27114357134025
+  POINT  3205  2.779998606761999  29.27036546592124
+  POINT  3206  2.273654040893363  29.2706772901826
+  POINT  3207  0.2509575631490233  32.89023084573768
+  POINT  3208  7.962001580263944e-08  32.43049566678853
+  POINT  3209  0.2509575815135437  31.97572081582519
+  POINT  3210  -0.2509574211939724  31.97572080461469
+  POINT  3211  0.7545341147933871  31.97468656237741
+  POINT  3212  1.00487180505531  32.42701557238493
+  POINT  3213  2.262552379835649  32.871528064516
+  POINT  3214  2.013562317430567  32.41916421915188
+  POINT  3215  1.75681859018817  32.87589931213495
+  POINT  3216  2.268204796802595  31.96462962194811
+  POINT  3217  2.77500339006423  31.96212582894687
+  POINT  3218  3.027618133833469  32.410566243476
+  POINT  3219  1.247341957495069  33.80032933334168
+  POINT  3220  1.503048939569117  33.33593227620078
+  POINT  3221  0.7511021544362571  32.88704853645076
+  POINT  3222  0.5001446352577484  33.34678370418941
+  POINT  3223  0.7487078672168751  33.80939990733931
+  POINT  3224  0.9957605981669626  34.2661278457785
+  POINT  3225  1.254058877164035  32.88356843083666
+  POINT  3226  4.807634527403731  36.45417558306546
+  POINT  3227  4.268078121334274  36.43451973236753
+  POINT  3228  5.055439451329409  35.99075638523749
+  POINT  3229  4.016824286852271  36.00258917550283
+  POINT  3230  3.742624318707891  36.43693935563272
+  POINT  3231  4.285159710652261  35.55276249892606
+  POINT  3232  3.759705908025878  35.55518212219123
+  POINT  3233  5.313339571489223  35.5337790049437
+  POINT  3234  5.576017529265764  35.08006250744026
+  POINT  3235  4.800178209638467  35.54319217194386
+  POINT  3236  4.543059830812075  35.09578511863226
+  POINT  3237  6.593280538182253  29.7267168205935
+  POINT  3238  6.845584839365598  29.28169702003494
+  POINT  3239  6.335879606186479  29.27904143291438
+  POINT  3240  6.851155373110538  30.17533731825264
+  POINT  3241  7.361674109424366  30.17880960428335
+  POINT  3242  7.109843711173534  30.62477451482192
+  POINT  3243  7.613368231755042  29.73274323698628
+  POINT  3244  7.872056569818037  30.18218043355557
+  POINT  3245  3.794429966540387  31.05851703304998
+  POINT  3246  4.049286650570231  30.61131584299384
+  POINT  3247  3.794281271533463  30.1641111043279
+  POINT  3248  3.033012443010421  30.61175253684394
+  POINT  3249  3.285536433201112  31.06016885716353
+  POINT  3250  3.286800241984837  30.16372604714163
+  POINT  3251  19.49782570706544  18.22623423316451
+  POINT  3252  19.95653726784996  18.68219111832597
+  POINT  3253  18.58166017353374  18.21127385550157
+  POINT  3254  18.44873815733738  18.65901810939465
+  POINT  3255  17.82900842060782  17.79250664273356
+  POINT  3256  17.55961501255982  18.23365515048583
+  POINT  3257  18.38742546426215  17.76710888707429
+  POINT  3258  18.87780136911621  17.75460013746301
+  POINT  3259  17.52690217883121  14.67823772169018
+  POINT  3260  17.21413812833305  15.13667453160922
+  POINT  3261  17.10180895186563  14.27897243895621
+  POINT  3262  16.61643123646513  14.28454314481263
+  POINT  3263  16.41267770706892  14.73120621263948
+  POINT  3264  16.07296510477975  14.29114476438398
+  POINT  3265  14.25527356652689  20.00000694342845
+  POINT  3266  14.54458535674566  20.44472120503738
+  POINT  3267  15.08660392329284  20.4503355424043
+  POINT  3268  15.22709411735221  19.99960748842541
+  POINT  3269  14.54446737878539  19.55524897689899
+  POINT  3270  14.04144304480628  19.5552644241821
+  POINT  3271  15.12585065643982  22.18962336947886
+  POINT  3272  15.66704893150966  22.18912647227221
+  POINT  3273  15.93226494226947  22.62311502278055
+  POINT  3274  15.63603332292851  23.06058148636886
+  POINT  3275  15.10960336366766  23.06196334102751
+  POINT  3276  14.85525309603435  22.62543767487836
+  POINT  3277  15.07838610348047  15.1733118594097
+  POINT  3278  15.60761466098593  15.17729090093799
+  POINT  3279  15.33998301787808  14.73382879068254
+  POINT  3280  14.82036766750458  15.61339008097941
+  POINT  3281  15.08744436360368  16.05749207836569
+  POINT  3282  14.56179428451994  16.05410818967995
+  POINT  3283  14.55273602439673  15.16992797072396
+  POINT  3284  15.87591227598083  15.61135500755215
+  POINT  3285  16.13750919037845  15.17187193882498
+  POINT  3286  16.68097532206382  15.16527031925363
+  POINT  3287  16.93896961164258  15.57734025779473
+  POINT  3288  17.24542059267814  16.921237054667
+  POINT  3289  17.42133862340716  16.46621174527455
+  POINT  3290  16.6991273812222  16.92861646965699
+  POINT  3291  17.19812051536607  16.01499394956502
+  POINT  3292  16.66495770909684  16.04358973720944
+  POINT  3293  16.50011603657139  19.55060584927988
+  POINT  3294  16.11086118526408  19.54894289457717
+  POINT  3295  16.23490740586323  18.67143802475644
+  POINT  3296  16.77688889638486  18.67109500215383
+  POINT  3297  16.90823717346987  19.54895804099115
+  POINT  3298  15.66731510254423  17.81120259941419
+  POINT  3299  15.93239678965792  17.3770904840493
+  POINT  3300  15.12588811735991  17.81032407015078
+  POINT  3301  15.40255579021237  18.24333521180063
+  POINT  3302  14.85535684791786  17.37460770073489
+  POINT  3303  15.10975920515541  16.93820082241529
+  POINT  3304  14.5744686233815  16.93461706538583
+  POINT  3305  14.59059753558601  17.80674031312132
+  POINT  3306  16.79406525039852  28.02745799197655
+  POINT  3307  17.07238886613754  28.4906939788942
+  POINT  3308  16.57289177244715  28.46738533203519
+  POINT  3309  17.4965710356451  27.60644365003999
+  POINT  3310  17.80117571229844  28.04994051262165
+  POINT  3311  17.02019681392827  27.57157998790804
+  POINT  3312  16.52069972023788  27.54827134104903
+  POINT  3313  17.58991650606833  28.49979170459397
+  POINT  3314  18.10312000032976  28.50159082583126
+  POINT  3315  18.41154163693258  26.70405457720359
+  POINT  3316  18.5809862969927  26.22413241238169
+  POINT  3317  18.8590620588132  26.65851173471512
+  POINT  3318  17.91957654068757  26.71697613947613
+  POINT  3319  17.69355159834902  26.21921846733577
+  POINT  3320  18.11866262353381  25.81991390377403
+  POINT  3321  16.25412989716249  27.08512372750859
+  POINT  3322  16.02799833363274  27.5410017315771
+  POINT  3323  12.4713348273634  20.44086210014538
+  POINT  3324  12.74356289841131  20.88266792813398
+  POINT  3325  12.48035189032188  21.32047783433658
+  POINT  3326  11.9561289915379  23.08041192363828
+  POINT  3327  12.47539190118238  23.07854903560531
+  POINT  3328  12.21410635583005  23.51991665586499
+  POINT  3329  11.69840716659313  22.64001307273599
+  POINT  3330  13.00253570004953  22.19714775592412
+  POINT  3331  13.52908269363856  22.196464052818
+  POINT  3332  13.52075711029057  23.07307462590749
+  POINT  3333  13.79176001498042  22.63195101028575
+  POINT  3334  12.99841005278091  23.07655233280262
+  POINT  3335  12.74043268848876  22.63704760057591
+  POINT  3336  12.47951754845101  22.19914445872682
+  POINT  3337  16.76214594331712  26.16105609261419
+  POINT  3338  16.616482945813  25.71543906542623
+  POINT  3339  16.07300726146418  25.70885169527617
+  POINT  3340  15.7756762466737  26.15848944588978
+  POINT  3341  16.01909527733369  26.61668049315067
+  POINT  3342  15.51800947989736  26.61966307077576
+  POINT  3343  16.51179666393882  26.6239501026226
+  POINT  3344  18.1251910242728  22.66390416293884
+  POINT  3345  18.38730066575757  22.23230127821533
+  POINT  3346  18.87782298075228  22.24485624002787
+  POINT  3347  18.30109750604809  23.11887529175939
+  POINT  3348  18.75407461365194  23.14583948729189
+  POINT  3349  19.25336766894756  22.67096916601431
+  POINT  3350  19.18732501041783  23.0950223359802
+  POINT  3351  19.76177108442964  23.07772703249995
+  POINT  3352  13.22907297795537  11.13290668839839
+  POINT  3353  12.97061925836632  10.68124856516747
+  POINT  3354  12.46766895126554  10.67227901173746
+  POINT  3355  12.97143653644138  11.58072012917699
+  POINT  3356  13.4844546615271  11.58282112395052
+  POINT  3357  12.45912907450942  11.5804496180641
+  POINT  3358  12.71451075808115  12.03036405361623
+  POINT  3359  -7.335668197682937  22.20031115705586
+  POINT  3360  -7.590411055385765  22.64051999376785
+  POINT  3361  -6.827537248934346  22.20035519110679
+  POINT  3362  -6.573651574572926  22.64022353991485
+  POINT  3363  -6.319913095875537  22.20029198565057
+  POINT  3364  -5.813247200796855  22.20059393150383
+  POINT  3365  -5.306832057388836  22.20081300727318
+  POINT  3366  -6.067132875158276  21.76072558269578
+  POINT  3367  -5.81454204920424  21.32106756251621
+  POINT  3368  -5.309100236308474  21.32171516131793
+  POINT  3369  -9.89088523942082  17.79886411983713
+  POINT  3370  -10.14857204283547  18.23918999542934
+  POINT  3371  -9.377722815740299  17.79898156357048
+  POINT  3372  -9.121932143058153  18.23935021686822
+  POINT  3373  -9.377649624192905  18.6793738168293
+  POINT  3374  -10.66209369019408  15.59357842031993
+  POINT  3375  -10.4047259333652  16.03513252143312
+  POINT  3376  -9.890767799768657  16.03514342813541
+  POINT  3377  -15.5551069052719  19.54892678731335
+  POINT  3378  -15.97007772814454  19.09864623920131
+  POINT  3379  -16.11086108382489  19.54894292435325
+  POINT  3380  -15.08631065964352  19.54931079809318
+  POINT  3381  -15.22709401532387  19.99960748324512
+  POINT  3382  -11.95485738736122  20.44085699368801
+  POINT  3383  -12.47133467813871  20.44086208506123
+  POINT  3384  -12.2071089926688  20.00000805384752
+  POINT  3385  -12.48035172922288  21.32047778514489
+  POINT  3386  -11.95880860940138  21.32105241155066
+  POINT  3387  -12.22007726579314  21.75981917179383
+  POINT  3388  -11.69942419611676  20.88138349347376
+  POINT  3389  -17.47644814565474  19.54717789841071
+  POINT  3390  -17.94988903481506  19.54747252881383
+  POINT  3391  -17.76408314933547  19.99954839206847
+  POINT  3392  -18.23422300064733  19.09467791728322
+  POINT  3393  -17.87676913679358  18.65944248023681
+  POINT  3394  -17.09404296891593  19.09688220569864
+  POINT  3395  -16.90823708343633  19.54895806895328
+  POINT  3396  -19.76177103771798  23.07772732892936
+  POINT  3397  -19.25336756698695  22.67096898371729
+  POINT  3398  -19.18732490419377  23.0950221392252
+  POINT  3399  -19.4477189002975  22.22685220009963
+  POINT  3400  -19.87859220361732  22.20035725566065
+  POINT  3401  -19.25792784453962  23.55188835030948
+  POINT  3402  -18.75407461812375  23.14583867813167
+  POINT  3403  -19.16298007020004  24.02058528839067
+  POINT  3404  -19.60183463285162  23.97090406750409
+  POINT  3405  -17.87637073668006  21.33989279033893
+  POINT  3406  -17.34486803521384  21.33058393944672
+  POINT  3407  -17.55962675727944  21.76632022241122
+  POINT  3408  -17.09376266137075  20.90344544375881
+  POINT  3409  -16.77701868197013  21.3298728758311
+  POINT  3410  -17.4761271373948  20.45170513451989
+  POINT  3411  -16.90827778415109  20.45099407090427
+  POINT  3412  -17.94956802655513  20.45199976492301
+  POINT  3413  -18.23371022509465  20.90481762695371
+  POINT  3414  -15.02942422141325  28.42914654430462
+  POINT  3415  -14.7671126385203  27.97953118420565
+  POINT  3416  -15.52045268491218  27.53143128093732
+  POINT  3417  -15.78702266040701  27.9945786571865
+  POINT  3418  -15.54890495492492  28.43938079825739
+  POINT  3419  -15.01758100424557  27.52935438202635
+  POINT  3420  -14.50521687329288  27.52387632798913
+  POINT  3421  -9.904430672806125  28.40707065619491
+  POINT  3422  -10.41689547651911  28.41240707877134
+  POINT  3423  -10.66929721457722  27.96611203768271
+  POINT  3424  -10.92866096154303  28.41597287549923
+  POINT  3425  -9.645779006227713  27.95898668411711
+  POINT  3426  -9.392677949480536  28.4035110993572
+  POINT  3427  -10.41083773720197  27.51739624213824
+  POINT  3428  -9.899141965330045  27.51510256681794
+  POINT  3429  -10.15244797297871  27.06995256800136
+  POINT  3430  -12.99581434484171  20.4418189497832
+  POINT  3431  -13.51014574115279  20.441823572053
+  POINT  3432  -13.23791767975737  20.00001776749054
+  POINT  3433  -13.00483139592588  21.32143464986686
+  POINT  3434  -13.53137837642367  21.32075092653462
+  POINT  3435  -13.26816736611243  21.75856082205582
+  POINT  3436  -12.74356273953413  20.88266788962369
+  POINT  3437  -13.79945752002789  20.88653779646463
+  POINT  3438  -14.06279349021444  21.32366396865359
+  POINT  3439  -13.00253550757575  22.19714766326392
+  POINT  3440  -13.52908248807354  22.19646393993168
+  POINT  3441  -16.2347869870319  21.3294814436242
+  POINT  3442  -16.48589236087499  21.75661993931211
+  POINT  3443  -12.19975810951217  27.07290291179299
+  POINT  3444  -12.4571711074429  27.52124904151294
+  POINT  3445  -12.9694803662368  27.52097783922964
+  POINT  3446  -12.45674394638519  26.62593741289694
+  POINT  3447  -13.99578690627322  27.52331351175184
+  POINT  3448  -14.24625527199849  27.07313670957253
+  POINT  3449  -13.48182261231196  27.52097247150653
+  POINT  3450  -13.22448305890368  27.07257926105835
+  POINT  3451  -16.51179676394965  26.62394911594787
+  POINT  3452  -16.76214593621621  26.16105509049696
+  POINT  3453  -16.01909528016721  26.61667970802645
+  POINT  3454  -15.77567611970079  26.15848881210691
+  POINT  3455  -16.6164827210978  25.71543822133669
+  POINT  3456  -17.10186669733096  25.72098721941252
+  POINT  3457  -14.2878073219469  25.27536783225349
+  POINT  3458  -14.55271790511985  24.83011743787473
+  POINT  3459  -8.872303159269968  26.61976418580748
+  POINT  3460  -9.383403717149058  26.62219230704299
+  POINT  3461  -8.615525103211919  26.17503638397946
+  POINT  3462  -8.361773029290564  26.61807484838205
+  POINT  3463  -6.072689306874938  27.05391647376855
+  POINT  3464  -5.820129147476668  27.49712192171329
+  POINT  3465  -6.32809711573065  27.4985865281558
+  POINT  3466  -8.108499361881071  27.06075324214968
+  POINT  3467  -7.851721305823022  26.61602544032166
+  POINT  3468  -7.342393531093229  26.61452723488857
+  POINT  3469  -7.595667198502723  26.17184884112093
+  POINT  3470  -7.089552456771225  27.05704245715018
+  POINT  3471  -6.833498349450926  26.61286585794945
+  POINT  3472  -8.86778693118517  24.84742870791405
+  POINT  3473  -9.124384612345526  25.29019441464502
+  POINT  3474  -9.37915421259267  24.8485055322633
+  POINT  3475  -8.869536282064676  25.73292165585033
+  POINT  3476  -9.380903563472174  25.73399848019958
+  POINT  3477  -8.359006152085271  25.7312323184249
+  POINT  3478  -8.357038518711398  24.84664678923989
+  POINT  3479  -10.66208748767119  24.40642264890459
+  POINT  3480  -10.40472005439022  23.96486714250717
+  POINT  3481  -9.890762707770147  23.96485666497387
+  POINT  3482  -10.14796982013292  23.52313091779618
+  POINT  3483  -9.635034736729882  24.4061663576086
+  POINT  3484  -9.891632417890238  24.84893206433957
+  POINT  3485  -10.91783258828627  25.73632062930466
+  POINT  3486  -11.1763927535566  25.29161367806042
+  POINT  3487  -10.91909643785067  24.8491689242055
+  POINT  3488  -10.40452189220693  24.84933916498578
+  POINT  3489  -10.14864136806972  25.29167833964048
+  POINT  3490  -11.74873160124686  31.58187192779659
+  POINT  3491  -11.49828734891701  32.00603316279637
+  POINT  3492  -11.47479874651534  31.12093311396852
+  POINT  3493  -11.99907724384035  31.14306172093513
+  POINT  3494  -8.903187047443012  31.09050659247998
+  POINT  3495  -8.391529066814227  31.08429727879821
+  POINT  3496  -9.153056137445173  30.63961932778357
+  POINT  3497  -9.398187070199079  29.29658412996691
+  POINT  3498  -9.657774617851228  29.74665905739351
+  POINT  3499  -8.893751625915996  30.18945879004375
+  POINT  3500  -8.634397568876253  29.73884359430083
+  POINT  3501  -8.383104670453044  30.18672919584575
+  POINT  3502  -9.404349035868384  30.19173372623865
+  POINT  3503  -9.917079129380406  30.19681959513333
+  POINT  3504  -11.43712146196009  23.08138062463141
+  POINT  3505  -10.92066341043863  23.08206159128155
+  POINT  3506  -10.92128239036736  22.20090962423238
+  POINT  3507  -11.43896690004795  22.20068779271661
+  POINT  3508  -10.40485749578829  23.08231672552517
+  POINT  3509  -9.890900149168209  23.08230624799187
+  POINT  3510  -9.634625983220046  22.64137541680352
+  POINT  3511  -10.66359373947392  22.64123692147724
+  POINT  3512  -10.40547647571701  22.201164758476
+  POINT  3513  -10.66371310846123  20.88088246173954
+  POINT  3514  -10.40367257665969  20.44035401979257
+  POINT  3515  -10.40541301206526  21.32077321133221
+  POINT  3516  -9.8901701579261  20.44035371858478
+  POINT  3517  -10.14618183706572  19.99999877694407
+  POINT  3518  -9.634491342600295  20.88059096244695
+  POINT  3519  -6.573652952599984  17.35977611294056
+  POINT  3520  -6.827538661488333  17.79964423723647
+  POINT  3521  -7.335669920285115  17.79968797825121
+  POINT  3522  -6.827402180000886  16.91959841386031
+  POINT  3523  -7.335858102257347  16.9191701018657
+  POINT  3524  -7.590413254981577  17.35947930332449
+  POINT  3525  -3.091725092272973  19.99999995889544
+  POINT  3526  -2.823024423095185  20.44465006103595
+  POINT  3527  -2.82302446192895  19.55534988331524
+  POINT  3528  -2.318125036326323  19.55191484953968
+  POINT  3529  -2.134926559547786  19.9999999853544
+  POINT  3530  -2.359753808315156  39.37214496437061
+  POINT  3531  -2.220681201259319  39.87633202954547
+  POINT  3532  -2.853428424545745  39.31281750216315
+  POINT  3533  -3.322774736378872  39.23779911173357
+  POINT  3534  -3.813302945216087  39.15997614437607
+  POINT  3535  -4.091233566165744  39.57707352541702
+  POINT  3536  -4.278277613788639  39.06280534020281
+  POINT  3537  -3.156650010923889  39.74931797899575
+  POINT  3538  -3.033012362958341  30.6117523199572
+  POINT  3539  -2.778186554918571  31.06104208632408
+  POINT  3540  -2.27138793410801  31.06354594879045
+  POINT  3541  -2.523911917777087  31.51196219615595
+  POINT  3542  -2.019774925652819  30.61385000253146
+  POINT  3543  -1.765500288511335  31.06477011236333
+  POINT  3544  -2.779450402058304  30.16459938073862
+  POINT  3545  -3.286800193767151  30.16372586173725
+  POINT  3546  -3.794281249655442  30.16411092827807
+  POINT  3547  -3.540719288755405  29.71695798905948
+  POINT  3548  -4.303205754685972  30.16454776931187
+  POINT  3549  -3.027617960595887  32.41056575188199
+  POINT  3550  -2.775003207540966  31.96212546436659
+  POINT  3551  -2.268204586730404  31.96462932683296
+  POINT  3552  -2.013562100740824  32.41916396507942
+  POINT  3553  -1.762470810976946  31.96900069686879
+  POINT  3554  -2.77002899331762  32.86450527990432
+  POINT  3555  -3.278351077419224  32.86027843674272
+  POINT  3556  -2.262552160354756  32.87152776282665
+  POINT  3557  -2.513285277178094  33.32124044768738
+  POINT  3558  -1.512133134743765  31.51667171366356
+  POINT  3559  -1.257490648754185  31.97120635191003
+  POINT  3560  -0.7545339478042523  31.97468651214141
+  POINT  3561  -0.5035764459107245  31.51991166117807
+  POINT  3562  -0.7557251001955001  31.06778971354904
+  POINT  3563  -1.260520126288574  31.06697576740457
+  POINT  3564  -1.997791297947086  34.24333855669495
+  POINT  3565  -2.25349817785614  33.77894139916177
+  POINT  3566  -2.760975010819003  33.77191891623943
+  POINT  3567  -3.011955447586298  34.2203681171806
+  POINT  3568  -3.271742546908253  33.76266716570622
+  POINT  3569  -2.748277227128552  34.67648604901853
+  POINT  3570  -3.259044763217802  34.66723429848531
+  POINT  3571  -2.242930952922364  34.69789100853247
+  POINT  3572  -10.99496194121145  34.7558609147853
+  POINT  3573  -11.47394482127665  34.67289318116666
+  POINT  3574  -10.72127300001099  35.18620741077456
+  POINT  3575  -10.447732383235  34.72460493961236
+  POINT  3576  -11.39311640574461  35.78402816783584
+  POINT  3577  -11.76362390176834  35.51004748537068
+  POINT  3578  -11.89139445142899  36.08088113093766
+  POINT  3579  -10.945244583311  30.21194894494906
+  POINT  3580  -11.20910920668068  30.66888033631249
+  POINT  3581  -10.95876356408719  31.10769054317395
+  POINT  3582  -10.43863904361896  31.09908334789622
+  POINT  3583  -10.70432858345361  31.55113612555225
+  POINT  3584  -10.17836378582505  30.6487660147482
+  POINT  3585  -10.43178936780789  30.20369134590305
+  POINT  3586  -12.20772792247103  28.87130307528364
+  POINT  3587  -11.95934239545081  29.3298295299858
+  POINT  3588  -11.44840757865733  29.32083401178019
+  POINT  3589  -11.18782961921505  28.86783790788402
+  POINT  3590  -11.95080070850122  28.4216606767123
+  POINT  3591  -11.44023135727316  28.42154286679538
+  POINT  3592  -12.78538354685579  31.63539654824448
+  POINT  3593  -13.08141318168281  32.09785280557013
+  POINT  3594  -13.69337999756491  33.05046757946367
+  POINT  3595  -14.20287042370327  33.22861936316023
+  POINT  3596  -13.9643465646559  33.62431331178948
+  POINT  3597  -14.50371229213761  32.89870088682812
+  POINT  3598  -14.7783619362536  33.47590510864688
+  POINT  3599  -14.33939456995485  32.47590094466933
+  POINT  3600  -13.3984866124191  32.59184334012446
+  POINT  3601  -13.61483042587599  32.16078309628009
+  POINT  3602  -12.5094486201497  31.15885540730061
+  POINT  3603  -12.23551576541817  30.69791659347253
+  POINT  3604  -12.48258595884198  30.24998072031472
+  POINT  3605  -13.02182206843361  31.19025142078188
+  POINT  3606  -13.23628259023528  30.6875215539166
+  POINT  3607  -13.51221751694137  31.16406269486048
+  POINT  3608  -12.98553667078657  30.24101005064971
+  POINT  3609  -9.935933060425999  31.99895783017763
+  POINT  3610  -9.425788712629927  31.99952776172602
+  POINT  3611  -9.175113162335302  32.44721817562974
+  POINT  3612  -9.433884308094877  32.90351985240996
+  POINT  3613  -9.947998399553743  32.91366946294919
+  POINT  3614  -9.694220649782007  33.36180258527841
+  POINT  3615  -5.845709714652145  32.8543394931615
+  POINT  3616  -6.35943259227712  32.85785448154385
+  POINT  3617  -6.099796641324188  32.4084027857334
+  POINT  3618  -6.620526367917938  33.30931460020675
+  POINT  3619  -6.874613294589981  32.86337789277866
+  POINT  3620  -5.843830266875138  33.74469076224041
+  POINT  3621  -6.366502908847091  33.75556165131462
+  POINT  3622  -6.104987510117153  34.19646122458308
+  POINT  3623  -6.881683611159954  33.76108506254942
+  POINT  3624  -8.152299853281146  32.43384481530836
+  POINT  3625  -7.904575766385607  32.88643722911405
+  POINT  3626  -7.38887125499455  32.87173901043978
+  POINT  3627  -7.651411581621856  33.32953623011583
+  POINT  3628  -7.891317422946985  31.97994508772288
+  POINT  3629  -7.127777479353732  32.42027889177689
+  POINT  3630  5.815416780370211  25.7254507508302
+  POINT  3631  6.068349777660536  25.28383032121751
+  POINT  3632  6.322914497966334  25.72626412073013
+  POINT  3633  5.813813981238598  24.84216926607556
+  POINT  3634  5.054251193044102  25.28243436294704
+  POINT  3635  5.306981751859498  24.8417834592201
+  POINT  3636  5.559943673033683  24.40093577397807
+  POINT  3637  6.584305206584972  27.94375248790075
+  POINT  3638  6.331860450220269  28.38790682772228
+  POINT  3639  6.840628663734527  28.38986729253429
+  POINT  3640  6.328097160904627  27.49858657198942
+  POINT  3641  5.31221078469278  27.49556469000557
+  POINT  3642  5.057585437902588  27.05131477146023
+  POINT  3643  5.817351437794507  26.61016822842614
+  POINT  3644  6.072689351825773  27.05391651369978
+  POINT  3645  6.325319414707275  26.61163283561645
+  POINT  3646  5.82012918399186  27.49712196479911
+  POINT  3647  5.567618593771634  27.9402347482952
+  POINT  3648  4.047052787592788  28.82584698915801
+  POINT  3649  4.29983719277504  28.38154452099692
+  POINT  3650  4.807024232846825  28.38271374491336
+  POINT  3651  4.301274310468107  29.2720465985073
+  POINT  3652  4.809682020990673  29.27320084424044
+  POINT  3653  4.549022188976916  26.16510838289133
+  POINT  3654  4.802971287585841  26.60801534827591
+  POINT  3655  4.296500402283245  26.6072706710264
+  POINT  3656  5.310107224596258  26.60915248332515
+  POINT  3657  5.56273728747776  26.16686880524183
+  POINT  3658  5.308172567171963  25.72443500572921
+  POINT  3659  4.801571700151651  25.72385241735866
+  POINT  3660  3.790057682711869  26.60644965824722
+  POINT  3661  4.044006781320794  27.04935662363181
+  POINT  3662  3.284985274934477  27.49173672429433
+  POINT  3663  3.031723737372097  27.04803779814592
+  POINT  3664  3.284192748221195  26.60594750772882
+  POINT  3665  3.791445088039201  27.4924373182607
+  POINT  3666  7.595667276623683  26.1718488829917
+  POINT  3667  7.339729660651949  25.72854265913015
+  POINT  3668  6.831093491921173  25.72749718220235
+  POINT  3669  6.578160494630848  26.16911761181503
+  POINT  3670  6.833498408662114  26.61286589708867
+  POINT  3671  7.342393603714925  26.61452727784253
+  POINT  3672  7.851721391752919  26.61602548754698
+  POINT  3673  10.16379461741962  28.8569316742142
+  POINT  3674  9.910917354739734  29.30167017583803
+  POINT  3675  10.42338218073125  29.30700664681063
+  POINT  3676  9.398187236685452  29.296584259916
+  POINT  3677  11.1763929467876  25.29161378016803
+  POINT  3678  11.43269470633229  25.73584899017798
+  POINT  3679  11.17575978189087  27.0727338951912
+  POINT  3680  11.43421927431302  27.52144974007221
+  POINT  3681  10.92260343334439  27.52096222835202
+  POINT  3682  11.43075507899234  26.62688867729366
+  POINT  3683  11.95934260436991  29.32983015861389
+  POINT  3684  12.46767046560084  29.32772545608889
+  POINT  3685  12.20772811265096  28.87130363239207
+  POINT  3686  12.48258604719192  30.24998189542344
+  POINT  3687  11.97221474555926  30.23418783961753
+  POINT  3688  12.23551583543139  30.69791775273026
+  POINT  3689  12.9694805256095  27.52097823699379
+  POINT  3690  13.48182274384587  27.52097291958309
+  POINT  3691  13.74078426771563  27.97171267290139
+  POINT  3692  13.99578697125026  27.52331403777258
+  POINT  3693  -0.2530784093217016  18.66225344208705
+  POINT  3694  0.2530784208222577  18.66225344183592
+  POINT  3695  6.030645871568652e-09  18.22651105844045
+  POINT  3696  0.5081910055071862  19.09773258580186
+  POINT  3697  -0.5081909940579249  19.09773258612098
+  POINT  3698  0.3913327604803437  19.54899791355816
+  POINT  3699  2.734955073611239e-09  19.54899791274126
+  POINT  3700  -0.3913327526621249  19.54899791355815
+  POINT  3701  3.794281045691874  9.835889181209401
+  POINT  3702  3.286800036582792  9.836274197162457
+  POINT  3703  2.229340800261039  4.38442472316282
+  POINT  3704  1.730980420814213  4.354398366661153
+  POINT  3705  1.975648040643678  3.904985248730975
+  POINT  3706  5.253303014360708  1.128293718388772
+  POINT  3707  5.02628530891481  0.6418891392761246
+  POINT  3708  2.255436532179687  1.571943194814049
+  POINT  3709  1.982157162102268  2.023904119430414
+  POINT  3710  2.749111535735891  1.631270413254645
+  POINT  3711  -1.254058521951619  7.116431779054716
+  POINT  3712  -0.7511018940799036  7.112951583302987
+  POINT  3713  -1.503048503853604  6.664068013225982
+  POINT  3714  -1.997790841279557  5.756661654557217
+  POINT  3715  -1.739533928644415  5.288390381777326
+  POINT  3716  -2.242930398731676  5.302109189546279
+  POINT  3717  -1.241669088051592  5.270356204654476
+  POINT  3718  -0.9957604298274654  5.733872215635875
+  POINT  3719  -1.247341652262671  6.199670785960144
+  POINT  3720  -0.7487077108978402  6.190600154807756
+  POINT  3721  -1.750101222783229  6.207340074054102
+  POINT  3722  0.2525804711664861  16.03806627312495
+  POINT  3723  0.7575089779655068  16.03809741945602
+  POINT  3724  2.02030624750022  16.47789565447198
+  POINT  3725  1.768522151534456  16.91607496170236
+  POINT  3726  1.263131370718908  16.9154812897201
+  POINT  3727  1.010191697747241  16.47724942348051
+  POINT  3728  0.7581006050570804  16.91517093599549
+  POINT  3729  1.767492760883478  16.03853792054329
+  POINT  3730  1.262539743627335  16.03840777318063
+  POINT  3731  2.020500917581566  12.9527349076961
+  POINT  3732  2.27331260158336  12.50912505089398
+  POINT  3733  2.779144928744407  12.50876122906312
+  POINT  3734  3.031723754127154  12.95196235014854
+  POINT  3735  2.778352454165535  13.39455042727942
+  POINT  3736  2.272957833603747  13.3948329253368
+  POINT  3737  2.525426876575043  13.8369232187498
+  POINT  3738  2.777506896019309  15.1594754466739
+  POINT  3739  2.272346079797352  15.15939314985943
+  POINT  3740  2.019831152532347  14.71933669397711
+  POINT  3741  3.030366570726561  14.7190708982712
+  POINT  3742  2.272480678625036  14.27823797632229
+  POINT  3743  2.777875299186825  14.27795547826491
+  POINT  3744  10.93683714441736  10.68473936450384
+  POINT  3745  10.42338210640577  10.69299645121282
+  POINT  3746  10.16379499462924  11.14307136444035
+  POINT  3747  9.91091727032488  10.69833236588283
+  POINT  3748  10.41689657692929  11.58759618069605
+  POINT  3749  9.904431740848405  11.59293209536606
+  POINT  3750  8.383104263115078  9.813271926383957
+  POINT  3751  8.131409992405931  9.367205411144512
+  POINT  3752  9.398187257932385  10.70341785754419
+  POINT  3753  9.657774369708918  10.25334294431667
+  POINT  3754  8.893751225144806  9.810542586143804
+  POINT  3755  8.634397395286692  10.26115777621818
+  POINT  3756  8.886484135943755  10.70714689312742
+  POINT  3757  9.13962703655972  11.15213631469359
+  POINT  3758  9.404348514274115  9.808267818781912
+  POINT  3759  9.153055382102501  9.360381968947689
+  POINT  3760  8.872305329160442  13.38023764365699
+  POINT  3761  8.361774760572246  13.38192662649333
+  POINT  3762  8.108500687104918  12.93924814391208
+  POINT  3763  7.851722750806532  13.38397571670315
+  POINT  3764  9.129653596289845  12.93477140237956
+  POINT  3765  9.383406228579656  13.37780999233429
+  POINT  3766  8.365440776821156  12.49364881518358
+  POINT  3767  8.880975687566195  11.60022015801457
+  POINT  3768  8.623178158666493  12.04733677120861
+  POINT  3769  8.876290078715968  12.4908870097273
+  POINT  3770  9.387390978135182  12.48845935840459
+  POINT  3771  9.645780391854883  12.04101593868705
+  POINT  3772  9.392678809554825  11.59649112243135
+  POINT  3773  7.336521171883755  16.03802297080912
+  POINT  3774  6.828065241427138  16.03845128541167
+  POINT  3775  7.5918329762552  15.59662152541176
+  POINT  3776  7.845750620519943  16.03722595032059
+  POINT  3777  7.337862589465587  15.15534235318604
+  POINT  3778  5.057585641163165  12.94868558387678
+  POINT  3779  5.310107534158264  13.39084788872668
+  POINT  3780  5.817351898032172  13.38983223877548
+  POINT  3781  6.07268977213729  12.94608405296639
+  POINT  3782  6.325320010388582  13.38836776247147
+  POINT  3783  5.312210950489913  12.50443571161929
+  POINT  3784  5.820129413724779  12.50287853813417
+  POINT  3785  7.339731120788066  14.27145814743096
+  POINT  3786  7.595668707268915  13.82815216683726
+  POINT  3787  6.578161363273717  13.83088304133535
+  POINT  3788  6.833499237378835  13.38713485552626
+  POINT  3789  7.342394633801588  13.38547368425602
+  POINT  3790  0.252580463343477  23.08531079540609
+  POINT  3791  8.162767350938793e-09  23.52306095911839
+  POINT  3792  -0.2525804483660444  23.08531079452379
+  POINT  3793  0.7575089608641339  23.96190261703586
+  POINT  3794  1.010191668996723  23.52275060745893
+  POINT  3795  0.7581005854889762  23.08482908796231
+  POINT  3796  0.2525804650598689  23.96193376174162
+  POINT  3797  -0.2525804466496525  23.96193376085932
+  POINT  3798  0.5049285060517139  24.40077541877679
+  POINT  3799  -0.5055201152249069  22.64707892226741
+  POINT  3800  -0.7581005704056165  23.08482908597971
+  POINT  3801  -2.280691500226466  21.33225925503491
+  POINT  3802  -2.53596148453538  20.89273520120051
+  POINT  3803  -2.318125017725038  20.44808511706579
+  POINT  3804  -1.847863620987981  20.44808512551896
+  POINT  3805  -1.523722029333108  20.89935045509462
+  POINT  3806  5.812596363012457  16.91987591856731
+  POINT  3807  6.066345594955665  16.47969821633841
+  POINT  3808  5.052976709870697  16.47984331586753
+  POINT  3809  5.306138118529179  16.03968129951453
+  POINT  3810  3.790935938593665  22.20328485170038
+  POINT  3811  3.537066694466712  22.64267534247436
+  POINT  3812  3.788945299949968  23.08133297666114
+  POINT  3813  4.294456576555887  23.08098941943979
+  POINT  3814  5.814542622740053  18.67893193273223
+  POINT  3815  6.321208749925488  18.67923371051273
+  POINT  3816  5.56317568611094  19.11824430305507
+  POINT  3817  5.309100721439222  18.67828449587171
+  POINT  3818  5.55961311789328  17.35962041953518
+  POINT  3819  5.306832701253025  17.79918676761919
+  POINT  3820  5.306180989556889  16.91965690872165
+  POINT  3821  4.547661231803737  17.3588241803909
+  POINT  3822  4.799993464751521  16.91958781683539
+  POINT  3823  4.801296726707842  17.79849881202905
+  POINT  3824  4.295760214073866  17.79792158273044
+  POINT  3825  5.054931683523153  18.23828416995873
+  POINT  3826  4.80356474689404  18.67759654028158
+  POINT  3827  4.299173611489742  18.6763503095416
+  POINT  3828  3.290304316514962  18.67294152057774
+  POINT  3829  3.035034337010901  18.23341748971889
+  POINT  3830  3.285878391294609  17.79579279452859
+  POINT  3831  3.790936184735975  17.79671510214655
+  POINT  3832  4.04457167964008  18.2363897337847
+  POINT  3833  3.794349582151851  18.67514382895771
+  POINT  3834  10.40547659015908  22.20116479457716
+  POINT  3835  10.92128251969344  22.20090966781737
+  POINT  3836  10.14796994537765  23.52313096986383
+  POINT  3837  9.8907628324997  23.96485671831825
+  POINT  3838  10.40472019475341  23.96486720377927
+  POINT  3839  9.890900260175624  23.08230629000788
+  POINT  3840  9.378284610504384  23.96443017775849
+  POINT  3841  9.377738405713401  23.08218964573298
+  POINT  3842  9.634626082765084  22.64137545133806
+  POINT  3843  8.099972523597952  21.7604283165895
+  POINT  3844  7.844935974709012  21.32035791039074
+  POINT  3845  5.052976083273045  23.52015672445931
+  POINT  3846  5.306137433620915  23.96031879840885
+  POINT  3847  5.812969663000015  23.9607046052643
+  POINT  3848  8.610566754219654  19.11957081809886
+  POINT  3849  8.86560419797468  18.67950029477104
+  POINT  3850  8.354849270149012  18.67954721468524
+  POINT  3851  4.553342440596749  20.88364911748843
+  POINT  3852  4.813437754880869  20.4412013335515
+  POINT  3853  7.59041331172436  17.35947928465035
+  POINT  3854  7.84499397090196  16.91893659852759
+  POINT  3855  -19.25787296088819  16.44788827908155
+  POINT  3856  -19.60184782149814  16.02916106451099
+  POINT  3857  -19.1873871451938  16.90476537360675
+  POINT  3858  -19.76179636729207  16.92243533655163
+  POINT  3859  -18.75405232838112  16.85355871501342
+  POINT  3860  -17.47351228606856  13.33558852399519
+  POINT  3861  -16.99713742559343  13.37046042966367
+  POINT  3862  -17.69351481734877  13.78071241680643
+  POINT  3863  -17.67256727113895  14.23260684746697
+  POINT  3864  -17.10180880051252  14.27897349996412
+  POINT  3865  -17.52690194145971  14.67823884343126
+  POINT  3866  -18.11860795829596  14.17997776027357
+  POINT  3867  -8.872305209312021  13.38023770553157
+  POINT  3868  -8.615527284439597  13.82496527042976
+  POINT  3869  -9.383406088516729  13.37781006740056
+  POINT  3870  -3.29030430028144  18.67294152375674
+  POINT  3871  -3.794349564136366  18.67514383248151
+  POINT  3872  -4.044571659990828  18.23638973901306
+  POINT  3873  -3.790936165766305  17.79671510855067
+  POINT  3874  -4.295760192767313  17.79792158977951
+  POINT  3875  -3.035034321141562  18.23341749366453
+  POINT  3876  -4.801296702384416  17.79849882003976
+  POINT  3877  -4.547661208159893  17.35882418957737
+  POINT  3878  -5.306180959737993  16.91965692151171
+  POINT  3879  -5.55961308673966  17.35962043087595
+  POINT  3880  -5.306832673423715  17.79918677637247
+  POINT  3881  -4.799993438895712  16.91958782835436
+  POINT  3882  -4.294456929278608  16.9190105980941
+  POINT  3883  -2.272576526046017  16.03887380690432
+  POINT  3884  -2.777737341802472  16.0389561054949
+  POINT  3885  -2.524923853949907  15.59959837248141
+  POINT  3886  -1.009801502771103  14.71943838905496
+  POINT  3887  -1.262295091084871  15.15932946921788
+  POINT  3888  -1.767248108404131  15.15945961891492
+  POINT  3889  -1.514810020874192  15.59938592419379
+  POINT  3890  -3.788433924444957  15.15930010017922
+  POINT  3891  -3.282944342657759  15.15927612630229
+  POINT  3892  -3.53557425149356  15.59970464494893
+  POINT  3893  -7.339731052101191  14.27145818376952
+  POINT  3894  -7.595668629168774  13.82815220873106
+  POINT  3895  -7.849059155801069  14.26996022049591
+  POINT  3896  -7.342394561194965  13.3854737272261
+  POINT  3897  -7.084485066391316  14.7143115191922
+  POINT  3898  -6.829226012364133  15.15638770751324
+  POINT  3899  -6.321312708705147  15.15701776202244
+  POINT  3900  -6.068350603934552  14.71617011524867
+  POINT  3901  -6.322915322587308  14.27373641192795
+  POINT  3902  -5.815417372472714  14.27454968432659
+  POINT  3903  -6.831094539759021  14.27250350742734
+  POINT  3904  -6.578161308297183  13.83088307650527
+  POINT  3905  -8.866490968805563  16.03593620740154
+  POINT  3906  -8.611811380443392  15.59504271031803
+  POINT  3907  -9.378288849377203  16.03556985539014
+  POINT  3908  -9.6350393648364  15.59383445480634
+  POINT  3909  -9.379158137016026  15.15149576728833
+  POINT  3910  -9.89163708740748  15.1510693400336
+  POINT  3911  -15.8358398935749  10.22173585196274
+  POINT  3912  -15.57327200390477  9.802417738572654
+  POINT  3913  -15.56201444033999  10.67148502492812
+  POINT  3914  -15.03253570609934  9.806583202382573
+  POINT  3915  -14.77952317432621  10.24189580191657
+  POINT  3916  9.425787409990559  8.000472836505047
+  POINT  3917  9.674058285545414  8.456902013814751
+  POINT  3918  8.913238706756516  8.008641634917387
+  POINT  3919  9.413783458670364  8.907219666364485
+  POINT  3920  8.903186169541055  8.909494433726376
+  POINT  3921  8.934155614066498  6.185727604037459
+  POINT  3922  9.185518368839453  5.729430618608695
+  POINT  3923  8.426271183269629  5.29029227071893
+  POINT  3924  8.171917178443586  5.749542014684138
+  POINT  3925  7.909982677729378  5.316726387461308
+  POINT  3926  7.65715073777133  4.866671726394044
+  POINT  3927  7.405022267322629  4.401754646811489
+  POINT  3928  7.912208212106719  4.392559563913546
+  POINT  3929  7.402796732945287  5.325921470359251
+  POINT  3930  8.404914415163201  4.401060889634398
+  POINT  3931  8.152785944714498  3.936143810051844
+  POINT  3932  8.395983975566867  3.439639257034445
+  POINT  3933  7.903277772510386  3.431137931313593
+  POINT  3934  8.859661009169432  3.521793227546019
+  POINT  3935  9.192238274352787  3.866734673314474
+  POINT  3936  4.268076247259387  3.565481647629336
+  POINT  3937  4.016822549239988  3.997412240786614
+  POINT  3938  3.742622838171702  3.563061153758769
+  POINT  3939  7.792705379504119  2.62557788257827
+  POINT  3940  7.793203652127295  2.025645271244315
+  POINT  3941  7.321623681205077  1.829570466086152
+  POINT  3942  7.678396273741249  1.532671260083118
+  POINT  3943  -9.67405808643629  8.456902308458442
+  POINT  3944  -9.413783282784191  8.907219840486656
+  POINT  3945  -9.425787263000267  8.000473059513219
+  POINT  3946  -9.404348331955575  9.808267994664813
+  POINT  3947  -9.657774187537704  10.2533431194428
+  POINT  3948  -9.398187091428191  10.70341798750657
+  POINT  3949  -8.886483995011314  10.70714699997187
+  POINT  3950  -8.634397277109187  10.26115787334679
+  POINT  3951  -8.375837072421056  10.70987630924256
+  POINT  3952  -7.859855983182076  11.60547875629908
+  POINT  3953  -8.117653499839879  11.15836215444448
+  POINT  3954  -7.865566781937751  10.71237302781939
+  POINT  3955  -7.402798620889166  5.325921535058544
+  POINT  3956  -7.909984549202172  5.316726131062188
+  POINT  3957  -7.91137279652743  6.215871164881401
+  POINT  3958  -7.395668297048518  6.230569439935667
+  POINT  3959  -7.651411014573558  6.670464686753046
+  POINT  3960  -7.127776753374082  7.579721889218547
+  POINT  3961  -7.388870581544597  7.128261877982224
+  POINT  3962  -6.874612686924131  7.136622973043634
+  POINT  3963  -7.904575081023509  7.113563602927958
+  POINT  3964  -2.775002874658712  8.037874849929569
+  POINT  3965  -2.523911656853837  8.48803806266702
+  POINT  3966  -2.748276461706778  5.323514342820022
+  POINT  3967  -2.490019549071636  4.855243070040132
+  POINT  3968  -2.734687480700977  4.405830000443286
+  POINT  3969  -2.221684119951277  3.449608486395616
+  POINT  3970  -1.723323855016578  3.419581979977251
+  POINT  3971  -1.475257769780243  2.932460366680298
+  POINT  3972  -1.727946415087521  2.471297653398232
+  POINT  3973  -2.223574359144033  2.516811469853332
+  POINT  3974  -3.221425371391462  2.620248809612628
+  POINT  3975  -3.480916638529793  3.091370153630558
+  POINT  3976  -2.468657119838987  3.007906638484771
+  POINT  3977  -2.720982349242926  3.493309929661852
+  POINT  3978  -2.722872588435682  2.560512913119568
+  POINT  3979  -5.842877759869626  2.614418369465591
+  POINT  3980  -6.061704181617179  2.125899992841759
+  POINT  3981  -5.97038887687998  1.577324987897494
+  POINT  3982  -5.06120498229036  2.210552055587216
+  POINT  3983  -5.314757330560761  1.807879325032759
+  POINT  3984  -5.55603059107262  1.449150510867695
+  POINT  3985  -5.910338424284915  0.8932498958018659
+  POINT  3986  -5.818442258077686  3.559384883546551
+  POINT  3987  -6.081231365982387  4.02806702834004
+  POINT  3988  -5.831279019722861  4.472379399615662
+  POINT  3989  -5.313338782452499  4.466227623547525
+  POINT  3990  -5.576017782319205  4.91994190717009
+  POINT  3991  -6.359431968524975  7.142146372318731
+  POINT  3992  -6.620525796695491  6.690686361082408
+  POINT  3993  1.233115817299789  35.66363567026767
+  POINT  3994  1.486808643266108  35.18419627849168
+  POINT  3995  0.4944716807918905  35.20892209325812
+  POINT  3996  0.7430350528777356  34.73871437587108
+  POINT  3997  1.24166914315593  34.72964380187346
+  POINT  3998  1.723322487966932  36.58041769429607
+  POINT  3999  1.47525558328076  37.06753926104606
+  POINT  4000  1.229221132046703  36.61216257531929
+  POINT  4001  1.727943080105888  37.52870184484969
+  POINT  4002  2.223571255475589  37.48318802553167
+  POINT  4003  2.221683046657149  36.55039137343753
+  POINT  4004  -6.12911124076021e-07  36.15975594917647
+  POINT  4005  0.2456022332246583  35.68768488038043
+  POINT  4006  0.7400741502994709  35.68099311908834
+  POINT  4007  0.9842463697325569  36.14239845738996
+  POINT  4008  0.7361794650463853  36.62952002413996
+  POINT  4009  0.2456016905429583  36.6413100607267
+  POINT  4010  -3.793978809704677  29.27114346488373
+  POINT  4011  -3.286497753816385  29.27075839834291
+  POINT  4012  -4.047052767131356  28.82584690724009
+  POINT  4013  -4.301274302070375  29.27204649795666
+  POINT  4014  -1.010043015772705  27.0468834923308
+  POINT  4015  -1.262608764623798  27.49047222490107
+  POINT  4016  -1.767930085310411  27.49060023494886
+  POINT  4017  -1.515420458762666  27.93408208316265
+  POINT  4018  0.2524349327400771  25.72146687392503
+  POINT  4019  0.7573603149878654  25.72151113216611
+  POINT  4020  1.009801512786854  25.28056167560054
+  POINT  4021  0.7573634246136738  24.84063535787972
+  POINT  4022  0.2524349288094089  24.84066650258547
+  POINT  4023  2.777737238018064  23.96104396031738
+  POINT  4024  2.524923774235408  24.40040170273027
+  POINT  4025  2.777506791782362  24.84052463209574
+  POINT  4026  3.535574059218396  24.40029545953312
+  POINT  4027  3.282925370480001  23.96061617471239
+  POINT  4028  3.282944215957301  24.84072399033624
+  POINT  4029  12.20022707000518  35.34109407649751
+  POINT  4030  11.70510822545789  35.04850824368519
+  POINT  4031  11.91055210130007  34.50393744856109
+  POINT  4032  12.60489935123083  35.00986841165744
+  POINT  4033  12.66773748228985  35.47670596579247
+  POINT  4034  8.893751753942059  30.18945889408129
+  POINT  4035  9.153056290168134  30.63961947961057
+  POINT  4036  8.131410636714342  30.63279563621241
+  POINT  4037  8.383104759045018  30.18672926891533
+  POINT  4038  8.634397687045755  29.73884369142445
+  POINT  4039  12.58774522600974  32.92273845990162
+  POINT  4040  12.88263711150898  33.38136361259253
+  POINT  4041  11.99490300572006  33.72244417282177
+  POINT  4042  11.76196217222862  33.30918283037465
+  POINT  4043  10.44503879622377  31.98862289521601
+  POINT  4044  9.935933261738526  31.99895822327177
+  POINT  4045  10.19676774154491  32.44505172349099
+  POINT  4046  10.43863927688695  31.09908378942327
+  POINT  4047  9.923929035406161  31.09221194132288
+  POINT  4048  12.04127152589021  32.88444301026691
+  POINT  4049  12.3185949442571  32.49062006753039
+  POINT  4050  11.23899726008386  32.44352050666546
+  POINT  4051  11.49281189047597  32.87706443800342
+  POINT  4052  10.95968790642227  32.8682603267732
+  POINT  4053  1.262715484017742  28.37904364136764
+  POINT  4054  1.768036798549242  28.37917166198487
+  POINT  4055  1.010161265302347  28.82419254739624
+  POINT  4056  2.021045344488098  28.82414552152322
+  POINT  4057  1.767940462475327  29.27066494618034
+  POINT  4058  1.26253538053122  29.27109444816391
+  POINT  4059  2.770029231935803  32.86450580601395
+  POINT  4060  2.513285504693407  33.32124089899702
+  POINT  4061  3.271742772836252  33.76266810178318
+  POINT  4062  3.531281879770986  33.30800649818775
+  POINT  4063  3.782262295813676  33.75645595947597
+  POINT  4064  3.278351258691227  32.86027907795702
+  POINT  4065  2.760975203039712  33.77191946209709
+  POINT  4066  3.011955619082402  34.2203689233853
+  POINT  4067  3.24336847489558  35.56418088173734
+  POINT  4068  3.51170389869557  35.11435420516057
+  POINT  4069  3.259044827222107  34.66723526388904
+  POINT  4070  2.748277257425567  34.67648662420295
+  POINT  4071  3.775382260352405  34.65823650434292
+  POINT  4072  2.490020077115392  35.144757594862
+  POINT  4073  2.734687809839291  35.59417066577944
+  POINT  4074  2.982689819169599  36.0349985828101
+  POINT  4075  5.320196103324097  34.6359031807579
+  POINT  4076  5.838135302791581  34.62975089654809
+  POINT  4077  5.843829338818099  33.7446915717945
+  POINT  4078  5.325945325800963  33.74013958043911
+  POINT  4079  6.104986270073042  34.19646204120262
+  POINT  4080  6.366501732041227  33.75556204313139
+  POINT  4081  7.355184469361421  29.28425732715628
+  POINT  4082  7.097783537365648  28.83658193947715
+  POINT  4083  7.865566929755092  29.28762815642849
+  POINT  4084  7.350228293730351  28.39242759965563
+  POINT  4085  19.44766038638703  17.77297915226804
+  POINT  4086  19.25342567711544  17.32881418384076
+  POINT  4087  19.87861805246748  17.79987630487601
+  POINT  4088  19.7617964066728  16.92243558592404
+  POINT  4089  18.23422309592939  19.09467776603307
+  POINT  4090  17.94988909858838  19.54747247390121
+  POINT  4091  17.87676920727169  18.65944226175127
+  POINT  4092  17.47644822823684  19.54717784596157
+  POINT  4093  17.34509995115183  18.66931480712425
+  POINT  4094  17.09404309109673  19.09688211341927
+  POINT  4095  14.28781180230033  14.72466403349399
+  POINT  4096  14.01051623503285  14.27484065136018
+  POINT  4097  14.53345889310514  14.28002636702044
+  POINT  4098  14.02979336632444  15.1647422550637
+  POINT  4099  9.380906978001171  14.26600341154953
+  POINT  4100  9.12438810215771  14.70980710098454
+  POINT  4101  15.04265771685345  14.28419049908406
+  POINT  4102  14.76536214958597  13.83436711695024
+  POINT  4103  15.51798377903927  13.38033526490094
+  POINT  4104  15.77563980375512  13.8415064727855
+  POINT  4105  15.57188627435891  14.28816954061234
+  POINT  4106  15.0151159829359  13.3824166393444
+  POINT  4107  14.50591715918759  13.37825250728078
+  POINT  4108  14.32789030772291  18.24225940568398
+  POINT  4109  14.06264433374127  18.67628429324169
+  POINT  4110  14.59588283104642  18.67648157009492
+  POINT  4111  14.05735903828086  17.80654303626809
+  POINT  4112  15.97007787533187  19.09864616168911
+  POINT  4113  15.55510702426619  19.54892674781743
+  POINT  4114  15.67915324486533  18.67142187799671
+  POINT  4115  15.13772625968102  18.6705433487333
+  POINT  4116  14.87248028569938  19.104568236291
+  POINT  4117  15.08631080741999  19.54931075553736
+  POINT  4118  16.40287455364234  16.49110362272822
+  POINT  4119  16.17789332204421  16.93847666340548
+  POINT  4120  15.63614396207806  16.93957763712053
+  POINT  4121  16.14372364991884  16.05344993095792
+  POINT  4122  15.61382912052633  16.05886889307093
+  POINT  4123  15.35525573754169  16.49958700177147
+  POINT  4124  15.52045255096381  27.53143212489101
+  POINT  4125  15.7870223740392  27.99457973843145
+  POINT  4126  15.02942399137993  28.42914752056209
+  POINT  4127  14.76711254324515  27.97953196141813
+  POINT  4128  14.51705994325481  28.42366935023485
+  POINT  4129  14.50592923991572  26.62175677982754
+  POINT  4130  14.24625536736449  27.07313717726593
+  POINT  4131  14.50521689123425  27.52387693058424
+  POINT  4132  15.01513786829292  26.61758604679623
+  POINT  4133  15.25855689895291  27.07577709405712
+  POINT  4134  15.01758093935937  27.52935510091147
+  POINT  4135  12.9694811665887  12.47903060881283
+  POINT  4136  12.45717370465674  12.47876009769995
+  POINT  4137  14.50520651711792  12.4761250777077
+  POINT  4138  14.7671040812539  12.02046720497029
+  POINT  4139  13.74078013085571  12.02829134523479
+  POINT  4140  13.9984165723697  11.58047790445619
+  POINT  4141  14.51705381061231  11.57633069980357
+  POINT  4142  11.4484074904361  10.67917014008009
+  POINT  4143  11.95934178620452  10.67017466538644
+  POINT  4144  12.20772768780863  11.12870134727384
+  POINT  4145  11.18783017672887  11.13216622534658
+  POINT  4146  11.9508019094484  11.57834527171309
+  POINT  4147  -6.319776468193496  23.08033815128008
+  POINT  4148  -6.066344452733028  23.52030179118255
+  POINT  4149  -6.827400621252306  23.08040135673631
+  POINT  4150  -5.054931155474743  21.76171557577203
+  POINT  4151  -4.801296232783984  22.20150105449617
+  POINT  4152  -4.299173338283442  21.32364952911328
+  POINT  4153  -4.044571390294786  21.76361015107778
+  POINT  4154  -4.803564411703622  21.32240320854091
+  POINT  4155  -9.890817652390373  18.67925530533506
+  POINT  4156  -10.40541205324793  18.6792215753713
+  POINT  4157  -10.66370535213654  19.1191138197801
+  POINT  4158  -10.92145974258163  18.67904850987438
+  POINT  4159  -10.40367095930107  19.55964298171444
+  POINT  4160  -9.890168540567483  19.55964268050665
+  POINT  4161  -9.634489634605369  19.11940539677126
+  POINT  4162  -10.40452722022296  15.15066274552778
+  POINT  4163  -10.91910259518919  15.1508331382961
+  POINT  4164  -11.1763986356346  14.70838986864997
+  POINT  4165  -10.91783739771569  14.26368314942298
+  POINT  4166  -10.14864599240259  14.70832405800977
+  POINT  4167  -12.73019529136231  15.59870134525367
+  POINT  4168  -12.98766621355665  15.15683558657137
+  POINT  4169  -15.04265746253503  14.28419090907873
+  POINT  4170  -14.53345861723851  14.28002669541752
+  POINT  4171  -17.78489628918051  15.09030875190717
+  POINT  4172  -17.98400083785333  15.51100038825157
+  POINT  4173  -18.29676496075896  15.05256382727852
+  POINT  4174  -17.21413781855408  15.13667540440432
+  POINT  4175  -18.37155338762809  16.42393112019951
+  POINT  4176  -18.3010675719337  16.8808082147247
+  POINT  4177  -18.20721907030622  15.96221804176685
+  POINT  4178  -17.69535039872778  15.99996296639551
+  POINT  4179  -11.18084802879951  18.23937671254223
+  POINT  4180  -11.43914132768812  18.67926895695104
+  POINT  4181  -11.43896743540164  17.79930467995242
+  POINT  4182  -12.99576621508222  19.55819858351203
+  POINT  4183  -13.5100976113933  19.55820320578183
+  POINT  4184  -14.85535659566817  17.374607928817
+  POINT  4185  -14.59059730877303  17.80674048573657
+  POINT  4186  -15.12588788049639  17.81032428898499
+  POINT  4187  -14.57446835462891  16.93461729113196
+  POINT  4188  -15.10975892635227  16.93820109438039
+  POINT  4189  -16.50015666545286  20.45264189053479
+  POINT  4190  -16.08514514186547  20.00088643669584
+  POINT  4191  -16.11090178453964  20.45097892630424
+  POINT  4192  -16.88252114147691  20.00090158129587
+  POINT  4193  -16.50011596473811  19.5506058885838
+  POINT  4194  -18.66035566784347  24.06457908884339
+  POINT  4195  -18.99865817957391  24.48245948801812
+  POINT  4196  -18.88584837729288  24.93009825639208
+  POINT  4197  -19.39363960589392  24.88740656466259
+  POINT  4198  -17.82901974500803  22.20723193084345
+  POINT  4199  -17.29751704354181  22.19792307995124
+  POINT  4200  -18.12519085452415  22.66390362771543
+  POINT  4201  -17.42146697630052  23.53377902746666
+  POINT  4202  -17.69547182462984  24.00000320447274
+  POINT  4203  -17.19821562645829  23.98500536439521
+  POINT  4204  -18.2073784758447  24.03761507800751
+  POINT  4205  -17.98412712600248  24.48884141493606
+  POINT  4206  -18.37170036647084  23.57574087838007
+  POINT  4207  -17.74281660287124  23.09380582796382
+  POINT  4208  -17.24556040469969  23.0788079878863
+  POINT  4209  -18.30109742612498  23.11887466729579
+  POINT  4210  -12.74043249554734  22.63704750337856
+  POINT  4211  -12.47951737358623  22.1991443855027
+  POINT  4212  -11.95797425376473  22.19971901190847
+  POINT  4213  -11.69840700784104  22.64001300642548
+  POINT  4214  -11.95612881567687  23.08041184382327
+  POINT  4215  -13.79175978718601  22.63195086063527
+  POINT  4216  -14.05739164572269  22.19336401942717
+  POINT  4217  -16.69915170518863  23.07149332083817
+  POINT  4218  -16.17786098319811  23.06167189306724
+  POINT  4219  -16.40292005613846  23.50895975961821
+  POINT  4220  -16.20887664909252  22.19021698069621
+  POINT  4221  -16.75110834403075  22.1906084129031
+  POINT  4222  -17.02050133175934  22.63152012133533
+  POINT  4223  -13.99649914138446  26.62119352777317
+  POINT  4224  -14.50592910840412  26.62175634401045
+  POINT  4225  -14.76538162860431  26.16564234700188
+  POINT  4226  -14.53346806546978  25.71999620058877
+  POINT  4227  -14.0105122342672  25.72518479387579
+  POINT  4228  -15.04267671628401  25.71582538537957
+  POINT  4229  -16.66503651825777  23.95642639357603
+  POINT  4230  -16.14374579626725  23.9466049658051
+  POINT  4231  -16.93904136658709  24.42265057058211
+  POINT  4232  -16.68103287029956  24.83472097500758
+  POINT  4233  -17.21421197850009  24.86329994582677
+  POINT  4234  -9.637659354432278  26.17823809135695
+  POINT  4235  -9.895007838390011  26.62370467699503
+  POINT  4236  -10.40670361026193  26.62599835231532
+  POINT  4237  -10.66169890492968  26.18015313981581
+  POINT  4238  -10.40539715902982  25.73591795079784
+  POINT  4239  -9.892507684713129  25.73551085015163
+  POINT  4240  -3.538866270674407  27.93563837319875
+  POINT  4241  -3.791445061003568  27.4924372688973
+  POINT  4242  -3.284985242746421  27.49173667393181
+  POINT  4243  -3.792541681848606  28.3806414211657
+  POINT  4244  -4.299837174214305  28.38154445423863
+  POINT  4245  -3.286081863591458  28.37994082620021
+  POINT  4246  -6.578160439640206  26.16911757665643
+  POINT  4247  -6.3253193653182  26.61163279891804
+  POINT  4248  -5.817351397064218  26.61016819247553
+  POINT  4249  -6.322914449413139  25.72626408985695
+  POINT  4250  -6.831093433545865  25.72749714888835
+  POINT  4251  -5.815416739071694  25.72545072182048
+  POINT  4252  -6.068349732977355  25.2838302940524
+  POINT  4253  -8.103068545520017  25.2879261001149
+  POINT  4254  -7.847089733293389  24.84545529905903
+  POINT  4255  -7.33972959193747  25.72854262281094
+  POINT  4256  -7.084483601710403  25.28568913601146
+  POINT  4257  -7.84905736666726  25.73004082824404
+  POINT  4258  -7.337860774808862  24.84465820022065
+  POINT  4259  -6.829224616417257  24.84361272629806
+  POINT  4260  -7.591830748000244  24.40337888934564
+  POINT  4261  -10.95968825756436  32.86825866172835
+  POINT  4262  -11.2389973762048  32.44351916990193
+  POINT  4263  -10.96516313120963  31.99722932793554
+  POINT  4264  -10.45710394986915  32.90333376542937
+  POINT  4265  -10.19676760818201  32.44505103256093
+  POINT  4266  -10.4450386107414  31.98862213265781
+  POINT  4267  -5.839993028780057  31.9585713890503
+  POINT  4268  -5.58222505575568  31.50997899536313
+  POINT  4269  -6.353715906405032  31.96208637743266
+  POINT  4270  -9.890881409539208  22.20113221196177
+  POINT  4271  -9.377719567935678  22.20101557304443
+  POINT  4272  -9.890817945887456  21.32074066481798
+  POINT  4273  -9.377648390967682  21.32062266583164
+  POINT  4274  -10.14857006043265  21.76080491471691
+  POINT  4275  -9.121929625682005  21.76064670155081
+  POINT  4276  -3.989917438513398  37.75936920944303
+  POINT  4277  -4.253220144914879  38.17942950972456
+  POINT  4278  -5.0612047044748  37.78945190920187
+  POINT  4279  -4.788965345375917  37.30790232371594
+  POINT  4280  -5.345230853006697  37.3897257540357
+  POINT  4281  -3.511703891126289  35.11435281720901
+  POINT  4282  -3.775382111584034  34.65823488537108
+  POINT  4283  -4.288463783602202  34.65011427144418
+  POINT  4284  -4.035804655693716  34.20299575272048
+  POINT  4285  -13.43620984438418  34.81446134683805
+  POINT  4286  -13.29869599960812  34.31160156237819
+  POINT  4287  -12.93463213128416  34.64179503997145
+  POINT  4288  -13.62553600610368  33.9629776498918
+  POINT  4289  -14.13908291075123  34.14518767789303
+  POINT  4290  -12.60490716900593  35.00986141752851
+  POINT  4291  -12.20023572325958  35.34108684648683
+  POINT  4292  -12.66774772099321  35.47669756860905
+  POINT  4293  -11.70511437947869  35.04850274706365
+  POINT  4294  -11.9105566427679  34.50393254228281
+  POINT  4295  -12.47145116324818  34.51147573062274
+  POINT  4296  -9.806918774248189  36.80166842930682
+  POINT  4297  -10.26857635288579  37.16264372426561
+  POINT  4298  -10.1979850569437  36.56768967568621
+  POINT  4299  -1.515143968311342  29.71762612467332
+  POINT  4300  -1.767218169152578  30.16613538008133
+  POINT  4301  -2.273105814749252  30.16491121650845
+  POINT  4302  -2.526893645558062  29.71688475828849
+  POINT  4303  -4.295343851645418  33.74833423033055
+  POINT  4304  -3.78226217962725  33.75645484425745
+  POINT  4305  -3.531281742859955  33.30800564331628
+  POINT  4306  -3.788870710138221  32.85406611529395
+  POINT  4307  -4.299971286819369  32.85149198399459
+  POINT  4308  -10.95895536230713  35.58920341710635
+  POINT  4309  -10.41172580433067  35.55794744193341
+  POINT  4310  -11.08356921006429  36.15576819899469
+  POINT  4311  -10.1942008448515  36.08605690473453
+  POINT  4312  -9.956518482555364  35.68306089840274
+  POINT  4313  -10.65319237871901  36.44257621921687
+  POINT  4314  -11.0910623698248  36.64296654514917
+  POINT  4315  -13.7593285339414  31.59910572962469
+  POINT  4316  -13.97378905574307  31.09637586275941
+  POINT  4317  -14.49013543528747  31.07749003746751
+  POINT  4318  -14.0764019646777  32.09309626417902
+  POINT  4319  -14.48389267802026  31.91422357801393
+  POINT  4320  -14.75329172047915  31.4892516249232
+  POINT  4321  -5.587461461429323  33.29923896261564
+  POINT  4322  -5.325946062699384  33.7401385358841
+  POINT  4323  -5.327825510476393  32.84978726680519
+  POINT  4324  -4.809231792482727  33.74478093752646
+  POINT  4325  -5.065600597928541  34.19023273715123
+  POINT  4326  -4.555689316416261  33.29824002906342
+  POINT  4327  -4.813859227656678  32.8479386911905
+  POINT  4328  5.823064971458006  28.38586497473401
+  POINT  4329  5.315146572158927  28.38430769994047
+  POINT  4330  5.062470610533198  28.82834397135218
+  POINT  4331  6.079388428607562  28.83197977936755
+  POINT  4332  5.317804360302774  29.27479479926754
+  POINT  4333  5.827084127424216  29.27699957992611
+  POINT  4334  10.41689568078359  28.4124072611171
+  POINT  4335  10.66929742196129  27.96611222514022
+  POINT  4336  9.904430854792075  28.4070707901445
+  POINT  4337  10.41083792953915  27.51739638025921
+  POINT  4338  8.886484172763202  29.29285479615131
+  POINT  4339  8.37583717786616  29.29012517098535
+  POINT  4340  9.139626727505856  28.8478657394769
+  POINT  4341  8.117653415472539  28.84163926115534
+  POINT  4342  11.95092859671319  24.8475539406863
+  POINT  4343  12.46807375787325  24.84583394788076
+  POINT  4344  12.20840003869946  25.28942203987447
+  POINT  4345  11.95272288103627  23.96287269629527
+  POINT  4346  12.47198579068075  23.9610098082623
+  POINT  4347  12.73018467318101  24.40129625485699
+  POINT  4348  11.43575282852112  23.96401601812759
+  POINT  4349  10.91929475924401  23.96469697384104
+  POINT  4350  11.43395854419803  24.84869726251862
+  POINT  4351  10.91909661344623  24.84916901000663
+  POINT  4352  11.69363226337182  24.40510917052491
+  POINT  4353  10.66208764636606  24.40642272229546
+  POINT  4354  12.45674415720379  26.62593764544495
+  POINT  4355  12.71561902895919  26.17761365870297
+  POINT  4356  12.46344625167966  25.73349620934157
+  POINT  4357  11.9463010905196  25.73521620214711
+  POINT  4358  11.68774091931249  26.17992315964508
+  POINT  4359  11.94436146317965  26.6262558892628
+  POINT  4360  12.19975831688364  27.07290316309354
+  POINT  4361  11.70835016186513  29.77725626131508
+  POINT  4362  11.44840780891525  29.32083443761827
+  POINT  4363  10.94524480188349  30.2119493620846
+  POINT  4364  10.68396014223092  29.76000284437696
+  POINT  4365  11.4612799501046  30.22519211862191
+  POINT  4366  11.20910938557762  30.66888094038705
+  POINT  4367  10.9368374049108  29.31526434275312
+  POINT  4368  11.95080093219896  28.42166108213997
+  POINT  4369  12.4591287934299  28.41955637961497
+  POINT  4370  12.71451082664457  27.96964269203738
+  POINT  4371  12.97143800709656  28.41928524228948
+  POINT  4372  11.69163226937222  27.96979595129795
+  POINT  4373  12.45717131194284  27.52124937431928
+  POINT  4374  11.9447886179187  27.52156761813713
+  POINT  4375  15.29885200343264  28.8835193357322
+  POINT  4376  15.56202156575395  29.32850886335364
+  POINT  4377  15.04254095371091  29.31827443700025
+  POINT  4378  16.0564503860919  28.44895155360157
+  POINT  4379  16.33477400183093  28.91218754051921
+  POINT  4380  15.54890460342297  28.43938194691547
+  POINT  4381  16.09215770029102  29.34350152581874
+  POINT  4382  12.72223555131803  29.77728149733855
+  POINT  4383  12.97062105959908  29.31875497111673
+  POINT  4384  12.98553664119016  30.24101141045128
+  POINT  4385  13.47593186273332  30.21482288295318
+  POINT  4386  14.77952748380703  29.75810228782938
+  POINT  4387  14.50635713461083  30.18825186751686
+  POINT  4388  14.51635792148571  29.31311276020795
+  POINT  4389  13.9900110158661  30.20713768228853
+  POINT  4390  13.73926529844905  29.76062581170174
+  POINT  4391  2.273105774761268  9.83508879984791
+  POINT  4392  2.779450317637714  9.835400651617574
+  POINT  4393  3.033012220564729  9.388247709190718
+  POINT  4394  5.582224331984559  8.490021384452593
+  POINT  4395  5.324236755485918  8.938715200324722
+  POINT  4396  4.303205470450614  9.835452415437004
+  POINT  4397  4.811613166163307  9.834298227553571
+  POINT  4398  4.049286364268548  9.3886844889632
+  POINT  4399  5.068073565684609  9.386690434889857
+  POINT  4400  4.814373978828597  8.940272488625666
+  POINT  4401  2.221682434110464  3.449608482318896
+  POINT  4402  1.723322054663639  3.41958212581723
+  POINT  4403  1.475255227755129  2.932460514091849
+  POINT  4404  1.727942742988692  2.471297861599172
+  POINT  4405  2.223570867244001  2.516811617236392
+  POINT  4406  3.247664549616101  1.691005979661493
+  POINT  4407  3.738193462327802  1.768828689718033
+  POINT  4408  2.976338300237787  2.129153441474481
+  POINT  4409  3.989913465089363  2.240629487564227
+  POINT  4410  3.734383925154549  2.66000978424141
+  POINT  4411  4.249406076125915  2.711750263924309
+  POINT  4412  -0.2525804527561534  16.03806627400728
+  POINT  4413  -0.7575089596573991  16.03809742300865
+  POINT  4414  8.162773457165429e-09  16.47693907063823
+  POINT  4415  0.5055201424216942  17.35292109533307
+  POINT  4416  0.2530784214946227  17.78947522331019
+  POINT  4417  0.2525804694500266  16.91468922909349
+  POINT  4418  -0.2525804544726128  16.91468922997582
+  POINT  4419  -0.2530784086493366  17.78947522356133
+  POINT  4420  -0.5055201286865491  17.35292109643341
+  POINT  4421  -0.7581005899738023  16.91517093797816
+  POINT  4422  10.92866218369657  11.58403101835576
+  POINT  4423  10.66929892991574  12.03389174928147
+  POINT  4424  10.92260560930413  12.47904214844759
+  POINT  4425  11.44023252971531  11.57846179393201
+  POINT  4426  11.6916339164161  12.03021006472227
+  POINT  4427  6.829226066792335  15.15638767985543
+  POINT  4428  7.08448512863891  14.71431148714117
+  POINT  4429  6.32291537112456  14.27373638104556
+  POINT  4430  6.068350648601582  14.71617008807552
+  POINT  4431  6.831094598114815  14.27250347410035
+  POINT  4432  6.574690216144999  15.59804860267928
+  POINT  4433  6.320151929953125  16.03908134219066
+  POINT  4434  5.812970569673526  16.03929553360603
+  POINT  4435  5.559944453526639  15.59906442536678
+  POINT  4436  5.813814797954246  15.15783101089938
+  POINT  4437  6.321312755318322  15.15701773663442
+  POINT  4438  -1.775181001650297  21.33393361507919
+  POINT  4439  -1.267840951818172  21.33711381294345
+  POINT  4440  -2.024810422711531  21.77002261288375
+  POINT  4441  -0.7585985253342913  22.21004308218826
+  POINT  4442  -0.2530784032947191  22.21052479073235
+  POINT  4443  -0.25307840396708  21.33774656408433
+  POINT  4444  6.030698440628868e-09  21.77348895090434
+  POINT  4445  -0.761269396452543  21.33800980180604
+  POINT  4446  -1.012728368769732  21.77259296179061
+  POINT  4447  -1.26517008069992  22.20914709332568
+  POINT  4448  6.57552905270612  19.11917837703191
+  POINT  4449  6.830512439734651  19.55973226747113
+  POINT  4450  6.323600974440302  19.55944563035479
+  POINT  4451  7.337224191221686  19.55973210309189
+  POINT  4452  7.085296112955868  19.99999935641476
+  POINT  4453  7.591126172197229  19.11954137608066
+  POINT  4454  7.845909845418445  19.55980846502429
+  POINT  4455  6.828120215219838  18.67952034762907
+  POINT  4456  5.819524031753277  19.55944573980127
+  POINT  4457  6.074507418781808  19.99999963024048
+  POINT  4458  5.819523813334327  20.44055367013701
+  POINT  4459  6.323600756021351  20.44055356069054
+  POINT  4460  5.314082130452446  19.55879830294076
+  POINT  4461  5.069786234540341  19.99999980475538
+  POINT  4462  5.314081996435311  20.44120126848308
+  POINT  4463  5.563175333674854  20.88175519893314
+  POINT  4464  8.866487420657002  23.96406405540996
+  POINT  4465  8.355738994225081  23.96328213075802
+  POINT  4466  8.100427383778017  23.52188039085872
+  POINT  4467  9.122215393276559  23.52275436205428
+  POINT  4468  8.86594121586602  23.08182352338446
+  POINT  4469  11.18084976696353  21.76061566877308
+  POINT  4470  11.43896704356612  22.20068784304909
+  POINT  4471  11.95797441386322  22.1997190736917
+  POINT  4472  11.9588087557341  21.32105244930146
+  POINT  4473  12.22007742542399  21.75981922903992
+  POINT  4474  10.148570164294  21.76080494256901
+  POINT  4475  9.890881511362227  22.2011322436048
+  POINT  4476  9.377719656900005  22.20101559932991
+  POINT  4477  9.377648474444069  21.3206226826241
+  POINT  4478  9.121929706236603  21.76064672176964
+  POINT  4479  8.865674277639464  22.2008899295029
+  POINT  4480  7.336250313716918  21.32043468385277
+  POINT  4481  7.591125568206087  20.88045701300713
+  POINT  4482  7.337223885828448  20.44026648925234
+  POINT  4483  7.845909546820542  20.44018971579031
+  POINT  4484  6.830512134341413  20.44026665363158
+  POINT  4485  6.575528528893932  20.88082069352811
+  POINT  4486  4.547660785761197  22.64117575790155
+  POINT  4487  4.799992952164152  23.08041215768531
+  POINT  4488  5.306180292478354  23.08034306292107
+  POINT  4489  8.865707267923504  19.55976133923551
+  POINT  4490  8.354952340097839  19.55980825914972
+  POINT  4491  8.865707358596341  20.44023587696896
+  POINT  4492  8.354952041499935  20.44018950991573
+  POINT  4493  9.121386178165395  19.99999862805303
+  POINT  4494  9.377000682960047  20.44023572473563
+  POINT  4495  9.37700059228721  19.55976118700218
+  POINT  4496  8.101050359122295  19.99999898616094
+  POINT  4497  -18.88575813755943  15.0697268260569
+  POINT  4498  -19.39362771734272  15.11254628586869
+  POINT  4499  -18.68665358888661  14.6490351897125
+  POINT  4500  -15.77563967202531  13.84150710457371
+  POINT  4501  -16.01906260749091  13.38331127087525
+  POINT  4502  -16.51175963280237  13.37603091203635
+  POINT  4503  -16.76209633740071  13.83891198637251
+  POINT  4504  -16.61643100772146  14.28454398233681
+  POINT  4505  -3.285878374189513  17.79579280002091
+  POINT  4506  -3.537066906965997  17.35732465078735
+  POINT  4507  -2.781165062341254  17.79402703590121
+  POINT  4508  -2.272346057716946  15.15939316355719
+  POINT  4509  -2.777506873473401  15.15947546214778
+  POINT  4510  -2.019831127927625  14.71933670858128
+  POINT  4511  -3.030366546424797  14.71907091737807
+  POINT  4512  -4.29435723120281  15.1589385317425
+  POINT  4513  -4.800381300429374  15.1587993272791
+  POINT  4514  -4.041727322367009  14.71851001309586
+  POINT  4515  -5.05425164147241  14.71756591615323
+  POINT  4516  -4.295101030996014  14.27689248118367
+  POINT  4517  -3.789177724238159  14.27725404962039
+  POINT  4518  -8.103070844109666  14.7120749267257
+  POINT  4519  -8.357041227963842  15.15335409824602
+  POINT  4520  -8.867790261965396  15.15257226998905
+  POINT  4521  -8.359008421177249  14.26876895168724
+  POINT  4522  -9.124387984536476  14.70980715521631
+  POINT  4523  -8.869538972748195  14.26707997665955
+  POINT  4524  -9.380906847798823  14.26600347395883
+  POINT  4525  -15.04253548417184  10.68172301284076
+  POINT  4526  -14.51635355078331  10.68688712093244
+  POINT  4527  -14.26072851253494  11.13086143448761
+  POINT  4528  -15.29884481679709  11.11647634394399
+  POINT  4529  -15.0294160788359  11.57085075398853
+  POINT  4530  -14.51705395682312  11.57633155901834
+  POINT  4531  8.673610243951781  6.652056971493288
+  POINT  4532  8.414839055579259  7.108358885772509
+  POINT  4533  7.90457462665794  7.113563743870362
+  POINT  4534  8.152298738482797  7.566155996789455
+  POINT  4535  7.651410299100585  6.670464801650749
+  POINT  4536  7.388869982004122  7.128261912667696
+  POINT  4537  7.91137180832887  6.215871382139966
+  POINT  4538  7.395667163675052  6.2305695509373
+  POINT  4539  8.427660313869119  6.189437265397586
+  POINT  4540  8.401580829217719  8.014850918935689
+  POINT  4541  7.8913164002964  8.020055777033541
+  POINT  4542  8.65225636857012  8.462541415161475
+  POINT  4543  7.629644152233771  8.473224754720867
+  POINT  4544  7.380362061498849  8.024529832574634
+  POINT  4545  8.391528292002256  8.915703717744677
+  POINT  4546  7.880480191434996  8.920252392579611
+  POINT  4547  8.948131191765635  5.244986877960783
+  POINT  4548  8.686196691051427  4.812171250737954
+  POINT  4549  8.926774423659207  4.355755496876252
+  POINT  4550  9.445443876621251  5.251309598627719
+  POINT  4551  9.6910474270449  4.80595499243688
+  POINT  4552  9.473520550241012  4.27784503441803
+  POINT  4553  6.871912274813603  4.456666857990875
+  POINT  4554  6.343908009479829  4.48177946767831
+  POINT  4555  6.621960527653464  4.900979418979421
+  POINT  4556  7.126969749148993  3.982554695510378
+  POINT  4557  4.533432449664246  3.111476287422326
+  POINT  4558  4.788961989599059  2.692095990745143
+  POINT  4559  4.807632160732531  3.545827374450171
+  POINT  4560  6.855123306554548  1.732841382331951
+  POINT  4561  6.414612844901361  1.574488513075082
+  POINT  4562  6.765655367225731  1.179109809653417
+  POINT  4563  6.972434580994955  2.219793303106146
+  POINT  4564  -7.602701248857268  12.05219331399483
+  POINT  4565  -7.345761168813994  12.49779263543017
+  POINT  4566  -7.350228475031765  11.60757343071705
+  POINT  4567  -5.308173014700433  14.27556533336659
+  POINT  4568  -5.562737733353188  13.83313163004587
+  POINT  4569  -4.801572002352885  14.27614786187251
+  POINT  4570  -4.549022404224035  13.83489189839703
+  POINT  4571  -1.261812988480139  9.83343522240709
+  POINT  4572  -1.009092171925209  9.384112018230109
+  POINT  4573  -1.260520010065219  8.933024373220549
+  POINT  4574  -1.765500117844419  8.93523006966014
+  POINT  4575  -5.068073644725306  9.38669057972551
+  POINT  4576  -4.811613206609751  9.83429836303813
+  POINT  4577  -5.321476005364882  9.832741044573023
+  POINT  4578  -8.171918437075256  5.749541788172571
+  POINT  4579  -8.426272907275038  5.290292001170738
+  POINT  4580  -8.948133223185337  5.244987163541136
+  POINT  4581  -9.185519494225359  5.729430999154442
+  POINT  4582  -8.934156282145356  6.185727540104251
+  POINT  4583  -8.427661154600298  6.18943703498995
+  POINT  4584  -8.673610641597531  6.652056916813081
+  POINT  4585  -6.360808891330913  5.359381494985303
+  POINT  4586  -6.8888134629241  5.334268229392724
+  POINT  4587  -7.141644921037324  5.784322612398201
+  POINT  4588  -6.881683139083452  6.238916134269846
+  POINT  4589  -6.366502420684297  6.244439533544943
+  POINT  4590  -8.913238659918125  8.008641685997079
+  POINT  4591  -9.175111821561714  7.552782489790519
+  POINT  4592  -8.152298933237061  7.566155955215757
+  POINT  4593  -8.414839366266023  7.108358763986579
+  POINT  4594  -8.401580872630081  8.014850914686292
+  POINT  4595  -8.652256314068634  8.462541484408993
+  POINT  4596  -7.891316587387569  8.020055753627672
+  POINT  4597  -8.921334493811083  7.104649269100879
+  POINT  4598  0.5050496066864969  12.06607114806098
+  POINT  4599  0.2524838592694156  12.509659882908
+  POINT  4600  -0.5050495406976978  12.06607116411123
+  POINT  4601  -0.2524953099325488  11.62092225687016
+  POINT  4602  -0.7575448846733936  11.62089710913941
+  POINT  4603  0.2524953892493668  11.62092224476328
+  POINT  4604  -3.283324914400852  8.042101763472806
+  POINT  4605  -3.027617553368896  7.589434642638204
+  POINT  4606  -3.78887016301438  7.145934490043004
+  POINT  4607  -4.047040141601858  7.596235740379548
+  POINT  4608  -4.299970711505202  7.148508674241112
+  POINT  4609  -3.792218491321482  8.043753636400142
+  POINT  4610  -4.303319039812305  8.04632782059825
+  POINT  4611  -3.539603812611298  8.492193843691508
+  POINT  4612  -3.278350562976776  7.139722056960755
+  POINT  4613  -3.53128113288012  6.69199499082232
+  POINT  4614  -3.259043844909186  5.332766362072315
+  POINT  4615  -3.011954694569225  5.779632481578462
+  POINT  4616  -3.271741805307075  6.237333529285412
+  POINT  4617  -3.782261405344679  6.243545962367661
+  POINT  4618  -4.035803751858573  5.797005308049524
+  POINT  4619  -4.295343079431618  6.251666769586432
+  POINT  4620  -3.775380952945744  5.341766264901346
+  POINT  4621  -3.511702720083296  4.885648126142907
+  POINT  4622  -4.543058686584349  4.904219080036945
+  POINT  4623  -4.288462627032683  5.349887072120117
+  POINT  4624  -4.803481485497177  5.359458123185124
+  POINT  4625  -3.243367634643463  4.435820574068364
+  POINT  4626  -2.982689503297702  3.965002351197774
+  POINT  4627  -3.229662503185413  3.52330050328693
+  POINT  4628  -3.742623792584569  3.563062575166481
+  POINT  4629  -3.759704742680022  4.444820476897395
+  POINT  4630  -5.320794455696689  3.555246287829873
+  POINT  4631  -5.570636693918219  3.095966055383329
+  POINT  4632  -5.345229957488629  2.610279773748913
+  POINT  4633  -4.788963916338954  2.692099741504953
+  POINT  4634  -4.533433409733085  3.11147984258838
+  POINT  4635  -5.320195886747793  5.3641005719377
+  POINT  4636  -5.065599827196129  5.809768564020871
+  POINT  4637  -5.838136124018156  5.370252348005836
+  POINT  4638  -6.104986995759502  5.803540159752914
+  POINT  4639  -5.843829653371539  6.255310386565476
+  POINT  4640  -5.845709132172464  7.14566131989957
+  POINT  4641  -6.099796022401105  7.591597931860797
+  POINT  4642  2.468655552028582  36.99209317569083
+  POINT  4643  2.720981659484743  36.50669016910551
+  POINT  4644  3.221422882693706  37.37975122048137
+  POINT  4645  3.480916159023034  36.90863094192812
+  POINT  4646  2.722869868303182  37.43948682119965
+  POINT  4647  3.229662324541032  36.47670038506341
+  POINT  4648  -2.273750322176463  28.37918393450756
+  POINT  4649  -2.779582658660454  28.37954777701897
+  POINT  4650  -2.526574115933269  27.93457393572186
+  POINT  4651  -3.033258069834652  28.82455082498592
+  POINT  4652  -2.77999854888538  29.27036534916167
+  POINT  4653  -2.273653961576329  29.27067718493149
+  POINT  4654  -4.295759860195631  22.20207831721287
+  POINT  4655  -3.790935919620525  22.20328484529564
+  POINT  4656  -4.547660762109723  22.64117574871403
+  POINT  4657  -1.770560839361158  22.20855341824481
+  POINT  4658  -2.276071337937328  22.20687905820053
+  POINT  4659  -1.516430995925717  22.64600353864246
+  POINT  4660  -0.7574091942873926  26.60463620877062
+  POINT  4661  -0.5049253650460661  26.16245155786428
+  POINT  4662  -1.26248456968623  26.60474309312709
+  POINT  4663  -2.020500884784648  27.04726516205367
+  POINT  4664  -2.273312578923515  27.49087502031526
+  POINT  4665  -2.779144915407506  27.49123886282667
+  POINT  4666  -3.031723705736667  27.04803775852522
+  POINT  4667  9.674059914272764  31.54309915647984
+  POINT  4668  9.425788859593911  31.99952798475481
+  POINT  4669  8.903187169034737  31.09050669476753
+  POINT  4670  9.413784633261546  31.09278170280593
+  POINT  4671  7.395667531479379  33.76943158160459
+  POINT  4672  6.881682436448375  33.76108525769369
+  POINT  4673  6.620525505193433  33.30931478828556
+  POINT  4674  6.099796175241582  32.40840299268783
+  POINT  4675  6.359431915093664  32.8578547224632
+  POINT  4676  6.874612619500812  32.86337793702549
+  POINT  4677  7.127777065364786  32.42027890997031
+  POINT  4678  7.388870655464554  32.87173897579268
+  POINT  4679  6.353715538404828  31.96208648750794
+  POINT  4680  8.934156162843058  33.81427295860885
+  POINT  4681  9.185518916730516  34.2705695880624
+  POINT  4682  9.431469087173463  33.80794971603986
+  POINT  4683  8.171917422879144  34.25045899549634
+  POINT  4684  8.426271187026909  34.70970875020592
+  POINT  4685  8.948131691149152  34.75501338402842
+  POINT  4686  7.651410866152008  33.32953611527348
+  POINT  4687  7.904575312015982  32.8864370882183
+  POINT  4688  7.911372188030805  33.78412969403021
+  POINT  4689  8.427660757551774  33.81056352916524
+  POINT  4690  8.673610927994719  33.34794365714271
+  POINT  4691  9.694220357455089  33.36180316353837
+  POINT  4692  9.945583111342547  33.81809979299192
+  POINT  4693  10.71091845921928  33.33687874930079
+  POINT  4694  10.46487676988987  33.83310719520395
+  POINT  4695  9.947998294341922  32.91367014601859
+  POINT  4696  9.43388427017284  32.90352006906653
+  POINT  4697  10.45710382882717  32.90333481796283
+  POINT  4698  12.55579669464555  33.7299880503965
+  POINT  4699  13.12801199851167  33.79479026035089
+  POINT  4700  12.47144579022556  34.51148132613582
+  POINT  4701  12.93462514265352  34.64180178367647
+  POINT  4702  12.24027789272276  34.13587082058012
+  POINT  4703  13.29868985479681  34.3116079231603
+  POINT  4704  13.43620128425083  34.8144691256151
+  POINT  4705  12.50944856105111  31.15885690226704
+  POINT  4706  11.99907725941845  31.14306284646113
+  POINT  4707  12.78538331767002  31.63539862612097
+  POINT  4708  12.5690393147074  32.06645875658151
+  POINT  4709  12.02256561458787  32.0281633069468
+  POINT  4710  5.065600016341717  34.19023420969232
+  POINT  4711  4.803482242815901  34.64054582058449
+  POINT  4712  4.035804672356232  34.20299720629515
+  POINT  4713  4.295343779290965  33.74833560269973
+  POINT  4714  4.809231465292767  33.74478222026569
+  POINT  4715  4.288463743829695  34.65011614756668
+  POINT  4716  9.637662575318704  13.82176439745997
+  POINT  4717  9.895010842448107  13.37629815618254
+  POINT  4718  9.892511591869622  14.26449157539778
+  POINT  4719  10.4067069355562  13.37400513563111
+  POINT  4720  13.52905067048734  17.80348860989551
+  POINT  4721  13.79175789835044  17.36796951733285
+  POINT  4722  13.00252411868155  17.80282680195637
+  POINT  4723  13.26812525861197  18.24140032089161
+  POINT  4724  12.74043410877834  17.36292953030527
+  POINT  4725  12.47950869690297  17.80084124130137
+  POINT  4726  13.51009777439233  19.55820318321305
+  POINT  4727  13.79929158665083  19.11344521668358
+  POINT  4728  13.53129906332733  18.67922305227264
+  POINT  4729  13.00477251152154  18.6785612443335
+  POINT  4730  12.99576637516585  19.55819856070358
+  POINT  4731  12.74349662902931  19.11733796967289
+  POINT  4732  12.47131668795828  19.55915255466194
+  POINT  4733  12.48032282431396  18.67951523829186
+  POINT  4734  11.43914986613786  21.32072491301456
+  POINT  4735  11.69942433103575  20.88138351831122
+  POINT  4736  10.92146534226518  21.32094673778284
+  POINT  4737  12.71562432355781  13.82239950971875
+  POINT  4738  12.9710204628949  13.37575475080886
+  POINT  4739  12.45674797382721  13.37407141180644
+  POINT  4740  12.97772491657961  14.26819291122295
+  POINT  4741  12.46345242751193  14.26650957222053
+  POINT  4742  13.49738297842677  14.27178058327745
+  POINT  4743  13.74303006923158  13.8271429168039
+  POINT  4744  13.24521108238089  14.71589064577923
+  POINT  4745  13.22448245842652  12.92743092592447
+  POINT  4746  13.48181951185093  12.47903488184075
+  POINT  4747  13.99578142269353  12.47669166234643
+  POINT  4748  14.24624589811313  12.92686861431367
+  POINT  4749  13.48335880815712  13.37575902383678
+  POINT  4750  13.9964920647632  13.37881909191951
+  POINT  4751  -6.320150687976366  23.96091876360178
+  POINT  4752  -5.812969625836519  23.96070458668278
+  POINT  4753  -6.574688825297787  24.40195167480463
+  POINT  4754  -6.828063652194295  23.9615488793044
+  POINT  4755  -5.813813941857884  24.84216924255897
+  POINT  4756  -6.321311652199329  24.84298261059543
+  POINT  4757  -7.081981008898271  23.52094424303451
+  POINT  4758  -7.336519146219691  23.96197715423737
+  POINT  4759  -7.845748104704221  23.96277425307575
+  POINT  4760  -7.335856115277702  23.08082963166928
+  POINT  4761  -7.844991443031732  23.08106288006605
+  POINT  4762  -8.100427311741345  23.52188036270352
+  POINT  4763  -10.40540157467472  14.26408505747693
+  POINT  4764  -10.66170284717234  13.81985074339596
+  POINT  4765  -9.637662430070954  13.82176447342599
+  POINT  4766  -9.895010682577141  13.37629824542447
+  POINT  4767  -9.892511441859234  14.26449165198275
+  POINT  4768  -10.40670675495256  13.37400525082491
+  POINT  4769  -12.47199466734123  16.03898502117763
+  POINT  4770  -12.21411479700939  16.4800762682083
+  POINT  4771  -12.99157903512498  16.04165171901209
+  POINT  4772  -14.28781148834783  14.72466430653915
+  POINT  4773  -14.01051597995725  14.27484092420143
+  POINT  4774  -13.50732425510632  15.16042328920559
+  POINT  4775  -13.24521080951691  14.71589083268884
+  POINT  4776  -13.49738271635704  14.27178080931081
+  POINT  4777  -16.93896929093587  15.5773409849898
+  POINT  4778  -16.68097494321506  15.16527107651389
+  POINT  4779  -15.67915306855816  18.67142202530682
+  POINT  4780  -15.40255559056302  18.2433353971784
+  POINT  4781  -15.1377260715964  18.67054347403299
+  POINT  4782  -15.66731487745816  17.81120284025883
+  POINT  4783  -16.23490724711116  18.67143816234672
+  POINT  4784  -11.95483924810893  19.55914747757233
+  POINT  4785  -11.69939991789839  19.11861637347679
+  POINT  4786  -11.95878820411627  18.67894457614464
+  POINT  4787  -12.47131653888641  19.55915256894556
+  POINT  4788  -12.48032266377783  18.67951528684885
+  POINT  4789  -12.22006407356756  18.2401678703231
+  POINT  4790  -12.74349647052235  19.11733800723685
+  POINT  4791  -13.00477233997363  18.67856130141531
+  POINT  4792  -14.87248011401993  19.104568316138
+  POINT  4793  -14.5444672240719  19.55524901206978
+  POINT  4794  -14.59588263602478  18.67648168800958
+  POINT  4795  -14.04144287725837  19.55526445993747
+  POINT  4796  -13.79929141258323  19.11344527595896
+  POINT  4797  -13.53129887895662  18.67922312921883
+  POINT  4798  -13.2681250722121  18.24140040883083
+  POINT  4799  -14.0626441448217  18.67628438337447
+  POINT  4800  -14.05735881756995  17.80654318110146
+  POINT  4801  -14.32789010239817  18.24225954126945
+  POINT  4802  -18.2968927833904  24.94722405978977
+  POINT  4803  -18.68670738346595  25.35086902771102
+  POINT  4804  -18.11866277312836  25.81991225332942
+  POINT  4805  -18.56007566971161  25.77221354163332
+  POINT  4806  -19.15366621552857  25.75648074725418
+  POINT  4807  -17.67264085100642  25.76729945984075
+  POINT  4808  -17.52697763588802  25.32168259068048
+  POINT  4809  -17.78498613217555  24.909612186255
+  POINT  4810  -12.47539170563856  23.0785489390462
+  POINT  4811  -12.99840983962808  23.07655221680742
+  POINT  4812  -12.47198557295549  23.9610096938691
+  POINT  4813  -12.99156790660064  23.95834007766085
+  POINT  4814  -12.21410615975761  23.51991655725213
+  POINT  4815  -14.04906603364312  23.06997456115545
+  POINT  4816  -13.52075687599397  23.07307448165996
+  POINT  4817  -14.03636788977065  23.95057690948157
+  POINT  4818  -13.51391494296653  23.95486234251339
+  POINT  4819  -14.30341627472643  23.50650018459617
+  POINT  4820  -14.561721042046  23.9459789118976
+  POINT  4821  -14.57441918591847  23.06537656357148
+  POINT  4822  -13.25571608608519  23.5145759173276
+  POINT  4823  -14.5960683653604  21.32333659147519
+  POINT  4824  -14.32798922175618  21.75754972154517
+  POINT  4825  -14.59066652086865  22.19303664224877
+  POINT  4826  -13.74303175114319  26.17287493709136
+  POINT  4827  -13.48335791473757  26.62425530265345
+  POINT  4828  -12.97771773598447  25.73181930175693
+  POINT  4829  -12.71561880221907  26.17761345449204
+  POINT  4830  -13.49737100762031  25.72824656875608
+  POINT  4831  -12.97101566866241  26.62426067037656
+  POINT  4832  -15.87594000709251  24.3886752863724
+  POINT  4833  -15.61382354497319  23.94120865241457
+  POINT  4834  -15.08739359140011  23.94259057999703
+  POINT  4835  -15.35519938057486  23.50052025942974
+  POINT  4836  -15.07839045447396  24.82672910597416
+  POINT  4837  -14.82034520644433  24.38666730488244
+  POINT  4838  -4.297887780716318  27.4932582820506
+  POINT  4839  -4.044006752788331  27.04935658278367
+  POINT  4840  -5.312210754179706  27.49556464468527
+  POINT  4841  -5.567618563035417  27.94023469907253
+  POINT  4842  -4.552513129335004  27.93750819510436
+  POINT  4843  -4.807024214617755  28.38271368117876
+  POINT  4844  -4.805074821119767  27.49442750899073
+  POINT  4845  -5.057585405561018  27.0513147316315
+  POINT  4846  -6.33587960182028  29.27904137271206
+  POINT  4847  -6.593280542092714  29.72671675993249
+  POINT  4848  -6.845584816882877  29.28169696677443
+  POINT  4849  -9.139626577699488  28.84786563078475
+  POINT  4850  -8.880974911121076  28.39978165870695
+  POINT  4851  -8.886484031839617  29.29285468931666
+  POINT  4852  -8.375837076376664  29.29012509511866
+  POINT  4853  -6.606301488352729  31.5172784426189
+  POINT  4854  -6.86610510089686  31.96710983930201
+  POINT  4855  -7.380363061301429  31.97547095696313
+  POINT  4856  -7.629645044490113  31.52677603524801
+  POINT  4857  -3.734387612605413  37.33998909381205
+  POINT  4858  -3.480917883197236  36.90862995438757
+  POINT  4859  -4.249409370936035  37.28824836325113
+  POINT  4860  -4.533435519467933  36.88852220808495
+  POINT  4861  -4.758488233341749  38.11030236366913
+  POINT  4862  -4.50676918141261  38.58210339451158
+  POINT  4863  -4.783545702215509  38.99367819414739
+  POINT  4864  -5.253316076616899  38.87170298229778
+  POINT  4865  -5.026304722136116  39.35810581481412
+  POINT  4866  -5.31475374097253  38.1921257939889
+  POINT  4867  -5.55603254774995  38.55085252783052
+  POINT  4868  -4.803482580347485  34.64054361135685
+  POINT  4869  -5.320196850564142  34.63590120971449
+  POINT  4870  -4.543060036237803  35.09578274400744
+  POINT  4871  -9.474341817876265  37.14660975144912
+  POINT  4872  -9.406416566704262  36.55611168334616
+  POINT  4873  -9.473526932351346  35.72215174385364
+  POINT  4874  -9.691051891830522  35.19404228105253
+  POINT  4875  -7.395668664845115  33.76943169253389
+  POINT  4876  -7.141645205774269  34.21567874364175
+  POINT  4877  -7.911373176236172  33.78412991120815
+  POINT  4878  -5.970391354147889  38.42267776501082
+  POINT  4879  -5.910343674528779  39.10674848218104
+  POINT  4880  9.899142136969207  27.51510267900654
+  POINT  4881  10.15244814835231  27.06995268221834
+  POINT  4882  9.895007998246125  26.62370476614767
+  POINT  4883  9.383403857216514  26.62219238204935
+  POINT  4884  9.645779171780866  27.95898679566293
+  POINT  4885  9.392678108416897  28.40351120876002
+  POINT  4886  8.880975044494647  28.39978174499532
+  POINT  4887  9.387389390594027  27.51154309762205
+  POINT  4888  14.26073289743033  28.8691395757118
+  POINT  4889  13.99842144929555  28.41952401656783
+  POINT  4890  13.99771942752645  29.30896742654093
+  POINT  4891  13.48445722189115  28.41718289837834
+  POINT  4892  13.22907518867648  28.86709658595593
+  POINT  4893  13.48364027439367  29.31665262720558
+  POINT  4894  2.778186435888486  8.938957890864957
+  POINT  4895  3.285536154833564  8.93983143640984
+  POINT  4896  0.503576558953103  8.480088415641912
+  POINT  4897  0.7545340256392324  8.025313551344778
+  POINT  4898  1.257490675288657  8.028793692477928
+  POINT  4899  1.00487166372454  7.572984560185061
+  POINT  4900  1.767218177292147  9.833864649502274
+  POINT  4901  1.261813121296191  9.833435129749081
+  POINT  4902  2.01977490415053  9.386150013300199
+  POINT  4903  1.254058685362145  7.116431701475741
+  POINT  4904  0.7511020357127205  7.112951560342591
+  POINT  4905  1.503048670056133  6.664067888028908
+  POINT  4906  1.756818298067953  7.124100887871379
+  POINT  4907  3.221422303399006  2.620248389708918
+  POINT  4908  3.480914914435558  3.091369166068999
+  POINT  4909  2.72098085638526  3.493309688384574
+  POINT  4910  3.229661216416159  3.523299759226276
+  POINT  4911  2.982688780121403  3.965001676074344
+  POINT  4912  2.46865487040522  3.007906565470829
+  POINT  4913  2.722869289518796  2.56051282330207
+  POINT  4914  -1.010191681274808  16.47724942694537
+  POINT  4915  -1.263131355488745  16.91548129340297
+  POINT  4916  -2.020306230344167  16.47789566114399
+  POINT  4917  -1.767492742491601  16.03853792813051
+  POINT  4918  -1.262539725172341  16.03840777843346
+  POINT  4919  12.1997613590734  12.92710547342492
+  POINT  4920  11.94479095056584  12.47843891822832
+  POINT  4921  11.43422157083276  12.47855544044724
+  POINT  4922  11.17576264345388  12.92727100195365
+  POINT  4923  11.94436521973632  13.37375023233481
+  POINT  4924  7.336251480752613  18.6795640871081
+  POINT  4925  7.844937134949372  18.67964044904051
+  POINT  4926  8.099974578704396  18.23956992571268
+  POINT  4927  7.84480578458009  17.79945448070259
+  POINT  4928  8.354717919779731  17.79936124634732
+  POINT  4929  7.335669970649025  17.79968796401571
+  POINT  4930  7.081931177971981  18.23961942058892
+  POINT  4931  8.354982325926542  23.08157075161737
+  POINT  4932  7.844991506275383  23.08106290277033
+  POINT  4933  7.844803584321875  22.20054442238268
+  POINT  4934  8.354715387699985  22.20063715773581
+  POINT  4935  8.610505338363385  22.64100603529607
+  POINT  4936  7.590411112199734  22.64052001245645
+  POINT  4937  7.335856170051208  23.08082965169779
+  POINT  4938  7.335668248097701  22.20031117131014
+  POINT  4939  9.890818040191585  21.32074068357608
+  POINT  4940  10.40541311898843  21.32077323454844
+  POINT  4941  10.66371321816277  20.88088247878991
+  POINT  4942  10.40367267864471  20.44035402693132
+  POINT  4943  10.91972490192146  20.44052753016572
+  POINT  4944  9.890170248707562  20.4403537256876
+  POINT  4945  10.14618193246625  19.99999877706341
+  POINT  4946  9.634491429138507  20.88059097460354
+  POINT  4947  6.827400667807767  23.08040137415767
+  POINT  4948  7.081981061883418  23.52094426447156
+  POINT  4949  6.066344491613611  23.52030180831326
+  POINT  4950  6.320150731026381  23.96091878388248
+  POINT  4951  6.828063703070947  23.96154890185181
+  POINT  4952  4.803564434818736  21.32240321307486
+  POINT  4953  4.299173358639647  21.32364953328408
+  POINT  4954  4.044571409948016  21.76361015630762
+  POINT  4955  4.295759881507283  22.20207832426327
+  POINT  4956  4.801296257115548  22.20150106250879
+  POINT  4957  5.054931180975862  21.76171558239177
+  POINT  4958  5.306832085229775  22.20081301603004
+  POINT  4959  5.309100262932963  21.32171516659611
+  POINT  4960  5.81454207983198  21.32106756825005
+  POINT  4961  -18.56002184971921  14.22769492657082
+  POINT  4962  -18.58096939592903  13.77580049591028
+  POINT  4963  -19.15364988885438  14.24346495111939
+  POINT  4964  -18.85904440570564  13.34143830515129
+  POINT  4965  -15.33998266280768  14.7338292242525
+  POINT  4966  -15.57188599971363  14.288170055576
+  POINT  4967  -16.07296487229796  14.29114541974748
+  POINT  4968  -16.41267733540978  14.73120693333909
+  POINT  4969  -16.13750880779156  15.17187251392457
+  POINT  4970  -3.788945546787723  16.91866703867328
+  POINT  4971  -4.041277777523542  16.47943067745028
+  POINT  4972  -3.283887755210931  16.91774473014353
+  POINT  4973  -3.03057820446562  16.47865932897363
+  POINT  4974  -2.778699564643894  16.9173169410877
+  POINT  4975  -3.788415114156707  16.03940786842766
+  POINT  4976  -3.282925532369509  16.03938389455073
+  POINT  4977  -2.526915470103403  17.35549624645666
+  POINT  4978  -2.273605919358092  16.91641084528677
+  POINT  4979  -1.516431044502669  17.35399647754574
+  POINT  4980  -1.770560893295203  17.79144659044107
+  POINT  4981  -2.276071417055452  17.79312094010028
+  POINT  4982  -1.768522135803676  16.91607496651296
+  POINT  4983  6.366501243846965  6.244439141771339
+  POINT  4984  6.881681964346839  6.238915939179471
+  POINT  4985  6.620524933946894  6.690686173039952
+  POINT  4986  7.141643473575124  5.784322519668687
+  POINT  4987  6.888811533617075  5.334267858601422
+  POINT  4988  6.360807268283301  5.359380468288856
+  POINT  4989  5.328304956021583  8.043704908345143
+  POINT  4990  5.839992119376236  8.041429038737206
+  POINT  4991  5.072106627115973  7.596960962835897
+  POINT  4992  4.814338839724297  8.045553308551284
+  POINT  4993  6.874612011818435  7.136622928830665
+  POINT  4994  7.12777633937579  7.579721871050277
+  POINT  4995  6.359431291318561  7.142146131422533
+  POINT  4996  6.866104091313161  8.032890848737603
+  POINT  4997  6.099795556301682  7.591597724921501
+  POINT  4998  5.84570847843014  7.145660969130788
+  POINT  4999  6.353714932264657  8.037914201028951
+  POINT  5000  6.081229359011346  4.028063957887165
+  POINT  5001  5.831277611851206  4.472376518875711
+  POINT  5002  5.818440427341621  3.559379919758002
+  POINT  5003  6.331070824970244  3.568782868560602
+  POINT  5004  5.320793662260057  3.555241511663863
+  POINT  5005  5.570635128218955  3.0959604223373
+  POINT  5006  5.055437459855198  4.009246871870873
+  POINT  5007  6.821727892775355  3.591856572778605
+  POINT  5008  6.558938961105631  3.123172534649443
+  POINT  5009  6.777765117627584  2.634655229109696
+  POINT  5010  6.287108049822472  2.611581524891692
+  POINT  5011  7.244265492278114  2.731384312863897
+  POINT  5012  7.354837885284381  3.536944361599219
+  POINT  5013  7.598035916136748  3.04043980858182
+  POINT  5014  4.299970635453084  7.14850787645576
+  POINT  5015  3.788870234546398  7.145933669669137
+  POINT  5016  4.047040109912  7.596235156255416
+  POINT  5017  5.345228489927225  2.610272286506451
+  POINT  5018  5.842875255008789  2.614410694600591
+  POINT  5019  6.061701411530742  2.125893389060844
+  POINT  5020  5.314751048479676  1.807873046646745
+  POINT  5021  5.061202116388895  2.210546263008434
+  POINT  5022  5.970380050087678  1.57731768278398
+  POINT  5023  5.556020582598091  1.44914323051177
+  POINT  5024  5.91032202053712  0.893244814956379
+  POINT  5025  -6.836865785799978  12.49945380288166
+  POINT  5026  -7.089553213907015  12.94295844989903
+  POINT  5027  -6.833499178180947  13.3871348946776
+  POINT  5028  -6.325319961009233  13.38836779917821
+  POINT  5029  -1.767218052469922  9.83386477079263
+  POINT  5030  -1.515143883278228  10.28237400844931
+  POINT  5031  -4.303205496386696  9.835452565483031
+  POINT  5032  -4.556607857026273  10.28150303033054
+  POINT  5033  -3.794281023813899  9.835889357263516
+  POINT  5034  -3.286799988363986  9.836274382571714
+  POINT  5035  -3.540719111353306  10.28304225808364
+  POINT  5036  -4.049286373397377  9.3886846899711
+  POINT  5037  -3.285536068257624  8.939831726257879
+  POINT  5038  -3.794429645178254  8.941483599185215
+  POINT  5039  -4.303354117751051  8.94104680740473
+  POINT  5040  -8.903186047936739  8.909494536004507
+  POINT  5041  -9.153055229364252  9.360382120771384
+  POINT  5042  -8.391528260648695  8.915703764693721
+  POINT  5043  -8.131409949387299  9.367205473050699
+  POINT  5044  -7.880480215519194  8.920252421455185
+  POINT  5045  -8.893751097108121  9.810542690182665
+  POINT  5046  -8.383104174517864  9.813271999453356
+  POINT  5047  -7.872056129388366  9.81782065621482
+  POINT  5048  -0.2524838087497524  13.39540810971175
+  POINT  5049  2.44434774088198e-08  12.95322345942679
+  POINT  5050  -0.2524838007827911  12.50965988836077
+  POINT  5051  -0.757533375523636  12.50963474063003
+  POINT  5052  -1.010043008245645  12.95311658754424
+  POINT  5053  -1.262608748160552  12.5095278632947
+  POINT  5054  -5.055438029190892  4.009250597348579
+  POINT  5055  -4.800176791787235  4.456813104903008
+  POINT  5056  -4.285157933322742  4.447242053838
+  POINT  5057  -4.807632465031426  3.545831769185357
+  POINT  5058  -4.268076983227289  3.565484152107086
+  POINT  5059  -4.016822847882909  3.997414501763457
+  POINT  5060  -4.555688689148163  6.701760771737632
+  POINT  5061  -4.809231035662058  6.255220117419496
+  POINT  5062  -5.325945436912674  6.259862566172071
+  POINT  5063  -4.813858667735643  7.152062022074176
+  POINT  5064  -5.327824915713599  7.150213499506166
+  POINT  5065  -5.072106938070638  7.596961402009646
+  POINT  5066  -5.587460861837469  6.7007619399641
+  POINT  5067  -4.814374102587054  8.940272696222461
+  POINT  5068  -4.559517374367931  8.493071605436576
+  POINT  5069  -5.324236901342186  8.938715377757356
+  POINT  5070  -4.814339024648308  8.045553709415984
+  POINT  5071  -5.328305272626263  8.043705186847973
+  POINT  5072  -2.021045274972744  28.82414544323013
+  POINT  5073  -1.76803673224556  28.37917160193302
+  POINT  5074  -1.262715411558947  28.37904359188522
+  POINT  5075  -1.010161179515999  28.82419250185701
+  POINT  5076  -1.767940371645426  29.27066485235695
+  POINT  5077  -1.262535281707757  29.27109438297196
+  POINT  5078  -3.537066675701101  22.64267533516108
+  POINT  5079  -3.283887565701342  23.08225529095755
+  POINT  5080  -3.78894527952161  23.0813329672272
+  POINT  5081  -2.526915358233893  22.64450376122651
+  POINT  5082  -2.781164941584266  22.20597295586544
+  POINT  5083  -3.285878205800256  22.20420716902598
+  POINT  5084  -2.777737218622537  23.96104394944767
+  POINT  5085  -3.030578038325537  23.52134070986063
+  POINT  5086  -3.282925349818851  23.96061616261071
+  POINT  5087  -2.778699434505028  23.08268307779451
+  POINT  5088  -2.273605830858089  23.08358918012959
+  POINT  5089  -4.294456553710889  23.08098940888245
+  POINT  5090  -4.04127744371113  23.52056936467892
+  POINT  5091  -4.799992926299243  23.08041214616574
+  POINT  5092  -5.052976054246795  23.52015671029886
+  POINT  5093  -2.777506769235351  24.84052461662275
+  POINT  5094  -3.030366432223659  25.28092918756785
+  POINT  5095  -3.282944193104159  24.84072397314284
+  POINT  5096  1.330755233786007e-08  25.28052643955282
+  POINT  5097  -0.2524349013237393  25.72146687178944
+  POINT  5098  -0.7573602844785909  25.72151112349207
+  POINT  5099  -0.2524349052544075  24.84066650044989
+  POINT  5100  -1.514941477347312  26.16264507841994
+  POINT  5101  -1.767575298832624  26.60489236198012
+  POINT  5102  -2.272957792445729  26.60516714734652
+  POINT  5103  8.652257441255252  31.53745954895175
+  POINT  5104  8.39152909816184  31.0842973257564
+  POINT  5105  7.880480908934858  31.07974849039663
+  POINT  5106  8.414839869207476  32.89164191324666
+  POINT  5107  8.152299658520024  32.43384477376586
+  POINT  5108  8.913239863919834  31.99135925837855
+  POINT  5109  9.175113211385597  32.44721832517048
+  POINT  5110  8.921335274498762  32.89535134269027
+  POINT  5111  8.401581793046937  31.98514988936742
+  POINT  5112  7.891317235855443  31.97994506433906
+  POINT  5113  11.74873159823277  31.58187307730738
+  POINT  5114  11.47479887261305  31.1209339277706
+  POINT  5115  11.49828722778247  32.00603438825626
+  POINT  5116  10.96516324372876  31.99723027702603
+  POINT  5117  10.70432876392238  31.55113677680682
+  POINT  5118  10.95876372439194  31.10769117123329
+  POINT  5119  13.5073245348637  15.16042310084938
+  POINT  5120  13.7722487569601  15.60568703807935
+  POINT  5121  12.98766647301654  15.15683542879488
+  POINT  5122  11.95878835004167  18.67894453890096
+  POINT  5123  11.43914146078369  18.67926892442837
+  POINT  5124  11.69940005256377  19.11861634915865
+  POINT  5125  11.95797422263067  17.80027054191047
+  POINT  5126  12.22006423253389  18.24016781356158
+  POINT  5127  11.95483938702825  19.55914746318869
+  POINT  5128  11.43519249777028  19.55947184871609
+  POINT  5129  11.17515809731908  20.00000102052662
+  POINT  5130  10.9197187628546  19.55946990649659
+  POINT  5131  11.43519863683714  20.44052947238522
+  POINT  5132  11.95485752643337  20.44085700867212
+  POINT  5133  12.20710913316478  20.00000805421938
+  POINT  5134  8.610508600834709  17.35899258697246
+  POINT  5135  8.865677394959015  17.79910803198256
+  POINT  5136  10.66370546167478  19.11911380302585
+  POINT  5137  10.40367106122358  19.55964297483639
+  POINT  5138  9.890168631286432  19.55964267359267
+  POINT  5139  9.634489721044543  19.11940538477516
+  POINT  5140  -4.8003808551864  24.84120085001912
+  POINT  5141  -5.306981717815686  24.84178343725863
+  POINT  5142  -5.054251160006624  25.28243433877643
+  POINT  5143  -5.55994363703766  24.40093575380166
+  POINT  5144  -5.306137401794322  23.96031878138243
+  POINT  5145  -4.799950065447936  23.96038787741774
+  POINT  5146  -11.95797406324265  17.80027060346049
+  POINT  5147  -12.47950852290421  17.80084131416471
+  POINT  5148  -12.4753984618416  16.92143972111907
+  POINT  5149  -11.95613484774709  16.91958059439132
+  POINT  5150  -11.69841188473828  17.35997812379403
+  POINT  5151  -13.25572876182561  16.4853991857355
+  POINT  5152  -13.51392938584669  16.04511550981153
+  POINT  5153  -14.04907256824607  16.92994355105175
+  POINT  5154  -14.30347489893017  16.49353671661515
+  POINT  5155  -17.42133850836408  16.46621230299164
+  POINT  5156  -17.19812027591119  16.01499464947636
+  POINT  5157  -16.66495740057217  16.04359032158593
+  POINT  5158  -16.48596411693903  18.24387092939627
+  POINT  5159  -16.7768887765254  18.67109514329076
+  POINT  5160  -17.3450998387438  18.66931497274819
+  POINT  5161  -17.55961494440304  18.23365541782893
+  POINT  5162  -15.13808693917218  21.32895091825263
+  POINT  5163  -14.87289120763043  20.89506516536105
+  POINT  5164  -15.08660377556885  20.45033549308172
+  POINT  5165  -15.55540002119723  20.44995148230189
+  POINT  5166  -15.67928522368949  21.32845399962185
+  POINT  5167  -15.40246238141945  21.75672542573599
+  POINT  5168  -15.97041154478462  20.90170693614084
+  POINT  5169  -15.10960308030174  23.06196306963319
+  POINT  5170  -14.85525283921842  22.62543744619248
+  POINT  5171  -15.12585041525192  22.18962314831048
+  POINT  5172  -15.63603303387482  23.06058114205074
+  POINT  5173  -15.66704869976923  22.1891262296797
+  POINT  5174  -15.93226468292499  22.62311470327069
+  POINT  5175  -15.60763493081995  24.82273747748248
+  POINT  5176  -16.13755718211401  24.82813379087301
+  POINT  5177  -16.07300703291225  25.70885103720212
+  POINT  5178  -16.41272779402701  25.26878316611768
+  POINT  5179  -15.34000762949547  25.26618761047478
+  POINT  5180  -15.57192119263  25.71183375688789
+  POINT  5181  -4.801571669348379  25.72385239038944
+  POINT  5182  -5.308172531977664  25.72443497762895
+  POINT  5183  -5.562737248413449  26.16686877343349
+  POINT  5184  -5.310107189970187  26.609152448284
+  POINT  5185  -4.802971256910249  26.60801531258947
+  POINT  5186  -6.341450194137229  30.17268166580354
+  POINT  5187  -6.851155409199826  30.1753372598659
+  POINT  5188  -6.859007872044449  31.0718020351126
+  POINT  5189  -6.346618677552621  31.06677857324325
+  POINT  5190  -5.827084132913434  29.27699951540124
+  POINT  5191  -6.079388407703597  28.83197972224318
+  POINT  5192  -5.823064947564565  28.38586492051645
+  POINT  5193  -6.331860416471411  28.38790677782728
+  POINT  5194  -5.315146554267603  28.38430764348843
+  POINT  5195  -5.062470599146903  28.82834390262268
+  POINT  5196  -4.556608069675993  29.71849731589442
+  POINT  5197  -4.811613479718268  30.165702029606
+  POINT  5198  -5.317804366752521  29.27479472056045
+  POINT  5199  -5.574295560869203  29.72185637102933
+  POINT  5200  -4.809682027102673  29.27320075825078
+  POINT  5201  -8.37012581029477  28.39701947502677
+  POINT  5202  -8.623177182075818  27.95266494359922
+  POINT  5203  -8.365439583299061  27.50635270506456
+  POINT  5204  -7.855387859831518  27.50430329700417
+  POINT  5205  -5.055440020725587  35.99075265980588
+  POINT  5206  -4.807634831823819  36.45417118840255
+  POINT  5207  -5.320796682809582  36.4447576399531
+  POINT  5208  -4.268078857383937  36.43451722793773
+  POINT  5209  -4.800178501361454  35.54318914608771
+  POINT  5210  -5.313340352347217  35.53377559763826
+  POINT  5211  -4.285159704616173  35.55275980617505
+  POINT  5212  -3.759706120423524  35.55518051249211
+  POINT  5213  -3.243368772057292  35.56417992560635
+  POINT  5214  -2.982690542380816  36.03499790770628
+  POINT  5215  -4.016824585547176  36.00258691457239
+  POINT  5216  -3.742625273191289  36.4369379342548
+  POINT  5217  -3.229663611360475  36.47669964102222
+  POINT  5218  -7.354840159678442  36.4630586256994
+  POINT  5219  -7.903282692818332  36.56886240561009
+  POINT  5220  -7.598040633279414  36.95956098877416
+  POINT  5221  -7.126972347222575  36.01744750407371
+  POINT  5222  -6.821730287683658  36.40814608723778
+  POINT  5223  -9.020623545645163  37.38900516343447
+  POINT  5224  -9.424243510782267  37.64039778849911
+  POINT  5225  -8.55965244144466  38.07573926529626
+  POINT  5226  -8.556945323688646  37.47116104503266
+  POINT  5227  -8.146988554944242  37.6652934901699
+  POINT  5228  -8.61016138837582  36.98320888708665
+  POINT  5229  -8.948133722619318  34.7550130983436
+  POINT  5230  -8.426272911082375  34.70970901961947
+  POINT  5231  -8.68619953008956  35.18782904777932
+  POINT  5232  -8.171918681535782  34.25045922190498
+  POINT  5233  -7.909984489006024  34.68327517134071
+  POINT  5234  -8.934156830967638  33.81427302246146
+  POINT  5235  -8.427661598312522  33.81056375948693
+  POINT  5236  -7.402798616599393  34.67408020217368
+  POINT  5237  -7.657152846145986  35.13332999988818
+  POINT  5238  -7.405024596478357  35.59824753662824
+  POINT  5239  -7.912210468884988  35.60744250579526
+  POINT  5240  -6.871914724483572  35.54333499816662
+  POINT  5241  -6.888813562914232  34.66573357218922
+  POINT  5242  -5.838136677064515  34.62974945206364
+  POINT  5243  -6.36080931903647  34.64062034113785
+  POINT  5244  -6.621962729861593  35.09902179966978
+  POINT  5245  -6.34391048060581  35.51822176711525
+  POINT  5246  -5.576018659483458  35.08006032626925
+  POINT  5247  -5.831280178847591  35.52762383998741
+  POINT  5248  -6.081232173469569  35.97193703848426
+  POINT  5249  -6.414624379431359  38.42551013672836
+  POINT  5250  -6.06170323738905  37.87410771123918
+  POINT  5251  -6.85513583736405  38.26715632721284
+  POINT  5252  -6.765677367949003  38.82088227601641
+  POINT  5253  -5.842877995505253  37.38558927504278
+  POINT  5254  -5.57063863640637  36.90403968955684
+  POINT  5255  -5.818443825308139  36.44062116096016
+  POINT  5256  -6.287111020788723  37.38842164676031
+  POINT  5257  -6.558941939522226  36.87683020971369
+  POINT  5258  -6.777767181406023  37.36534864591009
+  POINT  5259  -6.331074127066358  36.431219088088
+  POINT  5260  8.876288812510946  27.50911496320762
+  POINT  5261  9.129651777699287  27.06523084655123
+  POINT  5262  8.872303279133433  26.61976424763491
+  POINT  5263  8.361773132138943  26.61807490241647
+  POINT  5264  8.108499459230185  27.06075329726731
+  POINT  5265  8.370125922301042  28.3970195492633
+  POINT  5266  7.859855674189975  28.39452253470644
+  POINT  5267  8.623177303212083  27.95266501854642
+  POINT  5268  7.602700800558854  27.94780788776358
+  POINT  5269  8.365439690317341  27.5063527674756
+  POINT  5270  7.85538794993132  27.50430335260611
+  POINT  5271  2.013562028795792  7.580836026957666
+  POINT  5272  2.26255201348978  7.128472213510832
+  POINT  5273  2.77500305718747  8.037874485340598
+  POINT  5274  3.027617726611467  7.589434151032957
+  POINT  5275  3.283325039581317  8.042101283776436
+  POINT  5276  4.303354076505858  8.941046540609735
+  POINT  5277  4.559517266307168  8.493071306044598
+  POINT  5278  4.303318937401558  8.046327360535352
+  POINT  5279  3.794429651747119  8.941483306382132
+  POINT  5280  3.539603867070875  8.492193488056373
+  POINT  5281  3.792218536494872  8.04375315374873
+  POINT  5282  1.765500287132538  8.935229901889144
+  POINT  5283  1.512133152393508  8.483328312230684
+  POINT  5284  1.26052017194238  8.933024273296105
+  POINT  5285  2.268204505900643  8.035370646710422
+  POINT  5286  2.523911818870494  8.488037779453901
+  POINT  5287  2.271387884601659  8.93645405223478
+  POINT  5288  1.762470790478816  8.030999321070967
+  POINT  5289  0.7570181339856141  9.832621206105948
+  POINT  5290  0.2521486956286256  9.832463953535083
+  POINT  5291  1.009092319370833  9.384111939311431
+  POINT  5292  7.294083631537163e-08  9.383298033689051
+  POINT  5293  0.755725184631803  8.932210349652973
+  POINT  5294  0.2521487063815567  8.931176081657238
+  POINT  5295  0.5001445506630317  6.653216377611718
+  POINT  5296  0.2509575290254266  7.109769236321039
+  POINT  5297  -0.2509574054255117  7.109769247532057
+  POINT  5298  -0.5001444446786542  6.653216389361097
+  POINT  5299  -0.2485632222434483  6.187417819036827
+  POINT  5300  1.486808276477663  4.815803748516092
+  POINT  5301  1.233115516860302  4.336364274084247
+  POINT  5302  0.7400739793290316  4.319006830385741
+  POINT  5303  0.4944715681245202  4.791077890962915
+  POINT  5304  1.247341716301759  6.199670761156298
+  POINT  5305  1.750101329007567  6.207339947551936
+  POINT  5306  1.241668873888472  5.270356238309256
+  POINT  5307  1.739533777842383  5.288390330886163
+  POINT  5308  6.319776508411969  23.08033816696384
+  POINT  5309  6.57365161657976  22.64022355419007
+  POINT  5310  5.813247233137025  22.20059394145463
+  POINT  5311  5.559612309276712  22.64037942157165
+  POINT  5312  5.812595440385603  23.08012398834565
+  POINT  5313  6.827537292599711  22.20035520381776
+  POINT  5314  7.081929764721854  21.760379613744
+  POINT  5315  6.067132909156976  21.76072559108232
+  POINT  5316  6.321207979898867  21.32076562341935
+  POINT  5317  6.319913133203913  22.20029199662393
+  POINT  5318  6.828119358218929  21.32047871636039
+  POINT  5319  -15.60761428771511  15.17729136075921
+  POINT  5320  -15.8759118955204  15.61135550393402
+  POINT  5321  -15.07838575053652  15.17331221426195
+  POINT  5322  5.313338001627086  4.46622421620718
+  POINT  5323  4.800176500099562  4.456810078993488
+  POINT  5324  5.57601665209557  4.919939725998326
+  POINT  5325  3.782261521536312  6.243544847125578
+  POINT  5326  4.035803768525128  5.797003854445578
+  POINT  5327  4.295343007076298  6.25166539718948
+  POINT  5328  5.32782445313552  7.150212913721168
+  POINT  5329  5.5874601881524  6.7007613202222
+  POINT  5330  4.555688461472631  6.70175982734103
+  POINT  5331  4.809230708461447  6.255218834661029
+  POINT  5332  4.813858336838233  7.152061313927309
+  POINT  5333  -5.310107499537395  13.39084792377241
+  POINT  5334  -5.817351857309676  13.38983227473242
+  POINT  5335  -6.07268972719344  12.94608409290475
+  POINT  5336  -5.830755763497873  9.830536332965101
+  POINT  5337  -5.574295325382317  10.27814411627772
+  POINT  5338  -5.827083974112147  10.72300100372588
+  POINT  5339  -5.317804215979157  10.7252057153338
+  POINT  5340  -6.328097480913719  12.50141410567111
+  POINT  5341  -6.584305435820698  12.05624829120225
+  POINT  5342  -5.820129377214162  12.50287858122533
+  POINT  5343  -2.273653862835852  10.72932296672886
+  POINT  5344  -2.779998427153544  10.72963483000736
+  POINT  5345  -2.526893511585702  10.28311542011334
+  POINT  5346  -3.03325797369162  11.17544935978157
+  POINT  5347  -3.286081789785646  11.62005936335257
+  POINT  5348  -2.77958259449772  11.62045238019389
+  POINT  5349  -3.793978657891382  10.72885678785785
+  POINT  5350  -3.28649762244147  10.72924181316605
+  POINT  5351  -3.033012140510429  9.388247926083039
+  POINT  5352  -2.778186307943474  8.938958170589331
+  POINT  5353  -2.271387729106642  8.936454262492179
+  POINT  5354  -2.019774768934057  9.386150177582453
+  POINT  5355  -2.273105663732145  9.835088963624671
+  POINT  5356  -2.779450228049837  9.835400826903166
+  POINT  5357  -5.5822245505022  8.490021566077278
+  POINT  5358  -5.835924092640452  8.936439449580325
+  POINT  5359  -5.83999246392453  8.041429258670941
+  POINT  5360  -6.353715300277041  8.037914311090102
+  POINT  5361  -0.7574091937513752  13.39536386100999
+  POINT  5362  -0.5049253668923982  13.83754850584218
+  POINT  5363  -1.262484566388291  13.39525698367467
+  POINT  5364  -0.7573602894107085  14.27848893565566
+  POINT  5365  -1.262291965254416  14.27845371053971
+  POINT  5366  -3.28331274272134  14.2777561649855
+  POINT  5367  -3.536686451350343  13.83613863307331
+  POINT  5368  -2.777875273536981  14.27795550083099
+  POINT  5369  -2.272576442111081  23.96112623819538
+  POINT  5370  -2.524923753604395  24.40040169094545
+  POINT  5371  -2.272345992723895  24.84060690537046
+  POINT  5372  -1.009801486872866  25.28056166755413
+  POINT  5373  -1.262291950595193  25.72154635362897
+  POINT  5374  -1.767382679741587  25.721695622482
+  POINT  5375  -2.01983108067216  25.2806633643694
+  POINT  5376  -2.272480607424279  25.72176208916036
+  POINT  5377  -1.767248065041203  24.84054043869209
+  POINT  5378  -2.778352392893433  26.60544966214032
+  POINT  5379  -3.284192720232348  26.60594747324546
+  POINT  5380  -2.52542680694141  26.16307686206677
+  POINT  5381  -2.777875207871983  25.72204460395416
+  POINT  5382  -3.28331263174079  25.72224396047425
+  POINT  5383  6.866104760713585  31.96710990335178
+  POINT  5384  7.380362796677328  31.97547094211897
+  POINT  5385  7.629644931204242  31.52677605772053
+  POINT  5386  6.606301269717369  31.51727851965659
+  POINT  5387  7.369526469756744  31.07527436817653
+  POINT  5388  6.859007733442916  31.07180208214582
+  POINT  5389  13.51392964722839  16.04511534389315
+  POINT  5390  14.03639847868913  16.04943449810747
+  POINT  5391  13.52076444975717  16.92688894744077
+  POINT  5392  14.04907281755069  16.92994337381335
+  POINT  5393  14.30347517478823  16.49353649549375
+  POINT  5394  11.18084815906273  18.23937667376692
+  POINT  5395  10.92145986158483  18.67904848402461
+  POINT  5396  10.40541215995382  18.6792215523644
+  POINT  5397  11.43896757839668  17.79930462984569
+  POINT  5398  11.69841204276576  17.35997805758548
+  POINT  5399  10.92128597919782  17.79908418944193
+  POINT  5400  10.66359917374389  17.35875830998669
+  POINT  5401  10.40547975440994  17.79883035390792
+  POINT  5402  8.865944840957612  16.91817543653783
+  POINT  5403  8.354985365778326  16.91842865090259
+  POINT  5404  8.355742015396309  16.03671800269559
+  POINT  5405  8.100430211024863  16.47811944809296
+  POINT  5406  9.377722904526436  17.79898153735976
+  POINT  5407  9.890885340997441  17.79886408828225
+  POINT  5408  9.634630512485  17.35862192353019
+  POINT  5409  10.14857214645137  18.23918996773749
+  POINT  5410  9.89081774654132  18.67925528673874
+  POINT  5411  9.377649707542098  18.67937380014824
+  POINT  5412  9.121932223471456  18.23935019673461
+  POINT  5413  12.7301955341313  15.59870120865399
+  POINT  5414  12.46808208164849  15.15416875358384
+  POINT  5415  10.66170303024074  13.81985063353565
+  POINT  5416  10.91914277660979  13.37360320785854
+  POINT  5417  11.43075873813842  13.37311649985818
+  POINT  5418  11.68774535289223  13.8200824382397
+  POINT  5419  -4.294356920184748  24.84106161932534
+  POINT  5420  -3.788433699542313  24.84070001560085
+  POINT  5421  -4.041727076734903  25.28149014781243
+  POINT  5422  -4.547087477993811  24.40041071780754
+  POINT  5423  -3.535574036554005  24.40029544465575
+  POINT  5424  -3.788414856257005  23.96059220506871
+  POINT  5425  -4.293926130446284  23.96024864672396
+  POINT  5426  -13.52905046638359  17.80348872203954
+  POINT  5427  -13.79175767275845  17.36796966650665
+  POINT  5428  -13.52076421705971  16.92688909198984
+  POINT  5429  -13.00252392740061  17.80282689423603
+  POINT  5430  -12.998413866338  16.9234253011904
+  POINT  5431  -12.7404339170757  17.36292962737342
+  POINT  5432  -14.02979306030074  15.16474248285489
+  POINT  5433  -14.55273569758199  15.16992825407098
+  POINT  5434  -14.03639819104111  16.04943470346083
+  POINT  5435  -14.56179397742396  16.05410844354104
+  POINT  5436  -13.77224846434048  15.60568723673743
+  POINT  5437  -14.82036732248942  15.61339039057769
+  POINT  5438  -15.08744403037848  16.05749240373201
+  POINT  5439  -16.2090642477196  17.81010190909618
+  POINT  5440  -15.93239653765298  17.37709080090277
+  POINT  5441  -16.75104577713385  17.80975889004021
+  POINT  5442  -17.29733902574828  17.80237948696045
+  POINT  5443  -17.82900832379805  17.79250699444906
+  POINT  5444  -18.125149458915  17.3358334365596
+  POINT  5445  -17.74265051816197  16.90620584174569
+  POINT  5446  -17.02043915652885  17.36861046666035
+  POINT  5447  -17.24542039534538  16.92123752482653
+  POINT  5448  -16.69912714673096  16.9286169279063
+  POINT  5449  -6.088630944097952  30.61808470458812
+  POINT  5450  -5.83075607699084  30.16946420465471
+  POINT  5451  -5.321476310829926  30.16725940981392
+  POINT  5452  -5.068073995839905  30.61330986323137
+  POINT  5453  -5.324237322301012  31.06128512670801
+  POINT  5454  -5.835924560406232  31.06356111209442
+  POINT  5455  -7.109843760575517  30.62477446137646
+  POINT  5456  -7.369526571375625  31.07527433075212
+  POINT  5457  -8.131410593699739  30.63279557430232
+  POINT  5458  -7.880480933021181  31.07974846151187
+  POINT  5459  -7.872056536659996  30.1821803785594
+  POINT  5460  -7.361674108531002  30.17880955550542
+  POINT  5461  -7.613368185284306  29.73274317704884
+  POINT  5462  -7.859855589284646  28.39452247461595
+  POINT  5463  -8.117653318329905  28.84163918972367
+  POINT  5464  -7.097783486965113  28.83658188443342
+  POINT  5465  -7.355184427237546  29.28425727165385
+  POINT  5466  -7.865566855366541  29.28762809470784
+  POINT  5467  -6.840628617274074  28.38986724165644
+  POINT  5468  -6.584305157135041  27.94375243992971
+  POINT  5469  -7.602700719593607  27.94780783183896
+  POINT  5470  -7.345760498175617  27.50220836892409
+  POINT  5471  -7.350228227628744  28.39242754653586
+  POINT  5472  -6.836865316533313  27.50054699198497
+  POINT  5473  -8.859668248791966  36.47820331889234
+  POINT  5474  -9.192245205163893  36.13326199675004
+  POINT  5475  -8.926778614439051  35.64424337939984
+  POINT  5476  -8.395990026835449  36.56035920049054
+  POINT  5477  -8.152789553234477  36.06385683741578
+  POINT  5478  -8.404917802902107  35.59893930067572
+  POINT  5479  -9.445446661180085  34.74868923560489
+  POINT  5480  -9.928438211384101  34.70959839015399
+  POINT  5481  -9.1855200421729  34.27056920744505
+  POINT  5482  -10.20212715258456  34.27925189416473
+  POINT  5483  -9.94558386098727  33.81809877026199
+  POINT  5484  -9.431469769528404  33.80794915972277
+  POINT  5485  -6.972437622679337  37.78020738278309
+  POINT  5486  -7.24426854141284  37.26861594573647
+  POINT  5487  -7.793216463077668  37.97434844713221
+  POINT  5488  -7.792711074552729  37.37441972564716
+  POINT  5489  -7.321637197370867  38.17042362703923
+  POINT  5490  -7.678418548302079  38.46731947176784
+  POINT  5491  2.770028761860395  7.135494617296446
+  POINT  5492  2.513285031132556  6.678759478210158
+  POINT  5493  3.271742031244156  6.237332593188722
+  POINT  5494  3.531281269795326  6.691994135932626
+  POINT  5495  3.278350744254242  7.139721415732282
+  POINT  5496  0.2485632276968463  6.187417834842025
+  POINT  5497  0.7487077343841402  6.190600158863577
+  POINT  5498  0.9957603933355736  5.733872218386605
+  POINT  5499  -3.852233976253672e-08  5.724801600288686
+  POINT  5500  0.7430348919708534  5.261285636016535
+  POINT  5501  0.2485630875716218  5.254593871040265
+  POINT  5502  -15.61382878159145  16.05886928995985
+  POINT  5503  -16.1437233016679  16.05345044312521
+  POINT  5504  -16.40287428664322  16.49110410761176
+  POINT  5505  -15.63614367756524  16.93957798060823
+  POINT  5506  -15.35525543652598  16.4995873429232
+  POINT  5507  -16.17789304782668  16.93847704944558
+  POINT  5508  1.997790912210466  5.756661433504865
+  POINT  5509  2.253497865964841  6.221058560377475
+  POINT  5510  2.760974614335455  6.228080964163087
+  POINT  5511  3.011954866076441  5.77963167535604
+  POINT  5512  2.242930314799657  5.302108943711701
+  POINT  5513  4.543058481172607  4.904216705369631
+  POINT  5514  4.288462587269439  5.349885195959473
+  POINT  5515  4.803481147968283  5.359455913919637
+  POINT  5516  3.775381101729453  5.34176464589557
+  POINT  5517  4.285157939400719  4.447239361033324
+  POINT  5518  3.759704530313033  4.444818867162756
+  POINT  5519  5.325944699989877  6.259861521617189
+  POINT  5520  5.843828725284497  6.255309577026809
+  POINT  5521  6.104985755684442  5.803539343166328
+  POINT  5522  5.838134749720831  5.370250903544328
+  POINT  5523  5.065599245593544  5.809767091465639
+  POINT  5524  5.320195139496712  5.364098600875796
+  POINT  5525  -4.802971484868761  13.39198497902312
+  POINT  5526  -4.296500513511889  13.39272959833429
+  POINT  5527  -5.057585608825249  12.94868562370967
+  POINT  5528  -6.335879478904616  10.72095926303271
+  POINT  5529  -6.079388369501457  11.1680208620888
+  POINT  5530  -6.84062880750044  11.61013355490421
+  POINT  5531  -7.097783541825249  11.16341899720847
+  POINT  5532  -6.331860502614183  11.61209385769366
+  POINT  5533  -5.823064997821714  11.61413559838683
+  POINT  5534  -6.341449844176644  9.827318953093449
+  POINT  5535  -6.08863052415921  9.381915881388753
+  POINT  5536  -6.346618173319224  8.933222069708673
+  POINT  5537  -2.273750259397786  11.62081619889232
+  POINT  5538  -2.526574075491812  12.06542620246332
+  POINT  5539  -2.27331255849431  12.50912509652447
+  POINT  5540  -2.779144893594244  12.50876127782604
+  POINT  5541  -1.767930060637219  12.50939986568534
+  POINT  5542  -1.51542042791521  12.06591801877112
+  POINT  5543  -2.020500878739651  12.95273494104806
+  POINT  5544  -7.369525954258662  8.924726485537136
+  POINT  5545  -7.629644265520056  8.473224777180157
+  POINT  5546  -6.606300873029995  8.482722239581177
+  POINT  5547  -6.86610443150657  8.032890912771032
+  POINT  5548  -6.859007304548753  8.928198671389605
+  POINT  5549  -7.109843254547891  9.375226315664634
+  POINT  5550  -7.380362326127036  8.024529817709622
+  POINT  5551  -2.525426847734203  13.83692324382117
+  POINT  5552  -2.272480651437661  14.27823799621374
+  POINT  5553  -1.767382702124846  14.27830445157146
+  POINT  5554  -1.514941488764452  13.83735499817217
+  POINT  5555  -1.767575303258722  13.39510772470642
+  POINT  5556  -2.272957801115813  13.39483295554556
+  POINT  5557  -2.778352423215133  13.39455046016281
+  POINT  5558  -1.767492689297242  23.96146211472275
+  POINT  5559  -2.020306154315385  23.52210437322497
+  POINT  5560  -1.263131319383013  23.08451873173783
+  POINT  5561  -1.01019165252415  23.52275060399421
+  POINT  5562  -1.768522078044251  23.08392505665697
+  POINT  5563  -1.262295067277426  24.84067058321086
+  POINT  5564  -1.514809979329161  24.40061412421192
+  POINT  5565  -0.7575089425560693  23.96190261348339
+  POINT  5566  -0.5049284856589678  24.40077541610661
+  POINT  5567  -0.7573634011608242  24.84063535307396
+  POINT  5568  -1.262539691533465  23.96159225924151
+  POINT  5569  -4.549022158760552  26.16510835246748
+  POINT  5570  -4.295100786789511  25.72310771361495
+  POINT  5571  -3.789177566147076  25.72274610989047
+  POINT  5572  -3.5366863417954  26.16386152627678
+  POINT  5573  -3.790057654638633  26.60644962266168
+  POINT  5574  -4.296500374351382  26.60727063581498
+  POINT  5575  10.92066954525162  16.91793455038633
+  POINT  5576  10.40486332046374  16.91768071485232
+  POINT  5577  10.40472607340097  16.03513246006513
+  POINT  5578  10.91930146715205  16.03530284192124
+  POINT  5579  10.66209384858155  15.5935783467344
+  POINT  5580  12.47199488428663  16.03898490629723
+  POINT  5581  12.99157927565469  16.04165158150828
+  POINT  5582  12.99841407818347  16.92342518505589
+  POINT  5583  12.47539865640488  16.92143962440089
+  POINT  5584  13.25572899738372  16.48539904153639
+  POINT  5585  11.95273125070042  16.03712579643803
+  POINT  5586  11.43576030048511  16.03598289401182
+  POINT  5587  11.69364019254794  15.59489163101673
+  POINT  5588  11.17839252530453  16.47753700734255
+  POINT  5589  11.43712837858468  16.91861460247691
+  POINT  5590  11.95613502281867  16.91958051454169
+  POINT  5591  12.21411499222381  16.48007616929232
+  POINT  5592  11.95093625080717  15.15244834498486
+  POINT  5593  11.43396530059186  15.15130544255865
+  POINT  5594  11.43270011507272  14.26415543114492
+  POINT  5595  11.94630659667062  14.26478916362155
+  POINT  5596  12.20840718969241  14.71058256512575
+  POINT  5597  9.122219499790404  16.47724514251171
+  POINT  5598  9.377742734846787  16.91780907858158
+  POINT  5599  9.890905171317794  16.91769162950407
+  POINT  5600  10.14797554282553  16.47686786990372
+  POINT  5601  9.890767924255025  16.03514337471688
+  POINT  5602  10.91783758504318  14.26368304084108
+  POINT  5603  10.40540174398959  14.26408496861366
+  POINT  5604  10.40452737681125  15.15066267039869
+  POINT  5605  10.91910277056232  15.15083305225481
+  POINT  5606  11.17639882882156  14.70838976622293
+  POINT  5607  10.14864614667206  14.70832398270322
+  POINT  5608  9.89163722469128  15.15106927718282
+  POINT  5609  3.51170272767204  4.885646738160905
+  POINT  5610  3.243367337511309  4.435819617914195
+  POINT  5611  2.748276492019028  5.323513767621375
+  POINT  5612  2.490019357650945  4.85524266500267
+  POINT  5613  3.259043908927729  5.332765396647009
+  POINT  5614  2.734686977480409  4.405829547072493
+  POINT  5615  -3.031723722491756  12.95196238977117
+  POINT  5616  -3.284985239489258  12.50826349571002
+  POINT  5617  -4.044006831271692  12.95064364330777
+  POINT  5618  -3.790057750626966  13.39355056268168
+  POINT  5619  -3.284192769110147  13.39405267804679
+  POINT  5620  -3.792541619613724  11.61935880772859
+  POINT  5621  -3.538866240419825  12.0643618281409
+  POINT  5622  -3.791445069317336  12.50756294008603
+  POINT  5623  -4.297887832202258  12.50674197573865
+  POINT  5624  -6.851155057129612  9.824663480890202
+  POINT  5625  -6.593280296468273  10.27328393246655
+  POINT  5626  -7.355184359388906  10.7157436666423
+  POINT  5627  -7.613367931970085  10.26725782144039
+  POINT  5628  -7.36167370683952  9.821191295037732
+  POINT  5629  -6.845584691857582  10.71830379082946
+  POINT  5630  -1.76803668438193  11.62082851212063
+  POINT  5631  -2.021045203387837  11.17585468985119
+  POINT  5632  -1.767940287819996  10.72933527995718
+  POINT  5633  -1.262715371905262  11.62095650973
+  POINT  5634  -1.010161141140113  11.17580760248892
+  POINT  5635  -1.262535223830214  10.72890573157164
+  POINT  5636  9.378288957212938  16.03556981048882
+  POINT  5637  8.866491063323762  16.03593616844507
+  POINT  5638  8.611811472818843  15.5950426706727
+  POINT  5639  8.867790365254811  15.15257222445195
+  POINT  5640  9.379158257649195  15.15149571295476
+  POINT  5641  9.635039487788383  15.59383440065023
+  POINT  5642  -4.299837112326497  11.6184558241427
+  POINT  5643  -4.047052661692318  11.17415335935438
+  POINT  5644  -4.301274150604154  10.72795380427197
+  POINT  5645  -5.062470509557039  11.17165648927523
+  POINT  5646  -4.809681860827208  10.72679960182707
+  POINT  5647  -4.805074905311793  12.50557281219472
+  POINT  5648  -5.312210919980426  12.50443575694401
+  POINT  5649  -4.552513143357436  12.06249210897299
+  POINT  5650  -5.567618673700705  12.05976576971038
+  POINT  5651  -4.807024185436029  11.61728666059878
+  POINT  5652  -5.315146540587978  11.61569277410551
 
 END POINTS LIST
 
@@ -1403,669 +5665,2765 @@ END POINTS LIST
 
 BEGIN MESH STRUCTURE DESCRIPTION
 
-CONVEX 0    'GT_PK(2,2)'      181  364  142  365  366  161
-CONVEX 1    'GT_PK(2,2)'      180  367  181  368  369  3
-CONVEX 2    'GT_PK(2,2)'      180  367  181  370  365  161
-CONVEX 3    'GT_PK(2,2)'      358  371  359  372  373  4
-CONVEX 4    'GT_PK(2,2)'      360  374  359  375  373  4
-CONVEX 5    'GT_PK(2,2)'      350  376  360  377  378  361
-CONVEX 6    'GT_PK(2,2)'      127  379  108  380  381  128
-CONVEX 7    'GT_PK(2,2)'      127  379  108  382  383  107
-CONVEX 8    'GT_PK(2,2)'      182  384  201  385  386  2
-CONVEX 9    'GT_PK(2,2)'      141  387  142  388  389  122
-CONVEX 10    'GT_PK(2,2)'      141  387  142  390  366  161
-CONVEX 11    'GT_PK(2,2)'      17  391  8  392  393  7
-CONVEX 12    'GT_PK(2,2)'      325  394  309  395  396  326
-CONVEX 13    'GT_PK(2,2)'      354  397  341  398  399  353
-CONVEX 14    'GT_PK(2,2)'      39  400  55  401  402  40
-CONVEX 15    'GT_PK(2,2)'      39  403  25  401  404  40
-CONVEX 16    'GT_PK(2,2)'      71  405  55  406  407  72
-CONVEX 17    'GT_PK(2,2)'      316  408  317  409  410  331
-CONVEX 18    'GT_PK(2,2)'      356  411  346  412  413  357
-CONVEX 19    'GT_PK(2,2)'      87  414  86  415  416  69
-CONVEX 20    'GT_PK(2,2)'      89  417  108  418  383  107
-CONVEX 21    'GT_PK(2,2)'      89  419  71  420  406  72
-CONVEX 22    'GT_PK(2,2)'      109  421  108  422  381  128
-CONVEX 23    'GT_PK(2,2)'      126  423  127  424  382  107
-CONVEX 24    'GT_PK(2,2)'      163  425  162  426  427  143
-CONVEX 25    'GT_PK(2,2)'      163  425  162  428  429  2
-CONVEX 26    'GT_PK(2,2)'      163  430  182  428  385  2
-CONVEX 27    'GT_PK(2,2)'      191  431  211  432  433  210
-CONVEX 28    'GT_PK(2,2)'      191  434  190  435  436  1
-CONVEX 29    'GT_PK(2,2)'      191  434  190  432  437  210
-CONVEX 30    'GT_PK(2,2)'      136  438  155  439  440  135
-CONVEX 31    'GT_PK(2,2)'      149  441  130  442  443  150
-CONVEX 32    'GT_PK(2,2)'      131  444  130  445  443  150
-CONVEX 33    'GT_PK(2,2)'      15  446  6  447  448  5
-CONVEX 34    'GT_PK(2,2)'      18  449  17  450  451  30
-CONVEX 35    'GT_PK(2,2)'      18  452  9  453  454  0
-CONVEX 36    'GT_PK(2,2)'      18  455  8  453  456  0
-CONVEX 37    'GT_PK(2,2)'      18  449  17  455  391  8
-CONVEX 38    'GT_PK(2,2)'      363  457  362  458  459  352
-CONVEX 39    'GT_PK(2,2)'      351  460  362  461  459  352
-CONVEX 40    'GT_PK(2,2)'      351  462  338  463  464  350
-CONVEX 41    'GT_PK(2,2)'      351  463  350  465  377  361
-CONVEX 42    'GT_PK(2,2)'      351  460  362  465  466  361
-CONVEX 43    'GT_PK(2,2)'      339  467  325  468  469  324
-CONVEX 44    'GT_PK(2,2)'      339  470  338  468  471  324
-CONVEX 45    'GT_PK(2,2)'      339  472  351  473  461  352
-CONVEX 46    'GT_PK(2,2)'      339  472  351  470  462  338
-CONVEX 47    'GT_PK(2,2)'      340  474  341  475  399  353
-CONVEX 48    'GT_PK(2,2)'      340  476  339  477  473  352
-CONVEX 49    'GT_PK(2,2)'      340  476  339  478  467  325
-CONVEX 50    'GT_PK(2,2)'      340  474  341  479  480  326
-CONVEX 51    'GT_PK(2,2)'      340  478  325  479  395  326
-CONVEX 52    'GT_PK(2,2)'      340  481  363  475  482  353
-CONVEX 53    'GT_PK(2,2)'      340  481  363  477  458  352
-CONVEX 54    'GT_PK(2,2)'      278  483  259  484  485  258
-CONVEX 55    'GT_PK(2,2)'      276  486  257  487  488  256
-CONVEX 56    'GT_PK(2,2)'      347  489  358  490  491  357
-CONVEX 57    'GT_PK(2,2)'      347  492  346  490  413  357
-CONVEX 58    'GT_PK(2,2)'      337  493  338  494  464  350
-CONVEX 59    'GT_PK(2,2)'      308  495  325  496  469  324
-CONVEX 60    'GT_PK(2,2)'      308  495  325  497  394  309
-CONVEX 61    'GT_PK(2,2)'      291  498  309  499  500  292
-CONVEX 62    'GT_PK(2,2)'      291  501  308  498  497  309
-CONVEX 63    'GT_PK(2,2)'      291  501  308  502  503  290
-CONVEX 64    'GT_PK(2,2)'      197  504  216  505  506  196
-CONVEX 65    'GT_PK(2,2)'      197  507  178  508  509  198
-CONVEX 66    'GT_PK(2,2)'      171  510  190  511  436  1
-CONVEX 67    'GT_PK(2,2)'      64  512  81  513  514  80
-CONVEX 68    'GT_PK(2,2)'      19  515  9  516  517  10
-CONVEX 69    'GT_PK(2,2)'      19  518  18  515  452  9
-CONVEX 70    'GT_PK(2,2)'      24  519  39  520  521  38
-CONVEX 71    'GT_PK(2,2)'      24  519  39  522  403  25
-CONVEX 72    'GT_PK(2,2)'      54  523  39  524  400  55
-CONVEX 73    'GT_PK(2,2)'      54  525  71  524  405  55
-CONVEX 74    'GT_PK(2,2)'      54  523  39  526  521  38
-CONVEX 75    'GT_PK(2,2)'      54  527  53  526  528  38
-CONVEX 76    'GT_PK(2,2)'      315  529  316  530  531  299
-CONVEX 77    'GT_PK(2,2)'      343  532  344  533  534  331
-CONVEX 78    'GT_PK(2,2)'      343  535  316  533  409  331
-CONVEX 79    'GT_PK(2,2)'      300  536  316  537  531  299
-CONVEX 80    'GT_PK(2,2)'      300  536  316  538  408  317
-CONVEX 81    'GT_PK(2,2)'      123  539  124  540  541  104
-CONVEX 82    'GT_PK(2,2)'      123  539  124  542  543  143
-CONVEX 83    'GT_PK(2,2)'      123  544  162  542  427  143
-CONVEX 84    'GT_PK(2,2)'      70  545  53  546  547  69
-CONVEX 85    'GT_PK(2,2)'      70  548  87  546  415  69
-CONVEX 86    'GT_PK(2,2)'      70  549  54  545  527  53
-CONVEX 87    'GT_PK(2,2)'      70  549  54  550  525  71
-CONVEX 88    'GT_PK(2,2)'      106  551  126  552  553  125
-CONVEX 89    'GT_PK(2,2)'      106  551  126  554  424  107
-CONVEX 90    'GT_PK(2,2)'      105  555  86  556  557  104
-CONVEX 91    'GT_PK(2,2)'      105  558  87  555  414  86
-CONVEX 92    'GT_PK(2,2)'      105  559  124  556  541  104
-CONVEX 93    'GT_PK(2,2)'      105  560  106  558  561  87
-CONVEX 94    'GT_PK(2,2)'      105  559  124  562  563  125
-CONVEX 95    'GT_PK(2,2)'      105  560  106  562  552  125
-CONVEX 96    'GT_PK(2,2)'      179  564  178  565  509  198
-CONVEX 97    'GT_PK(2,2)'      56  566  73  567  568  57
-CONVEX 98    'GT_PK(2,2)'      56  569  55  570  402  40
-CONVEX 99    'GT_PK(2,2)'      56  569  55  571  407  72
-CONVEX 100    'GT_PK(2,2)'      56  566  73  571  572  72
-CONVEX 101    'GT_PK(2,2)'      90  573  109  574  421  108
-CONVEX 102    'GT_PK(2,2)'      90  575  89  576  420  72
-CONVEX 103    'GT_PK(2,2)'      90  575  89  574  417  108
-CONVEX 104    'GT_PK(2,2)'      90  577  73  576  572  72
-CONVEX 105    'GT_PK(2,2)'      187  578  167  579  580  168
-CONVEX 106    'GT_PK(2,2)'      116  581  136  582  439  135
-CONVEX 107    'GT_PK(2,2)'      116  581  136  583  584  117
-CONVEX 108    'GT_PK(2,2)'      154  585  153  586  587  173
-CONVEX 109    'GT_PK(2,2)'      154  588  155  589  440  135
-CONVEX 110    'GT_PK(2,2)'      172  590  153  591  587  173
-CONVEX 111    'GT_PK(2,2)'      172  592  171  593  511  1
-CONVEX 112    'GT_PK(2,2)'      264  594  245  595  596  244
-CONVEX 113    'GT_PK(2,2)'      298  597  297  598  599  314
-CONVEX 114    'GT_PK(2,2)'      298  600  315  598  601  314
-CONVEX 115    'GT_PK(2,2)'      298  602  281  603  604  299
-CONVEX 116    'GT_PK(2,2)'      298  600  315  603  530  299
-CONVEX 117    'GT_PK(2,2)'      202  605  182  606  384  201
-CONVEX 118    'GT_PK(2,2)'      144  607  163  608  426  143
-CONVEX 119    'GT_PK(2,2)'      144  609  124  610  563  125
-CONVEX 120    'GT_PK(2,2)'      144  609  124  608  543  143
-CONVEX 121    'GT_PK(2,2)'      215  611  216  612  506  196
-CONVEX 122    'GT_PK(2,2)'      215  613  195  612  614  196
-CONVEX 123    'GT_PK(2,2)'      99  615  81  616  617  82
-CONVEX 124    'GT_PK(2,2)'      99  618  118  619  620  117
-CONVEX 125    'GT_PK(2,2)'      35  621  36  622  623  23
-CONVEX 126    'GT_PK(2,2)'      35  621  36  624  625  50
-CONVEX 127    'GT_PK(2,2)'      100  626  118  627  628  119
-CONVEX 128    'GT_PK(2,2)'      100  629  99  630  616  82
-CONVEX 129    'GT_PK(2,2)'      100  629  99  626  618  118
-CONVEX 130    'GT_PK(2,2)'      137  631  136  632  584  117
-CONVEX 131    'GT_PK(2,2)'      137  633  118  632  620  117
-CONVEX 132    'GT_PK(2,2)'      74  634  73  635  568  57
-CONVEX 133    'GT_PK(2,2)'      74  636  75  637  638  92
-CONVEX 134    'GT_PK(2,2)'      148  639  167  640  580  168
-CONVEX 135    'GT_PK(2,2)'      148  641  149  640  642  168
-CONVEX 136    'GT_PK(2,2)'      93  643  75  644  645  76
-CONVEX 137    'GT_PK(2,2)'      93  643  75  646  638  92
-CONVEX 138    'GT_PK(2,2)'      46  647  45  648  649  61
-CONVEX 139    'GT_PK(2,2)'      46  650  62  648  651  61
-CONVEX 140    'GT_PK(2,2)'      46  650  62  652  653  47
-CONVEX 141    'GT_PK(2,2)'      327  654  354  655  397  341
-CONVEX 142    'GT_PK(2,2)'      327  655  341  656  480  326
-CONVEX 143    'GT_PK(2,2)'      217  657  218  658  659  198
-CONVEX 144    'GT_PK(2,2)'      217  660  197  658  508  198
-CONVEX 145    'GT_PK(2,2)'      217  660  197  661  504  216
-CONVEX 146    'GT_PK(2,2)'      200  662  180  663  368  3
-CONVEX 147    'GT_PK(2,2)'      200  664  220  663  665  3
-CONVEX 148    'GT_PK(2,2)'      238  666  257  667  668  258
-CONVEX 149    'GT_PK(2,2)'      238  669  259  667  485  258
-CONVEX 150    'GT_PK(2,2)'      238  670  239  669  671  259
-CONVEX 151    'GT_PK(2,2)'      277  672  257  673  668  258
-CONVEX 152    'GT_PK(2,2)'      277  674  276  672  486  257
-CONVEX 153    'GT_PK(2,2)'      277  675  278  673  484  258
-CONVEX 154    'GT_PK(2,2)'      277  675  278  676  677  296
-CONVEX 155    'GT_PK(2,2)'      236  678  255  679  680  256
-CONVEX 156    'GT_PK(2,2)'      236  681  217  682  661  216
-CONVEX 157    'GT_PK(2,2)'      275  683  276  684  487  256
-CONVEX 158    'GT_PK(2,2)'      275  685  255  684  680  256
-CONVEX 159    'GT_PK(2,2)'      275  686  294  683  687  276
-CONVEX 160    'GT_PK(2,2)'      275  686  294  688  689  293
-CONVEX 161    'GT_PK(2,2)'      209  690  229  691  692  210
-CONVEX 162    'GT_PK(2,2)'      209  693  189  694  695  208
-CONVEX 163    'GT_PK(2,2)'      209  696  190  691  437  210
-CONVEX 164    'GT_PK(2,2)'      209  693  189  696  697  190
-CONVEX 165    'GT_PK(2,2)'      334  698  347  699  492  346
-CONVEX 166    'GT_PK(2,2)'      345  700  356  701  411  346
-CONVEX 167    'GT_PK(2,2)'      345  702  355  700  703  356
-CONVEX 168    'GT_PK(2,2)'      349  704  337  705  494  350
-CONVEX 169    'GT_PK(2,2)'      349  706  360  707  374  359
-CONVEX 170    'GT_PK(2,2)'      349  705  350  706  376  360
-CONVEX 171    'GT_PK(2,2)'      349  708  336  704  709  337
-CONVEX 172    'GT_PK(2,2)'      323  710  338  711  471  324
-CONVEX 173    'GT_PK(2,2)'      323  712  337  710  493  338
-CONVEX 174    'GT_PK(2,2)'      307  713  308  714  503  290
-CONVEX 175    'GT_PK(2,2)'      307  713  308  715  496  324
-CONVEX 176    'GT_PK(2,2)'      307  716  323  715  711  324
-CONVEX 177    'GT_PK(2,2)'      307  716  323  717  718  306
-CONVEX 178    'GT_PK(2,2)'      272  719  291  720  502  290
-CONVEX 179    'GT_PK(2,2)'      169  721  149  722  442  150
-CONVEX 180    'GT_PK(2,2)'      169  721  149  723  642  168
-CONVEX 181    'GT_PK(2,2)'      22  724  35  725  726  34
-CONVEX 182    'GT_PK(2,2)'      22  724  35  727  622  23
-CONVEX 183    'GT_PK(2,2)'      63  728  62  729  653  47
-CONVEX 184    'GT_PK(2,2)'      63  728  62  730  731  79
-CONVEX 185    'GT_PK(2,2)'      63  730  79  732  733  80
-CONVEX 186    'GT_PK(2,2)'      63  734  64  732  513  80
-CONVEX 187    'GT_PK(2,2)'      21  735  12  736  737  11
-CONVEX 188    'GT_PK(2,2)'      21  738  33  739  740  34
-CONVEX 189    'GT_PK(2,2)'      21  741  22  739  725  34
-CONVEX 190    'GT_PK(2,2)'      21  741  22  735  742  12
-CONVEX 191    'GT_PK(2,2)'      49  743  35  744  726  34
-CONVEX 192    'GT_PK(2,2)'      49  743  35  745  624  50
-CONVEX 193    'GT_PK(2,2)'      330  746  315  747  529  316
-CONVEX 194    'GT_PK(2,2)'      330  748  343  747  535  316
-CONVEX 195    'GT_PK(2,2)'      330  746  315  749  601  314
-CONVEX 196    'GT_PK(2,2)'      88  750  70  751  548  87
-CONVEX 197    'GT_PK(2,2)'      88  752  106  751  561  87
-CONVEX 198    'GT_PK(2,2)'      88  750  70  753  550  71
-CONVEX 199    'GT_PK(2,2)'      88  752  106  754  554  107
-CONVEX 200    'GT_PK(2,2)'      88  755  89  754  418  107
-CONVEX 201    'GT_PK(2,2)'      88  755  89  753  419  71
-CONVEX 202    'GT_PK(2,2)'      159  756  179  757  564  178
-CONVEX 203    'GT_PK(2,2)'      129  758  110  759  760  130
-CONVEX 204    'GT_PK(2,2)'      129  761  148  762  763  128
-CONVEX 205    'GT_PK(2,2)'      129  764  109  762  422  128
-CONVEX 206    'GT_PK(2,2)'      129  758  110  764  765  109
-CONVEX 207    'GT_PK(2,2)'      129  766  149  759  441  130
-CONVEX 208    'GT_PK(2,2)'      129  761  148  766  641  149
-CONVEX 209    'GT_PK(2,2)'      111  767  131  768  444  130
-CONVEX 210    'GT_PK(2,2)'      111  769  110  768  760  130
-CONVEX 211    'GT_PK(2,2)'      111  769  110  770  771  92
-CONVEX 212    'GT_PK(2,2)'      111  772  93  770  646  92
-CONVEX 213    'GT_PK(2,2)'      91  773  90  774  573  109
-CONVEX 214    'GT_PK(2,2)'      91  775  110  776  771  92
-CONVEX 215    'GT_PK(2,2)'      91  775  110  774  765  109
-CONVEX 216    'GT_PK(2,2)'      91  777  74  776  637  92
-CONVEX 217    'GT_PK(2,2)'      91  773  90  778  577  73
-CONVEX 218    'GT_PK(2,2)'      91  777  74  778  634  73
-CONVEX 219    'GT_PK(2,2)'      97  779  79  780  733  80
-CONVEX 220    'GT_PK(2,2)'      97  781  96  779  782  79
-CONVEX 221    'GT_PK(2,2)'      114  783  133  784  785  113
-CONVEX 222    'GT_PK(2,2)'      114  786  95  784  787  113
-CONVEX 223    'GT_PK(2,2)'      114  786  95  788  789  96
-CONVEX 224    'GT_PK(2,2)'      132  790  133  791  785  113
-CONVEX 225    'GT_PK(2,2)'      263  792  264  793  595  244
-CONVEX 226    'GT_PK(2,2)'      263  794  262  795  796  281
-CONVEX 227    'GT_PK(2,2)'      282  797  281  798  604  299
-CONVEX 228    'GT_PK(2,2)'      282  799  264  800  801  283
-CONVEX 229    'GT_PK(2,2)'      282  802  263  797  795  281
-CONVEX 230    'GT_PK(2,2)'      282  802  263  799  792  264
-CONVEX 231    'GT_PK(2,2)'      282  803  300  800  804  283
-CONVEX 232    'GT_PK(2,2)'      282  803  300  798  537  299
-CONVEX 233    'GT_PK(2,2)'      261  805  279  806  807  260
-CONVEX 234    'GT_PK(2,2)'      243  808  263  809  793  244
-CONVEX 235    'GT_PK(2,2)'      243  808  263  810  794  262
-CONVEX 236    'GT_PK(2,2)'      221  811  202  812  606  201
-CONVEX 237    'GT_PK(2,2)'      221  813  240  814  815  222
-CONVEX 238    'GT_PK(2,2)'      221  811  202  814  816  222
-CONVEX 239    'GT_PK(2,2)'      156  817  136  818  438  155
-CONVEX 240    'GT_PK(2,2)'      156  819  175  818  820  155
-CONVEX 241    'GT_PK(2,2)'      156  821  137  817  631  136
-CONVEX 242    'GT_PK(2,2)'      192  822  191  823  431  211
-CONVEX 243    'GT_PK(2,2)'      192  822  191  824  435  1
-CONVEX 244    'GT_PK(2,2)'      192  825  172  824  593  1
-CONVEX 245    'GT_PK(2,2)'      192  825  172  826  591  173
-CONVEX 246    'GT_PK(2,2)'      174  827  154  828  586  173
-CONVEX 247    'GT_PK(2,2)'      174  827  154  829  588  155
-CONVEX 248    'GT_PK(2,2)'      174  830  175  829  820  155
-CONVEX 249    'GT_PK(2,2)'      214  831  215  832  613  195
-CONVEX 250    'GT_PK(2,2)'      214  831  215  833  834  234
-CONVEX 251    'GT_PK(2,2)'      98  835  81  836  514  80
-CONVEX 252    'GT_PK(2,2)'      98  837  99  835  615  81
-CONVEX 253    'GT_PK(2,2)'      98  838  97  836  780  80
-CONVEX 254    'GT_PK(2,2)'      98  837  99  839  619  117
-CONVEX 255    'GT_PK(2,2)'      98  840  116  839  583  117
-CONVEX 256    'GT_PK(2,2)'      98  838  97  840  841  116
-CONVEX 257    'GT_PK(2,2)'      52  842  68  843  844  67
-CONVEX 258    'GT_PK(2,2)'      83  845  66  846  847  67
-CONVEX 259    'GT_PK(2,2)'      83  848  100  849  630  82
-CONVEX 260    'GT_PK(2,2)'      83  845  66  849  850  82
-CONVEX 261    'GT_PK(2,2)'      51  851  66  852  853  50
-CONVEX 262    'GT_PK(2,2)'      51  854  36  855  856  37
-CONVEX 263    'GT_PK(2,2)'      51  854  36  852  625  50
-CONVEX 264    'GT_PK(2,2)'      51  851  66  857  847  67
-CONVEX 265    'GT_PK(2,2)'      51  858  52  855  859  37
-CONVEX 266    'GT_PK(2,2)'      51  858  52  857  843  67
-CONVEX 267    'GT_PK(2,2)'      103  860  102  861  862  85
-CONVEX 268    'GT_PK(2,2)'      121  863  102  864  865  120
-CONVEX 269    'GT_PK(2,2)'      121  866  141  867  388  122
-CONVEX 270    'GT_PK(2,2)'      121  868  103  867  869  122
-CONVEX 271    'GT_PK(2,2)'      121  868  103  863  860  102
-CONVEX 272    'GT_PK(2,2)'      58  870  74  871  635  57
-CONVEX 273    'GT_PK(2,2)'      58  870  74  872  636  75
-CONVEX 274    'GT_PK(2,2)'      29  873  17  874  451  30
-CONVEX 275    'GT_PK(2,2)'      60  875  45  876  649  61
-CONVEX 276    'GT_PK(2,2)'      60  877  77  878  879  76
-CONVEX 277    'GT_PK(2,2)'      60  877  77  876  880  61
-CONVEX 278    'GT_PK(2,2)'      94  881  95  882  787  113
-CONVEX 279    'GT_PK(2,2)'      94  883  93  884  644  76
-CONVEX 280    'GT_PK(2,2)'      94  885  77  884  879  76
-CONVEX 281    'GT_PK(2,2)'      94  885  77  881  886  95
-CONVEX 282    'GT_PK(2,2)'      41  887  56  888  570  40
-CONVEX 283    'GT_PK(2,2)'      41  887  56  889  567  57
-CONVEX 284    'GT_PK(2,2)'      28  890  27  891  892  15
-CONVEX 285    'GT_PK(2,2)'      28  893  29  894  895  43
-CONVEX 286    'GT_PK(2,2)'      14  896  15  897  447  5
-CONVEX 287    'GT_PK(2,2)'      14  898  27  896  892  15
-CONVEX 288    'GT_PK(2,2)'      31  899  45  900  901  30
-CONVEX 289    'GT_PK(2,2)'      31  902  46  899  647  45
-CONVEX 290    'GT_PK(2,2)'      31  903  18  900  450  30
-CONVEX 291    'GT_PK(2,2)'      31  904  19  903  518  18
-CONVEX 292    'GT_PK(2,2)'      311  905  327  906  907  328
-CONVEX 293    'GT_PK(2,2)'      311  908  294  909  689  293
-CONVEX 294    'GT_PK(2,2)'      342  910  329  911  912  328
-CONVEX 295    'GT_PK(2,2)'      342  913  327  914  654  354
-CONVEX 296    'GT_PK(2,2)'      342  913  327  911  907  328
-CONVEX 297    'GT_PK(2,2)'      237  915  217  916  657  218
-CONVEX 298    'GT_PK(2,2)'      237  917  238  918  666  257
-CONVEX 299    'GT_PK(2,2)'      237  917  238  916  919  218
-CONVEX 300    'GT_PK(2,2)'      237  920  236  915  681  217
-CONVEX 301    'GT_PK(2,2)'      237  918  257  921  488  256
-CONVEX 302    'GT_PK(2,2)'      237  920  236  921  679  256
-CONVEX 303    'GT_PK(2,2)'      199  922  218  923  659  198
-CONVEX 304    'GT_PK(2,2)'      199  924  179  923  565  198
-CONVEX 305    'GT_PK(2,2)'      199  924  179  925  926  180
-CONVEX 306    'GT_PK(2,2)'      199  927  200  925  662  180
-CONVEX 307    'GT_PK(2,2)'      219  928  239  929  930  220
-CONVEX 308    'GT_PK(2,2)'      219  931  238  928  670  239
-CONVEX 309    'GT_PK(2,2)'      219  932  200  929  664  220
-CONVEX 310    'GT_PK(2,2)'      219  931  238  933  919  218
-CONVEX 311    'GT_PK(2,2)'      219  934  199  933  922  218
-CONVEX 312    'GT_PK(2,2)'      219  934  199  932  927  200
-CONVEX 313    'GT_PK(2,2)'      312  935  329  936  912  328
-CONVEX 314    'GT_PK(2,2)'      312  937  311  936  906  328
-CONVEX 315    'GT_PK(2,2)'      312  937  311  938  908  294
-CONVEX 316    'GT_PK(2,2)'      235  939  236  940  682  216
-CONVEX 317    'GT_PK(2,2)'      235  939  236  941  678  255
-CONVEX 318    'GT_PK(2,2)'      235  942  215  940  611  216
-CONVEX 319    'GT_PK(2,2)'      235  942  215  943  834  234
-CONVEX 320    'GT_PK(2,2)'      235  944  254  943  945  234
-CONVEX 321    'GT_PK(2,2)'      235  944  254  941  946  255
-CONVEX 322    'GT_PK(2,2)'      265  947  264  948  801  283
-CONVEX 323    'GT_PK(2,2)'      265  947  264  949  594  245
-CONVEX 324    'GT_PK(2,2)'      333  950  334  951  699  346
-CONVEX 325    'GT_PK(2,2)'      333  952  345  951  701  346
-CONVEX 326    'GT_PK(2,2)'      332  953  317  954  410  331
-CONVEX 327    'GT_PK(2,2)'      332  955  318  953  956  317
-CONVEX 328    'GT_PK(2,2)'      332  957  344  954  534  331
-CONVEX 329    'GT_PK(2,2)'      332  958  333  955  959  318
-CONVEX 330    'GT_PK(2,2)'      332  958  333  960  952  345
-CONVEX 331    'GT_PK(2,2)'      332  961  355  957  962  344
-CONVEX 332    'GT_PK(2,2)'      332  960  345  961  702  355
-CONVEX 333    'GT_PK(2,2)'      335  963  334  964  698  347
-CONVEX 334    'GT_PK(2,2)'      335  965  336  966  967  321
-CONVEX 335    'GT_PK(2,2)'      322  968  323  969  718  306
-CONVEX 336    'GT_PK(2,2)'      322  968  323  970  712  337
-CONVEX 337    'GT_PK(2,2)'      322  971  336  972  967  321
-CONVEX 338    'GT_PK(2,2)'      322  971  336  970  709  337
-CONVEX 339    'GT_PK(2,2)'      250  973  270  974  975  251
-CONVEX 340    'GT_PK(2,2)'      289  976  307  977  714  290
-CONVEX 341    'GT_PK(2,2)'      289  976  307  978  717  306
-CONVEX 342    'GT_PK(2,2)'      305  979  322  980  972  321
-CONVEX 343    'GT_PK(2,2)'      305  979  322  981  969  306
-CONVEX 344    'GT_PK(2,2)'      274  982  275  983  685  255
-CONVEX 345    'GT_PK(2,2)'      274  984  254  983  946  255
-CONVEX 346    'GT_PK(2,2)'      274  982  275  985  688  293
-CONVEX 347    'GT_PK(2,2)'      274  985  293  986  987  292
-CONVEX 348    'GT_PK(2,2)'      273  988  291  989  499  292
-CONVEX 349    'GT_PK(2,2)'      273  990  272  988  719  291
-CONVEX 350    'GT_PK(2,2)'      273  991  274  989  986  292
-CONVEX 351    'GT_PK(2,2)'      273  991  274  992  984  254
-CONVEX 352    'GT_PK(2,2)'      170  993  169  994  722  150
-CONVEX 353    'GT_PK(2,2)'      170  993  169  995  996  189
-CONVEX 354    'GT_PK(2,2)'      170  997  171  998  510  190
-CONVEX 355    'GT_PK(2,2)'      170  995  189  998  697  190
-CONVEX 356    'GT_PK(2,2)'      188  999  189  1000  695  208
-CONVEX 357    'GT_PK(2,2)'      188  1001  169  999  996  189
-CONVEX 358    'GT_PK(2,2)'      188  1000  208  1002  1003  207
-CONVEX 359    'GT_PK(2,2)'      188  1004  187  1002  1005  207
-CONVEX 360    'GT_PK(2,2)'      188  1004  187  1006  579  168
-CONVEX 361    'GT_PK(2,2)'      188  1001  169  1006  723  168
-CONVEX 362    'GT_PK(2,2)'      48  1007  63  1008  734  64
-CONVEX 363    'GT_PK(2,2)'      48  1009  49  1008  1010  64
-CONVEX 364    'GT_PK(2,2)'      48  1011  33  1012  1013  47
-CONVEX 365    'GT_PK(2,2)'      48  1007  63  1012  729  47
-CONVEX 366    'GT_PK(2,2)'      48  1011  33  1014  740  34
-CONVEX 367    'GT_PK(2,2)'      48  1009  49  1014  744  34
-CONVEX 368    'GT_PK(2,2)'      20  1015  21  1016  736  11
-CONVEX 369    'GT_PK(2,2)'      20  1017  10  1016  1018  11
-CONVEX 370    'GT_PK(2,2)'      20  1019  19  1017  516  10
-CONVEX 371    'GT_PK(2,2)'      20  1015  21  1020  738  33
-CONVEX 372    'GT_PK(2,2)'      65  1021  49  1022  1010  64
-CONVEX 373    'GT_PK(2,2)'      65  1022  64  1023  512  81
-CONVEX 374    'GT_PK(2,2)'      65  1024  66  1025  853  50
-CONVEX 375    'GT_PK(2,2)'      65  1021  49  1025  745  50
-CONVEX 376    'GT_PK(2,2)'      65  1023  81  1026  617  82
-CONVEX 377    'GT_PK(2,2)'      65  1024  66  1026  850  82
-CONVEX 378    'GT_PK(2,2)'      139  1027  120  1028  1029  119
-CONVEX 379    'GT_PK(2,2)'      140  1030  139  1031  1032  159
-CONVEX 380    'GT_PK(2,2)'      140  1030  139  1033  1027  120
-CONVEX 381    'GT_PK(2,2)'      140  1034  121  1035  866  141
-CONVEX 382    'GT_PK(2,2)'      140  1034  121  1033  864  120
-CONVEX 383    'GT_PK(2,2)'      160  1036  159  1037  756  179
-CONVEX 384    'GT_PK(2,2)'      160  1038  180  1039  370  161
-CONVEX 385    'GT_PK(2,2)'      160  1037  179  1038  926  180
-CONVEX 386    'GT_PK(2,2)'      160  1040  140  1036  1031  159
-CONVEX 387    'GT_PK(2,2)'      160  1041  141  1039  390  161
-CONVEX 388    'GT_PK(2,2)'      160  1040  140  1041  1035  141
-CONVEX 389    'GT_PK(2,2)'      186  1042  187  1043  578  167
-CONVEX 390    'GT_PK(2,2)'      164  1044  144  1045  607  163
-CONVEX 391    'GT_PK(2,2)'      147  1046  127  1047  380  128
-CONVEX 392    'GT_PK(2,2)'      147  1048  148  1047  763  128
-CONVEX 393    'GT_PK(2,2)'      147  1048  148  1049  639  167
-CONVEX 394    'GT_PK(2,2)'      78  1050  95  1051  789  96
-CONVEX 395    'GT_PK(2,2)'      78  1052  77  1050  886  95
-CONVEX 396    'GT_PK(2,2)'      78  1051  96  1053  782  79
-CONVEX 397    'GT_PK(2,2)'      78  1054  62  1053  731  79
-CONVEX 398    'GT_PK(2,2)'      78  1054  62  1055  651  61
-CONVEX 399    'GT_PK(2,2)'      78  1052  77  1055  880  61
-CONVEX 400    'GT_PK(2,2)'      115  1056  116  1057  582  135
-CONVEX 401    'GT_PK(2,2)'      115  1058  114  1059  788  96
-CONVEX 402    'GT_PK(2,2)'      115  1060  97  1059  781  96
-CONVEX 403    'GT_PK(2,2)'      115  1060  97  1056  841  116
-CONVEX 404    'GT_PK(2,2)'      134  1061  133  1062  1063  153
-CONVEX 405    'GT_PK(2,2)'      134  1064  114  1061  783  133
-CONVEX 406    'GT_PK(2,2)'      134  1065  115  1064  1058  114
-CONVEX 407    'GT_PK(2,2)'      134  1065  115  1066  1057  135
-CONVEX 408    'GT_PK(2,2)'      134  1067  154  1066  589  135
-CONVEX 409    'GT_PK(2,2)'      134  1067  154  1062  585  153
-CONVEX 410    'GT_PK(2,2)'      151  1068  132  1069  1070  131
-CONVEX 411    'GT_PK(2,2)'      151  1069  131  1071  445  150
-CONVEX 412    'GT_PK(2,2)'      151  1072  170  1071  994  150
-CONVEX 413    'GT_PK(2,2)'      151  1072  170  1073  997  171
-CONVEX 414    'GT_PK(2,2)'      152  1074  172  1075  592  171
-CONVEX 415    'GT_PK(2,2)'      152  1076  151  1075  1073  171
-CONVEX 416    'GT_PK(2,2)'      152  1076  151  1077  1068  132
-CONVEX 417    'GT_PK(2,2)'      152  1077  132  1078  790  133
-CONVEX 418    'GT_PK(2,2)'      152  1078  133  1079  1063  153
-CONVEX 419    'GT_PK(2,2)'      152  1074  172  1079  590  153
-CONVEX 420    'GT_PK(2,2)'      242  1080  222  1081  1082  223
-CONVEX 421    'GT_PK(2,2)'      242  1083  261  1084  1085  262
-CONVEX 422    'GT_PK(2,2)'      242  1086  243  1081  1087  223
-CONVEX 423    'GT_PK(2,2)'      242  1086  243  1084  810  262
-CONVEX 424    'GT_PK(2,2)'      280  1088  261  1089  805  279
-CONVEX 425    'GT_PK(2,2)'      280  1090  298  1091  597  297
-CONVEX 426    'GT_PK(2,2)'      280  1089  279  1091  1092  297
-CONVEX 427    'GT_PK(2,2)'      280  1090  298  1093  602  281
-CONVEX 428    'GT_PK(2,2)'      280  1094  262  1093  796  281
-CONVEX 429    'GT_PK(2,2)'      280  1088  261  1094  1085  262
-CONVEX 430    'GT_PK(2,2)'      176  1095  156  1096  819  175
-CONVEX 431    'GT_PK(2,2)'      176  1097  195  1098  614  196
-CONVEX 432    'GT_PK(2,2)'      176  1096  175  1097  1099  195
-CONVEX 433    'GT_PK(2,2)'      252  1100  232  1101  1102  251
-CONVEX 434    'GT_PK(2,2)'      231  1103  232  1104  1102  251
-CONVEX 435    'GT_PK(2,2)'      231  1105  250  1104  974  251
-CONVEX 436    'GT_PK(2,2)'      212  1106  232  1107  1108  213
-CONVEX 437    'GT_PK(2,2)'      212  1109  192  1110  823  211
-CONVEX 438    'GT_PK(2,2)'      212  1111  231  1110  1112  211
-CONVEX 439    'GT_PK(2,2)'      212  1111  231  1106  1103  232
-CONVEX 440    'GT_PK(2,2)'      193  1113  174  1114  828  173
-CONVEX 441    'GT_PK(2,2)'      193  1115  212  1116  1107  213
-CONVEX 442    'GT_PK(2,2)'      193  1117  192  1114  826  173
-CONVEX 443    'GT_PK(2,2)'      193  1115  212  1117  1109  192
-CONVEX 444    'GT_PK(2,2)'      194  1118  214  1119  832  195
-CONVEX 445    'GT_PK(2,2)'      194  1120  175  1119  1099  195
-CONVEX 446    'GT_PK(2,2)'      194  1121  174  1120  830  175
-CONVEX 447    'GT_PK(2,2)'      194  1118  214  1122  1123  213
-CONVEX 448    'GT_PK(2,2)'      194  1124  193  1122  1116  213
-CONVEX 449    'GT_PK(2,2)'      194  1124  193  1121  1113  174
-CONVEX 450    'GT_PK(2,2)'      101  1125  102  1126  865  120
-CONVEX 451    'GT_PK(2,2)'      101  1126  120  1127  1029  119
-CONVEX 452    'GT_PK(2,2)'      101  1128  100  1127  627  119
-CONVEX 453    'GT_PK(2,2)'      101  1129  83  1128  848  100
-CONVEX 454    'GT_PK(2,2)'      59  1130  58  1131  872  75
-CONVEX 455    'GT_PK(2,2)'      59  1130  58  1132  1133  43
-CONVEX 456    'GT_PK(2,2)'      59  1131  75  1134  645  76
-CONVEX 457    'GT_PK(2,2)'      59  1135  60  1134  878  76
-CONVEX 458    'GT_PK(2,2)'      16  1136  29  1137  873  17
-CONVEX 459    'GT_PK(2,2)'      16  1138  15  1139  446  6
-CONVEX 460    'GT_PK(2,2)'      16  1140  28  1138  891  15
-CONVEX 461    'GT_PK(2,2)'      16  1140  28  1136  893  29
-CONVEX 462    'GT_PK(2,2)'      16  1137  17  1141  392  7
-CONVEX 463    'GT_PK(2,2)'      16  1139  6  1141  1142  7
-CONVEX 464    'GT_PK(2,2)'      44  1143  60  1144  875  45
-CONVEX 465    'GT_PK(2,2)'      44  1145  29  1146  895  43
-CONVEX 466    'GT_PK(2,2)'      44  1147  59  1146  1132  43
-CONVEX 467    'GT_PK(2,2)'      44  1147  59  1143  1135  60
-CONVEX 468    'GT_PK(2,2)'      44  1144  45  1148  901  30
-CONVEX 469    'GT_PK(2,2)'      44  1145  29  1148  874  30
-CONVEX 470    'GT_PK(2,2)'      112  1149  94  1150  882  113
-CONVEX 471    'GT_PK(2,2)'      112  1151  132  1150  791  113
-CONVEX 472    'GT_PK(2,2)'      112  1151  132  1152  1070  131
-CONVEX 473    'GT_PK(2,2)'      112  1149  94  1153  883  93
-CONVEX 474    'GT_PK(2,2)'      112  1154  111  1152  767  131
-CONVEX 475    'GT_PK(2,2)'      112  1154  111  1153  772  93
-CONVEX 476    'GT_PK(2,2)'      26  1155  41  1156  1157  27
-CONVEX 477    'GT_PK(2,2)'      26  1158  14  1159  1160  13
-CONVEX 478    'GT_PK(2,2)'      26  1158  14  1156  898  27
-CONVEX 479    'GT_PK(2,2)'      26  1155  41  1161  888  40
-CONVEX 480    'GT_PK(2,2)'      26  1162  25  1161  404  40
-CONVEX 481    'GT_PK(2,2)'      26  1159  13  1162  1163  25
-CONVEX 482    'GT_PK(2,2)'      42  1164  41  1165  1157  27
-CONVEX 483    'GT_PK(2,2)'      42  1166  28  1165  890  27
-CONVEX 484    'GT_PK(2,2)'      42  1164  41  1167  889  57
-CONVEX 485    'GT_PK(2,2)'      42  1168  58  1167  871  57
-CONVEX 486    'GT_PK(2,2)'      42  1168  58  1169  1133  43
-CONVEX 487    'GT_PK(2,2)'      42  1166  28  1169  894  43
-CONVEX 488    'GT_PK(2,2)'      310  1170  327  1171  656  326
-CONVEX 489    'GT_PK(2,2)'      310  1172  311  1170  905  327
-CONVEX 490    'GT_PK(2,2)'      310  1173  309  1171  396  326
-CONVEX 491    'GT_PK(2,2)'      310  1173  309  1174  500  292
-CONVEX 492    'GT_PK(2,2)'      310  1175  293  1174  987  292
-CONVEX 493    'GT_PK(2,2)'      310  1172  311  1175  909  293
-CONVEX 494    'GT_PK(2,2)'      313  1176  312  1177  935  329
-CONVEX 495    'GT_PK(2,2)'      295  1178  277  1179  676  296
-CONVEX 496    'GT_PK(2,2)'      295  1180  313  1179  1181  296
-CONVEX 497    'GT_PK(2,2)'      295  1180  313  1182  1176  312
-CONVEX 498    'GT_PK(2,2)'      295  1182  312  1183  938  294
-CONVEX 499    'GT_PK(2,2)'      295  1183  294  1184  687  276
-CONVEX 500    'GT_PK(2,2)'      295  1178  277  1184  674  276
-CONVEX 501    'GT_PK(2,2)'      284  1185  265  1186  948  283
-CONVEX 502    'GT_PK(2,2)'      284  1185  265  1187  1188  266
-CONVEX 503    'GT_PK(2,2)'      319  1189  333  1190  950  334
-CONVEX 504    'GT_PK(2,2)'      319  1191  302  1192  1193  318
-CONVEX 505    'GT_PK(2,2)'      319  1189  333  1192  959  318
-CONVEX 506    'GT_PK(2,2)'      227  1194  208  1195  1003  207
-CONVEX 507    'GT_PK(2,2)'      227  1196  226  1195  1197  207
-CONVEX 508    'GT_PK(2,2)'      246  1198  265  1199  1188  266
-CONVEX 509    'GT_PK(2,2)'      246  1200  247  1199  1201  266
-CONVEX 510    'GT_PK(2,2)'      246  1198  265  1202  949  245
-CONVEX 511    'GT_PK(2,2)'      246  1203  227  1200  1204  247
-CONVEX 512    'GT_PK(2,2)'      246  1205  226  1202  1206  245
-CONVEX 513    'GT_PK(2,2)'      246  1203  227  1205  1196  226
-CONVEX 514    'GT_PK(2,2)'      348  1207  335  1208  964  347
-CONVEX 515    'GT_PK(2,2)'      348  1209  358  1210  371  359
-CONVEX 516    'GT_PK(2,2)'      348  1208  347  1209  489  358
-CONVEX 517    'GT_PK(2,2)'      348  1207  335  1211  965  336
-CONVEX 518    'GT_PK(2,2)'      348  1212  349  1210  707  359
-CONVEX 519    'GT_PK(2,2)'      348  1212  349  1211  708  336
-CONVEX 520    'GT_PK(2,2)'      230  1213  211  1214  433  210
-CONVEX 521    'GT_PK(2,2)'      230  1215  229  1214  692  210
-CONVEX 522    'GT_PK(2,2)'      230  1216  231  1213  1112  211
-CONVEX 523    'GT_PK(2,2)'      230  1216  231  1217  1105  250
-CONVEX 524    'GT_PK(2,2)'      271  1218  289  1219  1220  270
-CONVEX 525    'GT_PK(2,2)'      271  1219  270  1221  975  251
-CONVEX 526    'GT_PK(2,2)'      271  1222  272  1223  720  290
-CONVEX 527    'GT_PK(2,2)'      271  1218  289  1223  977  290
-CONVEX 528    'GT_PK(2,2)'      271  1224  252  1221  1101  251
-CONVEX 529    'GT_PK(2,2)'      271  1224  252  1222  1225  272
-CONVEX 530    'GT_PK(2,2)'      288  1226  289  1227  1220  270
-CONVEX 531    'GT_PK(2,2)'      288  1226  289  1228  978  306
-CONVEX 532    'GT_PK(2,2)'      288  1229  305  1228  981  306
-CONVEX 533    'GT_PK(2,2)'      32  1230  20  1231  1020  33
-CONVEX 534    'GT_PK(2,2)'      32  1232  31  1233  902  46
-CONVEX 535    'GT_PK(2,2)'      32  1232  31  1234  904  19
-CONVEX 536    'GT_PK(2,2)'      32  1230  20  1234  1019  19
-CONVEX 537    'GT_PK(2,2)'      32  1231  33  1235  1013  47
-CONVEX 538    'GT_PK(2,2)'      32  1233  46  1235  652  47
-CONVEX 539    'GT_PK(2,2)'      206  1236  187  1237  1005  207
-CONVEX 540    'GT_PK(2,2)'      206  1238  186  1236  1042  187
-CONVEX 541    'GT_PK(2,2)'      206  1239  226  1237  1197  207
-CONVEX 542    'GT_PK(2,2)'      184  1240  204  1241  1242  185
-CONVEX 543    'GT_PK(2,2)'      145  1243  164  1244  1044  144
-CONVEX 544    'GT_PK(2,2)'      145  1245  126  1246  553  125
-CONVEX 545    'GT_PK(2,2)'      145  1244  144  1246  610  125
-CONVEX 546    'GT_PK(2,2)'      183  1247  163  1248  430  182
-CONVEX 547    'GT_PK(2,2)'      183  1249  164  1247  1045  163
-CONVEX 548    'GT_PK(2,2)'      183  1250  184  1249  1251  164
-CONVEX 549    'GT_PK(2,2)'      183  1252  202  1248  605  182
-CONVEX 550    'GT_PK(2,2)'      241  1253  240  1254  815  222
-CONVEX 551    'GT_PK(2,2)'      241  1255  242  1254  1080  222
-CONVEX 552    'GT_PK(2,2)'      241  1255  242  1256  1083  261
-CONVEX 553    'GT_PK(2,2)'      241  1253  240  1257  1258  260
-CONVEX 554    'GT_PK(2,2)'      241  1256  261  1257  806  260
-CONVEX 555    'GT_PK(2,2)'      177  1259  197  1260  505  196
-CONVEX 556    'GT_PK(2,2)'      177  1261  176  1260  1098  196
-CONVEX 557    'GT_PK(2,2)'      177  1259  197  1262  507  178
-CONVEX 558    'GT_PK(2,2)'      233  1263  252  1264  1100  232
-CONVEX 559    'GT_PK(2,2)'      233  1264  232  1265  1108  213
-CONVEX 560    'GT_PK(2,2)'      233  1266  214  1267  833  234
-CONVEX 561    'GT_PK(2,2)'      233  1266  214  1265  1123  213
-CONVEX 562    'GT_PK(2,2)'      253  1268  273  1269  990  272
-CONVEX 563    'GT_PK(2,2)'      253  1270  252  1269  1225  272
-CONVEX 564    'GT_PK(2,2)'      253  1268  273  1271  992  254
-CONVEX 565    'GT_PK(2,2)'      253  1272  233  1270  1263  252
-CONVEX 566    'GT_PK(2,2)'      253  1271  254  1273  945  234
-CONVEX 567    'GT_PK(2,2)'      253  1272  233  1273  1267  234
-CONVEX 568    'GT_PK(2,2)'      84  1274  101  1275  1125  102
-CONVEX 569    'GT_PK(2,2)'      84  1276  68  1277  844  67
-CONVEX 570    'GT_PK(2,2)'      84  1278  83  1277  846  67
-CONVEX 571    'GT_PK(2,2)'      84  1274  101  1278  1129  83
-CONVEX 572    'GT_PK(2,2)'      84  1276  68  1279  1280  85
-CONVEX 573    'GT_PK(2,2)'      84  1275  102  1279  862  85
-CONVEX 574    'GT_PK(2,2)'      301  1281  284  1282  1186  283
-CONVEX 575    'GT_PK(2,2)'      301  1281  284  1283  1284  302
-CONVEX 576    'GT_PK(2,2)'      301  1285  300  1282  804  283
-CONVEX 577    'GT_PK(2,2)'      301  1285  300  1286  538  317
-CONVEX 578    'GT_PK(2,2)'      301  1287  318  1286  956  317
-CONVEX 579    'GT_PK(2,2)'      301  1283  302  1287  1193  318
-CONVEX 580    'GT_PK(2,2)'      320  1288  335  1289  966  321
-CONVEX 581    'GT_PK(2,2)'      320  1288  335  1290  963  334
-CONVEX 582    'GT_PK(2,2)'      320  1291  319  1290  1190  334
-CONVEX 583    'GT_PK(2,2)'      228  1292  227  1293  1204  247
-CONVEX 584    'GT_PK(2,2)'      228  1294  209  1295  690  229
-CONVEX 585    'GT_PK(2,2)'      228  1294  209  1296  694  208
-CONVEX 586    'GT_PK(2,2)'      228  1292  227  1296  1194  208
-CONVEX 587    'GT_PK(2,2)'      269  1297  250  1298  973  270
-CONVEX 588    'GT_PK(2,2)'      269  1299  288  1298  1227  270
-CONVEX 589    'GT_PK(2,2)'      225  1300  206  1301  1239  226
-CONVEX 590    'GT_PK(2,2)'      225  1302  245  1303  596  244
-CONVEX 591    'GT_PK(2,2)'      225  1301  226  1302  1206  245
-CONVEX 592    'GT_PK(2,2)'      166  1304  147  1305  1049  167
-CONVEX 593    'GT_PK(2,2)'      166  1306  186  1305  1043  167
-CONVEX 594    'GT_PK(2,2)'      166  1306  186  1307  1308  185
-CONVEX 595    'GT_PK(2,2)'      203  1309  184  1310  1240  204
-CONVEX 596    'GT_PK(2,2)'      203  1311  183  1309  1250  184
-CONVEX 597    'GT_PK(2,2)'      203  1310  204  1312  1313  223
-CONVEX 598    'GT_PK(2,2)'      203  1311  183  1314  1252  202
-CONVEX 599    'GT_PK(2,2)'      203  1315  222  1312  1082  223
-CONVEX 600    'GT_PK(2,2)'      203  1314  202  1315  816  222
-CONVEX 601    'GT_PK(2,2)'      138  1316  137  1317  633  118
-CONVEX 602    'GT_PK(2,2)'      138  1317  118  1318  628  119
-CONVEX 603    'GT_PK(2,2)'      138  1319  139  1318  1028  119
-CONVEX 604    'GT_PK(2,2)'      157  1320  176  1321  1095  156
-CONVEX 605    'GT_PK(2,2)'      157  1322  177  1320  1261  176
-CONVEX 606    'GT_PK(2,2)'      157  1321  156  1323  821  137
-CONVEX 607    'GT_PK(2,2)'      157  1324  138  1323  1316  137
-CONVEX 608    'GT_PK(2,2)'      249  1325  269  1326  1297  250
-CONVEX 609    'GT_PK(2,2)'      249  1327  230  1328  1215  229
-CONVEX 610    'GT_PK(2,2)'      249  1327  230  1326  1217  250
-CONVEX 611    'GT_PK(2,2)'      287  1329  288  1330  1229  305
-CONVEX 612    'GT_PK(2,2)'      287  1331  269  1329  1299  288
-CONVEX 613    'GT_PK(2,2)'      224  1332  243  1333  1087  223
-CONVEX 614    'GT_PK(2,2)'      224  1334  204  1333  1313  223
-CONVEX 615    'GT_PK(2,2)'      224  1332  243  1335  809  244
-CONVEX 616    'GT_PK(2,2)'      224  1336  225  1335  1303  244
-CONVEX 617    'GT_PK(2,2)'      205  1337  206  1338  1238  186
-CONVEX 618    'GT_PK(2,2)'      205  1339  225  1337  1300  206
-CONVEX 619    'GT_PK(2,2)'      205  1338  186  1340  1308  185
-CONVEX 620    'GT_PK(2,2)'      205  1341  224  1339  1336  225
-CONVEX 621    'GT_PK(2,2)'      205  1342  204  1340  1242  185
-CONVEX 622    'GT_PK(2,2)'      205  1341  224  1342  1334  204
-CONVEX 623    'GT_PK(2,2)'      146  1343  166  1344  1304  147
-CONVEX 624    'GT_PK(2,2)'      146  1344  147  1345  1046  127
-CONVEX 625    'GT_PK(2,2)'      146  1346  126  1345  423  127
-CONVEX 626    'GT_PK(2,2)'      146  1347  145  1346  1245  126
-CONVEX 627    'GT_PK(2,2)'      165  1348  184  1349  1251  164
-CONVEX 628    'GT_PK(2,2)'      165  1350  145  1349  1243  164
-CONVEX 629    'GT_PK(2,2)'      165  1348  184  1351  1241  185
-CONVEX 630    'GT_PK(2,2)'      165  1352  166  1351  1307  185
-CONVEX 631    'GT_PK(2,2)'      165  1353  146  1350  1347  145
-CONVEX 632    'GT_PK(2,2)'      165  1353  146  1352  1343  166
-CONVEX 633    'GT_PK(2,2)'      158  1354  157  1355  1322  177
-CONVEX 634    'GT_PK(2,2)'      158  1356  159  1357  757  178
-CONVEX 635    'GT_PK(2,2)'      158  1355  177  1357  1262  178
-CONVEX 636    'GT_PK(2,2)'      158  1354  157  1358  1324  138
-CONVEX 637    'GT_PK(2,2)'      158  1359  139  1356  1032  159
-CONVEX 638    'GT_PK(2,2)'      158  1358  138  1359  1319  139
-CONVEX 639    'GT_PK(2,2)'      267  1360  247  1361  1201  266
-CONVEX 640    'GT_PK(2,2)'      248  1362  249  1363  1328  229
-CONVEX 641    'GT_PK(2,2)'      248  1364  267  1365  1360  247
-CONVEX 642    'GT_PK(2,2)'      248  1366  228  1363  1295  229
-CONVEX 643    'GT_PK(2,2)'      248  1366  228  1365  1293  247
-CONVEX 644    'GT_PK(2,2)'      268  1367  287  1368  1331  269
-CONVEX 645    'GT_PK(2,2)'      268  1369  248  1370  1364  267
-CONVEX 646    'GT_PK(2,2)'      268  1371  249  1368  1325  269
-CONVEX 647    'GT_PK(2,2)'      268  1369  248  1371  1362  249
-CONVEX 648    'GT_PK(2,2)'      303  1372  319  1373  1191  302
-CONVEX 649    'GT_PK(2,2)'      303  1374  320  1372  1291  319
-CONVEX 650    'GT_PK(2,2)'      286  1375  268  1376  1367  287
-CONVEX 651    'GT_PK(2,2)'      286  1375  268  1377  1370  267
-CONVEX 652    'GT_PK(2,2)'      304  1378  287  1379  1330  305
-CONVEX 653    'GT_PK(2,2)'      304  1380  303  1381  1374  320
-CONVEX 654    'GT_PK(2,2)'      304  1382  286  1378  1376  287
-CONVEX 655    'GT_PK(2,2)'      304  1382  286  1380  1383  303
-CONVEX 656    'GT_PK(2,2)'      304  1379  305  1384  980  321
-CONVEX 657    'GT_PK(2,2)'      304  1381  320  1384  1289  321
-CONVEX 658    'GT_PK(2,2)'      285  1385  286  1386  1383  303
-CONVEX 659    'GT_PK(2,2)'      285  1387  284  1388  1284  302
-CONVEX 660    'GT_PK(2,2)'      285  1386  303  1388  1373  302
-CONVEX 661    'GT_PK(2,2)'      285  1385  286  1389  1377  267
-CONVEX 662    'GT_PK(2,2)'      285  1387  284  1390  1187  266
-CONVEX 663    'GT_PK(2,2)'      285  1389  267  1390  1361  266
+CONVEX 0    GT_PK(2,2)      258  1447  259  1448  1449  293
+CONVEX 1    GT_PK(2,2)      25  1450  10  1451  1452  0
+CONVEX 2    GT_PK(2,2)      18  1453  17  1454  1455  36
+CONVEX 3    GT_PK(2,2)      1426  1456  1440  1457  1458  4
+CONVEX 4    GT_PK(2,2)      824  1459  823  1460  1461  863
+CONVEX 5    GT_PK(2,2)      824  1462  784  1459  1463  823
+CONVEX 6    GT_PK(2,2)      1058  1464  1020  1465  1466  1021
+CONVEX 7    GT_PK(2,2)      728  1467  767  1468  1469  768
+CONVEX 8    GT_PK(2,2)      395  1470  394  1471  1472  357
+CONVEX 9    GT_PK(2,2)      225  1473  258  1474  1447  259
+CONVEX 10    GT_PK(2,2)      160  1475  192  1476  1477  191
+CONVEX 11    GT_PK(2,2)      224  1478  192  1479  1477  191
+CONVEX 12    GT_PK(2,2)      224  1480  225  1481  1473  258
+CONVEX 13    GT_PK(2,2)      224  1480  225  1478  1482  192
+CONVEX 14    GT_PK(2,2)      216  1483  185  1484  1485  186
+CONVEX 15    GT_PK(2,2)      280  1486  281  1487  1488  247
+CONVEX 16    GT_PK(2,2)      280  1486  281  1489  1490  315
+CONVEX 17    GT_PK(2,2)      64  1491  65  1492  1493  88
+CONVEX 18    GT_PK(2,2)      6  1494  20  1495  1496  5
+CONVEX 19    GT_PK(2,2)      21  1497  6  1498  1494  20
+CONVEX 20    GT_PK(2,2)      21  1497  6  1499  1500  7
+CONVEX 21    GT_PK(2,2)      1428  1501  1442  1502  1503  1443
+CONVEX 22    GT_PK(2,2)      1408  1504  1426  1505  1506  1407
+CONVEX 23    GT_PK(2,2)      1373  1507  1396  1508  1509  1397
+CONVEX 24    GT_PK(2,2)      1431  1510  1430  1511  1512  1412
+CONVEX 25    GT_PK(2,2)      1431  1513  1445  1514  1515  1446
+CONVEX 26    GT_PK(2,2)      1431  1510  1430  1513  1516  1445
+CONVEX 27    GT_PK(2,2)      1218  1517  1185  1518  1519  1184
+CONVEX 28    GT_PK(2,2)      1218  1517  1185  1520  1521  1219
+CONVEX 29    GT_PK(2,2)      745  1522  705  1523  1524  3
+CONVEX 30    GT_PK(2,2)      745  1525  784  1523  1526  3
+CONVEX 31    GT_PK(2,2)      782  1527  743  1528  1529  744
+CONVEX 32    GT_PK(2,2)      782  1527  743  1530  1531  781
+CONVEX 33    GT_PK(2,2)      1165  1532  1130  1533  1534  1129
+CONVEX 34    GT_PK(2,2)      1262  1535  1229  1536  1537  1230
+CONVEX 35    GT_PK(2,2)      1164  1538  1198  1539  1540  1199
+CONVEX 36    GT_PK(2,2)      1164  1541  1165  1542  1533  1129
+CONVEX 37    GT_PK(2,2)      1164  1541  1165  1539  1543  1199
+CONVEX 38    GT_PK(2,2)      1232  1544  1198  1545  1540  1199
+CONVEX 39    GT_PK(2,2)      1232  1546  1231  1547  1548  1264
+CONVEX 40    GT_PK(2,2)      1232  1546  1231  1544  1549  1198
+CONVEX 41    GT_PK(2,2)      936  1550  937  1551  1552  975
+CONVEX 42    GT_PK(2,2)      316  1553  281  1554  1490  315
+CONVEX 43    GT_PK(2,2)      428  1555  429  1556  1557  467
+CONVEX 44    GT_PK(2,2)      319  1558  320  1559  1560  355
+CONVEX 45    GT_PK(2,2)      319  1561  354  1559  1562  355
+CONVEX 46    GT_PK(2,2)      1059  1563  1058  1564  1465  1021
+CONVEX 47    GT_PK(2,2)      706  1565  746  1566  1567  2
+CONVEX 48    GT_PK(2,2)      706  1565  746  1568  1569  747
+CONVEX 49    GT_PK(2,2)      706  1570  667  1566  1571  2
+CONVEX 50    GT_PK(2,2)      706  1572  668  1570  1573  667
+CONVEX 51    GT_PK(2,2)      1406  1574  1385  1575  1576  1407
+CONVEX 52    GT_PK(2,2)      1406  1577  1424  1578  1579  1405
+CONVEX 53    GT_PK(2,2)      1278  1580  1279  1581  1582  1247
+CONVEX 54    GT_PK(2,2)      1196  1583  1229  1584  1537  1230
+CONVEX 55    GT_PK(2,2)      806  1585  767  1586  1587  766
+CONVEX 56    GT_PK(2,2)      806  1588  845  1589  1590  846
+CONVEX 57    GT_PK(2,2)      806  1591  805  1586  1592  766
+CONVEX 58    GT_PK(2,2)      806  1591  805  1588  1593  845
+CONVEX 59    GT_PK(2,2)      727  1594  767  1595  1587  766
+CONVEX 60    GT_PK(2,2)      727  1596  728  1594  1467  767
+CONVEX 61    GT_PK(2,2)      807  1597  767  1598  1469  768
+CONVEX 62    GT_PK(2,2)      807  1599  806  1597  1585  767
+CONVEX 63    GT_PK(2,2)      807  1600  847  1601  1602  846
+CONVEX 64    GT_PK(2,2)      807  1599  806  1601  1589  846
+CONVEX 65    GT_PK(2,2)      403  1603  365  1604  1605  366
+CONVEX 66    GT_PK(2,2)      439  1606  478  1607  1608  477
+CONVEX 67    GT_PK(2,2)      325  1609  326  1610  1611  362
+CONVEX 68    GT_PK(2,2)      363  1612  326  1613  1614  327
+CONVEX 69    GT_PK(2,2)      363  1612  326  1615  1611  362
+CONVEX 70    GT_PK(2,2)      128  1616  158  1617  1618  157
+CONVEX 71    GT_PK(2,2)      189  1619  190  1620  1621  222
+CONVEX 72    GT_PK(2,2)      189  1619  190  1622  1623  158
+CONVEX 73    GT_PK(2,2)      189  1624  156  1625  1626  157
+CONVEX 74    GT_PK(2,2)      189  1622  158  1625  1618  157
+CONVEX 75    GT_PK(2,2)      255  1627  256  1628  1629  222
+CONVEX 76    GT_PK(2,2)      253  1630  252  1631  1632  219
+CONVEX 77    GT_PK(2,2)      253  1633  220  1631  1634  219
+CONVEX 78    GT_PK(2,2)      187  1635  220  1636  1634  219
+CONVEX 79    GT_PK(2,2)      291  1637  326  1638  1614  327
+CONVEX 80    GT_PK(2,2)      161  1639  160  1640  1475  192
+CONVEX 81    GT_PK(2,2)      131  1641  161  1642  1639  160
+CONVEX 82    GT_PK(2,2)      131  1643  104  1644  1645  132
+CONVEX 83    GT_PK(2,2)      131  1641  161  1644  1646  132
+CONVEX 84    GT_PK(2,2)      129  1647  128  1648  1616  158
+CONVEX 85    GT_PK(2,2)      223  1649  224  1650  1479  191
+CONVEX 86    GT_PK(2,2)      223  1651  256  1652  1629  222
+CONVEX 87    GT_PK(2,2)      223  1653  190  1650  1654  191
+CONVEX 88    GT_PK(2,2)      223  1653  190  1652  1621  222
+CONVEX 89    GT_PK(2,2)      127  1655  155  1656  1657  154
+CONVEX 90    GT_PK(2,2)      127  1658  126  1656  1659  154
+CONVEX 91    GT_PK(2,2)      127  1660  100  1658  1661  126
+CONVEX 92    GT_PK(2,2)      181  1662  182  1663  1664  152
+CONVEX 93    GT_PK(2,2)      246  1665  280  1666  1487  247
+CONVEX 94    GT_PK(2,2)      124  1667  99  1668  1669  98
+CONVEX 95    GT_PK(2,2)      125  1670  124  1671  1672  152
+CONVEX 96    GT_PK(2,2)      125  1670  124  1673  1667  99
+CONVEX 97    GT_PK(2,2)      125  1673  99  1674  1675  76
+CONVEX 98    GT_PK(2,2)      125  1676  100  1674  1677  76
+CONVEX 99    GT_PK(2,2)      125  1676  100  1678  1661  126
+CONVEX 100    GT_PK(2,2)      75  1679  53  1680  1681  98
+CONVEX 101    GT_PK(2,2)      75  1682  99  1680  1669  98
+CONVEX 102    GT_PK(2,2)      75  1682  99  1683  1675  76
+CONVEX 103    GT_PK(2,2)      217  1684  218  1685  1686  186
+CONVEX 104    GT_PK(2,2)      217  1687  216  1685  1484  186
+CONVEX 105    GT_PK(2,2)      217  1687  216  1688  1689  249
+CONVEX 106    GT_PK(2,2)      248  1690  216  1691  1689  249
+CONVEX 107    GT_PK(2,2)      248  1692  281  1693  1488  247
+CONVEX 108    GT_PK(2,2)      282  1694  316  1695  1696  317
+CONVEX 109    GT_PK(2,2)      282  1694  316  1697  1553  281
+CONVEX 110    GT_PK(2,2)      282  1698  248  1699  1691  249
+CONVEX 111    GT_PK(2,2)      282  1698  248  1697  1692  281
+CONVEX 112    GT_PK(2,2)      314  1700  280  1701  1489  315
+CONVEX 113    GT_PK(2,2)      12  1702  27  1703  1704  13
+CONVEX 114    GT_PK(2,2)      35  1705  56  1706  1707  34
+CONVEX 115    GT_PK(2,2)      79  1708  56  1709  1710  80
+CONVEX 116    GT_PK(2,2)      79  1711  34  1712  1713  55
+CONVEX 117    GT_PK(2,2)      79  1708  56  1711  1707  34
+CONVEX 118    GT_PK(2,2)      43  1714  25  1715  1716  44
+CONVEX 119    GT_PK(2,2)      43  1717  65  1715  1718  44
+CONVEX 120    GT_PK(2,2)      43  1719  64  1717  1491  65
+CONVEX 121    GT_PK(2,2)      22  1720  21  1721  1499  7
+CONVEX 122    GT_PK(2,2)      22  1722  8  1721  1723  7
+CONVEX 123    GT_PK(2,2)      22  1722  8  1724  1725  23
+CONVEX 124    GT_PK(2,2)      22  1724  23  1726  1727  41
+CONVEX 125    GT_PK(2,2)      1427  1728  1428  1729  1501  1442
+CONVEX 126    GT_PK(2,2)      1427  1730  1408  1731  1504  1426
+CONVEX 127    GT_PK(2,2)      1427  1728  1428  1732  1733  1409
+CONVEX 128    GT_PK(2,2)      1427  1730  1408  1732  1734  1409
+CONVEX 129    GT_PK(2,2)      1386  1735  1385  1736  1576  1407
+CONVEX 130    GT_PK(2,2)      1386  1737  1408  1736  1505  1407
+CONVEX 131    GT_PK(2,2)      885  1738  845  1739  1590  846
+CONVEX 132    GT_PK(2,2)      1193  1740  1192  1741  1742  1158
+CONVEX 133    GT_PK(2,2)      1429  1743  1428  1744  1502  1443
+CONVEX 134    GT_PK(2,2)      1391  1745  1390  1746  1747  1412
+CONVEX 135    GT_PK(2,2)      1248  1748  1279  1749  1582  1247
+CONVEX 136    GT_PK(2,2)      1183  1750  1149  1751  1752  1148
+CONVEX 137    GT_PK(2,2)      1183  1750  1149  1753  1754  1184
+CONVEX 138    GT_PK(2,2)      1187  1755  1188  1756  1757  1221
+CONVEX 139    GT_PK(2,2)      468  1758  429  1759  1557  467
+CONVEX 140    GT_PK(2,2)      470  1760  469  1761  1762  431
+CONVEX 141    GT_PK(2,2)      507  1763  508  1764  1765  546
+CONVEX 142    GT_PK(2,2)      507  1766  545  1764  1767  546
+CONVEX 143    GT_PK(2,2)      507  1768  470  1769  1760  469
+CONVEX 144    GT_PK(2,2)      507  1768  470  1763  1770  508
+CONVEX 145    GT_PK(2,2)      507  1771  468  1769  1772  469
+CONVEX 146    GT_PK(2,2)      704  1773  745  1774  1522  705
+CONVEX 147    GT_PK(2,2)      704  1773  745  1775  1776  744
+CONVEX 148    GT_PK(2,2)      585  1777  545  1778  1767  546
+CONVEX 149    GT_PK(2,2)      898  1779  937  1780  1781  938
+CONVEX 150    GT_PK(2,2)      783  1782  784  1783  1463  823
+CONVEX 151    GT_PK(2,2)      783  1784  745  1782  1525  784
+CONVEX 152    GT_PK(2,2)      783  1784  745  1785  1776  744
+CONVEX 153    GT_PK(2,2)      783  1786  782  1785  1528  744
+CONVEX 154    GT_PK(2,2)      783  1783  823  1787  1788  822
+CONVEX 155    GT_PK(2,2)      783  1786  782  1787  1789  822
+CONVEX 156    GT_PK(2,2)      1263  1790  1262  1791  1536  1230
+CONVEX 157    GT_PK(2,2)      1263  1792  1231  1791  1793  1230
+CONVEX 158    GT_PK(2,2)      1263  1792  1231  1794  1548  1264
+CONVEX 159    GT_PK(2,2)      897  1795  936  1796  1797  896
+CONVEX 160    GT_PK(2,2)      897  1795  936  1798  1550  937
+CONVEX 161    GT_PK(2,2)      897  1799  898  1800  1801  858
+CONVEX 162    GT_PK(2,2)      897  1799  898  1798  1779  937
+CONVEX 163    GT_PK(2,2)      818  1802  779  1803  1804  778
+CONVEX 164    GT_PK(2,2)      821  1805  820  1806  1807  781
+CONVEX 165    GT_PK(2,2)      821  1808  782  1809  1789  822
+CONVEX 166    GT_PK(2,2)      821  1808  782  1806  1530  781
+CONVEX 167    GT_PK(2,2)      940  1810  939  1811  1812  978
+CONVEX 168    GT_PK(2,2)      940  1810  939  1813  1814  900
+CONVEX 169    GT_PK(2,2)      902  1815  942  1816  1817  903
+CONVEX 170    GT_PK(2,2)      902  1815  942  1818  1819  941
+CONVEX 171    GT_PK(2,2)      976  1820  937  1821  1781  938
+CONVEX 172    GT_PK(2,2)      976  1820  937  1822  1552  975
+CONVEX 173    GT_PK(2,2)      352  1823  316  1824  1696  317
+CONVEX 174    GT_PK(2,2)      430  1825  392  1826  1827  429
+CONVEX 175    GT_PK(2,2)      430  1828  469  1829  1762  431
+CONVEX 176    GT_PK(2,2)      430  1830  468  1826  1758  429
+CONVEX 177    GT_PK(2,2)      430  1830  468  1828  1772  469
+CONVEX 178    GT_PK(2,2)      393  1831  430  1832  1829  431
+CONVEX 179    GT_PK(2,2)      393  1831  430  1833  1825  392
+CONVEX 180    GT_PK(2,2)      391  1834  392  1835  1827  429
+CONVEX 181    GT_PK(2,2)      391  1836  428  1837  1838  390
+CONVEX 182    GT_PK(2,2)      391  1836  428  1835  1555  429
+CONVEX 183    GT_PK(2,2)      391  1839  354  1837  1840  390
+CONVEX 184    GT_PK(2,2)      391  1834  392  1841  1842  355
+CONVEX 185    GT_PK(2,2)      391  1839  354  1841  1562  355
+CONVEX 186    GT_PK(2,2)      318  1843  319  1844  1845  284
+CONVEX 187    GT_PK(2,2)      318  1843  319  1846  1561  354
+CONVEX 188    GT_PK(2,2)      285  1847  319  1848  1558  320
+CONVEX 189    GT_PK(2,2)      285  1849  284  1850  1851  251
+CONVEX 190    GT_PK(2,2)      285  1847  319  1849  1845  284
+CONVEX 191    GT_PK(2,2)      707  1852  706  1853  1568  747
+CONVEX 192    GT_PK(2,2)      707  1852  706  1854  1572  668
+CONVEX 193    GT_PK(2,2)      786  1855  746  1856  1857  785
+CONVEX 194    GT_PK(2,2)      786  1855  746  1858  1569  747
+CONVEX 195    GT_PK(2,2)      1265  1859  1233  1860  1861  1234
+CONVEX 196    GT_PK(2,2)      1201  1862  1233  1863  1861  1234
+CONVEX 197    GT_PK(2,2)      1201  1862  1233  1864  1865  1200
+CONVEX 198    GT_PK(2,2)      1134  1866  1135  1867  1868  1099
+CONVEX 199    GT_PK(2,2)      1132  1869  1166  1870  1871  1131
+CONVEX 200    GT_PK(2,2)      1095  1872  1059  1873  1563  1058
+CONVEX 201    GT_PK(2,2)      948  1874  909  1875  1876  910
+CONVEX 202    GT_PK(2,2)      1103  1877  1138  1878  1879  1102
+CONVEX 203    GT_PK(2,2)      717  1880  756  1881  1882  757
+CONVEX 204    GT_PK(2,2)      717  1883  677  1884  1885  678
+CONVEX 205    GT_PK(2,2)      717  1880  756  1886  1887  716
+CONVEX 206    GT_PK(2,2)      717  1883  677  1886  1888  716
+CONVEX 207    GT_PK(2,2)      796  1889  756  1890  1882  757
+CONVEX 208    GT_PK(2,2)      796  1891  797  1890  1892  757
+CONVEX 209    GT_PK(2,2)      796  1891  797  1893  1894  836
+CONVEX 210    GT_PK(2,2)      796  1895  835  1893  1896  836
+CONVEX 211    GT_PK(2,2)      599  1897  559  1898  1899  598
+CONVEX 212    GT_PK(2,2)      759  1900  760  1901  1902  720
+CONVEX 213    GT_PK(2,2)      759  1903  719  1901  1904  720
+CONVEX 214    GT_PK(2,2)      718  1905  678  1906  1907  679
+CONVEX 215    GT_PK(2,2)      718  1908  719  1906  1909  679
+CONVEX 216    GT_PK(2,2)      718  1910  717  1911  1881  757
+CONVEX 217    GT_PK(2,2)      718  1910  717  1905  1884  678
+CONVEX 218    GT_PK(2,2)      721  1912  760  1913  1902  720
+CONVEX 219    GT_PK(2,2)      721  1914  681  1913  1915  720
+CONVEX 220    GT_PK(2,2)      721  1914  681  1916  1917  682
+CONVEX 221    GT_PK(2,2)      721  1918  761  1912  1919  760
+CONVEX 222    GT_PK(2,2)      680  1920  640  1921  1922  641
+CONVEX 223    GT_PK(2,2)      680  1923  681  1921  1924  641
+CONVEX 224    GT_PK(2,2)      680  1920  640  1925  1926  679
+CONVEX 225    GT_PK(2,2)      680  1923  681  1927  1915  720
+CONVEX 226    GT_PK(2,2)      680  1928  719  1925  1909  679
+CONVEX 227    GT_PK(2,2)      680  1928  719  1927  1904  720
+CONVEX 228    GT_PK(2,2)      1425  1929  1426  1930  1506  1407
+CONVEX 229    GT_PK(2,2)      1425  1931  1406  1930  1575  1407
+CONVEX 230    GT_PK(2,2)      1425  1931  1406  1932  1577  1424
+CONVEX 231    GT_PK(2,2)      1425  1929  1426  1933  1456  1440
+CONVEX 232    GT_PK(2,2)      1425  1933  1440  1934  1935  1439
+CONVEX 233    GT_PK(2,2)      1425  1932  1424  1934  1936  1439
+CONVEX 234    GT_PK(2,2)      1384  1937  1361  1938  1939  1385
+CONVEX 235    GT_PK(2,2)      1384  1940  1405  1941  1942  1383
+CONVEX 236    GT_PK(2,2)      1384  1943  1406  1940  1578  1405
+CONVEX 237    GT_PK(2,2)      1384  1943  1406  1938  1574  1385
+CONVEX 238    GT_PK(2,2)      971  1944  970  1945  1946  1009
+CONVEX 239    GT_PK(2,2)      932  1947  970  1948  1949  931
+CONVEX 240    GT_PK(2,2)      932  1950  971  1951  1952  933
+CONVEX 241    GT_PK(2,2)      932  1950  971  1947  1944  970
+CONVEX 242    GT_PK(2,2)      969  1953  970  1954  1949  931
+CONVEX 243    GT_PK(2,2)      969  1955  930  1954  1956  931
+CONVEX 244    GT_PK(2,2)      969  1955  930  1957  1958  968
+CONVEX 245    GT_PK(2,2)      895  1959  894  1960  1961  855
+CONVEX 246    GT_PK(2,2)      1197  1962  1231  1963  1793  1230
+CONVEX 247    GT_PK(2,2)      1197  1964  1196  1963  1584  1230
+CONVEX 248    GT_PK(2,2)      1197  1962  1231  1965  1549  1198
+CONVEX 249    GT_PK(2,2)      609  1966  610  1967  1968  649
+CONVEX 250    GT_PK(2,2)      241  1969  275  1970  1971  242
+CONVEX 251    GT_PK(2,2)      241  1972  274  1969  1973  275
+CONVEX 252    GT_PK(2,2)      29  1974  14  1975  1976  15
+CONVEX 253    GT_PK(2,2)      66  1977  44  1978  1979  45
+CONVEX 254    GT_PK(2,2)      66  1980  65  1977  1718  44
+CONVEX 255    GT_PK(2,2)      460  1981  459  1982  1983  498
+CONVEX 256    GT_PK(2,2)      276  1984  275  1985  1971  242
+CONVEX 257    GT_PK(2,2)      455  1986  454  1987  1988  416
+CONVEX 258    GT_PK(2,2)      455  1986  454  1989  1990  493
+CONVEX 259    GT_PK(2,2)      307  1991  306  1992  1993  342
+CONVEX 260    GT_PK(2,2)      310  1994  345  1995  1996  346
+CONVEX 261    GT_PK(2,2)      310  1997  276  1998  1984  275
+CONVEX 262    GT_PK(2,2)      417  1999  455  2000  1987  416
+CONVEX 263    GT_PK(2,2)      417  1999  455  2001  2002  456
+CONVEX 264    GT_PK(2,2)      417  2003  379  2000  2004  416
+CONVEX 265    GT_PK(2,2)      417  2003  379  2005  2006  380
+CONVEX 266    GT_PK(2,2)      343  2007  307  2008  2009  308
+CONVEX 267    GT_PK(2,2)      343  2007  307  2010  1992  342
+CONVEX 268    GT_PK(2,2)      343  2011  379  2010  2012  342
+CONVEX 269    GT_PK(2,2)      343  2011  379  2013  2006  380
+CONVEX 270    GT_PK(2,2)      339  2014  304  2015  2016  303
+CONVEX 271    GT_PK(2,2)      341  2017  306  2018  1993  342
+CONVEX 272    GT_PK(2,2)      726  2019  727  2020  1595  766
+CONVEX 273    GT_PK(2,2)      688  2021  727  2022  1596  728
+CONVEX 274    GT_PK(2,2)      628  2023  668  2024  2025  629
+CONVEX 275    GT_PK(2,2)      628  2023  668  2026  1573  667
+CONVEX 276    GT_PK(2,2)      589  2027  628  2028  2024  629
+CONVEX 277    GT_PK(2,2)      589  2027  628  2029  2030  588
+CONVEX 278    GT_PK(2,2)      364  2031  363  2032  1613  327
+CONVEX 279    GT_PK(2,2)      364  2031  363  2033  2034  401
+CONVEX 280    GT_PK(2,2)      328  2035  364  2036  2037  365
+CONVEX 281    GT_PK(2,2)      328  2035  364  2038  2032  327
+CONVEX 282    GT_PK(2,2)      329  2039  365  2040  1605  366
+CONVEX 283    GT_PK(2,2)      329  2041  330  2040  2042  366
+CONVEX 284    GT_PK(2,2)      329  2043  328  2039  2036  365
+CONVEX 285    GT_PK(2,2)      329  2043  328  2044  2045  293
+CONVEX 286    GT_PK(2,2)      367  2046  330  2047  2042  366
+CONVEX 287    GT_PK(2,2)      601  2048  640  2049  1922  641
+CONVEX 288    GT_PK(2,2)      562  2050  522  2051  2052  561
+CONVEX 289    GT_PK(2,2)      562  2053  601  2051  2054  561
+CONVEX 290    GT_PK(2,2)      523  2055  562  2056  2050  522
+CONVEX 291    GT_PK(2,2)      523  2055  562  2057  2058  563
+CONVEX 292    GT_PK(2,2)      521  2059  522  2060  2052  561
+CONVEX 293    GT_PK(2,2)      397  2061  398  2062  2063  360
+CONVEX 294    GT_PK(2,2)      437  2064  398  2065  2066  399
+CONVEX 295    GT_PK(2,2)      361  2067  398  2068  2063  360
+CONVEX 296    GT_PK(2,2)      361  2069  325  2070  1610  362
+CONVEX 297    GT_PK(2,2)      361  2070  362  2071  2072  399
+CONVEX 298    GT_PK(2,2)      361  2067  398  2071  2066  399
+CONVEX 299    GT_PK(2,2)      286  2073  322  2074  2075  321
+CONVEX 300    GT_PK(2,2)      359  2076  397  2077  2078  396
+CONVEX 301    GT_PK(2,2)      359  2076  397  2079  2062  360
+CONVEX 302    GT_PK(2,2)      358  2080  321  2081  2082  357
+CONVEX 303    GT_PK(2,2)      358  2083  322  2080  2075  321
+CONVEX 304    GT_PK(2,2)      358  2084  395  2081  1471  357
+CONVEX 305    GT_PK(2,2)      358  2085  359  2083  2086  322
+CONVEX 306    GT_PK(2,2)      358  2084  395  2087  2088  396
+CONVEX 307    GT_PK(2,2)      358  2085  359  2087  2077  396
+CONVEX 308    GT_PK(2,2)      402  2089  403  2090  1603  365
+CONVEX 309    GT_PK(2,2)      402  2091  364  2092  2033  401
+CONVEX 310    GT_PK(2,2)      402  2091  364  2090  2037  365
+CONVEX 311    GT_PK(2,2)      400  2093  439  2094  2095  401
+CONVEX 312    GT_PK(2,2)      400  2096  363  2094  2034  401
+CONVEX 313    GT_PK(2,2)      400  2097  362  2098  2072  399
+CONVEX 314    GT_PK(2,2)      400  2096  363  2097  1615  362
+CONVEX 315    GT_PK(2,2)      438  2099  439  2100  1607  477
+CONVEX 316    GT_PK(2,2)      438  2101  437  2102  2065  399
+CONVEX 317    GT_PK(2,2)      438  2103  400  2102  2098  399
+CONVEX 318    GT_PK(2,2)      438  2103  400  2099  2093  439
+CONVEX 319    GT_PK(2,2)      101  2104  77  2105  2106  102
+CONVEX 320    GT_PK(2,2)      101  2107  129  2105  2108  102
+CONVEX 321    GT_PK(2,2)      101  2107  129  2109  1647  128
+CONVEX 322    GT_PK(2,2)      188  2110  189  2111  1624  156
+CONVEX 323    GT_PK(2,2)      188  2112  187  2111  2113  156
+CONVEX 324    GT_PK(2,2)      188  2112  187  2114  1635  220
+CONVEX 325    GT_PK(2,2)      254  2115  253  2116  1633  220
+CONVEX 326    GT_PK(2,2)      254  2117  255  2118  2119  289
+CONVEX 327    GT_PK(2,2)      287  2120  253  2121  1630  252
+CONVEX 328    GT_PK(2,2)      287  2122  286  2121  2123  252
+CONVEX 329    GT_PK(2,2)      287  2122  286  2124  2073  322
+CONVEX 330    GT_PK(2,2)      292  2125  291  2126  1638  327
+CONVEX 331    GT_PK(2,2)      292  2127  258  2128  1448  293
+CONVEX 332    GT_PK(2,2)      292  2129  328  2128  2045  293
+CONVEX 333    GT_PK(2,2)      292  2129  328  2126  2038  327
+CONVEX 334    GT_PK(2,2)      257  2130  224  2131  1481  258
+CONVEX 335    GT_PK(2,2)      257  2132  292  2131  2127  258
+CONVEX 336    GT_PK(2,2)      257  2132  292  2133  2125  291
+CONVEX 337    GT_PK(2,2)      257  2133  291  2134  2135  256
+CONVEX 338    GT_PK(2,2)      257  2136  223  2134  1651  256
+CONVEX 339    GT_PK(2,2)      257  2136  223  2130  1649  224
+CONVEX 340    GT_PK(2,2)      290  2137  325  2138  1609  326
+CONVEX 341    GT_PK(2,2)      290  2139  291  2138  1637  326
+CONVEX 342    GT_PK(2,2)      290  2137  325  2140  2141  289
+CONVEX 343    GT_PK(2,2)      290  2142  255  2140  2119  289
+CONVEX 344    GT_PK(2,2)      290  2142  255  2143  1627  256
+CONVEX 345    GT_PK(2,2)      290  2139  291  2143  2135  256
+CONVEX 346    GT_PK(2,2)      103  2144  131  2145  1643  104
+CONVEX 347    GT_PK(2,2)      103  2146  77  2147  2106  102
+CONVEX 348    GT_PK(2,2)      103  2148  54  2146  2149  77
+CONVEX 349    GT_PK(2,2)      130  2150  129  2151  2108  102
+CONVEX 350    GT_PK(2,2)      130  2152  131  2153  1642  160
+CONVEX 351    GT_PK(2,2)      130  2154  103  2151  2147  102
+CONVEX 352    GT_PK(2,2)      130  2154  103  2152  2144  131
+CONVEX 353    GT_PK(2,2)      159  2155  190  2156  1654  191
+CONVEX 354    GT_PK(2,2)      159  2157  130  2158  2150  129
+CONVEX 355    GT_PK(2,2)      159  2155  190  2159  1623  158
+CONVEX 356    GT_PK(2,2)      159  2158  129  2159  1648  158
+CONVEX 357    GT_PK(2,2)      159  2160  160  2156  1476  191
+CONVEX 358    GT_PK(2,2)      159  2157  130  2160  2153  160
+CONVEX 359    GT_PK(2,2)      214  2161  183  2162  2163  182
+CONVEX 360    GT_PK(2,2)      214  2164  246  2165  1666  247
+CONVEX 361    GT_PK(2,2)      184  2166  183  2167  2168  154
+CONVEX 362    GT_PK(2,2)      184  2169  216  2170  1483  185
+CONVEX 363    GT_PK(2,2)      184  2171  155  2167  1657  154
+CONVEX 364    GT_PK(2,2)      184  2170  185  2171  2172  155
+CONVEX 365    GT_PK(2,2)      153  2173  183  2174  2163  182
+CONVEX 366    GT_PK(2,2)      153  2174  182  2175  1664  152
+CONVEX 367    GT_PK(2,2)      153  2176  126  2177  1659  154
+CONVEX 368    GT_PK(2,2)      153  2173  183  2177  2168  154
+CONVEX 369    GT_PK(2,2)      153  2178  125  2175  1671  152
+CONVEX 370    GT_PK(2,2)      153  2178  125  2176  1678  126
+CONVEX 371    GT_PK(2,2)      151  2179  181  2180  1663  152
+CONVEX 372    GT_PK(2,2)      151  2181  124  2180  1672  152
+CONVEX 373    GT_PK(2,2)      73  2182  52  2183  2184  33
+CONVEX 374    GT_PK(2,2)      250  2185  217  2186  1684  218
+CONVEX 375    GT_PK(2,2)      250  2187  284  2188  1851  251
+CONVEX 376    GT_PK(2,2)      250  2186  218  2188  2189  251
+CONVEX 377    GT_PK(2,2)      250  2185  217  2190  1688  249
+CONVEX 378    GT_PK(2,2)      215  2191  248  2192  1690  216
+CONVEX 379    GT_PK(2,2)      215  2193  184  2192  2169  216
+CONVEX 380    GT_PK(2,2)      215  2193  184  2194  2166  183
+CONVEX 381    GT_PK(2,2)      215  2195  214  2194  2161  183
+CONVEX 382    GT_PK(2,2)      215  2191  248  2196  1693  247
+CONVEX 383    GT_PK(2,2)      215  2195  214  2196  2165  247
+CONVEX 384    GT_PK(2,2)      279  2197  314  2198  1700  280
+CONVEX 385    GT_PK(2,2)      279  2199  246  2200  2201  245
+CONVEX 386    GT_PK(2,2)      279  2199  246  2198  1665  280
+CONVEX 387    GT_PK(2,2)      279  2202  278  2200  2203  245
+CONVEX 388    GT_PK(2,2)      279  2202  278  2204  2205  313
+CONVEX 389    GT_PK(2,2)      279  2197  314  2204  2206  313
+CONVEX 390    GT_PK(2,2)      11  2207  25  2208  1451  0
+CONVEX 391    GT_PK(2,2)      57  2209  35  2210  1705  56
+CONVEX 392    GT_PK(2,2)      57  2210  56  2211  1710  80
+CONVEX 393    GT_PK(2,2)      57  2212  17  2213  1455  36
+CONVEX 394    GT_PK(2,2)      57  2209  35  2212  2214  17
+CONVEX 395    GT_PK(2,2)      105  2215  79  2216  1709  80
+CONVEX 396    GT_PK(2,2)      105  2215  79  2217  2218  104
+CONVEX 397    GT_PK(2,2)      105  2219  106  2216  2220  80
+CONVEX 398    GT_PK(2,2)      105  2217  104  2221  1645  132
+CONVEX 399    GT_PK(2,2)      78  2222  79  2223  2218  104
+CONVEX 400    GT_PK(2,2)      78  2224  103  2223  2145  104
+CONVEX 401    GT_PK(2,2)      78  2224  103  2225  2148  54
+CONVEX 402    GT_PK(2,2)      78  2225  54  2226  2227  55
+CONVEX 403    GT_PK(2,2)      78  2222  79  2226  1712  55
+CONVEX 404    GT_PK(2,2)      162  2228  161  2229  1646  132
+CONVEX 405    GT_PK(2,2)      302  2230  268  2231  2232  303
+CONVEX 406    GT_PK(2,2)      37  2233  18  2234  1454  36
+CONVEX 407    GT_PK(2,2)      37  2235  19  2233  2236  18
+CONVEX 408    GT_PK(2,2)      201  2237  202  2238  2239  234
+CONVEX 409    GT_PK(2,2)      201  2240  233  2238  2241  234
+CONVEX 410    GT_PK(2,2)      87  2242  64  2243  1492  88
+CONVEX 411    GT_PK(2,2)      139  2244  168  2245  2246  169
+CONVEX 412    GT_PK(2,2)      9  2247  8  2248  1725  23
+CONVEX 413    GT_PK(2,2)      24  2249  43  2250  1714  25
+CONVEX 414    GT_PK(2,2)      24  2250  25  2251  1450  10
+CONVEX 415    GT_PK(2,2)      24  2252  9  2251  2253  10
+CONVEX 416    GT_PK(2,2)      24  2252  9  2254  2248  23
+CONVEX 417    GT_PK(2,2)      42  2255  23  2256  1727  41
+CONVEX 418    GT_PK(2,2)      42  2257  43  2258  1719  64
+CONVEX 419    GT_PK(2,2)      42  2259  24  2255  2254  23
+CONVEX 420    GT_PK(2,2)      42  2259  24  2257  2249  43
+CONVEX 421    GT_PK(2,2)      39  2260  21  2261  1498  20
+CONVEX 422    GT_PK(2,2)      1441  2262  1427  2263  1729  1442
+CONVEX 423    GT_PK(2,2)      1441  2264  1426  2265  1457  4
+CONVEX 424    GT_PK(2,2)      1441  2262  1427  2264  1731  1426
+CONVEX 425    GT_PK(2,2)      1387  2266  1408  2267  1734  1409
+CONVEX 426    GT_PK(2,2)      1387  2268  1386  2266  1737  1408
+CONVEX 427    GT_PK(2,2)      1337  2269  1309  2270  2271  1336
+CONVEX 428    GT_PK(2,2)      1337  2269  1309  2272  2273  1310
+CONVEX 429    GT_PK(2,2)      1362  2274  1361  2275  1939  1385
+CONVEX 430    GT_PK(2,2)      1362  2276  1386  2275  1735  1385
+CONVEX 431    GT_PK(2,2)      1362  2274  1361  2277  2278  1336
+CONVEX 432    GT_PK(2,2)      1362  2279  1337  2277  2270  1336
+CONVEX 433    GT_PK(2,2)      1076  2280  1075  2281  2282  1112
+CONVEX 434    GT_PK(2,2)      1000  2283  1001  2284  2285  1039
+CONVEX 435    GT_PK(2,2)      1040  2286  1001  2287  2285  1039
+CONVEX 436    GT_PK(2,2)      1040  2288  1078  2289  2290  1041
+CONVEX 437    GT_PK(2,2)      927  2291  966  2292  2293  928
+CONVEX 438    GT_PK(2,2)      927  2294  888  2292  2295  928
+CONVEX 439    GT_PK(2,2)      927  2296  887  2294  2297  888
+CONVEX 440    GT_PK(2,2)      925  2298  924  2299  2300  885
+CONVEX 441    GT_PK(2,2)      1415  2301  1433  2302  2303  1434
+CONVEX 442    GT_PK(2,2)      1415  2304  1414  2301  2305  1433
+CONVEX 443    GT_PK(2,2)      1432  2306  1414  2307  2305  1433
+CONVEX 444    GT_PK(2,2)      1222  2308  1188  2309  2310  1189
+CONVEX 445    GT_PK(2,2)      1222  2308  1188  2311  1757  1221
+CONVEX 446    GT_PK(2,2)      1348  2312  1373  2313  1508  1397
+CONVEX 447    GT_PK(2,2)      1347  2314  1348  2315  2312  1373
+CONVEX 448    GT_PK(2,2)      1347  2314  1348  2316  2317  1320
+CONVEX 449    GT_PK(2,2)      1416  2318  1395  2319  2320  1417
+CONVEX 450    GT_PK(2,2)      1371  2321  1345  2322  2323  1346
+CONVEX 451    GT_PK(2,2)      1371  2321  1345  2324  2325  1370
+CONVEX 452    GT_PK(2,2)      1372  2326  1347  2327  2328  1346
+CONVEX 453    GT_PK(2,2)      1372  2326  1347  2329  2315  1373
+CONVEX 454    GT_PK(2,2)      1372  2330  1371  2327  2322  1346
+CONVEX 455    GT_PK(2,2)      1372  2330  1371  2331  2332  1395
+CONVEX 456    GT_PK(2,2)      1372  2329  1373  2333  1507  1396
+CONVEX 457    GT_PK(2,2)      1372  2333  1396  2334  2335  1417
+CONVEX 458    GT_PK(2,2)      1372  2331  1395  2334  2320  1417
+CONVEX 459    GT_PK(2,2)      1344  2336  1369  2337  2338  1370
+CONVEX 460    GT_PK(2,2)      1344  2339  1345  2337  2325  1370
+CONVEX 461    GT_PK(2,2)      1344  2340  1343  2341  2342  1316
+CONVEX 462    GT_PK(2,2)      1344  2340  1343  2336  2343  1369
+CONVEX 463    GT_PK(2,2)      1317  2344  1344  2345  2341  1316
+CONVEX 464    GT_PK(2,2)      1317  2344  1344  2346  2339  1345
+CONVEX 465    GT_PK(2,2)      1444  2347  1429  2348  1744  1443
+CONVEX 466    GT_PK(2,2)      1444  2349  1430  2350  1516  1445
+CONVEX 467    GT_PK(2,2)      1444  2347  1429  2349  2351  1430
+CONVEX 468    GT_PK(2,2)      1410  2352  1428  2353  1733  1409
+CONVEX 469    GT_PK(2,2)      1410  2354  1429  2352  1743  1428
+CONVEX 470    GT_PK(2,2)      1368  2355  1369  2356  2357  1392
+CONVEX 471    GT_PK(2,2)      1368  2358  1391  2356  2359  1392
+CONVEX 472    GT_PK(2,2)      1368  2360  1343  2355  2343  1369
+CONVEX 473    GT_PK(2,2)      1413  2361  1432  2362  2306  1414
+CONVEX 474    GT_PK(2,2)      1413  2363  1431  2364  1511  1412
+CONVEX 475    GT_PK(2,2)      1413  2365  1391  2364  1746  1412
+CONVEX 476    GT_PK(2,2)      1413  2362  1414  2366  2367  1392
+CONVEX 477    GT_PK(2,2)      1413  2365  1391  2366  2359  1392
+CONVEX 478    GT_PK(2,2)      1413  2363  1431  2368  1514  1446
+CONVEX 479    GT_PK(2,2)      1413  2361  1432  2368  2369  1446
+CONVEX 480    GT_PK(2,2)      1113  2370  1112  2371  2372  1148
+CONVEX 481    GT_PK(2,2)      1113  2373  1149  2371  1752  1148
+CONVEX 482    GT_PK(2,2)      1113  2374  1076  2370  2281  1112
+CONVEX 483    GT_PK(2,2)      1150  2375  1185  2376  1519  1184
+CONVEX 484    GT_PK(2,2)      1150  2377  1149  2376  1754  1184
+CONVEX 485    GT_PK(2,2)      1079  2378  1078  2379  2380  1115
+CONVEX 486    GT_PK(2,2)      1079  2381  1116  2379  2382  1115
+CONVEX 487    GT_PK(2,2)      1079  2381  1116  2383  2384  1080
+CONVEX 488    GT_PK(2,2)      1079  2378  1078  2385  2290  1041
+CONVEX 489    GT_PK(2,2)      1280  2386  1248  2387  1748  1279
+CONVEX 490    GT_PK(2,2)      1280  2388  1309  2387  2389  1279
+CONVEX 491    GT_PK(2,2)      1280  2388  1309  2390  2273  1310
+CONVEX 492    GT_PK(2,2)      1217  2391  1183  2392  2393  1216
+CONVEX 493    GT_PK(2,2)      1217  2394  1218  2395  2396  1250
+CONVEX 494    GT_PK(2,2)      1217  2394  1218  2397  1518  1184
+CONVEX 495    GT_PK(2,2)      1217  2391  1183  2397  1753  1184
+CONVEX 496    GT_PK(2,2)      1253  2398  1284  2399  2400  1285
+CONVEX 497    GT_PK(2,2)      1253  2401  1252  2398  2402  1284
+CONVEX 498    GT_PK(2,2)      1311  2403  1312  2404  2405  1339
+CONVEX 499    GT_PK(2,2)      1311  2406  1282  2403  2407  1312
+CONVEX 500    GT_PK(2,2)      1153  2408  1187  2409  2410  1152
+CONVEX 501    GT_PK(2,2)      1153  2408  1187  2411  1755  1188
+CONVEX 502    GT_PK(2,2)      1154  2412  1188  2413  2310  1189
+CONVEX 503    GT_PK(2,2)      1154  2414  1153  2412  2411  1188
+CONVEX 504    GT_PK(2,2)      1220  2415  1187  2416  1756  1221
+CONVEX 505    GT_PK(2,2)      1220  2417  1253  2416  2418  1221
+CONVEX 506    GT_PK(2,2)      1220  2419  1252  2420  2421  1219
+CONVEX 507    GT_PK(2,2)      1220  2417  1253  2419  2401  1252
+CONVEX 508    GT_PK(2,2)      665  2422  704  2423  1774  705
+CONVEX 509    GT_PK(2,2)      547  2424  508  2425  1765  546
+CONVEX 510    GT_PK(2,2)      586  2426  587  2427  2428  625
+CONVEX 511    GT_PK(2,2)      586  2429  585  2427  2430  625
+CONVEX 512    GT_PK(2,2)      586  2429  585  2431  1778  546
+CONVEX 513    GT_PK(2,2)      586  2432  547  2431  2425  546
+CONVEX 514    GT_PK(2,2)      586  2432  547  2426  2433  587
+CONVEX 515    GT_PK(2,2)      624  2434  585  2435  2430  625
+CONVEX 516    GT_PK(2,2)      899  2436  898  2437  1780  938
+CONVEX 517    GT_PK(2,2)      899  2438  939  2437  2439  938
+CONVEX 518    GT_PK(2,2)      899  2438  939  2440  1814  900
+CONVEX 519    GT_PK(2,2)      739  2441  779  2442  1804  778
+CONVEX 520    GT_PK(2,2)      739  2443  738  2442  2444  778
+CONVEX 521    GT_PK(2,2)      819  2445  818  2446  2447  858
+CONVEX 522    GT_PK(2,2)      819  2445  818  2448  1802  779
+CONVEX 523    GT_PK(2,2)      623  2449  624  2450  2451  663
+CONVEX 524    GT_PK(2,2)      742  2452  743  2453  1531  781
+CONVEX 525    GT_PK(2,2)      742  2454  741  2453  2455  781
+CONVEX 526    GT_PK(2,2)      780  2456  820  2457  1807  781
+CONVEX 527    GT_PK(2,2)      780  2458  741  2457  2455  781
+CONVEX 528    GT_PK(2,2)      780  2459  819  2456  2460  820
+CONVEX 529    GT_PK(2,2)      780  2459  819  2461  2448  779
+CONVEX 530    GT_PK(2,2)      662  2462  623  2463  2450  663
+CONVEX 531    GT_PK(2,2)      979  2464  1017  2465  2466  978
+CONVEX 532    GT_PK(2,2)      979  2467  940  2465  1811  978
+CONVEX 533    GT_PK(2,2)      979  2467  940  2468  2469  941
+CONVEX 534    GT_PK(2,2)      1056  2470  1057  2471  2472  1094
+CONVEX 535    GT_PK(2,2)      1055  2473  1056  2474  2475  1017
+CONVEX 536    GT_PK(2,2)      1295  2476  1294  2477  2478  1262
+CONVEX 537    GT_PK(2,2)      1295  2479  1263  2477  1790  1262
+CONVEX 538    GT_PK(2,2)      1295  2479  1263  2480  1794  1264
+CONVEX 539    GT_PK(2,2)      817  2481  818  2482  1803  778
+CONVEX 540    GT_PK(2,2)      860  2483  821  2484  1805  820
+CONVEX 541    GT_PK(2,2)      860  2485  899  2486  2440  900
+CONVEX 542    GT_PK(2,2)      977  2487  939  2488  1812  978
+CONVEX 543    GT_PK(2,2)      977  2487  939  2489  2439  938
+CONVEX 544    GT_PK(2,2)      977  2490  976  2489  1821  938
+CONVEX 545    GT_PK(2,2)      977  2490  976  2491  2492  1015
+CONVEX 546    GT_PK(2,2)      980  2493  942  2494  1819  941
+CONVEX 547    GT_PK(2,2)      980  2495  979  2496  2497  1019
+CONVEX 548    GT_PK(2,2)      980  2495  979  2494  2468  941
+CONVEX 549    GT_PK(2,2)      861  2498  821  2499  1809  822
+CONVEX 550    GT_PK(2,2)      861  2500  860  2501  2486  900
+CONVEX 551    GT_PK(2,2)      861  2500  860  2498  2483  821
+CONVEX 552    GT_PK(2,2)      901  2502  940  2503  2469  941
+CONVEX 553    GT_PK(2,2)      901  2504  902  2503  1818  941
+CONVEX 554    GT_PK(2,2)      901  2502  940  2505  1813  900
+CONVEX 555    GT_PK(2,2)      901  2506  861  2505  2501  900
+CONVEX 556    GT_PK(2,2)      427  2507  428  2508  1838  390
+CONVEX 557    GT_PK(2,2)      356  2509  392  2510  1842  355
+CONVEX 558    GT_PK(2,2)      356  2511  393  2509  1833  392
+CONVEX 559    GT_PK(2,2)      356  2512  320  2510  1560  355
+CONVEX 560    GT_PK(2,2)      353  2513  318  2514  2515  317
+CONVEX 561    GT_PK(2,2)      353  2516  352  2514  1824  317
+CONVEX 562    GT_PK(2,2)      353  2517  354  2518  1840  390
+CONVEX 563    GT_PK(2,2)      353  2513  318  2517  1846  354
+CONVEX 564    GT_PK(2,2)      838  2519  839  2520  2521  878
+CONVEX 565    GT_PK(2,2)      517  2522  556  2523  2524  557
+CONVEX 566    GT_PK(2,2)      516  2525  478  2526  1608  477
+CONVEX 567    GT_PK(2,2)      516  2527  517  2525  2528  478
+CONVEX 568    GT_PK(2,2)      516  2527  517  2529  2522  556
+CONVEX 569    GT_PK(2,2)      596  2530  556  2531  2524  557
+CONVEX 570    GT_PK(2,2)      596  2532  597  2531  2533  557
+CONVEX 571    GT_PK(2,2)      596  2532  597  2534  2535  636
+CONVEX 572    GT_PK(2,2)      714  2536  715  2537  2538  675
+CONVEX 573    GT_PK(2,2)      982  2539  983  2540  2541  1021
+CONVEX 574    GT_PK(2,2)      982  2542  1020  2540  1466  1021
+CONVEX 575    GT_PK(2,2)      982  2543  981  2542  2544  1020
+CONVEX 576    GT_PK(2,2)      787  2545  786  2546  2547  826
+CONVEX 577    GT_PK(2,2)      787  2545  786  2548  1858  747
+CONVEX 578    GT_PK(2,2)      1100  2549  1135  2550  2551  1136
+CONVEX 579    GT_PK(2,2)      1100  2549  1135  2552  1868  1099
+CONVEX 580    GT_PK(2,2)      1098  2553  1134  2554  1867  1099
+CONVEX 581    GT_PK(2,2)      1098  2555  1062  2554  2556  1099
+CONVEX 582    GT_PK(2,2)      1133  2557  1134  2558  2559  1168
+CONVEX 583    GT_PK(2,2)      1133  2560  1098  2557  2553  1134
+CONVEX 584    GT_PK(2,2)      1097  2561  1133  2562  2563  1132
+CONVEX 585    GT_PK(2,2)      1097  2561  1133  2564  2560  1098
+CONVEX 586    GT_PK(2,2)      1167  2565  1201  2566  1864  1200
+CONVEX 587    GT_PK(2,2)      1167  2567  1166  2566  2568  1200
+CONVEX 588    GT_PK(2,2)      1167  2569  1132  2567  1869  1166
+CONVEX 589    GT_PK(2,2)      1167  2570  1133  2569  2563  1132
+CONVEX 590    GT_PK(2,2)      1167  2565  1201  2571  2572  1168
+CONVEX 591    GT_PK(2,2)      1167  2570  1133  2571  2558  1168
+CONVEX 592    GT_PK(2,2)      1096  2573  1095  2574  1872  1059
+CONVEX 593    GT_PK(2,2)      1096  2575  1097  2576  2562  1132
+CONVEX 594    GT_PK(2,2)      1096  2576  1132  2577  1870  1131
+CONVEX 595    GT_PK(2,2)      1096  2573  1095  2577  2578  1131
+CONVEX 596    GT_PK(2,2)      1096  2574  1059  2579  2580  1060
+CONVEX 597    GT_PK(2,2)      1096  2575  1097  2579  2581  1060
+CONVEX 598    GT_PK(2,2)      1065  2582  1027  2583  2584  1064
+CONVEX 599    GT_PK(2,2)      1065  2582  1027  2585  2586  1028
+CONVEX 600    GT_PK(2,2)      751  2587  711  2588  2589  712
+CONVEX 601    GT_PK(2,2)      1063  2590  1062  2591  2556  1099
+CONVEX 602    GT_PK(2,2)      1063  2592  1100  2591  2552  1099
+CONVEX 603    GT_PK(2,2)      1063  2592  1100  2593  2594  1064
+CONVEX 604    GT_PK(2,2)      1022  2595  1023  2596  2597  1060
+CONVEX 605    GT_PK(2,2)      1022  2598  1059  2599  1564  1021
+CONVEX 606    GT_PK(2,2)      1022  2598  1059  2596  2580  1060
+CONVEX 607    GT_PK(2,2)      1022  2600  983  2599  2541  1021
+CONVEX 608    GT_PK(2,2)      985  2601  1023  2602  2603  1024
+CONVEX 609    GT_PK(2,2)      949  2604  950  2605  2606  988
+CONVEX 610    GT_PK(2,2)      949  2604  950  2607  2608  911
+CONVEX 611    GT_PK(2,2)      949  2607  911  2609  2610  910
+CONVEX 612    GT_PK(2,2)      949  2611  948  2609  1875  910
+CONVEX 613    GT_PK(2,2)      1030  2612  1029  2613  2614  1067
+CONVEX 614    GT_PK(2,2)      989  2615  950  2616  2606  988
+CONVEX 615    GT_PK(2,2)      989  2617  1027  2616  2618  988
+CONVEX 616    GT_PK(2,2)      989  2617  1027  2619  2586  1028
+CONVEX 617    GT_PK(2,2)      912  2620  872  2621  2622  873
+CONVEX 618    GT_PK(2,2)      912  2623  950  2624  2608  911
+CONVEX 619    GT_PK(2,2)      912  2620  872  2624  2625  911
+CONVEX 620    GT_PK(2,2)      1206  2626  1207  2627  2628  1173
+CONVEX 621    GT_PK(2,2)      758  2629  797  2630  1892  757
+CONVEX 622    GT_PK(2,2)      758  2631  718  2630  1911  757
+CONVEX 623    GT_PK(2,2)      758  2631  718  2632  1908  719
+CONVEX 624    GT_PK(2,2)      758  2633  759  2632  1903  719
+CONVEX 625    GT_PK(2,2)      758  2629  797  2634  2635  798
+CONVEX 626    GT_PK(2,2)      758  2633  759  2634  2636  798
+CONVEX 627    GT_PK(2,2)      875  2637  835  2638  1896  836
+CONVEX 628    GT_PK(2,2)      875  2639  914  2640  2641  915
+CONVEX 629    GT_PK(2,2)      875  2637  835  2642  2643  874
+CONVEX 630    GT_PK(2,2)      875  2639  914  2642  2644  874
+CONVEX 631    GT_PK(2,2)      754  2645  714  2646  2536  715
+CONVEX 632    GT_PK(2,2)      794  2647  754  2648  2649  793
+CONVEX 633    GT_PK(2,2)      638  2650  599  2651  1898  598
+CONVEX 634    GT_PK(2,2)      638  2652  677  2653  1885  678
+CONVEX 635    GT_PK(2,2)      639  2654  678  2655  1907  679
+CONVEX 636    GT_PK(2,2)      639  2656  640  2655  1926  679
+CONVEX 637    GT_PK(2,2)      639  2657  638  2654  2653  678
+CONVEX 638    GT_PK(2,2)      639  2657  638  2658  2650  599
+CONVEX 639    GT_PK(2,2)      560  2659  559  2660  2661  520
+CONVEX 640    GT_PK(2,2)      560  2662  599  2659  1897  559
+CONVEX 641    GT_PK(2,2)      560  2663  521  2660  2664  520
+CONVEX 642    GT_PK(2,2)      560  2663  521  2665  2060  561
+CONVEX 643    GT_PK(2,2)      762  2666  761  2667  2668  801
+CONVEX 644    GT_PK(2,2)      722  2669  721  2670  1916  682
+CONVEX 645    GT_PK(2,2)      722  2669  721  2671  1918  761
+CONVEX 646    GT_PK(2,2)      722  2672  683  2670  2673  682
+CONVEX 647    GT_PK(2,2)      722  2674  762  2671  2666  761
+CONVEX 648    GT_PK(2,2)      1404  2675  1405  2676  1942  1383
+CONVEX 649    GT_PK(2,2)      1423  2677  1424  2678  1579  1405
+CONVEX 650    GT_PK(2,2)      1423  2679  1404  2678  2675  1405
+CONVEX 651    GT_PK(2,2)      1423  2679  1404  2680  2681  1422
+CONVEX 652    GT_PK(2,2)      1360  2682  1384  2683  1941  1383
+CONVEX 653    GT_PK(2,2)      1360  2682  1384  2684  1937  1361
+CONVEX 654    GT_PK(2,2)      1335  2685  1360  2686  2687  1334
+CONVEX 655    GT_PK(2,2)      1335  2688  1361  2689  2278  1336
+CONVEX 656    GT_PK(2,2)      1335  2685  1360  2688  2684  1361
+CONVEX 657    GT_PK(2,2)      1212  2690  1178  2691  2692  1211
+CONVEX 658    GT_PK(2,2)      1212  2693  1244  2691  2694  1211
+CONVEX 659    GT_PK(2,2)      1179  2695  1212  2696  2697  1213
+CONVEX 660    GT_PK(2,2)      1179  2695  1212  2698  2690  1178
+CONVEX 661    GT_PK(2,2)      1245  2699  1212  2700  2697  1213
+CONVEX 662    GT_PK(2,2)      1245  2699  1212  2701  2693  1244
+CONVEX 663    GT_PK(2,2)      1182  2702  1183  2703  2393  1216
+CONVEX 664    GT_PK(2,2)      1182  2702  1183  2704  1751  1148
+CONVEX 665    GT_PK(2,2)      1147  2705  1112  2706  2372  1148
+CONVEX 666    GT_PK(2,2)      1147  2707  1182  2706  2704  1148
+CONVEX 667    GT_PK(2,2)      1147  2707  1182  2708  2709  1181
+CONVEX 668    GT_PK(2,2)      1308  2710  1278  2711  1580  1279
+CONVEX 669    GT_PK(2,2)      1308  2712  1309  2711  2389  1279
+CONVEX 670    GT_PK(2,2)      1308  2712  1309  2713  2271  1336
+CONVEX 671    GT_PK(2,2)      1308  2714  1335  2713  2689  1336
+CONVEX 672    GT_PK(2,2)      1268  2715  1298  2716  2717  1297
+CONVEX 673    GT_PK(2,2)      1268  2718  1236  2719  2720  1237
+CONVEX 674    GT_PK(2,2)      1268  2721  1269  2719  2722  1237
+CONVEX 675    GT_PK(2,2)      1268  2721  1269  2715  2723  1298
+CONVEX 676    GT_PK(2,2)      1299  2724  1269  2725  2726  1270
+CONVEX 677    GT_PK(2,2)      1299  2724  1269  2727  2723  1298
+CONVEX 678    GT_PK(2,2)      1137  2728  1171  2729  2730  1136
+CONVEX 679    GT_PK(2,2)      1137  2731  1138  2732  1879  1102
+CONVEX 680    GT_PK(2,2)      1169  2733  1134  2734  2559  1168
+CONVEX 681    GT_PK(2,2)      1169  2733  1134  2735  1866  1135
+CONVEX 682    GT_PK(2,2)      1267  2736  1268  2737  2716  1297
+CONVEX 683    GT_PK(2,2)      1267  2736  1268  2738  2718  1236
+CONVEX 684    GT_PK(2,2)      1204  2739  1236  2740  2720  1237
+CONVEX 685    GT_PK(2,2)      1240  2741  1207  2742  2743  1208
+CONVEX 686    GT_PK(2,2)      1271  2744  1240  2745  2746  1272
+CONVEX 687    GT_PK(2,2)      1243  2747  1244  2748  2694  1211
+CONVEX 688    GT_PK(2,2)      972  2749  971  2750  1952  933
+CONVEX 689    GT_PK(2,2)      1083  2751  1046  2752  2753  1045
+CONVEX 690    GT_PK(2,2)      1002  2754  1003  2755  2756  964
+CONVEX 691    GT_PK(2,2)      1002  2757  1040  2758  2286  1001
+CONVEX 692    GT_PK(2,2)      1002  2754  1003  2759  2760  1041
+CONVEX 693    GT_PK(2,2)      1002  2757  1040  2759  2289  1041
+CONVEX 694    GT_PK(2,2)      1081  2761  1043  2762  2763  1080
+CONVEX 695    GT_PK(2,2)      929  2764  930  2765  1958  968
+CONVEX 696    GT_PK(2,2)      1008  2766  969  2767  1953  970
+CONVEX 697    GT_PK(2,2)      1008  2767  970  2768  1946  1009
+CONVEX 698    GT_PK(2,2)      1157  2769  1192  2770  1742  1158
+CONVEX 699    GT_PK(2,2)      1010  2771  1049  2772  2773  1011
+CONVEX 700    GT_PK(2,2)      1010  2774  972  2772  2775  1011
+CONVEX 701    GT_PK(2,2)      1010  2776  971  2777  1945  1009
+CONVEX 702    GT_PK(2,2)      1010  2774  972  2776  2749  971
+CONVEX 703    GT_PK(2,2)      974  2778  936  2779  1551  975
+CONVEX 704    GT_PK(2,2)      974  2780  1013  2779  2781  975
+CONVEX 705    GT_PK(2,2)      1014  2782  1013  2783  2784  1052
+CONVEX 706    GT_PK(2,2)      1014  2782  1013  2785  2781  975
+CONVEX 707    GT_PK(2,2)      1014  2786  976  2785  1822  975
+CONVEX 708    GT_PK(2,2)      1014  2786  976  2787  2492  1015
+CONVEX 709    GT_PK(2,2)      1051  2788  1013  2789  2784  1052
+CONVEX 710    GT_PK(2,2)      1124  2790  1123  2791  2792  1087
+CONVEX 711    GT_PK(2,2)      1163  2793  1164  2794  1538  1198
+CONVEX 712    GT_PK(2,2)      1163  2795  1197  2794  1965  1198
+CONVEX 713    GT_PK(2,2)      725  2796  685  2797  2798  724
+CONVEX 714    GT_PK(2,2)      725  2799  764  2797  2800  724
+CONVEX 715    GT_PK(2,2)      684  2801  685  2802  2803  645
+CONVEX 716    GT_PK(2,2)      684  2801  685  2804  2798  724
+CONVEX 717    GT_PK(2,2)      570  2805  571  2806  2807  610
+CONVEX 718    GT_PK(2,2)      570  2808  609  2806  1966  610
+CONVEX 719    GT_PK(2,2)      570  2809  531  2810  2811  530
+CONVEX 720    GT_PK(2,2)      570  2809  531  2805  2812  571
+CONVEX 721    GT_PK(2,2)      646  2813  685  2814  2803  645
+CONVEX 722    GT_PK(2,2)      646  2815  606  2814  2816  645
+CONVEX 723    GT_PK(2,2)      30  2817  29  2818  1975  15
+CONVEX 724    GT_PK(2,2)      30  2817  29  2819  2820  48
+CONVEX 725    GT_PK(2,2)      28  2821  29  2822  1974  14
+CONVEX 726    GT_PK(2,2)      28  2822  14  2823  2824  13
+CONVEX 727    GT_PK(2,2)      28  2825  27  2823  1704  13
+CONVEX 728    GT_PK(2,2)      89  2826  66  2827  2828  90
+CONVEX 729    GT_PK(2,2)      89  2829  114  2830  2831  88
+CONVEX 730    GT_PK(2,2)      89  2832  65  2830  1493  88
+CONVEX 731    GT_PK(2,2)      89  2826  66  2832  1980  65
+CONVEX 732    GT_PK(2,2)      528  2833  529  2834  2835  490
+CONVEX 733    GT_PK(2,2)      489  2836  451  2837  2838  490
+CONVEX 734    GT_PK(2,2)      489  2839  528  2840  2841  527
+CONVEX 735    GT_PK(2,2)      489  2839  528  2837  2834  490
+CONVEX 736    GT_PK(2,2)      452  2842  451  2843  2844  413
+CONVEX 737    GT_PK(2,2)      452  2842  451  2845  2838  490
+CONVEX 738    GT_PK(2,2)      414  2846  452  2847  2843  413
+CONVEX 739    GT_PK(2,2)      414  2846  452  2848  2849  453
+CONVEX 740    GT_PK(2,2)      491  2850  529  2851  2852  530
+CONVEX 741    GT_PK(2,2)      491  2850  529  2853  2835  490
+CONVEX 742    GT_PK(2,2)      491  2854  452  2853  2845  490
+CONVEX 743    GT_PK(2,2)      491  2854  452  2855  2849  453
+CONVEX 744    GT_PK(2,2)      385  2856  423  2857  2858  422
+CONVEX 745    GT_PK(2,2)      311  2859  310  2860  1995  346
+CONVEX 746    GT_PK(2,2)      311  2859  310  2861  1997  276
+CONVEX 747    GT_PK(2,2)      382  2862  345  2863  1996  346
+CONVEX 748    GT_PK(2,2)      382  2864  383  2863  2865  346
+CONVEX 749    GT_PK(2,2)      382  2866  381  2862  2867  345
+CONVEX 750    GT_PK(2,2)      382  2868  420  2864  2869  383
+CONVEX 751    GT_PK(2,2)      382  2866  381  2870  2871  419
+CONVEX 752    GT_PK(2,2)      382  2868  420  2870  2872  419
+CONVEX 753    GT_PK(2,2)      347  2873  383  2874  2865  346
+CONVEX 754    GT_PK(2,2)      347  2875  311  2874  2860  346
+CONVEX 755    GT_PK(2,2)      494  2876  455  2877  2002  456
+CONVEX 756    GT_PK(2,2)      494  2878  495  2877  2879  456
+CONVEX 757    GT_PK(2,2)      494  2876  455  2880  1989  493
+CONVEX 758    GT_PK(2,2)      494  2878  495  2881  2882  533
+CONVEX 759    GT_PK(2,2)      497  2883  459  2884  1983  498
+CONVEX 760    GT_PK(2,2)      457  2885  495  2886  2879  456
+CONVEX 761    GT_PK(2,2)      235  2887  268  2888  2889  234
+CONVEX 762    GT_PK(2,2)      235  2890  202  2888  2239  234
+CONVEX 763    GT_PK(2,2)      235  2891  203  2890  2892  202
+CONVEX 764    GT_PK(2,2)      309  2893  310  2894  1994  345
+CONVEX 765    GT_PK(2,2)      309  2895  274  2896  2897  308
+CONVEX 766    GT_PK(2,2)      309  2895  274  2898  1973  275
+CONVEX 767    GT_PK(2,2)      309  2893  310  2898  1998  275
+CONVEX 768    GT_PK(2,2)      344  2899  343  2900  2008  308
+CONVEX 769    GT_PK(2,2)      344  2901  309  2900  2896  308
+CONVEX 770    GT_PK(2,2)      344  2901  309  2902  2894  345
+CONVEX 771    GT_PK(2,2)      344  2903  381  2902  2867  345
+CONVEX 772    GT_PK(2,2)      344  2903  381  2904  2905  380
+CONVEX 773    GT_PK(2,2)      344  2899  343  2904  2013  380
+CONVEX 774    GT_PK(2,2)      376  2906  414  2907  2847  413
+CONVEX 775    GT_PK(2,2)      376  2906  414  2908  2909  377
+CONVEX 776    GT_PK(2,2)      378  2910  341  2911  2912  377
+CONVEX 777    GT_PK(2,2)      378  2913  379  2914  2004  416
+CONVEX 778    GT_PK(2,2)      378  2913  379  2915  2012  342
+CONVEX 779    GT_PK(2,2)      378  2910  341  2915  2018  342
+CONVEX 780    GT_PK(2,2)      305  2916  341  2917  2017  306
+CONVEX 781    GT_PK(2,2)      340  2918  341  2919  2912  377
+CONVEX 782    GT_PK(2,2)      340  2920  376  2919  2908  377
+CONVEX 783    GT_PK(2,2)      340  2920  376  2921  2922  339
+CONVEX 784    GT_PK(2,2)      340  2923  305  2918  2916  341
+CONVEX 785    GT_PK(2,2)      340  2921  339  2924  2014  304
+CONVEX 786    GT_PK(2,2)      340  2923  305  2924  2925  304
+CONVEX 787    GT_PK(2,2)      765  2926  805  2927  1592  766
+CONVEX 788    GT_PK(2,2)      765  2928  725  2929  2930  1
+CONVEX 789    GT_PK(2,2)      765  2928  725  2931  2799  764
+CONVEX 790    GT_PK(2,2)      765  2932  726  2929  2933  1
+CONVEX 791    GT_PK(2,2)      765  2932  726  2927  2020  766
+CONVEX 792    GT_PK(2,2)      844  2934  805  2935  1593  845
+CONVEX 793    GT_PK(2,2)      802  2936  762  2937  2667  801
+CONVEX 794    GT_PK(2,2)      648  2938  609  2939  1967  649
+CONVEX 795    GT_PK(2,2)      648  2940  688  2939  2941  649
+CONVEX 796    GT_PK(2,2)      648  2942  608  2943  2944  647
+CONVEX 797    GT_PK(2,2)      648  2942  608  2938  2945  609
+CONVEX 798    GT_PK(2,2)      687  2946  726  2947  2019  727
+CONVEX 799    GT_PK(2,2)      687  2948  688  2947  2021  727
+CONVEX 800    GT_PK(2,2)      687  2949  648  2948  2940  688
+CONVEX 801    GT_PK(2,2)      687  2949  648  2950  2943  647
+CONVEX 802    GT_PK(2,2)      613  2951  652  2952  2953  653
+CONVEX 803    GT_PK(2,2)      532  2954  531  2955  2812  571
+CONVEX 804    GT_PK(2,2)      532  2956  572  2957  2958  533
+CONVEX 805    GT_PK(2,2)      532  2956  572  2955  2959  571
+CONVEX 806    GT_PK(2,2)      532  2954  531  2960  2961  493
+CONVEX 807    GT_PK(2,2)      532  2962  494  2957  2881  533
+CONVEX 808    GT_PK(2,2)      532  2962  494  2960  2880  493
+CONVEX 809    GT_PK(2,2)      808  2963  769  2964  2965  768
+CONVEX 810    GT_PK(2,2)      808  2966  807  2964  1598  768
+CONVEX 811    GT_PK(2,2)      808  2966  807  2967  1600  847
+CONVEX 812    GT_PK(2,2)      729  2968  769  2969  2970  730
+CONVEX 813    GT_PK(2,2)      729  2971  690  2969  2972  730
+CONVEX 814    GT_PK(2,2)      729  2973  728  2974  1468  768
+CONVEX 815    GT_PK(2,2)      729  2968  769  2974  2965  768
+CONVEX 816    GT_PK(2,2)      689  2975  688  2976  2941  649
+CONVEX 817    GT_PK(2,2)      689  2975  688  2977  2022  728
+CONVEX 818    GT_PK(2,2)      689  2978  729  2977  2973  728
+CONVEX 819    GT_PK(2,2)      689  2978  729  2979  2971  690
+CONVEX 820    GT_PK(2,2)      691  2980  690  2981  2972  730
+CONVEX 821    GT_PK(2,2)      611  2982  571  2983  2807  610
+CONVEX 822    GT_PK(2,2)      611  2984  572  2982  2959  571
+CONVEX 823    GT_PK(2,2)      854  2985  894  2986  1961  855
+CONVEX 824    GT_PK(2,2)      891  2987  930  2988  1956  931
+CONVEX 825    GT_PK(2,2)      536  2989  497  2990  2884  498
+CONVEX 826    GT_PK(2,2)      614  2991  575  2992  2993  574
+CONVEX 827    GT_PK(2,2)      614  2994  613  2995  2952  653
+CONVEX 828    GT_PK(2,2)      614  2994  613  2992  2996  574
+CONVEX 829    GT_PK(2,2)      774  2997  813  2998  2999  773
+CONVEX 830    GT_PK(2,2)      627  3000  628  3001  2026  667
+CONVEX 831    GT_PK(2,2)      627  3000  628  3002  2030  588
+CONVEX 832    GT_PK(2,2)      549  3003  510  3004  3005  509
+CONVEX 833    GT_PK(2,2)      433  3006  395  3007  1470  394
+CONVEX 834    GT_PK(2,2)      404  3008  403  3009  1604  366
+CONVEX 835    GT_PK(2,2)      404  3010  367  3009  2047  366
+CONVEX 836    GT_PK(2,2)      404  3010  367  3011  3012  405
+CONVEX 837    GT_PK(2,2)      404  3013  443  3011  3014  405
+CONVEX 838    GT_PK(2,2)      642  3015  681  3016  1917  682
+CONVEX 839    GT_PK(2,2)      642  3015  681  3017  1924  641
+CONVEX 840    GT_PK(2,2)      644  3018  684  3019  2802  645
+CONVEX 841    GT_PK(2,2)      644  3018  684  3020  3021  683
+CONVEX 842    GT_PK(2,2)      484  3022  523  3023  2056  522
+CONVEX 843    GT_PK(2,2)      524  3024  523  3025  2057  563
+CONVEX 844    GT_PK(2,2)      482  3026  521  3027  2664  520
+CONVEX 845    GT_PK(2,2)      558  3028  597  3029  2533  557
+CONVEX 846    GT_PK(2,2)      558  3030  559  3031  1899  598
+CONVEX 847    GT_PK(2,2)      558  3028  597  3031  3032  598
+CONVEX 848    GT_PK(2,2)      436  3033  397  3034  2061  398
+CONVEX 849    GT_PK(2,2)      436  3035  437  3034  2064  398
+CONVEX 850    GT_PK(2,2)      440  3036  439  3037  1606  478
+CONVEX 851    GT_PK(2,2)      440  3036  439  3038  2095  401
+CONVEX 852    GT_PK(2,2)      440  3039  402  3038  2092  401
+CONVEX 853    GT_PK(2,2)      221  3040  254  3041  2117  255
+CONVEX 854    GT_PK(2,2)      221  3041  255  3042  1628  222
+CONVEX 855    GT_PK(2,2)      221  3043  188  3044  2114  220
+CONVEX 856    GT_PK(2,2)      221  3040  254  3044  2116  220
+CONVEX 857    GT_PK(2,2)      221  3045  189  3042  1620  222
+CONVEX 858    GT_PK(2,2)      221  3043  188  3045  2110  189
+CONVEX 859    GT_PK(2,2)      323  3046  359  3047  2086  322
+CONVEX 860    GT_PK(2,2)      323  3048  287  3047  2124  322
+CONVEX 861    GT_PK(2,2)      323  3046  359  3049  2079  360
+CONVEX 862    GT_PK(2,2)      213  3050  214  3051  2162  182
+CONVEX 863    GT_PK(2,2)      213  3050  214  3052  2164  246
+CONVEX 864    GT_PK(2,2)      213  3053  181  3051  1662  182
+CONVEX 865    GT_PK(2,2)      213  3054  212  3053  3055  181
+CONVEX 866    GT_PK(2,2)      213  3052  246  3056  2201  245
+CONVEX 867    GT_PK(2,2)      213  3054  212  3056  3057  245
+CONVEX 868    GT_PK(2,2)      180  3058  212  3059  3055  181
+CONVEX 869    GT_PK(2,2)      180  3060  151  3059  2179  181
+CONVEX 870    GT_PK(2,2)      180  3061  211  3058  3062  212
+CONVEX 871    GT_PK(2,2)      74  3063  52  3064  3065  53
+CONVEX 872    GT_PK(2,2)      74  3066  73  3063  2182  52
+CONVEX 873    GT_PK(2,2)      74  3064  53  3067  1681  98
+CONVEX 874    GT_PK(2,2)      283  3068  282  3069  1699  249
+CONVEX 875    GT_PK(2,2)      283  3070  250  3069  2190  249
+CONVEX 876    GT_PK(2,2)      283  3068  282  3071  1695  317
+CONVEX 877    GT_PK(2,2)      283  3072  318  3071  2515  317
+CONVEX 878    GT_PK(2,2)      283  3072  318  3073  1844  284
+CONVEX 879    GT_PK(2,2)      283  3070  250  3073  2187  284
+CONVEX 880    GT_PK(2,2)      26  3074  12  3075  1702  27
+CONVEX 881    GT_PK(2,2)      26  3076  11  3074  3077  12
+CONVEX 882    GT_PK(2,2)      26  3076  11  3078  2207  25
+CONVEX 883    GT_PK(2,2)      26  3078  25  3079  1716  44
+CONVEX 884    GT_PK(2,2)      26  3079  44  3080  1979  45
+CONVEX 885    GT_PK(2,2)      26  3075  27  3080  3081  45
+CONVEX 886    GT_PK(2,2)      81  3082  57  3083  2211  80
+CONVEX 887    GT_PK(2,2)      81  3084  107  3085  3086  82
+CONVEX 888    GT_PK(2,2)      81  3087  106  3083  2220  80
+CONVEX 889    GT_PK(2,2)      81  3084  107  3087  3088  106
+CONVEX 890    GT_PK(2,2)      193  3089  161  3090  1640  192
+CONVEX 891    GT_PK(2,2)      193  3091  162  3089  2228  161
+CONVEX 892    GT_PK(2,2)      193  3092  225  3090  1482  192
+CONVEX 893    GT_PK(2,2)      338  3093  339  3094  2015  303
+CONVEX 894    GT_PK(2,2)      338  3095  302  3094  2231  303
+CONVEX 895    GT_PK(2,2)      58  3096  37  3097  2234  36
+CONVEX 896    GT_PK(2,2)      58  3098  81  3099  3085  82
+CONVEX 897    GT_PK(2,2)      58  3100  57  3097  2213  36
+CONVEX 898    GT_PK(2,2)      58  3098  81  3100  3082  57
+CONVEX 899    GT_PK(2,2)      200  3101  168  3102  2246  169
+CONVEX 900    GT_PK(2,2)      200  3103  201  3102  3104  169
+CONVEX 901    GT_PK(2,2)      200  3103  201  3105  2240  233
+CONVEX 902    GT_PK(2,2)      86  3106  87  3107  3108  112
+CONVEX 903    GT_PK(2,2)      113  3109  87  3110  3108  112
+CONVEX 904    GT_PK(2,2)      113  3111  141  3112  3113  114
+CONVEX 905    GT_PK(2,2)      113  3112  114  3114  2831  88
+CONVEX 906    GT_PK(2,2)      113  3109  87  3114  2243  88
+CONVEX 907    GT_PK(2,2)      40  3115  39  3116  2260  21
+CONVEX 908    GT_PK(2,2)      40  3117  22  3118  1726  41
+CONVEX 909    GT_PK(2,2)      40  3117  22  3116  1720  21
+CONVEX 910    GT_PK(2,2)      40  3115  39  3119  3120  61
+CONVEX 911    GT_PK(2,2)      59  3121  58  3122  3099  82
+CONVEX 912    GT_PK(2,2)      59  3121  58  3123  3096  37
+CONVEX 913    GT_PK(2,2)      108  3124  107  3125  3086  82
+CONVEX 914    GT_PK(2,2)      1364  3126  1365  3127  3128  1339
+CONVEX 915    GT_PK(2,2)      963  3129  1002  3130  2755  964
+CONVEX 916    GT_PK(2,2)      963  3129  1002  3131  2758  1001
+CONVEX 917    GT_PK(2,2)      963  3132  925  3130  3133  964
+CONVEX 918    GT_PK(2,2)      963  3132  925  3134  2298  924
+CONVEX 919    GT_PK(2,2)      1038  3135  1000  3136  2284  1039
+CONVEX 920    GT_PK(2,2)      1038  3137  1076  3136  3138  1039
+CONVEX 921    GT_PK(2,2)      1038  3137  1076  3139  2280  1075
+CONVEX 922    GT_PK(2,2)      965  3140  927  3141  2291  966
+CONVEX 923    GT_PK(2,2)      965  3142  1003  3143  2756  964
+CONVEX 924    GT_PK(2,2)      965  3144  1004  3141  3145  966
+CONVEX 925    GT_PK(2,2)      965  3144  1004  3142  3146  1003
+CONVEX 926    GT_PK(2,2)      886  3147  925  3148  2299  885
+CONVEX 927    GT_PK(2,2)      886  3148  885  3149  1739  846
+CONVEX 928    GT_PK(2,2)      886  3150  847  3149  1602  846
+CONVEX 929    GT_PK(2,2)      886  3151  887  3150  3152  847
+CONVEX 930    GT_PK(2,2)      1393  3153  1369  3154  2338  1370
+CONVEX 931    GT_PK(2,2)      1393  3153  1369  3155  2357  1392
+CONVEX 932    GT_PK(2,2)      1393  3156  1414  3155  2367  1392
+CONVEX 933    GT_PK(2,2)      1393  3157  1415  3156  2304  1414
+CONVEX 934    GT_PK(2,2)      1254  3158  1286  3159  3160  1285
+CONVEX 935    GT_PK(2,2)      1254  3161  1253  3159  2399  1285
+CONVEX 936    GT_PK(2,2)      1254  3162  1222  3163  2311  1221
+CONVEX 937    GT_PK(2,2)      1254  3161  1253  3163  2418  1221
+CONVEX 938    GT_PK(2,2)      1374  3164  1348  3165  2313  1397
+CONVEX 939    GT_PK(2,2)      1293  3166  1294  3167  3168  1323
+CONVEX 940    GT_PK(2,2)      1293  3166  1294  3169  2478  1262
+CONVEX 941    GT_PK(2,2)      1321  3170  1348  3171  2317  1320
+CONVEX 942    GT_PK(2,2)      1321  3172  1291  3171  3173  1320
+CONVEX 943    GT_PK(2,2)      1319  3174  1347  3175  2328  1346
+CONVEX 944    GT_PK(2,2)      1319  3174  1347  3176  2316  1320
+CONVEX 945    GT_PK(2,2)      1394  3177  1416  3178  2318  1395
+CONVEX 946    GT_PK(2,2)      1394  3179  1415  3180  2302  1434
+CONVEX 947    GT_PK(2,2)      1394  3177  1416  3180  3181  1434
+CONVEX 948    GT_PK(2,2)      1394  3182  1371  3183  2324  1370
+CONVEX 949    GT_PK(2,2)      1394  3182  1371  3178  2332  1395
+CONVEX 950    GT_PK(2,2)      1394  3184  1393  3183  3154  1370
+CONVEX 951    GT_PK(2,2)      1394  3184  1393  3179  3157  1415
+CONVEX 952    GT_PK(2,2)      1195  3185  1196  3186  1583  1229
+CONVEX 953    GT_PK(2,2)      1261  3187  1262  3188  1535  1229
+CONVEX 954    GT_PK(2,2)      1261  3189  1293  3187  3169  1262
+CONVEX 955    GT_PK(2,2)      1411  3190  1390  3191  1747  1412
+CONVEX 956    GT_PK(2,2)      1411  3192  1430  3191  1512  1412
+CONVEX 957    GT_PK(2,2)      1411  3193  1429  3192  2351  1430
+CONVEX 958    GT_PK(2,2)      1411  3194  1410  3193  2354  1429
+CONVEX 959    GT_PK(2,2)      1077  3195  1113  3196  2374  1076
+CONVEX 960    GT_PK(2,2)      1077  3197  1040  3198  2288  1078
+CONVEX 961    GT_PK(2,2)      1077  3196  1076  3199  3138  1039
+CONVEX 962    GT_PK(2,2)      1077  3197  1040  3199  2287  1039
+CONVEX 963    GT_PK(2,2)      1151  3200  1150  3201  2375  1185
+CONVEX 964    GT_PK(2,2)      1151  3202  1116  3203  3204  1152
+CONVEX 965    GT_PK(2,2)      1151  3202  1116  3205  2382  1115
+CONVEX 966    GT_PK(2,2)      1151  3200  1150  3205  3206  1115
+CONVEX 967    GT_PK(2,2)      1249  3207  1280  3208  2386  1248
+CONVEX 968    GT_PK(2,2)      1249  3208  1248  3209  3210  1216
+CONVEX 969    GT_PK(2,2)      1249  3211  1217  3212  2395  1250
+CONVEX 970    GT_PK(2,2)      1249  3211  1217  3209  2392  1216
+CONVEX 971    GT_PK(2,2)      1251  3213  1282  3214  3215  1250
+CONVEX 972    GT_PK(2,2)      1251  3216  1218  3214  2396  1250
+CONVEX 973    GT_PK(2,2)      1251  3216  1218  3217  1520  1219
+CONVEX 974    GT_PK(2,2)      1251  3218  1252  3217  2421  1219
+CONVEX 975    GT_PK(2,2)      1281  3219  1311  3220  2406  1282
+CONVEX 976    GT_PK(2,2)      1281  3221  1249  3222  3207  1280
+CONVEX 977    GT_PK(2,2)      1281  3222  1280  3223  2390  1310
+CONVEX 978    GT_PK(2,2)      1281  3219  1311  3223  3224  1310
+CONVEX 979    GT_PK(2,2)      1281  3220  1282  3225  3215  1250
+CONVEX 980    GT_PK(2,2)      1281  3221  1249  3225  3212  1250
+CONVEX 981    GT_PK(2,2)      1367  3226  1391  3227  1745  1390
+CONVEX 982    GT_PK(2,2)      1367  3228  1368  3226  2358  1391
+CONVEX 983    GT_PK(2,2)      1367  3229  1366  3227  3230  1390
+CONVEX 984    GT_PK(2,2)      1367  3229  1366  3231  3232  1341
+CONVEX 985    GT_PK(2,2)      1342  3233  1368  3234  2360  1343
+CONVEX 986    GT_PK(2,2)      1342  3235  1367  3233  3228  1368
+CONVEX 987    GT_PK(2,2)      1342  3235  1367  3236  3231  1341
+CONVEX 988    GT_PK(2,2)      1155  3237  1154  3238  3239  1119
+CONVEX 989    GT_PK(2,2)      1155  3237  1154  3240  2413  1189
+CONVEX 990    GT_PK(2,2)      1155  3241  1190  3240  3242  1189
+CONVEX 991    GT_PK(2,2)      1155  3241  1190  3243  3244  1156
+CONVEX 992    GT_PK(2,2)      1186  3245  1220  3246  2415  1187
+CONVEX 993    GT_PK(2,2)      1186  3246  1187  3247  2410  1152
+CONVEX 994    GT_PK(2,2)      1186  3248  1185  3249  1521  1219
+CONVEX 995    GT_PK(2,2)      1186  3245  1220  3249  2420  1219
+CONVEX 996    GT_PK(2,2)      1186  3250  1151  3247  3203  1152
+CONVEX 997    GT_PK(2,2)      1186  3250  1151  3248  3201  1185
+CONVEX 998    GT_PK(2,2)      666  3251  665  3252  2423  705
+CONVEX 999    GT_PK(2,2)      664  3253  665  3254  2422  704
+CONVEX 1000    GT_PK(2,2)      664  3255  624  3256  2451  663
+CONVEX 1001    GT_PK(2,2)      664  3253  665  3257  3258  625
+CONVEX 1002    GT_PK(2,2)      664  3255  624  3257  2435  625
+CONVEX 1003    GT_PK(2,2)      506  3259  507  3260  1766  545
+CONVEX 1004    GT_PK(2,2)      506  3259  507  3261  1771  468
+CONVEX 1005    GT_PK(2,2)      506  3261  468  3262  1759  467
+CONVEX 1006    GT_PK(2,2)      506  3263  505  3262  3264  467
+CONVEX 1007    GT_PK(2,2)      740  3265  739  3266  2441  779
+CONVEX 1008    GT_PK(2,2)      740  3267  780  3266  2461  779
+CONVEX 1009    GT_PK(2,2)      740  3267  780  3268  2458  741
+CONVEX 1010    GT_PK(2,2)      740  3265  739  3269  3270  700
+CONVEX 1011    GT_PK(2,2)      859  3271  819  3272  2460  820
+CONVEX 1012    GT_PK(2,2)      859  3273  860  3272  2484  820
+CONVEX 1013    GT_PK(2,2)      859  3273  860  3274  2485  899
+CONVEX 1014    GT_PK(2,2)      859  3274  899  3275  2436  898
+CONVEX 1015    GT_PK(2,2)      859  3275  898  3276  1801  858
+CONVEX 1016    GT_PK(2,2)      859  3271  819  3276  2446  858
+CONVEX 1017    GT_PK(2,2)      543  3277  504  3278  3279  505
+CONVEX 1018    GT_PK(2,2)      543  3280  542  3281  3282  582
+CONVEX 1019    GT_PK(2,2)      543  3277  504  3280  3283  542
+CONVEX 1020    GT_PK(2,2)      544  3284  543  3285  3278  505
+CONVEX 1021    GT_PK(2,2)      544  3286  506  3287  3260  545
+CONVEX 1022    GT_PK(2,2)      544  3286  506  3285  3263  505
+CONVEX 1023    GT_PK(2,2)      584  3288  624  3289  2434  585
+CONVEX 1024    GT_PK(2,2)      584  3290  623  3288  2449  624
+CONVEX 1025    GT_PK(2,2)      584  3289  585  3291  1777  545
+CONVEX 1026    GT_PK(2,2)      584  3292  544  3291  3287  545
+CONVEX 1027    GT_PK(2,2)      702  3293  742  3294  2454  741
+CONVEX 1028    GT_PK(2,2)      702  3295  662  3296  2463  663
+CONVEX 1029    GT_PK(2,2)      702  3293  742  3297  2452  743
+CONVEX 1030    GT_PK(2,2)      622  3298  662  3299  2462  623
+CONVEX 1031    GT_PK(2,2)      622  3298  662  3300  3301  661
+CONVEX 1032    GT_PK(2,2)      622  3302  621  3303  3304  582
+CONVEX 1033    GT_PK(2,2)      622  3302  621  3300  3305  661
+CONVEX 1034    GT_PK(2,2)      1093  3306  1092  3307  3308  1129
+CONVEX 1035    GT_PK(2,2)      1093  3309  1056  3310  2471  1094
+CONVEX 1036    GT_PK(2,2)      1093  3311  1055  3306  3312  1092
+CONVEX 1037    GT_PK(2,2)      1093  3311  1055  3309  2473  1056
+CONVEX 1038    GT_PK(2,2)      1093  3313  1130  3307  1534  1129
+CONVEX 1039    GT_PK(2,2)      1093  3310  1094  3313  3314  1130
+CONVEX 1040    GT_PK(2,2)      1018  3315  1057  3316  3317  1019
+CONVEX 1041    GT_PK(2,2)      1018  3318  1056  3315  2470  1057
+CONVEX 1042    GT_PK(2,2)      1018  3318  1056  3319  2475  1017
+CONVEX 1043    GT_PK(2,2)      1018  3320  979  3316  2497  1019
+CONVEX 1044    GT_PK(2,2)      1018  3320  979  3319  2464  1017
+CONVEX 1045    GT_PK(2,2)      1054  3321  1055  3322  3312  1092
+CONVEX 1046    GT_PK(2,2)      777  3323  738  3324  2444  778
+CONVEX 1047    GT_PK(2,2)      777  3325  817  3324  2482  778
+CONVEX 1048    GT_PK(2,2)      856  3326  895  3327  3328  896
+CONVEX 1049    GT_PK(2,2)      856  3326  895  3329  1960  855
+CONVEX 1050    GT_PK(2,2)      857  3330  817  3331  2481  818
+CONVEX 1051    GT_PK(2,2)      857  3332  897  3333  1800  858
+CONVEX 1052    GT_PK(2,2)      857  3331  818  3333  2447  858
+CONVEX 1053    GT_PK(2,2)      857  3332  897  3334  1796  896
+CONVEX 1054    GT_PK(2,2)      857  3335  856  3334  3327  896
+CONVEX 1055    GT_PK(2,2)      857  3335  856  3330  3336  817
+CONVEX 1056    GT_PK(2,2)      1016  3337  1017  3338  2466  978
+CONVEX 1057    GT_PK(2,2)      1016  3339  977  3338  2488  978
+CONVEX 1058    GT_PK(2,2)      1016  3339  977  3340  2491  1015
+CONVEX 1059    GT_PK(2,2)      1016  3341  1054  3340  3342  1015
+CONVEX 1060    GT_PK(2,2)      1016  3343  1055  3337  2474  1017
+CONVEX 1061    GT_PK(2,2)      1016  3341  1054  3343  3321  1055
+CONVEX 1062    GT_PK(2,2)      862  3344  861  3345  2499  822
+CONVEX 1063    GT_PK(2,2)      862  3346  823  3345  1788  822
+CONVEX 1064    GT_PK(2,2)      862  3347  901  3348  2504  902
+CONVEX 1065    GT_PK(2,2)      862  3347  901  3344  2506  861
+CONVEX 1066    GT_PK(2,2)      862  3346  823  3349  1461  863
+CONVEX 1067    GT_PK(2,2)      862  3350  903  3349  3351  863
+CONVEX 1068    GT_PK(2,2)      862  3348  902  3350  1816  903
+CONVEX 1069    GT_PK(2,2)      351  3352  352  3353  1823  316
+CONVEX 1070    GT_PK(2,2)      351  3353  316  3354  1554  315
+CONVEX 1071    GT_PK(2,2)      351  3355  388  3352  3356  352
+CONVEX 1072    GT_PK(2,2)      351  3355  388  3357  3358  387
+CONVEX 1073    GT_PK(2,2)      837  3359  797  3360  1894  836
+CONVEX 1074    GT_PK(2,2)      837  3359  797  3361  2635  798
+CONVEX 1075    GT_PK(2,2)      837  3362  838  3361  3363  798
+CONVEX 1076    GT_PK(2,2)      799  3364  838  3365  2519  839
+CONVEX 1077    GT_PK(2,2)      799  3364  838  3366  3363  798
+CONVEX 1078    GT_PK(2,2)      799  3367  759  3366  2636  798
+CONVEX 1079    GT_PK(2,2)      799  3367  759  3368  1900  760
+CONVEX 1080    GT_PK(2,2)      637  3369  597  3370  2535  636
+CONVEX 1081    GT_PK(2,2)      637  3369  597  3371  3032  598
+CONVEX 1082    GT_PK(2,2)      637  3372  638  3371  2651  598
+CONVEX 1083    GT_PK(2,2)      637  3372  638  3373  2652  677
+CONVEX 1084    GT_PK(2,2)      518  3374  517  3375  2523  557
+CONVEX 1085    GT_PK(2,2)      518  3376  558  3375  3029  557
+CONVEX 1086    GT_PK(2,2)      671  3377  710  3378  3379  670
+CONVEX 1087    GT_PK(2,2)      671  3380  711  3377  3381  710
+CONVEX 1088    GT_PK(2,2)      753  3382  714  3383  3384  713
+CONVEX 1089    GT_PK(2,2)      753  3385  792  3386  3387  793
+CONVEX 1090    GT_PK(2,2)      753  3388  754  3386  2649  793
+CONVEX 1091    GT_PK(2,2)      753  3388  754  3382  2645  714
+CONVEX 1092    GT_PK(2,2)      669  3389  708  3390  3391  707
+CONVEX 1093    GT_PK(2,2)      669  3392  668  3393  2025  629
+CONVEX 1094    GT_PK(2,2)      669  3390  707  3392  1854  668
+CONVEX 1095    GT_PK(2,2)      669  3389  708  3394  3395  670
+CONVEX 1096    GT_PK(2,2)      825  3396  864  3397  3398  826
+CONVEX 1097    GT_PK(2,2)      825  3399  786  3400  1856  785
+CONVEX 1098    GT_PK(2,2)      825  3399  786  3397  2547  826
+CONVEX 1099    GT_PK(2,2)      865  3401  864  3402  3398  826
+CONVEX 1100    GT_PK(2,2)      865  3401  864  3403  3404  904
+CONVEX 1101    GT_PK(2,2)      748  3405  787  3406  3407  788
+CONVEX 1102    GT_PK(2,2)      748  3408  749  3406  3409  788
+CONVEX 1103    GT_PK(2,2)      748  3408  749  3410  3411  708
+CONVEX 1104    GT_PK(2,2)      748  3410  708  3412  3391  707
+CONVEX 1105    GT_PK(2,2)      748  3412  707  3413  1853  747
+CONVEX 1106    GT_PK(2,2)      748  3405  787  3413  2548  747
+CONVEX 1107    GT_PK(2,2)      1061  3414  1098  3415  2555  1062
+CONVEX 1108    GT_PK(2,2)      1061  3416  1023  3417  2597  1060
+CONVEX 1109    GT_PK(2,2)      1061  3418  1097  3417  2581  1060
+CONVEX 1110    GT_PK(2,2)      1061  3418  1097  3414  2564  1098
+CONVEX 1111    GT_PK(2,2)      1061  3415  1062  3419  3420  1024
+CONVEX 1112    GT_PK(2,2)      1061  3416  1023  3419  2603  1024
+CONVEX 1113    GT_PK(2,2)      1066  3421  1103  3422  1878  1102
+CONVEX 1114    GT_PK(2,2)      1066  3423  1065  3422  3424  1102
+CONVEX 1115    GT_PK(2,2)      1066  3421  1103  3425  3426  1067
+CONVEX 1116    GT_PK(2,2)      1066  3423  1065  3427  2585  1028
+CONVEX 1117    GT_PK(2,2)      1066  3428  1029  3425  2614  1067
+CONVEX 1118    GT_PK(2,2)      1066  3428  1029  3427  3429  1028
+CONVEX 1119    GT_PK(2,2)      752  3430  713  3431  3432  712
+CONVEX 1120    GT_PK(2,2)      752  3433  792  3434  3435  791
+CONVEX 1121    GT_PK(2,2)      752  3436  753  3430  3383  713
+CONVEX 1122    GT_PK(2,2)      752  3436  753  3433  3385  792
+CONVEX 1123    GT_PK(2,2)      752  3437  751  3431  2588  712
+CONVEX 1124    GT_PK(2,2)      752  3437  751  3434  3438  791
+CONVEX 1125    GT_PK(2,2)      831  3439  792  3440  3435  791
+CONVEX 1126    GT_PK(2,2)      789  3441  749  3442  3409  788
+CONVEX 1127    GT_PK(2,2)      1026  3443  1027  3444  2584  1064
+CONVEX 1128    GT_PK(2,2)      1026  3445  1063  3444  2593  1064
+CONVEX 1129    GT_PK(2,2)      1026  3443  1027  3446  2618  988
+CONVEX 1130    GT_PK(2,2)      1025  3447  1062  3448  3420  1024
+CONVEX 1131    GT_PK(2,2)      1025  3449  1063  3447  2590  1062
+CONVEX 1132    GT_PK(2,2)      1025  3450  1026  3449  3445  1063
+CONVEX 1133    GT_PK(2,2)      984  3451  1022  3452  2600  983
+CONVEX 1134    GT_PK(2,2)      984  3451  1022  3453  2595  1023
+CONVEX 1135    GT_PK(2,2)      984  3454  985  3453  2601  1023
+CONVEX 1136    GT_PK(2,2)      984  3455  945  3452  3456  983
+CONVEX 1137    GT_PK(2,2)      947  3457  948  3458  1874  909
+CONVEX 1138    GT_PK(2,2)      991  3459  1030  3460  2612  1029
+CONVEX 1139    GT_PK(2,2)      991  3459  1030  3461  3462  992
+CONVEX 1140    GT_PK(2,2)      1033  3463  1032  3464  3465  1070
+CONVEX 1141    GT_PK(2,2)      1031  3466  1030  3467  3462  992
+CONVEX 1142    GT_PK(2,2)      1031  3468  993  3467  3469  992
+CONVEX 1143    GT_PK(2,2)      1031  3468  993  3470  3471  1032
+CONVEX 1144    GT_PK(2,2)      953  3472  914  3473  3474  952
+CONVEX 1145    GT_PK(2,2)      953  3475  991  3473  3476  952
+CONVEX 1146    GT_PK(2,2)      953  3475  991  3477  3461  992
+CONVEX 1147    GT_PK(2,2)      953  3472  914  3478  2641  915
+CONVEX 1148    GT_PK(2,2)      913  3479  912  3480  2621  873
+CONVEX 1149    GT_PK(2,2)      913  3480  873  3481  3482  874
+CONVEX 1150    GT_PK(2,2)      913  3483  914  3481  2644  874
+CONVEX 1151    GT_PK(2,2)      913  3483  914  3484  3474  952
+CONVEX 1152    GT_PK(2,2)      951  3485  989  3486  2615  950
+CONVEX 1153    GT_PK(2,2)      951  3487  912  3486  2623  950
+CONVEX 1154    GT_PK(2,2)      951  3488  913  3487  3479  912
+CONVEX 1155    GT_PK(2,2)      951  3488  913  3489  3484  952
+CONVEX 1156    GT_PK(2,2)      1205  3490  1204  3491  2740  1237
+CONVEX 1157    GT_PK(2,2)      1205  3490  1204  3492  3493  1171
+CONVEX 1158    GT_PK(2,2)      1174  3494  1207  3495  2743  1208
+CONVEX 1159    GT_PK(2,2)      1174  3494  1207  3496  2628  1173
+CONVEX 1160    GT_PK(2,2)      1139  3497  1103  3498  1877  1138
+CONVEX 1161    GT_PK(2,2)      1139  3499  1174  3500  3501  1140
+CONVEX 1162    GT_PK(2,2)      1139  3498  1138  3502  3503  1173
+CONVEX 1163    GT_PK(2,2)      1139  3499  1174  3502  3496  1173
+CONVEX 1164    GT_PK(2,2)      833  3504  872  3505  2622  873
+CONVEX 1165    GT_PK(2,2)      833  3506  794  3507  2648  793
+CONVEX 1166    GT_PK(2,2)      834  3508  873  3509  3482  874
+CONVEX 1167    GT_PK(2,2)      834  3510  835  3509  2643  874
+CONVEX 1168    GT_PK(2,2)      834  3511  833  3508  3505  873
+CONVEX 1169    GT_PK(2,2)      834  3511  833  3512  3506  794
+CONVEX 1170    GT_PK(2,2)      755  3513  754  3514  2646  715
+CONVEX 1171    GT_PK(2,2)      755  3515  794  3513  2647  754
+CONVEX 1172    GT_PK(2,2)      755  3514  715  3516  3517  716
+CONVEX 1173    GT_PK(2,2)      755  3518  756  3516  1887  716
+CONVEX 1174    GT_PK(2,2)      600  3519  601  3520  2048  640
+CONVEX 1175    GT_PK(2,2)      600  3521  639  3520  2656  640
+CONVEX 1176    GT_PK(2,2)      600  3519  601  3522  2054  561
+CONVEX 1177    GT_PK(2,2)      600  3523  560  3522  2665  561
+CONVEX 1178    GT_PK(2,2)      600  3521  639  3524  2658  599
+CONVEX 1179    GT_PK(2,2)      600  3523  560  3524  2662  599
+CONVEX 1180    GT_PK(2,2)      723  3525  722  3526  2674  762
+CONVEX 1181    GT_PK(2,2)      723  3525  722  3527  2672  683
+CONVEX 1182    GT_PK(2,2)      723  3528  684  3529  2804  724
+CONVEX 1183    GT_PK(2,2)      723  3528  684  3527  3021  683
+CONVEX 1184    GT_PK(2,2)      1438  3530  1424  3531  1936  1439
+CONVEX 1185    GT_PK(2,2)      1438  3532  1423  3530  2677  1424
+CONVEX 1186    GT_PK(2,2)      1437  3533  1423  3534  2680  1422
+CONVEX 1187    GT_PK(2,2)      1437  3535  1436  3534  3536  1422
+CONVEX 1188    GT_PK(2,2)      1437  3537  1438  3533  3532  1423
+CONVEX 1189    GT_PK(2,2)      1180  3538  1179  3539  2696  1213
+CONVEX 1190    GT_PK(2,2)      1180  3540  1214  3539  3541  1213
+CONVEX 1191    GT_PK(2,2)      1180  3540  1214  3542  3543  1181
+CONVEX 1192    GT_PK(2,2)      1180  3538  1179  3544  3545  1145
+CONVEX 1193    GT_PK(2,2)      1144  3546  1179  3547  3545  1145
+CONVEX 1194    GT_PK(2,2)      1144  3546  1179  3548  2698  1178
+CONVEX 1195    GT_PK(2,2)      1246  3549  1245  3550  2700  1213
+CONVEX 1196    GT_PK(2,2)      1246  3551  1214  3550  3541  1213
+CONVEX 1197    GT_PK(2,2)      1246  3551  1214  3552  3553  1247
+CONVEX 1198    GT_PK(2,2)      1246  3554  1277  3549  3555  1245
+CONVEX 1199    GT_PK(2,2)      1246  3556  1278  3552  1581  1247
+CONVEX 1200    GT_PK(2,2)      1246  3554  1277  3556  3557  1278
+CONVEX 1201    GT_PK(2,2)      1215  3558  1214  3559  3553  1247
+CONVEX 1202    GT_PK(2,2)      1215  3560  1248  3559  1749  1247
+CONVEX 1203    GT_PK(2,2)      1215  3560  1248  3561  3210  1216
+CONVEX 1204    GT_PK(2,2)      1215  3562  1182  3561  2703  1216
+CONVEX 1205    GT_PK(2,2)      1215  3558  1214  3563  3543  1181
+CONVEX 1206    GT_PK(2,2)      1215  3562  1182  3563  2709  1181
+CONVEX 1207    GT_PK(2,2)      1307  3564  1308  3565  2710  1278
+CONVEX 1208    GT_PK(2,2)      1307  3566  1277  3567  3568  1306
+CONVEX 1209    GT_PK(2,2)      1307  3566  1277  3565  3557  1278
+CONVEX 1210    GT_PK(2,2)      1307  3569  1334  3567  3570  1306
+CONVEX 1211    GT_PK(2,2)      1307  3571  1335  3569  2686  1334
+CONVEX 1212    GT_PK(2,2)      1307  3564  1308  3571  2714  1335
+CONVEX 1213    GT_PK(2,2)      1326  3572  1299  3573  2727  1298
+CONVEX 1214    GT_PK(2,2)      1326  3572  1299  3574  3575  1327
+CONVEX 1215    GT_PK(2,2)      1326  3576  1375  3577  3578  1351
+CONVEX 1216    GT_PK(2,2)      1172  3579  1137  3580  2728  1171
+CONVEX 1217    GT_PK(2,2)      1172  3581  1205  3580  3492  1171
+CONVEX 1218    GT_PK(2,2)      1172  3581  1205  3582  3583  1206
+CONVEX 1219    GT_PK(2,2)      1172  3582  1206  3584  2627  1173
+CONVEX 1220    GT_PK(2,2)      1172  3585  1138  3584  3503  1173
+CONVEX 1221    GT_PK(2,2)      1172  3579  1137  3585  2731  1138
+CONVEX 1222    GT_PK(2,2)      1101  3586  1100  3587  2550  1136
+CONVEX 1223    GT_PK(2,2)      1101  3588  1137  3587  2729  1136
+CONVEX 1224    GT_PK(2,2)      1101  3588  1137  3589  2732  1102
+CONVEX 1225    GT_PK(2,2)      1101  3586  1100  3590  2594  1064
+CONVEX 1226    GT_PK(2,2)      1101  3591  1065  3589  3424  1102
+CONVEX 1227    GT_PK(2,2)      1101  3591  1065  3590  2583  1064
+CONVEX 1228    GT_PK(2,2)      1203  3592  1204  3593  2739  1236
+CONVEX 1229    GT_PK(2,2)      1235  3594  1267  3595  3596  1266
+CONVEX 1230    GT_PK(2,2)      1235  3597  1265  3595  3598  1266
+CONVEX 1231    GT_PK(2,2)      1235  3597  1265  3599  1860  1234
+CONVEX 1232    GT_PK(2,2)      1235  3594  1267  3600  2738  1236
+CONVEX 1233    GT_PK(2,2)      1235  3601  1203  3600  3593  1236
+CONVEX 1234    GT_PK(2,2)      1170  3602  1204  3603  3493  1171
+CONVEX 1235    GT_PK(2,2)      1170  3603  1171  3604  2730  1136
+CONVEX 1236    GT_PK(2,2)      1170  3605  1203  3606  3607  1169
+CONVEX 1237    GT_PK(2,2)      1170  3605  1203  3602  3592  1204
+CONVEX 1238    GT_PK(2,2)      1170  3608  1135  3604  2551  1136
+CONVEX 1239    GT_PK(2,2)      1170  3606  1169  3608  2735  1135
+CONVEX 1240    GT_PK(2,2)      1239  3609  1206  3610  2626  1207
+CONVEX 1241    GT_PK(2,2)      1239  3611  1240  3610  2741  1207
+CONVEX 1242    GT_PK(2,2)      1239  3612  1271  3611  2744  1240
+CONVEX 1243    GT_PK(2,2)      1239  3612  1271  3613  3614  1270
+CONVEX 1244    GT_PK(2,2)      1274  3615  1243  3616  3617  1242
+CONVEX 1245    GT_PK(2,2)      1274  3618  1273  3616  3619  1242
+CONVEX 1246    GT_PK(2,2)      1274  3620  1304  3621  3622  1303
+CONVEX 1247    GT_PK(2,2)      1274  3618  1273  3621  3623  1303
+CONVEX 1248    GT_PK(2,2)      1241  3624  1240  3625  2746  1272
+CONVEX 1249    GT_PK(2,2)      1241  3626  1273  3625  3627  1272
+CONVEX 1250    GT_PK(2,2)      1241  3624  1240  3628  2742  1208
+CONVEX 1251    GT_PK(2,2)      1241  3626  1273  3629  3619  1242
+CONVEX 1252    GT_PK(2,2)      967  3630  1006  3631  3632  968
+CONVEX 1253    GT_PK(2,2)      967  3633  929  3631  2765  968
+CONVEX 1254    GT_PK(2,2)      967  3634  966  3635  2293  928
+CONVEX 1255    GT_PK(2,2)      967  3633  929  3635  3636  928
+CONVEX 1256    GT_PK(2,2)      1082  3637  1083  3638  3639  1119
+CONVEX 1257    GT_PK(2,2)      1082  3637  1083  3640  2752  1045
+CONVEX 1258    GT_PK(2,2)      1044  3641  1081  3642  2761  1043
+CONVEX 1259    GT_PK(2,2)      1044  3643  1006  3644  3645  1045
+CONVEX 1260    GT_PK(2,2)      1044  3646  1082  3644  3640  1045
+CONVEX 1261    GT_PK(2,2)      1044  3646  1082  3641  3647  1081
+CONVEX 1262    GT_PK(2,2)      1117  3648  1116  3649  2384  1080
+CONVEX 1263    GT_PK(2,2)      1117  3650  1081  3649  2762  1080
+CONVEX 1264    GT_PK(2,2)      1117  3648  1116  3651  3204  1152
+CONVEX 1265    GT_PK(2,2)      1117  3652  1153  3651  2409  1152
+CONVEX 1266    GT_PK(2,2)      1005  3653  1004  3654  3655  1043
+CONVEX 1267    GT_PK(2,2)      1005  3656  1044  3654  3642  1043
+CONVEX 1268    GT_PK(2,2)      1005  3656  1044  3657  3643  1006
+CONVEX 1269    GT_PK(2,2)      1005  3658  967  3657  3630  1006
+CONVEX 1270    GT_PK(2,2)      1005  3653  1004  3659  3145  966
+CONVEX 1271    GT_PK(2,2)      1005  3658  967  3659  3634  966
+CONVEX 1272    GT_PK(2,2)      1042  3660  1004  3661  3655  1043
+CONVEX 1273    GT_PK(2,2)      1042  3662  1079  3663  2385  1041
+CONVEX 1274    GT_PK(2,2)      1042  3664  1003  3663  2760  1041
+CONVEX 1275    GT_PK(2,2)      1042  3660  1004  3664  3146  1003
+CONVEX 1276    GT_PK(2,2)      1042  3661  1043  3665  2763  1080
+CONVEX 1277    GT_PK(2,2)      1042  3662  1079  3665  2383  1080
+CONVEX 1278    GT_PK(2,2)      1007  3666  1008  3667  2766  969
+CONVEX 1279    GT_PK(2,2)      1007  3667  969  3668  1957  968
+CONVEX 1280    GT_PK(2,2)      1007  3669  1006  3668  3632  968
+CONVEX 1281    GT_PK(2,2)      1007  3669  1006  3670  3645  1045
+CONVEX 1282    GT_PK(2,2)      1007  3671  1046  3670  2753  1045
+CONVEX 1283    GT_PK(2,2)      1007  3666  1008  3671  3672  1046
+CONVEX 1284    GT_PK(2,2)      1122  3673  1123  3674  3675  1158
+CONVEX 1285    GT_PK(2,2)      1122  3676  1157  3674  2770  1158
+CONVEX 1286    GT_PK(2,2)      973  3677  972  3678  2775  1011
+CONVEX 1287    GT_PK(2,2)      1050  3679  1049  3680  3681  1087
+CONVEX 1288    GT_PK(2,2)      1050  3679  1049  3682  2773  1011
+CONVEX 1289    GT_PK(2,2)      1160  3683  1124  3684  3685  1125
+CONVEX 1290    GT_PK(2,2)      1160  3686  1195  3687  3688  1194
+CONVEX 1291    GT_PK(2,2)      1089  3689  1051  3690  2789  1052
+CONVEX 1292    GT_PK(2,2)      1089  3691  1090  3690  3692  1052
+CONVEX 1293    GT_PK(2,2)      686  3693  646  3694  3695  647
+CONVEX 1294    GT_PK(2,2)      686  3696  687  3694  2950  647
+CONVEX 1295    GT_PK(2,2)      686  3693  646  3697  2813  685
+CONVEX 1296    GT_PK(2,2)      686  3698  726  3699  2933  1
+CONVEX 1297    GT_PK(2,2)      686  3696  687  3698  2946  726
+CONVEX 1298    GT_PK(2,2)      686  3700  725  3699  2930  1
+CONVEX 1299    GT_PK(2,2)      686  3700  725  3697  2796  685
+CONVEX 1300    GT_PK(2,2)      272  3701  307  3702  1991  306
+CONVEX 1301    GT_PK(2,2)      116  3703  91  3704  3705  90
+CONVEX 1302    GT_PK(2,2)      16  3706  30  3707  2818  15
+CONVEX 1303    GT_PK(2,2)      46  3708  27  3709  3081  45
+CONVEX 1304    GT_PK(2,2)      46  3710  28  3708  2825  27
+CONVEX 1305    GT_PK(2,2)      170  3711  201  3712  2237  202
+CONVEX 1306    GT_PK(2,2)      170  3711  201  3713  3104  169
+CONVEX 1307    GT_PK(2,2)      140  3714  139  3715  3716  112
+CONVEX 1308    GT_PK(2,2)      140  3717  113  3715  3110  112
+CONVEX 1309    GT_PK(2,2)      140  3717  113  3718  3111  141
+CONVEX 1310    GT_PK(2,2)      140  3719  170  3718  3720  141
+CONVEX 1311    GT_PK(2,2)      140  3714  139  3721  2245  169
+CONVEX 1312    GT_PK(2,2)      140  3719  170  3721  3713  169
+CONVEX 1313    GT_PK(2,2)      568  3722  528  3723  2833  529
+CONVEX 1314    GT_PK(2,2)      569  3724  570  3725  2808  609
+CONVEX 1315    GT_PK(2,2)      569  3726  608  3725  2945  609
+CONVEX 1316    GT_PK(2,2)      569  3727  568  3726  3728  608
+CONVEX 1317    GT_PK(2,2)      569  3724  570  3729  2810  530
+CONVEX 1318    GT_PK(2,2)      569  3730  529  3729  2852  530
+CONVEX 1319    GT_PK(2,2)      569  3727  568  3730  3723  529
+CONVEX 1320    GT_PK(2,2)      415  3731  414  3732  2909  377
+CONVEX 1321    GT_PK(2,2)      415  3733  378  3734  2914  416
+CONVEX 1322    GT_PK(2,2)      415  3733  378  3732  2911  377
+CONVEX 1323    GT_PK(2,2)      415  3735  454  3734  1988  416
+CONVEX 1324    GT_PK(2,2)      415  3736  453  3735  3737  454
+CONVEX 1325    GT_PK(2,2)      415  3731  414  3736  2848  453
+CONVEX 1326    GT_PK(2,2)      492  3738  531  3739  2811  530
+CONVEX 1327    GT_PK(2,2)      492  3740  491  3739  2851  530
+CONVEX 1328    GT_PK(2,2)      492  3738  531  3741  2961  493
+CONVEX 1329    GT_PK(2,2)      492  3740  491  3742  2855  453
+CONVEX 1330    GT_PK(2,2)      492  3743  454  3741  1990  493
+CONVEX 1331    GT_PK(2,2)      492  3742  453  3743  3737  454
+CONVEX 1332    GT_PK(2,2)      349  3744  314  3745  2206  313
+CONVEX 1333    GT_PK(2,2)      349  3746  348  3745  3747  313
+CONVEX 1334    GT_PK(2,2)      349  3748  385  3746  3749  348
+CONVEX 1335    GT_PK(2,2)      277  3750  311  3751  2861  276
+CONVEX 1336    GT_PK(2,2)      312  3752  348  3753  3747  313
+CONVEX 1337    GT_PK(2,2)      312  3754  277  3755  3750  311
+CONVEX 1338    GT_PK(2,2)      312  3756  347  3752  3757  348
+CONVEX 1339    GT_PK(2,2)      312  3756  347  3755  2875  311
+CONVEX 1340    GT_PK(2,2)      312  3758  278  3753  2205  313
+CONVEX 1341    GT_PK(2,2)      312  3754  277  3758  3759  278
+CONVEX 1342    GT_PK(2,2)      421  3760  460  3761  1981  459
+CONVEX 1343    GT_PK(2,2)      421  3762  420  3761  3763  459
+CONVEX 1344    GT_PK(2,2)      421  3760  460  3764  3765  422
+CONVEX 1345    GT_PK(2,2)      421  3762  420  3766  2869  383
+CONVEX 1346    GT_PK(2,2)      384  3767  347  3768  2873  383
+CONVEX 1347    GT_PK(2,2)      384  3769  421  3770  3764  422
+CONVEX 1348    GT_PK(2,2)      384  3769  421  3768  3766  383
+CONVEX 1349    GT_PK(2,2)      384  3771  385  3770  2857  422
+CONVEX 1350    GT_PK(2,2)      384  3771  385  3772  3749  348
+CONVEX 1351    GT_PK(2,2)      384  3767  347  3772  3757  348
+CONVEX 1352    GT_PK(2,2)      535  3773  575  3774  2993  574
+CONVEX 1353    GT_PK(2,2)      535  3775  536  3773  3776  575
+CONVEX 1354    GT_PK(2,2)      535  3775  536  3777  2989  497
+CONVEX 1355    GT_PK(2,2)      418  3778  417  3779  2001  456
+CONVEX 1356    GT_PK(2,2)      418  3780  457  3779  2886  456
+CONVEX 1357    GT_PK(2,2)      418  3780  457  3781  3782  419
+CONVEX 1358    GT_PK(2,2)      418  3778  417  3783  2005  380
+CONVEX 1359    GT_PK(2,2)      418  3784  381  3781  2871  419
+CONVEX 1360    GT_PK(2,2)      418  3784  381  3783  2905  380
+CONVEX 1361    GT_PK(2,2)      458  3785  497  3786  2883  459
+CONVEX 1362    GT_PK(2,2)      458  3787  457  3788  3782  419
+CONVEX 1363    GT_PK(2,2)      458  3789  420  3788  2872  419
+CONVEX 1364    GT_PK(2,2)      458  3789  420  3786  3763  459
+CONVEX 1365    GT_PK(2,2)      884  3790  844  3791  3792  883
+CONVEX 1366    GT_PK(2,2)      884  3793  924  3794  2300  885
+CONVEX 1367    GT_PK(2,2)      884  3794  885  3795  1738  845
+CONVEX 1368    GT_PK(2,2)      884  3790  844  3795  2935  845
+CONVEX 1369    GT_PK(2,2)      884  3791  883  3796  3797  923
+CONVEX 1370    GT_PK(2,2)      884  3793  924  3796  3798  923
+CONVEX 1371    GT_PK(2,2)      843  3799  844  3800  3792  883
+CONVEX 1372    GT_PK(2,2)      763  3801  802  3802  2936  762
+CONVEX 1373    GT_PK(2,2)      763  3803  723  3804  3529  724
+CONVEX 1374    GT_PK(2,2)      763  3803  723  3802  3526  762
+CONVEX 1375    GT_PK(2,2)      763  3805  764  3804  2800  724
+CONVEX 1376    GT_PK(2,2)      573  3806  613  3807  2996  574
+CONVEX 1377    GT_PK(2,2)      573  3808  572  3809  2958  533
+CONVEX 1378    GT_PK(2,2)      848  3810  808  3811  2967  847
+CONVEX 1379    GT_PK(2,2)      848  3812  887  3813  2297  888
+CONVEX 1380    GT_PK(2,2)      848  3812  887  3811  3152  847
+CONVEX 1381    GT_PK(2,2)      692  3814  652  3815  2953  653
+CONVEX 1382    GT_PK(2,2)      692  3816  691  3814  3817  652
+CONVEX 1383    GT_PK(2,2)      612  3818  613  3819  2951  652
+CONVEX 1384    GT_PK(2,2)      612  3820  573  3818  3806  613
+CONVEX 1385    GT_PK(2,2)      612  3821  611  3822  2984  572
+CONVEX 1386    GT_PK(2,2)      612  3820  573  3822  3808  572
+CONVEX 1387    GT_PK(2,2)      651  3823  612  3824  3821  611
+CONVEX 1388    GT_PK(2,2)      651  3823  612  3825  3819  652
+CONVEX 1389    GT_PK(2,2)      651  3826  691  3825  3817  652
+CONVEX 1390    GT_PK(2,2)      651  3826  691  3827  2980  690
+CONVEX 1391    GT_PK(2,2)      650  3828  689  3829  2976  649
+CONVEX 1392    GT_PK(2,2)      650  3830  610  3829  1968  649
+CONVEX 1393    GT_PK(2,2)      650  3831  611  3830  2983  610
+CONVEX 1394    GT_PK(2,2)      650  3832  651  3831  3824  611
+CONVEX 1395    GT_PK(2,2)      650  3828  689  3833  2979  690
+CONVEX 1396    GT_PK(2,2)      650  3832  651  3833  3827  690
+CONVEX 1397    GT_PK(2,2)      815  3834  854  3835  2986  855
+CONVEX 1398    GT_PK(2,2)      893  3836  894  3837  3838  933
+CONVEX 1399    GT_PK(2,2)      893  3839  854  3836  2985  894
+CONVEX 1400    GT_PK(2,2)      893  3840  932  3837  1951  933
+CONVEX 1401    GT_PK(2,2)      893  3841  853  3839  3842  854
+CONVEX 1402    GT_PK(2,2)      812  3843  813  3844  2999  773
+CONVEX 1403    GT_PK(2,2)      889  3845  888  3846  2295  928
+CONVEX 1404    GT_PK(2,2)      889  3847  929  3846  3636  928
+CONVEX 1405    GT_PK(2,2)      695  3848  694  3849  3850  655
+CONVEX 1406    GT_PK(2,2)      770  3851  769  3852  2970  730
+CONVEX 1407    GT_PK(2,2)      615  3853  614  3854  2991  575
+CONVEX 1408    GT_PK(2,2)      548  3855  549  3856  3004  509
+CONVEX 1409    GT_PK(2,2)      548  3857  589  3858  2029  588
+CONVEX 1410    GT_PK(2,2)      548  3855  549  3857  3859  589
+CONVEX 1411    GT_PK(2,2)      434  3860  395  3861  2088  396
+CONVEX 1412    GT_PK(2,2)      434  3862  433  3860  3006  395
+CONVEX 1413    GT_PK(2,2)      434  3863  472  3864  3865  473
+CONVEX 1414    GT_PK(2,2)      434  3863  472  3862  3866  433
+CONVEX 1415    GT_PK(2,2)      442  3867  404  3868  3013  443
+CONVEX 1416    GT_PK(2,2)      442  3867  404  3869  3008  403
+CONVEX 1417    GT_PK(2,2)      643  3870  683  3871  2673  682
+CONVEX 1418    GT_PK(2,2)      643  3872  642  3871  3016  682
+CONVEX 1419    GT_PK(2,2)      643  3872  642  3873  3874  603
+CONVEX 1420    GT_PK(2,2)      643  3875  644  3870  3020  683
+CONVEX 1421    GT_PK(2,2)      602  3876  642  3877  3874  603
+CONVEX 1422    GT_PK(2,2)      602  3878  562  3879  2053  601
+CONVEX 1423    GT_PK(2,2)      602  3879  601  3880  2049  641
+CONVEX 1424    GT_PK(2,2)      602  3876  642  3880  3017  641
+CONVEX 1425    GT_PK(2,2)      602  3878  562  3881  2058  563
+CONVEX 1426    GT_PK(2,2)      602  3877  603  3881  3882  563
+CONVEX 1427    GT_PK(2,2)      565  3883  526  3884  3885  525
+CONVEX 1428    GT_PK(2,2)      488  3886  489  3887  2840  527
+CONVEX 1429    GT_PK(2,2)      488  3888  526  3887  3889  527
+CONVEX 1430    GT_PK(2,2)      486  3890  524  3891  3892  525
+CONVEX 1431    GT_PK(2,2)      444  3893  482  3894  3895  443
+CONVEX 1432    GT_PK(2,2)      444  3894  443  3896  3014  405
+CONVEX 1433    GT_PK(2,2)      483  3897  482  3898  3026  521
+CONVEX 1434    GT_PK(2,2)      483  3898  521  3899  2059  522
+CONVEX 1435    GT_PK(2,2)      483  3900  484  3899  3023  522
+CONVEX 1436    GT_PK(2,2)      483  3900  484  3901  3902  445
+CONVEX 1437    GT_PK(2,2)      483  3903  444  3901  3904  445
+CONVEX 1438    GT_PK(2,2)      483  3903  444  3897  3893  482
+CONVEX 1439    GT_PK(2,2)      519  3905  559  3906  2661  520
+CONVEX 1440    GT_PK(2,2)      519  3907  558  3905  3030  559
+CONVEX 1441    GT_PK(2,2)      519  3908  518  3909  3910  480
+CONVEX 1442    GT_PK(2,2)      519  3908  518  3907  3376  558
+CONVEX 1443    GT_PK(2,2)      288  3911  287  3912  2120  253
+CONVEX 1444    GT_PK(2,2)      288  3913  323  3911  3048  287
+CONVEX 1445    GT_PK(2,2)      288  3914  254  3912  2115  253
+CONVEX 1446    GT_PK(2,2)      288  3914  254  3915  2118  289
+CONVEX 1447    GT_PK(2,2)      244  3916  212  3917  3057  245
+CONVEX 1448    GT_PK(2,2)      244  3918  211  3916  3062  212
+CONVEX 1449    GT_PK(2,2)      244  3919  278  3917  2203  245
+CONVEX 1450    GT_PK(2,2)      244  3920  277  3919  3759  278
+CONVEX 1451    GT_PK(2,2)      150  3921  180  3922  3060  151
+CONVEX 1452    GT_PK(2,2)      150  3923  122  3924  3925  149
+CONVEX 1453    GT_PK(2,2)      121  3926  122  3927  3928  96
+CONVEX 1454    GT_PK(2,2)      121  3926  122  3929  3925  149
+CONVEX 1455    GT_PK(2,2)      97  3930  122  3931  3928  96
+CONVEX 1456    GT_PK(2,2)      97  3932  73  3931  3933  96
+CONVEX 1457    GT_PK(2,2)      97  3934  74  3932  3066  73
+CONVEX 1458    GT_PK(2,2)      97  3934  74  3935  3067  98
+CONVEX 1459    GT_PK(2,2)      93  3936  69  3937  3938  92
+CONVEX 1460    GT_PK(2,2)      51  3939  73  3940  2183  33
+CONVEX 1461    GT_PK(2,2)      51  3941  32  3940  3942  33
+CONVEX 1462    GT_PK(2,2)      226  3943  225  3944  1474  259
+CONVEX 1463    GT_PK(2,2)      226  3945  193  3943  3092  225
+CONVEX 1464    GT_PK(2,2)      294  3946  259  3947  1449  293
+CONVEX 1465    GT_PK(2,2)      294  3948  329  3947  2044  293
+CONVEX 1466    GT_PK(2,2)      294  3948  329  3949  2041  330
+CONVEX 1467    GT_PK(2,2)      294  3950  295  3949  3951  330
+CONVEX 1468    GT_PK(2,2)      331  3952  367  3953  2046  330
+CONVEX 1469    GT_PK(2,2)      331  3954  295  3953  3951  330
+CONVEX 1470    GT_PK(2,2)      134  3955  107  3956  3088  106
+CONVEX 1471    GT_PK(2,2)      134  3957  163  3958  3959  164
+CONVEX 1472    GT_PK(2,2)      195  3960  196  3961  3962  164
+CONVEX 1473    GT_PK(2,2)      195  3963  163  3961  3959  164
+CONVEX 1474    GT_PK(2,2)      232  3964  200  3965  3105  233
+CONVEX 1475    GT_PK(2,2)      111  3966  139  3967  3716  112
+CONVEX 1476    GT_PK(2,2)      111  3968  86  3967  3107  112
+CONVEX 1477    GT_PK(2,2)      63  3969  86  3970  3106  87
+CONVEX 1478    GT_PK(2,2)      63  3970  87  3971  2242  64
+CONVEX 1479    GT_PK(2,2)      63  3972  42  3973  2256  41
+CONVEX 1480    GT_PK(2,2)      63  3972  42  3971  2258  64
+CONVEX 1481    GT_PK(2,2)      62  3974  40  3975  3119  61
+CONVEX 1482    GT_PK(2,2)      62  3976  63  3977  3969  86
+CONVEX 1483    GT_PK(2,2)      62  3974  40  3978  3118  41
+CONVEX 1484    GT_PK(2,2)      62  3976  63  3978  3973  41
+CONVEX 1485    GT_PK(2,2)      38  3979  59  3980  3123  37
+CONVEX 1486    GT_PK(2,2)      38  3980  37  3981  2235  19
+CONVEX 1487    GT_PK(2,2)      38  3982  39  3983  2261  20
+CONVEX 1488    GT_PK(2,2)      38  3983  20  3984  1496  5
+CONVEX 1489    GT_PK(2,2)      38  3981  19  3984  3985  5
+CONVEX 1490    GT_PK(2,2)      83  3986  59  3987  3122  82
+CONVEX 1491    GT_PK(2,2)      83  3988  108  3987  3125  82
+CONVEX 1492    GT_PK(2,2)      83  3988  108  3989  3990  109
+CONVEX 1493    GT_PK(2,2)      165  3991  196  3992  3962  164
+CONVEX 1494    GT_PK(2,2)      1338  3993  1364  3994  3127  1339
+CONVEX 1495    GT_PK(2,2)      1338  3995  1337  3996  2272  1310
+CONVEX 1496    GT_PK(2,2)      1338  3997  1311  3994  2404  1339
+CONVEX 1497    GT_PK(2,2)      1338  3997  1311  3996  3224  1310
+CONVEX 1498    GT_PK(2,2)      1388  3998  1364  3999  4000  1387
+CONVEX 1499    GT_PK(2,2)      1388  3999  1387  4001  2267  1409
+CONVEX 1500    GT_PK(2,2)      1388  4002  1410  4001  2353  1409
+CONVEX 1501    GT_PK(2,2)      1388  3998  1364  4003  3126  1365
+CONVEX 1502    GT_PK(2,2)      1363  4004  1362  4005  2279  1337
+CONVEX 1503    GT_PK(2,2)      1363  4006  1338  4005  3995  1337
+CONVEX 1504    GT_PK(2,2)      1363  4006  1338  4007  3993  1364
+CONVEX 1505    GT_PK(2,2)      1363  4007  1364  4008  4000  1387
+CONVEX 1506    GT_PK(2,2)      1363  4008  1387  4009  2268  1386
+CONVEX 1507    GT_PK(2,2)      1363  4004  1362  4009  2276  1386
+CONVEX 1508    GT_PK(2,2)      1109  4010  1144  4011  3547  1145
+CONVEX 1509    GT_PK(2,2)      1109  4010  1144  4012  4013  1108
+CONVEX 1510    GT_PK(2,2)      1037  4014  1038  4015  3139  1075
+CONVEX 1511    GT_PK(2,2)      1037  4016  1074  4015  4017  1075
+CONVEX 1512    GT_PK(2,2)      962  4018  1000  4019  2283  1001
+CONVEX 1513    GT_PK(2,2)      962  4020  963  4019  3131  1001
+CONVEX 1514    GT_PK(2,2)      962  4021  924  4022  3798  923
+CONVEX 1515    GT_PK(2,2)      962  4020  963  4021  3134  924
+CONVEX 1516    GT_PK(2,2)      926  4023  886  4024  3147  925
+CONVEX 1517    GT_PK(2,2)      926  4024  925  4025  3133  964
+CONVEX 1518    GT_PK(2,2)      926  4026  927  4027  2296  887
+CONVEX 1519    GT_PK(2,2)      926  4023  886  4027  3151  887
+CONVEX 1520    GT_PK(2,2)      926  4028  965  4025  3143  964
+CONVEX 1521    GT_PK(2,2)      926  4028  965  4026  3140  927
+CONVEX 1522    GT_PK(2,2)      1349  4029  1374  4030  3164  1348
+CONVEX 1523    GT_PK(2,2)      1349  4031  1321  4030  3170  1348
+CONVEX 1524    GT_PK(2,2)      1349  4029  1374  4032  4033  1350
+CONVEX 1525    GT_PK(2,2)      1191  4034  1157  4035  2769  1192
+CONVEX 1526    GT_PK(2,2)      1191  4036  1190  4037  3244  1156
+CONVEX 1527    GT_PK(2,2)      1191  4034  1157  4037  4038  1156
+CONVEX 1528    GT_PK(2,2)      1292  4039  1261  4040  3189  1293
+CONVEX 1529    GT_PK(2,2)      1292  4041  1321  4042  3172  1291
+CONVEX 1530    GT_PK(2,2)      1226  4043  1259  4044  4045  1258
+CONVEX 1531    GT_PK(2,2)      1226  4046  1193  4047  1740  1192
+CONVEX 1532    GT_PK(2,2)      1260  4048  1292  4049  4039  1261
+CONVEX 1533    GT_PK(2,2)      1260  4050  1259  4051  4052  1291
+CONVEX 1534    GT_PK(2,2)      1260  4048  1292  4051  4042  1291
+CONVEX 1535    GT_PK(2,2)      1114  4053  1077  4054  3198  1078
+CONVEX 1536    GT_PK(2,2)      1114  4053  1077  4055  3195  1113
+CONVEX 1537    GT_PK(2,2)      1114  4054  1078  4056  2380  1115
+CONVEX 1538    GT_PK(2,2)      1114  4057  1150  4056  3206  1115
+CONVEX 1539    GT_PK(2,2)      1114  4055  1113  4058  2373  1149
+CONVEX 1540    GT_PK(2,2)      1114  4057  1150  4058  2377  1149
+CONVEX 1541    GT_PK(2,2)      1283  4059  1251  4060  3213  1282
+CONVEX 1542    GT_PK(2,2)      1283  4061  1313  4062  4063  1284
+CONVEX 1543    GT_PK(2,2)      1283  4064  1252  4062  2402  1284
+CONVEX 1544    GT_PK(2,2)      1283  4059  1251  4064  3218  1252
+CONVEX 1545    GT_PK(2,2)      1283  4060  1282  4065  2407  1312
+CONVEX 1546    GT_PK(2,2)      1283  4061  1313  4065  4066  1312
+CONVEX 1547    GT_PK(2,2)      1340  4067  1366  4068  3232  1341
+CONVEX 1548    GT_PK(2,2)      1340  4069  1313  4070  4066  1312
+CONVEX 1549    GT_PK(2,2)      1340  4069  1313  4068  4071  1341
+CONVEX 1550    GT_PK(2,2)      1340  4070  1312  4072  2405  1339
+CONVEX 1551    GT_PK(2,2)      1340  4073  1365  4072  3128  1339
+CONVEX 1552    GT_PK(2,2)      1340  4067  1366  4073  4074  1365
+CONVEX 1553    GT_PK(2,2)      1315  4075  1342  4076  3234  1343
+CONVEX 1554    GT_PK(2,2)      1315  4077  1286  4078  3160  1285
+CONVEX 1555    GT_PK(2,2)      1315  4077  1286  4079  4080  1316
+CONVEX 1556    GT_PK(2,2)      1315  4076  1343  4079  2342  1316
+CONVEX 1557    GT_PK(2,2)      1120  4081  1155  4082  3238  1119
+CONVEX 1558    GT_PK(2,2)      1120  4081  1155  4083  3243  1156
+CONVEX 1559    GT_PK(2,2)      1120  4084  1083  4082  3639  1119
+CONVEX 1560    GT_PK(2,2)      626  4085  665  4086  3258  625
+CONVEX 1561    GT_PK(2,2)      626  4087  666  4085  3251  665
+CONVEX 1562    GT_PK(2,2)      626  4088  587  4086  2428  625
+CONVEX 1563    GT_PK(2,2)      703  4089  704  4090  1775  744
+CONVEX 1564    GT_PK(2,2)      703  4091  664  4089  3254  704
+CONVEX 1565    GT_PK(2,2)      703  4092  743  4090  1529  744
+CONVEX 1566    GT_PK(2,2)      703  4091  664  4093  3256  663
+CONVEX 1567    GT_PK(2,2)      703  4094  702  4093  3296  663
+CONVEX 1568    GT_PK(2,2)      703  4094  702  4092  3297  743
+CONVEX 1569    GT_PK(2,2)      503  4095  504  4096  4097  465
+CONVEX 1570    GT_PK(2,2)      503  4095  504  4098  3283  542
+CONVEX 1571    GT_PK(2,2)      499  4099  460  4100  1982  498
+CONVEX 1572    GT_PK(2,2)      466  4101  504  4102  4097  465
+CONVEX 1573    GT_PK(2,2)      466  4103  428  4104  1556  467
+CONVEX 1574    GT_PK(2,2)      466  4105  505  4104  3264  467
+CONVEX 1575    GT_PK(2,2)      466  4101  504  4105  3279  505
+CONVEX 1576    GT_PK(2,2)      466  4106  427  4102  4107  465
+CONVEX 1577    GT_PK(2,2)      466  4106  427  4103  2507  428
+CONVEX 1578    GT_PK(2,2)      660  4108  661  4109  4110  700
+CONVEX 1579    GT_PK(2,2)      660  4111  621  4108  3305  661
+CONVEX 1580    GT_PK(2,2)      701  4112  702  4113  3294  741
+CONVEX 1581    GT_PK(2,2)      701  4112  702  4114  3295  662
+CONVEX 1582    GT_PK(2,2)      701  4114  662  4115  3301  661
+CONVEX 1583    GT_PK(2,2)      701  4115  661  4116  4110  700
+CONVEX 1584    GT_PK(2,2)      701  4117  740  4116  3269  700
+CONVEX 1585    GT_PK(2,2)      701  4117  740  4113  3268  741
+CONVEX 1586    GT_PK(2,2)      583  4118  584  4119  3290  623
+CONVEX 1587    GT_PK(2,2)      583  4120  622  4119  3299  623
+CONVEX 1588    GT_PK(2,2)      583  4118  584  4121  3292  544
+CONVEX 1589    GT_PK(2,2)      583  4121  544  4122  3284  543
+CONVEX 1590    GT_PK(2,2)      583  4122  543  4123  3281  582
+CONVEX 1591    GT_PK(2,2)      583  4120  622  4123  3303  582
+CONVEX 1592    GT_PK(2,2)      1091  4124  1054  4125  3322  1092
+CONVEX 1593    GT_PK(2,2)      1091  4126  1127  4127  4128  1090
+CONVEX 1594    GT_PK(2,2)      1053  4129  1014  4130  2783  1052
+CONVEX 1595    GT_PK(2,2)      1053  4131  1090  4130  3692  1052
+CONVEX 1596    GT_PK(2,2)      1053  4129  1014  4132  2787  1015
+CONVEX 1597    GT_PK(2,2)      1053  4133  1054  4132  3342  1015
+CONVEX 1598    GT_PK(2,2)      1053  4134  1091  4131  4127  1090
+CONVEX 1599    GT_PK(2,2)      1053  4134  1091  4133  4124  1054
+CONVEX 1600    GT_PK(2,2)      425  4135  388  4136  3358  387
+CONVEX 1601    GT_PK(2,2)      389  4137  427  4138  2508  390
+CONVEX 1602    GT_PK(2,2)      389  4139  388  4140  3356  352
+CONVEX 1603    GT_PK(2,2)      389  4141  353  4138  2518  390
+CONVEX 1604    GT_PK(2,2)      389  4141  353  4140  2516  352
+CONVEX 1605    GT_PK(2,2)      350  4142  314  4143  1701  315
+CONVEX 1606    GT_PK(2,2)      350  4144  351  4143  3354  315
+CONVEX 1607    GT_PK(2,2)      350  4145  349  4142  3744  314
+CONVEX 1608    GT_PK(2,2)      350  4144  351  4146  3357  387
+CONVEX 1609    GT_PK(2,2)      877  4147  838  4148  2520  878
+CONVEX 1610    GT_PK(2,2)      877  4149  837  4147  3362  838
+CONVEX 1611    GT_PK(2,2)      800  4150  799  4151  3365  839
+CONVEX 1612    GT_PK(2,2)      800  4152  761  4153  2668  801
+CONVEX 1613    GT_PK(2,2)      800  4152  761  4154  1919  760
+CONVEX 1614    GT_PK(2,2)      800  4150  799  4154  3368  760
+CONVEX 1615    GT_PK(2,2)      676  4155  637  4156  3370  636
+CONVEX 1616    GT_PK(2,2)      676  4156  636  4157  4158  675
+CONVEX 1617    GT_PK(2,2)      676  4159  715  4157  2538  675
+CONVEX 1618    GT_PK(2,2)      676  4159  715  4160  3517  716
+CONVEX 1619    GT_PK(2,2)      676  4161  677  4160  1888  716
+CONVEX 1620    GT_PK(2,2)      676  4155  637  4161  3373  677
+CONVEX 1621    GT_PK(2,2)      479  4162  518  4163  3374  517
+CONVEX 1622    GT_PK(2,2)      479  4163  517  4164  2528  478
+CONVEX 1623    GT_PK(2,2)      479  4165  440  4164  3037  478
+CONVEX 1624    GT_PK(2,2)      479  4162  518  4166  3910  480
+CONVEX 1625    GT_PK(2,2)      515  4167  516  4168  2526  477
+CONVEX 1626    GT_PK(2,2)      475  4169  436  4170  3035  437
+CONVEX 1627    GT_PK(2,2)      511  4171  472  4172  4173  510
+CONVEX 1628    GT_PK(2,2)      511  4171  472  4174  3865  473
+CONVEX 1629    GT_PK(2,2)      550  4175  549  4176  3859  589
+CONVEX 1630    GT_PK(2,2)      550  4175  549  4177  3003  510
+CONVEX 1631    GT_PK(2,2)      550  4178  511  4177  4172  510
+CONVEX 1632    GT_PK(2,2)      635  4179  636  4180  4158  675
+CONVEX 1633    GT_PK(2,2)      635  4181  596  4179  2534  636
+CONVEX 1634    GT_PK(2,2)      673  4182  713  4183  3432  712
+CONVEX 1635    GT_PK(2,2)      593  4184  592  4185  4186  632
+CONVEX 1636    GT_PK(2,2)      593  4184  592  4187  4188  553
+CONVEX 1637    GT_PK(2,2)      709  4189  749  4190  4191  710
+CONVEX 1638    GT_PK(2,2)      709  4189  749  4192  3411  708
+CONVEX 1639    GT_PK(2,2)      709  4190  710  4193  3379  670
+CONVEX 1640    GT_PK(2,2)      709  4192  708  4193  3395  670
+CONVEX 1641    GT_PK(2,2)      905  4194  865  4195  3403  904
+CONVEX 1642    GT_PK(2,2)      905  4196  943  4195  4197  904
+CONVEX 1643    GT_PK(2,2)      827  4198  787  4199  3407  788
+CONVEX 1644    GT_PK(2,2)      827  4198  787  4200  2546  826
+CONVEX 1645    GT_PK(2,2)      866  4201  867  4202  4203  906
+CONVEX 1646    GT_PK(2,2)      866  4204  905  4202  4205  906
+CONVEX 1647    GT_PK(2,2)      866  4204  905  4206  4194  865
+CONVEX 1648    GT_PK(2,2)      866  4207  827  4201  4208  867
+CONVEX 1649    GT_PK(2,2)      866  4206  865  4209  3402  826
+CONVEX 1650    GT_PK(2,2)      866  4207  827  4209  4200  826
+CONVEX 1651    GT_PK(2,2)      832  4210  831  4211  3439  792
+CONVEX 1652    GT_PK(2,2)      832  4211  792  4212  3387  793
+CONVEX 1653    GT_PK(2,2)      832  4213  833  4212  3507  793
+CONVEX 1654    GT_PK(2,2)      832  4213  833  4214  3504  872
+CONVEX 1655    GT_PK(2,2)      830  4215  831  4216  3440  791
+CONVEX 1656    GT_PK(2,2)      828  4217  867  4218  4219  868
+CONVEX 1657    GT_PK(2,2)      828  4220  789  4221  3442  788
+CONVEX 1658    GT_PK(2,2)      828  4222  827  4221  4199  788
+CONVEX 1659    GT_PK(2,2)      828  4222  827  4217  4208  867
+CONVEX 1660    GT_PK(2,2)      986  4223  1025  4224  3448  1024
+CONVEX 1661    GT_PK(2,2)      986  4225  985  4224  2602  1024
+CONVEX 1662    GT_PK(2,2)      986  4226  947  4227  3457  948
+CONVEX 1663    GT_PK(2,2)      986  4226  947  4225  4228  985
+CONVEX 1664    GT_PK(2,2)      907  4229  867  4230  4219  868
+CONVEX 1665    GT_PK(2,2)      907  4229  867  4231  4203  906
+CONVEX 1666    GT_PK(2,2)      907  4232  945  4231  4233  906
+CONVEX 1667    GT_PK(2,2)      990  4234  991  4235  3460  1029
+CONVEX 1668    GT_PK(2,2)      990  4235  1029  4236  3429  1028
+CONVEX 1669    GT_PK(2,2)      990  4237  989  4236  2619  1028
+CONVEX 1670    GT_PK(2,2)      990  4238  951  4237  3485  989
+CONVEX 1671    GT_PK(2,2)      990  4234  991  4239  3476  952
+CONVEX 1672    GT_PK(2,2)      990  4238  951  4239  3489  952
+CONVEX 1673    GT_PK(2,2)      1072  4240  1073  4241  4242  1035
+CONVEX 1674    GT_PK(2,2)      1072  4243  1109  4244  4012  1108
+CONVEX 1675    GT_PK(2,2)      1072  4243  1109  4240  4245  1073
+CONVEX 1676    GT_PK(2,2)      994  4246  993  4247  3471  1032
+CONVEX 1677    GT_PK(2,2)      994  4248  1033  4247  3463  1032
+CONVEX 1678    GT_PK(2,2)      994  4246  993  4249  4250  955
+CONVEX 1679    GT_PK(2,2)      994  4251  956  4249  4252  955
+CONVEX 1680    GT_PK(2,2)      954  4253  953  4254  3478  915
+CONVEX 1681    GT_PK(2,2)      954  4255  993  4256  4250  955
+CONVEX 1682    GT_PK(2,2)      954  4255  993  4257  3469  992
+CONVEX 1683    GT_PK(2,2)      954  4253  953  4257  3477  992
+CONVEX 1684    GT_PK(2,2)      954  4258  916  4256  4259  955
+CONVEX 1685    GT_PK(2,2)      954  4258  916  4254  4260  915
+CONVEX 1686    GT_PK(2,2)      1238  4261  1269  4262  2722  1237
+CONVEX 1687    GT_PK(2,2)      1238  4263  1205  4262  3491  1237
+CONVEX 1688    GT_PK(2,2)      1238  4261  1269  4264  2726  1270
+CONVEX 1689    GT_PK(2,2)      1238  4265  1239  4264  3613  1270
+CONVEX 1690    GT_PK(2,2)      1238  4263  1205  4266  3583  1206
+CONVEX 1691    GT_PK(2,2)      1238  4265  1239  4266  3609  1206
+CONVEX 1692    GT_PK(2,2)      1210  4267  1243  4268  2748  1211
+CONVEX 1693    GT_PK(2,2)      1210  4267  1243  4269  3617  1242
+CONVEX 1694    GT_PK(2,2)      795  4270  834  4271  3510  835
+CONVEX 1695    GT_PK(2,2)      795  4272  755  4273  3518  756
+CONVEX 1696    GT_PK(2,2)      795  4270  834  4274  3512  794
+CONVEX 1697    GT_PK(2,2)      795  4272  755  4274  3515  794
+CONVEX 1698    GT_PK(2,2)      795  4275  796  4273  1889  756
+CONVEX 1699    GT_PK(2,2)      795  4275  796  4271  1895  835
+CONVEX 1700    GT_PK(2,2)      1403  4276  1404  4277  2681  1422
+CONVEX 1701    GT_PK(2,2)      1403  4278  1402  4279  4280  1381
+CONVEX 1702    GT_PK(2,2)      1333  4281  1334  4282  3570  1306
+CONVEX 1703    GT_PK(2,2)      1333  4283  1305  4282  4284  1306
+CONVEX 1704    GT_PK(2,2)      1296  4285  1324  4286  4287  1297
+CONVEX 1705    GT_PK(2,2)      1296  4288  1267  4289  3596  1266
+CONVEX 1706    GT_PK(2,2)      1296  4288  1267  4286  2737  1297
+CONVEX 1707    GT_PK(2,2)      1325  4290  1324  4291  4292  1351
+CONVEX 1708    GT_PK(2,2)      1325  4293  1326  4294  3573  1298
+CONVEX 1709    GT_PK(2,2)      1325  4293  1326  4291  3577  1351
+CONVEX 1710    GT_PK(2,2)      1325  4294  1298  4295  2717  1297
+CONVEX 1711    GT_PK(2,2)      1325  4290  1324  4295  4287  1297
+CONVEX 1712    GT_PK(2,2)      1398  4296  1353  4297  4298  1376
+CONVEX 1713    GT_PK(2,2)      1146  4299  1147  4300  2708  1181
+CONVEX 1714    GT_PK(2,2)      1146  4301  1180  4300  3542  1181
+CONVEX 1715    GT_PK(2,2)      1146  4301  1180  4302  3544  1145
+CONVEX 1716    GT_PK(2,2)      1276  4303  1305  4304  4284  1306
+CONVEX 1717    GT_PK(2,2)      1276  4305  1277  4304  3568  1306
+CONVEX 1718    GT_PK(2,2)      1276  4305  1277  4306  3555  1245
+CONVEX 1719    GT_PK(2,2)      1276  4306  1245  4307  2701  1244
+CONVEX 1720    GT_PK(2,2)      1352  4308  1326  4309  3574  1327
+CONVEX 1721    GT_PK(2,2)      1352  4308  1326  4310  3576  1375
+CONVEX 1722    GT_PK(2,2)      1352  4311  1353  4309  4312  1327
+CONVEX 1723    GT_PK(2,2)      1352  4310  1375  4313  4314  1376
+CONVEX 1724    GT_PK(2,2)      1352  4311  1353  4313  4298  1376
+CONVEX 1725    GT_PK(2,2)      1202  4315  1203  4316  3607  1169
+CONVEX 1726    GT_PK(2,2)      1202  4316  1169  4317  2734  1168
+CONVEX 1727    GT_PK(2,2)      1202  4318  1235  4319  3599  1234
+CONVEX 1728    GT_PK(2,2)      1202  4318  1235  4315  3601  1203
+CONVEX 1729    GT_PK(2,2)      1202  4320  1201  4319  1863  1234
+CONVEX 1730    GT_PK(2,2)      1202  4320  1201  4317  2572  1168
+CONVEX 1731    GT_PK(2,2)      1275  4321  1274  4322  3620  1304
+CONVEX 1732    GT_PK(2,2)      1275  4321  1274  4323  3615  1243
+CONVEX 1733    GT_PK(2,2)      1275  4324  1305  4322  4325  1304
+CONVEX 1734    GT_PK(2,2)      1275  4326  1276  4324  4303  1305
+CONVEX 1735    GT_PK(2,2)      1275  4323  1243  4327  2747  1244
+CONVEX 1736    GT_PK(2,2)      1275  4326  1276  4327  4307  1244
+CONVEX 1737    GT_PK(2,2)      1118  4328  1082  4329  3647  1081
+CONVEX 1738    GT_PK(2,2)      1118  4330  1117  4329  3650  1081
+CONVEX 1739    GT_PK(2,2)      1118  4328  1082  4331  3638  1119
+CONVEX 1740    GT_PK(2,2)      1118  4330  1117  4332  3652  1153
+CONVEX 1741    GT_PK(2,2)      1118  4333  1154  4331  3239  1119
+CONVEX 1742    GT_PK(2,2)      1118  4333  1154  4332  2414  1153
+CONVEX 1743    GT_PK(2,2)      1086  4334  1123  4335  2792  1087
+CONVEX 1744    GT_PK(2,2)      1086  4336  1122  4334  3673  1123
+CONVEX 1745    GT_PK(2,2)      1086  4337  1049  4335  3681  1087
+CONVEX 1746    GT_PK(2,2)      1121  4338  1157  4339  4038  1156
+CONVEX 1747    GT_PK(2,2)      1121  4340  1122  4338  3676  1157
+CONVEX 1748    GT_PK(2,2)      1121  4341  1120  4339  4083  1156
+CONVEX 1749    GT_PK(2,2)      935  4342  973  4343  4344  974
+CONVEX 1750    GT_PK(2,2)      935  4345  895  4346  3328  896
+CONVEX 1751    GT_PK(2,2)      935  4347  936  4346  1797  896
+CONVEX 1752    GT_PK(2,2)      935  4343  974  4347  2778  936
+CONVEX 1753    GT_PK(2,2)      934  4348  895  4349  1959  894
+CONVEX 1754    GT_PK(2,2)      934  4350  973  4351  3677  972
+CONVEX 1755    GT_PK(2,2)      934  4352  935  4348  4345  895
+CONVEX 1756    GT_PK(2,2)      934  4352  935  4350  4342  973
+CONVEX 1757    GT_PK(2,2)      934  4349  894  4353  3838  933
+CONVEX 1758    GT_PK(2,2)      934  4351  972  4353  2750  933
+CONVEX 1759    GT_PK(2,2)      1012  4354  1051  4355  2788  1013
+CONVEX 1760    GT_PK(2,2)      1012  4356  974  4355  2780  1013
+CONVEX 1761    GT_PK(2,2)      1012  4357  973  4356  4344  974
+CONVEX 1762    GT_PK(2,2)      1012  4357  973  4358  3678  1011
+CONVEX 1763    GT_PK(2,2)      1012  4359  1050  4358  3682  1011
+CONVEX 1764    GT_PK(2,2)      1012  4359  1050  4354  4360  1051
+CONVEX 1765    GT_PK(2,2)      1159  4361  1160  4362  3683  1124
+CONVEX 1766    GT_PK(2,2)      1159  4363  1193  4364  1741  1158
+CONVEX 1767    GT_PK(2,2)      1159  4365  1194  4363  4366  1193
+CONVEX 1768    GT_PK(2,2)      1159  4361  1160  4365  3687  1194
+CONVEX 1769    GT_PK(2,2)      1159  4367  1123  4364  3675  1158
+CONVEX 1770    GT_PK(2,2)      1159  4362  1124  4367  2790  1123
+CONVEX 1771    GT_PK(2,2)      1088  4368  1124  4369  3685  1125
+CONVEX 1772    GT_PK(2,2)      1088  4370  1089  4369  4371  1125
+CONVEX 1773    GT_PK(2,2)      1088  4368  1124  4372  2791  1087
+CONVEX 1774    GT_PK(2,2)      1088  4370  1089  4373  3689  1051
+CONVEX 1775    GT_PK(2,2)      1088  4374  1050  4372  3680  1087
+CONVEX 1776    GT_PK(2,2)      1088  4374  1050  4373  4360  1051
+CONVEX 1777    GT_PK(2,2)      1128  4375  1127  4376  4377  1163
+CONVEX 1778    GT_PK(2,2)      1128  4378  1092  4379  3308  1129
+CONVEX 1779    GT_PK(2,2)      1128  4380  1091  4378  4125  1092
+CONVEX 1780    GT_PK(2,2)      1128  4380  1091  4375  4126  1127
+CONVEX 1781    GT_PK(2,2)      1128  4381  1164  4379  1542  1129
+CONVEX 1782    GT_PK(2,2)      1128  4376  1163  4381  2793  1164
+CONVEX 1783    GT_PK(2,2)      1161  4382  1160  4383  3684  1125
+CONVEX 1784    GT_PK(2,2)      1161  4384  1195  4385  3185  1196
+CONVEX 1785    GT_PK(2,2)      1161  4382  1160  4384  3686  1195
+CONVEX 1786    GT_PK(2,2)      1162  4386  1163  4387  2795  1197
+CONVEX 1787    GT_PK(2,2)      1162  4388  1127  4386  4377  1163
+CONVEX 1788    GT_PK(2,2)      1162  4387  1197  4389  1964  1196
+CONVEX 1789    GT_PK(2,2)      1162  4390  1161  4389  4385  1196
+CONVEX 1790    GT_PK(2,2)      271  4391  305  4392  2917  306
+CONVEX 1791    GT_PK(2,2)      271  4393  272  4392  3702  306
+CONVEX 1792    GT_PK(2,2)      240  4394  241  4395  1972  274
+CONVEX 1793    GT_PK(2,2)      273  4396  307  4397  2009  308
+CONVEX 1794    GT_PK(2,2)      273  4398  272  4396  3701  307
+CONVEX 1795    GT_PK(2,2)      273  4399  274  4397  2897  308
+CONVEX 1796    GT_PK(2,2)      273  4400  240  4399  4395  274
+CONVEX 1797    GT_PK(2,2)      67  4401  91  4402  3705  90
+CONVEX 1798    GT_PK(2,2)      67  4403  66  4402  2828  90
+CONVEX 1799    GT_PK(2,2)      67  4403  66  4404  1978  45
+CONVEX 1800    GT_PK(2,2)      67  4405  46  4404  3709  45
+CONVEX 1801    GT_PK(2,2)      47  4406  28  4407  2821  29
+CONVEX 1802    GT_PK(2,2)      47  4408  46  4406  3710  28
+CONVEX 1803    GT_PK(2,2)      47  4407  29  4409  2820  48
+CONVEX 1804    GT_PK(2,2)      47  4410  69  4409  4411  48
+CONVEX 1805    GT_PK(2,2)      567  4412  528  4413  2841  527
+CONVEX 1806    GT_PK(2,2)      567  4414  568  4412  3722  528
+CONVEX 1807    GT_PK(2,2)      607  4415  608  4416  2944  647
+CONVEX 1808    GT_PK(2,2)      607  4417  568  4415  3728  608
+CONVEX 1809    GT_PK(2,2)      607  4418  567  4417  4414  568
+CONVEX 1810    GT_PK(2,2)      607  4419  646  4416  3695  647
+CONVEX 1811    GT_PK(2,2)      607  4419  646  4420  2815  606
+CONVEX 1812    GT_PK(2,2)      607  4418  567  4420  4421  606
+CONVEX 1813    GT_PK(2,2)      386  4422  349  4423  3748  385
+CONVEX 1814    GT_PK(2,2)      386  4423  385  4424  2856  423
+CONVEX 1815    GT_PK(2,2)      386  4425  350  4426  4146  387
+CONVEX 1816    GT_PK(2,2)      386  4425  350  4422  4145  349
+CONVEX 1817    GT_PK(2,2)      496  4427  535  4428  3777  497
+CONVEX 1818    GT_PK(2,2)      496  4429  457  4430  2885  495
+CONVEX 1819    GT_PK(2,2)      496  4431  458  4428  3785  497
+CONVEX 1820    GT_PK(2,2)      496  4431  458  4429  3787  457
+CONVEX 1821    GT_PK(2,2)      534  4432  535  4433  3774  574
+CONVEX 1822    GT_PK(2,2)      534  4434  573  4435  3809  533
+CONVEX 1823    GT_PK(2,2)      534  4434  573  4433  3807  574
+CONVEX 1824    GT_PK(2,2)      534  4436  495  4435  2882  533
+CONVEX 1825    GT_PK(2,2)      534  4437  496  4436  4430  495
+CONVEX 1826    GT_PK(2,2)      534  4437  496  4432  4427  535
+CONVEX 1827    GT_PK(2,2)      803  4438  763  4439  3805  764
+CONVEX 1828    GT_PK(2,2)      803  4438  763  4440  3801  802
+CONVEX 1829    GT_PK(2,2)      804  4441  843  4442  3799  844
+CONVEX 1830    GT_PK(2,2)      804  4443  765  4444  2926  805
+CONVEX 1831    GT_PK(2,2)      804  4442  844  4444  2934  805
+CONVEX 1832    GT_PK(2,2)      804  4443  765  4445  2931  764
+CONVEX 1833    GT_PK(2,2)      804  4446  803  4445  4439  764
+CONVEX 1834    GT_PK(2,2)      804  4446  803  4441  4447  843
+CONVEX 1835    GT_PK(2,2)      693  4448  692  4449  4450  732
+CONVEX 1836    GT_PK(2,2)      693  4451  733  4449  4452  732
+CONVEX 1837    GT_PK(2,2)      693  4451  733  4453  4454  694
+CONVEX 1838    GT_PK(2,2)      693  4448  692  4455  3815  653
+CONVEX 1839    GT_PK(2,2)      731  4456  692  4457  4450  732
+CONVEX 1840    GT_PK(2,2)      731  4458  771  4457  4459  732
+CONVEX 1841    GT_PK(2,2)      731  4460  691  4461  2981  730
+CONVEX 1842    GT_PK(2,2)      731  4456  692  4460  3816  691
+CONVEX 1843    GT_PK(2,2)      731  4462  770  4461  3852  730
+CONVEX 1844    GT_PK(2,2)      731  4462  770  4458  4463  771
+CONVEX 1845    GT_PK(2,2)      892  4464  932  4465  1948  931
+CONVEX 1846    GT_PK(2,2)      892  4466  891  4465  2988  931
+CONVEX 1847    GT_PK(2,2)      892  4467  893  4464  3840  932
+CONVEX 1848    GT_PK(2,2)      892  4467  893  4468  3841  853
+CONVEX 1849    GT_PK(2,2)      816  4469  815  4470  3835  855
+CONVEX 1850    GT_PK(2,2)      816  4471  856  4470  3329  855
+CONVEX 1851    GT_PK(2,2)      816  4472  777  4473  3325  817
+CONVEX 1852    GT_PK(2,2)      816  4471  856  4473  3336  817
+CONVEX 1853    GT_PK(2,2)      814  4474  815  4475  3834  854
+CONVEX 1854    GT_PK(2,2)      814  4476  853  4475  3842  854
+CONVEX 1855    GT_PK(2,2)      814  4477  774  4478  2997  813
+CONVEX 1856    GT_PK(2,2)      814  4476  853  4478  4479  813
+CONVEX 1857    GT_PK(2,2)      772  4480  812  4481  3844  773
+CONVEX 1858    GT_PK(2,2)      772  4482  733  4481  4483  773
+CONVEX 1859    GT_PK(2,2)      772  4482  733  4484  4452  732
+CONVEX 1860    GT_PK(2,2)      772  4485  771  4484  4459  732
+CONVEX 1861    GT_PK(2,2)      849  4486  848  4487  3813  888
+CONVEX 1862    GT_PK(2,2)      849  4488  889  4487  3845  888
+CONVEX 1863    GT_PK(2,2)      734  4489  695  4490  3848  694
+CONVEX 1864    GT_PK(2,2)      734  4491  774  4492  2998  773
+CONVEX 1865    GT_PK(2,2)      734  4491  774  4493  4494  735
+CONVEX 1866    GT_PK(2,2)      734  4489  695  4493  4495  735
+CONVEX 1867    GT_PK(2,2)      734  4496  733  4492  4483  773
+CONVEX 1868    GT_PK(2,2)      734  4496  733  4490  4454  694
+CONVEX 1869    GT_PK(2,2)      471  4497  510  4498  3005  509
+CONVEX 1870    GT_PK(2,2)      471  4499  472  4497  4173  510
+CONVEX 1871    GT_PK(2,2)      435  4500  436  4501  3033  397
+CONVEX 1872    GT_PK(2,2)      435  4501  397  4502  2078  396
+CONVEX 1873    GT_PK(2,2)      435  4503  434  4502  3861  396
+CONVEX 1874    GT_PK(2,2)      435  4503  434  4504  3864  473
+CONVEX 1875    GT_PK(2,2)      604  4505  643  4506  3873  603
+CONVEX 1876    GT_PK(2,2)      604  4505  643  4507  3875  644
+CONVEX 1877    GT_PK(2,2)      487  4508  526  4509  3885  525
+CONVEX 1878    GT_PK(2,2)      487  4510  488  4508  3888  526
+CONVEX 1879    GT_PK(2,2)      487  4511  486  4509  3891  525
+CONVEX 1880    GT_PK(2,2)      485  4512  524  4513  3024  523
+CONVEX 1881    GT_PK(2,2)      485  4514  486  4512  3890  524
+CONVEX 1882    GT_PK(2,2)      485  4515  484  4513  3022  523
+CONVEX 1883    GT_PK(2,2)      485  4514  486  4516  4517  447
+CONVEX 1884    GT_PK(2,2)      481  4518  482  4519  3027  520
+CONVEX 1885    GT_PK(2,2)      481  4520  519  4519  3906  520
+CONVEX 1886    GT_PK(2,2)      481  4518  482  4521  3895  443
+CONVEX 1887    GT_PK(2,2)      481  4520  519  4522  3909  480
+CONVEX 1888    GT_PK(2,2)      481  4523  442  4521  3868  443
+CONVEX 1889    GT_PK(2,2)      481  4523  442  4522  4524  480
+CONVEX 1890    GT_PK(2,2)      324  4525  288  4526  3915  289
+CONVEX 1891    GT_PK(2,2)      324  4527  325  4526  2141  289
+CONVEX 1892    GT_PK(2,2)      324  4528  323  4529  3049  360
+CONVEX 1893    GT_PK(2,2)      324  4525  288  4528  3913  323
+CONVEX 1894    GT_PK(2,2)      324  4530  361  4529  2068  360
+CONVEX 1895    GT_PK(2,2)      324  4530  361  4527  2069  325
+CONVEX 1896    GT_PK(2,2)      179  4531  180  4532  3061  211
+CONVEX 1897    GT_PK(2,2)      179  4532  211  4533  4534  210
+CONVEX 1898    GT_PK(2,2)      179  4535  178  4533  4536  210
+CONVEX 1899    GT_PK(2,2)      179  4535  178  4537  4538  149
+CONVEX 1900    GT_PK(2,2)      179  4539  150  4537  3924  149
+CONVEX 1901    GT_PK(2,2)      179  4539  150  4531  3921  180
+CONVEX 1902    GT_PK(2,2)      243  4540  211  4541  4534  210
+CONVEX 1903    GT_PK(2,2)      243  4542  244  4540  3918  211
+CONVEX 1904    GT_PK(2,2)      243  4541  210  4543  4544  242
+CONVEX 1905    GT_PK(2,2)      243  4542  244  4545  3920  277
+CONVEX 1906    GT_PK(2,2)      243  4546  276  4543  1985  242
+CONVEX 1907    GT_PK(2,2)      243  4545  277  4546  3751  276
+CONVEX 1908    GT_PK(2,2)      123  4547  150  4548  3923  122
+CONVEX 1909    GT_PK(2,2)      123  4549  97  4548  3930  122
+CONVEX 1910    GT_PK(2,2)      123  4550  151  4551  2181  124
+CONVEX 1911    GT_PK(2,2)      123  4547  150  4550  3922  151
+CONVEX 1912    GT_PK(2,2)      123  4551  124  4552  1668  98
+CONVEX 1913    GT_PK(2,2)      123  4549  97  4552  3935  98
+CONVEX 1914    GT_PK(2,2)      95  4553  121  4554  4555  120
+CONVEX 1915    GT_PK(2,2)      95  4553  121  4556  3927  96
+CONVEX 1916    GT_PK(2,2)      70  4557  69  4558  4411  48
+CONVEX 1917    GT_PK(2,2)      70  4559  93  4557  3936  69
+CONVEX 1918    GT_PK(2,2)      50  4560  32  4561  4562  31
+CONVEX 1919    GT_PK(2,2)      50  4563  51  4560  3941  32
+CONVEX 1920    GT_PK(2,2)      368  4564  367  4565  3012  405
+CONVEX 1921    GT_PK(2,2)      368  4566  331  4564  3952  367
+CONVEX 1922    GT_PK(2,2)      446  4567  484  4568  3902  445
+CONVEX 1923    GT_PK(2,2)      446  4569  485  4570  4516  447
+CONVEX 1924    GT_PK(2,2)      446  4569  485  4567  4515  484
+CONVEX 1925    GT_PK(2,2)      267  4571  302  4572  2230  268
+CONVEX 1926    GT_PK(2,2)      267  4572  268  4573  2889  234
+CONVEX 1927    GT_PK(2,2)      267  4574  233  4573  2241  234
+CONVEX 1928    GT_PK(2,2)      264  4575  263  4576  4577  298
+CONVEX 1929    GT_PK(2,2)      133  4578  134  4579  3956  106
+CONVEX 1930    GT_PK(2,2)      133  4580  105  4581  2221  132
+CONVEX 1931    GT_PK(2,2)      133  4580  105  4579  2219  106
+CONVEX 1932    GT_PK(2,2)      133  4582  162  4581  2229  132
+CONVEX 1933    GT_PK(2,2)      133  4583  163  4582  4584  162
+CONVEX 1934    GT_PK(2,2)      133  4578  134  4583  3957  163
+CONVEX 1935    GT_PK(2,2)      135  4585  108  4586  3124  107
+CONVEX 1936    GT_PK(2,2)      135  4587  134  4586  3955  107
+CONVEX 1937    GT_PK(2,2)      135  4587  134  4588  3958  164
+CONVEX 1938    GT_PK(2,2)      135  4589  165  4588  3992  164
+CONVEX 1939    GT_PK(2,2)      194  4590  226  4591  3945  193
+CONVEX 1940    GT_PK(2,2)      194  4592  195  4593  3963  163
+CONVEX 1941    GT_PK(2,2)      194  4594  227  4590  4595  226
+CONVEX 1942    GT_PK(2,2)      194  4594  227  4592  4596  195
+CONVEX 1943    GT_PK(2,2)      194  4593  163  4597  4584  162
+CONVEX 1944    GT_PK(2,2)      194  4591  193  4597  3091  162
+CONVEX 1945    GT_PK(2,2)      375  4598  376  4599  2907  413
+CONVEX 1946    GT_PK(2,2)      375  4600  374  4601  4602  338
+CONVEX 1947    GT_PK(2,2)      375  4598  376  4603  2922  339
+CONVEX 1948    GT_PK(2,2)      375  4601  338  4603  3093  339
+CONVEX 1949    GT_PK(2,2)      199  4604  232  4605  3964  200
+CONVEX 1950    GT_PK(2,2)      199  4606  167  4607  4608  198
+CONVEX 1951    GT_PK(2,2)      199  4607  198  4609  4610  231
+CONVEX 1952    GT_PK(2,2)      199  4604  232  4609  4611  231
+CONVEX 1953    GT_PK(2,2)      199  4605  200  4612  3101  168
+CONVEX 1954    GT_PK(2,2)      199  4606  167  4612  4613  168
+CONVEX 1955    GT_PK(2,2)      138  4614  111  4615  3966  139
+CONVEX 1956    GT_PK(2,2)      138  4615  139  4616  2244  168
+CONVEX 1957    GT_PK(2,2)      138  4617  167  4618  4619  137
+CONVEX 1958    GT_PK(2,2)      138  4617  167  4616  4613  168
+CONVEX 1959    GT_PK(2,2)      110  4620  138  4621  4614  111
+CONVEX 1960    GT_PK(2,2)      110  4622  109  4623  4624  137
+CONVEX 1961    GT_PK(2,2)      110  4620  138  4623  4618  137
+CONVEX 1962    GT_PK(2,2)      85  4625  111  4626  3968  86
+CONVEX 1963    GT_PK(2,2)      85  4627  62  4628  3975  61
+CONVEX 1964    GT_PK(2,2)      85  4627  62  4626  3977  86
+CONVEX 1965    GT_PK(2,2)      85  4629  110  4625  4621  111
+CONVEX 1966    GT_PK(2,2)      60  4630  83  4631  3986  59
+CONVEX 1967    GT_PK(2,2)      60  4632  38  4633  3982  39
+CONVEX 1968    GT_PK(2,2)      60  4632  38  4631  3979  59
+CONVEX 1969    GT_PK(2,2)      60  4633  39  4634  3120  61
+CONVEX 1970    GT_PK(2,2)      136  4635  109  4636  4624  137
+CONVEX 1971    GT_PK(2,2)      136  4637  108  4635  3990  109
+CONVEX 1972    GT_PK(2,2)      136  4638  135  4637  4585  108
+CONVEX 1973    GT_PK(2,2)      136  4638  135  4639  4589  165
+CONVEX 1974    GT_PK(2,2)      197  4640  165  4641  3991  196
+CONVEX 1975    GT_PK(2,2)      1389  4642  1388  4643  4003  1365
+CONVEX 1976    GT_PK(2,2)      1389  4644  1411  4645  3190  1390
+CONVEX 1977    GT_PK(2,2)      1389  4644  1411  4646  3194  1410
+CONVEX 1978    GT_PK(2,2)      1389  4642  1388  4646  4002  1410
+CONVEX 1979    GT_PK(2,2)      1389  4647  1366  4645  3230  1390
+CONVEX 1980    GT_PK(2,2)      1389  4647  1366  4643  4074  1365
+CONVEX 1981    GT_PK(2,2)      1110  4648  1074  4649  4650  1073
+CONVEX 1982    GT_PK(2,2)      1110  4651  1109  4649  4245  1073
+CONVEX 1983    GT_PK(2,2)      1110  4651  1109  4652  4011  1145
+CONVEX 1984    GT_PK(2,2)      1110  4653  1146  4652  4302  1145
+CONVEX 1985    GT_PK(2,2)      840  4654  800  4655  4153  801
+CONVEX 1986    GT_PK(2,2)      840  4654  800  4656  4151  839
+CONVEX 1987    GT_PK(2,2)      842  4657  803  4658  4440  802
+CONVEX 1988    GT_PK(2,2)      842  4657  803  4659  4447  843
+CONVEX 1989    GT_PK(2,2)      999  4660  1038  4661  3135  1000
+CONVEX 1990    GT_PK(2,2)      999  4662  1037  4660  4014  1038
+CONVEX 1991    GT_PK(2,2)      1036  4663  1037  4664  4016  1074
+CONVEX 1992    GT_PK(2,2)      1036  4665  1073  4666  4242  1035
+CONVEX 1993    GT_PK(2,2)      1036  4664  1074  4665  4650  1073
+CONVEX 1994    GT_PK(2,2)      1225  4667  1226  4668  4044  1258
+CONVEX 1995    GT_PK(2,2)      1225  4669  1191  4670  4035  1192
+CONVEX 1996    GT_PK(2,2)      1225  4667  1226  4670  4047  1192
+CONVEX 1997    GT_PK(2,2)      1287  4671  1317  4672  2345  1316
+CONVEX 1998    GT_PK(2,2)      1287  4673  1286  4672  4080  1316
+CONVEX 1999    GT_PK(2,2)      1255  4674  1254  4675  3158  1286
+CONVEX 2000    GT_PK(2,2)      1255  4676  1287  4675  4673  1286
+CONVEX 2001    GT_PK(2,2)      1255  4676  1287  4677  4678  1256
+CONVEX 2002    GT_PK(2,2)      1255  4674  1254  4679  3162  1222
+CONVEX 2003    GT_PK(2,2)      1318  4680  1289  4681  4682  1319
+CONVEX 2004    GT_PK(2,2)      1318  4683  1317  4684  2346  1345
+CONVEX 2005    GT_PK(2,2)      1318  4684  1345  4685  2323  1346
+CONVEX 2006    GT_PK(2,2)      1318  4681  1319  4685  3175  1346
+CONVEX 2007    GT_PK(2,2)      1288  4686  1287  4687  4678  1256
+CONVEX 2008    GT_PK(2,2)      1288  4686  1287  4688  4671  1317
+CONVEX 2009    GT_PK(2,2)      1288  4689  1318  4688  4683  1317
+CONVEX 2010    GT_PK(2,2)      1288  4689  1318  4690  4680  1289
+CONVEX 2011    GT_PK(2,2)      1290  4691  1289  4692  4682  1319
+CONVEX 2012    GT_PK(2,2)      1290  4693  1291  4694  3173  1320
+CONVEX 2013    GT_PK(2,2)      1290  4692  1319  4694  3176  1320
+CONVEX 2014    GT_PK(2,2)      1290  4691  1289  4695  4696  1258
+CONVEX 2015    GT_PK(2,2)      1290  4697  1259  4693  4052  1291
+CONVEX 2016    GT_PK(2,2)      1290  4697  1259  4695  4045  1258
+CONVEX 2017    GT_PK(2,2)      1322  4698  1292  4699  4040  1293
+CONVEX 2018    GT_PK(2,2)      1322  4700  1349  4701  4032  1350
+CONVEX 2019    GT_PK(2,2)      1322  4700  1349  4702  4031  1321
+CONVEX 2020    GT_PK(2,2)      1322  4698  1292  4702  4041  1321
+CONVEX 2021    GT_PK(2,2)      1322  4701  1350  4703  4704  1323
+CONVEX 2022    GT_PK(2,2)      1322  4699  1293  4703  3167  1323
+CONVEX 2023    GT_PK(2,2)      1228  4705  1195  4706  3688  1194
+CONVEX 2024    GT_PK(2,2)      1228  4705  1195  4707  3186  1229
+CONVEX 2025    GT_PK(2,2)      1228  4708  1261  4707  3188  1229
+CONVEX 2026    GT_PK(2,2)      1228  4709  1260  4708  4049  1261
+CONVEX 2027    GT_PK(2,2)      1314  4710  1315  4711  4075  1342
+CONVEX 2028    GT_PK(2,2)      1314  4712  1313  4713  4063  1284
+CONVEX 2029    GT_PK(2,2)      1314  4713  1284  4714  2400  1285
+CONVEX 2030    GT_PK(2,2)      1314  4710  1315  4714  4078  1285
+CONVEX 2031    GT_PK(2,2)      1314  4712  1313  4715  4071  1341
+CONVEX 2032    GT_PK(2,2)      1314  4711  1342  4715  3236  1341
+CONVEX 2033    GT_PK(2,2)      461  4716  460  4717  3765  422
+CONVEX 2034    GT_PK(2,2)      461  4718  499  4716  4099  460
+CONVEX 2035    GT_PK(2,2)      461  4719  423  4717  2858  422
+CONVEX 2036    GT_PK(2,2)      620  4720  660  4721  4111  621
+CONVEX 2037    GT_PK(2,2)      620  4720  660  4722  4723  659
+CONVEX 2038    GT_PK(2,2)      620  4724  619  4722  4725  659
+CONVEX 2039    GT_PK(2,2)      699  4726  739  4727  3270  700
+CONVEX 2040    GT_PK(2,2)      699  4728  660  4727  4109  700
+CONVEX 2041    GT_PK(2,2)      699  4728  660  4729  4723  659
+CONVEX 2042    GT_PK(2,2)      699  4726  739  4730  2443  738
+CONVEX 2043    GT_PK(2,2)      698  4731  699  4732  4730  738
+CONVEX 2044    GT_PK(2,2)      698  4731  699  4733  4729  659
+CONVEX 2045    GT_PK(2,2)      776  4734  816  4735  4472  777
+CONVEX 2046    GT_PK(2,2)      776  4734  816  4736  4469  815
+CONVEX 2047    GT_PK(2,2)      464  4737  463  4738  4739  425
+CONVEX 2048    GT_PK(2,2)      464  4737  463  4740  4741  502
+CONVEX 2049    GT_PK(2,2)      464  4742  503  4743  4096  465
+CONVEX 2050    GT_PK(2,2)      464  4742  503  4740  4744  502
+CONVEX 2051    GT_PK(2,2)      426  4745  425  4746  4135  388
+CONVEX 2052    GT_PK(2,2)      426  4747  389  4748  4137  427
+CONVEX 2053    GT_PK(2,2)      426  4747  389  4746  4139  388
+CONVEX 2054    GT_PK(2,2)      426  4749  464  4745  4738  425
+CONVEX 2055    GT_PK(2,2)      426  4748  427  4750  4107  465
+CONVEX 2056    GT_PK(2,2)      426  4749  464  4750  4743  465
+CONVEX 2057    GT_PK(2,2)      917  4751  877  4752  4148  878
+CONVEX 2058    GT_PK(2,2)      917  4751  877  4753  4754  916
+CONVEX 2059    GT_PK(2,2)      917  4755  956  4756  4252  955
+CONVEX 2060    GT_PK(2,2)      917  4753  916  4756  4259  955
+CONVEX 2061    GT_PK(2,2)      876  4757  877  4758  4754  916
+CONVEX 2062    GT_PK(2,2)      876  4758  916  4759  4260  915
+CONVEX 2063    GT_PK(2,2)      876  4760  837  4761  3360  836
+CONVEX 2064    GT_PK(2,2)      876  4757  877  4760  4149  837
+CONVEX 2065    GT_PK(2,2)      876  4762  875  4761  2638  836
+CONVEX 2066    GT_PK(2,2)      876  4762  875  4759  2640  915
+CONVEX 2067    GT_PK(2,2)      441  4763  479  4764  4165  440
+CONVEX 2068    GT_PK(2,2)      441  4765  442  4766  3869  403
+CONVEX 2069    GT_PK(2,2)      441  4765  442  4767  4524  480
+CONVEX 2070    GT_PK(2,2)      441  4763  479  4767  4166  480
+CONVEX 2071    GT_PK(2,2)      441  4768  402  4766  2089  403
+CONVEX 2072    GT_PK(2,2)      441  4764  440  4768  3039  402
+CONVEX 2073    GT_PK(2,2)      555  4769  516  4770  2529  556
+CONVEX 2074    GT_PK(2,2)      555  4771  515  4769  4167  516
+CONVEX 2075    GT_PK(2,2)      476  4772  475  4773  4170  437
+CONVEX 2076    GT_PK(2,2)      476  4774  515  4775  4168  477
+CONVEX 2077    GT_PK(2,2)      476  4776  438  4775  2100  477
+CONVEX 2078    GT_PK(2,2)      476  4776  438  4773  2101  437
+CONVEX 2079    GT_PK(2,2)      512  4777  511  4778  4174  473
+CONVEX 2080    GT_PK(2,2)      631  4779  671  4780  4781  632
+CONVEX 2081    GT_PK(2,2)      631  4782  592  4780  4186  632
+CONVEX 2082    GT_PK(2,2)      631  4779  671  4783  3378  670
+CONVEX 2083    GT_PK(2,2)      674  4784  714  4785  2537  675
+CONVEX 2084    GT_PK(2,2)      674  4786  635  4785  4180  675
+CONVEX 2085    GT_PK(2,2)      674  4784  714  4787  3384  713
+CONVEX 2086    GT_PK(2,2)      674  4786  635  4788  4789  634
+CONVEX 2087    GT_PK(2,2)      674  4790  673  4787  4182  713
+CONVEX 2088    GT_PK(2,2)      674  4790  673  4788  4791  634
+CONVEX 2089    GT_PK(2,2)      672  4792  671  4793  3380  711
+CONVEX 2090    GT_PK(2,2)      672  4792  671  4794  4781  632
+CONVEX 2091    GT_PK(2,2)      672  4793  711  4795  2589  712
+CONVEX 2092    GT_PK(2,2)      672  4796  673  4795  4183  712
+CONVEX 2093    GT_PK(2,2)      633  4797  673  4798  4791  634
+CONVEX 2094    GT_PK(2,2)      633  4799  672  4797  4796  673
+CONVEX 2095    GT_PK(2,2)      633  4800  593  4801  4185  632
+CONVEX 2096    GT_PK(2,2)      633  4799  672  4801  4794  632
+CONVEX 2097    GT_PK(2,2)      944  4802  905  4803  4196  943
+CONVEX 2098    GT_PK(2,2)      944  4804  982  4805  2543  981
+CONVEX 2099    GT_PK(2,2)      944  4803  943  4805  4806  981
+CONVEX 2100    GT_PK(2,2)      944  4804  982  4807  2539  983
+CONVEX 2101    GT_PK(2,2)      944  4808  945  4807  3456  983
+CONVEX 2102    GT_PK(2,2)      944  4808  945  4809  4233  906
+CONVEX 2103    GT_PK(2,2)      944  4802  905  4809  4205  906
+CONVEX 2104    GT_PK(2,2)      871  4810  832  4811  4210  831
+CONVEX 2105    GT_PK(2,2)      871  4812  911  4813  2610  910
+CONVEX 2106    GT_PK(2,2)      871  4814  872  4812  2625  911
+CONVEX 2107    GT_PK(2,2)      871  4810  832  4814  4214  872
+CONVEX 2108    GT_PK(2,2)      870  4815  830  4816  4215  831
+CONVEX 2109    GT_PK(2,2)      870  4817  909  4818  1876  910
+CONVEX 2110    GT_PK(2,2)      870  4819  869  4817  4820  909
+CONVEX 2111    GT_PK(2,2)      870  4819  869  4815  4821  830
+CONVEX 2112    GT_PK(2,2)      870  4822  871  4818  4813  910
+CONVEX 2113    GT_PK(2,2)      870  4822  871  4816  4811  831
+CONVEX 2114    GT_PK(2,2)      790  4823  751  4824  3438  791
+CONVEX 2115    GT_PK(2,2)      790  4825  830  4824  4216  791
+CONVEX 2116    GT_PK(2,2)      987  4826  986  4827  4223  1025
+CONVEX 2117    GT_PK(2,2)      987  4828  949  4829  2605  988
+CONVEX 2118    GT_PK(2,2)      987  4828  949  4830  2611  948
+CONVEX 2119    GT_PK(2,2)      987  4826  986  4830  4227  948
+CONVEX 2120    GT_PK(2,2)      987  4831  1026  4829  3446  988
+CONVEX 2121    GT_PK(2,2)      987  4827  1025  4831  3450  1026
+CONVEX 2122    GT_PK(2,2)      908  4832  907  4833  4230  868
+CONVEX 2123    GT_PK(2,2)      908  4834  869  4833  4835  868
+CONVEX 2124    GT_PK(2,2)      908  4836  947  4837  3458  909
+CONVEX 2125    GT_PK(2,2)      908  4834  869  4837  4820  909
+CONVEX 2126    GT_PK(2,2)      1034  4838  1072  4839  4241  1035
+CONVEX 2127    GT_PK(2,2)      1071  4840  1033  4841  3464  1070
+CONVEX 2128    GT_PK(2,2)      1071  4842  1072  4843  4244  1108
+CONVEX 2129    GT_PK(2,2)      1071  4844  1034  4840  4845  1033
+CONVEX 2130    GT_PK(2,2)      1071  4844  1034  4842  4838  1072
+CONVEX 2131    GT_PK(2,2)      1142  4846  1106  4847  4848  1141
+CONVEX 2132    GT_PK(2,2)      1104  4849  1103  4850  3426  1067
+CONVEX 2133    GT_PK(2,2)      1104  4851  1139  4849  3497  1103
+CONVEX 2134    GT_PK(2,2)      1104  4851  1139  4852  3500  1140
+CONVEX 2135    GT_PK(2,2)      1209  4853  1210  4854  4269  1242
+CONVEX 2136    GT_PK(2,2)      1209  4855  1241  4856  3628  1208
+CONVEX 2137    GT_PK(2,2)      1209  4855  1241  4854  3629  1242
+CONVEX 2138    GT_PK(2,2)      1382  4857  1404  4858  2676  1383
+CONVEX 2139    GT_PK(2,2)      1382  4859  1403  4857  4276  1404
+CONVEX 2140    GT_PK(2,2)      1382  4859  1403  4860  4279  1381
+CONVEX 2141    GT_PK(2,2)      1421  4861  1403  4862  4277  1422
+CONVEX 2142    GT_PK(2,2)      1421  4863  1436  4864  4865  1435
+CONVEX 2143    GT_PK(2,2)      1421  4863  1436  4862  3536  1422
+CONVEX 2144    GT_PK(2,2)      1421  4866  1402  4864  4867  1435
+CONVEX 2145    GT_PK(2,2)      1421  4861  1403  4866  4278  1402
+CONVEX 2146    GT_PK(2,2)      1332  4868  1305  4869  4325  1304
+CONVEX 2147    GT_PK(2,2)      1332  4870  1333  4868  4283  1305
+CONVEX 2148    GT_PK(2,2)      1377  4871  1398  4872  4296  1353
+CONVEX 2149    GT_PK(2,2)      1328  4873  1353  4874  4312  1327
+CONVEX 2150    GT_PK(2,2)      1302  4875  1273  4876  3623  1303
+CONVEX 2151    GT_PK(2,2)      1302  4875  1273  4877  3627  1272
+CONVEX 2152    GT_PK(2,2)      1420  4878  1402  4879  4867  1435
+CONVEX 2153    GT_PK(2,2)      1048  4880  1086  4881  4337  1049
+CONVEX 2154    GT_PK(2,2)      1048  4882  1010  4883  2777  1009
+CONVEX 2155    GT_PK(2,2)      1048  4882  1010  4881  2771  1049
+CONVEX 2156    GT_PK(2,2)      1085  4884  1086  4885  4336  1122
+CONVEX 2157    GT_PK(2,2)      1085  4886  1121  4885  4340  1122
+CONVEX 2158    GT_PK(2,2)      1085  4887  1048  4884  4880  1086
+CONVEX 2159    GT_PK(2,2)      1126  4888  1127  4889  4128  1090
+CONVEX 2160    GT_PK(2,2)      1126  4890  1162  4888  4388  1127
+CONVEX 2161    GT_PK(2,2)      1126  4891  1089  4892  4371  1125
+CONVEX 2162    GT_PK(2,2)      1126  4891  1089  4889  3691  1090
+CONVEX 2163    GT_PK(2,2)      1126  4893  1161  4892  4383  1125
+CONVEX 2164    GT_PK(2,2)      1126  4890  1162  4893  4390  1161
+CONVEX 2165    GT_PK(2,2)      238  4894  271  4895  4393  272
+CONVEX 2166    GT_PK(2,2)      236  4896  235  4897  2891  203
+CONVEX 2167    GT_PK(2,2)      236  4898  204  4897  4899  203
+CONVEX 2168    GT_PK(2,2)      270  4900  305  4901  2925  304
+CONVEX 2169    GT_PK(2,2)      270  4902  271  4900  4391  305
+CONVEX 2170    GT_PK(2,2)      172  4903  204  4904  4899  203
+CONVEX 2171    GT_PK(2,2)      172  4903  204  4905  4906  173
+CONVEX 2172    GT_PK(2,2)      68  4907  47  4908  4410  69
+CONVEX 2173    GT_PK(2,2)      68  4909  91  4910  4911  92
+CONVEX 2174    GT_PK(2,2)      68  4908  69  4910  3938  92
+CONVEX 2175    GT_PK(2,2)      68  4912  67  4909  4401  91
+CONVEX 2176    GT_PK(2,2)      68  4912  67  4913  4405  46
+CONVEX 2177    GT_PK(2,2)      68  4907  47  4913  4408  46
+CONVEX 2178    GT_PK(2,2)      566  4914  567  4915  4421  606
+CONVEX 2179    GT_PK(2,2)      566  4916  565  4917  3883  526
+CONVEX 2180    GT_PK(2,2)      566  4917  526  4918  3889  527
+CONVEX 2181    GT_PK(2,2)      566  4914  567  4918  4413  527
+CONVEX 2182    GT_PK(2,2)      424  4919  425  4920  4136  387
+CONVEX 2183    GT_PK(2,2)      424  4921  386  4920  4426  387
+CONVEX 2184    GT_PK(2,2)      424  4921  386  4922  4424  423
+CONVEX 2185    GT_PK(2,2)      424  4923  463  4919  4739  425
+CONVEX 2186    GT_PK(2,2)      654  4924  693  4925  4453  694
+CONVEX 2187    GT_PK(2,2)      654  4925  694  4926  3850  655
+CONVEX 2188    GT_PK(2,2)      654  4927  615  4926  4928  655
+CONVEX 2189    GT_PK(2,2)      654  4927  615  4929  3853  614
+CONVEX 2190    GT_PK(2,2)      654  4929  614  4930  2995  653
+CONVEX 2191    GT_PK(2,2)      654  4924  693  4930  4455  653
+CONVEX 2192    GT_PK(2,2)      852  4931  892  4932  4466  891
+CONVEX 2193    GT_PK(2,2)      852  4933  812  4934  3843  813
+CONVEX 2194    GT_PK(2,2)      852  4935  853  4934  4479  813
+CONVEX 2195    GT_PK(2,2)      852  4931  892  4935  4468  853
+CONVEX 2196    GT_PK(2,2)      852  4936  851  4932  4937  891
+CONVEX 2197    GT_PK(2,2)      852  4936  851  4933  4938  812
+CONVEX 2198    GT_PK(2,2)      775  4939  814  4940  4474  815
+CONVEX 2199    GT_PK(2,2)      775  4941  776  4942  4943  736
+CONVEX 2200    GT_PK(2,2)      775  4941  776  4940  4736  815
+CONVEX 2201    GT_PK(2,2)      775  4944  735  4942  4945  736
+CONVEX 2202    GT_PK(2,2)      775  4946  774  4944  4494  735
+CONVEX 2203    GT_PK(2,2)      775  4939  814  4946  4477  774
+CONVEX 2204    GT_PK(2,2)      890  4947  851  4948  4937  891
+CONVEX 2205    GT_PK(2,2)      890  4949  889  4950  3847  929
+CONVEX 2206    GT_PK(2,2)      890  4950  929  4951  2764  930
+CONVEX 2207    GT_PK(2,2)      890  4948  891  4951  2987  930
+CONVEX 2208    GT_PK(2,2)      809  4952  770  4953  3851  769
+CONVEX 2209    GT_PK(2,2)      809  4954  808  4953  2963  769
+CONVEX 2210    GT_PK(2,2)      809  4955  848  4954  3810  808
+CONVEX 2211    GT_PK(2,2)      809  4956  849  4955  4486  848
+CONVEX 2212    GT_PK(2,2)      810  4957  809  4958  4956  849
+CONVEX 2213    GT_PK(2,2)      810  4959  770  4960  4463  771
+CONVEX 2214    GT_PK(2,2)      810  4957  809  4959  4952  770
+CONVEX 2215    GT_PK(2,2)      432  4961  472  4962  3866  433
+CONVEX 2216    GT_PK(2,2)      432  4963  471  4961  4499  472
+CONVEX 2217    GT_PK(2,2)      432  4962  433  4964  3007  394
+CONVEX 2218    GT_PK(2,2)      474  4965  475  4966  4169  436
+CONVEX 2219    GT_PK(2,2)      474  4967  435  4966  4500  436
+CONVEX 2220    GT_PK(2,2)      474  4967  435  4968  4504  473
+CONVEX 2221    GT_PK(2,2)      474  4969  512  4968  4778  473
+CONVEX 2222    GT_PK(2,2)      564  4970  603  4971  3882  563
+CONVEX 2223    GT_PK(2,2)      564  4972  604  4970  4506  603
+CONVEX 2224    GT_PK(2,2)      564  4972  604  4973  4974  565
+CONVEX 2225    GT_PK(2,2)      564  4975  524  4971  3025  563
+CONVEX 2226    GT_PK(2,2)      564  4975  524  4976  3892  525
+CONVEX 2227    GT_PK(2,2)      564  4973  565  4976  3884  525
+CONVEX 2228    GT_PK(2,2)      605  4977  604  4978  4974  565
+CONVEX 2229    GT_PK(2,2)      605  4979  606  4980  2816  645
+CONVEX 2230    GT_PK(2,2)      605  4981  644  4980  3019  645
+CONVEX 2231    GT_PK(2,2)      605  4977  604  4981  4507  644
+CONVEX 2232    GT_PK(2,2)      605  4982  566  4979  4915  606
+CONVEX 2233    GT_PK(2,2)      605  4982  566  4978  4916  565
+CONVEX 2234    GT_PK(2,2)      148  4983  177  4984  4985  178
+CONVEX 2235    GT_PK(2,2)      148  4984  178  4986  4538  149
+CONVEX 2236    GT_PK(2,2)      148  4987  121  4986  3929  149
+CONVEX 2237    GT_PK(2,2)      148  4987  121  4988  4555  120
+CONVEX 2238    GT_PK(2,2)      208  4989  240  4990  4394  241
+CONVEX 2239    GT_PK(2,2)      208  4989  240  4991  4992  207
+CONVEX 2240    GT_PK(2,2)      209  4993  178  4994  4536  210
+CONVEX 2241    GT_PK(2,2)      209  4995  177  4993  4985  178
+CONVEX 2242    GT_PK(2,2)      209  4994  210  4996  4544  242
+CONVEX 2243    GT_PK(2,2)      209  4997  208  4995  4998  177
+CONVEX 2244    GT_PK(2,2)      209  4999  241  4996  1970  242
+CONVEX 2245    GT_PK(2,2)      209  4997  208  4999  4990  241
+CONVEX 2246    GT_PK(2,2)      94  5000  95  5001  4554  120
+CONVEX 2247    GT_PK(2,2)      94  5000  95  5002  5003  71
+CONVEX 2248    GT_PK(2,2)      94  5004  70  5002  5005  71
+CONVEX 2249    GT_PK(2,2)      94  5004  70  5006  4559  93
+CONVEX 2250    GT_PK(2,2)      72  5007  95  5008  5003  71
+CONVEX 2251    GT_PK(2,2)      72  5009  50  5008  5010  71
+CONVEX 2252    GT_PK(2,2)      72  5009  50  5011  4563  51
+CONVEX 2253    GT_PK(2,2)      72  5007  95  5012  4556  96
+CONVEX 2254    GT_PK(2,2)      72  5013  73  5012  3933  96
+CONVEX 2255    GT_PK(2,2)      72  5011  51  5013  3939  73
+CONVEX 2256    GT_PK(2,2)      175  5014  207  5015  5016  206
+CONVEX 2257    GT_PK(2,2)      49  5017  70  5018  5005  71
+CONVEX 2258    GT_PK(2,2)      49  5019  50  5018  5010  71
+CONVEX 2259    GT_PK(2,2)      49  5020  30  5021  2819  48
+CONVEX 2260    GT_PK(2,2)      49  5017  70  5021  4558  48
+CONVEX 2261    GT_PK(2,2)      49  5019  50  5022  4561  31
+CONVEX 2262    GT_PK(2,2)      49  5023  16  5022  5024  31
+CONVEX 2263    GT_PK(2,2)      49  5023  16  5020  3706  30
+CONVEX 2264    GT_PK(2,2)      406  5025  368  5026  4565  405
+CONVEX 2265    GT_PK(2,2)      406  5027  444  5026  3896  405
+CONVEX 2266    GT_PK(2,2)      406  5027  444  5028  3904  445
+CONVEX 2267    GT_PK(2,2)      301  5029  267  5030  4571  302
+CONVEX 2268    GT_PK(2,2)      299  5031  264  5032  4576  298
+CONVEX 2269    GT_PK(2,2)      265  5033  299  5034  5035  300
+CONVEX 2270    GT_PK(2,2)      265  5033  299  5036  5031  264
+CONVEX 2271    GT_PK(2,2)      265  5037  232  5038  4611  231
+CONVEX 2272    GT_PK(2,2)      265  5036  264  5038  5039  231
+CONVEX 2273    GT_PK(2,2)      260  5040  226  5041  3944  259
+CONVEX 2274    GT_PK(2,2)      260  5042  227  5040  4595  226
+CONVEX 2275    GT_PK(2,2)      260  5043  261  5042  5044  227
+CONVEX 2276    GT_PK(2,2)      260  5045  294  5041  3946  259
+CONVEX 2277    GT_PK(2,2)      260  5045  294  5046  3950  295
+CONVEX 2278    GT_PK(2,2)      260  5043  261  5046  5047  295
+CONVEX 2279    GT_PK(2,2)      412  5048  451  5049  2844  413
+CONVEX 2280    GT_PK(2,2)      412  5050  375  5049  4599  413
+CONVEX 2281    GT_PK(2,2)      412  5050  375  5051  4600  374
+CONVEX 2282    GT_PK(2,2)      412  5052  411  5051  5053  374
+CONVEX 2283    GT_PK(2,2)      84  5054  83  5055  3989  109
+CONVEX 2284    GT_PK(2,2)      84  5056  110  5055  4622  109
+CONVEX 2285    GT_PK(2,2)      84  5057  60  5058  4634  61
+CONVEX 2286    GT_PK(2,2)      84  5057  60  5054  4630  83
+CONVEX 2287    GT_PK(2,2)      84  5059  85  5058  4628  61
+CONVEX 2288    GT_PK(2,2)      84  5059  85  5056  4629  110
+CONVEX 2289    GT_PK(2,2)      166  5060  167  5061  4619  137
+CONVEX 2290    GT_PK(2,2)      166  5062  136  5061  4636  137
+CONVEX 2291    GT_PK(2,2)      166  5060  167  5063  4608  198
+CONVEX 2292    GT_PK(2,2)      166  5064  197  5063  5065  198
+CONVEX 2293    GT_PK(2,2)      166  5062  136  5066  4639  165
+CONVEX 2294    GT_PK(2,2)      166  5064  197  5066  4640  165
+CONVEX 2295    GT_PK(2,2)      230  5067  264  5068  5039  231
+CONVEX 2296    GT_PK(2,2)      230  5067  264  5069  4575  263
+CONVEX 2297    GT_PK(2,2)      230  5070  198  5068  4610  231
+CONVEX 2298    GT_PK(2,2)      230  5071  197  5070  5065  198
+CONVEX 2299    GT_PK(2,2)      1111  5072  1110  5073  4648  1074
+CONVEX 2300    GT_PK(2,2)      1111  5074  1075  5075  2282  1112
+CONVEX 2301    GT_PK(2,2)      1111  5073  1074  5074  4017  1075
+CONVEX 2302    GT_PK(2,2)      1111  5072  1110  5076  4653  1146
+CONVEX 2303    GT_PK(2,2)      1111  5077  1147  5075  2705  1112
+CONVEX 2304    GT_PK(2,2)      1111  5076  1146  5077  4299  1147
+CONVEX 2305    GT_PK(2,2)      841  5078  840  5079  5080  880
+CONVEX 2306    GT_PK(2,2)      841  5081  842  5082  4658  802
+CONVEX 2307    GT_PK(2,2)      841  5082  802  5083  2937  801
+CONVEX 2308    GT_PK(2,2)      841  5078  840  5083  4655  801
+CONVEX 2309    GT_PK(2,2)      881  5084  920  5085  5086  880
+CONVEX 2310    GT_PK(2,2)      881  5087  841  5085  5079  880
+CONVEX 2311    GT_PK(2,2)      881  5087  841  5088  5081  842
+CONVEX 2312    GT_PK(2,2)      879  5089  840  5090  5080  880
+CONVEX 2313    GT_PK(2,2)      879  5091  839  5092  2521  878
+CONVEX 2314    GT_PK(2,2)      879  5089  840  5091  4656  839
+CONVEX 2315    GT_PK(2,2)      959  5093  920  5094  5095  958
+CONVEX 2316    GT_PK(2,2)      961  5096  962  5097  4018  1000
+CONVEX 2317    GT_PK(2,2)      961  5098  999  5097  4661  1000
+CONVEX 2318    GT_PK(2,2)      961  5096  962  5099  4022  923
+CONVEX 2319    GT_PK(2,2)      998  5100  999  5101  4662  1037
+CONVEX 2320    GT_PK(2,2)      998  5102  1036  5101  4663  1037
+CONVEX 2321    GT_PK(2,2)      1224  5103  1225  5104  4669  1191
+CONVEX 2322    GT_PK(2,2)      1224  5104  1191  5105  4036  1190
+CONVEX 2323    GT_PK(2,2)      1257  5106  1288  5107  4687  1256
+CONVEX 2324    GT_PK(2,2)      1257  5108  1225  5109  4668  1258
+CONVEX 2325    GT_PK(2,2)      1257  5110  1289  5109  4696  1258
+CONVEX 2326    GT_PK(2,2)      1257  5106  1288  5110  4690  1289
+CONVEX 2327    GT_PK(2,2)      1257  5111  1224  5107  5112  1256
+CONVEX 2328    GT_PK(2,2)      1257  5111  1224  5108  5103  1225
+CONVEX 2329    GT_PK(2,2)      1227  5113  1228  5114  4706  1194
+CONVEX 2330    GT_PK(2,2)      1227  5113  1228  5115  4709  1260
+CONVEX 2331    GT_PK(2,2)      1227  5115  1260  5116  4050  1259
+CONVEX 2332    GT_PK(2,2)      1227  5117  1226  5116  4043  1259
+CONVEX 2333    GT_PK(2,2)      1227  5114  1194  5118  4366  1193
+CONVEX 2334    GT_PK(2,2)      1227  5117  1226  5118  4046  1193
+CONVEX 2335    GT_PK(2,2)      541  5119  503  5120  4098  542
+CONVEX 2336    GT_PK(2,2)      541  5119  503  5121  4744  502
+CONVEX 2337    GT_PK(2,2)      658  5122  698  5123  5124  697
+CONVEX 2338    GT_PK(2,2)      658  5125  619  5126  4725  659
+CONVEX 2339    GT_PK(2,2)      658  5122  698  5126  4733  659
+CONVEX 2340    GT_PK(2,2)      737  5127  698  5128  5124  697
+CONVEX 2341    GT_PK(2,2)      737  5128  697  5129  5130  736
+CONVEX 2342    GT_PK(2,2)      737  5131  776  5129  4943  736
+CONVEX 2343    GT_PK(2,2)      737  5131  776  5132  4735  777
+CONVEX 2344    GT_PK(2,2)      737  5132  777  5133  3323  738
+CONVEX 2345    GT_PK(2,2)      737  5127  698  5133  4732  738
+CONVEX 2346    GT_PK(2,2)      616  5134  615  5135  4928  655
+CONVEX 2347    GT_PK(2,2)      696  5136  697  5137  5130  736
+CONVEX 2348    GT_PK(2,2)      696  5138  735  5137  4945  736
+CONVEX 2349    GT_PK(2,2)      696  5139  695  5138  4495  735
+CONVEX 2350    GT_PK(2,2)      918  5140  957  5141  5142  956
+CONVEX 2351    GT_PK(2,2)      918  5143  917  5141  4755  956
+CONVEX 2352    GT_PK(2,2)      918  5143  917  5144  4752  878
+CONVEX 2353    GT_PK(2,2)      918  5145  879  5144  5092  878
+CONVEX 2354    GT_PK(2,2)      595  5146  635  5147  4789  634
+CONVEX 2355    GT_PK(2,2)      595  5148  555  5149  4770  556
+CONVEX 2356    GT_PK(2,2)      595  5150  596  5149  2530  556
+CONVEX 2357    GT_PK(2,2)      595  5146  635  5150  4181  596
+CONVEX 2358    GT_PK(2,2)      554  5151  555  5152  4771  515
+CONVEX 2359    GT_PK(2,2)      554  5153  593  5154  4187  553
+CONVEX 2360    GT_PK(2,2)      551  5155  550  5156  4178  511
+CONVEX 2361    GT_PK(2,2)      551  5157  512  5156  4777  511
+CONVEX 2362    GT_PK(2,2)      630  5158  631  5159  4783  670
+CONVEX 2363    GT_PK(2,2)      630  5160  669  5161  3393  629
+CONVEX 2364    GT_PK(2,2)      630  5160  669  5159  3394  670
+CONVEX 2365    GT_PK(2,2)      750  5162  790  5163  4823  751
+CONVEX 2366    GT_PK(2,2)      750  5164  711  5165  3381  710
+CONVEX 2367    GT_PK(2,2)      750  5163  751  5164  2587  711
+CONVEX 2368    GT_PK(2,2)      750  5162  790  5166  5167  789
+CONVEX 2369    GT_PK(2,2)      750  5168  749  5165  4191  710
+CONVEX 2370    GT_PK(2,2)      750  5166  789  5168  3441  749
+CONVEX 2371    GT_PK(2,2)      829  5169  869  5170  4821  830
+CONVEX 2372    GT_PK(2,2)      829  5171  790  5170  4825  830
+CONVEX 2373    GT_PK(2,2)      829  5169  869  5172  4835  868
+CONVEX 2374    GT_PK(2,2)      829  5171  790  5173  5167  789
+CONVEX 2375    GT_PK(2,2)      829  5174  828  5172  4218  868
+CONVEX 2376    GT_PK(2,2)      829  5174  828  5173  4220  789
+CONVEX 2377    GT_PK(2,2)      946  5175  908  5176  4832  907
+CONVEX 2378    GT_PK(2,2)      946  5177  984  5178  3455  945
+CONVEX 2379    GT_PK(2,2)      946  5176  907  5178  4232  945
+CONVEX 2380    GT_PK(2,2)      946  5175  908  5179  4836  947
+CONVEX 2381    GT_PK(2,2)      946  5177  984  5180  3454  985
+CONVEX 2382    GT_PK(2,2)      946  5179  947  5180  4228  985
+CONVEX 2383    GT_PK(2,2)      995  5181  957  5182  5142  956
+CONVEX 2384    GT_PK(2,2)      995  5183  994  5182  4251  956
+CONVEX 2385    GT_PK(2,2)      995  5183  994  5184  4248  1033
+CONVEX 2386    GT_PK(2,2)      995  5185  1034  5184  4845  1033
+CONVEX 2387    GT_PK(2,2)      1176  5186  1142  5187  4847  1141
+CONVEX 2388    GT_PK(2,2)      1176  5188  1209  5189  4853  1210
+CONVEX 2389    GT_PK(2,2)      1107  5190  1142  5191  4846  1106
+CONVEX 2390    GT_PK(2,2)      1107  5191  1106  5192  5193  1070
+CONVEX 2391    GT_PK(2,2)      1107  5194  1071  5192  4841  1070
+CONVEX 2392    GT_PK(2,2)      1107  5194  1071  5195  4843  1108
+CONVEX 2393    GT_PK(2,2)      1143  5196  1144  5197  3548  1178
+CONVEX 2394    GT_PK(2,2)      1143  5198  1107  5199  5190  1142
+CONVEX 2395    GT_PK(2,2)      1143  5196  1144  5200  4013  1108
+CONVEX 2396    GT_PK(2,2)      1143  5198  1107  5200  5195  1108
+CONVEX 2397    GT_PK(2,2)      1068  5201  1104  5202  4850  1067
+CONVEX 2398    GT_PK(2,2)      1068  5203  1030  5202  2613  1067
+CONVEX 2399    GT_PK(2,2)      1068  5204  1031  5203  3466  1030
+CONVEX 2400    GT_PK(2,2)      1358  5205  1357  5206  5207  1381
+CONVEX 2401    GT_PK(2,2)      1358  5208  1382  5206  4860  1381
+CONVEX 2402    GT_PK(2,2)      1358  5209  1332  5205  5210  1357
+CONVEX 2403    GT_PK(2,2)      1358  5209  1332  5211  4870  1333
+CONVEX 2404    GT_PK(2,2)      1359  5212  1333  5213  4281  1334
+CONVEX 2405    GT_PK(2,2)      1359  5214  1360  5213  2687  1334
+CONVEX 2406    GT_PK(2,2)      1359  5215  1358  5212  5211  1333
+CONVEX 2407    GT_PK(2,2)      1359  5215  1358  5216  5208  1382
+CONVEX 2408    GT_PK(2,2)      1359  5214  1360  5217  2683  1383
+CONVEX 2409    GT_PK(2,2)      1359  5216  1382  5217  4858  1383
+CONVEX 2410    GT_PK(2,2)      1355  5218  1379  5219  5220  1378
+CONVEX 2411    GT_PK(2,2)      1355  5218  1379  5221  5222  1356
+CONVEX 2412    GT_PK(2,2)      1399  5223  1377  5224  4871  1398
+CONVEX 2413    GT_PK(2,2)      1399  5225  1418  5226  5227  1378
+CONVEX 2414    GT_PK(2,2)      1399  5223  1377  5226  5228  1378
+CONVEX 2415    GT_PK(2,2)      1301  5229  1328  5230  5231  1329
+CONVEX 2416    GT_PK(2,2)      1301  5232  1302  5230  5233  1329
+CONVEX 2417    GT_PK(2,2)      1301  5234  1271  5235  2745  1272
+CONVEX 2418    GT_PK(2,2)      1301  5232  1302  5235  4877  1272
+CONVEX 2419    GT_PK(2,2)      1330  5236  1302  5237  5233  1329
+CONVEX 2420    GT_PK(2,2)      1330  5238  1355  5237  5239  1329
+CONVEX 2421    GT_PK(2,2)      1330  5238  1355  5240  5221  1356
+CONVEX 2422    GT_PK(2,2)      1330  5236  1302  5241  4876  1303
+CONVEX 2423    GT_PK(2,2)      1331  5242  1304  5243  3622  1303
+CONVEX 2424    GT_PK(2,2)      1331  5244  1330  5243  5241  1303
+CONVEX 2425    GT_PK(2,2)      1331  5244  1330  5245  5240  1356
+CONVEX 2426    GT_PK(2,2)      1331  5246  1332  5242  4869  1304
+CONVEX 2427    GT_PK(2,2)      1331  5246  1332  5247  5210  1357
+CONVEX 2428    GT_PK(2,2)      1331  5245  1356  5247  5248  1357
+CONVEX 2429    GT_PK(2,2)      1401  5249  1420  5250  4878  1402
+CONVEX 2430    GT_PK(2,2)      1401  5249  1420  5251  5252  1419
+CONVEX 2431    GT_PK(2,2)      1380  5253  1402  5254  4280  1381
+CONVEX 2432    GT_PK(2,2)      1380  5255  1357  5254  5207  1381
+CONVEX 2433    GT_PK(2,2)      1380  5256  1401  5253  5250  1402
+CONVEX 2434    GT_PK(2,2)      1380  5256  1401  5257  5258  1379
+CONVEX 2435    GT_PK(2,2)      1380  5259  1356  5255  5248  1357
+CONVEX 2436    GT_PK(2,2)      1380  5257  1379  5259  5222  1356
+CONVEX 2437    GT_PK(2,2)      1047  5260  1085  5261  4887  1048
+CONVEX 2438    GT_PK(2,2)      1047  5261  1048  5262  4883  1009
+CONVEX 2439    GT_PK(2,2)      1047  5263  1008  5262  2768  1009
+CONVEX 2440    GT_PK(2,2)      1047  5263  1008  5264  3672  1046
+CONVEX 2441    GT_PK(2,2)      1084  5265  1121  5266  4341  1120
+CONVEX 2442    GT_PK(2,2)      1084  5267  1085  5265  4886  1121
+CONVEX 2443    GT_PK(2,2)      1084  5266  1120  5268  4084  1083
+CONVEX 2444    GT_PK(2,2)      1084  5269  1047  5267  5260  1085
+CONVEX 2445    GT_PK(2,2)      1084  5268  1083  5270  2751  1046
+CONVEX 2446    GT_PK(2,2)      1084  5269  1047  5270  5264  1046
+CONVEX 2447    GT_PK(2,2)      205  5271  204  5272  4906  173
+CONVEX 2448    GT_PK(2,2)      205  5273  238  5274  5275  206
+CONVEX 2449    GT_PK(2,2)      239  5276  273  5277  4400  240
+CONVEX 2450    GT_PK(2,2)      239  5277  240  5278  4992  207
+CONVEX 2451    GT_PK(2,2)      239  5276  273  5279  4398  272
+CONVEX 2452    GT_PK(2,2)      239  5280  238  5279  4895  272
+CONVEX 2453    GT_PK(2,2)      239  5278  207  5281  5016  206
+CONVEX 2454    GT_PK(2,2)      239  5280  238  5281  5275  206
+CONVEX 2455    GT_PK(2,2)      237  5282  270  5283  5284  236
+CONVEX 2456    GT_PK(2,2)      237  5285  205  5286  5273  238
+CONVEX 2457    GT_PK(2,2)      237  5286  238  5287  4894  271
+CONVEX 2458    GT_PK(2,2)      237  5282  270  5287  4902  271
+CONVEX 2459    GT_PK(2,2)      237  5283  236  5288  4898  204
+CONVEX 2460    GT_PK(2,2)      237  5285  205  5288  5271  204
+CONVEX 2461    GT_PK(2,2)      269  5289  304  5290  2016  303
+CONVEX 2462    GT_PK(2,2)      269  5291  270  5289  4901  304
+CONVEX 2463    GT_PK(2,2)      269  5292  268  5290  2232  303
+CONVEX 2464    GT_PK(2,2)      269  5291  270  5293  5284  236
+CONVEX 2465    GT_PK(2,2)      269  5294  235  5292  2887  268
+CONVEX 2466    GT_PK(2,2)      269  5293  236  5294  4896  235
+CONVEX 2467    GT_PK(2,2)      171  5295  172  5296  4904  203
+CONVEX 2468    GT_PK(2,2)      171  5296  203  5297  2892  202
+CONVEX 2469    GT_PK(2,2)      171  5298  170  5297  3712  202
+CONVEX 2470    GT_PK(2,2)      171  5298  170  5299  3720  141
+CONVEX 2471    GT_PK(2,2)      115  5300  116  5301  3704  90
+CONVEX 2472    GT_PK(2,2)      115  5302  89  5301  2827  90
+CONVEX 2473    GT_PK(2,2)      115  5302  89  5303  2829  114
+CONVEX 2474    GT_PK(2,2)      143  5304  172  5305  4905  173
+CONVEX 2475    GT_PK(2,2)      143  5306  115  5307  5300  116
+CONVEX 2476    GT_PK(2,2)      850  5308  890  5309  4947  851
+CONVEX 2477    GT_PK(2,2)      850  5310  810  5311  4958  849
+CONVEX 2478    GT_PK(2,2)      850  5311  849  5312  4488  889
+CONVEX 2479    GT_PK(2,2)      850  5308  890  5312  4949  889
+CONVEX 2480    GT_PK(2,2)      811  5313  851  5314  4938  812
+CONVEX 2481    GT_PK(2,2)      811  5315  810  5316  4960  771
+CONVEX 2482    GT_PK(2,2)      811  5317  850  5313  5309  851
+CONVEX 2483    GT_PK(2,2)      811  5317  850  5315  5310  810
+CONVEX 2484    GT_PK(2,2)      811  5318  772  5316  4485  771
+CONVEX 2485    GT_PK(2,2)      811  5318  772  5314  4480  812
+CONVEX 2486    GT_PK(2,2)      513  5319  474  5320  4969  512
+CONVEX 2487    GT_PK(2,2)      513  5319  474  5321  4965  475
+CONVEX 2488    GT_PK(2,2)      119  5322  94  5323  5006  93
+CONVEX 2489    GT_PK(2,2)      119  5322  94  5324  5001  120
+CONVEX 2490    GT_PK(2,2)      145  5325  175  5326  5327  146
+CONVEX 2491    GT_PK(2,2)      176  5328  208  5329  4998  177
+CONVEX 2492    GT_PK(2,2)      176  5330  175  5331  5327  146
+CONVEX 2493    GT_PK(2,2)      176  5328  208  5332  4991  207
+CONVEX 2494    GT_PK(2,2)      176  5330  175  5332  5014  207
+CONVEX 2495    GT_PK(2,2)      407  5333  446  5334  4568  445
+CONVEX 2496    GT_PK(2,2)      407  5335  406  5334  5028  445
+CONVEX 2497    GT_PK(2,2)      297  5336  263  5337  4577  298
+CONVEX 2498    GT_PK(2,2)      297  5338  333  5337  5339  298
+CONVEX 2499    GT_PK(2,2)      369  5340  406  5341  5025  368
+CONVEX 2500    GT_PK(2,2)      369  5342  407  5340  5335  406
+CONVEX 2501    GT_PK(2,2)      336  5343  301  5344  5345  300
+CONVEX 2502    GT_PK(2,2)      335  5346  336  5347  5348  372
+CONVEX 2503    GT_PK(2,2)      335  5349  299  5350  5035  300
+CONVEX 2504    GT_PK(2,2)      335  5346  336  5350  5344  300
+CONVEX 2505    GT_PK(2,2)      266  5351  265  5352  5037  232
+CONVEX 2506    GT_PK(2,2)      266  5352  232  5353  3965  233
+CONVEX 2507    GT_PK(2,2)      266  5354  267  5353  4574  233
+CONVEX 2508    GT_PK(2,2)      266  5355  301  5354  5029  267
+CONVEX 2509    GT_PK(2,2)      266  5355  301  5356  5345  300
+CONVEX 2510    GT_PK(2,2)      266  5351  265  5356  5034  300
+CONVEX 2511    GT_PK(2,2)      229  5357  230  5358  5069  263
+CONVEX 2512    GT_PK(2,2)      229  5359  197  5360  4641  196
+CONVEX 2513    GT_PK(2,2)      229  5357  230  5359  5071  197
+CONVEX 2514    GT_PK(2,2)      450  5361  412  5362  5048  451
+CONVEX 2515    GT_PK(2,2)      450  5361  412  5363  5052  411
+CONVEX 2516    GT_PK(2,2)      450  5364  489  5362  2836  451
+CONVEX 2517    GT_PK(2,2)      450  5365  488  5364  3886  489
+CONVEX 2518    GT_PK(2,2)      448  5366  486  5367  4517  447
+CONVEX 2519    GT_PK(2,2)      448  5368  487  5366  4511  486
+CONVEX 2520    GT_PK(2,2)      921  5369  881  5370  5084  920
+CONVEX 2521    GT_PK(2,2)      921  5371  959  5370  5093  920
+CONVEX 2522    GT_PK(2,2)      960  5372  961  5373  5098  999
+CONVEX 2523    GT_PK(2,2)      960  5374  998  5373  5100  999
+CONVEX 2524    GT_PK(2,2)      960  5374  998  5375  5376  959
+CONVEX 2525    GT_PK(2,2)      960  5377  921  5375  5371  959
+CONVEX 2526    GT_PK(2,2)      997  5378  1036  5379  4666  1035
+CONVEX 2527    GT_PK(2,2)      997  5380  998  5378  5102  1036
+CONVEX 2528    GT_PK(2,2)      997  5381  959  5382  5094  958
+CONVEX 2529    GT_PK(2,2)      997  5380  998  5381  5376  959
+CONVEX 2530    GT_PK(2,2)      1223  5383  1255  5384  4677  1256
+CONVEX 2531    GT_PK(2,2)      1223  5385  1224  5384  5112  1256
+CONVEX 2532    GT_PK(2,2)      1223  5383  1255  5386  4679  1222
+CONVEX 2533    GT_PK(2,2)      1223  5385  1224  5387  5105  1190
+CONVEX 2534    GT_PK(2,2)      1223  5386  1222  5388  2309  1189
+CONVEX 2535    GT_PK(2,2)      1223  5387  1190  5388  3242  1189
+CONVEX 2536    GT_PK(2,2)      581  5389  541  5390  5120  542
+CONVEX 2537    GT_PK(2,2)      581  5391  620  5392  4721  621
+CONVEX 2538    GT_PK(2,2)      581  5390  542  5393  3282  582
+CONVEX 2539    GT_PK(2,2)      581  5392  621  5393  3304  582
+CONVEX 2540    GT_PK(2,2)      657  5394  658  5395  5123  697
+CONVEX 2541    GT_PK(2,2)      657  5396  696  5395  5136  697
+CONVEX 2542    GT_PK(2,2)      618  5397  658  5398  5125  619
+CONVEX 2543    GT_PK(2,2)      618  5399  657  5400  5401  617
+CONVEX 2544    GT_PK(2,2)      618  5399  657  5397  5394  658
+CONVEX 2545    GT_PK(2,2)      576  5402  616  5403  5134  615
+CONVEX 2546    GT_PK(2,2)      576  5404  536  5405  3776  575
+CONVEX 2547    GT_PK(2,2)      576  5403  615  5405  3854  575
+CONVEX 2548    GT_PK(2,2)      656  5406  616  5407  5408  617
+CONVEX 2549    GT_PK(2,2)      656  5409  657  5407  5401  617
+CONVEX 2550    GT_PK(2,2)      656  5409  657  5410  5396  696
+CONVEX 2551    GT_PK(2,2)      656  5410  696  5411  5139  695
+CONVEX 2552    GT_PK(2,2)      656  5411  695  5412  3849  655
+CONVEX 2553    GT_PK(2,2)      656  5406  616  5412  5135  655
+CONVEX 2554    GT_PK(2,2)      540  5413  541  5414  5121  502
+CONVEX 2555    GT_PK(2,2)      462  5415  461  5416  4719  423
+CONVEX 2556    GT_PK(2,2)      462  5417  424  5416  4922  423
+CONVEX 2557    GT_PK(2,2)      462  5417  424  5418  4923  463
+CONVEX 2558    GT_PK(2,2)      919  5419  957  5420  5421  958
+CONVEX 2559    GT_PK(2,2)      919  5422  918  5419  5140  957
+CONVEX 2560    GT_PK(2,2)      919  5423  920  5420  5095  958
+CONVEX 2561    GT_PK(2,2)      919  5423  920  5424  5086  880
+CONVEX 2562    GT_PK(2,2)      919  5425  879  5424  5090  880
+CONVEX 2563    GT_PK(2,2)      919  5422  918  5425  5145  879
+CONVEX 2564    GT_PK(2,2)      594  5426  633  5427  4800  593
+CONVEX 2565    GT_PK(2,2)      594  5428  554  5427  5153  593
+CONVEX 2566    GT_PK(2,2)      594  5426  633  5429  4798  634
+CONVEX 2567    GT_PK(2,2)      594  5428  554  5430  5151  555
+CONVEX 2568    GT_PK(2,2)      594  5431  595  5429  5147  634
+CONVEX 2569    GT_PK(2,2)      594  5431  595  5430  5148  555
+CONVEX 2570    GT_PK(2,2)      514  5432  476  5433  4772  475
+CONVEX 2571    GT_PK(2,2)      514  5434  554  5435  5154  553
+CONVEX 2572    GT_PK(2,2)      514  5432  476  5436  4774  515
+CONVEX 2573    GT_PK(2,2)      514  5434  554  5436  5152  515
+CONVEX 2574    GT_PK(2,2)      514  5437  513  5435  5438  553
+CONVEX 2575    GT_PK(2,2)      514  5437  513  5433  5321  475
+CONVEX 2576    GT_PK(2,2)      591  5439  631  5440  4782  592
+CONVEX 2577    GT_PK(2,2)      591  5441  630  5439  5158  631
+CONVEX 2578    GT_PK(2,2)      590  5442  630  5443  5161  629
+CONVEX 2579    GT_PK(2,2)      590  5444  589  5443  2028  629
+CONVEX 2580    GT_PK(2,2)      590  5445  550  5444  4176  589
+CONVEX 2581    GT_PK(2,2)      590  5446  591  5442  5441  630
+CONVEX 2582    GT_PK(2,2)      590  5447  551  5445  5155  550
+CONVEX 2583    GT_PK(2,2)      590  5446  591  5447  5448  551
+CONVEX 2584    GT_PK(2,2)      1177  5449  1176  5450  5186  1142
+CONVEX 2585    GT_PK(2,2)      1177  5451  1143  5452  5197  1178
+CONVEX 2586    GT_PK(2,2)      1177  5451  1143  5450  5199  1142
+CONVEX 2587    GT_PK(2,2)      1177  5452  1178  5453  2692  1211
+CONVEX 2588    GT_PK(2,2)      1177  5454  1210  5453  4268  1211
+CONVEX 2589    GT_PK(2,2)      1177  5449  1176  5454  5189  1210
+CONVEX 2590    GT_PK(2,2)      1175  5455  1176  5456  5188  1209
+CONVEX 2591    GT_PK(2,2)      1175  5457  1174  5458  3495  1208
+CONVEX 2592    GT_PK(2,2)      1175  5456  1209  5458  4856  1208
+CONVEX 2593    GT_PK(2,2)      1175  5457  1174  5459  3501  1140
+CONVEX 2594    GT_PK(2,2)      1175  5460  1141  5459  5461  1140
+CONVEX 2595    GT_PK(2,2)      1175  5455  1176  5460  5187  1141
+CONVEX 2596    GT_PK(2,2)      1105  5462  1068  5463  5201  1104
+CONVEX 2597    GT_PK(2,2)      1105  5464  1106  5465  4848  1141
+CONVEX 2598    GT_PK(2,2)      1105  5465  1141  5466  5461  1140
+CONVEX 2599    GT_PK(2,2)      1105  5463  1104  5466  4852  1140
+CONVEX 2600    GT_PK(2,2)      1069  5467  1106  5468  5193  1070
+CONVEX 2601    GT_PK(2,2)      1069  5469  1068  5470  5204  1031
+CONVEX 2602    GT_PK(2,2)      1069  5471  1105  5467  5464  1106
+CONVEX 2603    GT_PK(2,2)      1069  5471  1105  5469  5462  1068
+CONVEX 2604    GT_PK(2,2)      1069  5472  1032  5468  3465  1070
+CONVEX 2605    GT_PK(2,2)      1069  5470  1031  5472  3470  1032
+CONVEX 2606    GT_PK(2,2)      1354  5473  1377  5474  4872  1353
+CONVEX 2607    GT_PK(2,2)      1354  5475  1328  5474  4873  1353
+CONVEX 2608    GT_PK(2,2)      1354  5473  1377  5476  5228  1378
+CONVEX 2609    GT_PK(2,2)      1354  5477  1355  5476  5219  1378
+CONVEX 2610    GT_PK(2,2)      1354  5475  1328  5478  5231  1329
+CONVEX 2611    GT_PK(2,2)      1354  5477  1355  5478  5239  1329
+CONVEX 2612    GT_PK(2,2)      1300  5479  1328  5480  4874  1327
+CONVEX 2613    GT_PK(2,2)      1300  5481  1301  5479  5229  1328
+CONVEX 2614    GT_PK(2,2)      1300  5482  1299  5483  2725  1270
+CONVEX 2615    GT_PK(2,2)      1300  5482  1299  5480  3575  1327
+CONVEX 2616    GT_PK(2,2)      1300  5484  1271  5483  3614  1270
+CONVEX 2617    GT_PK(2,2)      1300  5481  1301  5484  5234  1271
+CONVEX 2618    GT_PK(2,2)      1400  5485  1401  5486  5258  1379
+CONVEX 2619    GT_PK(2,2)      1400  5487  1418  5488  5227  1378
+CONVEX 2620    GT_PK(2,2)      1400  5486  1379  5488  5220  1378
+CONVEX 2621    GT_PK(2,2)      1400  5489  1419  5487  5490  1418
+CONVEX 2622    GT_PK(2,2)      1400  5485  1401  5489  5251  1419
+CONVEX 2623    GT_PK(2,2)      174  5491  205  5492  5272  173
+CONVEX 2624    GT_PK(2,2)      174  5493  145  5494  5325  175
+CONVEX 2625    GT_PK(2,2)      174  5494  175  5495  5015  206
+CONVEX 2626    GT_PK(2,2)      174  5491  205  5495  5274  206
+CONVEX 2627    GT_PK(2,2)      142  5496  171  5497  5295  172
+CONVEX 2628    GT_PK(2,2)      142  5498  143  5497  5304  172
+CONVEX 2629    GT_PK(2,2)      142  5496  171  5499  5299  141
+CONVEX 2630    GT_PK(2,2)      142  5498  143  5500  5306  115
+CONVEX 2631    GT_PK(2,2)      142  5499  141  5501  3113  114
+CONVEX 2632    GT_PK(2,2)      142  5500  115  5501  5303  114
+CONVEX 2633    GT_PK(2,2)      552  5502  513  5503  5320  512
+CONVEX 2634    GT_PK(2,2)      552  5504  551  5503  5157  512
+CONVEX 2635    GT_PK(2,2)      552  5505  592  5506  4188  553
+CONVEX 2636    GT_PK(2,2)      552  5502  513  5506  5438  553
+CONVEX 2637    GT_PK(2,2)      552  5507  591  5505  5440  592
+CONVEX 2638    GT_PK(2,2)      552  5507  591  5504  5448  551
+CONVEX 2639    GT_PK(2,2)      144  5508  143  5509  5305  173
+CONVEX 2640    GT_PK(2,2)      144  5510  174  5509  5492  173
+CONVEX 2641    GT_PK(2,2)      144  5510  174  5511  5493  145
+CONVEX 2642    GT_PK(2,2)      144  5508  143  5512  5307  116
+CONVEX 2643    GT_PK(2,2)      118  5513  119  5514  5515  146
+CONVEX 2644    GT_PK(2,2)      118  5516  145  5514  5326  146
+CONVEX 2645    GT_PK(2,2)      118  5513  119  5517  5323  93
+CONVEX 2646    GT_PK(2,2)      118  5517  93  5518  3937  92
+CONVEX 2647    GT_PK(2,2)      147  5519  176  5520  5329  177
+CONVEX 2648    GT_PK(2,2)      147  5521  148  5522  4988  120
+CONVEX 2649    GT_PK(2,2)      147  5521  148  5520  4983  177
+CONVEX 2650    GT_PK(2,2)      147  5519  176  5523  5331  146
+CONVEX 2651    GT_PK(2,2)      147  5524  119  5522  5324  120
+CONVEX 2652    GT_PK(2,2)      147  5524  119  5523  5515  146
+CONVEX 2653    GT_PK(2,2)      408  5525  446  5526  4570  447
+CONVEX 2654    GT_PK(2,2)      408  5527  407  5525  5333  446
+CONVEX 2655    GT_PK(2,2)      332  5528  297  5529  5338  333
+CONVEX 2656    GT_PK(2,2)      332  5530  368  5531  4566  331
+CONVEX 2657    GT_PK(2,2)      332  5532  369  5530  5341  368
+CONVEX 2658    GT_PK(2,2)      332  5532  369  5529  5533  333
+CONVEX 2659    GT_PK(2,2)      262  5534  297  5535  5336  263
+CONVEX 2660    GT_PK(2,2)      262  5536  229  5535  5358  263
+CONVEX 2661    GT_PK(2,2)      373  5537  336  5538  5348  372
+CONVEX 2662    GT_PK(2,2)      373  5539  410  5538  5540  372
+CONVEX 2663    GT_PK(2,2)      373  5541  411  5542  5053  374
+CONVEX 2664    GT_PK(2,2)      373  5539  410  5541  5543  411
+CONVEX 2665    GT_PK(2,2)      228  5544  261  5545  5044  227
+CONVEX 2666    GT_PK(2,2)      228  5546  229  5547  5360  196
+CONVEX 2667    GT_PK(2,2)      228  5548  262  5544  5549  261
+CONVEX 2668    GT_PK(2,2)      228  5548  262  5546  5536  229
+CONVEX 2669    GT_PK(2,2)      228  5550  195  5547  3960  196
+CONVEX 2670    GT_PK(2,2)      228  5545  227  5550  4596  195
+CONVEX 2671    GT_PK(2,2)      449  5551  448  5552  5368  487
+CONVEX 2672    GT_PK(2,2)      449  5552  487  5553  4510  488
+CONVEX 2673    GT_PK(2,2)      449  5554  450  5553  5365  488
+CONVEX 2674    GT_PK(2,2)      449  5554  450  5555  5363  411
+CONVEX 2675    GT_PK(2,2)      449  5556  410  5555  5543  411
+CONVEX 2676    GT_PK(2,2)      449  5551  448  5556  5557  410
+CONVEX 2677    GT_PK(2,2)      882  5558  921  5559  5369  881
+CONVEX 2678    GT_PK(2,2)      882  5560  843  5561  3800  883
+CONVEX 2679    GT_PK(2,2)      882  5562  842  5560  4659  843
+CONVEX 2680    GT_PK(2,2)      882  5559  881  5562  5088  842
+CONVEX 2681    GT_PK(2,2)      922  5563  960  5564  5377  921
+CONVEX 2682    GT_PK(2,2)      922  5565  883  5566  3797  923
+CONVEX 2683    GT_PK(2,2)      922  5567  961  5566  5099  923
+CONVEX 2684    GT_PK(2,2)      922  5563  960  5567  5372  961
+CONVEX 2685    GT_PK(2,2)      922  5568  882  5565  5561  883
+CONVEX 2686    GT_PK(2,2)      922  5568  882  5564  5558  921
+CONVEX 2687    GT_PK(2,2)      996  5569  995  5570  5181  957
+CONVEX 2688    GT_PK(2,2)      996  5570  957  5571  5421  958
+CONVEX 2689    GT_PK(2,2)      996  5572  997  5571  5382  958
+CONVEX 2690    GT_PK(2,2)      996  5572  997  5573  5379  1035
+CONVEX 2691    GT_PK(2,2)      996  5574  1034  5573  4839  1035
+CONVEX 2692    GT_PK(2,2)      996  5569  995  5574  5185  1034
+CONVEX 2693    GT_PK(2,2)      578  5575  618  5576  5400  617
+CONVEX 2694    GT_PK(2,2)      578  5577  538  5578  5579  539
+CONVEX 2695    GT_PK(2,2)      580  5580  540  5581  5413  541
+CONVEX 2696    GT_PK(2,2)      580  5582  620  5583  4724  619
+CONVEX 2697    GT_PK(2,2)      580  5584  581  5582  5391  620
+CONVEX 2698    GT_PK(2,2)      580  5584  581  5581  5389  541
+CONVEX 2699    GT_PK(2,2)      579  5585  540  5586  5587  539
+CONVEX 2700    GT_PK(2,2)      579  5588  578  5586  5578  539
+CONVEX 2701    GT_PK(2,2)      579  5588  578  5589  5575  618
+CONVEX 2702    GT_PK(2,2)      579  5589  618  5590  5398  619
+CONVEX 2703    GT_PK(2,2)      579  5591  580  5590  5583  619
+CONVEX 2704    GT_PK(2,2)      579  5591  580  5585  5580  540
+CONVEX 2705    GT_PK(2,2)      501  5592  540  5593  5587  539
+CONVEX 2706    GT_PK(2,2)      501  5594  462  5595  5418  463
+CONVEX 2707    GT_PK(2,2)      501  5595  463  5596  4741  502
+CONVEX 2708    GT_PK(2,2)      501  5592  540  5596  5414  502
+CONVEX 2709    GT_PK(2,2)      577  5597  576  5598  5402  616
+CONVEX 2710    GT_PK(2,2)      577  5598  616  5599  5408  617
+CONVEX 2711    GT_PK(2,2)      577  5600  578  5599  5576  617
+CONVEX 2712    GT_PK(2,2)      577  5600  578  5601  5577  538
+CONVEX 2713    GT_PK(2,2)      500  5602  462  5603  5415  461
+CONVEX 2714    GT_PK(2,2)      500  5604  538  5605  5579  539
+CONVEX 2715    GT_PK(2,2)      500  5606  501  5605  5593  539
+CONVEX 2716    GT_PK(2,2)      500  5606  501  5602  5594  462
+CONVEX 2717    GT_PK(2,2)      500  5603  461  5607  4718  499
+CONVEX 2718    GT_PK(2,2)      500  5604  538  5607  5608  499
+CONVEX 2719    GT_PK(2,2)      117  5609  118  5610  5518  92
+CONVEX 2720    GT_PK(2,2)      117  5611  144  5612  5512  116
+CONVEX 2721    GT_PK(2,2)      117  5611  144  5613  5511  145
+CONVEX 2722    GT_PK(2,2)      117  5609  118  5613  5516  145
+CONVEX 2723    GT_PK(2,2)      117  5614  91  5610  4911  92
+CONVEX 2724    GT_PK(2,2)      117  5612  116  5614  3703  91
+CONVEX 2725    GT_PK(2,2)      409  5615  410  5616  5540  372
+CONVEX 2726    GT_PK(2,2)      409  5617  408  5618  5526  447
+CONVEX 2727    GT_PK(2,2)      409  5619  448  5618  5367  447
+CONVEX 2728    GT_PK(2,2)      409  5619  448  5615  5557  410
+CONVEX 2729    GT_PK(2,2)      371  5620  335  5621  5347  372
+CONVEX 2730    GT_PK(2,2)      371  5622  409  5621  5616  372
+CONVEX 2731    GT_PK(2,2)      371  5622  409  5623  5617  408
+CONVEX 2732    GT_PK(2,2)      296  5624  262  5625  5534  297
+CONVEX 2733    GT_PK(2,2)      296  5626  331  5627  3954  295
+CONVEX 2734    GT_PK(2,2)      296  5628  261  5627  5047  295
+CONVEX 2735    GT_PK(2,2)      296  5624  262  5628  5549  261
+CONVEX 2736    GT_PK(2,2)      296  5629  332  5626  5531  331
+CONVEX 2737    GT_PK(2,2)      296  5629  332  5625  5528  297
+CONVEX 2738    GT_PK(2,2)      337  5630  373  5631  5537  336
+CONVEX 2739    GT_PK(2,2)      337  5631  336  5632  5343  301
+CONVEX 2740    GT_PK(2,2)      337  5633  374  5634  4602  338
+CONVEX 2741    GT_PK(2,2)      337  5630  373  5633  5542  374
+CONVEX 2742    GT_PK(2,2)      337  5634  338  5635  3095  302
+CONVEX 2743    GT_PK(2,2)      337  5632  301  5635  5030  302
+CONVEX 2744    GT_PK(2,2)      537  5636  577  5637  5597  576
+CONVEX 2745    GT_PK(2,2)      537  5638  536  5639  2990  498
+CONVEX 2746    GT_PK(2,2)      537  5637  576  5638  5404  536
+CONVEX 2747    GT_PK(2,2)      537  5640  499  5639  4100  498
+CONVEX 2748    GT_PK(2,2)      537  5641  538  5640  5608  499
+CONVEX 2749    GT_PK(2,2)      537  5636  577  5641  5601  538
+CONVEX 2750    GT_PK(2,2)      334  5642  371  5643  5620  335
+CONVEX 2751    GT_PK(2,2)      334  5643  335  5644  5349  299
+CONVEX 2752    GT_PK(2,2)      334  5645  333  5646  5339  298
+CONVEX 2753    GT_PK(2,2)      334  5644  299  5646  5032  298
+CONVEX 2754    GT_PK(2,2)      370  5647  408  5648  5527  407
+CONVEX 2755    GT_PK(2,2)      370  5649  371  5647  5623  408
+CONVEX 2756    GT_PK(2,2)      370  5650  369  5648  5342  407
+CONVEX 2757    GT_PK(2,2)      370  5651  334  5649  5642  371
+CONVEX 2758    GT_PK(2,2)      370  5650  369  5652  5533  333
+CONVEX 2759    GT_PK(2,2)      370  5651  334  5652  5645  333
 
 END MESH STRUCTURE DESCRIPTION
diff --git a/tests/meshes/disc_P2_h5.5.mesh b/tests/meshes/disc_P2_h10.mesh
old mode 100755
new mode 100644
similarity index 100%
rename from tests/meshes/disc_P2_h5.5.mesh
rename to tests/meshes/disc_P2_h10.mesh
diff --git a/tests/meshes/disc_P2_h2.mesh b/tests/meshes/disc_P2_h2.mesh
old mode 100755
new mode 100644
index 8a11842..35b2731
--- a/tests/meshes/disc_P2_h2.mesh
+++ b/tests/meshes/disc_P2_h2.mesh
@@ -10,312 +10,1392 @@ BEGIN POINTS LIST
   POINT  2  -20  20
   POINT  3  20  20
   POINT  4  0  40
-  POINT  5  -10.98978892636249  3.289986853546615
-  POINT  6  -7.455051935387742  1.441384732666446
-  POINT  7  -3.676797270081755  0.3408758629801169
-  POINT  8  3.676739140647854  0.3408649912656072
-  POINT  9  7.454956757891998  1.441346499866884
-  POINT  10  10.98967587538561  3.289912503101757
-  POINT  11  -14.0168269073075  5.73365626899654
-  POINT  12  -8.695621440244636  6.296208976859693
-  POINT  13  -4.394745255440499  5.015856566647908
-  POINT  14  -2.026216535175318e-05  4.385124114216329
-  POINT  15  4.394708091285465  5.015856253328598
-  POINT  16  8.695583210536949  6.296192236703892
-  POINT  17  14.01674847505161  5.733579208955796
-  POINT  18  -16.59751417751507  8.841033957952504
-  POINT  19  -11.67153666400569  9.560370517352128
-  POINT  20  -6.622536405170427  9.609178468908505
-  POINT  21  -2.162226938155009  8.907447576607822
-  POINT  22  2.162220418053965  8.907449303560238
-  POINT  23  6.62252892316614  9.609178885793535
-  POINT  24  11.67152235457562  9.560353456050622
-  POINT  25  16.59746793653143  8.840965180813091
-  POINT  26  -18.49296961576042  12.38356548043812
-  POINT  27  -14.03986978753954  13.21961891707463
-  POINT  28  -9.212447689054923  13.42718043490255
-  POINT  29  -4.546978357052273  13.23975192949301
-  POINT  30  5.760553932435131e-06  13.09029577543401
-  POINT  31  4.546984712272912  13.2397591385677
-  POINT  32  9.212451943525352  13.42717994917974
-  POINT  33  14.03987180658499  13.21960569166439
-  POINT  34  18.49294552140193  12.3835069787666
-  POINT  35  -19.60575567023449  16.04850096809653
-  POINT  36  -15.59452670078516  17.30489743540965
-  POINT  37  -11.19255363614599  17.32291243784231
-  POINT  38  -6.720002186738463  17.55851232809086
-  POINT  39  -2.521105171955536  17.0288301192291
-  POINT  40  2.521117530994832  17.02884382666544
-  POINT  41  6.720008173371727  17.55852412828754
-  POINT  42  11.19255813733148  17.32291152297285
-  POINT  43  15.59452813708109  17.30489873028883
-  POINT  44  19.60574841112116  16.04846495145881
-  POINT  45  -16.35730659116254  21.75725594233062
-  POINT  46  -12.54544836995473  21.48138724705098
-  POINT  47  -8.37129847568881  21.60726175061301
-  POINT  48  -4.053718777686841  21.85246502790269
-  POINT  49  -1.430589398276894e-05  24.01054233578156
-  POINT  50  4.05371501425693  21.85249206836341
-  POINT  51  8.371300119263841  21.60726988024046
-  POINT  52  12.54545081863551  21.48139080472586
-  POINT  53  16.35731330216852  21.75725990853536
-  POINT  54  -19.41056153872311  24.81976148284177
-  POINT  55  -14.80560392580181  26.07573876068267
-  POINT  56  -10.66746926752378  25.66425346686257
-  POINT  57  -6.065699906353569  25.80431103098134
-  POINT  58  -2.285109034351877  27.41452583361899
-  POINT  59  2.285117889708415  27.41450890210915
-  POINT  60  6.065725475366363  25.80433146618176
-  POINT  61  10.66748147994728  25.66426492608582
-  POINT  62  14.80560831647502  26.07574769863441
-  POINT  63  19.41055542162303  24.81978611809871
-  POINT  64  -17.79052993253167  29.13767173407599
-  POINT  65  -12.53266642765302  30.28076603601422
-  POINT  66  -8.408829224822554  29.44178330973553
-  POINT  67  -4.486611626819454  30.93433334096026
-  POINT  68  -3.455844492966306e-06  31.78686138258002
-  POINT  69  4.486608079340947  30.93433387532503
-  POINT  70  8.408846377235559  29.44180970477908
-  POINT  71  12.53266137297764  30.28079181313681
-  POINT  72  17.79050469035144  29.13772087902333
-  POINT  73  -15.42321743407593  32.73280660267888
-  POINT  74  -12.36825118230115  35.71707233206979
-  POINT  75  -8.654673025388929  33.6487632940044
-  POINT  76  -4.244918305693361  35.1578478808239
-  POINT  77  4.244868056856853  35.1578586139012
-  POINT  78  8.654638880706619  33.64878973380078
-  POINT  79  12.36818408598653  35.71712513202336
-  POINT  80  15.42316052899461  32.73287553137968
-  POINT  81  -8.358587775297027  38.16959026512966
-  POINT  82  -4.173840349470416  39.55962823616952
-  POINT  83  -3.315758252031564e-05  36.08253135745896
-  POINT  84  4.173782294307199  39.55964062450516
-  POINT  85  8.358512109833965  38.16962507345837
-  POINT  86  -15.31869198252731  11.03032643751357
-  POINT  87  -14.13452542076038  9.200702237652315
-  POINT  88  -12.85570322577262  11.38999471721338
-  POINT  89  14.81719997183304  15.26225221097661
-  POINT  90  12.61621497195824  15.27125860731862
-  POINT  91  13.39354313720629  17.31390512663084
-  POINT  92  16.26640866399346  12.80155633521549
-  POINT  93  15.31866987155821  11.03028543623874
-  POINT  94  17.63438934978107  10.56451880793851
-  POINT  95  17.04373682924151  14.84420285452771
-  POINT  96  -10.59366972652097  31.96476466500931
-  POINT  97  -10.47074782623779  29.86127467287488
-  POINT  98  -8.531751125105743  31.54527330186997
-  POINT  99  -12.45045880497709  32.99891918404201
-  POINT  100  -10.51146210384504  34.68291781303709
-  POINT  101  -8.506630400342978  35.90917677956703
-  POINT  102  -10.43571526797337  37.06153095754958
-  POINT  103  -17.63442337101413  10.56458323774599
-  POINT  104  -16.26641970164998  12.80159219875637
-  POINT  105  -15.3858183445685  7.22202811794831
-  POINT  106  -12.8441817856566  7.647013393174333
-  POINT  107  16.29805650341323  27.60673428882887
-  POINT  108  15.16158303166454  29.70925634608007
-  POINT  109  13.66913484472633  28.17826975588561
-  POINT  110  -1.142556245098185  29.6006936080995
-  POINT  111  4.427678269136592e-06  27.41451736786407
-  POINT  112  1.142557216931961  29.60068514234459
-  POINT  113  -17.04374815827279  14.84423145792389
-  POINT  114  -14.81719824416235  15.26225817624214
-  POINT  115  15.97592071962481  19.53107931941209
-  POINT  116  18.17865665108426  20.87862995426768
-  POINT  117  17.79726406854054  18.65244936514441
-  POINT  118  11.62616187505517  13.32339282042206
-  POINT  119  10.20250504042842  15.3750457360763
-  POINT  120  6.879718327899132  13.33346954387372
-  POINT  121  7.917490433345746  11.51817941748664
-  POINT  122  5.584756817719526  11.42446901218062
-  POINT  123  7.545654146317784  19.582897004264
-  POINT  124  8.956283155351606  17.4407178256302
-  POINT  125  9.781929128297662  19.46509070160666
-  POINT  126  7.96623005844854  15.49285203873364
-  POINT  127  5.633496442822319  15.39914163342762
-  POINT  128  12.8556970805803  11.3899795738575
-  POINT  129  14.13449514555352  9.200659318431857
-  POINT  130  10.44198714905048  11.49376670261518
-  POINT  131  9.147025638870879  9.584766170922078
-  POINT  132  -13.97794193086447  31.50678631934655
-  POINT  133  -13.97561719584198  34.30671603178849
-  POINT  134  -16.70387650845763  30.99911431489088
-  POINT  135  -15.16159818009234  29.7092188850451
-  POINT  136  -6.301753040495194  36.66371907297678
-  POINT  137  -6.449795665541145  34.40330558741415
-  POINT  138  -4.209379327581889  37.35873805849671
-  POINT  139  -6.304639255162508  38.98029279438281
-  POINT  140  4.209325175582026  37.35874961920318
-  POINT  141  6.301690083345409  36.66374184367979
-  POINT  142  6.304573775735958  38.98031527820729
-  POINT  143  -13.66913517672742  28.17825239834845
-  POINT  144  -16.29806692916674  27.60670524737933
-  POINT  145  -17.10808273226246  25.44775012176222
-  POINT  146  -18.72542076142402  27.02556955988556
-  POINT  147  10.51141148334658  34.68295743291207
-  POINT  148  8.506575495270292  35.90920740362957
-  POINT  149  10.4356453552653  37.06157496167121
-  POINT  150  6.449753468781736  34.40332417385099
-  POINT  151  10.59365012684213  31.96479077346879
-  POINT  152  8.531742628971088  31.54529971928993
-  POINT  153  10.4707538751066  29.86130075895795
-  POINT  154  12.45042272948209  32.99895847258009
-  POINT  155  17.60013827410112  16.67668184087382
-  POINT  156  19.90119304214559  18.01442401696686
-  POINT  157  19.13728303754552  14.18928652402979
-  POINT  158  13.97555586519206  34.30677709224583
-  POINT  159  13.97791095098612  31.50683367225824
-  POINT  160  16.70383744452203  30.99917471256351
-  POINT  161  -17.60014118550983  16.67669920175309
-  POINT  162  -19.90119484636033  18.01444229663801
-  POINT  163  -17.79726335039258  18.65244871770483
-  POINT  164  -19.13729740986643  14.18933437204147
-  POINT  165  14.45138206040202  21.61932535663061
-  POINT  166  13.67552956755527  23.77856925168013
-  POINT  167  15.58146080932177  23.91650380358488
-  POINT  168  10.45837546894968  21.54433034248316
-  POINT  169  11.8690044779835  19.40215116384935
-  POINT  170  14.0699894778583  19.39314476750734
-  POINT  171  18.7254069306502  27.02560730650771
-  POINT  172  17.10808186904902  25.44776690836656
-  POINT  173  17.88393436189578  23.28852301331703
-  POINT  174  19.85209195747333  22.42784944192063
-  POINT  175  8.366603477656822  25.73429819613379
-  POINT  176  9.53816392859142  27.55303731543246
-  POINT  177  7.237285926300961  27.62307058548042
-  POINT  178  11.60007142646246  27.97252836961132
-  POINT  179  12.73654489821115  25.87000631236012
-  POINT  180  9.519390799605562  23.63576740316314
-  POINT  181  7.218512797315102  23.70580067321111
-  POINT  182  11.6064661492914  23.57282786540584
-  POINT  183  5.059720244811647  23.82841176727259
-  POINT  184  6.212507566760386  21.72988097430193
-  POINT  185  5.386861593814329  19.70550809832548
-  POINT  186  3.169416451982673  24.63350048523628
-  POINT  187  4.175421682537388  26.60942018414546
-  POINT  188  12.84413541481362  7.64696633250321
-  POINT  189  15.38575758374665  7.221953946724504
-  POINT  190  6.545145650911207  5.656024245016244
-  POINT  191  7.659056066851544  7.952685561248713
-  POINT  192  5.508618507225803  7.312517569561066
-  POINT  193  10.18355278255628  7.928272846377257
-  POINT  194  11.35616584279428  6.014885722829844
-  POINT  195  9.84262954296128  4.793052369902824
-  POINT  196  12.5627706312312  4.437969385077269
-  POINT  197  5.924832424588732  3.228601376597741
-  POINT  198  5.59298116705137  0.7979540467762278
-  POINT  199  4.03572361596666  2.678360622297102
-  POINT  200  8.075269984214474  3.868769368285388
-  POINT  201  9.268518322543754  2.277286464498438
-  POINT  202  -3.385860330585666  29.17442958728963
-  POINT  203  -2.243307541331974  31.36059736177015
-  POINT  204  -4.365764966256407  33.04609061089208
-  POINT  205  -2.122460880768927  33.47235463170196
-  POINT  206  -5.276155766586511  28.3693221859708
-  POINT  207  -6.447720425821004  30.1880583253479
-  POINT  208  -7.237264565588061  27.62304717035844
-  POINT  209  -4.175404470352722  26.60941843230016
-  POINT  210  -6.570642326104192  32.29154831748234
-  POINT  211  -2.122475731637941  35.62018961914143
-  POINT  212  -1.830671350664097e-05  33.93469637001949
-  POINT  213  2.122417449637166  35.62019498568008
-  POINT  214  2.12243230050618  33.47235999824061
-  POINT  215  -2.086936753526468  37.82107979681424
-  POINT  216  -1.657879126015782e-05  38.04126567872948
-  POINT  217  -2.098502568614956  39.88960238033538
-  POINT  218  2.086874568362339  37.82108599098206
-  POINT  219  2.09847524707464  39.8896054946081
-  POINT  220  5.276166777353655  28.3693326707534
-  POINT  221  6.447727228288253  30.18807179005206
-  POINT  222  3.385862984524681  29.17442138871709
-  POINT  223  6.570623480023783  32.2915618045629
-  POINT  224  4.365738068098899  33.04609624461312
-  POINT  225  2.243302311748227  31.36059762895253
-  POINT  226  -15.97591664597385  19.53107668887014
-  POINT  227  -18.17865329558127  20.87862797116531
-  POINT  228  -17.88393406494282  23.2885087125862
-  POINT  229  -19.85209345422734  22.42783684408701
-  POINT  230  -15.58145525848218  23.91649735150665
-  POINT  231  1.260561645774382  15.05956980104973
-  POINT  232  3.534051121633872  15.13430148261657
-  POINT  233  2.273495236413422  13.16502745700086
-  POINT  234  4.62056285218328  17.29368397747649
-  POINT  235  3.287416272625881  19.44066794751443
-  POINT  236  1.260558765497416  18.51442191333272
-  POINT  237  2.026857507128465  20.92624603418171
-  POINT  238  -1.260549705700802  15.05956294733156
-  POINT  239  -3.534041764503905  15.13429102436105
-  POINT  240  -2.27348629824917  13.16502385246351
-  POINT  241  -4.620553679346999  17.29367122365998
-  POINT  242  -5.633490271895369  15.39913212879194
-  POINT  243  6.179519647986353e-06  17.02883697294727
-  POINT  244  -1.260552585977768  18.51441505961455
-  POINT  245  3.354602565163439  11.07360422106397
-  POINT  246  4.392374670610053  9.258314094676887
-  POINT  247  1.081113089303949  10.99887253949712
-  POINT  248  3.278464254669715  6.961652778444417
-  POINT  249  -8.956277911442228  17.44071238296659
-  POINT  250  -9.781926055917403  19.46508709422766
-  POINT  251  -7.545650331213636  19.58288703935193
-  POINT  252  -13.39354016846558  17.31390493662598
-  POINT  253  -12.61621171184277  15.27126567745847
-  POINT  254  -7.659078922707532  7.952693722884099
-  POINT  255  -10.18357905212516  7.928289747105911
-  POINT  256  -9.147036534588061  9.584774493130316
-  POINT  257  -11.35622417377607  6.014932622928116
-  POINT  258  -9.842705183303561  4.793097915203154
-  POINT  259  -12.5628648971392  4.438046414902402
-  POINT  260  -8.07533668781619  3.868796854763069
-  POINT  261  -9.268622145138828  2.27734158433505
-  POINT  262  1.081100077944307  6.646286708888283
-  POINT  263  2.197343914560057  4.700490183772463
-  POINT  264  1.838359439241251  2.362994552740968
-  POINT  265  -1.013108267587659e-05  2.192562057108165
-  POINT  266  1.846253788767268  0.0853985780217391
-  POINT  267  -1.081110588800538  10.99887167602092
-  POINT  268  -3.354602647603641  11.07359975305042
-  POINT  269  -4.392381671662718  9.258313022758163
-  POINT  270  -5.58475738111135  11.42446519920076
-  POINT  271  -3.260050521758373e-06  8.90744844008403
-  POINT  272  -1.08112360016018  6.646285845412075
-  POINT  273  -8.366584586938671  25.73428224892195
-  POINT  274  -9.519383871606294  23.63575760873779
-  POINT  275  -7.21849919102119  23.70578639079717
-  POINT  276  -9.538149246173166  27.55301838829905
-  POINT  277  -11.6000678475884  27.97250975143839
-  POINT  278  -12.73653659666279  25.86999611377262
-  POINT  279  -5.059709342020205  23.82838802944201
-  POINT  280  -6.212508626687826  21.72986338925784
-  POINT  281  -3.287411974821189  19.44064757356589
-  POINT  282  -2.026859388843421  20.92623251395134
-  POINT  283  -3.169413906019359  24.63349543076084
-  POINT  284  -5.386860482212652  19.70548867799678
-  POINT  285  -11.86900100305036  19.40214984244664
-  POINT  286  -10.45837342282177  21.54432449883199
-  POINT  287  -11.60645881873926  23.57282035695677
-  POINT  288  -14.45137748055864  21.6193215946908
-  POINT  289  -14.06998753536995  19.39314234123031
-  POINT  290  -13.67552614787827  23.77856300386682
-  POINT  291  -7.966224937896692  15.49284638149671
-  POINT  292  -6.879713023053598  13.33346618219778
-  POINT  293  -10.20250066260046  15.37504643637243
-  POINT  294  -7.917492047112675  11.51817945190553
-  POINT  295  -10.44199217653031  11.49377547612734
-  POINT  296  -11.62615873829723  13.32339967598859
-  POINT  297  -1.838408766123554  2.362999988598223
-  POINT  298  -1.846281530475226  0.08540130760665365
-  POINT  299  -3.278486096797754  6.961652071627865
-  POINT  300  -2.197382758802926  4.700490340432118
-  POINT  301  -6.545183347842568  5.6560327717538
-  POINT  302  -5.92489859541412  3.228620649657177
-  POINT  303  -5.508640830305463  7.312517517778206
-  POINT  304  -4.035771262761127  2.678366214814012
-  POINT  305  -5.593056997119752  0.797976657516179
-  POINT  306  -2.026866541790412  22.93150368184212
-  POINT  307  -7.152946991384468e-06  22.00527116789078
-  POINT  308  -1.14256167012293  25.71253408470027
-  POINT  309  1.142551791907216  25.71252561894535
-  POINT  310  2.026850354181474  22.93151720207248
+  POINT  5  -7.08999439411224  1.298877587388341
+  POINT  6  -5.282004223598042  0.7100950914239894
+  POINT  7  -3.47031521720064  0.3033781502190239
+  POINT  8  -1.689974063564663  0.07152821552843025
+  POINT  9  1.689960162663852  0.07152703670926773
+  POINT  10  3.470291113247503  0.3033739033986539
+  POINT  11  5.281972434142698  0.7100863867937268
+  POINT  12  7.089956578995546  1.298863250915369
+  POINT  13  -10.33788236531681  2.879013223504487
+  POINT  14  -8.728323343402396  2.005101511455367
+  POINT  15  -6.155723063676203  2.801434963065342
+  POINT  16  -4.091201195594828  2.459658715166061
+  POINT  17  -2.066659832781266  2.187655143712953
+  POINT  18  -4.444059962388502e-06  2.064287137447093
+  POINT  19  2.066650046418929  2.187657831466219
+  POINT  20  4.091191239691891  2.459658150301677
+  POINT  21  6.155715570419536  2.801429443148412
+  POINT  22  8.728292838334855  2.005086715177716
+  POINT  23  10.3378510065  2.878994288669519
+  POINT  24  -13.31700959313135  5.078295824654251
+  POINT  25  -11.8842697780299  3.913852796799773
+  POINT  26  -9.460448082417175  4.366488604800259
+  POINT  27  -7.512025315084293  4.126002865730436
+  POINT  28  -5.172892121816004  4.455275571417475
+  POINT  29  -3.057534701397881  4.267955770521298
+  POINT  30  -1.012355277947994  4.110780430542055
+  POINT  31  1.012349419089582  4.110782567666035
+  POINT  32  3.057529483199409  4.267957853121388
+  POINT  33  5.172886691584971  4.455272913530382
+  POINT  34  7.512016782430195  4.125998677146069
+  POINT  35  9.460436885249777  4.366480067235193
+  POINT  36  11.88424594459136  3.913835188943747
+  POINT  37  13.31698679929866  5.078275482126558
+  POINT  38  -14.7498830675396  6.492929647996144
+  POINT  39  -12.45509720824102  6.556537137387828
+  POINT  40  -10.6482491458674  5.948211070168938
+  POINT  41  -8.422109451390526  6.167912606077227
+  POINT  42  -6.353060403793894  6.112985632708121
+  POINT  43  -4.1407681774423  6.228053553808773
+  POINT  44  -2.044474263097546  6.130734213928414
+  POINT  45  -1.590000917432027e-06  6.079527809516725
+  POINT  46  2.044472146376001  6.130736081211611
+  POINT  47  4.140767470322072  6.22805374467435
+  POINT  48  6.353058937427791  6.112982734736828
+  POINT  49  8.422108492096564  6.167907314850485
+  POINT  50  10.64824854146091  5.948202934940974
+  POINT  51  12.45509688415863  6.556538659055924
+  POINT  52  14.74986960384593  6.492914945498344
+  POINT  53  -16.04355519086491  8.058294224118221
+  POINT  54  -13.74135223644284  8.192183278283656
+  POINT  55  -11.47752803375488  8.160729976898475
+  POINT  56  -9.493527168153337  7.92578225082361
+  POINT  57  -7.348476128284648  8.030483731407866
+  POINT  58  -5.251990097092846  8.021830105465815
+  POINT  59  -3.111403417400961  8.061569553457121
+  POINT  60  -1.03035566619991  8.025902010406856
+  POINT  61  1.030354767138576  8.025902400729668
+  POINT  62  3.111403710309801  8.061569941428463
+  POINT  63  5.251991017315566  8.021829123575905
+  POINT  64  7.348476568276788  8.030480163525478
+  POINT  65  9.49352663676625  7.92577656119784
+  POINT  66  11.47752506667806  8.160726192772536
+  POINT  67  13.74135116972482  8.192181839463158
+  POINT  68  16.04354708966182  8.058283340247721
+  POINT  69  -17.19580986241097  9.787060992258192
+  POINT  70  -14.93702314944201  9.823933424582281
+  POINT  71  -12.67351421081692  9.907845730886832
+  POINT  72  -10.48194789872941  9.921029402134767
+  POINT  73  -8.415247672061369  9.840575684874789
+  POINT  74  -6.293821461179366  9.890161035967978
+  POINT  75  -4.18979493172746  9.895564239362063
+  POINT  76  -2.081243704999238  9.916613908721169
+  POINT  77  5.730172508017217e-08  9.910960593168005
+  POINT  78  2.081244132593595  9.916613808527552
+  POINT  79  4.189795976700378  9.895563750716825
+  POINT  80  6.293822706796825  9.890159478467984
+  POINT  81  8.415248200245212  9.840572417227369
+  POINT  82  10.48194698614503  9.921026346494969
+  POINT  83  12.67351249301398  9.90784290415405
+  POINT  84  14.93702196401547  9.823930709655935
+  POINT  85  17.19580506925672  9.787052921897237
+  POINT  86  -18.1760415240729  11.65545001122227
+  POINT  87  -15.97553246064111  11.5448525408589
+  POINT  88  -13.78571642443011  11.61751913076442
+  POINT  89  -11.59628723826348  11.69602393958708
+  POINT  90  -9.442169657304916  11.7276271718398
+  POINT  91  -7.349624558628578  11.71151253389753
+  POINT  92  -5.24282073613147  11.73166174921223
+  POINT  93  -3.137905182843987  11.749161104766
+  POINT  94  -1.042556134226208  11.76547185321201
+  POINT  95  1.042556695466196  11.76547172930404
+  POINT  96  3.13790593838561  11.74916068398455
+  POINT  97  5.242821722657395  11.73166093775092
+  POINT  98  7.349625501825332  11.7115109952139
+  POINT  99  9.442169874348188  11.72762525690472
+  POINT  100  11.59628683371615  11.69602200942614
+  POINT  101  13.78571564810794  11.61751684765504
+  POINT  102  15.97553159279355  11.54484971825705
+  POINT  103  18.17603883633879  11.65544415682245
+  POINT  104  -18.9605397782243  13.63620150237337
+  POINT  105  -16.8378114819632  13.34701391345798
+  POINT  106  -14.74755920142683  13.39190264700377
+  POINT  107  -12.63015409928628  13.45515225576576
+  POINT  108  -10.4974158537763  13.51638952902862
+  POINT  109  -8.377087236386718  13.55137598391785
+  POINT  110  -6.285880485474346  13.5571522438029
+  POINT  111  -4.197964629953373  13.554499339371
+  POINT  112  -2.088214950681028  13.58585648886253
+  POINT  113  2.731150748891409e-07  13.59731244193799
+  POINT  114  2.088215540160786  13.58585624443037
+  POINT  115  4.197965288358211  13.55449885456938
+  POINT  116  6.285881219549023  13.55715142631005
+  POINT  117  8.377087797482492  13.5513749885778
+  POINT  118  10.49741609890272  13.51638838986579
+  POINT  119  12.63015411255437  13.45515089704564
+  POINT  120  14.74755900190871  13.3919008647022
+  POINT  121  16.83781104922592  13.34701152878708
+  POINT  122  18.96053842326367  13.63619746535554
+  POINT  123  -19.5357573624754  15.71582163367355
+  POINT  124  -17.53374306722162  15.20882267305824
+  POINT  125  -15.57069741754931  15.24451363995668
+  POINT  126  -13.55098734811856  15.27194090964616
+  POINT  127  -11.4874826074671  15.31182390849893
+  POINT  128  -9.398270307101383  15.3521915525082
+  POINT  129  -7.307964300837752  15.3807112166889
+  POINT  130  -5.231490199222396  15.39200882295255
+  POINT  131  -3.169152633696715  15.35291249391119
+  POINT  132  -1.041499472772248  15.40847695692984
+  POINT  133  1.041499922227459  15.40847686112553
+  POINT  134  3.169153095957357  15.35291225824823
+  POINT  135  5.231490717147384  15.39200836588829
+  POINT  136  7.307964797170775  15.38071066913708
+  POINT  137  9.398270745362067  15.35219096658757
+  POINT  138  11.48748296447435  15.31182320391143
+  POINT  139  13.55098760797554  15.27193995853761
+  POINT  140  15.57069756108526  15.24451232768288
+  POINT  141  17.5337430129703  15.20882089303506
+  POINT  142  19.53575681130713  15.71581912036011
+  POINT  143  -18.2269232082509  17.13021291903821
+  POINT  144  -16.40696619670878  17.17145148168169
+  POINT  145  -14.46503683750223  17.15281425943443
+  POINT  146  -12.45424174106675  17.15199836204197
+  POINT  147  -10.39981013664358  17.16515504075176
+  POINT  148  -8.328026293006795  17.18988295252257
+  POINT  149  -6.256758829896484  17.21190086556036
+  POINT  150  -4.196112455235621  17.22388615617422
+  POINT  151  -2.171217513306863  17.11254059462183
+  POINT  152  1.665915350806957e-07  17.22074676082319
+  POINT  153  2.171217828945217  17.1125405142267
+  POINT  154  4.19611284158213  17.22388591748381
+  POINT  155  6.256759233014987  17.21190057227975
+  POINT  156  8.32802671761999  17.18988265372117
+  POINT  157  10.39981059340922  17.16515474428726
+  POINT  158  12.45424219159261  17.15199799003971
+  POINT  159  14.46503723679426  17.15281363556374
+  POINT  160  16.40696659288819  17.17145057879611
+  POINT  161  18.22692352993353  17.13021164782587
+  POINT  162  -19.89780896458842  17.98079262859248
+  POINT  163  -17.84230000449807  19.0216744028301
+  POINT  164  -15.67627065513821  19.02313060013363
+  POINT  165  -13.55906626932976  19.0036025225671
+  POINT  166  -11.45548002657009  18.98870888881037
+  POINT  167  -9.365348057261556  18.99918972787285
+  POINT  168  -7.287998267664897  19.0218085635537
+  POINT  169  -5.225476971032742  19.04419029905378
+  POINT  170  -3.181207515747626  19.06061320124515
+  POINT  171  -1.234450813224698  18.81027364364246
+  POINT  172  1.234451001429794  18.8102736784703
+  POINT  173  3.181207777678578  19.06061305006857
+  POINT  174  5.225477302694968  19.04419014960234
+  POINT  175  7.287998656796332  19.02180842950959
+  POINT  176  9.365348511226138  18.99918964629332
+  POINT  177  11.45548052731511  18.98870888549819
+  POINT  178  13.55906673221513  19.00360248933783
+  POINT  179  15.6762709640833  19.02313030096059
+  POINT  180  17.84230024444024  19.02167396477342
+  POINT  181  19.89780885181004  17.98079151724459
+  POINT  182  -18.34809671121251  20.89054860233434
+  POINT  183  -16.5148528869666  20.87800710044906
+  POINT  184  -14.52694695679922  20.85426661015416
+  POINT  185  -12.45599638977427  20.8108810324845
+  POINT  186  -10.37011211347385  20.80605366101868
+  POINT  187  -8.288100923056527  20.82387931457176
+  POINT  188  -6.210897946834899  20.84807602452601
+  POINT  189  -4.130583790032196  20.86687448767059
+  POINT  190  -2.030932593701857  20.87063865748742
+  POINT  191  9.744431586633517e-08  21.64935021861394
+  POINT  192  2.030932751362846  20.87063857502341
+  POINT  193  4.130584013659444  20.86687431844705
+  POINT  194  6.210898346296974  20.84807594605767
+  POINT  195  8.288101445193462  20.82387932992417
+  POINT  196  10.37011274159265  20.80605382218947
+  POINT  197  12.45599711658471  20.8108813744629
+  POINT  198  14.52694762208812  20.85426702370534
+  POINT  199  16.51485331119099  20.87800725634424
+  POINT  200  18.348097009919  20.89054895986076
+  POINT  201  -19.88382274553589  22.15257822717576
+  POINT  202  -17.85872906553023  22.79187608979278
+  POINT  203  -15.75836820209814  22.71857538973881
+  POINT  204  -13.57945048306569  22.62787433244293
+  POINT  205  -11.43502337227142  22.60571660119635
+  POINT  206  -9.32896785495339  22.62172230713452
+  POINT  207  -7.252191943285577  22.65010775210676
+  POINT  208  -5.19352107545026  22.67271964550248
+  POINT  209  -3.145718127729072  22.67904520073677
+  POINT  210  -1.19802941618547  22.93488185752093
+  POINT  211  1.198029575535804  22.93488182516196
+  POINT  212  3.145718298303114  22.67904507452085
+  POINT  213  5.193521324838902  22.67271937177574
+  POINT  214  7.252192530636423  22.65010772431655
+  POINT  215  9.328968618053137  22.62172251326393
+  POINT  216  11.43502432491394  22.60571702295378
+  POINT  217  13.57945157268804  22.62787513308746
+  POINT  218  15.75836910518877  22.71857642015902
+  POINT  219  17.85872913941462  22.7918771500154
+  POINT  220  19.88382260621709  22.15257951409296
+  POINT  221  -19.56496589012501  24.14874796995999
+  POINT  222  -17.12378015908613  24.49263729810405
+  POINT  223  -14.75261366404331  24.36653106466741
+  POINT  224  -12.51545015644557  24.36405857012063
+  POINT  225  -10.36487612468117  24.40059700241373
+  POINT  226  -8.270782662155399  24.44922254990688
+  POINT  227  -6.207288303035652  24.48752518657241
+  POINT  228  -4.152672439085122  24.50430982838724
+  POINT  229  -2.144764510838116  24.6392641397031
+  POINT  230  6.736184551131563e-08  24.56637229685156
+  POINT  231  2.144764639428793  24.6392640566236
+  POINT  232  4.152672593221236  24.5043096033403
+  POINT  233  6.207288592802848  24.48752465778632
+  POINT  234  8.270783499471428  24.44922265688236
+  POINT  235  10.36487726829784  24.4005974184117
+  POINT  236  12.51545141239867  24.36405943508291
+  POINT  237  14.75261493047371  24.36653271363972
+  POINT  238  17.12378075459493  24.4926401834798
+  POINT  239  19.56496529523762  24.14875077537231
+  POINT  240  -19.08648829040304  25.9754468234863
+  POINT  241  -17.2845615037453  26.31014844212238
+  POINT  242  -15.41261905344529  26.10941999036963
+  POINT  243  -13.37179093546351  26.11632995430249
+  POINT  244  -11.29591265365937  26.16877399507631
+  POINT  245  -9.236109783161917  26.24563353410026
+  POINT  246  -7.197506282144635  26.30683884552605
+  POINT  247  -5.148124747507762  26.32635712487787
+  POINT  248  -3.122954853611116  26.40463970225008
+  POINT  249  -1.028840474391874  26.37582534616704
+  POINT  250  1.028840597301122  26.37582532979795
+  POINT  251  3.122954923639289  26.40463955141999
+  POINT  252  5.148124848876652  26.32635667877105
+  POINT  253  7.197506356103443  26.30683804371632
+  POINT  254  9.236111124219747  26.24563372506302
+  POINT  255  11.29591412227338  26.16877501716782
+  POINT  256  13.3717921011747  26.11633170886203
+  POINT  257  15.41261961645513  26.1094231779272
+  POINT  258  17.28456075910474  26.31015378144565
+  POINT  259  19.08648669351269  25.97545192419629
+  POINT  260  -18.31673994912508  28.03100477126815
+  POINT  261  -16.29279631468638  28.07734896422777
+  POINT  262  -14.29108105178232  27.93826211324394
+  POINT  263  -12.23205698562959  27.95454691920996
+  POINT  264  -10.1921242779246  28.04641052160824
+  POINT  265  -8.184908522052318  28.14581978804722
+  POINT  266  -6.142892720399755  28.15468429908139
+  POINT  267  -4.115765842832939  28.20978375998045
+  POINT  268  -2.044953225702631  28.19763670818671
+  POINT  269  1.215817429928157e-07  28.20528019734085
+  POINT  270  2.044953387448034  28.19763672758267
+  POINT  271  4.115765884875199  28.20978350344839
+  POINT  272  6.142892053295159  28.15468405294527
+  POINT  273  8.184908802060571  28.1458177672969
+  POINT  274  10.1921266003412  28.04641156253142
+  POINT  275  12.23205881411247  27.95454935528251
+  POINT  276  14.2910815778731  27.93826589300298
+  POINT  277  16.29279479603289  28.07735539177588
+  POINT  278  18.31673641698378  28.0310128272082
+  POINT  279  -17.36678064292307  29.91942186322351
+  POINT  280  -15.30701199611502  29.80163024565981
+  POINT  281  -13.1975126296105  29.73273604910611
+  POINT  282  -11.14232609374812  29.83834011557202
+  POINT  283  -9.18383040196667  30.00598319236085
+  POINT  284  -7.135586668146636  29.99761305864382
+  POINT  285  -5.123286168201119  30.04271988926355
+  POINT  286  -3.053121112865554  30.02630175178171
+  POINT  287  -1.015876570824747  30.05156154994286
+  POINT  288  1.015877381461083  30.05156170293002
+  POINT  289  3.053121697974701  30.02630185030043
+  POINT  290  5.123284228587577  30.0427213293883
+  POINT  291  7.135586245905698  29.99761060242232
+  POINT  292  9.183831168146963  30.00598031130402
+  POINT  293  11.14232972160493  29.83834373724195
+  POINT  294  13.19751369866922  29.73274161644041
+  POINT  295  15.30700948964564  29.80163858123015
+  POINT  296  17.36677404971316  29.91943340651388
+  POINT  297  -16.21450019303935  31.70854318392894
+  POINT  298  -14.18134842576247  31.46072633556853
+  POINT  299  -12.05433474215738  31.57807989769072
+  POINT  300  -10.18803390533311  31.90895778516169
+  POINT  301  -8.127827538982091  31.83562093362241
+  POINT  302  -6.132870312528693  31.91947084481104
+  POINT  303  -4.060514707104238  31.84886116654844
+  POINT  304  -2.023054298900899  31.90620457141977
+  POINT  305  1.779731685490338e-06  31.92616315841029
+  POINT  306  2.023057639192921  31.90620515692421
+  POINT  307  4.060510421402324  31.84886697474238
+  POINT  308  6.132869669181516  31.91946778705557
+  POINT  309  8.127827628663475  31.83561745950141
+  POINT  310  10.18803390203203  31.90895591912609
+  POINT  311  12.05433729770214  31.5780897141657
+  POINT  312  14.18134461110469  31.46073802168817
+  POINT  313  16.21448882325949  31.70855892928177
+  POINT  314  -14.85855987098478  33.38742688347396
+  POINT  315  -12.97622115412793  33.15231979037343
+  POINT  316  -11.24542238667929  33.84152597332419
+  POINT  317  -9.096796145803623  33.67355592311518
+  POINT  318  -7.169110863793735  33.81460869617811
+  POINT  319  -5.025802643706024  33.69074033624606
+  POINT  320  -3.036012504986613  33.74897677262599
+  POINT  321  -1.006001725651425  33.81394161048243
+  POINT  322  1.006017505359627  33.81394238106373
+  POINT  323  3.03600454008222  33.7489957057666
+  POINT  324  5.025801824829388  33.69073476359576
+  POINT  325  7.169110502599582  33.81460511144136
+  POINT  326  9.09679356939724  33.67355436459209
+  POINT  327  11.24541326548703  33.84153193558982
+  POINT  328  12.97621626240949  33.15233833055714
+  POINT  329  14.85854134665239  33.38744744340443
+  POINT  330  -13.24234864752243  34.98800194480442
+  POINT  331  -10.03539086910046  35.3828070140792
+  POINT  332  -8.191323309688949  35.8082238544771
+  POINT  333  -5.969442595277822  35.42728838548917
+  POINT  334  -3.964572821971675  35.68073227615353
+  POINT  335  -2.062446042804255  35.66361537576937
+  POINT  336  3.401394552337428e-05  35.7433135846511
+  POINT  337  2.062435708551036  35.66367717807774
+  POINT  338  3.96457676799794  35.68072163899399
+  POINT  339  5.969444351238414  35.42728363799607
+  POINT  340  8.19131937738778  35.80822453891639
+  POINT  341  10.03538306356879  35.38281277249126
+  POINT  342  13.2423188856883  34.98802824022632
+  POINT  343  -11.71964489363993  36.20647782730662
+  POINT  344  -9.885418518050601  37.38615830834937
+  POINT  345  -6.769213566269587  37.09871131951007
+  POINT  346  -4.834310082657146  37.45809613171494
+  POINT  347  -2.966207997229898  37.80957975457357
+  POINT  348  -1.228951401026502  37.50853541118494
+  POINT  349  1.228967413584314  37.50873516084056
+  POINT  350  2.966244431714553  37.80956888117363
+  POINT  351  4.834322604660215  37.45809313826081
+  POINT  352  6.769215951806145  37.09871058669637
+  POINT  353  9.885380262406448  37.38618005968161
+  POINT  354  11.71961051109886  36.20650269083999
+  POINT  355  -8.160801736293346  38.25928024378061
+  POINT  356  -6.108721403629119  39.04425169999729
+  POINT  357  -4.094025391529261  39.57648988183318
+  POINT  358  -2.032918826278168  39.89641276827972
+  POINT  359  -0.000114943787747096  38.55954134616952
+  POINT  360  2.032857647557499  39.89641901912924
+  POINT  361  4.093978133093873  39.57649976491602
+  POINT  362  6.108678764431183  39.04426537708952
+  POINT  363  8.16076002653128  38.25929888548312
+  POINT  364  19.74927974328947  16.84311090331085
+  POINT  365  19.06236619087178  17.55550158253523
+  POINT  366  18.88134017062033  16.42301538409299
+  POINT  367  18.87005454812514  18.50123274100901
+  POINT  368  18.92115012222012  19.51083698238671
+  POINT  369  19.97443587516672  18.98910375220634
+  POINT  370  18.03461188718688  18.07594280629964
+  POINT  371  -1.016516885032958  39.22797705722462
+  POINT  372  -1.017777998289471  39.97408640454459
+  POINT  373  -5.747189387354801e-05  39.27977067308476
+  POINT  374  1.016371351884876  39.22798018264938
+  POINT  375  1.017747548306818  39.9740879692846
+  POINT  376  2.499551039636026  38.85299395015144
+  POINT  377  3.530111282404213  38.69303432304483
+  POINT  378  3.067591411714378  39.76334698055007
+  POINT  379  -10.9924492306217  14.41410671876377
+  POINT  380  -10.44287645728424  15.33200773050357
+  POINT  381  -9.947843080438842  14.43429054076841
+  POINT  382  -12.05881835337669  14.38348808213234
+  POINT  383  -11.56378497653129  13.48577089239719
+  POINT  384  -19.1159597283742  21.52156341475505
+  POINT  385  -19.17404835560626  20.44527430116717
+  POINT  386  -19.97093456597552  21.07785567562136
+  POINT  387  18.53474991213871  15.46232000669758
+  POINT  388  18.24714071811698  14.4225091791953
+  POINT  389  19.27621315646036  14.66824556999596
+  POINT  390  17.88033327145191  16.16951627043046
+  POINT  391  -1.878316948172965  1.129591679620692
+  POINT  392  -2.768487524990953  1.245516646965989
+  POINT  393  -2.582747461702293  0.167465745146943
+  POINT  394  7.648469065631529  32.82511128547139
+  POINT  395  8.132952035998411  33.74407973801672
+  POINT  396  8.612310599030359  32.75458591204675
+  POINT  397  10.87749678733383  35.79465773166562
+  POINT  398  10.81858671612841  36.82136097977488
+  POINT  399  9.960381662987619  36.38449641608644
+  POINT  400  -11.96631262099795  7.358633557143151
+  POINT  401  -11.55167317705421  6.252374103778383
+  POINT  402  -11.06288858981114  7.054470523533706
+  POINT  403  -12.16968349313546  5.2351949670938
+  POINT  404  -11.26625946194865  4.931031933484356
+  POINT  405  -12.0755211222859  9.034287853892653
+  POINT  406  -11.57773105477317  9.914437566510799
+  POINT  407  -10.97973796624214  9.040879689516622
+  POINT  408  -10.17110926624146  33.75754094821968
+  POINT  409  -10.64040662788987  34.61216649370169
+  POINT  410  -9.566093507452038  34.52818146859719
+  POINT  411  -5.471515743143133  38.25117391585611
+  POINT  412  -5.108309760920813  39.33662769024022
+  POINT  413  -4.464167737093204  38.51729300677406
+  POINT  414  -17.075786992357  11.60015127604059
+  POINT  415  -16.58567116152604  10.66595676655855
+  POINT  416  -17.71058118590639  10.70832033698396
+  POINT  417  -11.04685154601989  12.60620673430785
+  POINT  418  -12.11322066877488  12.57558809767642
+  POINT  419  -12.1349007245402  10.80193483523696
+  POINT  420  -11.03911756849645  10.80852667086092
+  POINT  421  -9.437251545081509  13.53388275647323
+  POINT  422  -8.887678771744049  14.45178376821303
+  POINT  423  -12.51923497779283  15.29188240907255
+  POINT  424  -13.09057072370242  14.36354658270596
+  POINT  425  -18.87005448454325  18.50123351571129
+  POINT  426  -18.03461160637449  18.07594366093415
+  POINT  427  -19.06236608641966  17.55550277381534
+  POINT  428  -18.92115000224904  19.51083720141505
+  POINT  429  -19.97443590274372  18.98910431002001
+  POINT  430  -18.09519835785529  19.95611150258222
+  POINT  431  0.5990148364900598  22.29211602188795
+  POINT  432  -0.599014659370577  22.29211603806743
+  POINT  433  7.967516690854382e-08  22.93488184134145
+  POINT  434  -1.01546624812877  21.25999443805068
+  POINT  435  4.872215793316759e-08  20.82467510930697
+  POINT  436  -1.015466296850928  20.43531932874371
+  POINT  437  -1.614481004943663  21.90276025750417
+  POINT  438  6.782362015092881  16.29630562070841
+  POINT  439  6.26972775715908  15.38635951751268
+  POINT  440  5.744124975081186  16.30195446908402
+  POINT  441  -5.74412451455944  16.30195484425646
+  POINT  442  -5.226435642566052  17.21789351086729
+  POINT  443  -4.713801327229008  16.30794748956339
+  POINT  444  -4.200321416459555  15.37246065843187
+  POINT  445  -3.682632544466168  16.2883993250427
+  POINT  446  -5.718863643637123  1.755765027244666
+  POINT  447  -6.622858728894221  2.050156275226842
+  POINT  448  -6.1930002735872  0.9829879862466689
+  POINT  449  -1.033332138420614  2.125971140580023
+  POINT  450  -0.5061798610039783  3.087533783994574
+  POINT  451  -1.53950755536463  3.149217787127504
+  POINT  452  0.8449778593019447  1.06790708707818
+  POINT  453  -2.222029981194251e-06  1.032143568723546
+  POINT  454  0.8457366719362006  0.01788976042541284
+  POINT  455  -0.8449892538123129  1.067907676487761
+  POINT  456  -0.8457434623547605  0.01789005539397318
+  POINT  457  7.14550668849857  38.67998224759658
+  POINT  458  7.464987989168712  37.67900473608974
+  POINT  459  6.438947358118664  38.07148798189294
+  POINT  460  5.471500684545699  38.25117925767516
+  POINT  461  5.801769278233181  37.27840186247859
+  POINT  462  4.399449686329078  36.5694073886274
+  POINT  463  3.900283518187385  37.63383100971722
+  POINT  464  3.465410599856247  36.74514526008381
+  POINT  465  4.464150368877045  38.51729645158841
+  POINT  466  5.108265028519643  39.33663957465164
+  POINT  467  6.569277426918998  34.62094437471872
+  POINT  468  5.497623088033901  34.55900920079591
+  POINT  469  6.097456163714485  33.75266993751856
+  POINT  470  4.967010559618177  35.55400263849503
+  POINT  471  4.495189296413664  34.68572820129488
+  POINT  472  5.401883477949315  36.44268838812844
+  POINT  473  6.369330151522279  36.26299711234622
+  POINT  474  9.113351220478284  35.59551865570383
+  POINT  475  9.038349819897114  36.597202299299
+  POINT  476  7.080381864313097  35.61775408845623
+  POINT  477  7.480267664596962  36.45346756280638
+  POINT  478  7.680214939993681  34.81141482517887
+  POINT  479  8.64405647339251  34.74088945175424
+  POINT  480  9.566088316483015  34.52818356854168
+  POINT  481  8.17603970195953  37.03376171219976
+  POINT  482  9.033624999701651  37.84358769694784
+  POINT  483  18.72983203648753  27.01380028490616
+  POINT  484  17.80064858804426  27.17058330432692
+  POINT  485  18.18552372630872  26.14280285282097
+  POINT  486  14.85185059716412  27.02384453546509
+  POINT  487  13.8314368395239  27.02729880093251
+  POINT  488  14.39220585881491  26.11287744339462
+  POINT  489  -2.499563411754033  38.85299626142665
+  POINT  490  -3.530116694379579  38.69303481820337
+  POINT  491  -3.067645385176077  39.76333856162318
+  POINT  492  -3.900259039943522  37.63383794314426
+  POINT  493  3.013506238274488  35.67219940853586
+  POINT  494  2.514340070132794  36.73662302962569
+  POINT  495  6.650990085890549  32.86703644924846
+  POINT  496  5.579335747005452  32.80510127532567
+  POINT  497  7.130348648922496  31.87754262327849
+  POINT  498  7.631706937284587  30.91661403096186
+  POINT  499  8.159708707026331  30.00179545686317
+  POINT  500  8.655829398405219  30.92079888540271
+  POINT  501  6.634227957543607  30.95853919473894
+  POINT  502  6.129435237246637  30.02016596590531
+  POINT  503  5.628076948884546  30.98109455822193
+  POINT  504  11.94551072074933  21.70829919870834
+  POINT  505  11.41305492908868  20.80846759832619
+  POINT  506  10.9025685332533  21.70588542257163
+  POINT  507  13.00753192439992  19.90724193190037
+  POINT  508  13.49147236933642  20.83257419908412
+  POINT  509  14.04300717715163  19.92893475652158
+  POINT  510  -1.632691703463277  19.84045615056494
+  POINT  511  -0.617225406612349  19.40513682182123
+  POINT  512  7.881862384261  8.935526290376423
+  POINT  513  6.821149637536807  8.96031982099673
+  POINT  514  7.354535453521018  9.865365947847677
+  POINT  515  1.878305104541391  1.129592434087743
+  POINT  516  2.768470579833216  1.245515867432436
+  POINT  517  2.582728607973412  0.1674632640394325
+  POINT  518  1.033322801179483  2.125972484456656
+  POINT  519  -12.88605340068618  5.81741648102104
+  POINT  520  -14.05126013257847  5.767569248488341
+  POINT  521  -13.60249013789031  6.524733392691986
+  POINT  522  -12.61408342909388  4.479532986874619
+  POINT  523  -13.09822472234193  7.374360207835742
+  POINT  524  -12.60944013509886  8.176456627591065
+  POINT  525  -13.20743322362988  9.050014504585244
+  POINT  526  -14.24561765199122  7.3425564631399
+  POINT  527  -14.89245371365388  8.125238751200939
+  POINT  528  -15.41659981616689  7.259181873308678
+  POINT  529  -12.11082177040361  33.4969228818488
+  POINT  530  -12.51527794814265  32.36519984403208
+  POINT  531  -11.64987856441833  32.70980293550745
+  POINT  532  -10.81862285529724  36.82133760142749
+  POINT  533  -10.87751788137019  35.79464242069291
+  POINT  534  -9.960404693575528  36.38448266121428
+  POINT  535  -11.48253364015961  35.0240019003154
+  POINT  536  -10.7167281460062  32.87524187924294
+  POINT  537  -11.12118432374524  31.74351884142621
+  POINT  538  -9.642415025568365  32.79125685413843
+  POINT  539  -18.53475021484851  15.4623221533659
+  POINT  540  -19.27621404631537  14.6682488620726
+  POINT  541  -18.24714142272296  14.42251208771581
+  POINT  542  -18.88134028536315  16.42301727635588
+  POINT  543  -17.88033313773626  16.16951779604823
+  POINT  544  -19.74928002630716  16.84311272522837
+  POINT  545  -15.49028917015346  8.94111382435025
+  POINT  546  -16.06641650592649  9.805497208420237
+  POINT  547  -16.64214543071471  8.907705737630335
+  POINT  548  -15.45627780504156  10.68439298272059
+  POINT  549  -14.33918769294243  9.008058351432968
+  POINT  550  -13.80526868012947  9.865889577734556
+  POINT  551  -14.1492732747727  14.33192177832496
+  POINT  552  -15.15912830948807  14.31820814348022
+  POINT  553  -14.56084238283394  15.25822727480142
+  POINT  554  -13.68885665035655  13.42352745138476
+  POINT  555  -17.50692650301805  12.50123196234012
+  POINT  556  -17.89917563009375  13.49160770791567
+  POINT  557  -18.59468367857226  12.63537262535845
+  POINT  558  -16.40667197130215  12.44593322715844
+  POINT  559  -17.18577727459241  14.27791829325811
+  POINT  560  -15.79268534169501  13.36945828023087
+  POINT  561  -15.36154583103397  12.46837759393134
+  POINT  562  -16.20425444975626  14.29576377670733
+  POINT  563  -16.55222024238547  15.22666815650746
+  POINT  564  14.61766884814922  19.01336639514921
+  POINT  565  15.10160929308571  19.93869866233297
+  POINT  566  -8.954387420107352  8.883178967849199
+  POINT  567  -8.421001648218994  7.978132991115737
+  POINT  568  -7.881861900173009  8.935529708141328
+  POINT  569  -10.48552760095411  8.043256113861043
+  POINT  570  -10.07088815701037  6.936996660496273
+  POINT  571  -9.987737533441372  8.923405826479188
+  POINT  572  -9.448597785395389  9.880802543504778
+  POINT  573  -8.909628446845817  12.63950157787882
+  POINT  574  -9.96979275554061  12.62200835043421
+  POINT  575  -10.5192284477842  11.71182555571344
+  POINT  576  -9.962058778017163  10.82432828698728
+  POINT  577  -8.928708664683143  10.78410142835729
+  POINT  578  -8.826724490159041  19.9115345212223
+  POINT  579  -7.788049595360713  19.92284393906273
+  POINT  580  -8.326673162463226  19.01049914571327
+  POINT  581  6.796923008359899  14.46893104772356
+  POINT  582  5.758685968348203  14.47457989609917
+  POINT  583  7.331484508515757  13.55426320744392
+  POINT  584  7.842526297326634  14.46604282885744
+  POINT  585  3.183665335263674  17.16821321585526
+  POINT  586  3.688660309630354  18.14224948377619
+  POINT  587  2.676212803311897  18.08657678214764
+  POINT  588  5.226436037298559  17.21789324488178
+  POINT  589  4.713801779364758  16.30794714168605
+  POINT  590  1.702834415187505  17.9614070963485
+  POINT  591  2.207829389554186  18.93544336426943
+  POINT  592  9.410254775410465e-08  18.81027366105638
+  POINT  593  0.6172255007148968  19.40513683923515
+  POINT  594  -9.714117030543257  27.14602202785425
+  POINT  595  -10.74401846579198  27.10759225834228
+  POINT  596  -10.26601121841064  26.20720376458829
+  POINT  597  -15.19792430940091  31.58463475974873
+  POINT  598  -14.51995414837362  32.42407660952124
+  POINT  599  -15.55919105425835  32.56628720680114
+  POINT  600  -13.5787847899452  32.30652306297098
+  POINT  601  -13.91739051255635  33.26987333692369
+  POINT  602  -13.68943052768649  30.59673119233732
+  POINT  603  -13.11784158395992  31.51940311662963
+  POINT  604  -12.62592368588394  30.65540797339841
+  POINT  605  -18.10341288837137  21.84121234606356
+  POINT  606  -18.87127590553306  22.47222715848427
+  POINT  607  -17.12463310060343  18.09656294225589
+  POINT  608  -17.31694470247984  17.15083220035995
+  POINT  609  -16.9703546319652  16.19013707736997
+  POINT  610  -15.98883180712904  16.20798256081918
+  POINT  611  10.38199647148354  22.61371976810885
+  POINT  612  9.849540679822894  21.7138881677267
+  POINT  613  8.8085350316233  21.72280092159405
+  POINT  614  9.329107093393057  20.81496657605682
+  POINT  615  8.9287090372967  10.78409883706605
+  POINT  616  9.962058430246611  10.82432580169985
+  POINT  617  9.448597593195121  9.88079938186117
+  POINT  618  9.969792986625455  12.62200682338526
+  POINT  619  8.90962883591534  12.63950012274126
+  POINT  620  9.437251948192607  13.5338816892218
+  POINT  621  10.67234141492057  4.14015762808947
+  POINT  622  9.899143945874886  3.622737177952356
+  POINT  623  11.12308967028839  3.378421352424517
+  POINT  624  10.05434271335534  5.157341501088084
+  POINT  625  11.26624724302613  4.931019061942361
+  POINT  626  11.04685146630943  12.60620519964597
+  POINT  627  12.11322047313526  12.57558645323589
+  POINT  628  11.56378510572855  13.48576964345572
+  POINT  629  10.51922835403217  11.71182363316543
+  POINT  630  11.03911690993059  10.80852417796056
+  POINT  631  8.353117771266421  15.36645081786232
+  POINT  632  8.887679271422279  14.45178297758268
+  POINT  633  9.947843422132394  14.43428967822668
+  POINT  634  -7.354534566620368  9.865368360421384
+  POINT  635  -6.821148794732007  8.960322383687922
+  POINT  636  -5.241808196453412  9.89286263766502
+  POINT  637  -5.768321098655418  10.8109113925901
+  POINT  638  -4.716307833929465  10.81361299428714
+  POINT  639  -8.846687175134175  18.09453634019771
+  POINT  640  -7.808012280335847  18.10584575803814
+  POINT  641  -7.292392561451639  17.20089190904147
+  POINT  642  -6.77237854878069  18.11685471455703
+  POINT  643  -3.663850057285723  10.82236267206403
+  POINT  644  -2.609574443921612  10.83288750674358
+  POINT  645  -3.135519318363349  9.906089074041617
+  POINT  646  -4.190362959487728  11.74041142698911
+  POINT  647  1.022235278187542  6.105131945364167
+  POINT  648  1.537413456757289  7.078319240970639
+  POINT  649  0.5151765885688294  7.052715105123196
+  POINT  650  2.577937928342901  7.096153011320037
+  POINT  651  2.070879238724189  8.043736171079065
+  POINT  652  3.092619808349037  6.17939491294298
+  POINT  653  3.626085590315936  7.144811843051406
+  POINT  654  11.48251188829295  35.02401731321491
+  POINT  655  10.64039816452791  34.61217235404054
+  POINT  656  10.17110341744214  33.75754315009095
+  POINT  657  14.6689103389384  22.67322577662324
+  POINT  658  14.05319959738808  21.7410710783964
+  POINT  659  15.14265836363845  21.78642172193218
+  POINT  660  13.01772434463638  21.71937825377518
+  POINT  661  12.50723794880099  22.61679607802062
+  POINT  662  18.09519862717962  19.95611146231709
+  POINT  663  19.1740485049595  20.44527447993038
+  POINT  664  19.11595980806804  21.52156423697686
+  POINT  665  19.97093453194041  21.0778563218991
+  POINT  666  16.26820018552503  25.3010316807035
+  POINT  667  17.20417075684983  25.40139698246272
+  POINT  668  16.34859018777993  26.20978847968642
+  POINT  669  18.10513372405381  25.23404605383805
+  POINT  670  18.34437302491627  24.32069547942606
+  POINT  671  19.34729683337535  25.06775162939346
+  POINT  672  15.85270720624401  27.09338928485154
+  POINT  673  16.78867777756881  27.19375458661076
+  POINT  674  15.291938186953  28.00781064238943
+  POINT  675  17.30476560650833  28.05418410949204
+  POINT  676  16.82978442287303  28.99839439914488
+  POINT  677  17.8667222480114  28.98778277049785
+  POINT  678  11.90568276733603  25.26641722612537
+  POINT  679  12.94362175678668  25.24019557197247
+  POINT  680  12.33385311172404  26.14255336301493
+  POINT  681  13.04745149254336  23.49596728408519
+  POINT  682  11.97523786865631  23.48488822901835
+  POINT  683  13.26157019599279  27.94640762414275
+  POINT  684  12.80192545764358  27.03544053207227
+  POINT  685  11.76398646819293  27.06166218622517
+  POINT  686  12.71478625639084  28.84364548586147
+  POINT  687  13.74429763827116  28.8355037547217
+  POINT  688  11.6871942678587  28.89644654626223
+  POINT  689  12.16992171013707  29.78554267684118
+  POINT  690  -2.645241319283594  23.65915467021994
+  POINT  691  -2.171873771957271  22.80696352912885
+  POINT  692  -1.671396963511793  23.78707299861202
+  POINT  693  -3.638150958880634  21.77295984420368
+  POINT  694  -4.169619601589666  22.67588242311962
+  POINT  695  -4.662052432741228  21.76979706658653
+  POINT  696  -2.588325360715464  21.77484192911209
+  POINT  697  -3.080758191867026  20.868756572579
+  POINT  698  -3.465390409600786  36.74515601536355
+  POINT  699  -4.39944145231441  36.56941420393424
+  POINT  700  -6.438967484949353  38.07148150975368
+  POINT  701  -5.801761824463367  37.27840372561251
+  POINT  702  -7.465007651281466  37.67899578164534
+  POINT  703  -7.145548671869747  38.67996608706892
+  POINT  704  1.645701561067675  36.58620616945915
+  POINT  705  2.097605922649433  37.6591520210071
+  POINT  706  1.630912530570906  38.7025770899849
+  POINT  707  0.6144262348982835  38.03413825350503
+  POINT  708  0.6145007137649187  36.62602437274583
+  POINT  709  1.03123486124828  35.70349538136442
+  POINT  710  3.50029065404008  34.71485867238029
+  POINT  711  4.030903182455804  33.71986523468118
+  POINT  712  2.549220124316628  34.70633644192217
+  POINT  713  5.09669004529192  31.88416738089897
+  POINT  714  4.59189732499495  30.94579415206534
+  POINT  715  4.543156123115856  32.76980086916907
+  POINT  716  3.548257480742272  32.79893134025448
+  POINT  717  3.041784030297622  31.8775360658333
+  POINT  718  2.529531089637571  32.8276004313454
+  POINT  719  6.639239149600429  29.07614732768379
+  POINT  720  5.633088140941368  29.09870269116678
+  POINT  721  -5.741117900464612  18.12804558230707
+  POINT  722  -4.710794713134181  18.134038227614
+  POINT  723  -6.25673761934882  19.03299943130374
+  POINT  724  9.094364861792316  3.185783391206454
+  POINT  725  8.120154810382525  3.065542696161892
+  POINT  726  8.486226833839986  4.246239372190631
+  POINT  727  9.543080762382589  2.423606448705923
+  POINT  728  4.181697363812684  8.041699532502184
+  POINT  729  4.69637924381882  7.124941434125128
+  POINT  730  4.720893497007972  8.958696437146365
+  POINT  731  3.650599843505089  8.978566846072644
+  POINT  732  5.772906862056196  8.955994301021946
+  POINT  733  5.241809341748601  9.892861614592405
+  POINT  734  6.300233792796178  8.026154643550692
+  POINT  735  6.622836074707541  2.05014634703189
+  POINT  736  5.718844002281117  1.755757914971069
+  POINT  737  6.192965581434661  0.9829766219365916
+  POINT  738  5.664301131002254  3.628351178339397
+  POINT  739  6.833866176424866  3.46371406014724
+  POINT  740  6.342451737007583  4.290635795338225
+  POINT  741  7.442004204377196  2.403258079163064
+  POINT  742  7.917003402974732  1.633697762640239
+  POINT  743  8.94127268867317  5.267193691042839
+  POINT  744  7.96706263726338  5.146952995998276
+  POINT  745  9.535178516778736  6.058055124895729
+  POINT  746  -13.10928490082518  34.07016086758892
+  POINT  747  -12.24388551710086  34.4147639590643
+  POINT  748  -12.49585729120814  35.61581090418589
+  POINT  749  -14.07322716081642  34.21070994911054
+  POINT  750  -14.36136978693606  10.72072627767335
+  POINT  751  -14.88062444253561  11.58118583581166
+  POINT  752  -14.26663781292847  12.50471088888409
+  POINT  753  -13.22961531762352  10.76268243082563
+  POINT  754  -13.2079352618582  12.53633569326509
+  POINT  755  -12.6910018313468  11.65677153517575
+  POINT  756  15.07065410043878  18.08797196826217
+  POINT  757  14.01205198450469  18.07820806245078
+  POINT  758  -6.796922393156049  14.4689317302459
+  POINT  759  -6.269727250030074  15.38636001982073
+  POINT  760  -5.758685342348371  14.47458053337772
+  POINT  761  -7.817995296922273  16.28529708460574
+  POINT  762  -8.353117303969567  15.36645138459855
+  POINT  763  -8.863148300054089  16.27103725251539
+  POINT  764  -7.842525768612235  14.46604360030338
+  POINT  765  -7.331483860930532  13.55426411386037
+  POINT  766  -6.782361565367118  16.29630604112463
+  POINT  767  -3.683558631825044  14.45370591664109
+  POINT  768  -4.714727414587884  14.47325408116177
+  POINT  769  -5.24192255771386  13.55582579158695
+  POINT  770  -4.720392683042421  12.64308054429161
+  POINT  771  -5.764350610802907  12.64440699650756
+  POINT  772  -3.667934906398679  12.6518302220685
+  POINT  773  -8.395897107966746  11.71956985286866
+  POINT  774  -7.863355897507648  12.63144425890769
+  POINT  775  -6.817752522051462  12.63433238885021
+  POINT  776  -6.296222647380024  11.72158714155488
+  POINT  777  -6.821723009903972  10.80083678493275
+  POINT  778  -7.882436115344974  10.77604410938616
+  POINT  779  4.716308849678887  10.81361234423387
+  POINT  780  5.76832221472711  10.81091020810945
+  POINT  781  4.190363830521503  11.74041081086773
+  POINT  782  3.663850957542993  10.82236221735069
+  POINT  783  1.564857731194123  14.49716655277795
+  POINT  784  1.04410790663793  13.59158434318418
+  POINT  785  0.5207500976712671  14.50289465153176
+  POINT  786  1.565386117813491  12.67566398686721
+  POINT  787  0.5212784842906355  12.68139208562102
+  POINT  788  2.613060739273198  12.66750846420746
+  POINT  789  2.090231316925903  11.7573162066443
+  POINT  790  2.247276054134772e-07  15.40847690902769
+  POINT  791  -0.5207495998285867  14.50289469943392
+  POINT  792  -11.21209063177709  28.0004787204091
+  POINT  793  -11.76398481964448  27.06166045714313
+  POINT  794  -13.26156901870596  27.94640451622695
+  POINT  795  -12.71478480762005  28.84364148415803
+  POINT  796  -13.74429684069641  28.83549908117502
+  POINT  797  -12.16991936167931  29.78553808233906
+  POINT  798  -11.59833041795275  30.70821000663137
+  POINT  799  -10.66722518583636  28.94237531859013
+  POINT  800  -10.16307824785739  29.92216165396643
+  POINT  801  -9.687977339945633  29.02619685698455
+  POINT  802  -11.68719153968886  28.89644351739098
+  POINT  803  -10.66517999954061  30.87364895036685
+  POINT  804  -9.685932153649887  30.95747048876127
+  POINT  805  -16.82978847880473  28.99838541372564
+  POINT  806  -17.30476813190573  28.05417686774796
+  POINT  807  -17.86672715494531  28.98777290369169
+  POINT  808  -12.80192396054655  27.03543843675622
+  POINT  809  -12.33385179456144  26.1425519746894
+  POINT  810  -13.83143599362291  27.02729603377322
+  POINT  811  -18.71184747782762  23.47031202987638
+  POINT  812  -19.74963048996175  23.15469430712368
+  POINT  813  -19.34729785953139  25.06774765708812
+  POINT  814  -18.34437302460557  24.32069263403202
+  POINT  815  -18.10513422474459  25.23404206079518
+  POINT  816  -17.49125461230818  23.64225669394841
+  POINT  817  7.817995757395382  16.28529666142913
+  POINT  818  7.292392975317489  17.20089161300046
+  POINT  819  7.80801268720816  18.10584554161538
+  POINT  820  6.772378944905659  18.11685450089467
+  POINT  821  8.863148731491028  16.27103681015437
+  POINT  822  1.015466424403581  21.25999439681868
+  POINT  823  1.614481163449325  21.90276020009269
+  POINT  824  1.015466375681423  20.43531928751171
+  POINT  825  1.63269187639632  19.84045612674685
+  POINT  826  2.606070264520712  19.96562581254599
+  POINT  827  4.710795072138549  18.13403803354307
+  POINT  828  4.203342540186773  19.05240159983545
+  POINT  829  5.741118267854977  18.12804536094104
+  POINT  830  6.25673797974565  19.03299928955596
+  POINT  831  8.29058057434478  22.63591511879024
+  POINT  832  7.770146987914942  21.73699352712036
+  POINT  833  7.761488015053925  23.54966519059946
+  POINT  834  8.799876058762283  23.53547258507314
+  POINT  835  7.882436851035273  10.77604170622064
+  POINT  836  6.821724104311079  10.80083523684094
+  POINT  837  8.395897688086761  11.71956812605931
+  POINT  838  6.296223612241364  11.72158596648241
+  POINT  839  7.863356649653912  12.63144299189585
+  POINT  840  6.817753360687178  12.63433121076197
+  POINT  841  5.764351471103209  12.64440618203048
+  POINT  842  15.41658924936081  7.259168960497591
+  POINT  843  14.24561038678537  7.342548392480751
+  POINT  844  14.89244912969332  8.12523258985544
+  POINT  845  12.07551877984602  9.034284548463294
+  POINT  846  13.2074318313694  9.050012371808604
+  POINT  847  12.60943811820144  8.176454016117848
+  POINT  848  12.13489966336506  10.8019324567901
+  POINT  849  11.57772973957951  9.91443462532451
+  POINT  850  10.97973602641154  9.040876269633753
+  POINT  851  11.96631097541835  7.35863242591423
+  POINT  852  11.55167271280977  6.252370796998449
+  POINT  853  11.06288680406948  7.054464563856754
+  POINT  854  12.169671414375  5.235186923999835
+  POINT  855  12.88604184172865  5.817407070591241
+  POINT  856  12.61406020569684  4.479514007912766
+  POINT  857  13.09822402694172  7.374360249259541
+  POINT  858  13.60248324400228  6.524726802277135
+  POINT  859  14.05124229732068  5.767551513356759
+  POINT  860  17.07578521456617  11.60014693753975
+  POINT  861  17.71057756929273  10.70831332876806
+  POINT  862  16.58566833102513  10.66595132007714
+  POINT  863  16.40667132100974  12.44593062352206
+  POINT  864  15.79268502556732  13.36945619674464
+  POINT  865  15.36154529735113  12.46837529147962
+  POINT  866  17.18577703109811  14.27791621091107
+  POINT  867  17.8991747362448  13.49160449707131
+  POINT  868  17.50692494278236  12.50122784280477
+  POINT  869  18.59468174703889  12.63536765117651
+  POINT  870  -5.772905779136106  8.955995570716897
+  POINT  871  -6.300233112688748  8.02615691843684
+  POINT  872  -4.720892514410153  8.958697172413938
+  POINT  873  -2.562097267089574  3.227805457117126
+  POINT  874  -2.034944989672938  4.189368100531676
+  POINT  875  -0.5151786281004135  7.052714909961791
+  POINT  876  -4.495306666907339e-07  8.025902205568261
+  POINT  877  -0.5151778044490922  8.96843130178743
+  POINT  878  -1.555799685599574  8.971257959564014
+  POINT  879  -1.040621823848756  9.913787250944587
+  POINT  880  0.5151774122201507  8.968431496948837
+  POINT  881  2.806199940197374e-07  11.76547179125803
+  POINT  882  -0.5212779305555666  12.681392147575
+  POINT  883  -2.090230658535098  11.75731647898901
+  POINT  884  -1.561899919612723  10.84104288096659
+  POINT  885  -0.5212780384622415  10.83821622319001
+  POINT  886  0.5212783763839607  10.83821616123602
+  POINT  887  -8.95781830977193  7.046847428450418
+  POINT  888  -9.535179298628961  6.058061838123082
+  POINT  889  -7.885292789837587  7.099198168742546
+  POINT  890  -6.342458718450149  4.290639218573956
+  POINT  891  -5.664307592746104  3.628355267241409
+  POINT  892  -6.833874189380248  3.463718914397889
+  POINT  893  -4.115213411606943  4.361615670969387
+  POINT  894  -4.656830149629152  5.341664562613124
+  POINT  895  -3.599151439420091  5.248004662165036
+  POINT  896  -7.4420232035393  2.403268237260354
+  POINT  897  -7.917037371317474  1.633712477540171
+  POINT  898  -8.120174329243344  3.065552188592901
+  POINT  899  0.5061739145443324  5.095155188591381
+  POINT  900  -2.929429205988932e-06  4.110781499104045
+  POINT  901  -0.5061784339744557  5.09515412002939
+  POINT  902  1.528410782732792  5.120759324438823
+  POINT  903  0.5061724875148098  3.087534852556564
+  POINT  904  1.539499732754256  3.149220199566127
+  POINT  905  11.64987528159459  32.70981082487776
+  POINT  906  12.51527678005581  32.36521402236142
+  POINT  907  12.11081476394826  33.49693513307348
+  POINT  908  12.62592549818568  30.65541566530306
+  POINT  909  11.59833350965353  30.70821672570382
+  POINT  910  14.07320338353421  34.21073365839178
+  POINT  911  13.10926757404889  34.07018328539174
+  POINT  912  13.91737880453094  33.26989288698078
+  POINT  913  12.24386607558766  34.41478008790807
+  POINT  914  12.49582536742833  35.61583656588377
+  POINT  915  14.16603325158087  23.49720392336359
+  POINT  916  15.25549201783124  23.54255456689937
+  POINT  917  15.93819784253432  24.42958644855976
+  POINT  918  15.08261727346442  25.23797794578346
+  POINT  919  16.44107492989185  23.60560830181941
+  POINT  920  13.63403317143619  24.36529607436132
+  POINT  921  14.0622035158242  25.24143221125088
+  POINT  922  16.13661120818988  21.79829183825163
+  POINT  923  15.52090046663956  20.86613714002479
+  POINT  924  16.09556213763715  19.95056877865242
+  POINT  925  17.17857677781561  19.94984061055883
+  POINT  926  16.75928560426177  19.02240213286701
+  POINT  927  17.431475160555  20.8842781081025
+  POINT  928  18.71184721732612  23.47031396269385
+  POINT  929  18.87127587281586  22.47222833205418
+  POINT  930  19.74963016806416  23.15469636218577
+  POINT  931  17.49125494700478  23.6422586667476
+  POINT  932  18.10341307466681  21.84121305493807
+  POINT  933  16.8085491223017  22.75522678508721
+  POINT  934  17.18679122530281  21.83494220317982
+  POINT  935  14.51994297887854  32.4240927325463
+  POINT  936  13.57878043675709  32.30653817612266
+  POINT  937  13.11784095440342  31.51941386792693
+  POINT  938  13.68942915488696  30.59673981906429
+  POINT  939  11.44016434034826  24.38232842674731
+  POINT  940  10.89995079660589  23.50315722068274
+  POINT  941  10.83039569528561  25.28468621778976
+  POINT  942  9.846922943175489  23.51115996583782
+  POINT  943  9.317830383884633  24.42491003764703
+  POINT  944  9.800494196258793  25.32311557173736
+  POINT  945  8.753447311845587  25.34742819097269
+  POINT  946  10.26601262324656  26.20720437111542
+  POINT  947  -9.188516399988456  28.09611515482773
+  POINT  948  -8.684369462009494  29.07590149020404
+  POINT  949  -8.710509152607116  27.19572666107374
+  POINT  950  -4.967007708624748  35.55401033082136
+  POINT  951  -5.401876338967484  36.44269225860205
+  POINT  952  -6.369328080773704  36.26299985249962
+  POINT  953  -8.644059727746285  34.74088988879614
+  POINT  954  -9.113357089394702  35.59551543427815
+  POINT  955  -7.680217086741342  34.8114162753276
+  POINT  956  -8.132953504798678  33.74408230964664
+  POINT  957  -9.038370913869775  36.59719108141323
+  POINT  958  -7.080382952483385  35.61775611998313
+  POINT  959  -6.569276729535778  34.62094854083364
+  POINT  960  -7.480268437979268  36.45346758699358
+  POINT  961  -8.176062522991147  37.03375204912885
+  POINT  962  -9.033664824607252  37.8435674405669
+  POINT  963  -3.013509432387965  35.67217382596145
+  POINT  964  -2.514327020017076  36.73659756517147
+  POINT  965  -1.031206014429366  35.70346448021024
+  POINT  966  -1.53422388422784  34.73877849312591
+  POINT  967  -0.5029838558529507  34.77862759756677
+  POINT  968  2.021011022720923  33.78146904341516
+  POINT  969  1.514537572276274  32.86007376899397
+  POINT  970  1.534226606955332  34.73880977957074
+  POINT  971  0.5030257596525753  34.77862798285742
+  POINT  972  7.889854101383875e-06  33.81394199577308
+  POINT  973  1.536896992374578  27.28673102869031
+  POINT  974  2.075897760470205  26.39023244060897
+  POINT  975  2.583954155543661  27.30113813950133
+  POINT  976  3.556816059688512  30.9375844125214
+  POINT  977  4.088202963281139  30.03451158984436
+  POINT  978  2.538089668583811  30.96625350361232
+  POINT  979  0.5030096425456565  32.87005276973701
+  POINT  980  -0.5029999729598695  32.87005238444636
+  POINT  981  1.011529709462303  31.91618415766725
+  POINT  982  11.21209270722683  28.00048045890696
+  POINT  983  10.74402036130729  27.10759328984962
+  POINT  984  9.714118862280475  27.14602264379722
+  POINT  985  10.66722816097306  28.94237764988668
+  POINT  986  9.687978884244082  29.02619593691772
+  POINT  987  10.16308044487594  29.92216202427299
+  POINT  988  7.660247523983134  29.07171418485961
+  POINT  989  8.684369985103768  29.07589903930046
+  POINT  990  7.163900427677865  28.15025091012108
+  POINT  991  9.188517701200887  28.09611466491416
+  POINT  992  8.710509963140158  27.19572574617996
+  POINT  993  -4.203342243390184  19.05240175014947
+  POINT  994  -3.688659985491623  18.14224967870969
+  POINT  995  -3.655895652889911  19.96374384445787
+  POINT  996  -4.678030380532469  19.95553239336218
+  POINT  997  -2.207829164486162  18.93544342244381
+  POINT  998  -2.606070054724741  19.96562592936628
+  POINT  999  -5.170740868433548  20.8574752560983
+  POINT  1000  -5.702209511142579  21.76039783501424
+  POINT  1001  -5.71818745893382  19.94613316178989
+  POINT  1002  -6.731544945060238  21.74909188831638
+  POINT  1003  -6.222856509367919  22.66141369880462
+  POINT  1004  -7.249499434945713  20.83597766954888
+  POINT  1005  -7.770146433171051  21.73699353333926
+  POINT  1006  -6.749448107249898  19.93494229403985
+  POINT  1007  5.802524977371679  7.067405929156367
+  POINT  1008  6.85076775285229  7.071731449131153
+  POINT  1009  7.387583714762178  6.140445024793657
+  POINT  1010  7.885292530186677  7.099193739187982
+  POINT  1011  5.762972814506381  5.284127824133605
+  POINT  1012  5.246913203874932  6.170518239705588
+  POINT  1013  4.656827080953521  5.341663329102365
+  POINT  1014  6.932537859928994  5.119490705941448
+  POINT  1015  5.123453405055713  2.630543796725044
+  POINT  1016  4.686581836917295  1.584872268547702
+  POINT  1017  3.780741176469697  1.381516026850165
+  POINT  1018  4.380854250247183  0.4856945617800922
+  POINT  1019  3.07892064305541  2.323657990883948
+  POINT  1020  4.632038965638431  3.457465531916029
+  POINT  1021  8.957817564431407  7.046841938024162
+  POINT  1022  8.421001602521519  7.978128362361659
+  POINT  1023  8.954387418505732  8.883174489212605
+  POINT  1024  10.48552585172216  8.043251376985188
+  POINT  1025  10.07088758911358  6.936989748069407
+  POINT  1026  9.98773681145564  8.923401453846404
+  POINT  1027  14.14927330494213  14.3319204116199
+  POINT  1028  13.09057086026495  14.36354542779163
+  POINT  1029  13.68885655723154  13.42352588087392
+  POINT  1030  14.5608425845304  15.25822614311025
+  POINT  1031  15.01786739893976  16.19866298162331
+  POINT  1032  14.0080124223849  16.21237679705068
+  POINT  1033  15.15912828149698  14.31820659619254
+  POINT  1034  16.20425430515559  14.29576192823498
+  POINT  1035  16.55222028702778  15.22666661035897
+  POINT  1036  15.43600191484122  17.16213210717993
+  POINT  1037  16.04161877848574  18.09729043987835
+  POINT  1038  17.12463341866421  18.09656227178477
+  POINT  1039  17.31694506141086  17.15083111331099
+  POINT  1040  15.98883207698672  16.2079814532395
+  POINT  1041  16.97035480292924  16.19013573591558
+  POINT  1042  -9.329106518265187  20.81496648779522
+  POINT  1043  -9.8677300853677  19.90262169444576
+  POINT  1044  -16.0416184259235  18.09729104090766
+  POINT  1045  -16.75928532981814  19.02240250148187
+  POINT  1046  -10.94364637205534  16.23848947462534
+  POINT  1047  -9.899040221872481  16.25867329662998
+  POINT  1048  -9.363918214825187  17.17751899663717
+  POINT  1049  -9.882579096952568  18.0821723843123
+  POINT  1050  1.561900414029895  10.8410427689158
+  POINT  1051  2.609575035489602  10.83288724625605
+  POINT  1052  1.04062209494766  9.913787200847779
+  POINT  1053  3.135520054646986  9.906088779622188
+  POINT  1054  2.596323921451698  8.989091874978008
+  POINT  1055  1.555799449866085  8.97125810462861
+  POINT  1056  5.241923253953617  13.55582514043971
+  POINT  1057  4.714728002752798  14.47325361022883
+  POINT  1058  3.143090414259499  13.57017754949987
+  POINT  1059  3.667935613371911  12.65182976927697
+  POINT  1060  4.720393505507803  12.64307989616015
+  POINT  1061  2.105326509092408  15.38069455968688
+  POINT  1062  2.670185462451287  16.23272638623747
+  POINT  1063  1.606358875586338  16.26050868767612
+  POINT  1064  2.628684318059071  14.4693842513393
+  POINT  1065  3.683559192157784  14.45370555640881
+  POINT  1066  4.200321906552371  15.37246031206826
+  POINT  1067  3.682632968769743  16.28839908786602
+  POINT  1068  -1.606358493039556  16.26050877577584
+  POINT  1069  -2.670185073501789  16.23272654426651
+  POINT  1070  -2.105326053234482  15.38069472542052
+  POINT  1071  -3.183664984271242  17.16821337539803
+  POINT  1072  -2.676212514527244  18.08657689793349
+  POINT  1073  -1.70283416326578  17.96140711913215
+  POINT  1074  0.6172255840106643  18.01551021964674
+  POINT  1075  -0.6172253233165815  18.01551020223283
+  POINT  1076  -1.085608673357664  17.16664367772251
+  POINT  1077  -0.5207496530903567  16.31461185887652
+  POINT  1078  0.5207500444094971  16.31461181097436
+  POINT  1079  1.085608997768376  17.16664363752495
+  POINT  1080  -16.26819960626571  25.30102864423684
+  POINT  1081  -15.0826163587443  25.23797552751852
+  POINT  1082  -15.93819691156472  24.42958418138574
+  POINT  1083  -15.85270768406584  27.0933844772987
+  POINT  1084  -14.85185005261381  27.02384105180678
+  POINT  1085  -15.29193868323435  28.00780553873586
+  POINT  1086  -14.3922049944544  26.11287497233606
+  POINT  1087  -14.06220229975341  25.24143050948495
+  POINT  1088  -15.7999041554007  28.93948960494379
+  POINT  1089  -16.33689631951905  29.86052605444166
+  POINT  1090  -14.74418021093874  30.63117829061417
+  POINT  1091  -15.76075609457718  30.75508671479437
+  POINT  1092  -16.81445339648837  30.82931935765637
+  POINT  1093  -14.25226231286276  29.76718314738296
+  POINT  1094  -14.79904652394867  28.86994617945188
+  POINT  1095  8.846687614423065  18.09453615000725
+  POINT  1096  8.326673584011235  19.01049903790145
+  POINT  1097  8.8267249782098  19.91153448810875
+  POINT  1098  9.867730626409395  19.90262173424139
+  POINT  1099  7.788050050994897  19.92284387971688
+  POINT  1100  4.650398721048944  25.41533314105567
+  POINT  1101  4.13553988625797  26.36549811509552
+  POINT  1102  3.637813758430262  25.45447457738014
+  POINT  1103  3.148718616325014  24.57178682998195
+  POINT  1104  2.633859781534041  25.52195180402179
+  POINT  1105  1.586802618364957  25.50754469321078
+  POINT  1106  3.649195445762174  23.59167733893057
+  POINT  1107  4.169619811571008  22.67588222314829
+  POINT  1108  4.673096959030069  23.58851448755802
+  POINT  1109  2.58832552483298  21.77484182477213
+  POINT  1110  2.171873936919459  22.8069634498414
+  POINT  1111  2.645241468865954  23.65915456557222
+  POINT  1112  1.671397107482298  23.78707294089278
+  POINT  1113  4.678030658177207  19.95553223402469
+  POINT  1114  3.655895895669011  19.96374368425781
+  POINT  1115  3.638151155981279  21.77295969648394
+  POINT  1116  4.662052669249173  21.76979684511139
+  POINT  1117  3.080758382511145  20.86875644673523
+  POINT  1118  6.731545438466698  21.74909183518711
+  POINT  1119  7.249499895745219  20.83597763799092
+  POINT  1120  6.749448501546653  19.93494218778363
+  POINT  1121  5.718187824495971  19.94613304783
+  POINT  1122  5.702209835567938  21.7603976589167
+  POINT  1123  6.222856927737663  22.66141354804614
+  POINT  1124  5.17074117997821  20.85747513225235
+  POINT  1125  14.88062362045075  11.58118328295605
+  POINT  1126  14.26663732500833  12.50470885617862
+  POINT  1127  13.20793488033116  12.53633387235034
+  POINT  1128  12.69100124091205  11.65676942854059
+  POINT  1129  13.22961407056096  10.76267987590455
+  POINT  1130  -4.181696757246904  8.041699829461468
+  POINT  1131  -3.650599174564211  8.978566896409593
+  POINT  1132  -3.626085797421631  7.144811553632946
+  POINT  1133  -4.696379137267573  7.124941829637294
+  POINT  1134  -2.5963235612001  8.989091731089145
+  POINT  1135  -2.070879541800435  8.043735781931989
+  POINT  1136  -3.574367948496355  3.363807242843679
+  POINT  1137  -3.078930514188047  2.323656929439507
+  POINT  1138  -5.123462129635516  2.630546839115701
+  POINT  1139  -4.686602709596436  1.584876903295025
+  POINT  1140  -4.632046658705416  3.457467143291768
+  POINT  1141  -3.780758206397734  1.381518432692542
+  POINT  1142  -4.380882064820396  0.4857008521467929
+  POINT  1143  -1.537414964648728  7.078318112167635
+  POINT  1144  -1.022237926549232  6.10513101172257
+  POINT  1145  -2.551004482247714  5.199344992224856
+  POINT  1146  -3.092621220269923  6.179393883868594
+  POINT  1147  -2.577938840249254  7.096151883692768
+  POINT  1148  -1.52841477052277  5.120757322235234
+  POINT  1149  -1.565385542453618  12.67566417103727
+  POINT  1150  -1.044107338782977  13.59158446540026
+  POINT  1151  -1.564857211726638  14.49716672289619
+  POINT  1152  -2.628683792188871  14.46938449138686
+  POINT  1153  -2.613060066762507  12.66750879681426
+  POINT  1154  -3.143089790317201  13.57017791411676
+  POINT  1155  -8.941278766903849  5.267200605438743
+  POINT  1156  -8.486236698750734  4.246245735265347
+  POINT  1157  -7.96706738323741  5.146957735903831
+  POINT  1158  -9.094385712909785  3.185795058127813
+  POINT  1159  -9.899165223866994  3.622750914152373
+  POINT  1160  -9.543111594457244  2.423623277029117
+  POINT  1161  -10.05434861414229  5.157349837484599
+  POINT  1162  -10.67235893022354  4.140170700800017
+  POINT  1163  -11.12311705597741  3.378439779022869
+  POINT  1164  -7.38758492759221  6.140449119392674
+  POINT  1165  -6.932542859439094  5.119494249219278
+  POINT  1166  -5.762976262804949  5.284130602062798
+  POINT  1167  -6.850768266039271  7.071734682057993
+  POINT  1168  -5.80252525044337  7.067407869086968
+  POINT  1169  -5.246914290618097  6.170519593258447
+  POINT  1170  10.71672358375953  32.87524392735796
+  POINT  1171  9.642413735714634  32.79125514185909
+  POINT  1172  11.12118559986708  31.74352281664589
+  POINT  1173  9.15793076534775  31.87228668931375
+  POINT  1174  9.685932535089496  30.95746811521505
+  POINT  1175  10.66518181181848  30.87364982818402
+  POINT  1176  15.19791671718209  31.58464847548497
+  POINT  1177  15.55917637400988  32.56630552600364
+  POINT  1178  15.79990214283926  28.93949698650302
+  POINT  1179  16.3368917696794  29.86053599387202
+  POINT  1180  15.76074915645257  30.75509875525596
+  POINT  1181  16.81444462265249  30.82933310971594
+  POINT  1182  14.74417705037517  30.63118830145916
+  POINT  1183  14.25226159415743  29.76719009883528
+  POINT  1184  14.79904553375937  28.86995223711657
+  POINT  1185  -7.660247595099477  29.07171642334552
+  POINT  1186  -8.159708535056653  30.00179812550234
+  POINT  1187  -6.639239694273195  29.0761486788626
+  POINT  1188  -7.163900621226036  28.1502520435643
+  POINT  1189  -5.497622619491922  34.55901436086761
+  POINT  1190  -4.49518773283885  34.6857363061998
+  POINT  1191  -5.579336478117359  32.80510559052856
+  POINT  1192  -6.09745675374988  33.75267451621208
+  POINT  1193  -6.650990588161214  32.86703977049458
+  POINT  1194  -5.700404689242956  23.58012241603744
+  POINT  1195  -6.729740123160614  23.56881646933958
+  POINT  1196  -7.239035482595526  24.46837386823964
+  POINT  1197  -7.761487302720488  23.54966515100682
+  POINT  1198  -7.691207402098477  27.22632931678663
+  POINT  1199  -6.670199501272196  27.23076157230372
+  POINT  1200  -6.172815514826199  26.31659798520196
+  POINT  1201  -5.645508733953759  27.24052071197963
+  POINT  1202  -8.216808032653276  26.27623618981316
+  POINT  1203  -6.702397292590144  25.39718201604923
+  POINT  1204  -5.677706525271708  25.40694115572514
+  POINT  1205  -7.734144472150017  25.37803069771646
+  POINT  1206  -8.753446222658658  25.34742804200357
+  POINT  1207  -1.645698721915378  36.58607539347716
+  POINT  1208  -2.0975796991282  37.65905758287926
+  POINT  1209  -1.630935113652335  38.70247408973233
+  POINT  1210  -0.6145331724071246  38.03403837867723
+  POINT  1211  -0.6144586935404894  36.62592449791802
+  POINT  1212  8.00627890595873e-06  37.50863528601275
+  POINT  1213  0.5990148214488246  23.75062706100676
+  POINT  1214  -0.5990146744118122  23.75062707718625
+  POINT  1215  -1.072382221738135  24.60281821827733
+  POINT  1216  1.072382353395319  24.60281817673758
+  POINT  1217  0.5144203323314835  25.47109881332476
+  POINT  1218  3.58444379142495  29.11804267687441
+  POINT  1219  3.080359636161616  28.20371011551553
+  POINT  1220  2.549037542711368  29.11196928894155
+  POINT  1221  3.619360404257244  27.30721152743419
+  POINT  1222  5.129328969085179  28.18223377819683
+  POINT  1223  4.619525056731388  29.12625241641835
+  POINT  1224  4.631945366875925  27.26807009110972
+  POINT  1225  5.645508451085906  27.24052036585816
+  POINT  1226  2.034499539717892  30.03893177661523
+  POINT  1227  1.530415384454558  29.12459921525634
+  POINT  1228  1.519467510327002  30.97888342992712
+  POINT  1229  0.5079395805963843  30.98886243067015
+  POINT  1230  3.57436036144565  3.363808001711532
+  POINT  1231  4.115208087392189  4.361615383325885
+  POINT  1232  2.034939451144496  4.189370210393712
+  POINT  1233  2.551000814787705  5.199346967166499
+  POINT  1234  2.562089764809169  3.227807842293803
+  POINT  1235  3.599148476760741  5.248005798897869
+  POINT  1236  -8.808534389004958  21.72280081085314
+  POINT  1237  -8.290579899119484  22.63591502962064
+  POINT  1238  -9.849539984213617  21.7138879840766
+  POINT  1239  -8.799875258554394  23.5354724285207
+  POINT  1240  -14.05319871993245  21.74107047129854
+  POINT  1241  -13.49147167328674  20.83257382131933
+  POINT  1242  -13.01772343641998  21.71937768246372
+  POINT  1243  -15.07065374632022  18.08797242978403
+  POINT  1244  -15.4360015171055  17.16213287055806
+  POINT  1245  -14.0080120928104  16.21237758454029
+  POINT  1246  -15.01786712752577  16.19866394969555
+  POINT  1247  -17.17857644573234  19.94984075163958
+  POINT  1248  -17.43147479908956  20.8842778513917
+  POINT  1249  -16.09556177105241  19.95056885029135
+  POINT  1250  -15.52089992188291  20.86613685530161
+  POINT  1251  -15.10160880596872  19.93869860514389
+  POINT  1252  -17.18679097624842  21.83494159512092
+  POINT  1253  -18.18552489707417  26.14279763280435
+  POINT  1254  -17.20417083141572  25.40139287011322
+  POINT  1255  -16.3485902785953  26.20978421624601
+  POINT  1256  -16.78867890921584  27.19374870317508
+  POINT  1257  -17.80065072643519  27.17057660669527
+  POINT  1258  -18.72983447894121  27.01379366339507
+  POINT  1259  11.95573882194991  19.89979512998055
+  POINT  1260  10.91279663445388  19.89738135384383
+  POINT  1261  10.41041451927062  18.99394926589576
+  POINT  1262  12.50727362976512  18.99615568741801
+  POINT  1263  5.677706720839749  25.40694066827868
+  POINT  1264  5.179980593012042  24.49591713056331
+  POINT  1265  5.700404958820875  23.58012201478103
+  POINT  1266  6.729740561719636  23.56881619105143
+  POINT  1267  7.239036046137137  24.46837365733434
+  POINT  1268  7.691207579082008  27.22632790550661
+  POINT  1269  6.670199204699301  27.23076104833079
+  POINT  1270  6.172815602490047  26.31659736124369
+  POINT  1271  8.216808740161595  26.27623588438967
+  POINT  1272  6.702397474453146  25.39718135075132
+  POINT  1273  7.734144927787435  25.37803035029934
+  POINT  1274  14.36136880606171  10.72072377865549
+  POINT  1275  15.45627677840451  10.68439021395649
+  POINT  1276  15.49028452683864  8.941107024951828
+  POINT  1277  14.33918656687014  9.008056274559546
+  POINT  1278  13.80526722851472  9.865886806904992
+  POINT  1279  16.06641351663609  9.805491815776586
+  POINT  1280  16.64213914845493  8.907696187396814
+  POINT  1281  -7.631707103564363  30.91661699613311
+  POINT  1282  -8.655828970474381  30.92080206299163
+  POINT  1283  -7.130348925755392  31.87754588921673
+  POINT  1284  -6.634228490337664  30.95854195172743
+  POINT  1285  -9.157930722157598  31.87228935939205
+  POINT  1286  -8.612311842392856  32.75458842836879
+  POINT  1287  -7.648469201387913  32.82511481490026
+  POINT  1288  -2.549229273895434  34.70629607419768
+  POINT  1289  -2.021007115319019  33.78145919155421
+  POINT  1290  -3.500292663479144  34.71485452438976
+  POINT  1291  -4.030907574346319  33.71985855443602
+  POINT  1292  -5.179980371060386  24.49591750747982
+  POINT  1293  -4.650398593296442  25.41533347663255
+  POINT  1294  -3.649195283407097  23.591677514562
+  POINT  1295  -3.148718474961619  24.57178698404517
+  POINT  1296  -4.673096757267691  23.58851473694486
+  POINT  1297  0.5144203594414323  27.2905527635694
+  POINT  1298  1.022476754514889  28.20145846246176
+  POINT  1299  0.507938751521413  29.12842095013544
+  POINT  1300  -9.846921989817281  23.51115965477413
+  POINT  1301  -9.317829393418286  24.42490977616031
+  POINT  1302  -9.800492953921545  25.323115268257
+  POINT  1303  -10.83039438917027  25.28468549874502
+  POINT  1304  -10.92764508160684  18.07693196478106
+  POINT  1305  -10.41041404191582  18.99394930834161
+  POINT  1306  -10.91279607002197  19.89738127491452
+  POINT  1307  -11.95573820817218  19.89979496064743
+  POINT  1308  -11.41305425162406  20.80846734675159
+  POINT  1309  -15.14265757944868  21.78642099994649
+  POINT  1310  -14.66890934258192  22.67322486109087
+  POINT  1311  -16.13661054453237  21.79829124509394
+  POINT  1312  -15.25549093307073  23.54255322720311
+  POINT  1313  -14.1660320735545  23.49720269855517
+  POINT  1314  -16.80854863381419  22.75522573976579
+  POINT  1315  -16.44107418059214  23.60560634392143
+  POINT  1316  10.44287685491821  15.3320070852495
+  POINT  1317  10.99244953168854  14.41410579688861
+  POINT  1318  12.05881853851436  14.38348705047854
+  POINT  1319  12.51923528622494  15.29188158122452
+  POINT  1320  9.882579552317679  18.08217219529029
+  POINT  1321  9.363918655514606  17.17751869900422
+  POINT  1322  10.92764556036217  18.07693181489272
+  POINT  1323  9.899040669385645  16.25867285543741
+  POINT  1324  10.94364677894179  16.23848897409934
+  POINT  1325  -0.5144201764050657  27.29055277175395
+  POINT  1326  6.145462372320054e-08  26.3758253379825
+  POINT  1327  -0.5144202035150144  25.4710988215093
+  POINT  1328  -1.586802492614995  25.50754474293507
+  POINT  1329  4.053181679175566e-07  30.05156162643644
+  POINT  1330  -0.5079373955465308  30.98886235417658
+  POINT  1331  -0.5079382246215022  29.12842087364186
+  POINT  1332  -12.94362054595454  25.24019426221156
+  POINT  1333  -13.63403191024444  24.36529481739402
+  POINT  1334  -13.04745031975563  23.49596645128178
+  POINT  1335  -11.90568140505247  25.26641628259847
+  POINT  1336  -11.44016314056337  24.38232778626718
+  POINT  1337  -10.38199561361241  22.61371945416543
+  POINT  1338  -10.90256774287263  21.70588513110751
+  POINT  1339  -10.8999497484763  23.50315680180504
+  POINT  1340  -11.94550988102284  21.70829881684042
+  POINT  1341  -11.9752367643585  23.48488758565849
+  POINT  1342  -12.50723692766855  22.61679546681964
+  POINT  1343  -11.95486088381842  18.07035362542616
+  POINT  1344  -11.42702593885517  17.15857670139686
+  POINT  1345  -11.97086217426693  16.23191113527045
+  POINT  1346  -13.00261454459266  16.21196963584406
+  POINT  1347  -13.45963928928449  17.15240631073819
+  POINT  1348  -14.04300661306449  19.92893456636063
+  POINT  1349  -14.61766846223399  19.01336656135037
+  POINT  1350  -14.012051553416  18.07820839100076
+  POINT  1351  -13.00753132955202  19.9072417775258
+  POINT  1352  -12.50727314794993  18.99615570568874
+  POINT  1353  -13.00665400519826  18.07780044230454
+  POINT  1354  11.42702639250091  17.15857636716348
+  POINT  1355  11.95486135945386  18.07035343776895
+  POINT  1356  13.45963971419343  17.15240581280172
+  POINT  1357  13.00665446190387  18.07780023968877
+  POINT  1358  11.97086257803348  16.23191059697557
+  POINT  1359  13.00261489978407  16.21196897428866
+  POINT  1360  -4.63194529517035  27.26807044242916
+  POINT  1361  -5.129329281616346  28.18223402953092
+  POINT  1362  -2.075897664001495  26.39023252420856
+  POINT  1363  -2.633859682224616  25.52195192097659
+  POINT  1364  -3.619360348222028  27.30721173111527
+  POINT  1365  -4.135539800559439  26.36549841356398
+  POINT  1366  -3.637813646348119  25.45447476531866
+  POINT  1367  -1.530414898263689  29.12459912906478
+  POINT  1368  -1.022476552060444  28.20145845276378
+  POINT  1369  -2.583954039656873  27.30113820521839
+  POINT  1370  -3.080359534267785  28.20371023408358
+  POINT  1371  -1.536896850047253  27.28673102717688
+  POINT  1372  -4.543158675405131  32.76980075139725
+  POINT  1373  -5.096692509816465  31.88416600567974
+  POINT  1374  -3.548263606045425  32.79891896958721
+  POINT  1375  -2.549037169284093  29.11196922998421
+  POINT  1376  -2.034498841845151  30.03893165086228
+  POINT  1377  -3.584443477849247  29.11804275588108
+  POINT  1378  -1.519465434862823  30.97888306068132
+  POINT  1379  -1.011526259584607  31.91618386491503
+  POINT  1380  -3.041784503002568  31.8775328689841
+  POINT  1381  -2.529533401943756  32.82759067202288
+  POINT  1382  -2.538087705883227  30.96625316160074
+  POINT  1383  -3.556817909984896  30.93758145916507
+  POINT  1384  -1.514528012276162  32.8600730909511
+  POINT  1385  -4.088203640533337  30.03451082052263
+  POINT  1386  -4.591900437652678  30.94579052790599
+  POINT  1387  -6.129436418173878  30.02016647395368
+  POINT  1388  -5.628078240364906  30.9810953670373
+  POINT  1389  -4.619526005517029  29.126251824622
+  POINT  1390  -5.633089444300436  29.09870209417247
 
 END POINTS LIST
 
@@ -323,145 +1403,669 @@ END POINTS LIST
 
 BEGIN MESH STRUCTURE DESCRIPTION
 
-CONVEX 0    'GT_PK(2,2)'      18  86  27  87  88  19
-CONVEX 1    'GT_PK(2,2)'      33  89  43  90  91  42
-CONVEX 2    'GT_PK(2,2)'      33  92  34  93  94  25
-CONVEX 3    'GT_PK(2,2)'      33  89  43  92  95  34
-CONVEX 4    'GT_PK(2,2)'      65  96  75  97  98  66
-CONVEX 5    'GT_PK(2,2)'      65  96  75  99  100  74
-CONVEX 6    'GT_PK(2,2)'      81  101  75  102  100  74
-CONVEX 7    'GT_PK(2,2)'      26  103  18  104  86  27
-CONVEX 8    'GT_PK(2,2)'      11  105  18  106  87  19
-CONVEX 9    'GT_PK(2,2)'      72  107  62  108  109  71
-CONVEX 10    'GT_PK(2,2)'      58  110  68  111  112  59
-CONVEX 11    'GT_PK(2,2)'      36  113  26  114  104  27
-CONVEX 12    'GT_PK(2,2)'      53  115  43  116  117  3
-CONVEX 13    'GT_PK(2,2)'      32  118  33  119  90  42
-CONVEX 14    'GT_PK(2,2)'      32  120  31  121  122  23
-CONVEX 15    'GT_PK(2,2)'      41  123  51  124  125  42
-CONVEX 16    'GT_PK(2,2)'      41  126  32  124  119  42
-CONVEX 17    'GT_PK(2,2)'      41  126  32  127  120  31
-CONVEX 18    'GT_PK(2,2)'      24  128  33  129  93  25
-CONVEX 19    'GT_PK(2,2)'      24  130  32  131  121  23
-CONVEX 20    'GT_PK(2,2)'      24  130  32  128  118  33
-CONVEX 21    'GT_PK(2,2)'      73  132  65  133  99  74
-CONVEX 22    'GT_PK(2,2)'      73  132  65  134  135  64
-CONVEX 23    'GT_PK(2,2)'      76  136  81  137  101  75
-CONVEX 24    'GT_PK(2,2)'      76  138  82  136  139  81
-CONVEX 25    'GT_PK(2,2)'      77  140  84  141  142  85
-CONVEX 26    'GT_PK(2,2)'      55  143  65  144  135  64
-CONVEX 27    'GT_PK(2,2)'      55  145  54  144  146  64
-CONVEX 28    'GT_PK(2,2)'      78  147  79  148  149  85
-CONVEX 29    'GT_PK(2,2)'      78  150  77  148  141  85
-CONVEX 30    'GT_PK(2,2)'      78  151  71  152  153  70
-CONVEX 31    'GT_PK(2,2)'      78  147  79  151  154  71
-CONVEX 32    'GT_PK(2,2)'      44  155  43  156  117  3
-CONVEX 33    'GT_PK(2,2)'      44  155  43  157  95  34
-CONVEX 34    'GT_PK(2,2)'      80  158  79  159  154  71
-CONVEX 35    'GT_PK(2,2)'      80  160  72  159  108  71
-CONVEX 36    'GT_PK(2,2)'      35  161  36  162  163  2
-CONVEX 37    'GT_PK(2,2)'      35  161  36  164  113  26
-CONVEX 38    'GT_PK(2,2)'      52  165  53  166  167  62
-CONVEX 39    'GT_PK(2,2)'      52  168  51  169  125  42
-CONVEX 40    'GT_PK(2,2)'      52  170  43  169  91  42
-CONVEX 41    'GT_PK(2,2)'      52  165  53  170  115  43
-CONVEX 42    'GT_PK(2,2)'      63  171  72  172  107  62
-CONVEX 43    'GT_PK(2,2)'      63  173  53  172  167  62
-CONVEX 44    'GT_PK(2,2)'      63  173  53  174  116  3
-CONVEX 45    'GT_PK(2,2)'      61  175  60  176  177  70
-CONVEX 46    'GT_PK(2,2)'      61  178  71  176  153  70
-CONVEX 47    'GT_PK(2,2)'      61  179  62  178  109  71
-CONVEX 48    'GT_PK(2,2)'      61  175  60  180  181  51
-CONVEX 49    'GT_PK(2,2)'      61  182  52  179  166  62
-CONVEX 50    'GT_PK(2,2)'      61  182  52  180  168  51
-CONVEX 51    'GT_PK(2,2)'      50  183  60  184  181  51
-CONVEX 52    'GT_PK(2,2)'      50  185  41  184  123  51
-CONVEX 53    'GT_PK(2,2)'      50  183  60  186  187  59
-CONVEX 54    'GT_PK(2,2)'      17  188  24  189  129  25
-CONVEX 55    'GT_PK(2,2)'      16  190  15  191  192  23
-CONVEX 56    'GT_PK(2,2)'      16  193  24  191  131  23
-CONVEX 57    'GT_PK(2,2)'      16  194  17  195  196  10
-CONVEX 58    'GT_PK(2,2)'      16  194  17  193  188  24
-CONVEX 59    'GT_PK(2,2)'      9  197  15  198  199  8
-CONVEX 60    'GT_PK(2,2)'      9  200  16  201  195  10
-CONVEX 61    'GT_PK(2,2)'      9  200  16  197  190  15
-CONVEX 62    'GT_PK(2,2)'      67  202  58  203  110  68
-CONVEX 63    'GT_PK(2,2)'      67  204  76  203  205  68
-CONVEX 64    'GT_PK(2,2)'      67  206  57  207  208  66
-CONVEX 65    'GT_PK(2,2)'      67  206  57  202  209  58
-CONVEX 66    'GT_PK(2,2)'      67  210  75  207  98  66
-CONVEX 67    'GT_PK(2,2)'      67  204  76  210  137  75
-CONVEX 68    'GT_PK(2,2)'      83  211  76  212  205  68
-CONVEX 69    'GT_PK(2,2)'      83  213  77  212  214  68
-CONVEX 70    'GT_PK(2,2)'      83  215  82  216  217  4
-CONVEX 71    'GT_PK(2,2)'      83  211  76  215  138  82
-CONVEX 72    'GT_PK(2,2)'      83  218  84  216  219  4
-CONVEX 73    'GT_PK(2,2)'      83  213  77  218  140  84
-CONVEX 74    'GT_PK(2,2)'      69  220  60  221  177  70
-CONVEX 75    'GT_PK(2,2)'      69  220  60  222  187  59
-CONVEX 76    'GT_PK(2,2)'      69  223  78  221  152  70
-CONVEX 77    'GT_PK(2,2)'      69  223  78  224  150  77
-CONVEX 78    'GT_PK(2,2)'      69  225  68  222  112  59
-CONVEX 79    'GT_PK(2,2)'      69  224  77  225  214  68
-CONVEX 80    'GT_PK(2,2)'      45  226  36  227  163  2
-CONVEX 81    'GT_PK(2,2)'      45  228  54  227  229  2
-CONVEX 82    'GT_PK(2,2)'      45  230  55  228  145  54
-CONVEX 83    'GT_PK(2,2)'      40  231  30  232  233  31
-CONVEX 84    'GT_PK(2,2)'      40  234  41  232  127  31
-CONVEX 85    'GT_PK(2,2)'      40  235  50  236  237  1
-CONVEX 86    'GT_PK(2,2)'      40  235  50  234  185  41
-CONVEX 87    'GT_PK(2,2)'      39  238  30  239  240  29
-CONVEX 88    'GT_PK(2,2)'      39  241  38  239  242  29
-CONVEX 89    'GT_PK(2,2)'      39  243  40  244  236  1
-CONVEX 90    'GT_PK(2,2)'      39  243  40  238  231  30
-CONVEX 91    'GT_PK(2,2)'      22  245  31  246  122  23
-CONVEX 92    'GT_PK(2,2)'      22  247  30  245  233  31
-CONVEX 93    'GT_PK(2,2)'      22  248  15  246  192  23
-CONVEX 94    'GT_PK(2,2)'      37  249  38  250  251  47
-CONVEX 95    'GT_PK(2,2)'      37  252  36  253  114  27
-CONVEX 96    'GT_PK(2,2)'      12  254  20  255  256  19
-CONVEX 97    'GT_PK(2,2)'      12  257  11  255  106  19
-CONVEX 98    'GT_PK(2,2)'      12  257  11  258  259  5
-CONVEX 99    'GT_PK(2,2)'      12  260  6  258  261  5
-CONVEX 100    'GT_PK(2,2)'      14  262  22  263  248  15
-CONVEX 101    'GT_PK(2,2)'      14  264  8  265  266  0
-CONVEX 102    'GT_PK(2,2)'      14  263  15  264  199  8
-CONVEX 103    'GT_PK(2,2)'      21  267  30  268  240  29
-CONVEX 104    'GT_PK(2,2)'      21  269  20  268  270  29
-CONVEX 105    'GT_PK(2,2)'      21  271  22  267  247  30
-CONVEX 106    'GT_PK(2,2)'      21  272  14  271  262  22
-CONVEX 107    'GT_PK(2,2)'      56  273  57  274  275  47
-CONVEX 108    'GT_PK(2,2)'      56  273  57  276  208  66
-CONVEX 109    'GT_PK(2,2)'      56  277  65  276  97  66
-CONVEX 110    'GT_PK(2,2)'      56  278  55  277  143  65
-CONVEX 111    'GT_PK(2,2)'      48  279  57  280  275  47
-CONVEX 112    'GT_PK(2,2)'      48  281  39  282  244  1
-CONVEX 113    'GT_PK(2,2)'      48  279  57  283  209  58
-CONVEX 114    'GT_PK(2,2)'      48  284  38  280  251  47
-CONVEX 115    'GT_PK(2,2)'      48  281  39  284  241  38
-CONVEX 116    'GT_PK(2,2)'      46  285  37  286  250  47
-CONVEX 117    'GT_PK(2,2)'      46  287  56  286  274  47
-CONVEX 118    'GT_PK(2,2)'      46  288  45  289  226  36
-CONVEX 119    'GT_PK(2,2)'      46  285  37  289  252  36
-CONVEX 120    'GT_PK(2,2)'      46  288  45  290  230  55
-CONVEX 121    'GT_PK(2,2)'      46  287  56  290  278  55
-CONVEX 122    'GT_PK(2,2)'      28  291  38  292  242  29
-CONVEX 123    'GT_PK(2,2)'      28  293  37  291  249  38
-CONVEX 124    'GT_PK(2,2)'      28  294  20  292  270  29
-CONVEX 125    'GT_PK(2,2)'      28  294  20  295  256  19
-CONVEX 126    'GT_PK(2,2)'      28  296  27  295  88  19
-CONVEX 127    'GT_PK(2,2)'      28  293  37  296  253  27
-CONVEX 128    'GT_PK(2,2)'      7  297  14  298  265  0
-CONVEX 129    'GT_PK(2,2)'      13  299  21  300  272  14
-CONVEX 130    'GT_PK(2,2)'      13  301  12  302  260  6
-CONVEX 131    'GT_PK(2,2)'      13  301  12  303  254  20
-CONVEX 132    'GT_PK(2,2)'      13  299  21  303  269  20
-CONVEX 133    'GT_PK(2,2)'      13  304  7  302  305  6
-CONVEX 134    'GT_PK(2,2)'      13  304  7  300  297  14
-CONVEX 135    'GT_PK(2,2)'      49  306  48  307  282  1
-CONVEX 136    'GT_PK(2,2)'      49  306  48  308  283  58
-CONVEX 137    'GT_PK(2,2)'      49  308  58  309  111  59
-CONVEX 138    'GT_PK(2,2)'      49  310  50  307  237  1
-CONVEX 139    'GT_PK(2,2)'      49  310  50  309  186  59
+CONVEX 0    'GT_PK(2,2)'      181  364  142  365  366  161
+CONVEX 1    'GT_PK(2,2)'      180  367  181  368  369  3
+CONVEX 2    'GT_PK(2,2)'      180  367  181  370  365  161
+CONVEX 3    'GT_PK(2,2)'      358  371  359  372  373  4
+CONVEX 4    'GT_PK(2,2)'      360  374  359  375  373  4
+CONVEX 5    'GT_PK(2,2)'      350  376  360  377  378  361
+CONVEX 6    'GT_PK(2,2)'      127  379  108  380  381  128
+CONVEX 7    'GT_PK(2,2)'      127  379  108  382  383  107
+CONVEX 8    'GT_PK(2,2)'      182  384  201  385  386  2
+CONVEX 9    'GT_PK(2,2)'      141  387  142  388  389  122
+CONVEX 10    'GT_PK(2,2)'      141  387  142  390  366  161
+CONVEX 11    'GT_PK(2,2)'      17  391  8  392  393  7
+CONVEX 12    'GT_PK(2,2)'      325  394  309  395  396  326
+CONVEX 13    'GT_PK(2,2)'      354  397  341  398  399  353
+CONVEX 14    'GT_PK(2,2)'      39  400  55  401  402  40
+CONVEX 15    'GT_PK(2,2)'      39  403  25  401  404  40
+CONVEX 16    'GT_PK(2,2)'      71  405  55  406  407  72
+CONVEX 17    'GT_PK(2,2)'      316  408  317  409  410  331
+CONVEX 18    'GT_PK(2,2)'      356  411  346  412  413  357
+CONVEX 19    'GT_PK(2,2)'      87  414  86  415  416  69
+CONVEX 20    'GT_PK(2,2)'      89  417  108  418  383  107
+CONVEX 21    'GT_PK(2,2)'      89  419  71  420  406  72
+CONVEX 22    'GT_PK(2,2)'      109  421  108  422  381  128
+CONVEX 23    'GT_PK(2,2)'      126  423  127  424  382  107
+CONVEX 24    'GT_PK(2,2)'      163  425  162  426  427  143
+CONVEX 25    'GT_PK(2,2)'      163  425  162  428  429  2
+CONVEX 26    'GT_PK(2,2)'      163  430  182  428  385  2
+CONVEX 27    'GT_PK(2,2)'      191  431  211  432  433  210
+CONVEX 28    'GT_PK(2,2)'      191  434  190  435  436  1
+CONVEX 29    'GT_PK(2,2)'      191  434  190  432  437  210
+CONVEX 30    'GT_PK(2,2)'      136  438  155  439  440  135
+CONVEX 31    'GT_PK(2,2)'      149  441  130  442  443  150
+CONVEX 32    'GT_PK(2,2)'      131  444  130  445  443  150
+CONVEX 33    'GT_PK(2,2)'      15  446  6  447  448  5
+CONVEX 34    'GT_PK(2,2)'      18  449  17  450  451  30
+CONVEX 35    'GT_PK(2,2)'      18  452  9  453  454  0
+CONVEX 36    'GT_PK(2,2)'      18  455  8  453  456  0
+CONVEX 37    'GT_PK(2,2)'      18  449  17  455  391  8
+CONVEX 38    'GT_PK(2,2)'      363  457  362  458  459  352
+CONVEX 39    'GT_PK(2,2)'      351  460  362  461  459  352
+CONVEX 40    'GT_PK(2,2)'      351  462  338  463  464  350
+CONVEX 41    'GT_PK(2,2)'      351  463  350  465  377  361
+CONVEX 42    'GT_PK(2,2)'      351  460  362  465  466  361
+CONVEX 43    'GT_PK(2,2)'      339  467  325  468  469  324
+CONVEX 44    'GT_PK(2,2)'      339  470  338  468  471  324
+CONVEX 45    'GT_PK(2,2)'      339  472  351  473  461  352
+CONVEX 46    'GT_PK(2,2)'      339  472  351  470  462  338
+CONVEX 47    'GT_PK(2,2)'      340  474  341  475  399  353
+CONVEX 48    'GT_PK(2,2)'      340  476  339  477  473  352
+CONVEX 49    'GT_PK(2,2)'      340  476  339  478  467  325
+CONVEX 50    'GT_PK(2,2)'      340  474  341  479  480  326
+CONVEX 51    'GT_PK(2,2)'      340  478  325  479  395  326
+CONVEX 52    'GT_PK(2,2)'      340  481  363  475  482  353
+CONVEX 53    'GT_PK(2,2)'      340  481  363  477  458  352
+CONVEX 54    'GT_PK(2,2)'      278  483  259  484  485  258
+CONVEX 55    'GT_PK(2,2)'      276  486  257  487  488  256
+CONVEX 56    'GT_PK(2,2)'      347  489  358  490  491  357
+CONVEX 57    'GT_PK(2,2)'      347  492  346  490  413  357
+CONVEX 58    'GT_PK(2,2)'      337  493  338  494  464  350
+CONVEX 59    'GT_PK(2,2)'      308  495  325  496  469  324
+CONVEX 60    'GT_PK(2,2)'      308  495  325  497  394  309
+CONVEX 61    'GT_PK(2,2)'      291  498  309  499  500  292
+CONVEX 62    'GT_PK(2,2)'      291  501  308  498  497  309
+CONVEX 63    'GT_PK(2,2)'      291  501  308  502  503  290
+CONVEX 64    'GT_PK(2,2)'      197  504  216  505  506  196
+CONVEX 65    'GT_PK(2,2)'      197  507  178  508  509  198
+CONVEX 66    'GT_PK(2,2)'      171  510  190  511  436  1
+CONVEX 67    'GT_PK(2,2)'      64  512  81  513  514  80
+CONVEX 68    'GT_PK(2,2)'      19  515  9  516  517  10
+CONVEX 69    'GT_PK(2,2)'      19  518  18  515  452  9
+CONVEX 70    'GT_PK(2,2)'      24  519  39  520  521  38
+CONVEX 71    'GT_PK(2,2)'      24  519  39  522  403  25
+CONVEX 72    'GT_PK(2,2)'      54  523  39  524  400  55
+CONVEX 73    'GT_PK(2,2)'      54  525  71  524  405  55
+CONVEX 74    'GT_PK(2,2)'      54  523  39  526  521  38
+CONVEX 75    'GT_PK(2,2)'      54  527  53  526  528  38
+CONVEX 76    'GT_PK(2,2)'      315  529  316  530  531  299
+CONVEX 77    'GT_PK(2,2)'      343  532  344  533  534  331
+CONVEX 78    'GT_PK(2,2)'      343  535  316  533  409  331
+CONVEX 79    'GT_PK(2,2)'      300  536  316  537  531  299
+CONVEX 80    'GT_PK(2,2)'      300  536  316  538  408  317
+CONVEX 81    'GT_PK(2,2)'      123  539  124  540  541  104
+CONVEX 82    'GT_PK(2,2)'      123  539  124  542  543  143
+CONVEX 83    'GT_PK(2,2)'      123  544  162  542  427  143
+CONVEX 84    'GT_PK(2,2)'      70  545  53  546  547  69
+CONVEX 85    'GT_PK(2,2)'      70  548  87  546  415  69
+CONVEX 86    'GT_PK(2,2)'      70  549  54  545  527  53
+CONVEX 87    'GT_PK(2,2)'      70  549  54  550  525  71
+CONVEX 88    'GT_PK(2,2)'      106  551  126  552  553  125
+CONVEX 89    'GT_PK(2,2)'      106  551  126  554  424  107
+CONVEX 90    'GT_PK(2,2)'      105  555  86  556  557  104
+CONVEX 91    'GT_PK(2,2)'      105  558  87  555  414  86
+CONVEX 92    'GT_PK(2,2)'      105  559  124  556  541  104
+CONVEX 93    'GT_PK(2,2)'      105  560  106  558  561  87
+CONVEX 94    'GT_PK(2,2)'      105  559  124  562  563  125
+CONVEX 95    'GT_PK(2,2)'      105  560  106  562  552  125
+CONVEX 96    'GT_PK(2,2)'      179  564  178  565  509  198
+CONVEX 97    'GT_PK(2,2)'      56  566  73  567  568  57
+CONVEX 98    'GT_PK(2,2)'      56  569  55  570  402  40
+CONVEX 99    'GT_PK(2,2)'      56  569  55  571  407  72
+CONVEX 100    'GT_PK(2,2)'      56  566  73  571  572  72
+CONVEX 101    'GT_PK(2,2)'      90  573  109  574  421  108
+CONVEX 102    'GT_PK(2,2)'      90  575  89  576  420  72
+CONVEX 103    'GT_PK(2,2)'      90  575  89  574  417  108
+CONVEX 104    'GT_PK(2,2)'      90  577  73  576  572  72
+CONVEX 105    'GT_PK(2,2)'      187  578  167  579  580  168
+CONVEX 106    'GT_PK(2,2)'      116  581  136  582  439  135
+CONVEX 107    'GT_PK(2,2)'      116  581  136  583  584  117
+CONVEX 108    'GT_PK(2,2)'      154  585  153  586  587  173
+CONVEX 109    'GT_PK(2,2)'      154  588  155  589  440  135
+CONVEX 110    'GT_PK(2,2)'      172  590  153  591  587  173
+CONVEX 111    'GT_PK(2,2)'      172  592  171  593  511  1
+CONVEX 112    'GT_PK(2,2)'      264  594  245  595  596  244
+CONVEX 113    'GT_PK(2,2)'      298  597  297  598  599  314
+CONVEX 114    'GT_PK(2,2)'      298  600  315  598  601  314
+CONVEX 115    'GT_PK(2,2)'      298  602  281  603  604  299
+CONVEX 116    'GT_PK(2,2)'      298  600  315  603  530  299
+CONVEX 117    'GT_PK(2,2)'      202  605  182  606  384  201
+CONVEX 118    'GT_PK(2,2)'      144  607  163  608  426  143
+CONVEX 119    'GT_PK(2,2)'      144  609  124  610  563  125
+CONVEX 120    'GT_PK(2,2)'      144  609  124  608  543  143
+CONVEX 121    'GT_PK(2,2)'      215  611  216  612  506  196
+CONVEX 122    'GT_PK(2,2)'      215  613  195  612  614  196
+CONVEX 123    'GT_PK(2,2)'      99  615  81  616  617  82
+CONVEX 124    'GT_PK(2,2)'      99  618  118  619  620  117
+CONVEX 125    'GT_PK(2,2)'      35  621  36  622  623  23
+CONVEX 126    'GT_PK(2,2)'      35  621  36  624  625  50
+CONVEX 127    'GT_PK(2,2)'      100  626  118  627  628  119
+CONVEX 128    'GT_PK(2,2)'      100  629  99  630  616  82
+CONVEX 129    'GT_PK(2,2)'      100  629  99  626  618  118
+CONVEX 130    'GT_PK(2,2)'      137  631  136  632  584  117
+CONVEX 131    'GT_PK(2,2)'      137  633  118  632  620  117
+CONVEX 132    'GT_PK(2,2)'      74  634  73  635  568  57
+CONVEX 133    'GT_PK(2,2)'      74  636  75  637  638  92
+CONVEX 134    'GT_PK(2,2)'      148  639  167  640  580  168
+CONVEX 135    'GT_PK(2,2)'      148  641  149  640  642  168
+CONVEX 136    'GT_PK(2,2)'      93  643  75  644  645  76
+CONVEX 137    'GT_PK(2,2)'      93  643  75  646  638  92
+CONVEX 138    'GT_PK(2,2)'      46  647  45  648  649  61
+CONVEX 139    'GT_PK(2,2)'      46  650  62  648  651  61
+CONVEX 140    'GT_PK(2,2)'      46  650  62  652  653  47
+CONVEX 141    'GT_PK(2,2)'      327  654  354  655  397  341
+CONVEX 142    'GT_PK(2,2)'      327  655  341  656  480  326
+CONVEX 143    'GT_PK(2,2)'      217  657  218  658  659  198
+CONVEX 144    'GT_PK(2,2)'      217  660  197  658  508  198
+CONVEX 145    'GT_PK(2,2)'      217  660  197  661  504  216
+CONVEX 146    'GT_PK(2,2)'      200  662  180  663  368  3
+CONVEX 147    'GT_PK(2,2)'      200  664  220  663  665  3
+CONVEX 148    'GT_PK(2,2)'      238  666  257  667  668  258
+CONVEX 149    'GT_PK(2,2)'      238  669  259  667  485  258
+CONVEX 150    'GT_PK(2,2)'      238  670  239  669  671  259
+CONVEX 151    'GT_PK(2,2)'      277  672  257  673  668  258
+CONVEX 152    'GT_PK(2,2)'      277  674  276  672  486  257
+CONVEX 153    'GT_PK(2,2)'      277  675  278  673  484  258
+CONVEX 154    'GT_PK(2,2)'      277  675  278  676  677  296
+CONVEX 155    'GT_PK(2,2)'      236  678  255  679  680  256
+CONVEX 156    'GT_PK(2,2)'      236  681  217  682  661  216
+CONVEX 157    'GT_PK(2,2)'      275  683  276  684  487  256
+CONVEX 158    'GT_PK(2,2)'      275  685  255  684  680  256
+CONVEX 159    'GT_PK(2,2)'      275  686  294  683  687  276
+CONVEX 160    'GT_PK(2,2)'      275  686  294  688  689  293
+CONVEX 161    'GT_PK(2,2)'      209  690  229  691  692  210
+CONVEX 162    'GT_PK(2,2)'      209  693  189  694  695  208
+CONVEX 163    'GT_PK(2,2)'      209  696  190  691  437  210
+CONVEX 164    'GT_PK(2,2)'      209  693  189  696  697  190
+CONVEX 165    'GT_PK(2,2)'      334  698  347  699  492  346
+CONVEX 166    'GT_PK(2,2)'      345  700  356  701  411  346
+CONVEX 167    'GT_PK(2,2)'      345  702  355  700  703  356
+CONVEX 168    'GT_PK(2,2)'      349  704  337  705  494  350
+CONVEX 169    'GT_PK(2,2)'      349  706  360  707  374  359
+CONVEX 170    'GT_PK(2,2)'      349  705  350  706  376  360
+CONVEX 171    'GT_PK(2,2)'      349  708  336  704  709  337
+CONVEX 172    'GT_PK(2,2)'      323  710  338  711  471  324
+CONVEX 173    'GT_PK(2,2)'      323  712  337  710  493  338
+CONVEX 174    'GT_PK(2,2)'      307  713  308  714  503  290
+CONVEX 175    'GT_PK(2,2)'      307  713  308  715  496  324
+CONVEX 176    'GT_PK(2,2)'      307  716  323  715  711  324
+CONVEX 177    'GT_PK(2,2)'      307  716  323  717  718  306
+CONVEX 178    'GT_PK(2,2)'      272  719  291  720  502  290
+CONVEX 179    'GT_PK(2,2)'      169  721  149  722  442  150
+CONVEX 180    'GT_PK(2,2)'      169  721  149  723  642  168
+CONVEX 181    'GT_PK(2,2)'      22  724  35  725  726  34
+CONVEX 182    'GT_PK(2,2)'      22  724  35  727  622  23
+CONVEX 183    'GT_PK(2,2)'      63  728  62  729  653  47
+CONVEX 184    'GT_PK(2,2)'      63  728  62  730  731  79
+CONVEX 185    'GT_PK(2,2)'      63  730  79  732  733  80
+CONVEX 186    'GT_PK(2,2)'      63  734  64  732  513  80
+CONVEX 187    'GT_PK(2,2)'      21  735  12  736  737  11
+CONVEX 188    'GT_PK(2,2)'      21  738  33  739  740  34
+CONVEX 189    'GT_PK(2,2)'      21  741  22  739  725  34
+CONVEX 190    'GT_PK(2,2)'      21  741  22  735  742  12
+CONVEX 191    'GT_PK(2,2)'      49  743  35  744  726  34
+CONVEX 192    'GT_PK(2,2)'      49  743  35  745  624  50
+CONVEX 193    'GT_PK(2,2)'      330  746  315  747  529  316
+CONVEX 194    'GT_PK(2,2)'      330  748  343  747  535  316
+CONVEX 195    'GT_PK(2,2)'      330  746  315  749  601  314
+CONVEX 196    'GT_PK(2,2)'      88  750  70  751  548  87
+CONVEX 197    'GT_PK(2,2)'      88  752  106  751  561  87
+CONVEX 198    'GT_PK(2,2)'      88  750  70  753  550  71
+CONVEX 199    'GT_PK(2,2)'      88  752  106  754  554  107
+CONVEX 200    'GT_PK(2,2)'      88  755  89  754  418  107
+CONVEX 201    'GT_PK(2,2)'      88  755  89  753  419  71
+CONVEX 202    'GT_PK(2,2)'      159  756  179  757  564  178
+CONVEX 203    'GT_PK(2,2)'      129  758  110  759  760  130
+CONVEX 204    'GT_PK(2,2)'      129  761  148  762  763  128
+CONVEX 205    'GT_PK(2,2)'      129  764  109  762  422  128
+CONVEX 206    'GT_PK(2,2)'      129  758  110  764  765  109
+CONVEX 207    'GT_PK(2,2)'      129  766  149  759  441  130
+CONVEX 208    'GT_PK(2,2)'      129  761  148  766  641  149
+CONVEX 209    'GT_PK(2,2)'      111  767  131  768  444  130
+CONVEX 210    'GT_PK(2,2)'      111  769  110  768  760  130
+CONVEX 211    'GT_PK(2,2)'      111  769  110  770  771  92
+CONVEX 212    'GT_PK(2,2)'      111  772  93  770  646  92
+CONVEX 213    'GT_PK(2,2)'      91  773  90  774  573  109
+CONVEX 214    'GT_PK(2,2)'      91  775  110  776  771  92
+CONVEX 215    'GT_PK(2,2)'      91  775  110  774  765  109
+CONVEX 216    'GT_PK(2,2)'      91  777  74  776  637  92
+CONVEX 217    'GT_PK(2,2)'      91  773  90  778  577  73
+CONVEX 218    'GT_PK(2,2)'      91  777  74  778  634  73
+CONVEX 219    'GT_PK(2,2)'      97  779  79  780  733  80
+CONVEX 220    'GT_PK(2,2)'      97  781  96  779  782  79
+CONVEX 221    'GT_PK(2,2)'      114  783  133  784  785  113
+CONVEX 222    'GT_PK(2,2)'      114  786  95  784  787  113
+CONVEX 223    'GT_PK(2,2)'      114  786  95  788  789  96
+CONVEX 224    'GT_PK(2,2)'      132  790  133  791  785  113
+CONVEX 225    'GT_PK(2,2)'      263  792  264  793  595  244
+CONVEX 226    'GT_PK(2,2)'      263  794  262  795  796  281
+CONVEX 227    'GT_PK(2,2)'      282  797  281  798  604  299
+CONVEX 228    'GT_PK(2,2)'      282  799  264  800  801  283
+CONVEX 229    'GT_PK(2,2)'      282  802  263  797  795  281
+CONVEX 230    'GT_PK(2,2)'      282  802  263  799  792  264
+CONVEX 231    'GT_PK(2,2)'      282  803  300  800  804  283
+CONVEX 232    'GT_PK(2,2)'      282  803  300  798  537  299
+CONVEX 233    'GT_PK(2,2)'      261  805  279  806  807  260
+CONVEX 234    'GT_PK(2,2)'      243  808  263  809  793  244
+CONVEX 235    'GT_PK(2,2)'      243  808  263  810  794  262
+CONVEX 236    'GT_PK(2,2)'      221  811  202  812  606  201
+CONVEX 237    'GT_PK(2,2)'      221  813  240  814  815  222
+CONVEX 238    'GT_PK(2,2)'      221  811  202  814  816  222
+CONVEX 239    'GT_PK(2,2)'      156  817  136  818  438  155
+CONVEX 240    'GT_PK(2,2)'      156  819  175  818  820  155
+CONVEX 241    'GT_PK(2,2)'      156  821  137  817  631  136
+CONVEX 242    'GT_PK(2,2)'      192  822  191  823  431  211
+CONVEX 243    'GT_PK(2,2)'      192  822  191  824  435  1
+CONVEX 244    'GT_PK(2,2)'      192  825  172  824  593  1
+CONVEX 245    'GT_PK(2,2)'      192  825  172  826  591  173
+CONVEX 246    'GT_PK(2,2)'      174  827  154  828  586  173
+CONVEX 247    'GT_PK(2,2)'      174  827  154  829  588  155
+CONVEX 248    'GT_PK(2,2)'      174  830  175  829  820  155
+CONVEX 249    'GT_PK(2,2)'      214  831  215  832  613  195
+CONVEX 250    'GT_PK(2,2)'      214  831  215  833  834  234
+CONVEX 251    'GT_PK(2,2)'      98  835  81  836  514  80
+CONVEX 252    'GT_PK(2,2)'      98  837  99  835  615  81
+CONVEX 253    'GT_PK(2,2)'      98  838  97  836  780  80
+CONVEX 254    'GT_PK(2,2)'      98  837  99  839  619  117
+CONVEX 255    'GT_PK(2,2)'      98  840  116  839  583  117
+CONVEX 256    'GT_PK(2,2)'      98  838  97  840  841  116
+CONVEX 257    'GT_PK(2,2)'      52  842  68  843  844  67
+CONVEX 258    'GT_PK(2,2)'      83  845  66  846  847  67
+CONVEX 259    'GT_PK(2,2)'      83  848  100  849  630  82
+CONVEX 260    'GT_PK(2,2)'      83  845  66  849  850  82
+CONVEX 261    'GT_PK(2,2)'      51  851  66  852  853  50
+CONVEX 262    'GT_PK(2,2)'      51  854  36  855  856  37
+CONVEX 263    'GT_PK(2,2)'      51  854  36  852  625  50
+CONVEX 264    'GT_PK(2,2)'      51  851  66  857  847  67
+CONVEX 265    'GT_PK(2,2)'      51  858  52  855  859  37
+CONVEX 266    'GT_PK(2,2)'      51  858  52  857  843  67
+CONVEX 267    'GT_PK(2,2)'      103  860  102  861  862  85
+CONVEX 268    'GT_PK(2,2)'      121  863  102  864  865  120
+CONVEX 269    'GT_PK(2,2)'      121  866  141  867  388  122
+CONVEX 270    'GT_PK(2,2)'      121  868  103  867  869  122
+CONVEX 271    'GT_PK(2,2)'      121  868  103  863  860  102
+CONVEX 272    'GT_PK(2,2)'      58  870  74  871  635  57
+CONVEX 273    'GT_PK(2,2)'      58  870  74  872  636  75
+CONVEX 274    'GT_PK(2,2)'      29  873  17  874  451  30
+CONVEX 275    'GT_PK(2,2)'      60  875  45  876  649  61
+CONVEX 276    'GT_PK(2,2)'      60  877  77  878  879  76
+CONVEX 277    'GT_PK(2,2)'      60  877  77  876  880  61
+CONVEX 278    'GT_PK(2,2)'      94  881  95  882  787  113
+CONVEX 279    'GT_PK(2,2)'      94  883  93  884  644  76
+CONVEX 280    'GT_PK(2,2)'      94  885  77  884  879  76
+CONVEX 281    'GT_PK(2,2)'      94  885  77  881  886  95
+CONVEX 282    'GT_PK(2,2)'      41  887  56  888  570  40
+CONVEX 283    'GT_PK(2,2)'      41  887  56  889  567  57
+CONVEX 284    'GT_PK(2,2)'      28  890  27  891  892  15
+CONVEX 285    'GT_PK(2,2)'      28  893  29  894  895  43
+CONVEX 286    'GT_PK(2,2)'      14  896  15  897  447  5
+CONVEX 287    'GT_PK(2,2)'      14  898  27  896  892  15
+CONVEX 288    'GT_PK(2,2)'      31  899  45  900  901  30
+CONVEX 289    'GT_PK(2,2)'      31  902  46  899  647  45
+CONVEX 290    'GT_PK(2,2)'      31  903  18  900  450  30
+CONVEX 291    'GT_PK(2,2)'      31  904  19  903  518  18
+CONVEX 292    'GT_PK(2,2)'      311  905  327  906  907  328
+CONVEX 293    'GT_PK(2,2)'      311  908  294  909  689  293
+CONVEX 294    'GT_PK(2,2)'      342  910  329  911  912  328
+CONVEX 295    'GT_PK(2,2)'      342  913  327  914  654  354
+CONVEX 296    'GT_PK(2,2)'      342  913  327  911  907  328
+CONVEX 297    'GT_PK(2,2)'      237  915  217  916  657  218
+CONVEX 298    'GT_PK(2,2)'      237  917  238  918  666  257
+CONVEX 299    'GT_PK(2,2)'      237  917  238  916  919  218
+CONVEX 300    'GT_PK(2,2)'      237  920  236  915  681  217
+CONVEX 301    'GT_PK(2,2)'      237  918  257  921  488  256
+CONVEX 302    'GT_PK(2,2)'      237  920  236  921  679  256
+CONVEX 303    'GT_PK(2,2)'      199  922  218  923  659  198
+CONVEX 304    'GT_PK(2,2)'      199  924  179  923  565  198
+CONVEX 305    'GT_PK(2,2)'      199  924  179  925  926  180
+CONVEX 306    'GT_PK(2,2)'      199  927  200  925  662  180
+CONVEX 307    'GT_PK(2,2)'      219  928  239  929  930  220
+CONVEX 308    'GT_PK(2,2)'      219  931  238  928  670  239
+CONVEX 309    'GT_PK(2,2)'      219  932  200  929  664  220
+CONVEX 310    'GT_PK(2,2)'      219  931  238  933  919  218
+CONVEX 311    'GT_PK(2,2)'      219  934  199  933  922  218
+CONVEX 312    'GT_PK(2,2)'      219  934  199  932  927  200
+CONVEX 313    'GT_PK(2,2)'      312  935  329  936  912  328
+CONVEX 314    'GT_PK(2,2)'      312  937  311  936  906  328
+CONVEX 315    'GT_PK(2,2)'      312  937  311  938  908  294
+CONVEX 316    'GT_PK(2,2)'      235  939  236  940  682  216
+CONVEX 317    'GT_PK(2,2)'      235  939  236  941  678  255
+CONVEX 318    'GT_PK(2,2)'      235  942  215  940  611  216
+CONVEX 319    'GT_PK(2,2)'      235  942  215  943  834  234
+CONVEX 320    'GT_PK(2,2)'      235  944  254  943  945  234
+CONVEX 321    'GT_PK(2,2)'      235  944  254  941  946  255
+CONVEX 322    'GT_PK(2,2)'      265  947  264  948  801  283
+CONVEX 323    'GT_PK(2,2)'      265  947  264  949  594  245
+CONVEX 324    'GT_PK(2,2)'      333  950  334  951  699  346
+CONVEX 325    'GT_PK(2,2)'      333  952  345  951  701  346
+CONVEX 326    'GT_PK(2,2)'      332  953  317  954  410  331
+CONVEX 327    'GT_PK(2,2)'      332  955  318  953  956  317
+CONVEX 328    'GT_PK(2,2)'      332  957  344  954  534  331
+CONVEX 329    'GT_PK(2,2)'      332  958  333  955  959  318
+CONVEX 330    'GT_PK(2,2)'      332  958  333  960  952  345
+CONVEX 331    'GT_PK(2,2)'      332  961  355  957  962  344
+CONVEX 332    'GT_PK(2,2)'      332  960  345  961  702  355
+CONVEX 333    'GT_PK(2,2)'      335  963  334  964  698  347
+CONVEX 334    'GT_PK(2,2)'      335  965  336  966  967  321
+CONVEX 335    'GT_PK(2,2)'      322  968  323  969  718  306
+CONVEX 336    'GT_PK(2,2)'      322  968  323  970  712  337
+CONVEX 337    'GT_PK(2,2)'      322  971  336  972  967  321
+CONVEX 338    'GT_PK(2,2)'      322  971  336  970  709  337
+CONVEX 339    'GT_PK(2,2)'      250  973  270  974  975  251
+CONVEX 340    'GT_PK(2,2)'      289  976  307  977  714  290
+CONVEX 341    'GT_PK(2,2)'      289  976  307  978  717  306
+CONVEX 342    'GT_PK(2,2)'      305  979  322  980  972  321
+CONVEX 343    'GT_PK(2,2)'      305  979  322  981  969  306
+CONVEX 344    'GT_PK(2,2)'      274  982  275  983  685  255
+CONVEX 345    'GT_PK(2,2)'      274  984  254  983  946  255
+CONVEX 346    'GT_PK(2,2)'      274  982  275  985  688  293
+CONVEX 347    'GT_PK(2,2)'      274  985  293  986  987  292
+CONVEX 348    'GT_PK(2,2)'      273  988  291  989  499  292
+CONVEX 349    'GT_PK(2,2)'      273  990  272  988  719  291
+CONVEX 350    'GT_PK(2,2)'      273  991  274  989  986  292
+CONVEX 351    'GT_PK(2,2)'      273  991  274  992  984  254
+CONVEX 352    'GT_PK(2,2)'      170  993  169  994  722  150
+CONVEX 353    'GT_PK(2,2)'      170  993  169  995  996  189
+CONVEX 354    'GT_PK(2,2)'      170  997  171  998  510  190
+CONVEX 355    'GT_PK(2,2)'      170  995  189  998  697  190
+CONVEX 356    'GT_PK(2,2)'      188  999  189  1000  695  208
+CONVEX 357    'GT_PK(2,2)'      188  1001  169  999  996  189
+CONVEX 358    'GT_PK(2,2)'      188  1000  208  1002  1003  207
+CONVEX 359    'GT_PK(2,2)'      188  1004  187  1002  1005  207
+CONVEX 360    'GT_PK(2,2)'      188  1004  187  1006  579  168
+CONVEX 361    'GT_PK(2,2)'      188  1001  169  1006  723  168
+CONVEX 362    'GT_PK(2,2)'      48  1007  63  1008  734  64
+CONVEX 363    'GT_PK(2,2)'      48  1009  49  1008  1010  64
+CONVEX 364    'GT_PK(2,2)'      48  1011  33  1012  1013  47
+CONVEX 365    'GT_PK(2,2)'      48  1007  63  1012  729  47
+CONVEX 366    'GT_PK(2,2)'      48  1011  33  1014  740  34
+CONVEX 367    'GT_PK(2,2)'      48  1009  49  1014  744  34
+CONVEX 368    'GT_PK(2,2)'      20  1015  21  1016  736  11
+CONVEX 369    'GT_PK(2,2)'      20  1017  10  1016  1018  11
+CONVEX 370    'GT_PK(2,2)'      20  1019  19  1017  516  10
+CONVEX 371    'GT_PK(2,2)'      20  1015  21  1020  738  33
+CONVEX 372    'GT_PK(2,2)'      65  1021  49  1022  1010  64
+CONVEX 373    'GT_PK(2,2)'      65  1022  64  1023  512  81
+CONVEX 374    'GT_PK(2,2)'      65  1024  66  1025  853  50
+CONVEX 375    'GT_PK(2,2)'      65  1021  49  1025  745  50
+CONVEX 376    'GT_PK(2,2)'      65  1023  81  1026  617  82
+CONVEX 377    'GT_PK(2,2)'      65  1024  66  1026  850  82
+CONVEX 378    'GT_PK(2,2)'      139  1027  120  1028  1029  119
+CONVEX 379    'GT_PK(2,2)'      140  1030  139  1031  1032  159
+CONVEX 380    'GT_PK(2,2)'      140  1030  139  1033  1027  120
+CONVEX 381    'GT_PK(2,2)'      140  1034  121  1035  866  141
+CONVEX 382    'GT_PK(2,2)'      140  1034  121  1033  864  120
+CONVEX 383    'GT_PK(2,2)'      160  1036  159  1037  756  179
+CONVEX 384    'GT_PK(2,2)'      160  1038  180  1039  370  161
+CONVEX 385    'GT_PK(2,2)'      160  1037  179  1038  926  180
+CONVEX 386    'GT_PK(2,2)'      160  1040  140  1036  1031  159
+CONVEX 387    'GT_PK(2,2)'      160  1041  141  1039  390  161
+CONVEX 388    'GT_PK(2,2)'      160  1040  140  1041  1035  141
+CONVEX 389    'GT_PK(2,2)'      186  1042  187  1043  578  167
+CONVEX 390    'GT_PK(2,2)'      164  1044  144  1045  607  163
+CONVEX 391    'GT_PK(2,2)'      147  1046  127  1047  380  128
+CONVEX 392    'GT_PK(2,2)'      147  1048  148  1047  763  128
+CONVEX 393    'GT_PK(2,2)'      147  1048  148  1049  639  167
+CONVEX 394    'GT_PK(2,2)'      78  1050  95  1051  789  96
+CONVEX 395    'GT_PK(2,2)'      78  1052  77  1050  886  95
+CONVEX 396    'GT_PK(2,2)'      78  1051  96  1053  782  79
+CONVEX 397    'GT_PK(2,2)'      78  1054  62  1053  731  79
+CONVEX 398    'GT_PK(2,2)'      78  1054  62  1055  651  61
+CONVEX 399    'GT_PK(2,2)'      78  1052  77  1055  880  61
+CONVEX 400    'GT_PK(2,2)'      115  1056  116  1057  582  135
+CONVEX 401    'GT_PK(2,2)'      115  1058  114  1059  788  96
+CONVEX 402    'GT_PK(2,2)'      115  1060  97  1059  781  96
+CONVEX 403    'GT_PK(2,2)'      115  1060  97  1056  841  116
+CONVEX 404    'GT_PK(2,2)'      134  1061  133  1062  1063  153
+CONVEX 405    'GT_PK(2,2)'      134  1064  114  1061  783  133
+CONVEX 406    'GT_PK(2,2)'      134  1065  115  1064  1058  114
+CONVEX 407    'GT_PK(2,2)'      134  1065  115  1066  1057  135
+CONVEX 408    'GT_PK(2,2)'      134  1067  154  1066  589  135
+CONVEX 409    'GT_PK(2,2)'      134  1067  154  1062  585  153
+CONVEX 410    'GT_PK(2,2)'      151  1068  132  1069  1070  131
+CONVEX 411    'GT_PK(2,2)'      151  1069  131  1071  445  150
+CONVEX 412    'GT_PK(2,2)'      151  1072  170  1071  994  150
+CONVEX 413    'GT_PK(2,2)'      151  1072  170  1073  997  171
+CONVEX 414    'GT_PK(2,2)'      152  1074  172  1075  592  171
+CONVEX 415    'GT_PK(2,2)'      152  1076  151  1075  1073  171
+CONVEX 416    'GT_PK(2,2)'      152  1076  151  1077  1068  132
+CONVEX 417    'GT_PK(2,2)'      152  1077  132  1078  790  133
+CONVEX 418    'GT_PK(2,2)'      152  1078  133  1079  1063  153
+CONVEX 419    'GT_PK(2,2)'      152  1074  172  1079  590  153
+CONVEX 420    'GT_PK(2,2)'      242  1080  222  1081  1082  223
+CONVEX 421    'GT_PK(2,2)'      242  1083  261  1084  1085  262
+CONVEX 422    'GT_PK(2,2)'      242  1086  243  1081  1087  223
+CONVEX 423    'GT_PK(2,2)'      242  1086  243  1084  810  262
+CONVEX 424    'GT_PK(2,2)'      280  1088  261  1089  805  279
+CONVEX 425    'GT_PK(2,2)'      280  1090  298  1091  597  297
+CONVEX 426    'GT_PK(2,2)'      280  1089  279  1091  1092  297
+CONVEX 427    'GT_PK(2,2)'      280  1090  298  1093  602  281
+CONVEX 428    'GT_PK(2,2)'      280  1094  262  1093  796  281
+CONVEX 429    'GT_PK(2,2)'      280  1088  261  1094  1085  262
+CONVEX 430    'GT_PK(2,2)'      176  1095  156  1096  819  175
+CONVEX 431    'GT_PK(2,2)'      176  1097  195  1098  614  196
+CONVEX 432    'GT_PK(2,2)'      176  1096  175  1097  1099  195
+CONVEX 433    'GT_PK(2,2)'      252  1100  232  1101  1102  251
+CONVEX 434    'GT_PK(2,2)'      231  1103  232  1104  1102  251
+CONVEX 435    'GT_PK(2,2)'      231  1105  250  1104  974  251
+CONVEX 436    'GT_PK(2,2)'      212  1106  232  1107  1108  213
+CONVEX 437    'GT_PK(2,2)'      212  1109  192  1110  823  211
+CONVEX 438    'GT_PK(2,2)'      212  1111  231  1110  1112  211
+CONVEX 439    'GT_PK(2,2)'      212  1111  231  1106  1103  232
+CONVEX 440    'GT_PK(2,2)'      193  1113  174  1114  828  173
+CONVEX 441    'GT_PK(2,2)'      193  1115  212  1116  1107  213
+CONVEX 442    'GT_PK(2,2)'      193  1117  192  1114  826  173
+CONVEX 443    'GT_PK(2,2)'      193  1115  212  1117  1109  192
+CONVEX 444    'GT_PK(2,2)'      194  1118  214  1119  832  195
+CONVEX 445    'GT_PK(2,2)'      194  1120  175  1119  1099  195
+CONVEX 446    'GT_PK(2,2)'      194  1121  174  1120  830  175
+CONVEX 447    'GT_PK(2,2)'      194  1118  214  1122  1123  213
+CONVEX 448    'GT_PK(2,2)'      194  1124  193  1122  1116  213
+CONVEX 449    'GT_PK(2,2)'      194  1124  193  1121  1113  174
+CONVEX 450    'GT_PK(2,2)'      101  1125  102  1126  865  120
+CONVEX 451    'GT_PK(2,2)'      101  1126  120  1127  1029  119
+CONVEX 452    'GT_PK(2,2)'      101  1128  100  1127  627  119
+CONVEX 453    'GT_PK(2,2)'      101  1129  83  1128  848  100
+CONVEX 454    'GT_PK(2,2)'      59  1130  58  1131  872  75
+CONVEX 455    'GT_PK(2,2)'      59  1130  58  1132  1133  43
+CONVEX 456    'GT_PK(2,2)'      59  1131  75  1134  645  76
+CONVEX 457    'GT_PK(2,2)'      59  1135  60  1134  878  76
+CONVEX 458    'GT_PK(2,2)'      16  1136  29  1137  873  17
+CONVEX 459    'GT_PK(2,2)'      16  1138  15  1139  446  6
+CONVEX 460    'GT_PK(2,2)'      16  1140  28  1138  891  15
+CONVEX 461    'GT_PK(2,2)'      16  1140  28  1136  893  29
+CONVEX 462    'GT_PK(2,2)'      16  1137  17  1141  392  7
+CONVEX 463    'GT_PK(2,2)'      16  1139  6  1141  1142  7
+CONVEX 464    'GT_PK(2,2)'      44  1143  60  1144  875  45
+CONVEX 465    'GT_PK(2,2)'      44  1145  29  1146  895  43
+CONVEX 466    'GT_PK(2,2)'      44  1147  59  1146  1132  43
+CONVEX 467    'GT_PK(2,2)'      44  1147  59  1143  1135  60
+CONVEX 468    'GT_PK(2,2)'      44  1144  45  1148  901  30
+CONVEX 469    'GT_PK(2,2)'      44  1145  29  1148  874  30
+CONVEX 470    'GT_PK(2,2)'      112  1149  94  1150  882  113
+CONVEX 471    'GT_PK(2,2)'      112  1151  132  1150  791  113
+CONVEX 472    'GT_PK(2,2)'      112  1151  132  1152  1070  131
+CONVEX 473    'GT_PK(2,2)'      112  1149  94  1153  883  93
+CONVEX 474    'GT_PK(2,2)'      112  1154  111  1152  767  131
+CONVEX 475    'GT_PK(2,2)'      112  1154  111  1153  772  93
+CONVEX 476    'GT_PK(2,2)'      26  1155  41  1156  1157  27
+CONVEX 477    'GT_PK(2,2)'      26  1158  14  1159  1160  13
+CONVEX 478    'GT_PK(2,2)'      26  1158  14  1156  898  27
+CONVEX 479    'GT_PK(2,2)'      26  1155  41  1161  888  40
+CONVEX 480    'GT_PK(2,2)'      26  1162  25  1161  404  40
+CONVEX 481    'GT_PK(2,2)'      26  1159  13  1162  1163  25
+CONVEX 482    'GT_PK(2,2)'      42  1164  41  1165  1157  27
+CONVEX 483    'GT_PK(2,2)'      42  1166  28  1165  890  27
+CONVEX 484    'GT_PK(2,2)'      42  1164  41  1167  889  57
+CONVEX 485    'GT_PK(2,2)'      42  1168  58  1167  871  57
+CONVEX 486    'GT_PK(2,2)'      42  1168  58  1169  1133  43
+CONVEX 487    'GT_PK(2,2)'      42  1166  28  1169  894  43
+CONVEX 488    'GT_PK(2,2)'      310  1170  327  1171  656  326
+CONVEX 489    'GT_PK(2,2)'      310  1172  311  1170  905  327
+CONVEX 490    'GT_PK(2,2)'      310  1173  309  1171  396  326
+CONVEX 491    'GT_PK(2,2)'      310  1173  309  1174  500  292
+CONVEX 492    'GT_PK(2,2)'      310  1175  293  1174  987  292
+CONVEX 493    'GT_PK(2,2)'      310  1172  311  1175  909  293
+CONVEX 494    'GT_PK(2,2)'      313  1176  312  1177  935  329
+CONVEX 495    'GT_PK(2,2)'      295  1178  277  1179  676  296
+CONVEX 496    'GT_PK(2,2)'      295  1180  313  1179  1181  296
+CONVEX 497    'GT_PK(2,2)'      295  1180  313  1182  1176  312
+CONVEX 498    'GT_PK(2,2)'      295  1182  312  1183  938  294
+CONVEX 499    'GT_PK(2,2)'      295  1183  294  1184  687  276
+CONVEX 500    'GT_PK(2,2)'      295  1178  277  1184  674  276
+CONVEX 501    'GT_PK(2,2)'      284  1185  265  1186  948  283
+CONVEX 502    'GT_PK(2,2)'      284  1185  265  1187  1188  266
+CONVEX 503    'GT_PK(2,2)'      319  1189  333  1190  950  334
+CONVEX 504    'GT_PK(2,2)'      319  1191  302  1192  1193  318
+CONVEX 505    'GT_PK(2,2)'      319  1189  333  1192  959  318
+CONVEX 506    'GT_PK(2,2)'      227  1194  208  1195  1003  207
+CONVEX 507    'GT_PK(2,2)'      227  1196  226  1195  1197  207
+CONVEX 508    'GT_PK(2,2)'      246  1198  265  1199  1188  266
+CONVEX 509    'GT_PK(2,2)'      246  1200  247  1199  1201  266
+CONVEX 510    'GT_PK(2,2)'      246  1198  265  1202  949  245
+CONVEX 511    'GT_PK(2,2)'      246  1203  227  1200  1204  247
+CONVEX 512    'GT_PK(2,2)'      246  1205  226  1202  1206  245
+CONVEX 513    'GT_PK(2,2)'      246  1203  227  1205  1196  226
+CONVEX 514    'GT_PK(2,2)'      348  1207  335  1208  964  347
+CONVEX 515    'GT_PK(2,2)'      348  1209  358  1210  371  359
+CONVEX 516    'GT_PK(2,2)'      348  1208  347  1209  489  358
+CONVEX 517    'GT_PK(2,2)'      348  1207  335  1211  965  336
+CONVEX 518    'GT_PK(2,2)'      348  1212  349  1210  707  359
+CONVEX 519    'GT_PK(2,2)'      348  1212  349  1211  708  336
+CONVEX 520    'GT_PK(2,2)'      230  1213  211  1214  433  210
+CONVEX 521    'GT_PK(2,2)'      230  1215  229  1214  692  210
+CONVEX 522    'GT_PK(2,2)'      230  1216  231  1213  1112  211
+CONVEX 523    'GT_PK(2,2)'      230  1216  231  1217  1105  250
+CONVEX 524    'GT_PK(2,2)'      271  1218  289  1219  1220  270
+CONVEX 525    'GT_PK(2,2)'      271  1219  270  1221  975  251
+CONVEX 526    'GT_PK(2,2)'      271  1222  272  1223  720  290
+CONVEX 527    'GT_PK(2,2)'      271  1218  289  1223  977  290
+CONVEX 528    'GT_PK(2,2)'      271  1224  252  1221  1101  251
+CONVEX 529    'GT_PK(2,2)'      271  1224  252  1222  1225  272
+CONVEX 530    'GT_PK(2,2)'      288  1226  289  1227  1220  270
+CONVEX 531    'GT_PK(2,2)'      288  1226  289  1228  978  306
+CONVEX 532    'GT_PK(2,2)'      288  1229  305  1228  981  306
+CONVEX 533    'GT_PK(2,2)'      32  1230  20  1231  1020  33
+CONVEX 534    'GT_PK(2,2)'      32  1232  31  1233  902  46
+CONVEX 535    'GT_PK(2,2)'      32  1232  31  1234  904  19
+CONVEX 536    'GT_PK(2,2)'      32  1230  20  1234  1019  19
+CONVEX 537    'GT_PK(2,2)'      32  1231  33  1235  1013  47
+CONVEX 538    'GT_PK(2,2)'      32  1233  46  1235  652  47
+CONVEX 539    'GT_PK(2,2)'      206  1236  187  1237  1005  207
+CONVEX 540    'GT_PK(2,2)'      206  1238  186  1236  1042  187
+CONVEX 541    'GT_PK(2,2)'      206  1239  226  1237  1197  207
+CONVEX 542    'GT_PK(2,2)'      184  1240  204  1241  1242  185
+CONVEX 543    'GT_PK(2,2)'      145  1243  164  1244  1044  144
+CONVEX 544    'GT_PK(2,2)'      145  1245  126  1246  553  125
+CONVEX 545    'GT_PK(2,2)'      145  1244  144  1246  610  125
+CONVEX 546    'GT_PK(2,2)'      183  1247  163  1248  430  182
+CONVEX 547    'GT_PK(2,2)'      183  1249  164  1247  1045  163
+CONVEX 548    'GT_PK(2,2)'      183  1250  184  1249  1251  164
+CONVEX 549    'GT_PK(2,2)'      183  1252  202  1248  605  182
+CONVEX 550    'GT_PK(2,2)'      241  1253  240  1254  815  222
+CONVEX 551    'GT_PK(2,2)'      241  1255  242  1254  1080  222
+CONVEX 552    'GT_PK(2,2)'      241  1255  242  1256  1083  261
+CONVEX 553    'GT_PK(2,2)'      241  1253  240  1257  1258  260
+CONVEX 554    'GT_PK(2,2)'      241  1256  261  1257  806  260
+CONVEX 555    'GT_PK(2,2)'      177  1259  197  1260  505  196
+CONVEX 556    'GT_PK(2,2)'      177  1261  176  1260  1098  196
+CONVEX 557    'GT_PK(2,2)'      177  1259  197  1262  507  178
+CONVEX 558    'GT_PK(2,2)'      233  1263  252  1264  1100  232
+CONVEX 559    'GT_PK(2,2)'      233  1264  232  1265  1108  213
+CONVEX 560    'GT_PK(2,2)'      233  1266  214  1267  833  234
+CONVEX 561    'GT_PK(2,2)'      233  1266  214  1265  1123  213
+CONVEX 562    'GT_PK(2,2)'      253  1268  273  1269  990  272
+CONVEX 563    'GT_PK(2,2)'      253  1270  252  1269  1225  272
+CONVEX 564    'GT_PK(2,2)'      253  1268  273  1271  992  254
+CONVEX 565    'GT_PK(2,2)'      253  1272  233  1270  1263  252
+CONVEX 566    'GT_PK(2,2)'      253  1271  254  1273  945  234
+CONVEX 567    'GT_PK(2,2)'      253  1272  233  1273  1267  234
+CONVEX 568    'GT_PK(2,2)'      84  1274  101  1275  1125  102
+CONVEX 569    'GT_PK(2,2)'      84  1276  68  1277  844  67
+CONVEX 570    'GT_PK(2,2)'      84  1278  83  1277  846  67
+CONVEX 571    'GT_PK(2,2)'      84  1274  101  1278  1129  83
+CONVEX 572    'GT_PK(2,2)'      84  1276  68  1279  1280  85
+CONVEX 573    'GT_PK(2,2)'      84  1275  102  1279  862  85
+CONVEX 574    'GT_PK(2,2)'      301  1281  284  1282  1186  283
+CONVEX 575    'GT_PK(2,2)'      301  1281  284  1283  1284  302
+CONVEX 576    'GT_PK(2,2)'      301  1285  300  1282  804  283
+CONVEX 577    'GT_PK(2,2)'      301  1285  300  1286  538  317
+CONVEX 578    'GT_PK(2,2)'      301  1287  318  1286  956  317
+CONVEX 579    'GT_PK(2,2)'      301  1283  302  1287  1193  318
+CONVEX 580    'GT_PK(2,2)'      320  1288  335  1289  966  321
+CONVEX 581    'GT_PK(2,2)'      320  1288  335  1290  963  334
+CONVEX 582    'GT_PK(2,2)'      320  1291  319  1290  1190  334
+CONVEX 583    'GT_PK(2,2)'      228  1292  227  1293  1204  247
+CONVEX 584    'GT_PK(2,2)'      228  1294  209  1295  690  229
+CONVEX 585    'GT_PK(2,2)'      228  1294  209  1296  694  208
+CONVEX 586    'GT_PK(2,2)'      228  1292  227  1296  1194  208
+CONVEX 587    'GT_PK(2,2)'      269  1297  250  1298  973  270
+CONVEX 588    'GT_PK(2,2)'      269  1299  288  1298  1227  270
+CONVEX 589    'GT_PK(2,2)'      225  1300  206  1301  1239  226
+CONVEX 590    'GT_PK(2,2)'      225  1302  245  1303  596  244
+CONVEX 591    'GT_PK(2,2)'      225  1301  226  1302  1206  245
+CONVEX 592    'GT_PK(2,2)'      166  1304  147  1305  1049  167
+CONVEX 593    'GT_PK(2,2)'      166  1306  186  1305  1043  167
+CONVEX 594    'GT_PK(2,2)'      166  1306  186  1307  1308  185
+CONVEX 595    'GT_PK(2,2)'      203  1309  184  1310  1240  204
+CONVEX 596    'GT_PK(2,2)'      203  1311  183  1309  1250  184
+CONVEX 597    'GT_PK(2,2)'      203  1310  204  1312  1313  223
+CONVEX 598    'GT_PK(2,2)'      203  1311  183  1314  1252  202
+CONVEX 599    'GT_PK(2,2)'      203  1315  222  1312  1082  223
+CONVEX 600    'GT_PK(2,2)'      203  1314  202  1315  816  222
+CONVEX 601    'GT_PK(2,2)'      138  1316  137  1317  633  118
+CONVEX 602    'GT_PK(2,2)'      138  1317  118  1318  628  119
+CONVEX 603    'GT_PK(2,2)'      138  1319  139  1318  1028  119
+CONVEX 604    'GT_PK(2,2)'      157  1320  176  1321  1095  156
+CONVEX 605    'GT_PK(2,2)'      157  1322  177  1320  1261  176
+CONVEX 606    'GT_PK(2,2)'      157  1321  156  1323  821  137
+CONVEX 607    'GT_PK(2,2)'      157  1324  138  1323  1316  137
+CONVEX 608    'GT_PK(2,2)'      249  1325  269  1326  1297  250
+CONVEX 609    'GT_PK(2,2)'      249  1327  230  1328  1215  229
+CONVEX 610    'GT_PK(2,2)'      249  1327  230  1326  1217  250
+CONVEX 611    'GT_PK(2,2)'      287  1329  288  1330  1229  305
+CONVEX 612    'GT_PK(2,2)'      287  1331  269  1329  1299  288
+CONVEX 613    'GT_PK(2,2)'      224  1332  243  1333  1087  223
+CONVEX 614    'GT_PK(2,2)'      224  1334  204  1333  1313  223
+CONVEX 615    'GT_PK(2,2)'      224  1332  243  1335  809  244
+CONVEX 616    'GT_PK(2,2)'      224  1336  225  1335  1303  244
+CONVEX 617    'GT_PK(2,2)'      205  1337  206  1338  1238  186
+CONVEX 618    'GT_PK(2,2)'      205  1339  225  1337  1300  206
+CONVEX 619    'GT_PK(2,2)'      205  1338  186  1340  1308  185
+CONVEX 620    'GT_PK(2,2)'      205  1341  224  1339  1336  225
+CONVEX 621    'GT_PK(2,2)'      205  1342  204  1340  1242  185
+CONVEX 622    'GT_PK(2,2)'      205  1341  224  1342  1334  204
+CONVEX 623    'GT_PK(2,2)'      146  1343  166  1344  1304  147
+CONVEX 624    'GT_PK(2,2)'      146  1344  147  1345  1046  127
+CONVEX 625    'GT_PK(2,2)'      146  1346  126  1345  423  127
+CONVEX 626    'GT_PK(2,2)'      146  1347  145  1346  1245  126
+CONVEX 627    'GT_PK(2,2)'      165  1348  184  1349  1251  164
+CONVEX 628    'GT_PK(2,2)'      165  1350  145  1349  1243  164
+CONVEX 629    'GT_PK(2,2)'      165  1348  184  1351  1241  185
+CONVEX 630    'GT_PK(2,2)'      165  1352  166  1351  1307  185
+CONVEX 631    'GT_PK(2,2)'      165  1353  146  1350  1347  145
+CONVEX 632    'GT_PK(2,2)'      165  1353  146  1352  1343  166
+CONVEX 633    'GT_PK(2,2)'      158  1354  157  1355  1322  177
+CONVEX 634    'GT_PK(2,2)'      158  1356  159  1357  757  178
+CONVEX 635    'GT_PK(2,2)'      158  1355  177  1357  1262  178
+CONVEX 636    'GT_PK(2,2)'      158  1354  157  1358  1324  138
+CONVEX 637    'GT_PK(2,2)'      158  1359  139  1356  1032  159
+CONVEX 638    'GT_PK(2,2)'      158  1358  138  1359  1319  139
+CONVEX 639    'GT_PK(2,2)'      267  1360  247  1361  1201  266
+CONVEX 640    'GT_PK(2,2)'      248  1362  249  1363  1328  229
+CONVEX 641    'GT_PK(2,2)'      248  1364  267  1365  1360  247
+CONVEX 642    'GT_PK(2,2)'      248  1366  228  1363  1295  229
+CONVEX 643    'GT_PK(2,2)'      248  1366  228  1365  1293  247
+CONVEX 644    'GT_PK(2,2)'      268  1367  287  1368  1331  269
+CONVEX 645    'GT_PK(2,2)'      268  1369  248  1370  1364  267
+CONVEX 646    'GT_PK(2,2)'      268  1371  249  1368  1325  269
+CONVEX 647    'GT_PK(2,2)'      268  1369  248  1371  1362  249
+CONVEX 648    'GT_PK(2,2)'      303  1372  319  1373  1191  302
+CONVEX 649    'GT_PK(2,2)'      303  1374  320  1372  1291  319
+CONVEX 650    'GT_PK(2,2)'      286  1375  268  1376  1367  287
+CONVEX 651    'GT_PK(2,2)'      286  1375  268  1377  1370  267
+CONVEX 652    'GT_PK(2,2)'      304  1378  287  1379  1330  305
+CONVEX 653    'GT_PK(2,2)'      304  1380  303  1381  1374  320
+CONVEX 654    'GT_PK(2,2)'      304  1382  286  1378  1376  287
+CONVEX 655    'GT_PK(2,2)'      304  1382  286  1380  1383  303
+CONVEX 656    'GT_PK(2,2)'      304  1379  305  1384  980  321
+CONVEX 657    'GT_PK(2,2)'      304  1381  320  1384  1289  321
+CONVEX 658    'GT_PK(2,2)'      285  1385  286  1386  1383  303
+CONVEX 659    'GT_PK(2,2)'      285  1387  284  1388  1284  302
+CONVEX 660    'GT_PK(2,2)'      285  1386  303  1388  1373  302
+CONVEX 661    'GT_PK(2,2)'      285  1385  286  1389  1377  267
+CONVEX 662    'GT_PK(2,2)'      285  1387  284  1390  1187  266
+CONVEX 663    'GT_PK(2,2)'      285  1389  267  1390  1361  266
 
 END MESH STRUCTURE DESCRIPTION
diff --git a/tests/meshes/disc_P2_h4.mesh b/tests/meshes/disc_P2_h4.mesh
old mode 100755
new mode 100644
index cf5de4c..8a11842
--- a/tests/meshes/disc_P2_h4.mesh
+++ b/tests/meshes/disc_P2_h4.mesh
@@ -10,76 +10,312 @@ BEGIN POINTS LIST
   POINT  2  -20  20
   POINT  3  20  20
   POINT  4  0  40
-  POINT  5  -17.30114108180553  9.966530148019924
-  POINT  6  -9.808147479055082  2.570133591094111
-  POINT  7  -1.708558578927821e-05  8.543196483845456
-  POINT  8  9.808090002043611  2.570101247796567
-  POINT  9  17.30111946939649  9.966492881056432
-  POINT  10  -11.11908532087554  19.19371433923335
-  POINT  11  -7.338567471994479  11.96760951723277
-  POINT  12  7.338553489686806  11.96760527958758
-  POINT  13  11.11909943493882  19.19371966673324
-  POINT  14  -18.46336467991046  27.68792330197096
-  POINT  15  -7.814569052463167  27.16902224808882
-  POINT  16  -2.416328877977159e-05  30.67219567518138
-  POINT  17  7.814550453131275  27.16904062048118
-  POINT  18  18.46334013420301  27.68798225094262
-  POINT  19  -14.02734782961414  34.25599918865808
-  POINT  20  -7.620060823604273  38.4914756859719
-  POINT  21  7.619967037895926  38.49151433342378
-  POINT  22  14.02726271722185  34.25608293564759
-  POINT  23  -3.669292278790135  10.25540300053911
-  POINT  24  -8.542792894639106e-06  14.27159824192273
-  POINT  25  -3.66928373599724  15.98380475861638
-  POINT  26  4.904036458228911  5.556648865821012
-  POINT  27  -8.542792894639106e-06  4.271598241922728
-  POINT  28  5.069629237738408  0.6531926679034217
-  POINT  29  -4.904082282320435  5.556665037469783
-  POINT  30  -5.069635862356059  0.6532010267693861
-  POINT  31  -8.57335747552478  7.268871554163439
-  POINT  32  -9.228826396435009  15.58066192823306
-  POINT  33  -5.55954266043777  19.59685716961667
-  POINT  34  -9.466827186669352  23.18136829366108
-  POINT  35  -3.907284526231583  23.58451112404441
-  POINT  36  -3.907296607875973  28.9206089616351
-  POINT  37  -1.208164438988579e-05  25.33609783759069
-  POINT  38  3.907263144921248  28.92061814783128
-  POINT  39  3.907275226565638  23.58452031024059
-  POINT  40  -14.05008341543081  5.766422005880317
-  POINT  41  -12.31985427690001  10.96706983262635
-  POINT  42  -14.21011320134054  14.58012224362663
-  POINT  43  -19.31350236908489  14.80495895853099
-  POINT  44  -15.55954266043777  19.59685716961667
-  POINT  45  3.809971437303573  34.58185500430258
-  POINT  46  3.883930314926162  39.61925469584116
-  POINT  47  -1.208164438988579e-05  35.33609783759069
-  POINT  48  7.7172587455136  32.83027747695248
-  POINT  49  9.46682494403505  23.18138014360721
-  POINT  50  5.559549717469412  19.59685983336662
-  POINT  51  14.21010945216765  14.58010627389484
-  POINT  52  15.55954971746941  19.59685983336662
-  POINT  53  19.31349869257853  14.80493815780015
-  POINT  54  14.79121978457092  23.44085095883793
-  POINT  55  19.61207315056955  23.92003294700594
-  POINT  56  13.13894529366714  27.4285114357119
-  POINT  57  16.57392195826274  31.19398585576821
-  POINT  58  10.92090658517656  30.71256177806439
-  POINT  59  11.02884741112402  36.68426558642455
-  POINT  60  -3.810042493446526  34.58183568057664
-  POINT  61  -3.883965127593389  39.61924484649614
-  POINT  62  -11.02892896948328  36.68420469540357
-  POINT  63  -7.71731493803372  32.83024896703036
-  POINT  64  -10.92095844103865  30.71251071837345
-  POINT  65  3.669268202050509  10.25540088171652
-  POINT  66  3.669276744843403  15.98380263979379
-  POINT  67  9.228826462312814  15.58066247316041
-  POINT  68  8.573321745865208  7.268853263692073
-  POINT  69  12.31983647954165  10.967049080322
-  POINT  70  14.0500594277336  5.76638370796578
-  POINT  71  -16.57396817408611  31.19390992193383
-  POINT  72  -13.13896686618681  27.42847277502989
-  POINT  73  -14.791225000393  23.44081882060215
-  POINT  74  -19.61207880049138  23.92000163860839
+  POINT  5  -10.98978892636249  3.289986853546615
+  POINT  6  -7.455051935387742  1.441384732666446
+  POINT  7  -3.676797270081755  0.3408758629801169
+  POINT  8  3.676739140647854  0.3408649912656072
+  POINT  9  7.454956757891998  1.441346499866884
+  POINT  10  10.98967587538561  3.289912503101757
+  POINT  11  -14.0168269073075  5.73365626899654
+  POINT  12  -8.695621440244636  6.296208976859693
+  POINT  13  -4.394745255440499  5.015856566647908
+  POINT  14  -2.026216535175318e-05  4.385124114216329
+  POINT  15  4.394708091285465  5.015856253328598
+  POINT  16  8.695583210536949  6.296192236703892
+  POINT  17  14.01674847505161  5.733579208955796
+  POINT  18  -16.59751417751507  8.841033957952504
+  POINT  19  -11.67153666400569  9.560370517352128
+  POINT  20  -6.622536405170427  9.609178468908505
+  POINT  21  -2.162226938155009  8.907447576607822
+  POINT  22  2.162220418053965  8.907449303560238
+  POINT  23  6.62252892316614  9.609178885793535
+  POINT  24  11.67152235457562  9.560353456050622
+  POINT  25  16.59746793653143  8.840965180813091
+  POINT  26  -18.49296961576042  12.38356548043812
+  POINT  27  -14.03986978753954  13.21961891707463
+  POINT  28  -9.212447689054923  13.42718043490255
+  POINT  29  -4.546978357052273  13.23975192949301
+  POINT  30  5.760553932435131e-06  13.09029577543401
+  POINT  31  4.546984712272912  13.2397591385677
+  POINT  32  9.212451943525352  13.42717994917974
+  POINT  33  14.03987180658499  13.21960569166439
+  POINT  34  18.49294552140193  12.3835069787666
+  POINT  35  -19.60575567023449  16.04850096809653
+  POINT  36  -15.59452670078516  17.30489743540965
+  POINT  37  -11.19255363614599  17.32291243784231
+  POINT  38  -6.720002186738463  17.55851232809086
+  POINT  39  -2.521105171955536  17.0288301192291
+  POINT  40  2.521117530994832  17.02884382666544
+  POINT  41  6.720008173371727  17.55852412828754
+  POINT  42  11.19255813733148  17.32291152297285
+  POINT  43  15.59452813708109  17.30489873028883
+  POINT  44  19.60574841112116  16.04846495145881
+  POINT  45  -16.35730659116254  21.75725594233062
+  POINT  46  -12.54544836995473  21.48138724705098
+  POINT  47  -8.37129847568881  21.60726175061301
+  POINT  48  -4.053718777686841  21.85246502790269
+  POINT  49  -1.430589398276894e-05  24.01054233578156
+  POINT  50  4.05371501425693  21.85249206836341
+  POINT  51  8.371300119263841  21.60726988024046
+  POINT  52  12.54545081863551  21.48139080472586
+  POINT  53  16.35731330216852  21.75725990853536
+  POINT  54  -19.41056153872311  24.81976148284177
+  POINT  55  -14.80560392580181  26.07573876068267
+  POINT  56  -10.66746926752378  25.66425346686257
+  POINT  57  -6.065699906353569  25.80431103098134
+  POINT  58  -2.285109034351877  27.41452583361899
+  POINT  59  2.285117889708415  27.41450890210915
+  POINT  60  6.065725475366363  25.80433146618176
+  POINT  61  10.66748147994728  25.66426492608582
+  POINT  62  14.80560831647502  26.07574769863441
+  POINT  63  19.41055542162303  24.81978611809871
+  POINT  64  -17.79052993253167  29.13767173407599
+  POINT  65  -12.53266642765302  30.28076603601422
+  POINT  66  -8.408829224822554  29.44178330973553
+  POINT  67  -4.486611626819454  30.93433334096026
+  POINT  68  -3.455844492966306e-06  31.78686138258002
+  POINT  69  4.486608079340947  30.93433387532503
+  POINT  70  8.408846377235559  29.44180970477908
+  POINT  71  12.53266137297764  30.28079181313681
+  POINT  72  17.79050469035144  29.13772087902333
+  POINT  73  -15.42321743407593  32.73280660267888
+  POINT  74  -12.36825118230115  35.71707233206979
+  POINT  75  -8.654673025388929  33.6487632940044
+  POINT  76  -4.244918305693361  35.1578478808239
+  POINT  77  4.244868056856853  35.1578586139012
+  POINT  78  8.654638880706619  33.64878973380078
+  POINT  79  12.36818408598653  35.71712513202336
+  POINT  80  15.42316052899461  32.73287553137968
+  POINT  81  -8.358587775297027  38.16959026512966
+  POINT  82  -4.173840349470416  39.55962823616952
+  POINT  83  -3.315758252031564e-05  36.08253135745896
+  POINT  84  4.173782294307199  39.55964062450516
+  POINT  85  8.358512109833965  38.16962507345837
+  POINT  86  -15.31869198252731  11.03032643751357
+  POINT  87  -14.13452542076038  9.200702237652315
+  POINT  88  -12.85570322577262  11.38999471721338
+  POINT  89  14.81719997183304  15.26225221097661
+  POINT  90  12.61621497195824  15.27125860731862
+  POINT  91  13.39354313720629  17.31390512663084
+  POINT  92  16.26640866399346  12.80155633521549
+  POINT  93  15.31866987155821  11.03028543623874
+  POINT  94  17.63438934978107  10.56451880793851
+  POINT  95  17.04373682924151  14.84420285452771
+  POINT  96  -10.59366972652097  31.96476466500931
+  POINT  97  -10.47074782623779  29.86127467287488
+  POINT  98  -8.531751125105743  31.54527330186997
+  POINT  99  -12.45045880497709  32.99891918404201
+  POINT  100  -10.51146210384504  34.68291781303709
+  POINT  101  -8.506630400342978  35.90917677956703
+  POINT  102  -10.43571526797337  37.06153095754958
+  POINT  103  -17.63442337101413  10.56458323774599
+  POINT  104  -16.26641970164998  12.80159219875637
+  POINT  105  -15.3858183445685  7.22202811794831
+  POINT  106  -12.8441817856566  7.647013393174333
+  POINT  107  16.29805650341323  27.60673428882887
+  POINT  108  15.16158303166454  29.70925634608007
+  POINT  109  13.66913484472633  28.17826975588561
+  POINT  110  -1.142556245098185  29.6006936080995
+  POINT  111  4.427678269136592e-06  27.41451736786407
+  POINT  112  1.142557216931961  29.60068514234459
+  POINT  113  -17.04374815827279  14.84423145792389
+  POINT  114  -14.81719824416235  15.26225817624214
+  POINT  115  15.97592071962481  19.53107931941209
+  POINT  116  18.17865665108426  20.87862995426768
+  POINT  117  17.79726406854054  18.65244936514441
+  POINT  118  11.62616187505517  13.32339282042206
+  POINT  119  10.20250504042842  15.3750457360763
+  POINT  120  6.879718327899132  13.33346954387372
+  POINT  121  7.917490433345746  11.51817941748664
+  POINT  122  5.584756817719526  11.42446901218062
+  POINT  123  7.545654146317784  19.582897004264
+  POINT  124  8.956283155351606  17.4407178256302
+  POINT  125  9.781929128297662  19.46509070160666
+  POINT  126  7.96623005844854  15.49285203873364
+  POINT  127  5.633496442822319  15.39914163342762
+  POINT  128  12.8556970805803  11.3899795738575
+  POINT  129  14.13449514555352  9.200659318431857
+  POINT  130  10.44198714905048  11.49376670261518
+  POINT  131  9.147025638870879  9.584766170922078
+  POINT  132  -13.97794193086447  31.50678631934655
+  POINT  133  -13.97561719584198  34.30671603178849
+  POINT  134  -16.70387650845763  30.99911431489088
+  POINT  135  -15.16159818009234  29.7092188850451
+  POINT  136  -6.301753040495194  36.66371907297678
+  POINT  137  -6.449795665541145  34.40330558741415
+  POINT  138  -4.209379327581889  37.35873805849671
+  POINT  139  -6.304639255162508  38.98029279438281
+  POINT  140  4.209325175582026  37.35874961920318
+  POINT  141  6.301690083345409  36.66374184367979
+  POINT  142  6.304573775735958  38.98031527820729
+  POINT  143  -13.66913517672742  28.17825239834845
+  POINT  144  -16.29806692916674  27.60670524737933
+  POINT  145  -17.10808273226246  25.44775012176222
+  POINT  146  -18.72542076142402  27.02556955988556
+  POINT  147  10.51141148334658  34.68295743291207
+  POINT  148  8.506575495270292  35.90920740362957
+  POINT  149  10.4356453552653  37.06157496167121
+  POINT  150  6.449753468781736  34.40332417385099
+  POINT  151  10.59365012684213  31.96479077346879
+  POINT  152  8.531742628971088  31.54529971928993
+  POINT  153  10.4707538751066  29.86130075895795
+  POINT  154  12.45042272948209  32.99895847258009
+  POINT  155  17.60013827410112  16.67668184087382
+  POINT  156  19.90119304214559  18.01442401696686
+  POINT  157  19.13728303754552  14.18928652402979
+  POINT  158  13.97555586519206  34.30677709224583
+  POINT  159  13.97791095098612  31.50683367225824
+  POINT  160  16.70383744452203  30.99917471256351
+  POINT  161  -17.60014118550983  16.67669920175309
+  POINT  162  -19.90119484636033  18.01444229663801
+  POINT  163  -17.79726335039258  18.65244871770483
+  POINT  164  -19.13729740986643  14.18933437204147
+  POINT  165  14.45138206040202  21.61932535663061
+  POINT  166  13.67552956755527  23.77856925168013
+  POINT  167  15.58146080932177  23.91650380358488
+  POINT  168  10.45837546894968  21.54433034248316
+  POINT  169  11.8690044779835  19.40215116384935
+  POINT  170  14.0699894778583  19.39314476750734
+  POINT  171  18.7254069306502  27.02560730650771
+  POINT  172  17.10808186904902  25.44776690836656
+  POINT  173  17.88393436189578  23.28852301331703
+  POINT  174  19.85209195747333  22.42784944192063
+  POINT  175  8.366603477656822  25.73429819613379
+  POINT  176  9.53816392859142  27.55303731543246
+  POINT  177  7.237285926300961  27.62307058548042
+  POINT  178  11.60007142646246  27.97252836961132
+  POINT  179  12.73654489821115  25.87000631236012
+  POINT  180  9.519390799605562  23.63576740316314
+  POINT  181  7.218512797315102  23.70580067321111
+  POINT  182  11.6064661492914  23.57282786540584
+  POINT  183  5.059720244811647  23.82841176727259
+  POINT  184  6.212507566760386  21.72988097430193
+  POINT  185  5.386861593814329  19.70550809832548
+  POINT  186  3.169416451982673  24.63350048523628
+  POINT  187  4.175421682537388  26.60942018414546
+  POINT  188  12.84413541481362  7.64696633250321
+  POINT  189  15.38575758374665  7.221953946724504
+  POINT  190  6.545145650911207  5.656024245016244
+  POINT  191  7.659056066851544  7.952685561248713
+  POINT  192  5.508618507225803  7.312517569561066
+  POINT  193  10.18355278255628  7.928272846377257
+  POINT  194  11.35616584279428  6.014885722829844
+  POINT  195  9.84262954296128  4.793052369902824
+  POINT  196  12.5627706312312  4.437969385077269
+  POINT  197  5.924832424588732  3.228601376597741
+  POINT  198  5.59298116705137  0.7979540467762278
+  POINT  199  4.03572361596666  2.678360622297102
+  POINT  200  8.075269984214474  3.868769368285388
+  POINT  201  9.268518322543754  2.277286464498438
+  POINT  202  -3.385860330585666  29.17442958728963
+  POINT  203  -2.243307541331974  31.36059736177015
+  POINT  204  -4.365764966256407  33.04609061089208
+  POINT  205  -2.122460880768927  33.47235463170196
+  POINT  206  -5.276155766586511  28.3693221859708
+  POINT  207  -6.447720425821004  30.1880583253479
+  POINT  208  -7.237264565588061  27.62304717035844
+  POINT  209  -4.175404470352722  26.60941843230016
+  POINT  210  -6.570642326104192  32.29154831748234
+  POINT  211  -2.122475731637941  35.62018961914143
+  POINT  212  -1.830671350664097e-05  33.93469637001949
+  POINT  213  2.122417449637166  35.62019498568008
+  POINT  214  2.12243230050618  33.47235999824061
+  POINT  215  -2.086936753526468  37.82107979681424
+  POINT  216  -1.657879126015782e-05  38.04126567872948
+  POINT  217  -2.098502568614956  39.88960238033538
+  POINT  218  2.086874568362339  37.82108599098206
+  POINT  219  2.09847524707464  39.8896054946081
+  POINT  220  5.276166777353655  28.3693326707534
+  POINT  221  6.447727228288253  30.18807179005206
+  POINT  222  3.385862984524681  29.17442138871709
+  POINT  223  6.570623480023783  32.2915618045629
+  POINT  224  4.365738068098899  33.04609624461312
+  POINT  225  2.243302311748227  31.36059762895253
+  POINT  226  -15.97591664597385  19.53107668887014
+  POINT  227  -18.17865329558127  20.87862797116531
+  POINT  228  -17.88393406494282  23.2885087125862
+  POINT  229  -19.85209345422734  22.42783684408701
+  POINT  230  -15.58145525848218  23.91649735150665
+  POINT  231  1.260561645774382  15.05956980104973
+  POINT  232  3.534051121633872  15.13430148261657
+  POINT  233  2.273495236413422  13.16502745700086
+  POINT  234  4.62056285218328  17.29368397747649
+  POINT  235  3.287416272625881  19.44066794751443
+  POINT  236  1.260558765497416  18.51442191333272
+  POINT  237  2.026857507128465  20.92624603418171
+  POINT  238  -1.260549705700802  15.05956294733156
+  POINT  239  -3.534041764503905  15.13429102436105
+  POINT  240  -2.27348629824917  13.16502385246351
+  POINT  241  -4.620553679346999  17.29367122365998
+  POINT  242  -5.633490271895369  15.39913212879194
+  POINT  243  6.179519647986353e-06  17.02883697294727
+  POINT  244  -1.260552585977768  18.51441505961455
+  POINT  245  3.354602565163439  11.07360422106397
+  POINT  246  4.392374670610053  9.258314094676887
+  POINT  247  1.081113089303949  10.99887253949712
+  POINT  248  3.278464254669715  6.961652778444417
+  POINT  249  -8.956277911442228  17.44071238296659
+  POINT  250  -9.781926055917403  19.46508709422766
+  POINT  251  -7.545650331213636  19.58288703935193
+  POINT  252  -13.39354016846558  17.31390493662598
+  POINT  253  -12.61621171184277  15.27126567745847
+  POINT  254  -7.659078922707532  7.952693722884099
+  POINT  255  -10.18357905212516  7.928289747105911
+  POINT  256  -9.147036534588061  9.584774493130316
+  POINT  257  -11.35622417377607  6.014932622928116
+  POINT  258  -9.842705183303561  4.793097915203154
+  POINT  259  -12.5628648971392  4.438046414902402
+  POINT  260  -8.07533668781619  3.868796854763069
+  POINT  261  -9.268622145138828  2.27734158433505
+  POINT  262  1.081100077944307  6.646286708888283
+  POINT  263  2.197343914560057  4.700490183772463
+  POINT  264  1.838359439241251  2.362994552740968
+  POINT  265  -1.013108267587659e-05  2.192562057108165
+  POINT  266  1.846253788767268  0.0853985780217391
+  POINT  267  -1.081110588800538  10.99887167602092
+  POINT  268  -3.354602647603641  11.07359975305042
+  POINT  269  -4.392381671662718  9.258313022758163
+  POINT  270  -5.58475738111135  11.42446519920076
+  POINT  271  -3.260050521758373e-06  8.90744844008403
+  POINT  272  -1.08112360016018  6.646285845412075
+  POINT  273  -8.366584586938671  25.73428224892195
+  POINT  274  -9.519383871606294  23.63575760873779
+  POINT  275  -7.21849919102119  23.70578639079717
+  POINT  276  -9.538149246173166  27.55301838829905
+  POINT  277  -11.6000678475884  27.97250975143839
+  POINT  278  -12.73653659666279  25.86999611377262
+  POINT  279  -5.059709342020205  23.82838802944201
+  POINT  280  -6.212508626687826  21.72986338925784
+  POINT  281  -3.287411974821189  19.44064757356589
+  POINT  282  -2.026859388843421  20.92623251395134
+  POINT  283  -3.169413906019359  24.63349543076084
+  POINT  284  -5.386860482212652  19.70548867799678
+  POINT  285  -11.86900100305036  19.40214984244664
+  POINT  286  -10.45837342282177  21.54432449883199
+  POINT  287  -11.60645881873926  23.57282035695677
+  POINT  288  -14.45137748055864  21.6193215946908
+  POINT  289  -14.06998753536995  19.39314234123031
+  POINT  290  -13.67552614787827  23.77856300386682
+  POINT  291  -7.966224937896692  15.49284638149671
+  POINT  292  -6.879713023053598  13.33346618219778
+  POINT  293  -10.20250066260046  15.37504643637243
+  POINT  294  -7.917492047112675  11.51817945190553
+  POINT  295  -10.44199217653031  11.49377547612734
+  POINT  296  -11.62615873829723  13.32339967598859
+  POINT  297  -1.838408766123554  2.362999988598223
+  POINT  298  -1.846281530475226  0.08540130760665365
+  POINT  299  -3.278486096797754  6.961652071627865
+  POINT  300  -2.197382758802926  4.700490340432118
+  POINT  301  -6.545183347842568  5.6560327717538
+  POINT  302  -5.92489859541412  3.228620649657177
+  POINT  303  -5.508640830305463  7.312517517778206
+  POINT  304  -4.035771262761127  2.678366214814012
+  POINT  305  -5.593056997119752  0.797976657516179
+  POINT  306  -2.026866541790412  22.93150368184212
+  POINT  307  -7.152946991384468e-06  22.00527116789078
+  POINT  308  -1.14256167012293  25.71253408470027
+  POINT  309  1.142551791907216  25.71252561894535
+  POINT  310  2.026850354181474  22.93151720207248
 
 END POINTS LIST
 
@@ -87,35 +323,145 @@ END POINTS LIST
 
 BEGIN MESH STRUCTURE DESCRIPTION
 
-CONVEX 0    'GT_PK(2,2)'      7  23  11  24  25  1
-CONVEX 1    'GT_PK(2,2)'      7  26  8  27  28  0
-CONVEX 2    'GT_PK(2,2)'      7  29  6  27  30  0
-CONVEX 3    'GT_PK(2,2)'      7  29  6  23  31  11
-CONVEX 4    'GT_PK(2,2)'      10  32  11  33  25  1
-CONVEX 5    'GT_PK(2,2)'      10  34  15  33  35  1
-CONVEX 6    'GT_PK(2,2)'      16  36  15  37  35  1
-CONVEX 7    'GT_PK(2,2)'      16  38  17  37  39  1
-CONVEX 8    'GT_PK(2,2)'      5  40  6  41  31  11
-CONVEX 9    'GT_PK(2,2)'      5  42  10  43  44  2
-CONVEX 10    'GT_PK(2,2)'      5  42  10  41  32  11
-CONVEX 11    'GT_PK(2,2)'      21  45  16  46  47  4
-CONVEX 12    'GT_PK(2,2)'      21  45  16  48  38  17
-CONVEX 13    'GT_PK(2,2)'      13  49  17  50  39  1
-CONVEX 14    'GT_PK(2,2)'      13  51  9  52  53  3
-CONVEX 15    'GT_PK(2,2)'      13  54  18  52  55  3
-CONVEX 16    'GT_PK(2,2)'      13  54  18  49  56  17
-CONVEX 17    'GT_PK(2,2)'      22  57  18  58  56  17
-CONVEX 18    'GT_PK(2,2)'      22  59  21  58  48  17
-CONVEX 19    'GT_PK(2,2)'      20  60  16  61  47  4
-CONVEX 20    'GT_PK(2,2)'      20  62  19  63  64  15
-CONVEX 21    'GT_PK(2,2)'      20  60  16  63  36  15
-CONVEX 22    'GT_PK(2,2)'      12  65  7  66  24  1
-CONVEX 23    'GT_PK(2,2)'      12  67  13  66  50  1
-CONVEX 24    'GT_PK(2,2)'      12  65  7  68  26  8
-CONVEX 25    'GT_PK(2,2)'      12  69  9  68  70  8
-CONVEX 26    'GT_PK(2,2)'      12  67  13  69  51  9
-CONVEX 27    'GT_PK(2,2)'      14  71  19  72  64  15
-CONVEX 28    'GT_PK(2,2)'      14  73  10  74  44  2
-CONVEX 29    'GT_PK(2,2)'      14  73  10  72  34  15
+CONVEX 0    'GT_PK(2,2)'      18  86  27  87  88  19
+CONVEX 1    'GT_PK(2,2)'      33  89  43  90  91  42
+CONVEX 2    'GT_PK(2,2)'      33  92  34  93  94  25
+CONVEX 3    'GT_PK(2,2)'      33  89  43  92  95  34
+CONVEX 4    'GT_PK(2,2)'      65  96  75  97  98  66
+CONVEX 5    'GT_PK(2,2)'      65  96  75  99  100  74
+CONVEX 6    'GT_PK(2,2)'      81  101  75  102  100  74
+CONVEX 7    'GT_PK(2,2)'      26  103  18  104  86  27
+CONVEX 8    'GT_PK(2,2)'      11  105  18  106  87  19
+CONVEX 9    'GT_PK(2,2)'      72  107  62  108  109  71
+CONVEX 10    'GT_PK(2,2)'      58  110  68  111  112  59
+CONVEX 11    'GT_PK(2,2)'      36  113  26  114  104  27
+CONVEX 12    'GT_PK(2,2)'      53  115  43  116  117  3
+CONVEX 13    'GT_PK(2,2)'      32  118  33  119  90  42
+CONVEX 14    'GT_PK(2,2)'      32  120  31  121  122  23
+CONVEX 15    'GT_PK(2,2)'      41  123  51  124  125  42
+CONVEX 16    'GT_PK(2,2)'      41  126  32  124  119  42
+CONVEX 17    'GT_PK(2,2)'      41  126  32  127  120  31
+CONVEX 18    'GT_PK(2,2)'      24  128  33  129  93  25
+CONVEX 19    'GT_PK(2,2)'      24  130  32  131  121  23
+CONVEX 20    'GT_PK(2,2)'      24  130  32  128  118  33
+CONVEX 21    'GT_PK(2,2)'      73  132  65  133  99  74
+CONVEX 22    'GT_PK(2,2)'      73  132  65  134  135  64
+CONVEX 23    'GT_PK(2,2)'      76  136  81  137  101  75
+CONVEX 24    'GT_PK(2,2)'      76  138  82  136  139  81
+CONVEX 25    'GT_PK(2,2)'      77  140  84  141  142  85
+CONVEX 26    'GT_PK(2,2)'      55  143  65  144  135  64
+CONVEX 27    'GT_PK(2,2)'      55  145  54  144  146  64
+CONVEX 28    'GT_PK(2,2)'      78  147  79  148  149  85
+CONVEX 29    'GT_PK(2,2)'      78  150  77  148  141  85
+CONVEX 30    'GT_PK(2,2)'      78  151  71  152  153  70
+CONVEX 31    'GT_PK(2,2)'      78  147  79  151  154  71
+CONVEX 32    'GT_PK(2,2)'      44  155  43  156  117  3
+CONVEX 33    'GT_PK(2,2)'      44  155  43  157  95  34
+CONVEX 34    'GT_PK(2,2)'      80  158  79  159  154  71
+CONVEX 35    'GT_PK(2,2)'      80  160  72  159  108  71
+CONVEX 36    'GT_PK(2,2)'      35  161  36  162  163  2
+CONVEX 37    'GT_PK(2,2)'      35  161  36  164  113  26
+CONVEX 38    'GT_PK(2,2)'      52  165  53  166  167  62
+CONVEX 39    'GT_PK(2,2)'      52  168  51  169  125  42
+CONVEX 40    'GT_PK(2,2)'      52  170  43  169  91  42
+CONVEX 41    'GT_PK(2,2)'      52  165  53  170  115  43
+CONVEX 42    'GT_PK(2,2)'      63  171  72  172  107  62
+CONVEX 43    'GT_PK(2,2)'      63  173  53  172  167  62
+CONVEX 44    'GT_PK(2,2)'      63  173  53  174  116  3
+CONVEX 45    'GT_PK(2,2)'      61  175  60  176  177  70
+CONVEX 46    'GT_PK(2,2)'      61  178  71  176  153  70
+CONVEX 47    'GT_PK(2,2)'      61  179  62  178  109  71
+CONVEX 48    'GT_PK(2,2)'      61  175  60  180  181  51
+CONVEX 49    'GT_PK(2,2)'      61  182  52  179  166  62
+CONVEX 50    'GT_PK(2,2)'      61  182  52  180  168  51
+CONVEX 51    'GT_PK(2,2)'      50  183  60  184  181  51
+CONVEX 52    'GT_PK(2,2)'      50  185  41  184  123  51
+CONVEX 53    'GT_PK(2,2)'      50  183  60  186  187  59
+CONVEX 54    'GT_PK(2,2)'      17  188  24  189  129  25
+CONVEX 55    'GT_PK(2,2)'      16  190  15  191  192  23
+CONVEX 56    'GT_PK(2,2)'      16  193  24  191  131  23
+CONVEX 57    'GT_PK(2,2)'      16  194  17  195  196  10
+CONVEX 58    'GT_PK(2,2)'      16  194  17  193  188  24
+CONVEX 59    'GT_PK(2,2)'      9  197  15  198  199  8
+CONVEX 60    'GT_PK(2,2)'      9  200  16  201  195  10
+CONVEX 61    'GT_PK(2,2)'      9  200  16  197  190  15
+CONVEX 62    'GT_PK(2,2)'      67  202  58  203  110  68
+CONVEX 63    'GT_PK(2,2)'      67  204  76  203  205  68
+CONVEX 64    'GT_PK(2,2)'      67  206  57  207  208  66
+CONVEX 65    'GT_PK(2,2)'      67  206  57  202  209  58
+CONVEX 66    'GT_PK(2,2)'      67  210  75  207  98  66
+CONVEX 67    'GT_PK(2,2)'      67  204  76  210  137  75
+CONVEX 68    'GT_PK(2,2)'      83  211  76  212  205  68
+CONVEX 69    'GT_PK(2,2)'      83  213  77  212  214  68
+CONVEX 70    'GT_PK(2,2)'      83  215  82  216  217  4
+CONVEX 71    'GT_PK(2,2)'      83  211  76  215  138  82
+CONVEX 72    'GT_PK(2,2)'      83  218  84  216  219  4
+CONVEX 73    'GT_PK(2,2)'      83  213  77  218  140  84
+CONVEX 74    'GT_PK(2,2)'      69  220  60  221  177  70
+CONVEX 75    'GT_PK(2,2)'      69  220  60  222  187  59
+CONVEX 76    'GT_PK(2,2)'      69  223  78  221  152  70
+CONVEX 77    'GT_PK(2,2)'      69  223  78  224  150  77
+CONVEX 78    'GT_PK(2,2)'      69  225  68  222  112  59
+CONVEX 79    'GT_PK(2,2)'      69  224  77  225  214  68
+CONVEX 80    'GT_PK(2,2)'      45  226  36  227  163  2
+CONVEX 81    'GT_PK(2,2)'      45  228  54  227  229  2
+CONVEX 82    'GT_PK(2,2)'      45  230  55  228  145  54
+CONVEX 83    'GT_PK(2,2)'      40  231  30  232  233  31
+CONVEX 84    'GT_PK(2,2)'      40  234  41  232  127  31
+CONVEX 85    'GT_PK(2,2)'      40  235  50  236  237  1
+CONVEX 86    'GT_PK(2,2)'      40  235  50  234  185  41
+CONVEX 87    'GT_PK(2,2)'      39  238  30  239  240  29
+CONVEX 88    'GT_PK(2,2)'      39  241  38  239  242  29
+CONVEX 89    'GT_PK(2,2)'      39  243  40  244  236  1
+CONVEX 90    'GT_PK(2,2)'      39  243  40  238  231  30
+CONVEX 91    'GT_PK(2,2)'      22  245  31  246  122  23
+CONVEX 92    'GT_PK(2,2)'      22  247  30  245  233  31
+CONVEX 93    'GT_PK(2,2)'      22  248  15  246  192  23
+CONVEX 94    'GT_PK(2,2)'      37  249  38  250  251  47
+CONVEX 95    'GT_PK(2,2)'      37  252  36  253  114  27
+CONVEX 96    'GT_PK(2,2)'      12  254  20  255  256  19
+CONVEX 97    'GT_PK(2,2)'      12  257  11  255  106  19
+CONVEX 98    'GT_PK(2,2)'      12  257  11  258  259  5
+CONVEX 99    'GT_PK(2,2)'      12  260  6  258  261  5
+CONVEX 100    'GT_PK(2,2)'      14  262  22  263  248  15
+CONVEX 101    'GT_PK(2,2)'      14  264  8  265  266  0
+CONVEX 102    'GT_PK(2,2)'      14  263  15  264  199  8
+CONVEX 103    'GT_PK(2,2)'      21  267  30  268  240  29
+CONVEX 104    'GT_PK(2,2)'      21  269  20  268  270  29
+CONVEX 105    'GT_PK(2,2)'      21  271  22  267  247  30
+CONVEX 106    'GT_PK(2,2)'      21  272  14  271  262  22
+CONVEX 107    'GT_PK(2,2)'      56  273  57  274  275  47
+CONVEX 108    'GT_PK(2,2)'      56  273  57  276  208  66
+CONVEX 109    'GT_PK(2,2)'      56  277  65  276  97  66
+CONVEX 110    'GT_PK(2,2)'      56  278  55  277  143  65
+CONVEX 111    'GT_PK(2,2)'      48  279  57  280  275  47
+CONVEX 112    'GT_PK(2,2)'      48  281  39  282  244  1
+CONVEX 113    'GT_PK(2,2)'      48  279  57  283  209  58
+CONVEX 114    'GT_PK(2,2)'      48  284  38  280  251  47
+CONVEX 115    'GT_PK(2,2)'      48  281  39  284  241  38
+CONVEX 116    'GT_PK(2,2)'      46  285  37  286  250  47
+CONVEX 117    'GT_PK(2,2)'      46  287  56  286  274  47
+CONVEX 118    'GT_PK(2,2)'      46  288  45  289  226  36
+CONVEX 119    'GT_PK(2,2)'      46  285  37  289  252  36
+CONVEX 120    'GT_PK(2,2)'      46  288  45  290  230  55
+CONVEX 121    'GT_PK(2,2)'      46  287  56  290  278  55
+CONVEX 122    'GT_PK(2,2)'      28  291  38  292  242  29
+CONVEX 123    'GT_PK(2,2)'      28  293  37  291  249  38
+CONVEX 124    'GT_PK(2,2)'      28  294  20  292  270  29
+CONVEX 125    'GT_PK(2,2)'      28  294  20  295  256  19
+CONVEX 126    'GT_PK(2,2)'      28  296  27  295  88  19
+CONVEX 127    'GT_PK(2,2)'      28  293  37  296  253  27
+CONVEX 128    'GT_PK(2,2)'      7  297  14  298  265  0
+CONVEX 129    'GT_PK(2,2)'      13  299  21  300  272  14
+CONVEX 130    'GT_PK(2,2)'      13  301  12  302  260  6
+CONVEX 131    'GT_PK(2,2)'      13  301  12  303  254  20
+CONVEX 132    'GT_PK(2,2)'      13  299  21  303  269  20
+CONVEX 133    'GT_PK(2,2)'      13  304  7  302  305  6
+CONVEX 134    'GT_PK(2,2)'      13  304  7  300  297  14
+CONVEX 135    'GT_PK(2,2)'      49  306  48  307  282  1
+CONVEX 136    'GT_PK(2,2)'      49  306  48  308  283  58
+CONVEX 137    'GT_PK(2,2)'      49  308  58  309  111  59
+CONVEX 138    'GT_PK(2,2)'      49  310  50  307  237  1
+CONVEX 139    'GT_PK(2,2)'      49  310  50  309  186  59
 
 END MESH STRUCTURE DESCRIPTION
diff --git a/tests/meshes/disc_P2_h3.mesh b/tests/meshes/disc_P2_h6.mesh
old mode 100755
new mode 100644
similarity index 100%
rename from tests/meshes/disc_P2_h3.mesh
rename to tests/meshes/disc_P2_h6.mesh
diff --git a/tests/meshes/disc_P2_h4.mesh b/tests/meshes/disc_P2_h8.mesh
old mode 100755
new mode 100644
similarity index 100%
copy from tests/meshes/disc_P2_h4.mesh
copy to tests/meshes/disc_P2_h8.mesh
diff --git a/tests/meshes/disc_with_a_hole.mesh b/tests/meshes/disc_with_a_hole.mesh
new file mode 100644
index 0000000..4ad9757
--- /dev/null
+++ b/tests/meshes/disc_with_a_hole.mesh
@@ -0,0 +1,7512 @@
+% GETFEM MESH FILE 
+% GETFEM VERSION 4.2
+
+
+
+BEGIN POINTS LIST
+
+  POINT  0  -0.1831400501705945  1.085
+  POINT  1  -0.1221366915211338  1.085
+  POINT  2  -0.06094447842118987  1.085
+  POINT  3  -4.860124806940584e-07  1.085
+  POINT  4  0.06094347858902648  1.085
+  POINT  5  0.1221355988213509  1.085
+  POINT  6  0.1831387786308221  1.085
+  POINT  7  -0.1831400501705936  1.115
+  POINT  8  -0.1221366915211331  1.115
+  POINT  9  -0.06094447842118909  1.115
+  POINT  10  -4.860124798811236e-07  1.115
+  POINT  11  0.06094347858902724  1.115
+  POINT  12  0.1221355988213518  1.115
+  POINT  13  0.1831387786308231  1.115
+  POINT  14  -0.9579485469910241  1.1
+  POINT  15  -0.9536121630153567  1.018251607755177
+  POINT  16  -0.9536121630153566  1.181748392244824
+  POINT  17  -0.9468729466281971  0.9252444492003281
+  POINT  18  -0.9468729466281977  1.274755550799672
+  POINT  19  -0.93263521502612  1.141923963122789
+  POINT  20  -0.9326352150261203  1.058076036877212
+  POINT  21  -0.9384580616517235  0.9718816511266565
+  POINT  22  -0.9384580616517229  1.228118348873344
+  POINT  23  -0.9304268511318274  0.8328953827914626
+  POINT  24  -0.9304268511318392  1.367104617208541
+  POINT  25  -0.9269182185738766  0.8790968356683193
+  POINT  26  -0.9269182185738729  1.320903164331681
+  POINT  27  -0.9062100436549875  1.1
+  POINT  28  -0.9060117823578904  1.184731690469689
+  POINT  29  -0.9060117823578909  1.015268309530311
+  POINT  30  -0.9116750129830854  0.7953791674260838
+  POINT  31  -0.9116750129830821  1.404620832573915
+  POINT  32  -0.9014153706221945  0.9263928027184778
+  POINT  33  -0.9014153706221937  1.273607197281522
+  POINT  34  -0.8913382910627831  0.7515168232776571
+  POINT  35  -0.8913382910627824  1.448483176722343
+  POINT  36  -0.8910241196205029  0.8376417009322997
+  POINT  37  -0.8910241196204957  1.362358299067698
+  POINT  38  -0.8799438187176032  1.142390923174468
+  POINT  39  -0.8799438187176035  1.057609076825532
+  POINT  40  -0.8787882002865459  0.9711580252863642
+  POINT  41  -0.8787882002865449  1.228841974713636
+  POINT  42  -0.8724782356643878  0.8824374427521267
+  POINT  43  -0.8724782356643878  1.317562557247874
+  POINT  44  -0.8699121486478247  0.7067856954716143
+  POINT  45  -0.8699121486478235  1.493214304528386
+  POINT  46  -0.8667175752970341  0.79550709009108
+  POINT  47  -0.8667175752970344  1.404492909908921
+  POINT  48  -0.8540354674354467  1.1
+  POINT  49  -0.8531328775677696  1.01474633216935
+  POINT  50  -0.8531328775677687  1.18525366783065
+  POINT  51  -0.8472207301893622  1.537648799477751
+  POINT  52  -0.8472207301893637  0.6623512005222491
+  POINT  53  -0.8498584036833633  0.9274188286182075
+  POINT  54  -0.8498584036833616  1.272581171381792
+  POINT  55  -0.8435832968746951  0.7519064816213191
+  POINT  56  -0.8435832968746929  1.448093518378681
+  POINT  57  -0.8443903506489219  0.8396677111162839
+  POINT  58  -0.8443903506489211  1.360332288883716
+  POINT  59  -0.8276864754909862  1.057710784930937
+  POINT  60  -0.8276864754909858  1.142289215069063
+  POINT  61  -0.8232614921768798  0.6185477829702379
+  POINT  62  -0.8232614921768779  1.581452217029762
+  POINT  63  -0.8258047515447828  0.9716218656801762
+  POINT  64  -0.8258047515447814  1.228378134319824
+  POINT  65  -0.8221449469150279  0.8842854910087741
+  POINT  66  -0.8221449469150255  1.315714508991226
+  POINT  67  -0.8203126522485878  1.492170870380266
+  POINT  68  -0.8203126522485906  0.7078291296197341
+  POINT  69  -0.8190558696042978  0.7966532151011669
+  POINT  70  -0.8190558696042948  1.403346784898833
+  POINT  71  -0.7983221854253684  0.5755453437180023
+  POINT  72  -0.7983221854253664  1.624454656281997
+  POINT  73  -0.8028892693828614  1.1
+  POINT  74  -0.8005634868146716  1.015300169238529
+  POINT  75  -0.8005634868146705  1.184699830761471
+  POINT  76  -0.7986676233827895  0.9286676329158237
+  POINT  77  -0.7986676233827874  1.271332367084176
+  POINT  78  -0.7965130016801985  1.536259216264676
+  POINT  79  -0.7965130016802018  0.663740783735324
+  POINT  80  -0.7945869550868088  1.446928347139331
+  POINT  81  -0.7945869550868121  0.7530716528606685
+  POINT  82  -0.7955040160159019  0.8414284328141315
+  POINT  83  -0.795504016015899  1.358571567185868
+  POINT  84  -0.7734357367667966  0.5337815592089615
+  POINT  85  -0.7734357367667943  1.666218440791038
+  POINT  86  -0.7722740567141997  0.619814647715211
+  POINT  87  -0.7722740567141955  1.580185352284789
+  POINT  88  -0.7739963348175709  0.9724986644189636
+  POINT  89  -0.7739963348175691  1.227501335581036
+  POINT  90  -0.7755505331466257  1.058796084019805
+  POINT  91  -0.7755505331466251  1.141203915980195
+  POINT  92  -0.7720240529066452  0.8860820882134751
+  POINT  93  -0.7720240529066424  1.313917911786525
+  POINT  94  -0.7702507239895221  1.490907010219453
+  POINT  95  -0.7702507239895265  0.709092989780547
+  POINT  96  -0.76982298456209  0.7982959211876208
+  POINT  97  -0.7698229845620863  1.401704078812379
+  POINT  98  -0.7521378046271575  1.703497142396713
+  POINT  99  -0.7521378046271593  0.4965028576032874
+  POINT  100  -0.7480942399279058  1.624037848954842
+  POINT  101  -0.7480942399279102  0.575962151045158
+  POINT  102  -0.7482441579594751  0.9300877171211201
+  POINT  103  -0.7482441579594726  1.26991228287888
+  POINT  104  -0.7458669675392005  1.535145698505869
+  POINT  105  -0.7458669675392061  0.6648543014941309
+  POINT  106  -0.756718824632699  1.1
+  POINT  107  -0.7446340139491506  0.7546417390354253
+  POINT  108  -0.7446340139491456  1.445358260964575
+  POINT  109  -0.7456625525131874  0.8435263090980402
+  POINT  110  -0.7456625525131837  1.356473690901959
+  POINT  111  -0.7470223347898509  1.183443029239035
+  POINT  112  -0.747022334789852  1.016556970760965
+  POINT  113  -0.7236784888240529  0.9726960144026661
+  POINT  114  -0.7236784888240511  1.227303985597334
+  POINT  115  -0.7253397751034656  0.5313369060971803
+  POINT  116  -0.7253397751034607  1.66866309390282
+  POINT  117  -0.7215559556489026  1.579684102924607
+  POINT  118  -0.7215559556489094  0.6203158970753926
+  POINT  119  -0.7219490798732888  0.8884547255052579
+  POINT  120  -0.7219490798732855  1.311545274494742
+  POINT  121  -0.7196995645808442  0.7104615311810405
+  POINT  122  -0.7196995645808377  1.489538468818959
+  POINT  123  -0.7196079367913081  0.8004234109856573
+  POINT  124  -0.719607936791303  1.399576589014342
+  POINT  125  -0.7091611426460883  1.723937819091995
+  POINT  126  -0.7091611426460922  0.4760621809080049
+  POINT  127  -0.7151235525104215  1.067169930334382
+  POINT  128  -0.7151235525104211  1.132830069665618
+  POINT  129  -0.69921123536385  0.9320870848205438
+  POINT  130  -0.6992112353638473  1.267912915179456
+  POINT  131  -0.6976773356884957  0.5750576230876238
+  POINT  132  -0.6976773356884879  1.624942376912377
+  POINT  133  -0.6949633474332183  0.6657840944266995
+  POINT  134  -0.6949633474332102  1.5342159055733
+  POINT  135  -0.6939282952573032  0.7565353044660686
+  POINT  136  -0.6939282952572965  1.443464695533931
+  POINT  137  -0.6951276108726241  0.8464216934386539
+  POINT  138  -0.6951276108726195  1.353578306561346
+  POINT  139  -0.6922036434212111  1.18632051565429
+  POINT  140  -0.6922036434212123  1.01367948434571
+  POINT  141  -0.6753210546869803  1.769388371883719
+  POINT  142  -0.675321054686985  0.4306116281162803
+  POINT  143  -0.6745567877543186  0.5277491450628998
+  POINT  144  -0.6745567877543097  1.6722508549371
+  POINT  145  -0.6799892910827381  0.9707238072725279
+  POINT  146  -0.6799892910827361  1.229276192727472
+  POINT  147  -0.6704619845507307  0.620537843127872
+  POINT  148  -0.6704619845507207  1.579462156872128
+  POINT  149  -0.6686224004883864  0.7119206060201243
+  POINT  150  -0.6686224004883776  1.488079393979875
+  POINT  151  -0.6714759484894501  0.8925653889507473
+  POINT  152  -0.6714759484894464  1.307434611049253
+  POINT  153  -0.6672196581697956  1.1
+  POINT  154  -0.6685479877883514  0.8031319063219492
+  POINT  155  -0.668547987788345  1.39686809367805
+  POINT  156  -0.6496004465471991  1.719899253762834
+  POINT  157  -0.6496004465472092  0.4801007462371655
+  POINT  158  -0.6445595490931657  1.808268187714327
+  POINT  159  -0.6445595490931704  0.3917318122856721
+  POINT  160  -0.6504593917898083  1.052904489962882
+  POINT  161  -0.6504593917898077  1.147095510037118
+  POINT  162  -0.6461566239124039  1.625487484166899
+  POINT  163  -0.6461566239124161  0.5745125158331007
+  POINT  164  -0.6497255195828517  1.260735836481562
+  POINT  165  -0.6497255195828544  0.939264163518438
+  POINT  166  -0.6436333246528698  0.666692780789526
+  POINT  167  -0.6436333246528585  1.533307219210474
+  POINT  168  -0.6425287818496805  0.7586960779899323
+  POINT  169  -0.6425287818496718  1.441303922010067
+  POINT  170  -0.6435876776757695  0.8504664172361277
+  POINT  171  -0.643587677675764  1.349533582763872
+  POINT  172  -0.634100201211382  0.9960643941018079
+  POINT  173  -0.6341002012113808  1.203935605898192
+  POINT  174  -0.6217896878708183  1.764252933581088
+  POINT  175  -0.621789687870829  0.4357470664189113
+  POINT  176  -0.6215069401240921  0.5279530044066069
+  POINT  177  -0.6215069401240777  1.672046995593393
+  POINT  178  -0.619040503528354  1.841814462459029
+  POINT  179  -0.6190405035283585  0.3581855375409709
+  POINT  180  -0.618843615567465  0.6209351862433928
+  POINT  181  -0.6188436155674508  1.579064813756607
+  POINT  182  -0.617043598407388  0.7134321911740658
+  POINT  183  -0.6170435984073763  1.486567808825934
+  POINT  184  -0.6193474858382423  0.8990704639437634
+  POINT  185  -0.6193474858382384  1.300929536056236
+  POINT  186  -0.6165600119752158  0.8063526180627931
+  POINT  187  -0.6165600119752079  1.393647381937206
+  POINT  188  -0.5958600487122456  0.4819057105934332
+  POINT  189  -0.5958600487122292  1.718094289406567
+  POINT  190  -0.5967298688224213  0.9498401683928475
+  POINT  191  -0.5967298688224194  1.250159831607152
+  POINT  192  -0.5940252787520831  0.5747782731172082
+  POINT  193  -0.5940252787520656  1.625221726882792
+  POINT  194  -0.5954896416081709  1.806923712884393
+  POINT  195  -0.5954896416081811  0.3930762871156072
+  POINT  196  -0.5919130112536681  0.6676343194020075
+  POINT  197  -0.5919130112536528  1.532365680597992
+  POINT  198  -0.5905043018224629  0.7609227824966485
+  POINT  199  -0.5905043018224519  1.439077217503351
+  POINT  200  -0.5904786418180429  1.34444817934922
+  POINT  201  -0.5904786418180489  0.8555518206507792
+  POINT  202  -0.575127329340774  1.858033892824939
+  POINT  203  -0.5751273293407817  0.3419661071750617
+  POINT  204  -0.5688893294108635  0.5285309367958891
+  POINT  205  -0.5688893294108427  1.671469063204111
+  POINT  206  -0.5699160733827983  1.763365938000253
+  POINT  207  -0.5699160733828161  0.4366340619997466
+  POINT  208  -0.5669183449505661  0.6215112570496228
+  POINT  209  -0.5669183449505467  1.578488742950377
+  POINT  210  -0.5650891335111676  0.7148423435816584
+  POINT  211  -0.5650891335111525  1.485157656418341
+  POINT  212  -0.5638960833070213  0.9074983940941561
+  POINT  213  -0.5638960833070181  1.292501605905844
+  POINT  214  -0.5636630743979608  0.8096368805838361
+  POINT  215  -0.5636630743979515  1.390363119416164
+  POINT  216  -0.5449743599532946  1.809662886419388
+  POINT  217  -0.5449743599533131  0.3903371135806124
+  POINT  218  -0.5434229926384195  0.4824501944563475
+  POINT  219  -0.5434229926383954  1.717549805543652
+  POINT  220  -0.5430521415286259  1.895242374740083
+  POINT  221  -0.5430521415286342  0.3047576252599174
+  POINT  222  -0.5418595483133686  0.5752192949818696
+  POINT  223  -0.5418595483133447  1.624780705018131
+  POINT  224  -0.5399685050783705  0.6685031015863688
+  POINT  225  -0.5399685050783506  1.531496898413631
+  POINT  226  -0.5381012848662108  0.7627851976799476
+  POINT  227  -0.5381012848661972  1.437214802320052
+  POINT  228  -0.5355171767024853  0.8610324986397297
+  POINT  229  -0.5355171767024792  1.33896750136027
+  POINT  230  -0.5179824057448147  1.763738206807861
+  POINT  231  -0.5179824057448419  0.4362617931921388
+  POINT  232  -0.519403182715177  1.856065951290971
+  POINT  233  -0.519403182715195  0.3439340487090296
+  POINT  234  -0.5166215410729682  0.5288899566205453
+  POINT  235  -0.5166215410729396  1.671110043379455
+  POINT  236  -0.5149088578556342  0.6220593342190522
+  POINT  237  -0.514908857855609  1.577940665780948
+  POINT  238  -0.5129874226342817  0.7159109791949766
+  POINT  239  -0.5129874226342628  1.484089020805023
+  POINT  240  -0.5104959390297588  0.8118208434204569
+  POINT  241  -0.5104959390297482  1.388179156579543
+  POINT  242  -0.4965146932664501  1.909150534791506
+  POINT  243  -0.4965146932664645  0.2908494652084942
+  POINT  244  -0.4912413368669863  0.4825234201576784
+  POINT  245  -0.4912413368669525  1.717476579842322
+  POINT  246  -0.4925631063907636  1.810351297168797
+  POINT  247  -0.4925631063907935  0.3896487028312039
+  POINT  248  -0.4897752908246767  0.5755716668934836
+  POINT  249  -0.4897752908246454  1.624428333106517
+  POINT  250  -0.4879831713995912  0.6691422716770096
+  POINT  251  -0.4879831713995662  1.53085772832299
+  POINT  252  -0.4857614830075255  0.7638114089954339
+  POINT  253  -0.485761483007509  1.436188591004566
+  POINT  254  -0.4814747973003526  0.8621820437841374
+  POINT  255  -0.4814747973003471  1.337817956215863
+  POINT  256  -0.4670674080750463  1.857879821141432
+  POINT  257  -0.4670674080750777  0.3421201788585687
+  POINT  258  -0.4657746186627555  1.764003008376716
+  POINT  259  -0.4657746186627946  0.4359969916232846
+  POINT  260  -0.4645126915802672  0.5290599673893566
+  POINT  261  -0.4645126915802291  1.670940032610644
+  POINT  262  -0.4623856843938286  1.944420267015488
+  POINT  263  -0.4623856843938449  0.2555797329845126
+  POINT  264  -0.4629410966899151  0.6224391085042588
+  POINT  265  -0.462941096689883  1.577560891495741
+  POINT  266  -0.4580955715048124  0.8119278994184609
+  POINT  267  -0.4580955715048002  1.388072100581539
+  POINT  268  -0.4609766955247612  0.7165020192704445
+  POINT  269  -0.4609766955247377  1.483497980729556
+  POINT  270  -0.4401232684303554  1.904157213678314
+  POINT  271  -0.4401232684303871  0.2958427863216869
+  POINT  272  -0.4401545616500645  1.810802447177152
+  POINT  273  -0.4401545616501087  0.3891975528228482
+  POINT  274  -0.4391191521648905  1.717506584308547
+  POINT  275  -0.439119152164936  0.4824934156914535
+  POINT  276  -0.4377936415351498  0.5757681175189491
+  POINT  277  -0.4377936415351097  1.624231882481051
+  POINT  278  -0.4360909537421102  0.6694853518073688
+  POINT  279  -0.436090953742079  1.530514648192631
+  POINT  280  -0.4338103127142864  0.7640435281884114
+  POINT  281  -0.4338103127142665  1.435956471811589
+  POINT  282  -0.4302748410770543  0.8584164300184868
+  POINT  283  -0.4302748410770477  1.341583569981514
+  POINT  284  -0.4149827817557805  1.955463681139268
+  POINT  285  -0.4149827817558082  0.2445363188607328
+  POINT  286  -0.4141383485381396  1.85761728626324
+  POINT  287  -0.4141383485381885  0.3423827137367611
+  POINT  288  -0.4135741794697709  1.764161586174935
+  POINT  289  -0.4135741794698244  0.4358384138250659
+  POINT  290  -0.41251222034567  0.5291055101211619
+  POINT  291  -0.412512220345621  1.670894489878838
+  POINT  292  -0.4110790395919397  0.6226060770753183
+  POINT  293  -0.4110790395918997  1.577393922924682
+  POINT  294  -0.4091825773029129  0.7166973031402304
+  POINT  295  -0.4091825773028843  1.48330269685977
+  POINT  296  -0.4065557213228956  0.8113195233369715
+  POINT  297  -0.4065557213228809  1.388680476663029
+  POINT  298  -0.3878177241637965  1.904459667441801
+  POINT  299  -0.3878177241638489  0.2955403325582004
+  POINT  300  -0.3878105653955269  1.810873471718969
+  POINT  301  -0.3878105653955889  0.3891265282810324
+  POINT  302  -0.3870825043499591  1.717565514490002
+  POINT  303  -0.3870825043500182  0.4824344855099987
+  POINT  304  -0.3859255058922946  1.624194721717216
+  POINT  305  -0.3859255058923445  0.575805278282784
+  POINT  306  -0.3843482688640849  0.6695628310602136
+  POINT  307  -0.3843482688640468  1.530437168939787
+  POINT  308  -0.3822282887441195  0.7639980698204516
+  POINT  309  -0.3822282887440953  1.436001930179549
+  POINT  310  -0.3795651628319828  0.8578626349660576
+  POINT  311  -0.3795651628319746  1.342137365033943
+  POINT  312  -0.3799015643868359  1.987343093404322
+  POINT  313  -0.3799015643868685  0.2126569065956826
+  POINT  314  -0.3617896156133397  1.857542016936602
+  POINT  315  -0.3617896156134105  0.3424579830633995
+  POINT  316  -0.3614806854826632  1.764246791718439
+  POINT  317  -0.3614806854827337  0.4357532082815622
+  POINT  318  -0.3606197767026246  1.670944264036021
+  POINT  319  -0.360619776702686  0.52905573596398
+  POINT  320  -0.3593418972919841  0.6225776898113793
+  POINT  321  -0.3593418972919356  1.577422310188621
+  POINT  322  -0.3605276892868896  1.948840408370762
+  POINT  323  -0.3605276892869442  0.2511595916292396
+  POINT  324  -0.3575970791860329  0.7166250671087057
+  POINT  325  -0.3575970791859986  1.483374932891295
+  POINT  326  -0.3553427284982968  0.8114961487669258
+  POINT  327  -0.3553427284982786  1.388503851233074
+  POINT  328  -0.3356875125154271  1.810917973760963
+  POINT  329  -0.3356875125155104  0.3890820262390376
+  POINT  330  -0.335157048346053  1.717658196619142
+  POINT  331  -0.3351570483461277  0.482341803380859
+  POINT  332  -0.3355245735139815  1.903899610337385
+  POINT  333  -0.3355245735140612  0.2961003896626168
+  POINT  334  -0.3341723112410051  1.624293627419084
+  POINT  335  -0.3341723112410657  0.5757063725809165
+  POINT  336  -0.3327535375331993  0.6694147422614259
+  POINT  337  -0.332753537533154  1.530585257738575
+  POINT  338  -0.3375061587390842  1.994293567901896
+  POINT  339  -0.3375061587391351  0.2057064320981111
+  POINT  340  -0.3308495912553663  0.7638227447492506
+  POINT  341  -0.3308495912553371  1.43617725525075
+  POINT  342  -0.328810360056786  0.8607993531865977
+  POINT  343  -0.3288103600567755  1.339200646813402
+  POINT  344  -0.3095345464975335  1.764349243305467
+  POINT  345  -0.3095345464976234  0.4356507566945342
+  POINT  346  -0.3097191543686472  1.85753325661615
+  POINT  347  -0.3097191543687449  0.3424667433838504
+  POINT  348  -0.3088398255628163  1.671078203532153
+  POINT  349  -0.3088398255628911  0.5289217964678473
+  POINT  350  -0.3096718884392127  1.950900695336235
+  POINT  351  -0.3096718884393007  0.2490993046637691
+  POINT  352  -0.3077291497463801  0.6223864728884371
+  POINT  353  -0.3077291497463225  1.577613527111563
+  POINT  354  -0.306172683160504  0.716284198562098
+  POINT  355  -0.3061726831604634  1.483715801437903
+  POINT  356  -0.3041296240891921  0.8114748468954843
+  POINT  357  -0.3041296240891693  1.388525153104516
+  POINT  358  -0.2835874733130658  2.004440242113223
+  POINT  359  -0.2835874733131581  0.1955597578867781
+  POINT  360  -0.2772466330276022  0.8601184919549703
+  POINT  361  -0.2772466330275861  1.339881508045031
+  POINT  362  -0.2836560889267754  1.904217317085991
+  POINT  363  -0.2836560889268903  0.2957826829140113
+  POINT  364  -0.2837647736115534  1.81101623472558
+  POINT  365  -0.2837647736116612  0.3889837652744201
+  POINT  366  -0.2833575350390876  1.717804586619344
+  POINT  367  -0.2833575350391791  0.4821954133806566
+  POINT  368  -0.2825325955655086  0.5755041278804186
+  POINT  369  -0.2825325955654366  1.624495872119582
+  POINT  370  -0.2812997548474108  0.6690602390775401
+  POINT  371  -0.281299754847358  1.53093976092246
+  POINT  372  -0.2795956382422121  0.7631610738056374
+  POINT  373  -0.2795956382421773  1.436838926194363
+  POINT  374  -0.2572655922241447  1.951183962849591
+  POINT  375  -0.2572655922242799  0.2488160371504113
+  POINT  376  -0.2529349224681767  0.809865175538766
+  POINT  377  -0.2529349224681485  1.390134824461235
+  POINT  378  -0.2578829701045607  1.857651936822879
+  POINT  379  -0.2578829701046907  0.3423480631771214
+  POINT  380  -0.2577425430864999  1.764500887213571
+  POINT  381  -0.2577425430866109  0.4354991127864294
+  POINT  382  -0.2571757259716498  1.671275247462491
+  POINT  383  -0.2571757259717387  0.5287247525375093
+  POINT  384  -0.2562386854421237  0.622070131376782
+  POINT  385  -0.2562386854420569  1.577929868623218
+  POINT  386  -0.25490323827345  0.7156418326642326
+  POINT  387  -0.2549032382734029  1.484358167335768
+  POINT  388  -0.247515761905271  0.9053924999306833
+  POINT  389  -0.2475157619052596  1.294607500069318
+  POINT  390  -0.2459772544047217  2.03365599971047
+  POINT  391  -0.2459772544048423  0.1663440002895439
+  POINT  392  -0.2318788292926477  1.90419787195102
+  POINT  393  -0.2318788292928055  0.2958021280489813
+  POINT  394  -0.2258246365432377  0.8552157958428594
+  POINT  395  -0.2258246365432157  1.344784204157142
+  POINT  396  -0.2320262703182353  1.811174885016426
+  POINT  397  -0.2320262703183704  0.3888251149835743
+  POINT  398  -0.2285359905104811  0.7619592367733946
+  POINT  399  -0.2285359905104407  1.438040763226607
+  POINT  400  -0.231685286592747  1.717997160532642
+  POINT  401  -0.2316852865928559  0.4820028394673587
+  POINT  402  -0.2310029555128524  1.624763968414791
+  POINT  403  -0.2310029555129357  0.5752360315852098
+  POINT  404  -0.2299849506647595  0.6685496414543
+  POINT  405  -0.2299849506646991  1.531450358545701
+  POINT  406  -0.2292160537848134  1.994589520532671
+  POINT  407  -0.229216053784972  0.2054104794673292
+  POINT  408  -0.214514385481446  0.9447671870322673
+  POINT  409  -0.214514385481437  1.255232812967733
+  POINT  410  -0.2062484648026199  1.857802637391785
+  POINT  411  -0.2062484648027862  0.342197362608215
+  POINT  412  -0.2060889900021632  1.764699478117377
+  POINT  413  -0.2060889900022961  0.4353005218826227
+  POINT  414  -0.2021987051369457  0.8075707074959839
+  POINT  415  -0.2021987051369123  1.392429292504017
+  POINT  416  -0.2056203462366304  1.671508253837725
+  POINT  417  -0.2056203462367331  0.528491746162276
+  POINT  418  -0.2038013626451649  0.7148206591846478
+  POINT  419  -0.2038013626451117  1.485179340815353
+  POINT  420  -0.2048618944080998  0.6216846131170866
+  POINT  421  -0.204861894408024  1.578315386882914
+  POINT  422  -0.1984570533138456  0.8968959470979802
+  POINT  423  -0.1984570533138287  1.303104052902021
+  POINT  424  -0.2057008646608839  1.950035935258586
+  POINT  425  -0.2057008646610764  0.2499640647414151
+  POINT  426  -0.2042883871958971  2.036634636264992
+  POINT  427  -0.2042883871960733  0.1633653637350263
+  POINT  428  -0.1804292192291089  1.811398186562769
+  POINT  429  -0.1804292192292725  0.3886018134372312
+  POINT  430  -0.1801183211920823  1.718217299855282
+  POINT  431  -0.180118321192208  0.4817827001447186
+  POINT  432  -0.1795732127989675  0.5749422833728902
+  POINT  433  -0.1795732127988737  1.625057716627111
+  POINT  434  -0.1787913695417206  0.6679896324594679
+  POINT  435  -0.1787913695416534  1.532010367540533
+  POINT  436  -0.1777306308467431  0.7606928914972395
+  POINT  437  -0.1777306308466975  1.439307108502762
+  POINT  438  -0.1761150662600552  0.8517257472138611
+  POINT  439  -0.1761150662600285  1.34827425278614
+  POINT  440  -0.1804933442862886  1.904295770672358
+  POINT  441  -0.1804933442864951  0.2957042293276425
+  POINT  442  -0.1802856585414381  1.995150774889356
+  POINT  443  -0.180285658541672  0.2048492251106524
+  POINT  444  -0.1725727862162227  0.9828520564076326
+  POINT  445  -0.1725727862162142  1.217147943592367
+  POINT  446  -0.1735564404921586  0.9312606089659764
+  POINT  447  -0.1735564404921447  1.268739391034023
+  POINT  448  -0.1541526126400332  0.5282518492809056
+  POINT  449  -0.1541526126399179  1.671748150719095
+  POINT  450  -0.154530131391553  1.764931914853332
+  POINT  451  -0.1545301313917068  0.4350680851466682
+  POINT  452  -0.1535791871825837  0.621298306631623
+  POINT  453  -0.1535791871825  1.578701693368378
+  POINT  454  -0.1528325181370678  0.7140498653340365
+  POINT  455  -0.1528325181370093  1.485950134665964
+  POINT  456  -0.1547717476144791  1.858106431657039
+  POINT  457  -0.154771747614683  0.3418935683429608
+  POINT  458  -0.1519150991039568  0.8059220132079378
+  POINT  459  -0.151915099103919  1.394077986792063
+  POINT  460  -0.1513610431229057  0.894028060148353
+  POINT  461  -0.1513610431228849  1.305971939851647
+  POINT  462  -0.147804818839815  1.036855176374575
+  POINT  463  -0.1478048188398104  1.163144823625425
+  POINT  464  -0.1550991949402817  1.95069351523123
+  POINT  465  -0.1550991949405417  0.2493064847687724
+  POINT  466  -0.1569764140553453  2.04144617697824
+  POINT  467  -0.156976414055625  0.1585538230217833
+  POINT  468  -0.1309751068178905  0.9389040867766143
+  POINT  469  -0.1309751068178742  1.261095913223385
+  POINT  470  -0.1282208626306776  0.5746657924978447
+  POINT  471  -0.1282208626305747  1.625334207502156
+  POINT  472  -0.1286218935034544  0.4815622592137688
+  POINT  473  -0.1286218935033138  1.718437740786232
+  POINT  474  -0.127680179313051  0.6674959411266428
+  POINT  475  -0.1276801793129778  1.532504058873358
+  POINT  476  -0.1289027838811274  1.81168728507047
+  POINT  477  -0.1289027838813178  0.3883127149295301
+  POINT  478  -0.1270557007486456  0.7597738334003341
+  POINT  479  -0.1270557007485957  1.440226166599667
+  POINT  480  -0.1267470095238308  0.8504728314998437
+  POINT  481  -0.1267470095238004  1.349527168500157
+  POINT  482  -0.1292722592925101  1.904911721181042
+  POINT  483  -0.1292722592927681  0.2950882788189579
+  POINT  484  -0.1307440516123454  1.997627406610912
+  POINT  485  -0.1307440516126796  0.2023725933890967
+  POINT  486  -0.112279811851176  0.9877401836834668
+  POINT  487  -0.1122798118511645  1.212259816316533
+  POINT  488  -0.1028966861265167  0.8953257112251324
+  POINT  489  -0.1028966861264929  1.304674288774867
+  POINT  490  -0.1027417013820717  0.5280384155148649
+  POINT  491  -0.1027417013819461  1.671961584485136
+  POINT  492  -0.1023601528280935  0.6209735736280839
+  POINT  493  -0.1023601528280035  1.579026426371916
+  POINT  494  -0.1030161123983802  0.4348339482304783
+  POINT  495  -0.1030161123982087  1.765166051769522
+  POINT  496  -0.1019126566536072  0.7134888804715439
+  POINT  497  -0.1019126566535444  1.486511119528457
+  POINT  498  -0.1081932122028892  2.046052095033941
+  POINT  499  -0.1081932122033292  0.1539479049660801
+  POINT  500  -0.1032984807255899  1.858556510106172
+  POINT  501  -0.1032984807258285  0.3414434898938275
+  POINT  502  -0.1015974267283907  0.8051584060324877
+  POINT  503  -0.1015974267283494  1.394841593967513
+  POINT  504  -0.1042203088923835  1.952134912512847
+  POINT  505  -0.1042203088927207  0.2478650874871551
+  POINT  506  -0.08795858082150917  1.036808160914416
+  POINT  507  -0.08795858082150269  1.163191839085584
+  POINT  508  -0.08005102713617487  0.9417084396066751
+  POINT  509  -0.08005102713615674  1.258291560393324
+  POINT  510  -0.07691463820892808  0.5744484002646579
+  POINT  511  -0.07691463820881841  1.625551599735342
+  POINT  512  -0.07716046516680464  0.4813763589883581
+  POINT  513  -0.07716046516665287  1.718623641011642
+  POINT  514  -0.07660465823349831  0.6671435604336916
+  POINT  515  -0.07660465823342097  1.532856439566309
+  POINT  516  -0.07736748909008549  0.38801960080118
+  POINT  517  -0.07736748908987366  1.81198039919882
+  POINT  518  -0.07661903634428543  0.8504747388397425
+  POINT  519  -0.07661903634425246  1.349525261160258
+  POINT  520  -0.07632120107526325  1.440726303194311
+  POINT  521  -0.07632120107531613  0.7592736968056897
+  POINT  522  -0.07781263600537069  1.905722361794162
+  POINT  523  -0.07781263600567627  0.2942776382058379
+  POINT  524  -0.08004363613137362  2.000383500313594
+  POINT  525  -0.08004363613183517  0.1996164996864095
+  POINT  526  -0.0559999113467252  0.9893277891269358
+  POINT  527  -0.05599991134671244  1.210672210873064
+  POINT  528  -0.05788507663100856  2.050160025819993
+  POINT  529  -0.05788507663169315  0.1498399741800107
+  POINT  530  -0.05198335124933791  0.8962396156636803
+  POINT  531  -0.05198335124931239  1.30376038433632
+  POINT  532  -0.05135874934970781  0.5278871653211805
+  POINT  533  -0.05135874934957552  1.67211283467882
+  POINT  534  -0.05117150950945746  0.6207582375488547
+  POINT  535  -0.05117150950936337  1.579241762451146
+  POINT  536  -0.0515046804156326  0.4346511272408036
+  POINT  537  -0.05150468041544897  1.765348872759197
+  POINT  538  -0.05097073817771281  0.7131714239874237
+  POINT  539  -0.05097073817764739  1.486828576012577
+  POINT  540  -0.05093445858608758  1.395070917976774
+  POINT  541  -0.05093445858613099  0.8049290820232267
+  POINT  542  -0.0516959102662103  0.3410315293615078
+  POINT  543  -0.05169591026594614  1.858968470638492
+  POINT  544  -0.05250263262737111  1.953562362789113
+  POINT  545  -0.05250263262777843  0.2464376372108871
+  POINT  546  -0.02923843550413714  1.037189576765915
+  POINT  547  -0.02923843550413003  1.162810423234085
+  POINT  548  -0.02684567612083516  0.9427237096296219
+  POINT  549  -0.02684567612081612  1.257276290370378
+  POINT  550  -0.0256290642485476  0.5743275888022862
+  POINT  551  -0.02562906424843439  1.625672411197714
+  POINT  552  -0.02570927719867766  0.4812664935568532
+  POINT  553  -0.02570927719851984  1.718733506443147
+  POINT  554  -0.02553130176181111  0.6669630951720619
+  POINT  555  -0.02553130176173156  1.533036904827938
+  POINT  556  -0.02564107701666078  0.8506292219506194
+  POINT  557  -0.02564107701662644  1.34937077804938
+  POINT  558  -0.02578274546385875  0.3878300199219967
+  POINT  559  -0.02578274546363475  1.812169980078004
+  POINT  560  -0.02545725541026908  1.440924035204501
+  POINT  561  -0.02545725541032354  0.7590759647954988
+  POINT  562  -0.02597533670440194  0.2937075616122788
+  POINT  563  -0.02597533670406646  1.906292438387721
+  POINT  564  -0.02715752861408654  2.00283812650318
+  POINT  565  -0.02715752861466844  0.1971618734968165
+  POINT  566  0.0001060566618052758  2.056464602496978
+  POINT  567  0.0001060566607955944  0.1435353975030218
+  POINT  568  4.498954657408062e-05  1.954195654033885
+  POINT  569  4.498954613619913e-05  0.2458043459661152
+  POINT  570  1.301074709369493e-05  0.5278316963996699
+  POINT  571  1.301074722832493e-05  1.67216830360033
+  POINT  572  1.853005188068379e-05  0.4345804987277953
+  POINT  573  1.853005206862521e-05  1.765419501272205
+  POINT  574  9.029618820962205e-06  0.6206829100622077
+  POINT  575  9.029618916473857e-06  1.579317089937792
+  POINT  576  2.755002613394829e-05  0.3408645880775799
+  POINT  577  2.755002640766755e-05  1.85913541192242
+  POINT  578  6.117981920893762e-06  0.7130709894837995
+  POINT  579  6.117981987239091e-06  1.486929010516201
+  POINT  580  3.927235068396062e-06  0.8048899804697156
+  POINT  581  3.927235112537805e-06  1.395110019530284
+  POINT  582  2.131519148037421e-06  0.8965385089999506
+  POINT  583  2.131519174138948e-06  1.303461491000049
+  POINT  584  8.073892274146564e-07  0.9897637009991882
+  POINT  585  8.073892405002767e-07  1.210236299000812
+  POINT  586  0.02727829340400103  2.002838877420526
+  POINT  587  0.02727829340341847  0.1971611225794771
+  POINT  588  0.02604353488916887  0.2937073833946612
+  POINT  589  0.0260435348895045  1.906292616605339
+  POINT  590  0.02546714582459855  1.440924077721913
+  POINT  591  0.02546714582454408  0.7590759222780874
+  POINT  592  0.02582735778321789  0.3878298550693518
+  POINT  593  0.02582735778344194  1.812170144930649
+  POINT  594  0.02564698863023528  0.8506291916172056
+  POINT  595  0.02564698863026962  1.349370808382794
+  POINT  596  0.02554615920114567  0.6669630262519477
+  POINT  597  0.02554615920122523  1.533036973748052
+  POINT  598  0.02574006902144038  0.48126636691
+  POINT  599  0.02574006902159822  1.71873363309
+  POINT  600  0.02565070317739629  0.5743274990655421
+  POINT  601  0.0256507031775095  1.625672500934458
+  POINT  602  0.02684851501042848  0.9427236954490001
+  POINT  603  0.0268485150104475  1.257276304551
+  POINT  604  0.02923879114824334  1.03718958958726
+  POINT  605  0.02923879114825042  1.162810410412739
+  POINT  606  0.0525861270216425  1.953562690093548
+  POINT  607  0.05258612702123463  0.2464373099064527
+  POINT  608  0.05174897302004708  0.3410311812195033
+  POINT  609  0.0517489730203114  1.858968818780497
+  POINT  610  0.05094217170570704  0.8049290195242967
+  POINT  611  0.05094217170575045  1.395070980475703
+  POINT  612  0.05098278126367017  0.7131713123080727
+  POINT  613  0.05098278126373558  1.486828687691927
+  POINT  614  0.0515408144742448  0.434650835259082
+  POINT  615  0.05154081447442849  1.765349164740918
+  POINT  616  0.05118926474222068  0.6207580769387208
+  POINT  617  0.05118926474231477  1.579241923061279
+  POINT  618  0.05138426530563364  0.5278869551172036
+  POINT  619  0.05138426530576595  1.672113044882796
+  POINT  620  0.05198751576055614  0.8962395638261084
+  POINT  621  0.05198751576058167  1.303760436173892
+  POINT  622  0.05802794017971325  2.05015957752752
+  POINT  623  0.05802794017902615  0.1498404224724769
+  POINT  624  0.05600147421400192  0.9893278020497333
+  POINT  625  0.05600147421401467  1.210672197950267
+  POINT  626  0.08013870529564407  2.000383166832803
+  POINT  627  0.08013870529518136  0.1996168331671935
+  POINT  628  0.07787444443800853  1.905722818218862
+  POINT  629  0.07787444443770257  0.2942771817811382
+  POINT  630  0.07633077349412344  0.7592735790435056
+  POINT  631  0.0763307734941763  1.440726420956494
+  POINT  632  0.07662470108458261  0.8504746639849161
+  POINT  633  0.07662470108461558  1.349525336015084
+  POINT  634  0.07740948908851965  0.3880191176644888
+  POINT  635  0.07740948908873163  1.811980882335512
+  POINT  636  0.07661904253835244  0.6671433511099205
+  POINT  637  0.07661904253842976  1.532856648890079
+  POINT  638  0.07718995146307245  0.4813759790234425
+  POINT  639  0.07718995146322427  1.718624020976558
+  POINT  640  0.07693550811663503  0.5744481243242622
+  POINT  641  0.07693550811674467  1.625551875675737
+  POINT  642  0.080053719905557  0.9417083984252431
+  POINT  643  0.08005371990557508  1.258291601574757
+  POINT  644  0.08795884128619492  1.036808212099732
+  POINT  645  0.08795884128620145  1.163191787900268
+  POINT  646  0.1042887841859397  1.952135097176459
+  POINT  647  0.1042887841856019  0.2478649028235401
+  POINT  648  0.1016047249671883  0.8051583110144459
+  POINT  649  0.1016047249672295  1.394841688985554
+  POINT  650  0.1033460524918481  1.85855716785852
+  POINT  651  0.1033460524916093  0.3414428321414809
+  POINT  652  0.1082836431672455  2.04604815653973
+  POINT  653  0.108283643166804  0.1539518434602488
+  POINT  654  0.1019241429643946  0.7134886607512265
+  POINT  655  0.1019241429644573  1.486511339248773
+  POINT  656  0.1030496430262543  0.4348333667996823
+  POINT  657  0.103049643026426  1.765166633200318
+  POINT  658  0.1023770323556856  0.6209732407916818
+  POINT  659  0.1023770323557756  1.579026759208318
+  POINT  660  0.1027657653997885  0.5280379886401907
+  POINT  661  0.1027657653999141  1.671962011359809
+  POINT  662  0.1029005408761629  1.30467437038148
+  POINT  663  0.1029005408761392  0.8953256296185208
+  POINT  664  0.1122811996605864  0.98774023011387
+  POINT  665  0.1122811996605979  1.21225976988613
+  POINT  666  0.1308118172111283  1.997626195609268
+  POINT  667  0.1308118172107931  0.2023738043907235
+  POINT  668  0.1293238622289973  1.904912409383023
+  POINT  669  0.1293238622287388  0.2950875906169775
+  POINT  670  0.1267521888405835  0.8504727705070667
+  POINT  671  0.1267521888406139  1.349527229492933
+  POINT  672  0.1270646659059979  0.7597736587462834
+  POINT  673  0.1270646659060478  1.440226341253716
+  POINT  674  0.1289401647492597  1.811688059625802
+  POINT  675  0.1289401647490691  0.3883119403741986
+  POINT  676  0.1276936700118202  0.6674955797526303
+  POINT  677  0.1276936700118933  1.532504420247369
+  POINT  678  0.1286489580214782  0.4815616303842095
+  POINT  679  0.1286489580216189  1.718438369615791
+  POINT  680  0.1282402874798554  0.5746653121548623
+  POINT  681  0.1282402874799583  1.625334687845137
+  POINT  682  0.1309774981495956  0.9389040214840099
+  POINT  683  0.1309774981496117  1.261095978515991
+  POINT  684  0.1570324277787871  2.041441984565794
+  POINT  685  0.1570324277785065  0.1585580154341836
+  POINT  686  0.1551511027361098  1.950693882207201
+  POINT  687  0.1551511027358492  0.2493061177927973
+  POINT  688  0.1478048498553272  1.036855351646321
+  POINT  689  0.1478048498553319  1.163144648353679
+  POINT  690  0.1513643897070269  0.894028043714827
+  POINT  691  0.1513643897070477  1.305971956285173
+  POINT  692  0.151921746522442  0.8059219283201078
+  POINT  693  0.1519217465224798  1.394078071679892
+  POINT  694  0.1548118272034952  1.858107350439874
+  POINT  695  0.1548118272032912  0.341892649560127
+  POINT  696  0.1528431373618925  0.7140495304301574
+  POINT  697  0.152843137361951  1.485950469569842
+  POINT  698  0.1535947148231471  0.6212977775285243
+  POINT  699  0.1535947148232308  1.578702222471475
+  POINT  700  0.1545598185243301  1.76493276556504
+  POINT  701  0.1545598185241761  0.4350672344349603
+  POINT  702  0.1541744579288568  0.5282511923556599
+  POINT  703  0.1541744579289723  1.67174880764434
+  POINT  704  0.1735585105362263  0.9312606683708957
+  POINT  705  0.1735585105362404  1.268739331629105
+  POINT  706  0.1725737560216426  0.9828522181549038
+  POINT  707  0.172573756021651  1.217147781845097
+  POINT  708  0.1803318546001305  1.9951500332343
+  POINT  709  0.1803318545998961  0.2048499667656928
+  POINT  710  0.1805338250628097  1.904296726416062
+  POINT  711  0.1805338250626029  0.2957032735839382
+  POINT  712  0.1761195766067141  1.348274207132526
+  POINT  713  0.1761195766066875  0.8517257928674726
+  POINT  714  0.1777387496738202  0.7606926538605064
+  POINT  715  0.1777387496738658  1.439307346139493
+  POINT  716  0.1788036310025682  0.6679890911690252
+  POINT  717  0.1788036310026355  1.532010908830974
+  POINT  718  0.1795906730602023  0.5749415701841191
+  POINT  719  0.1795906730602962  1.62505842981588
+  POINT  720  0.1801421650649189  1.718218171128954
+  POINT  721  0.180142165064793  0.4817818288710459
+  POINT  722  0.1804608063993886  1.81139922037779
+  POINT  723  0.1804608063992247  0.3886007796222101
+  POINT  724  0.204322134012417  2.036631688233844
+  POINT  725  0.2043221340122403  0.1633683117661385
+  POINT  726  0.2057382000675267  1.950036813781466
+  POINT  727  0.2057382000673339  0.2499631862185334
+  POINT  728  0.1984597452753919  0.8968961790648596
+  POINT  729  0.1984597452754089  1.303103820935139
+  POINT  730  0.2048757187458903  1.578316149334288
+  POINT  731  0.2048757187458145  0.6216838506657113
+  POINT  732  0.2038108733764408  0.714820174631232
+  POINT  733  0.203810873376494  1.485179825368767
+  POINT  734  0.2056394443830584  1.671509166172381
+  POINT  735  0.2056394443829556  0.5284908338276189
+  POINT  736  0.2022045159953981  0.8075706211649034
+  POINT  737  0.2022045159954316  1.392429378835095
+  POINT  738  0.2061141260057746  1.764700574049656
+  POINT  739  0.2061141260056416  0.4352994259503444
+  POINT  740  0.2062804246860582  1.857803764278236
+  POINT  741  0.2062804246858916  0.3421962357217642
+  POINT  742  0.2145155953827285  0.9447674375791411
+  POINT  743  0.2145155953827374  1.255232562420859
+  POINT  744  0.2292460117984814  1.994590684868222
+  POINT  745  0.2292460117983225  0.2054093151317783
+  POINT  746  0.2299957449751754  0.6685488772010935
+  POINT  747  0.2299957449752358  1.531451122798906
+  POINT  748  0.2310181106835776  1.624764954255937
+  POINT  749  0.2310181106834942  0.5752350457440627
+  POINT  750  0.2317054503580209  1.717998286295852
+  POINT  751  0.2317054503579118  0.4820017137041473
+  POINT  752  0.2285430831554674  0.7619588769893884
+  POINT  753  0.2285430831555078  1.438041123010611
+  POINT  754  0.2320516614469718  1.811176161531719
+  POINT  755  0.2320516614468365  0.3888238384682812
+  POINT  756  0.225828305344291  0.8552159043007362
+  POINT  757  0.2258283053443129  1.344784095699262
+  POINT  758  0.2319087818211577  1.904198989421268
+  POINT  759  0.2319087818209996  0.2958010105787312
+  POINT  760  0.2459989525486379  2.033654363492142
+  POINT  761  0.2459989525485172  0.166345636507845
+  POINT  762  0.2475174760458261  0.905392808589402
+  POINT  763  0.2475174760458374  1.294607191410597
+  POINT  764  0.2549114779452099  0.7156411412724247
+  POINT  765  0.254911477945257  1.484358858727575
+  POINT  766  0.2562505837018355  1.57793090903224
+  POINT  767  0.2562505837017685  0.6220690909677594
+  POINT  768  0.257191792825805  1.671276456625063
+  POINT  769  0.2571917928257161  0.5287235433749365
+  POINT  770  0.2577629095016755  1.764502227532713
+  POINT  771  0.2577629095015642  0.4354977724672864
+  POINT  772  0.2579070455300894  1.857653275260769
+  POINT  773  0.2579070455299591  0.3423467247392308
+  POINT  774  0.2529397486016737  0.8098649724765766
+  POINT  775  0.2529397486017019  1.390135027523422
+  POINT  776  0.2572905259451417  1.951184904222711
+  POINT  777  0.2572905259450062  0.2488150957772869
+  POINT  778  0.2796015982310787  0.7631604982155205
+  POINT  779  0.2796015982311135  1.436839501784479
+  POINT  780  0.2813089441944599  1.530940792248024
+  POINT  781  0.2813089441944069  0.6690592077519755
+  POINT  782  0.2825452749728528  1.624497176123785
+  POINT  783  0.2825452749727808  0.5755028238762141
+  POINT  784  0.2833738704200612  1.717806012070717
+  POINT  785  0.2833738704199696  0.4821939879292828
+  POINT  786  0.2837841917529496  1.811017757473077
+  POINT  787  0.2837841917528416  0.388982242526923
+  POINT  788  0.2836767085375295  1.904218555150446
+  POINT  789  0.2836767085374143  0.2957814448495524
+  POINT  790  0.2772492414227249  0.8601184689770959
+  POINT  791  0.2772492414227409  1.339881531022904
+  POINT  792  0.2836030344354198  2.004441573778339
+  POINT  793  0.2836030344353273  0.1955584262216606
+  POINT  794  0.3041334292856778  0.8114743735520394
+  POINT  795  0.3041334292857006  1.38852562644796
+  POINT  796  0.3061795743710523  0.7162832494915146
+  POINT  797  0.306179574371093  1.483716750508485
+  POINT  798  0.3077390212333289  1.577614885885851
+  POINT  799  0.3077390212332711  0.6223851141141483
+  POINT  800  0.3096865396528937  1.950901505461759
+  POINT  801  0.3096865396528055  0.249098494538237
+  POINT  802  0.3088527981673977  1.671079760816977
+  POINT  803  0.3088527981673229  0.528920239183022
+  POINT  804  0.3097361619722371  1.857534878505294
+  POINT  805  0.3097361619721392  0.3424651214947053
+  POINT  806  0.3095502641650076  1.76435087580034
+  POINT  807  0.3095502641649175  0.4356491241996593
+  POINT  808  0.3288120431688741  0.8607989374422602
+  POINT  809  0.3288120431688846  1.339201062557741
+  POINT  810  0.3308544215557402  0.7638219050359595
+  POINT  811  0.3308544215557694  1.43617809496404
+  POINT  812  0.3375126524052514  1.994293817311727
+  POINT  813  0.3375126524052001  0.2057061826882657
+  POINT  814  0.3327610765217816  1.530586589066711
+  POINT  815  0.3327610765217361  0.6694134109332888
+  POINT  816  0.3341824871133745  1.624295294975124
+  POINT  817  0.3341824871133137  0.5757047050248755
+  POINT  818  0.3355374802211898  1.903901262633753
+  POINT  819  0.3355374802211097  0.2960987373662459
+  POINT  820  0.3351696534103493  1.717659992280941
+  POINT  821  0.3351696534102745  0.4823400077190578
+  POINT  822  0.3357015118006413  1.810919793428409
+  POINT  823  0.3357015118005579  0.3890802065715904
+  POINT  824  0.355345685543038  0.8114954427610821
+  POINT  825  0.3553456855430563  1.388504557238918
+  POINT  826  0.3576026275587584  0.7166238312648966
+  POINT  827  0.3576026275587927  1.483376168735103
+  POINT  828  0.3605349712249165  1.948842121693117
+  POINT  829  0.3605349712248616  0.2511578783068814
+  POINT  830  0.3593497453902491  1.577424020408742
+  POINT  831  0.3593497453902004  0.6225759795912578
+  POINT  832  0.3606297522654421  1.670946224705702
+  POINT  833  0.3606297522653806  0.5290537752942978
+  POINT  834  0.3614920902775046  1.764248807423054
+  POINT  835  0.3614920902774339  0.4357511925769451
+  POINT  836  0.3618006540253253  1.857543999807811
+  POINT  837  0.3618006540252542  0.3424560001921882
+  POINT  838  0.3799039844548204  1.987344325951082
+  POINT  839  0.3799039844547873  0.2126556740489144
+  POINT  840  0.3795665604827047  0.8578622168360505
+  POINT  841  0.3795665604827129  1.34213778316395
+  POINT  842  0.3822320838617883  0.7639969713609172
+  POINT  843  0.3822320838618125  1.436003028639083
+  POINT  844  0.3843541839155623  1.530438831989408
+  POINT  845  0.3843541839155242  0.6695611680105915
+  POINT  846  0.3859332601431844  1.624196795445392
+  POINT  847  0.3859332601431343  0.5758032045546086
+  POINT  848  0.3870916435182385  1.717567749069627
+  POINT  849  0.3870916435181792  0.4824322509303727
+  POINT  850  0.3878198212396085  1.810875694218735
+  POINT  851  0.3878198212395463  0.3891243057812644
+  POINT  852  0.3878245318011455  1.904461840930953
+  POINT  853  0.3878245318010928  0.295538159069046
+  POINT  854  0.4065580313390023  0.8113186627225936
+  POINT  855  0.4065580313390171  1.388681337277407
+  POINT  856  0.4091868448889848  1.483304259678024
+  POINT  857  0.4091868448889562  0.7166957403219757
+  POINT  858  0.4110849437607559  0.6226039815364102
+  POINT  859  0.411084943760796  1.57739601846359
+  POINT  860  0.4125193961378941  1.670896906073372
+  POINT  861  0.4125193961378449  0.5291030939266279
+  POINT  862  0.4135817456760087  1.764164069156654
+  POINT  863  0.413581745675955  0.4358359308433455
+  POINT  864  0.4141444786512157  1.857619721936957
+  POINT  865  0.4141444786511664  0.342380278063042
+  POINT  866  0.4149840108493548  1.955465936092288
+  POINT  867  0.4149840108493268  0.2445340639077114
+  POINT  868  0.4302760379260603  0.8584159888355891
+  POINT  869  0.4302760379260669  1.341584011164411
+  POINT  870  0.4338131777967077  0.7640421200991923
+  POINT  871  0.4338131777967277  1.435957879900808
+  POINT  872  0.4360953183053679  0.6694833049817823
+  POINT  873  0.4360953183053992  1.530516695018218
+  POINT  874  0.4377991333224288  0.5757656018816784
+  POINT  875  0.4377991333224691  1.624234398118322
+  POINT  876  0.4391251775368907  1.71750931774424
+  POINT  877  0.439125177536845  0.4824906822557598
+  POINT  878  0.4401597743231614  1.810805160981683
+  POINT  879  0.4401597743231169  0.3891948390183168
+  POINT  880  0.4401253939088489  1.904159869449121
+  POINT  881  0.4401253939088169  0.2958401305508781
+  POINT  882  0.4609797622650783  1.48349994820593
+  POINT  883  0.4609797622650548  0.7165000517940698
+  POINT  884  0.4580973287579283  0.8119267663435248
+  POINT  885  0.4580973287579405  1.388073233656475
+  POINT  886  0.4629451825270938  0.6224365809087732
+  POINT  887  0.4629451825271261  1.577563419091227
+  POINT  888  0.4623841620811467  1.944422939213552
+  POINT  889  0.4623841620811303  0.2555770607864476
+  POINT  890  0.4645173284388175  0.5290570541716649
+  POINT  891  0.4645173284388558  1.670942945828335
+  POINT  892  0.4657788661344336  1.764006027971564
+  POINT  893  0.4657788661343942  0.4359939720284358
+  POINT  894  0.4670694877649046  1.857882777412384
+  POINT  895  0.4670694877648729  0.3421172225876152
+  POINT  896  0.481475798554698  0.8621813745644581
+  POINT  897  0.4814757985547035  1.337818625435542
+  POINT  898  0.4857634906689199  1.436190418959564
+  POINT  899  0.4857634906689035  0.7638095810404367
+  POINT  900  0.4879860821372959  0.6691397652542252
+  POINT  901  0.4879860821373211  1.530860234745775
+  POINT  902  0.4897787226538702  0.5755686722678167
+  POINT  903  0.4897787226539017  1.624431327732183
+  POINT  904  0.4925649638028262  1.81035457336747
+  POINT  905  0.4925649638027961  0.3896454266325297
+  POINT  906  0.491244631009867  1.717479865051679
+  POINT  907  0.491244631009833  0.4825201349483209
+  POINT  908  0.4965127469132501  1.909153795938472
+  POINT  909  0.4965127469132354  0.290846204061528
+  POINT  910  0.510497172814505  0.8118192753582937
+  POINT  911  0.5104971728145157  1.388180724641707
+  POINT  912  0.5129893597151404  0.7159085206318639
+  POINT  913  0.5129893597151594  1.484091479368137
+  POINT  914  0.5149112745397199  0.6220563087553478
+  POINT  915  0.5149112745397453  1.577943691244653
+  POINT  916  0.5166239332213995  1.671113489643147
+  POINT  917  0.5166239332213707  0.528886510356853
+  POINT  918  0.519402149253141  1.856069498229687
+  POINT  919  0.5194021492531223  0.3439305017703124
+  POINT  920  0.5179838456323649  1.763741824525091
+  POINT  921  0.5179838456323376  0.436258175474909
+  POINT  922  0.5355179471519832  0.8610313646375148
+  POINT  923  0.5355179471519892  1.338968635362486
+  POINT  924  0.5381024565807641  0.7627828689476459
+  POINT  925  0.5381024565807777  1.437217131052355
+  POINT  926  0.5399700699996864  0.6685000579078603
+  POINT  927  0.5399700699997064  1.53149994209214
+  POINT  928  0.5418611427009609  0.5752157647607447
+  POINT  929  0.541861142700985  1.624784235239255
+  POINT  930  0.543048551417165  1.895246104189044
+  POINT  931  0.5430485514171568  0.3047538958109555
+  POINT  932  0.543423948721677  0.4824463109995085
+  POINT  933  0.5434239487217013  1.717553689000492
+  POINT  934  0.5449734661365295  1.809666792143957
+  POINT  935  0.5449734661365109  0.3903332078560427
+  POINT  936  0.5636636934947677  0.8096348064899566
+  POINT  937  0.563663693494777  1.390365193510045
+  POINT  938  0.5638964884375066  0.90749790301109
+  POINT  939  0.5638964884375097  1.292502096988911
+  POINT  940  0.565090006747472  0.7148393329579851
+  POINT  941  0.5650900067474872  1.485160667042016
+  POINT  942  0.5669192536511706  1.578492341942532
+  POINT  943  0.566919253651151  0.621507658057468
+  POINT  944  0.5699152080909332  1.763370224225762
+  POINT  945  0.5699152080909152  0.4366297757742388
+  POINT  946  0.568889778169672  0.5285269041704842
+  POINT  947  0.568889778169693  1.671473095829516
+  POINT  948  0.5751236529375724  1.858038128643103
+  POINT  949  0.5751236529375642  0.3419618713568972
+  POINT  950  0.590478852657328  0.855550119497996
+  POINT  951  0.590478852657334  1.344449880502005
+  POINT  952  0.590504642678035  0.7609199103277213
+  POINT  953  0.5905046426780463  1.43908008967228
+  POINT  954  0.5919133498822817  0.6676306738310475
+  POINT  955  0.5919133498822972  1.532369326168953
+  POINT  956  0.5954866943863356  1.806928298300893
+  POINT  957  0.5954866943863252  0.3930717016991069
+  POINT  958  0.5940252517533466  0.5747741347590816
+  POINT  959  0.5940252517533643  1.625225865240919
+  POINT  960  0.5967300361208071  0.9498398068586414
+  POINT  961  0.596730036120809  1.250160193141359
+  POINT  962  0.5958590463421782  0.4819011636493623
+  POINT  963  0.5958590463421949  1.718098836350638
+  POINT  964  0.6165599577119201  0.8063499927067439
+  POINT  965  0.6165599577119278  1.393650007293257
+  POINT  966  0.6193473886432476  0.899069077918274
+  POINT  967  0.6193473886432513  1.300930922081727
+  POINT  968  0.6170434880604998  1.486571417742423
+  POINT  969  0.6170434880604879  0.7134285822575774
+  POINT  970  0.6188431819761337  0.6209309398604157
+  POINT  971  0.6188431819761482  1.579069060139585
+  POINT  972  0.6190358850789275  1.841819288132658
+  POINT  973  0.6190358850789225  0.3581807118673422
+  POINT  974  0.6215057026034905  0.5279483222940986
+  POINT  975  0.621505702603505  1.672051677705902
+  POINT  976  0.6217869642503756  1.764257977417268
+  POINT  977  0.6217869642503647  0.4357420225827333
+  POINT  978  0.6341001028670564  0.9960638930846765
+  POINT  979  0.6341001028670576  1.203936106915324
+  POINT  980  0.6435873362001189  0.8504640863007134
+  POINT  981  0.6435873362001242  1.349535913699287
+  POINT  982  0.6425283358304207  0.7586926156791651
+  POINT  983  0.6425283358304295  1.441307384320836
+  POINT  984  0.6436325724813013  0.6666884768802879
+  POINT  985  0.6436325724813128  1.533311523119713
+  POINT  986  0.6497251990069113  0.9392628791843283
+  POINT  987  0.6497251990069137  1.260737120815673
+  POINT  988  0.646155168873761  0.5745076936096669
+  POINT  989  0.6461551688737733  1.625492306390333
+  POINT  990  0.6504592574828876  1.052904324402318
+  POINT  991  0.6504592574828881  1.147095675597682
+  POINT  992  0.6445551034372188  1.808273554051036
+  POINT  993  0.6445551034372136  0.3917264459489646
+  POINT  994  0.6495977529009989  0.4800954687272823
+  POINT  995  0.6495977529010092  1.719904531272718
+  POINT  996  0.6685473043066247  0.8031286720838697
+  POINT  997  0.6685473043066311  1.396871327916131
+  POINT  998  0.6672193864220373  1.1
+  POINT  999  0.6714754293806562  0.8925633166472781
+  POINT  1000  0.6714754293806601  1.307436683352723
+  POINT  1001  0.6686214109474826  0.71191634872483
+  POINT  1002  0.6686214109474916  1.488083651275171
+  POINT  1003  0.6704603881005182  0.6205328788909628
+  POINT  1004  0.6704603881005283  1.579467121109038
+  POINT  1005  0.6799889327878302  0.9707225707057096
+  POINT  1006  0.6799889327878326  1.229277429294291
+  POINT  1007  0.6745540153600085  0.527743751054467
+  POINT  1008  0.6745540153600175  1.672256248945533
+  POINT  1009  0.6753166278434668  1.769394175289471
+  POINT  1010  0.6753166278434619  0.4306058247105304
+  POINT  1011  0.6922033060224299  1.013678517867092
+  POINT  1012  0.6922033060224312  1.186321482132909
+  POINT  1013  0.695126791230159  0.8464187211403625
+  POINT  1014  0.6951267912301636  1.353581278859638
+  POINT  1015  0.6939271441816669  0.7565311918381677
+  POINT  1016  0.6939271441816736  1.443468808161833
+  POINT  1017  0.6949616531062637  1.534220924042734
+  POINT  1018  0.6949616531062556  0.6657790759572669
+  POINT  1019  0.697674679076005  0.5750520248472112
+  POINT  1020  0.6976746790760129  1.624947975152789
+  POINT  1021  0.6992106723653471  0.9320852461296082
+  POINT  1022  0.6992106723653495  1.267914753870392
+  POINT  1023  0.7151230349588964  1.06716956053494
+  POINT  1024  0.7151230349588966  1.13283043946506
+  POINT  1025  0.7091565683352502  1.723943895605046
+  POINT  1026  0.7091565683352463  0.4760561043949534
+  POINT  1027  0.719606703038442  0.8004195066279448
+  POINT  1028  0.719606703038447  1.399580493372056
+  POINT  1029  0.7196978113605996  0.7104565655360038
+  POINT  1030  0.7196978113606061  1.489543434463997
+  POINT  1031  0.7219482356728502  0.8884520210971256
+  POINT  1032  0.7219482356728534  1.311547978902875
+  POINT  1033  0.7215533889786911  0.6203101486235227
+  POINT  1034  0.7215533889786978  1.579689851376478
+  POINT  1035  0.7253358630263914  0.531330690859809
+  POINT  1036  0.7253358630263962  1.668669309140191
+  POINT  1037  0.7236780075487798  0.9726943960082572
+  POINT  1038  0.7236780075487816  1.227305603991743
+  POINT  1039  0.7470217926390116  1.0165557488846
+  POINT  1040  0.7470217926390129  1.183444251115401
+  POINT  1041  0.7456613308960666  0.8435226501058076
+  POINT  1042  0.7456613308960703  1.356477349894193
+  POINT  1043  0.7446322515098044  1.445363092037379
+  POINT  1044  0.7446322515097994  0.7546369079626216
+  POINT  1045  0.7567182575892406  1.100000000000001
+  POINT  1046  0.74586447443495  1.535151492272178
+  POINT  1047  0.7458644744349444  0.6648485077278227
+  POINT  1048  0.7482433904982198  0.9300852887618416
+  POINT  1049  0.7482433904982222  1.269914711238159
+  POINT  1050  0.748090646191401  0.5759556989837471
+  POINT  1051  0.7480906461914056  1.624044301016253
+  POINT  1052  0.7521327806758343  0.4964960774870433
+  POINT  1053  0.7521327806758367  1.703503922512957
+  POINT  1054  0.769821284847335  0.7982912787003689
+  POINT  1055  0.7698212848473387  1.401708721299632
+  POINT  1056  0.7702483181885972  1.490912752883813
+  POINT  1057  0.7702483181885927  0.7090872471161874
+  POINT  1058  0.7720229381145532  0.8860787058386009
+  POINT  1059  0.7720229381145558  1.3139212941614
+  POINT  1060  0.7755499142748119  1.058795478838545
+  POINT  1061  0.7755499142748125  1.141204521161455
+  POINT  1062  0.7739956427287733  0.9724966080016204
+  POINT  1063  0.7739956427287751  1.22750339199838
+  POINT  1064  0.772270684371083  1.58019194340864
+  POINT  1065  0.7722706843710792  0.6198080565913601
+  POINT  1066  0.7734310634285065  0.53377445840695
+  POINT  1067  0.7734310634285085  1.66622554159305
+  POINT  1068  0.7955024515172865  0.8414240249455552
+  POINT  1069  0.7955024515172893  1.358575975054445
+  POINT  1070  0.7945846769565481  1.446933968687508
+  POINT  1071  0.7945846769565449  0.7530660313124925
+  POINT  1072  0.7965098296699125  1.536265854797571
+  POINT  1073  0.7965098296699091  0.6637341452024296
+  POINT  1074  0.7986666573172631  0.9286646065420509
+  POINT  1075  0.7986666573172649  1.27133539345795
+  POINT  1076  0.8005628094927209  1.015298664946768
+  POINT  1077  0.800562809492722  1.184701335053233
+  POINT  1078  0.8028887054763968  1.1
+  POINT  1079  0.7983178082632083  0.5755380038921456
+  POINT  1080  0.7983178082632104  1.624461996107855
+  POINT  1081  0.8190537587556244  1.403352230773871
+  POINT  1082  0.8190537587556211  0.7966477692261302
+  POINT  1083  0.8203096977788009  0.7078225308376412
+  POINT  1084  0.8203096977788035  1.492177469162359
+  POINT  1085  0.8221435939740134  0.8842813833770112
+  POINT  1086  0.8221435939740159  1.31571861662299
+  POINT  1087  0.8258039244274097  0.9716193442904529
+  POINT  1088  0.825803924427411  1.228380655709548
+  POINT  1089  0.8232574159080223  0.6185402802551151
+  POINT  1090  0.8232574159080239  1.581459719744885
+  POINT  1091  0.8276858483030251  1.057709961461792
+  POINT  1092  0.8276858483030256  1.142290038538209
+  POINT  1093  0.8443885300557721  0.8396624678687937
+  POINT  1094  0.8443885300557725  1.360337532131206
+  POINT  1095  0.8435805887245759  1.448099999129817
+  POINT  1096  0.8435805887245733  0.7519000008701837
+  POINT  1097  0.8498572807834188  1.272584845453782
+  POINT  1098  0.849857280783417  0.9274151545462185
+  POINT  1099  0.8472169799856861  0.6623436269915201
+  POINT  1100  0.8472169799856875  1.53765637300848
+  POINT  1101  0.8531321577228631  1.014744484197918
+  POINT  1102  0.853132157722864  1.185255515802082
+  POINT  1103  0.8540348764901032  1.1
+  POINT  1104  0.8667152045029036  1.404499231715792
+  POINT  1105  0.866715204502905  0.7955007682842086
+  POINT  1106  0.8699087572681803  0.706778149725626
+  POINT  1107  0.8699087572681814  1.493221850274375
+  POINT  1108  0.8724767766843866  0.8824324819562084
+  POINT  1109  0.8724767766843858  1.317567518043792
+  POINT  1110  0.8787873413159252  1.228845043713379
+  POINT  1111  0.8787873413159242  0.9711549562866214
+  POINT  1112  0.8799432083523225  1.057608043069113
+  POINT  1113  0.8799432083523231  1.142391956930888
+  POINT  1114  0.8910218646725004  0.8376356513259199
+  POINT  1115  0.8910218646725104  1.362364348674084
+  POINT  1116  0.8913352919409994  1.448490594754667
+  POINT  1117  0.891335291940999  0.7515094052453336
+  POINT  1118  0.9014140835591762  0.9263883896376017
+  POINT  1119  0.901414083559177  1.273611610362399
+  POINT  1120  0.9116723447648609  1.404627991393473
+  POINT  1121  0.9116723447648556  0.7953720086065287
+  POINT  1122  0.90601105317802  1.18473392379679
+  POINT  1123  0.9060110531780194  1.015266076203211
+  POINT  1124  0.9062094956083043  1.1
+  POINT  1125  0.9269164684327946  0.8790908543699592
+  POINT  1126  0.9269164684328  1.320909145630042
+  POINT  1127  0.93042503959068  1.367111693519781
+  POINT  1128  0.9304250395906971  0.8328883064802138
+  POINT  1129  0.9384571821641754  0.9718778870737869
+  POINT  1130  0.9384571821641761  1.228122112926214
+  POINT  1131  0.9326347751840141  1.141925258570363
+  POINT  1132  0.9326347751840138  1.058074741429638
+  POINT  1133  0.9468718349292397  0.9252392374031051
+  POINT  1134  0.9468718349292387  1.274760762596895
+  POINT  1135  0.9536117424828211  1.181750933235814
+  POINT  1136  0.9536117424828208  1.018249066764187
+  POINT  1137  0.9579479718299321  1.1
+  POINT  1140  0.2078382133028135  1.044557708079978
+  POINT  1141  0.2078382133028137  1.155442291920023
+  POINT  1142  0.2275088140704905  0.9987735668087067
+  POINT  1143  0.2275088140704908  1.201226433191294
+  POINT  1144  0.262926530009175  0.9543605004654494
+  POINT  1145  0.2629265300091753  1.245639499534551
+  POINT  1146  0.3066837435753103  0.9231043350251863
+  POINT  1147  0.3066837435753106  1.276895664974814
+  POINT  1148  0.3533857101346237  0.9055080773390662
+  POINT  1149  0.3533857101346237  1.294491922660934
+  POINT  1150  0.4031929398929588  0.9000254887870959
+  POINT  1151  0.4031929398929588  1.299974511212904
+  POINT  1152  0.4526726158946173  1.292939357143166
+  POINT  1153  0.4526726158946175  0.9070606428568343
+  POINT  1154  0.4985340570798776  1.274043211862398
+  POINT  1155  0.4985340570798779  0.9259567881376026
+  POINT  1156  0.5403534806376503  1.242481228493078
+  POINT  1157  0.5403534806376505  0.9575187715069222
+  POINT  1158  0.5731656909892855  0.9999318059311387
+  POINT  1159  0.5731656909892854  1.200068194068862
+  POINT  1160  0.5930650777366978  1.047790079883964
+  POINT  1161  0.5930650777366978  1.152209920116036
+  POINT  1162  0.6000000000000001  1.1
+  POINT  1163  -1  1.1
+  POINT  1164  -0.9988075196278913  1.051178501305475
+  POINT  1165  -0.9988075196278913  1.148821498694526
+  POINT  1166  -0.9946460018453503  1.203340848714626
+  POINT  1167  -0.9946460018453503  0.9966591512853744
+  POINT  1168  -0.9886824084962801  0.9499763514308659
+  POINT  1169  -0.9886824084962801  1.250023648569134
+  POINT  1170  -0.9793136870795526  0.8976520266999143
+  POINT  1171  -0.9793136870795526  1.302347973300086
+  POINT  1172  -0.9687311922593916  0.8518873700439709
+  POINT  1173  -0.9687311922593919  1.348112629956029
+  POINT  1174  -0.9541486151094242  0.8006667070224767
+  POINT  1175  -0.9541486151094243  1.399333292977523
+  POINT  1176  -0.9377821750456562  0.7527758761741372
+  POINT  1177  -0.9377821750456563  1.447224123825863
+  POINT  1178  -0.9191933774375671  1.493806468807863
+  POINT  1179  -0.919193377437567  0.706193531192137
+  POINT  1180  -0.8983458759015261  1.539288842620342
+  POINT  1181  -0.8983458759015261  0.6607111573796581
+  POINT  1182  -0.8752870986433947  1.583603654812935
+  POINT  1183  -0.8752870986433947  0.6163963451870651
+  POINT  1184  -0.8500926216478474  1.6266332069096
+  POINT  1185  -0.8500926216478473  0.5733667930903997
+  POINT  1186  -0.8228092872820637  1.668317584421231
+  POINT  1187  -0.8228092872820636  0.5316824155787693
+  POINT  1188  -0.7933287286708404  0.4912064978455274
+  POINT  1189  -0.7933287286708406  1.708793502154473
+  POINT  1190  -0.7602039895389419  1.749684457478456
+  POINT  1191  -0.7602039895389416  0.4503155425215434
+  POINT  1192  -0.7299780737933029  1.78347056394626
+  POINT  1193  -0.7299780737933027  0.4165294360537394
+  POINT  1194  -0.6960595084092013  1.817984095055831
+  POINT  1195  -0.6960595084092008  0.3820159049441684
+  POINT  1196  -0.6599563434123792  1.851303949670013
+  POINT  1197  -0.6599563434123787  0.3486960503299865
+  POINT  1198  -0.6200195705656705  1.884586344589021
+  POINT  1199  -0.6200195705656703  0.3154136554109792
+  POINT  1200  -0.5835741235739795  1.912059876052783
+  POINT  1201  -0.5835741235739798  0.2879401239472171
+  POINT  1202  -0.5411341115458262  1.940936307529595
+  POINT  1203  -0.5411341115458274  0.2590636924704062
+  POINT  1204  -0.50266651448993  1.964480407649905
+  POINT  1205  -0.5026665144899328  0.2355195923500973
+  POINT  1206  -0.4577555992172864  0.2109219317825781
+  POINT  1207  -0.4577555992172805  1.989078068217425
+  POINT  1208  -0.4169676263156609  0.1910786620368719
+  POINT  1209  -0.4169676263156503  2.008921337963133
+  POINT  1210  -0.3695972238204201  0.1708079358150771
+  POINT  1211  -0.3695972238204002  2.029192064184931
+  POINT  1212  -0.3242388268761011  0.1540247449610483
+  POINT  1213  -0.324238826876067  2.045975255038964
+  POINT  1214  -0.2812980875895877  0.1403795615356869
+  POINT  1215  -0.2812980875895289  2.05962043846433
+  POINT  1216  -0.2312451250851507  0.1271044803657727
+  POINT  1217  -0.2312451250850431  2.072895519634253
+  POINT  1218  -0.1832715546065833  0.1169376737601598
+  POINT  1219  -0.1832715546064036  2.083062326239874
+  POINT  1220  -0.1356077632886996  0.1092373974882602
+  POINT  1221  -0.1356077632883874  2.090762602511783
+  POINT  1222  -0.0885147872871202  0.1039251371350065
+  POINT  1223  -0.08851478728655356  2.096074862865044
+  POINT  1224  -0.04285417533887703  0.1009186621420532
+  POINT  1225  -0.04285417533781429  2.099081337857993
+  POINT  1226  0.0001433356683681271  0.1000000102725569
+  POINT  1227  0.0001433356697270945  2.099999989727443
+  POINT  1228  0.04307817169925682  0.1009282953045617
+  POINT  1229  0.04307817170032539  2.099071704695392
+  POINT  1230  0.08863241599800338  0.1039355970448714
+  POINT  1231  0.08863241599857262  2.096064402955078
+  POINT  1232  0.1356707817812499  0.1092460250037528
+  POINT  1233  0.1356707817815631  2.090753974996205
+  POINT  1234  0.1833060428014915  0.1169441039938484
+  POINT  1235  0.1833060428016714  2.083055896006119
+  POINT  1236  0.2312640468069951  0.1271089780173465
+  POINT  1237  0.2312640468071028  2.072891021982628
+  POINT  1238  0.2813063825371679  0.1403819931119193
+  POINT  1239  0.2813063825372267  2.059618006888064
+  POINT  1240  0.3242416718960558  0.1540257201138868
+  POINT  1241  0.32424167189609  2.045974279886102
+  POINT  1242  0.3695968496920622  0.1708077870011485
+  POINT  1243  0.3695968496920825  2.029192212998844
+  POINT  1244  0.4169650593957588  0.19107748446686
+  POINT  1245  0.4169650593957698  2.008922515533135
+  POINT  1246  0.4577517637302356  0.2109199570331936
+  POINT  1247  0.4577517637302418  1.989080042966803
+  POINT  1248  0.5026617898174395  0.2355168451279528
+  POINT  1249  0.5026617898174425  1.964483154872046
+  POINT  1250  0.5411288334876985  0.2590602961161587
+  POINT  1251  0.5411288334876998  1.940939703883841
+  POINT  1252  0.5835684779845887  1.912063933137503
+  POINT  1253  0.5835684779845882  0.2879360668624968
+  POINT  1254  0.6200136653097331  1.884591011183018
+  POINT  1255  0.6200136653097329  0.3154089888169822
+  POINT  1256  0.6599503042297035  1.851309254533126
+  POINT  1257  0.6599503042297034  0.3486907454668737
+  POINT  1258  0.6960534263044139  1.817989991385595
+  POINT  1259  0.6960534263044139  0.3820100086144057
+  POINT  1260  0.7299720297813322  1.783477019172497
+  POINT  1261  0.7299720297813324  0.4165229808275033
+  POINT  1262  0.7601979892008397  1.749691478484211
+  POINT  1263  0.7601979892008398  0.4503085215157892
+  POINT  1264  0.7933229460072876  1.708801037563438
+  POINT  1265  0.7933229460072878  0.4911989624365626
+  POINT  1266  0.8228037771134272  1.668325561951843
+  POINT  1267  0.8228037771134273  0.5316744380481577
+  POINT  1268  0.8500874750073061  0.5733584854612174
+  POINT  1269  0.850087475007306  1.626641514538783
+  POINT  1270  0.8752823895423416  1.583612177841965
+  POINT  1271  0.8752823895423418  0.616387822158035
+  POINT  1272  0.8983416567203735  1.539297470742656
+  POINT  1273  0.8983416567203737  0.6607025292573446
+  POINT  1274  0.9191896855856203  1.49381508593883
+  POINT  1275  0.9191896855856204  0.70618491406117
+  POINT  1276  0.9377790428432951  1.447232583154164
+  POINT  1277  0.9377790428432952  0.7527674168458366
+  POINT  1278  0.9541460805874687  1.399341371847548
+  POINT  1279  0.9541460805874686  0.8006586281524527
+  POINT  1280  0.9687293155562601  1.348119957242258
+  POINT  1281  0.96872931555626  0.8518800427577421
+  POINT  1282  0.9793123591572941  1.302354400005967
+  POINT  1283  0.9793123591572943  0.8976455999940335
+  POINT  1284  0.9886816102942397  1.250028908767574
+  POINT  1285  0.9886816102942398  0.9499710912324267
+  POINT  1286  0.9946456213813893  0.9966554894209182
+  POINT  1287  0.9946456213813893  1.203344510579083
+  POINT  1288  0.9988074296771728  1.051176661096569
+  POINT  1289  0.9988074296771728  1.148823338903431
+  POINT  1290  1  1.100000000000001
+  POINT  1291  -0.6000000000000001  1.1
+  POINT  1292  -0.5930649720945202  1.047789689235342
+  POINT  1293  -0.5930649720945202  1.152210310764658
+  POINT  1294  -0.5731652580328794  0.9999310567138523
+  POINT  1295  -0.5731652580328797  1.200068943286148
+  POINT  1296  -0.5403527732641303  0.9575180747004463
+  POINT  1297  -0.5403527732641304  1.242481925299554
+  POINT  1298  -0.4985333081227975  0.9259563641198627
+  POINT  1299  -0.4985333081227977  1.274043635880137
+  POINT  1300  -0.4526720320716488  0.9070604834735944
+  POINT  1301  -0.452672032071649  1.292939516526406
+  POINT  1302  -0.4031926294713015  0.9000254838309167
+  POINT  1303  -0.4031926294713015  1.299974516169083
+  POINT  1304  -0.3533857018620679  0.9055080793217674
+  POINT  1305  -0.3533857018620677  1.294491920678233
+  POINT  1306  -0.3066839869016689  0.9231042066655285
+  POINT  1307  -0.3066839869016685  1.276895793334472
+  POINT  1308  -0.2629268363192107  0.9543602121721556
+  POINT  1309  -0.2629268363192103  1.245639787827844
+  POINT  1310  -0.2275091105076497  0.9987730616775465
+  POINT  1311  -0.2275091105076493  1.201226938322453
+  POINT  1312  -0.2078384167740776  1.044557002857828
+  POINT  1313  -0.2078384167740773  1.155442997142171
+  POINT  1316  0.3105578434202637  0.2006323044549632
+  POINT  1317  0.330877162150628  0.1798659514010763
+  POINT  1318  0.3039223531656916  0.1747920731677737
+  POINT  1319  0.9287764515652551  1.470640395825729
+  POINT  1320  0.9145571673921472  1.447861588954416
+  POINT  1321  0.9052624887633098  1.471152840346749
+  POINT  1322  0.3535547510486312  0.1882569848447071
+  POINT  1323  0.3470207240960523  0.1621425390562533
+  POINT  1324  0.3235995960290028  0.2274023386132513
+  POINT  1325  0.3351107554388335  0.2501281864225592
+  POINT  1326  0.3490238118150308  0.2284320304975735
+  POINT  1327  0.3587083184299937  0.20918092836859
+  POINT  1328  0.3702194778398245  0.2319067761778978
+  POINT  1329  0.3747504170734248  0.1917317305250314
+  POINT  1330  0.2966447870440664  0.2223284603799488
+  POINT  1331  0.3226120099369576  0.2725986159522414
+  POINT  1332  0.3480362257229856  0.2736283078365636
+  POINT  1333  0.3998055198280663  1.694232327571499
+  POINT  1334  0.3865745742016681  1.670921565389537
+  POINT  1335  0.3738606978918403  1.694256986887664
+  POINT  1336  0.2966816240951099  0.2724399696938947
+  POINT  1337  0.309607094379262  0.2959400911078991
+  POINT  1338  0.2834885327989058  0.2489567951577619
+  POINT  1339  0.2704836172412103  0.2722982703134196
+  POINT  1340  0.2704467801901668  0.2221867609994737
+  POINT  1341  -0.6860964672519752  0.9922016458091191
+  POINT  1342  -0.6631519223162972  1.004871939223759
+  POINT  1343  -0.6570447461470601  0.9833941006871679
+  POINT  1344  0.8945492214269009  1.493518468106602
+  POINT  1345  0.8806220246045904  1.470856222514521
+  POINT  1346  0.924725693804078  1.425930287273818
+  POINT  1347  0.9015038183529301  1.42655929307407
+  POINT  1348  0.8317211444056984  1.381844881452539
+  POINT  1349  0.8199454907865309  1.359456753592826
+  POINT  1350  0.8072781051364568  1.380964102914158
+  POINT  1351  0.7944375218014815  1.402530476036751
+  POINT  1352  0.782661868182314  1.380142348177039
+  POINT  1353  -0.6648574053327962  0.954993985395483
+  POINT  1354  -0.6419128603971183  0.967664278810123
+  POINT  1355  -0.7018338899533956  0.9717099108375971
+  POINT  1356  -0.7079410661226326  0.9931877493741881
+  POINT  1357  -0.689600263223294  0.9514054460465359
+  POINT  1358  -0.7114448620939515  0.9523915496116049
+  POINT  1359  -0.6744683774733522  0.9356756241694909
+  POINT  1360  -0.7353504118069525  0.9946264925818153
+  POINT  1361  -0.7196129891055322  1.015118227553337
+  POINT  1362  -0.7310729436501368  1.041863450547673
+  POINT  1363  -0.7036635979658169  1.040424707340046
+  POINT  1364  -0.6827914721501149  1.060037210148632
+  POINT  1365  -0.6713315176055104  1.033291987154296
+  POINT  1366  -0.6422797965005951  1.024484442032345
+  POINT  1367  0.1806772808953734  0.1609631636001611
+  POINT  1368  0.1938140884068659  0.1401562078799934
+  POINT  1369  0.170169235289999  0.137751059714016
+  POINT  1370  0.2177930904096177  0.1452386448917425
+  POINT  1371  0.2073473437627681  0.1217326137325622
+  POINT  1372  0.1923269943060682  0.1841091392659156
+  POINT  1373  0.2047889331991093  0.2051296409487355
+  POINT  1374  0.2167840729052814  0.1843888134489584
+  POINT  1375  -0.6570447461470584  1.216605899312832
+  POINT  1376  -0.6648574053327939  1.245006014604517
+  POINT  1377  -0.6419128603971163  1.232335721189877
+  POINT  1378  0.2251605432803788  0.1648569741369917
+  POINT  1379  0.2376224821734198  0.1858774758198117
+  POINT  1380  0.2386314996777561  0.1467273072625958
+  POINT  1381  0.6195247751943302  1.863205149657838
+  POINT  1382  0.6401982971402014  1.868209698154603
+  POINT  1383  0.6394930946543155  1.846564271332892
+  POINT  1384  0.1686821411892013  0.1817039910999382
+  POINT  1385  0.2648009934919222  0.1809520313647528
+  POINT  1386  0.2824547084862477  0.1679702096667899
+  POINT  1387  0.2636526675428426  0.1533638148098821
+  POINT  1388  0.302850869865998  0.146962041353332
+  POINT  1389  0.2564245231168249  0.2004838706767195
+  POINT  1390  0.2432682688716643  0.2271122054545326
+  POINT  1391  0.06406238642952972  1.602396899368508
+  POINT  1392  0.03841998395991213  1.602457211997868
+  POINT  1393  0.05129310564712708  1.625612188305098
+  POINT  1394  0.02559914718061562  1.579279506499536
+  POINT  1395  0.01282986639821299  1.602494795436125
+  POINT  1396  0.01277759441007085  1.556177031842922
+  POINT  1397  0.03836771197177  1.556139448404666
+  POINT  1398  0.3833947362238888  1.483340214206564
+  POINT  1399  0.3709784057371776  1.506907500362256
+  POINT  1400  0.3967705144022736  1.506871545833716
+  POINT  1401  0.4131084105275646  1.717538533406934
+  POINT  1402  0.4258222868373924  1.694203111908806
+  POINT  1403  0.4263534616064497  1.740836693450447
+  POINT  1404  0.4396803059052212  1.764085048564109
+  POINT  1405  0.4524520218356621  1.740757672857902
+  POINT  1406  0.4003366945971236  1.74086590911314
+  POINT  1407  0.8567446729963786  1.470660924702096
+  POINT  1408  0.8674579403327876  1.448295296942242
+  POINT  1409  0.8841252069942774  1.516259660508515
+  POINT  1410  0.9090501674264285  1.516686684574852
+  POINT  1411  0.6599358656403378  0.4111661353297475
+  POINT  1412  0.6331710338437891  0.413734234265849
+  POINT  1413  0.6485517960469134  0.4331739236466319
+  POINT  1414  0.6356923585756817  0.4579187456550078
+  POINT  1415  0.6624571903722304  0.4553506467189063
+  POINT  1416  0.6856850270739379  0.406307916662468
+  POINT  1417  0.7026443288123971  0.4235644027690169
+  POINT  1418  0.7132215200510187  0.3990612984460665
+  POINT  1419  0.101697719700112  1.440476381105105
+  POINT  1420  0.08912745822931681  1.463618880102634
+  POINT  1421  0.1144944044352526  1.463368840251245
+  POINT  1422  -0.02546526567548752  1.395090468753529
+  POINT  1423  -0.01281857489075695  1.372240398789832
+  POINT  1424  -0.03828776780135701  1.372220848013077
+  POINT  1425  0.8555518672793381  1.382418381923499
+  POINT  1426  0.842884481629264  1.403925731244831
+  POINT  1427  0.8551478966137398  1.426299615422804
+  POINT  1428  0.8313171737401002  1.425726114951844
+  POINT  1429  0.8891937746338823  1.404563611554632
+  POINT  1430  0.8790252482219515  1.426494913235229
+  POINT  1431  0.7572267681785716  1.423535906668505
+  POINT  1432  0.7447139939428928  1.400644607335844
+  POINT  1433  0.7321194772741257  1.422471792704717
+  POINT  1434  0.6812742775645826  1.465776229718502
+  POINT  1435  0.6682277400060515  1.442388096241334
+  POINT  1436  0.6555748733889606  1.464695517798003
+  POINT  1437  0.719279697845739  1.444415950099606
+  POINT  1438  0.7067669236100602  1.421524650766945
+  POINT  1439  0.6428324495039957  1.487327534508797
+  POINT  1440  0.6297859119454646  1.46393940103163
+  POINT  1441  0.603774065369273  1.462825753707352
+  POINT  1442  0.6165164892542379  1.440193736996558
+  POINT  1443  0.5777973247127668  1.462120378357148
+  POINT  1444  0.5910667474039935  1.48586604239222
+  POINT  1445  0.6303380302709063  1.509941470431068
+  POINT  1446  0.6561269917144021  1.510697587197442
+  POINT  1447  0.6922365980893541  0.4533309645527419
+  POINT  1448  0.7195642990582893  0.4462895426112284
+  POINT  1449  0.6793771606181226  0.4780757865611179
+  POINT  1450  0.6703042648708137  0.3868682272816851
+  POINT  1451  0.6833011103054119  1.33050898110618
+  POINT  1452  0.7085375134515085  1.332564628881256
+  POINT  1453  0.6967118325267567  1.309492331127799
+  POINT  1454  0.6853430508730047  1.287675718611557
+  POINT  1455  0.7105794540191015  1.289731366386634
+  POINT  1456  0.6575313827903921  1.328486298526005
+  POINT  1457  0.6693570637151439  1.351558596279463
+  POINT  1458  0.6744679356861316  1.264325937343032
+  POINT  1459  0.6606003141937868  1.284086902084198
+  POINT  1460  0.6454114090119557  1.304183802717225
+  POINT  1461  0.6314673624216878  1.325233417890507
+  POINT  1462  0.6345362938250825  1.2808340214487
+  POINT  1463  0.5643035496293995  0.7618513896376836
+  POINT  1464  0.5508830750377659  0.7862088377188012
+  POINT  1465  0.5770841680864014  0.7852773584088389
+  POINT  1466  0.6035323001949775  0.7836349515172326
+  POINT  1467  0.590111825603344  0.8079923995983502
+  POINT  1468  0.5777973247127535  0.7378796216428531
+  POINT  1469  0.6037740653692615  0.7371742462926494
+  POINT  1470  0.5910667474039799  0.7141339576077812
+  POINT  1471  0.6165164892542279  0.7598062630034432
+  POINT  1472  0.6297859119454543  0.7360605989683713
+  POINT  1473  0.3957094643753987  1.459653644158553
+  POINT  1474  0.3699173557103026  1.459689598687093
+  POINT  1475  0.6295441467711704  0.7825213041929545
+  POINT  1476  0.5515962316641181  0.7388111009528155
+  POINT  1477  0.5220280546541926  0.2470716852197019
+  POINT  1478  0.4995872683653374  0.2631815245947404
+  POINT  1479  0.5188207902004669  0.2749532500888434
+  POINT  1480  -0.6088248682915238  1.741173611493827
+  POINT  1481  -0.5958528806268083  1.763809435790671
+  POINT  1482  -0.5828880610475138  1.74073011370341
+  POINT  1483  -0.6086396647394946  1.78558832323274
+  POINT  1484  -0.5827028574954846  1.785144825442323
+  POINT  1485  -0.3585509031986421  0.6694887866608198
+  POINT  1486  -0.3709726740250589  0.6930939490844596
+  POINT  1487  -0.3451753083596161  0.6930199046850658
+  POINT  1488  0.02159211418002621  0.1222318464037917
+  POINT  1489  0.02161573739333394  0.1002336473470703
+  POINT  1490  0.0001246961645818607  0.1217677038877894
+  POINT  1491  -0.7977677744455398  0.6191812153427245
+  POINT  1492  -0.785298121069784  0.5976799957166066
+  POINT  1493  -0.8107918388011242  0.5970465633441201
+  POINT  1494  -0.5158174195690226  0.5753954809376767
+  POINT  1495  -0.5031984159488225  0.5522308117570145
+  POINT  1496  -0.5292405446931684  0.5520546258012075
+  POINT  1497  -0.346757104266525  0.599142031196148
+  POINT  1498  -0.3335355235191821  0.6224820813499081
+  POINT  1499  -0.3209507304937229  0.5990464227346768
+  POINT  1500  -0.3718450830780345  0.6460702604357964
+  POINT  1501  -0.3852104684419619  0.6225918834433488
+  POINT  1502  -0.3977136542280123  0.6460844540677659
+  POINT  1503  -0.3460477174125917  0.6459962160364026
+  POINT  1504  -0.3202413436397897  0.6459006075749315
+  POINT  1505  -0.3726337015921644  0.5991914840470817
+  POINT  1506  -0.3985022727421421  0.5992056776790512
+  POINT  1507  -0.3600489085667051  0.5757558254318502
+  POINT  1508  -0.3732726412975153  0.552430507123382
+  POINT  1509  -0.3473960439718758  0.5523810542724483
+  POINT  1510  -0.3865659985241779  0.529080623042571
+  POINT  1511  -0.3992188631190072  0.552455394201973
+  POINT  1512  -0.7833822327188185  0.5124940285272445
+  POINT  1513  -0.8083223964676064  0.5112599016808302
+  POINT  1514  -0.7981225120244301  0.5327319873938654
+  POINT  1515  -0.7858789610960825  0.5546634514634818
+  POINT  1516  -0.810565736353716  0.5536138796483858
+  POINT  1517  -0.6227302476297141  1.718996771584701
+  POINT  1518  -0.6356950672090087  1.742076093671961
+  POINT  1519  -0.633174618481992  1.786260560647708
+  POINT  1520  -0.6200245953506682  1.80759595029936
+  POINT  1521  -0.6624607506170896  1.744643812823277
+  POINT  1522  -0.6485553712788994  1.766820652732404
+  POINT  1523  -0.7346825660925169  0.4631888617147741
+  POINT  1524  -0.7195696082196974  0.4462958084808721
+  POINT  1525  -0.7452825106742071  0.4332511872652864
+  POINT  1526  -0.659940301890073  1.788828279799023
+  POINT  1527  -0.8268481821912206  1.015023250703939
+  POINT  1528  -0.8131841191797272  0.9934610174593526
+  POINT  1529  -0.8394688145562762  0.9931840989247629
+  POINT  1530  -0.582374689061536  1.694781676305339
+  POINT  1531  -0.5951981347674602  1.671758029398752
+  POINT  1532  -0.6086834944181534  1.69507064249998
+  POINT  1533  -0.5696415206753123  1.71782204747511
+  POINT  1534  -0.5561561610246191  1.694509434373882
+  POINT  1535  -0.5566695330105969  1.740457871771953
+  POINT  1536  -0.6355536933356384  1.695973124678114
+  POINT  1537  -0.7237276966616626  0.931087400970832
+  POINT  1538  -0.735961323391764  0.9513918657618932
+  POINT  1539  -0.6606007340361523  0.9159147762345927
+  POINT  1540  -0.6853435919266501  0.9123262368856455
+  POINT  1541  -0.7105801576185694  0.9102709051629009
+  POINT  1542  -0.7350966189163819  0.909271221313189
+  POINT  1543  0.5314786558844472  1.786704308334524
+  POINT  1544  0.5052744047175955  1.787048198946281
+  POINT  1545  0.5187692149696779  1.810010682755713
+  POINT  1546  0.4918813558833992  1.763873926248328
+  POINT  1547  0.4791719149686299  1.787180300669517
+  POINT  1548  0.5321878076948352  1.832868145186822
+  POINT  1549  0.5059835565279835  1.833212035798579
+  POINT  1550  -0.6967125141813695  0.8905100572280027
+  POINT  1551  -0.7611202463885229  0.9512931907700419
+  POINT  1552  -0.7488374118208119  0.9725973394108148
+  POINT  1553  -0.7605093348037115  0.9945278175899641
+  POINT  1554  0.5625339662120833  1.926774175248419
+  POINT  1555  0.5633085147008768  1.903655018663274
+  POINT  1556  0.5420886924524324  1.918092904036442
+  POINT  1557  0.1677414786678726  0.2270780422792451
+  POINT  1558  0.1804446514015915  0.2496346520056653
+  POINT  1559  0.193035027333615  0.2274065764921131
+  POINT  1560  0.2174921059328282  0.2276862506751559
+  POINT  1561  0.5472629010953567  1.857053813436395
+  POINT  1562  0.560048559537051  1.83385246039353
+  POINT  1563  0.5312253503351529  1.875657801209366
+  POINT  1564  0.5590861021773688  1.876642116416074
+  POINT  1565  0.5793460654610805  1.885051030890303
+  POINT  1566  0.5970797690082499  1.849928708387881
+  POINT  1567  0.5975686591236528  1.87131456991306
+  POINT  1568  0.6019478252094758  1.898535419205424
+  POINT  1569  0.1555718359053446  0.2036118855782081
+  POINT  1570  0.1429814599733212  0.2258399610917604
+  POINT  1571  0.1439221224946498  0.1804659099124536
+  POINT  1572  0.167842463899226  0.2725046956883677
+  POINT  1573  0.1931360125649684  0.2728332299012358
+  POINT  1574  0.142237482482294  0.2721968542048874
+  POINT  1575  0.1549288436456708  0.2953954321004578
+  POINT  1576  0.1297199434607255  0.2485855103081687
+  POINT  1577  0.1168063232071703  0.2714762467202588
+  POINT  1578  0.1175503006981975  0.2251193536071318
+  POINT  1579  0.7727278633415622  1.706152480038197
+  POINT  1580  0.7561653849383382  1.726597700498584
+  POINT  1581  0.7770294917647319  1.729464191934571
+  POINT  1582  0.06908332273710376  0.1747286278198352
+  POINT  1583  0.09421117423099265  0.1767843383137211
+  POINT  1584  0.08315579167291505  0.1518961329663628
+  POINT  1585  0.04265311679122231  0.173500772525977
+  POINT  1586  0.05370849934929992  0.1983889778733353
+  POINT  1587  0.1054752612529872  0.2009953187789585
+  POINT  1588  0.1195477301887986  0.1781628239254862
+  POINT  1589  0.219166043066515  1.834489962904977
+  POINT  1590  0.2062562339231802  1.811287690954754
+  POINT  1591  0.1933706155427234  1.834601492328013
+  POINT  1592  0.1418759959763775  1.834897705032838
+  POINT  1593  0.1161431086205539  1.835122613742161
+  POINT  1594  0.1290789398476717  1.858332259149197
+  POINT  1595  0.1805461259447767  1.857955557359055
+  POINT  1596  0.1676363168014419  1.834753285408832
+  POINT  1597  0.1547004855743241  1.811543640001796
+  POINT  1598  0.0896562702362601  1.602289317442028
+  POINT  1599  0.1025878977983515  1.625443281760437
+  POINT  1600  0.1153086599178669  1.602180723526728
+  POINT  1601  0.07678314854904517  1.579134341134798
+  POINT  1602  0.1399539016339994  1.463088405411779
+  POINT  1603  0.1273836401632042  1.486230904409308
+  POINT  1604  0.1402684036869221  1.509227444908606
+  POINT  1605  0.1148089064881753  1.509507879748071
+  POINT  1606  0.05108260086982749  1.532946811319066
+  POINT  1607  0.06390415364037226  1.556049285975679
+  POINT  1608  0.08949803744710266  1.555941704049199
+  POINT  1609  0.1150353511838344  1.555765589727844
+  POINT  1610  0.1021563562751615  1.532680534568724
+  POINT  1611  0.08927159275144354  1.509683994069426
+  POINT  1612  7.428719746837079e-06  1.533036939287995
+  POINT  1613  -0.01276113607140754  1.556176997382865
+  POINT  1614  0.2961133342937295  1.694442886443847
+  POINT  1615  0.2830222954966014  1.67117810872102
+  POINT  1616  0.2702828316229331  1.69454123434789
+  POINT  1617  0.3092717619152052  1.717733002175829
+  POINT  1618  0.2964620672925344  1.741078443935528
+  POINT  1619  0.3223599587876784  1.741005434040641
+  POINT  1620  0.3611306484642939  1.717613870675284
+  POINT  1621  0.3478997028378957  1.694303108493322
+  POINT  1622  0.3220112257888735  1.694369876548959
+  POINT  1623  0.3347412752164199  1.67101299276134
+  POINT  1624  0.1918396748742629  1.555163529082631
+  POINT  1625  0.217435731860563  1.554883636066597
+  POINT  1626  0.2043996879889357  1.53173101581494
+  POINT  1627  0.1658233841822933  1.508980689200408
+  POINT  1628  0.1532486505072644  1.532257664539172
+  POINT  1629  0.2575396603890411  1.717902149183284
+  POINT  1630  0.2444486215919129  1.694637371460457
+  POINT  1631  0.08985063675832938  1.648756943517773
+  POINT  1632  0.1155030264399362  1.648648349602473
+  POINT  1633  0.4118661967328268  1.624215596781857
+  POINT  1634  0.4244420385416325  1.600815208290956
+  POINT  1635  0.3985091019519902  1.600796406954491
+  POINT  1636  0.3992263281405393  1.647546850759382
+  POINT  1637  0.3732815062043133  1.647571510075547
+  POINT  1638  0.4251592647301816  1.647565652095847
+  POINT  1639  0.3451818520402872  1.506981378900907
+  POINT  1640  0.3585576302186719  1.53051271052806
+  POINT  1641  0.3070350103581208  1.530763690657368
+  POINT  1642  0.2945239827138944  1.554277839066938
+  POINT  1643  0.3202500488775552  1.554100737476281
+  POINT  1644  0.2556523445848479  1.531195957523465
+  POINT  1645  0.2681102110698584  1.507649825487799
+  POINT  1646  0.2424536114602464  1.50790499076324
+  POINT  1647  0.2053043918719369  1.624911692035909
+  POINT  1648  0.2179469147147339  1.601540551795112
+  POINT  1649  0.1922331959030932  1.601687289575084
+  POINT  1650  0.3875369179767567  1.764206438289854
+  POINT  1651  0.3742918668978715  1.740908278246341
+  POINT  1652  0.348330871843927  1.740954399851998
+  POINT  1653  0.3355211772212561  1.764299841611697
+  POINT  1654  0.4529693202287975  1.787405594476623
+  POINT  1655  0.4663623690629938  1.810579867174576
+  POINT  1656  0.4268707599995851  1.787484615069168
+  POINT  1657  0.066362416158208  0.2230270715368231
+  POINT  1658  0.03993221021232655  0.2217992162429649
+  POINT  1659  0.09221374474039161  0.2237408679953668
+  POINT  1660  -0.1806324006256212  2.039040406621616
+  POINT  1661  -0.1937799709011503  2.059848481252433
+  POINT  1662  -0.1701239843308744  2.062254251609057
+  POINT  1663  0.07843745560341825  0.2471511063649964
+  POINT  1664  -0.06453169967790989  1.835474434918656
+  POINT  1665  -0.03873932786479044  1.835569225358248
+  POINT  1666  -0.05157511727675421  1.812075189638412
+  POINT  1667  0.9329092126761649  1.40198468162051
+  POINT  1668  0.9462655865016076  1.42339053759003
+  POINT  1669  0.02800114080161467  0.9895457515244608
+  POINT  1670  0.0414249946122152  0.9660257487493666
+  POINT  1671  0.01342466119982795  0.9662436982240942
+  POINT  1672  0.01461979926873538  1.013476645293224
+  POINT  1673  0.04262013268112264  1.013258695818497
+  POINT  1674  0.06802759705977945  0.9655181002374882
+  POINT  1675  0.05345111745799274  0.9422160469371217
+  POINT  1676  0.07198015775009842  1.013068007074732
+  POINT  1677  0.05859881621721913  1.036998900843496
+  POINT  1678  0.94957717757347  1.35761582538102
+  POINT  1679  0.94782289199453  1.33451455143615
+  POINT  1680  0.92867075401174  1.344010419574911
+  POINT  1681  0.9422855600890744  1.383226532683664
+  POINT  1682  0.9210486921777705  1.385869842456627
+  POINT  1683  0.9617787456594511  1.373827764110459
+  POINT  1684  0.8492699027251828  1.582535948793425
+  POINT  1685  0.8366724454576649  1.604050617141834
+  POINT  1686  0.8629531698349334  1.60528390699867
+  POINT  1687  0.08414133693729417  0.9885340160818017
+  POINT  1688  0.0961674597830717  0.9647243142695565
+  POINT  1689  0.1001200204733907  1.012274221106801
+  POINT  1690  0.8727793183530305  1.538476921875568
+  POINT  1691  0.8585628686269344  1.515439111641427
+  POINT  1692  0.8612496847640145  1.560634275425223
+  POINT  1693  0.8870887851205513  1.56159883807625
+  POINT  1694  0.8352371979468557  1.559558046376683
+  POINT  1695  0.9460344623234981  0.995063476918987
+  POINT  1696  0.9741286819321051  1.007452278092553
+  POINT  1697  0.9665514017727823  0.9842666882473525
+  POINT  1698  0.564303549629412  1.438148610362317
+  POINT  1699  0.5515962316641325  1.461188899047185
+  POINT  1700  0.23151436300617  0.2493891409979101
+  POINT  1701  0.2188234909441668  0.2728820983986323
+  POINT  1702  0.2445996538830029  0.272308053178009
+  POINT  1703  0.257792745179207  0.2957912277141418
+  POINT  1704  0.976209586079997  1.165287136069623
+  POINT  1705  0.9741286819321052  1.192547721907448
+  POINT  1706  0.9970992459298592  1.176112375906327
+  POINT  1707  0.3984345219252731  0.2018665792578872
+  POINT  1708  0.3934115203775905  0.180637516735541
+  POINT  1709  0.3877594910370942  0.2478459711072964
+  POINT  1710  0.3974439976520571  0.2285948689783129
+  POINT  1711  0.4159745351225428  0.2178057741872857
+  POINT  1712  0.9762095860799969  1.034712863930378
+  POINT  1713  0.9970992459298593  1.023887624093674
+  POINT  1714  0.06365677737895595  1.463777554324211
+  POINT  1715  0.07645346211409645  1.48667001347035
+  POINT  1716  0.06380091190108267  1.509842668291003
+  POINT  1717  0.0382644702324804  1.50993283071999
+  POINT  1718  -0.06377674746517002  1.372298089568516
+  POINT  1719  -0.05113005668043945  1.349448019604819
+  POINT  1720  -0.2009698514016221  1.346529228471641
+  POINT  1721  -0.214011670840064  1.36860674833058
+  POINT  1722  -0.1891568856984704  1.370351772645079
+  POINT  1723  -0.1640150826819737  1.371176119789101
+  POINT  1724  -0.1393310543138597  1.37180257764611
+  POINT  1725  -0.1514310378919145  1.348900710643148
+  POINT  1726  -0.1770569021204156  1.39325363964804
+  POINT  1727  -0.1538970377147242  1.625195962064633
+  POINT  1728  -0.1668629127193958  1.648402933673103
+  POINT  1729  -0.1411867376352463  1.648541179110625
+  POINT  1730  0.6782065117866271  0.3651286320925168
+  POINT  1731  0.6522527038334585  0.3702085957079192
+  POINT  1732  0.6812372242441523  1.420170068038982
+  POINT  1733  0.6555378200685302  1.419089356118483
+  POINT  1734  0.694077003672539  1.398225910644094
+  POINT  1735  0.8869454301217814  1.295589564203095
+  POINT  1736  0.899696622558593  1.319238331836917
+  POINT  1737  0.9141652759959884  1.29726037799622
+  POINT  1738  0.8756356821712978  1.273098227908091
+  POINT  1739  0.8611670287339024  1.295076181748787
+  POINT  1740  0.7611195166134986  1.24870905161827
+  POINT  1741  0.7488368251387784  1.227404497995062
+  POINT  1742  0.7359606990235019  1.248610157614951
+  POINT  1743  0.732781142897778  1.512347463368087
+  POINT  1744  0.7580563963117736  1.513032122577995
+  POINT  1745  0.7449730647746016  1.490228093673905
+  POINT  1746  0.7321650314352053  1.467453263250688
+  POINT  1747  0.7574402848492008  1.468137922460596
+  POINT  1748  0.7068124777711398  1.466506121312915
+  POINT  1749  0.6941596111540489  1.488813542869584
+  POINT  1750  0.7822029809019434  1.42432134499357
+  POINT  1751  0.8068192178560862  1.425143099730689
+  POINT  1752  0.7696084642331762  1.446148530362444
+  POINT  1753  0.7824164975725727  1.468923360785661
+  POINT  1754  0.819082632840562  1.447516983908662
+  POINT  1755  0.7607608548099538  0.5548650786953486
+  POINT  1756  0.7732042272273046  0.5757468514379463
+  POINT  1757  0.7858744358458574  0.5546562311495478
+  POINT  1758  0.7601806652812401  0.5978818777875536
+  POINT  1759  0.7852942463171437  0.5976730302417528
+  POINT  1760  0.7348220175850461  0.5981329238036349
+  POINT  1761  0.7469120366748851  0.6200591026074413
+  POINT  1762  -0.9495790216956095  0.8423913764177167
+  POINT  1763  -0.9422877331206259  0.8167810449069697
+  POINT  1764  -0.9617809404832132  0.8261799449944801
+  POINT  1765  0.722882662633703  0.5755038619154791
+  POINT  1766  0.709614034027348  0.597681086735367
+  POINT  1767  0.7367132546088961  0.553643194921778
+  POINT  1768  0.749383463227449  0.5325525746333795
+  POINT  1769  0.7115052710511982  0.5531913578535101
+  POINT  1770  0.3052280098934415  1.436508798374259
+  POINT  1771  0.2928905863011033  1.460278126146482
+  POINT  1772  0.3185169979634312  1.459947422736263
+  POINT  1773  0.2672565380881853  1.460599180256027
+  POINT  1774  0.280545526158175  1.48403780461803
+  POINT  1775  -0.997099456147766  1.023890378073273
+  POINT  1776  -0.976209841321624  1.034715054530326
+  POINT  1777  -0.9741290824303535  1.007455379520275
+  POINT  1778  -0.9657213673270058  1.054627269091343
+  POINT  1779  -0.9431236890207385  1.038163822316194
+  POINT  1780  0.317493925420735  1.412351860706
+  POINT  1781  0.291867513758407  1.41268256411622
+  POINT  1782  0.2662706734164078  1.413487264653951
+  POINT  1783  0.2785365889437013  1.389330326985691
+  POINT  1784  0.2540723406933107  1.437440312397545
+  POINT  1785  0.2417272805503824  1.461199990869093
+  POINT  1786  0.2407414158786049  1.414088075267017
+  POINT  1787  -0.263637670997215  0.1533617809126154
+  POINT  1788  -0.2386111897449965  0.1467242403276583
+  POINT  1789  -0.2563575494494993  0.1334179771792528
+  POINT  1790  0.6560673202533777  1.373203620807709
+  POINT  1791  0.6818370477683974  1.375226303387885
+  POINT  1792  0.630073646956026  1.371592960496272
+  POINT  1793  0.6425536310092794  1.395260667604694
+  POINT  1794  -0.1120927493046179  0.1063022514097499
+  POINT  1795  -0.1219004877460144  0.1315926512271701
+  POINT  1796  -0.09835399974522469  0.1289365210505433
+  POINT  1797  0.6170330944287291  1.346992897100646
+  POINT  1798  0.6035194051846309  1.369049943897631
+  POINT  1799  0.2937442592827765  1.507328771378255
+  POINT  1800  0.3194703254464373  1.507151669787598
+  POINT  1801  0.3318911009649429  1.483546459621794
+  POINT  1802  0.40802263082927  1.435980454269945
+  POINT  1803  0.4215000113428563  1.459631069789416
+  POINT  1804  0.447396470030903  1.459728914053369
+  POINT  1805  0.4733716264669992  1.459845183582747
+  POINT  1806  0.4597883342328238  1.436074149430186
+  POINT  1807  0.4350833035770316  1.483402103941977
+  POINT  1808  0.4201856045678724  1.412319608589107
+  POINT  1809  0.3943950576004148  1.412342182958245
+  POINT  1810  0.6049131206502927  1.322690401291866
+  POINT  1811  0.7085375134515046  0.8674353711187441
+  POINT  1812  0.6833011103054076  0.8694910188938203
+  POINT  1813  0.6967118325267532  0.8905076688722018
+  POINT  1814  0.6853430508730016  0.9123242813884431
+  POINT  1815  0.7105794540190986  0.910268633613367
+  POINT  1816  0.7338047832844583  0.8659873356014667
+  POINT  1817  0.7203940610631128  0.8449706856230851
+  POINT  1818  0.735095813085535  0.9092686549294836
+  POINT  1819  0.7601331643063864  0.9080819973002212
+  POINT  1820  0.7469855868937016  0.8872653634678633
+  POINT  1821  0.7237270314317834  0.9310852674457248
+  POINT  1822  0.7588421345053099  0.8648006779722043
+  POINT  1823  -0.3194631103468517  0.692849470411762
+  POINT  1824  -0.3318848811732684  0.7164546328354018
+  POINT  1825  0.5390396832313062  0.7153739267949245
+  POINT  1826  0.5255459081479522  0.739345694789755
+  POINT  1827  -0.07319993195940667  0.1268825556575086
+  POINT  1828  -0.08303914441751115  0.1518939395730454
+  POINT  1829  -0.02888950998544878  0.1466876858415162
+  POINT  1830  -0.0425213026231808  0.1735009238384136
+  POINT  1831  -0.01352573597693642  0.1703486354999191
+  POINT  1832  -0.06896435638176415  0.1747282369332101
+  POINT  1833  -0.09411842416758216  0.1767822023262448
+  POINT  1834  -0.05360058237325181  0.198389186591613
+  POINT  1835  0.01369217503210703  0.1703482600412494
+  POINT  1836  6.038239437501473e-05  0.1971614980381468
+  POINT  1837  0.2183287775332249  0.5518629397858408
+  POINT  1838  0.1926150587215789  0.551716202005869
+  POINT  1839  0.2053043918718482  0.5750883079640909
+  POINT  1840  0.2441049517546052  0.5519792945594997
+  POINT  1841  0.2314156186043358  0.5286071886012778
+  POINT  1842  0.3194703254463942  0.6928483302124017
+  POINT  1843  0.3318911009649054  0.7164535403782055
+  POINT  1844  0.3451818520402472  0.6930186210990927
+  POINT  1845  -0.759070512126703  0.642334474604671
+  POINT  1846  -0.7337114615940578  0.6425850992847617
+  POINT  1847  -0.7469150061815546  0.6200652723953017
+  POINT  1848  -0.7327832660600251  0.6876579163375858
+  POINT  1849  -0.7580588457643663  0.686973645637339
+  POINT  1850  -0.7449751442851853  0.7097772604807937
+  POINT  1851  -0.8098872469285407  0.641144283352781
+  POINT  1852  -0.7843935291972007  0.6417777157252675
+  POINT  1853  -0.7711899846097039  0.6642975426147275
+  POINT  1854  -0.7833818628348641  0.6864168867579354
+  POINT  1855  0.6044784189713848  0.6905296280443125
+  POINT  1856  0.5785016783148769  0.6912350033945163
+  POINT  1857  0.5525300383735792  0.6916696954329227
+  POINT  1858  0.565941709940984  0.6680653658694539
+  POINT  1859  0.5264797148574134  0.6922042892698621
+  POINT  1860  -0.6035321568988299  1.416362299720279
+  POINT  1861  -0.6295443969124399  1.417475651973637
+  POINT  1862  -0.6165165418360619  1.440190569756709
+  POINT  1863  -0.6425539998817764  1.395257737807628
+  POINT  1864  -0.6555383848190084  1.419086007844059
+  POINT  1865  -0.8629580988590819  0.5947245111688882
+  POINT  1866  -0.8492742954101373  0.6174720640786515
+  POINT  1867  -0.8366770569123636  0.5959572880303188
+  POINT  1868  -0.8242074035366078  0.574456068404201
+  POINT  1869  -0.8367105808207925  0.5523546732213156
+  POINT  1870  -0.477143991202472  0.5523158171414201
+  POINT  1871  -0.4905671163266177  0.5289749620049509
+  POINT  1872  -0.4778770142236268  0.5057916937735174
+  POINT  1873  -0.5039314389699773  0.5057066883891118
+  POINT  1874  -0.555374438862116  0.5518751158888794
+  POINT  1875  -0.5427554352419158  0.5287104467082172
+  POINT  1876  -0.6086834944181689  0.50492935750002
+  POINT  1877  -0.6227302476297274  0.4810032284152993
+  POINT  1878  -0.6355536933356507  0.5040268753218862
+  POINT  1879  -0.5823746890615545  0.5052183236946611
+  POINT  1880  -0.5951981347674777  0.528241970601248
+  POINT  1881  -0.6480318639392053  0.5278510747347533
+  POINT  1882  -0.6620786171507639  0.5039249456500327
+  POINT  1883  -0.6918589652002054  0.5019056629854524
+  POINT  1884  -0.6793807945966507  0.4780814635725852
+  POINT  1885  -0.7172504588747789  0.5036995435025926
+  POINT  1886  -0.6999482814288921  0.5295430255800401
+  POINT  1887  -0.4518159218726016  0.5057766915404051
+  POINT  1888  -0.4385124559629686  0.5290827387552592
+  POINT  1889  -0.425815686255303  0.5057994629063077
+  POINT  1890  -0.4651802445159612  0.4825084179245659
+  POINT  1891  -0.3347298011327886  0.5289887662159136
+  POINT  1892  -0.3215060684019784  0.5523140845243819
+  POINT  1893  -0.2960986803010351  0.505558604924252
+  POINT  1894  -0.3092572916926534  0.4822686083807578
+  POINT  1895  -0.3219984369545094  0.5056317999243531
+  POINT  1896  -0.3478884125244068  0.5056987696724196
+  POINT  1897  -0.4118595737137472  0.5757866979008666
+  POINT  1898  -0.4251529309404098  0.5524368138200555
+  POINT  1899  -0.4511531665577085  0.5524140424541528
+  POINT  1900  -0.4637844661799133  0.5756698922062163
+  POINT  1901  -0.4244363405635447  0.5991870972971337
+  POINT  1902  -0.7607649883473534  0.5548718551270597
+  POINT  1903  -0.7367170075156879  0.5536495285711691
+  POINT  1904  -0.7493877559351311  0.5325592326530709
+  POINT  1905  -0.760184148321055  0.5978883993801845
+  POINT  1906  -0.7348250977884099  0.5981390240602753
+  POINT  1907  -0.7732082126766393  0.5757537473815801
+  POINT  1908  -0.7306494736366258  0.4862825192556461
+  POINT  1909  -0.7387387898653124  0.5139198818502339
+  POINT  1910  -0.7561708970830505  0.4734092000624154
+  POINT  1911  -0.7770353879932983  0.470543086616642
+  POINT  1912  -0.7727332666489999  0.4938546777244074
+  POINT  1913  -0.762786770696978  0.5151422084061245
+  POINT  1914  -0.76050933480371  1.205472182410036
+  POINT  1915  -0.7488374118208101  1.227402660589185
+  POINT  1916  -0.7353504118069509  1.205373507418185
+  POINT  1917  -0.523006557866122  0.8364266710300934
+  POINT  1918  -0.5370795067138598  0.8107288620021464
+  POINT  1919  -0.5495901255502231  0.8353346896117829
+  POINT  1920  0.01292294391775528  1.788794823101427
+  POINT  1921  -0.01288210770578306  1.788794740675104
+  POINT  1922  2.230615990359008e-05  1.812170062504326
+  POINT  1923  0.03868408612893522  1.788759654835784
+  POINT  1924  0.02577967226324856  1.765384333006562
+  POINT  1925  -0.06475427313565842  1.882345416216327
+  POINT  1926  -0.05189398635471858  1.906007400090941
+  POINT  1927  -0.0388356234850063  1.882630454513107
+  POINT  1928  -0.02583418011976923  1.859051941280456
+  POINT  1929  -0.0129738933388294  1.882713925155071
+  POINT  1930  0.0129274539049248  1.835652778426534
+  POINT  1931  0.02588826152335953  1.859052115351459
+  POINT  1932  0.03878816540187666  1.835569481855573
+  POINT  1933  -0.01287759771861354  1.835652696000212
+  POINT  1934  0.1938140884070442  2.059843792119981
+  POINT  1935  0.2073473437629118  2.078267386267408
+  POINT  1936  0.2177930904097599  2.054761355108236
+  POINT  1937  -0.6300738448254859  1.371590482350539
+  POINT  1938  -0.6560678327320545  1.373200838220961
+  POINT  1939  -0.6035193268966255  1.369047780643213
+  POINT  1940  -0.5901115431865798  1.392005250676685
+  POINT  1941  -0.5770708581079972  1.367405649382692
+  POINT  1942  -0.6170331597469034  1.346990881056546
+  POINT  1943  -0.5770836881102017  1.414720168459757
+  POINT  1944  -0.6049130638281406  1.322688857702728
+  POINT  1945  -0.5771873625625306  1.318474892627532
+  POINT  1946  -0.5916217845726283  1.29671557098104
+  POINT  1947  0.09845802958290904  2.071056279747404
+  POINT  1948  0.1121830258768022  2.093687560908923
+  POINT  1949  0.1219772124744043  2.068401065767968
+  POINT  1950  -0.5629979092602611  1.341707840354745
+  POINT  1951  -0.5497066300047486  1.315734553633057
+  POINT  1952  -0.5495901255502154  1.364665310388217
+  POINT  1953  -0.6314675817570012  1.325231559410054
+  POINT  1954  -0.1462920886718663  2.066104389745012
+  POINT  1955  -0.1594861386106257  2.087200167945221
+  POINT  1956  0.4651849042733789  1.71749459139796
+  POINT  1957  0.4785117485721503  1.740742946511622
+  POINT  1958  0.504614238321116  1.740610844788385
+  POINT  1959  0.6703042648708164  1.813131772718315
+  POINT  1960  0.6522527038334611  1.829791404292081
+  POINT  1961  0.6782065117866272  1.834871367907484
+  POINT  1962  0.6317954942580731  1.825046421091847
+  POINT  1963  0.5173342898657842  1.717516777026086
+  POINT  1964  0.530703897177033  1.740647756762791
+  POINT  1965  0.6044784189713985  1.509470371955688
+  POINT  1966  0.617772961181805  1.532840424644333
+  POINT  1967  0.5785016783148922  1.508764996605485
+  POINT  1968  0.2824547084863233  2.032029790333202
+  POINT  1969  0.3028508698660445  2.053037958646653
+  POINT  1970  0.3039223531657549  2.025207926832221
+  POINT  1971  -0.6072650725682625  1.824369087671711
+  POINT  1972  -0.597083916434564  1.849924177641984
+  POINT  1973  -0.5853084854744725  1.832478802854666
+  POINT  1974  -0.6195300370470123  1.863200403524025
+  POINT  1975  -0.5975734499532223  1.87131011870698
+  POINT  1976  -0.6394984234703667  1.846559206064521
+  POINT  1977  -0.6402042756369813  1.868204715851268
+  POINT  1978  -0.6318000263107599  1.825041325086678
+  POINT  1979  0.3747504170734515  2.008268269474963
+  POINT  1980  0.3934115203776062  2.019362483264453
+  POINT  1981  0.3984345219252951  1.998133420742108
+  POINT  1982  0.7981174202709679  1.667275551772446
+  POINT  1983  0.7833770047178981  1.687513289578244
+  POINT  1984  0.8083167462868259  1.688747855768731
+  POINT  1985  0.7627819220521725  1.684864732053004
+  POINT  1986  0.7469120366748905  1.579940897392559
+  POINT  1987  0.7590675794030165  1.557671717840409
+  POINT  1988  0.7337089317068239  1.557420671824328
+  POINT  1989  0.7348220175850517  1.601867076196366
+  POINT  1990  0.7601806652812444  1.602118122212447
+  POINT  1991  0.6446517850383382  1.579268090624311
+  POINT  1992  0.6570464802909206  1.556389322114375
+  POINT  1993  0.6312378772287305  1.556190291629649
+  POINT  1994  0.6053782659292226  1.555719193154269
+  POINT  1995  0.5794163017667339  1.555430834055743
+  POINT  1996  0.5928812178136593  1.578780701041059
+  POINT  1997  0.7096140340273553  1.602318913264633
+  POINT  1998  0.7228826626337093  1.624496138084521
+  POINT  1999  0.6960068885396131  1.579578486242758
+  POINT  2000  0.6840675335882707  1.602207548130913
+  POINT  2001  0.1420678447162463  1.881509879911448
+  POINT  2002  0.1163349573604227  1.881734788620771
+  POINT  2003  -0.03835140563554747  1.556139333639542
+  POINT  2004  -0.02558123994522345  1.579279426194469
+  POINT  2005  0.1661991729129332  1.555356565651225
+  POINT  2006  0.140644192417562  1.555603321359422
+  POINT  2007  0.1792352167845606  1.578509185902882
+  POINT  2008  0.1279858735895032  1.578864490839897
+  POINT  2009  0.1409175011515946  1.602018455158306
+  POINT  2010  0.1665926939417635  1.601880326143678
+  POINT  2011  0.1539154802701272  1.625196558830509
+  POINT  2012  0.1913072521895647  1.508595367099871
+  POINT  2013  0.1783270053692225  1.485565147469305
+  POINT  2014  0.2169033091758649  1.508315474083837
+  POINT  2015  0.2293611756608755  1.484769342048171
+  POINT  2016  0.2186724473705396  1.694753726234116
+  POINT  2017  0.2314156186044317  1.671392811398722
+  POINT  2018  0.218328777533318  1.648137060214159
+  POINT  2019  0.2441049517546913  1.6480207054405
+  POINT  2020  0.1926150587216773  1.64828379799413
+  POINT  2021  0.2705683899608683  1.741154119801715
+  POINT  2022  0.2836565868333416  1.764426551666527
+  POINT  2023  0.2447341799298482  1.741250256914283
+  POINT  2024  0.1288047307753781  1.765049699382679
+  POINT  2025  0.1416043882729745  1.741685567590415
+  POINT  2026  0.1158493005240225  1.741802501408054
+  POINT  2027  0.1417499916367949  1.788310412595421
+  POINT  2028  0.1675103124618594  1.788165992971415
+  POINT  2029  0.1159949038878428  1.78842734641306
+  POINT  2030  0.08997785843156919  1.695293016168183
+  POINT  2031  0.1029194547424216  1.718531195296174
+  POINT  2032  0.1157073617107665  1.6952001904878
+  POINT  2033  0.09011979724482513  1.741895327088438
+  POINT  2034  0.06436538296882638  1.741986592858738
+  POINT  2035  0.07729522875042726  1.765257898970618
+  POINT  2036  0.3726415027667168  1.600810407927067
+  POINT  2037  0.3852173445755225  1.577410019436166
+  POINT  2038  0.3977195638381791  1.553917425226499
+  POINT  2039  0.3718519646529057  1.553931426199075
+  POINT  2040  0.3460554109560153  1.554005304737727
+  POINT  2041  0.333544383311789  1.577519453147297
+  POINT  2042  0.2436343471927065  1.601347931644089
+  POINT  2043  0.2305631512238629  1.578123529183264
+  POINT  2044  0.2687797639481477  1.554435850640132
+  POINT  2045  0.2819948024675821  1.577772897459046
+  POINT  2046  0.2431231643385356  1.554691015915573
+  POINT  2047  0.2693979293373441  1.601214042578013
+  POINT  2048  0.2951421481030908  1.601056031004819
+  POINT  2049  0.2567816928282152  1.624631065189861
+  POINT  2050  0.2956990365701253  1.647788468470381
+  POINT  2051  0.2698685338993289  1.647886816374424
+  POINT  2052  0.4235901310330976  1.553956356740904
+  POINT  2053  0.4102247511104807  1.530477763503813
+  POINT  2054  0.422641081597192  1.506910477348121
+  POINT  2055  0.4485375402852387  1.507008321612074
+  POINT  2056  0.3746559557585566  1.787562250820895
+  POINT  2057  0.4007007834578086  1.787519881687694
+  POINT  2058  0.413989797781385  1.810840427600209
+  POINT  2059  -0.6522579462527724  1.82978606869217
+  POINT  2060  -0.5052727560677891  1.787044751988329
+  POINT  2061  -0.4791688625267596  1.787177152772756
+  POINT  2062  -0.4918785122037851  1.763870607592289
+  POINT  2063  -0.4825260994418793  1.954450337332696
+  POINT  2064  -0.4803685255622034  1.977066747545017
+  POINT  2065  -0.4600706418055546  1.966749167616457
+  POINT  2066  -0.1219004877456383  2.068407348772862
+  POINT  2067  -0.1120927493041786  2.0936977485903
+  POINT  2068  -0.09835399974472138  2.071063478949492
+  POINT  2069  -0.1325848131291172  2.04374913600609
+  POINT  2070  -0.2174584592228486  1.972312727895629
+  POINT  2071  -0.2314832284425143  1.950609949054088
+  POINT  2072  -0.243240823004479  1.972886741691131
+  POINT  2073  -0.1194686319076173  2.021839750822426
+  POINT  2074  -0.09411842416713141  2.023217797673768
+  POINT  2075  -0.1053938438718595  1.999005453462253
+  POINT  2076  -0.1438602328338454  2.019536791794576
+  POINT  2077  -0.08911692886440384  1.463618711361384
+  POINT  2078  -0.07644169741559591  1.486669847770516
+  POINT  2079  -0.06364596962645531  1.463777439603444
+  POINT  2080  -0.1154812820062604  1.648647895993646
+  POINT  2081  -0.128447157010932  1.671854867602115
+  POINT  2082  -0.3702146268368627  1.968091750887542
+  POINT  2083  -0.35870386156296  1.990818330653109
+  POINT  2084  -0.3490169240129869  1.971566988136329
+  POINT  2085  -0.2707536583490266  1.787758560969576
+  POINT  2086  -0.2836385447920167  1.764425065259519
+  POINT  2087  -0.2966496600545434  1.787682739015524
+  POINT  2088  -0.2447139148396235  1.741249023873106
+  POINT  2089  -0.2319157665443315  1.764600182665474
+  POINT  2090  -0.2188871382974551  1.74134831932501
+  POINT  2091  -0.270769529515668  1.880934626954435
+  POINT  2092  -0.283801062236604  1.857592596719515
+  POINT  2093  -0.2966876216477112  1.880875286851071
+  POINT  2094  -0.2708238718580571  1.83433408577423
+  POINT  2095  -0.2967419639901003  1.834274745670865
+  POINT  2096  -0.4275530250930679  1.929810447408791
+  POINT  2097  -0.4014002529597884  1.929961674290535
+  POINT  2098  -0.4139704962970759  1.904308440560057
+  POINT  2099  -0.451254476412092  1.924288740346901
+  POINT  2100  -0.4386842330748045  1.949941974077378
+  POINT  2101  -0.387755235521335  1.952152044755015
+  POINT  2102  -0.374172706725343  1.926650037906281
+  POINT  2103  -0.3974421730713081  1.971403387271795
+  POINT  2104  -0.4363691904865304  1.972270874678347
+  POINT  2105  -0.466358834020414  1.810576872172974
+  POINT  2106  -0.45296459015641  1.787402727776934
+  POINT  2107  -0.5059831445529703  1.833208624229884
+  POINT  2108  -0.4932352953951117  1.856972886216202
+  POINT  2109  -0.479815257232905  1.834115559155114
+  POINT  2110  -0.4159752040357154  1.982192509551201
+  POINT  2111  -0.4374741354185797  1.999230994149872
+  POINT  2112  -0.3984345953512431  1.998132215683728
+  POINT  2113  -0.2177667561404701  2.054765077949622
+  POINT  2114  -0.2073206705197153  2.078273039378709
+  POINT  2115  -0.4536109848625554  1.834341134159292
+  POINT  2116  -0.5314783828490546  1.786700546613625
+  POINT  2117  -0.5187687331720291  1.810007091794092
+  POINT  2118  -0.5321887713342358  1.832864418855179
+  POINT  2119  -0.09033298490773178  1.835268454652496
+  POINT  2120  -0.07749719549576803  1.858762490372332
+  POINT  2121  -0.09055555836548029  1.882139435950167
+  POINT  2122  -0.11628537000905  1.881734115643607
+  POINT  2123  -0.1035424476489404  1.905317041487602
+  POINT  2124  -0.1031351364855005  1.811833842134645
+  POINT  2125  -0.1161006323033587  1.835121897588321
+  POINT  2126  -0.09019180074404116  1.788573225484171
+  POINT  2127  -0.115959448139668  1.788426668419996
+  POINT  2128  -0.1287731218948808  1.765048983311427
+  POINT  2129  -0.1417164576363402  1.788309599961901
+  POINT  2130  0.878868534587707  1.383431790194938
+  POINT  2131  0.8677051973641414  1.361350940402645
+  POINT  2132  0.8817493206784481  1.339965933358938
+  POINT  2133  0.8584326533700792  1.338952525087499
+  POINT  2134  0.9013471047186856  1.383496170033779
+  POINT  2135  0.9107234521315952  1.364738021096933
+  POINT  2136  0.9089691665526551  1.341636747152063
+  POINT  2137  0.9742895940953512  1.325299327201649
+  POINT  2138  0.953114413795047  1.311631772818004
+  POINT  2139  -0.5553744388620937  1.648124884111121
+  POINT  2140  -0.5679424135327051  1.625001215950461
+  POINT  2141  -0.5814573040814541  1.648345395043452
+  POINT  2142  -0.5427554352418911  1.671289553291783
+  POINT  2143  -0.5292405446931421  1.647945374198793
+  POINT  2144  -0.5300222668556676  1.694329924461554
+  POINT  2145  -0.6077661094380716  1.648634361238093
+  POINT  2146  -0.6480318639391938  1.672148925265247
+  POINT  2147  -0.6620786171507544  1.696075054349967
+  POINT  2148  -0.6793807945966437  1.721918536427415
+  POINT  2149  -0.6922410986665344  1.746663095487857
+  POINT  2150  0.7711871520524312  1.535708673534874
+  POINT  2151  0.7833790739292548  1.513589303840692
+  POINT  2152  0.7843902570204977  1.558228899103106
+  POINT  2153  0.7977640501395535  1.580825831576763
+  POINT  2154  0.8098836227889682  1.558862787271228
+  POINT  2155  0.8218634048278  1.536961113903026
+  POINT  2156  0.9635693962292076  0.9609244891531068
+  POINT  2157  0.9919382970906427  0.9732781993305182
+  POINT  2158  -0.691858965200199  1.698094337014548
+  POINT  2159  -0.7734558906711323  0.9293776750184719
+  POINT  2160  -0.7863319791001802  0.9505831486673937
+  POINT  2161  -0.7601341054330601  0.9080849026672977
+  POINT  2162  -0.7853458381447174  0.9073748605646494
+  POINT  2163  -0.7469865663899671  0.8872684068593666
+  POINT  2164  -0.1673242262919574  0.4584253926456934
+  POINT  2165  -0.1543701073478312  0.4816724796792437
+  POINT  2166  -0.1415760124475806  0.4583151721802184
+  POINT  2167  -0.1803095606970014  0.4351843035146454
+  POINT  2168  -0.1931036555972521  0.4585416110136706
+  POINT  2169  -0.205901803892532  0.4818927698060387
+  POINT  2170  -0.218887138297576  0.4586516806749907
+  POINT  2171  0.9199356328616758  0.9491331383556942
+  POINT  2172  0.8901007124375502  0.9487716729621116
+  POINT  2173  0.9086222617400498  0.9715164216802041
+  POINT  2174  0.9222341176710974  0.9935719816384989
+  POINT  2175  0.9298113978304201  1.016757571483699
+  POINT  2176  0.8923991972469718  0.9932105162449161
+  POINT  2177  -0.01276259188987216  1.50998295767207
+  POINT  2178  0.01277613859160624  1.509982992132127
+  POINT  2179  0.02549444962286141  1.486878849104064
+  POINT  2180  -0.02548231009783007  1.486878793264389
+  POINT  2181  -0.03825101996968948  1.509932740420258
+  POINT  2182  -0.1267562629161342  1.394459790379788
+  POINT  2183  -0.1141722181260749  1.372184381233835
+  POINT  2184  -0.08910823153630094  1.372183427563885
+  POINT  2185  -0.1016830229340264  1.349526214830207
+  POINT  2186  -0.07626594265721851  1.394956255972143
+  POINT  2187  -0.08895931390180634  1.417783948580912
+  POINT  2188  -0.06362782983067541  1.417898610585542
+  POINT  2189  -0.1912963660933825  1.508594854177943
+  POINT  2190  -0.2168931566549054  1.508314849680527
+  POINT  2191  -0.2043881601031762  1.531730363043117
+  POINT  2192  -0.3478884125243388  1.694301230327581
+  POINT  2193  -0.3738511405262918  1.694254889263011
+  POINT  2194  -0.3611197763480061  1.717611855554572
+  POINT  2195  -0.3865659985241228  1.67091937695743
+  POINT  2196  -0.39979736234779  1.69423000218442
+  POINT  2197  -0.4905671163265843  1.671025037995049
+  POINT  2198  -0.4771439912024373  1.64768418285858
+  POINT  2199  -0.5031984159487926  1.647769188242986
+  POINT  2200  -0.2951308726558796  1.601054699615573
+  POINT  2201  -0.3209507304936638  1.600953577265324
+  POINT  2202  -0.3083524534032209  1.624394749769333
+  POINT  2203  -0.2693856405037467  1.6012128703714
+  POINT  2204  -0.2567677755391445  1.624629920267187
+  POINT  2205  -0.2436208204774546  1.601346918519005
+  POINT  2206  -0.2819839175941897  1.577771697867391
+  POINT  2207  -0.1925967795177521  1.648282985232417
+  POINT  2208  -0.1798864794382742  1.67162820227841
+  POINT  2209  -0.2052880841558631  1.624910842520951
+  POINT  2210  -0.2183116508747414  1.648136111126258
+  POINT  2211  -0.1918266319748387  1.555162877211723
+  POINT  2212  -0.2174234225363615  1.554882872714307
+  POINT  2213  -0.2305502899250405  1.578122627753066
+  POINT  2214  -0.243111818053378  1.55469011358446
+  POINT  2215  -0.1922175536034488  1.601686551755012
+  POINT  2216  -0.2179324249604382  1.601539677648852
+  POINT  2217  -0.1673242262918176  1.741574607354307
+  POINT  2218  -0.1931036555971227  1.74145838898633
+  POINT  2219  -0.1803095606968581  1.764815696485355
+  POINT  2220  -0.2059018038924146  1.718107230193962
+  POINT  2221  -0.1928693337143564  1.694862776846503
+  POINT  2222  -0.1671354669160001  1.694982725287189
+  POINT  2223  -0.2186528164146888  1.694752707185183
+  POINT  2224  -0.1671354669161206  0.5050172747128121
+  POINT  2225  -0.1413872530717438  0.5049070542473372
+  POINT  2226  -0.1928693337144706  0.5051372231534973
+  POINT  2227  -0.1798864794383832  0.5283717977215908
+  POINT  2228  0.8473101853292009  1.316643067333391
+  POINT  2229  0.8332660620148942  1.338028074377098
+  POINT  2230  0.8360004373787173  1.294151731038386
+  POINT  2231  0.8088230227456525  1.337147295838718
+  POINT  2232  0.7970832660442859  1.314819955392195
+  POINT  2233  0.7837626948159225  1.336248634607923
+  POINT  2234  0.7588421345053131  1.335199322027796
+  POINT  2235  0.7705818912066797  1.357526662474319
+  POINT  2236  0.7577413078717046  1.379093035596912
+  POINT  2237  0.7326340169672587  1.378028921633125
+  POINT  2238  0.7073297322334349  1.511882179253365
+  POINT  2239  0.7204130637706068  1.534686208157456
+  POINT  2240  0.7082575210424807  1.556955387709606
+  POINT  2241  0.6827110206033959  1.556844022575886
+  POINT  2242  0.6692971127937882  1.533766223581223
+  POINT  2243  0.6817915320268777  1.511152287658952
+  POINT  2244  -0.9287798605407519  0.7293681467360079
+  POINT  2245  -0.9145602330542196  0.7521463497258971
+  POINT  2246  -0.905265834250175  0.728855177234897
+  POINT  2247  -0.2186528164147946  0.5052472928148173
+  POINT  2248  0.1326580354726552  0.1562549294472162
+  POINT  2249  -0.07744001868790265  1.304217336555594
+  POINT  2250  -0.08975786123537269  1.327099774967563
+  POINT  2251  -0.06430119379678242  1.326642822748289
+  POINT  2252  -0.9210509320574565  0.8141372751087732
+  POINT  2253  -0.9107254853761652  0.8352685418618812
+  POINT  2254  -0.9013495663017941  0.8165104341791918
+  POINT  2255  -0.9329118140462548  0.7980229372242802
+  POINT  2256  -0.9247285940143708  0.7740775218001106
+  POINT  2257  -0.9462684141426484  0.7766177364233513
+  POINT  2258  -0.9015066520229342  0.7734479953518705
+  POINT  2259  -0.8659605389271577  0.992952178727857
+  POINT  2260  -0.8522964759156644  0.9713899454832702
+  POINT  2261  -0.9286725348528519  0.8559961092298909
+  POINT  2262  -0.9089711690971898  0.8583692683003095
+  POINT  2263  -0.9478247054166341  0.8654921028561451
+  POINT  2264  -0.03881221413296941  1.32656558119285
+  POINT  2265  -0.02599060986506913  1.303610937668185
+  POINT  2266  -0.01281947274872615  1.326416134524715
+  POINT  2267  -0.8930769311862955  1.078804538412766
+  POINT  2268  -0.9062895168718619  1.057842556851372
+  POINT  2269  -0.9194226293405539  1.079038018438606
+  POINT  2270  -0.8141249811528288  1.036505477084733
+  POINT  2271  -0.8404096765293778  1.036228558550143
+  POINT  2272  -0.8538151471042948  1.057659930878235
+  POINT  2273  -0.8665383481426865  1.036177704497441
+  POINT  2274  -0.801618504318806  1.058253434475371
+  POINT  2275  -0.7880570099806486  1.037048126629167
+  POINT  2276  -0.6896002632232917  1.248594553953464
+  POINT  2277  -0.6744683774733495  1.264324375830509
+  POINT  2278  -0.7018338899533936  1.228290089162403
+  POINT  2279  -0.7114448620939492  1.247608450388395
+  POINT  2280  -0.9630933168538751  1.288551762049879
+  POINT  2281  -0.9677776775622389  1.262389599684403
+  POINT  2282  -0.9843457811105139  1.276248072925443
+  POINT  2283  -0.3984345953512647  0.2018677843162772
+  POINT  2284  -0.3747493941036443  0.1917324212053798
+  POINT  2285  -0.3934130036650907  0.1806381514619984
+  POINT  2286  -0.2838010622367179  0.3424074032804859
+  POINT  2287  -0.2707695295157905  0.3190653730455663
+  POINT  2288  -0.2966876216478176  0.3191247131489309
+  POINT  2289  -0.296741963990203  0.3657252543291353
+  POINT  2290  -0.270823871858176  0.3656659142257707
+  POINT  2291  -0.2824427804513729  0.1679696597112325
+  POINT  2292  -0.3028453177000343  0.1469602770360696
+  POINT  2293  -0.3039131500946296  0.1747922514239132
+  POINT  2294  -0.2647823638590002  0.180951879088161
+  POINT  2295  0.4512547779949736  0.2757085956686628
+  POINT  2296  0.4683190704110262  0.293343167306203
+  POINT  2297  0.4794484544971829  0.2732116324239878
+  POINT  2298  0.4825229759492849  0.2455469529572002
+  POINT  2299  0.4803642369967863  0.2229309036258916
+  POINT  2300  0.460067962905683  0.2332485089098206
+  POINT  2301  0.7605087176838941  1.20547382155689
+  POINT  2302  0.7872792261107485  1.206102363525806
+  POINT  2303  0.7737923010658674  1.184072793084317
+  POINT  2304  0.7353499000938972  1.205374927553572
+  POINT  2305  0.7204130637706  0.6653137918425448
+  POINT  2306  0.7337089317068177  0.6425793281756726
+  POINT  2307  0.7082575210424733  0.6430446122903948
+  POINT  2308  0.7073297322334275  0.6881178207466354
+  POINT  2309  0.732781142897772  0.6876525366319133
+  POINT  2310  0.8451092275234906  0.7073003402816336
+  POINT  2311  0.8319451432516871  0.7298612658539125
+  POINT  2312  0.8567446729963768  0.7293390752979049
+  POINT  2313  -0.01342177230082099  1.280368890685214
+  POINT  2314  -0.03941451368506425  1.280518337353349
+  POINT  2315  0.8337633388822435  0.6850830789145806
+  POINT  2316  0.8218634048277976  0.6630388860969748
+  POINT  2317  0.808409763724355  0.6857783380200354
+  POINT  2318  0.8585628686269332  0.684560888358573
+  POINT  2319  0.5242998146976467  1.412698927847031
+  POINT  2320  0.4981303317417178  1.412185571800635
+  POINT  2321  0.5119329736248488  1.436703775005959
+  POINT  2322  0.3687888847024344  1.412253792939
+  POINT  2323  0.3809518584410367  1.388592947258163
+  POINT  2324  0.5420886924524276  0.2819070959635571
+  POINT  2325  0.5197806491651961  0.2978000499362418
+  POINT  2326  -0.06601718919273455  1.281025972364822
+  POINT  2327  -0.09147385663132482  1.281482924584096
+  POINT  2328  0.5553754604353165  0.5518713344656144
+  POINT  2329  0.5427568556955213  0.5287067072636686
+  POINT  2330  0.5292425379611658  0.5520511375587989
+  POINT  2331  0.5679431972271538  0.5749949497599132
+  POINT  2332  0.5814575149615093  0.5516505194647829
+  POINT  2333  -0.05344835162848643  1.257783925381851
+  POINT  2334  0.1654718142430747  1.06092767582316
+  POINT  2335  0.1349702243383391  1.06092767582316
+  POINT  2336  0.1526371887260865  1.085
+  POINT  2337  0.1954884959668178  1.064778854039989
+  POINT  2338  0.1778215315790703  1.040706529863149
+  POINT  2339  -0.292884160701358  0.7397226361838677
+  POINT  2340  -0.267249438257831  0.739401453234935
+  POINT  2341  -0.280537960716977  0.7159630156131653
+  POINT  2342  -0.2540658143763466  0.762560155289516
+  POINT  2343  -0.2417196143919655  0.7388005347188136
+  POINT  2344  -0.08925865744355274  0.6903162204526178
+  POINT  2345  -0.1021424187732746  0.6673197507801671
+  POINT  2346  -0.1147964179833291  0.6904924107990933
+  POINT  2347  -0.06388808387147789  0.6439508989912732
+  POINT  2348  -0.05106797999765471  0.6670533278028767
+  POINT  2349  -0.03835140563563429  0.6438606663604582
+  POINT  2350  -0.1273725873953375  0.7137693729027902
+  POINT  2351  -0.1402563487250594  0.6907729032303396
+  POINT  2352  -0.02558123994531825  0.6207205738055313
+  POINT  2353  -0.01276113607149507  0.6438230026171348
+  POINT  2354  0.01282986639810862  0.5975052045638749
+  POINT  2355  0.02559914718052082  0.6207204935004642
+  POINT  2356  0.03841998395980848  0.5975427880021315
+  POINT  2357  -0.1891568856985005  0.8296482273549225
+  POINT  2358  -0.164015082682006  0.8288238802108994
+  POINT  2359  -0.1770569021204513  0.8067463603519609
+  POINT  2360  0.013424661199844  1.233756301775906
+  POINT  2361  -0.01342243436578781  1.233756294685595
+  POINT  2362  1.419444815688523e-06  1.257276297460689
+  POINT  2363  0.01342532326481082  1.280368897775525
+  POINT  2364  -0.3664754323470254  0.8816853571439125
+  POINT  2365  -0.3913788961516422  0.8789440593984872
+  POINT  2366  -0.3781167863242682  0.9012007923576599
+  POINT  2367  0.1148263648583884  1.327100799937206
+  POINT  2368  0.1390582892738308  1.327749592889053
+  POINT  2369  0.1271324652916053  1.305323163333326
+  POINT  2370  0.1169390195128873  1.282885174448736
+  POINT  2371  0.1411709439283297  1.283533967400582
+  POINT  2372  -0.195489233472336  1.064778501428914
+  POINT  2373  -0.1654724345052048  1.060927588187288
+  POINT  2374  -0.1778216178069463  1.040706089616202
+  POINT  2375  0.03941801538551458  1.280518370362446
+  POINT  2376  0.0259948236398779  1.303610963586971
+  POINT  2377  0.04142499461223108  1.233974251250634
+  POINT  2378  0.02800114080162758  1.21045424847554
+  POINT  2379  -0.1637380546914567  1.327123096318894
+  POINT  2380  -0.1390540263233427  1.327749554175902
+  POINT  2381  0.05345111745801129  1.257783953062879
+  POINT  2382  0.06802759705979487  1.234481899762512
+  POINT  2383  -0.05036962598528509  0.125379318161032
+  POINT  2384  -0.06570168040718957  0.1021606896941414
+  POINT  2385  -0.02137405933904072  0.1222270298225375
+  POINT  2386  -0.02136035900106343  0.100228158496477
+  POINT  2387  0.06602061783307837  1.281026018874325
+  POINT  2388  0.02599482363985209  0.8963890364130295
+  POINT  2389  0.01342532326478826  0.9196311022244754
+  POINT  2390  0.03941801538549231  0.9194816296375543
+  POINT  2391  -0.01342177230084356  0.9196311093147862
+  POINT  2392  1.419444796660341e-06  0.942723702539311
+  POINT  2393  -0.02599060986509493  0.8963890623318154
+  POINT  2394  -0.03941451368508653  0.9194816626466511
+  POINT  2395  -0.06627313437980681  0.2230270684486483
+  POINT  2396  -0.03983008062122344  0.2217997553538518
+  POINT  2397  -0.09213197251227792  0.2237407935867823
+  POINT  2398  -0.07836147076024955  0.2471513623490211
+  POINT  2399  -0.06515763431672736  0.2703576377083625
+  POINT  2400  -0.09101647244919847  0.2710713628464965
+  POINT  2401  2.23061596795731e-05  0.3878299374956742
+  POINT  2402  -0.01288210770598903  0.411205259324896
+  POINT  2403  0.01292294391754929  0.4112051768985736
+  POINT  2404  -0.05189398635503911  0.2939925999090583
+  POINT  2405  -0.06475427313594329  0.3176545837836728
+  POINT  2406  -0.03883562348530612  0.3173695454868933
+  POINT  2407  -0.03923898466609019  0.270072599411583
+  POINT  2408  1.539591138136238e-05  0.4812664302334266
+  POINT  2409  0.01287929953666053  0.4579234328188976
+  POINT  2410  -0.01284537357339849  0.4579234961423243
+  POINT  2411  -0.03853401327419273  0.5045768294390169
+  POINT  2412  -0.02567286930130706  0.5278594308604252
+  POINT  2413  -0.01284813322579198  0.5045490949782616
+  POINT  2414  0.01287653988426704  0.5045490316548349
+  POINT  2415  0.07754751275582819  0.3412370066804921
+  POINT  2416  0.09061024846465593  0.3178600069613095
+  POINT  2417  0.06481170872887482  0.3176541815003207
+  POINT  2418  0.03878816540163248  0.3644305181444275
+  POINT  2419  0.05161842343586877  0.3879244863669203
+  POINT  2420  0.06457923105428337  0.364525149441996
+  POINT  2421  0.09037777079006448  0.3647309749029848
+  POINT  2422  0.4558759182403792  0.8602986817000235
+  POINT  2423  0.4414743269103389  0.8827383158462117
+  POINT  2424  0.4670742072246578  0.8846210087106462
+  POINT  2425  0.2919664924990176  0.8916114020011411
+  POINT  2426  0.2623833587342755  0.8827556387832489
+  POINT  2427  0.2771006098105682  0.9142485718072941
+  POINT  2428  0.03864044174784259  0.457958601084541
+  POINT  2429  0.02577967226306274  0.4346156669934387
+  POINT  2430  0.03868408612873134  0.4112403451642169
+  POINT  2431  0.06447515178138222  0.4113349764617854
+  POINT  2432  0.08949803744701901  0.6440582959508012
+  POINT  2433  0.07678314854895311  0.6208656588652013
+  POINT  2434  0.06390415364028657  0.6439507140243206
+  POINT  2435  0.2567816928281375  0.5753689348101384
+  POINT  2436  0.2698685338992485  0.5521131836255753
+  POINT  2437  0.2956990365700518  0.5522115315296181
+  POINT  2438  0.2830222954965195  0.5288218912789793
+  POINT  2439  0.2961133342936462  0.5055571135561524
+  POINT  2440  0.2702828316228428  0.5054587656521097
+  POINT  2441  0.2964620672924435  0.458921556064471
+  POINT  2442  0.2836565868332408  0.4355734483334729
+  POINT  2443  0.2705683899607669  0.4588458801982847
+  POINT  2444  0.1161431086203392  0.3648773862578397
+  POINT  2445  0.1031748269187944  0.3881655290193437
+  POINT  2446  0.2937442592827296  0.692671228621745
+  POINT  2447  0.3070350103580715  0.6692363093426321
+  POINT  2448  0.3202500488775036  0.6458992625237185
+  POINT  2449  0.2945239827138391  0.6457221609330619
+  POINT  2450  0.2293611756608254  0.7152306579518284
+  POINT  2451  0.2424536114601926  0.692095009236759
+  POINT  2452  0.2169033091758081  0.6916845259161628
+  POINT  2453  0.2681102110698084  0.6923501745122
+  POINT  2454  0.2556523445847911  0.6688040424765345
+  POINT  2455  0.2805455261581311  0.7159621953819697
+  POINT  2456  0.2417272805503387  0.7388000091309066
+  POINT  2457  0.2161769782659541  0.7383895258103101
+  POINT  2458  0.2672565380881443  0.7394008197439725
+  POINT  2459  0.2928905863010655  0.7397218738535175
+  POINT  2460  0.2540723406932731  0.7625596876024544
+  POINT  2461  -0.6941609825346153  0.7111910686005825
+  POINT  2462  -0.7068139299190737  0.7334984178235546
+  POINT  2463  -0.6812753478728448  0.7342279552430965
+  POINT  2464  -0.7321667892649975  0.7325516351082328
+  POINT  2465  -0.7574423689693386  0.7318673644079862
+  POINT  2466  -0.7192811546032269  0.755588521750747
+  POINT  2467  -0.8218668659347828  0.6630459921287866
+  POINT  2468  -0.8352411111831217  0.6404494917462435
+  POINT  2469  -0.8612539144163792  0.6393737728546571
+  POINT  2470  -0.8870932491813824  0.6384097409424483
+  POINT  2471  -0.8727833030454449  0.6615311789509536
+  POINT  2472  -0.8084128269643962  0.685784956677529
+  POINT  2473  -0.7952816881190585  0.7084610597001406
+  POINT  2474  -0.8337666912189772  0.6850901650709915
+  POINT  2475  -0.2449546202115306  0.3655865890803478
+  POINT  2476  -0.2578955219650158  0.3889044401289972
+  POINT  2477  -0.2448844067024907  0.4121621138850018
+  POINT  2478  -0.2319157665444535  0.435399817334526
+  POINT  2479  -0.2190576301603332  0.4120628184330985
+  POINT  2480  -0.2707536583491361  0.4122414390304248
+  POINT  2481  -0.5242986119479848  0.7873030205502023
+  POINT  2482  -0.5508821796320857  0.7862110391318918
+  POINT  2483  -0.5643027933443369  0.761853990088298
+  POINT  2484  -0.5770836881102119  0.7852798315402423
+  POINT  2485  -0.5023420743401554  0.5988155005562679
+  POINT  2486  -0.5283842030845014  0.5986393146004609
+  POINT  2487  -0.5409136014031002  0.6217852956343375
+  POINT  2488  -0.5543889466319674  0.5983652760157463
+  POINT  2489  -0.5307026991916307  0.4593559938242432
+  POINT  2490  -0.543949239563829  0.4364479275959428
+  POINT  2491  -0.5566695330106178  0.4595421282280471
+  POINT  2492  -0.5173321647527029  0.4824868073070129
+  POINT  2493  -0.5046118713059141  0.4593926066749086
+  POINT  2494  -0.5696415206753326  0.4821779525248904
+  POINT  2495  -0.5828880610475309  0.4592698862965899
+  POINT  2496  -0.5561561610246415  0.5054905656261184
+  POINT  2497  -0.5300222668556939  0.5056700755384465
+  POINT  2498  -0.5814573040814732  0.5516546049565487
+  POINT  2499  -0.6077661094380876  0.5513656387619075
+  POINT  2500  -0.5804718118513246  0.5981447650834155
+  POINT  2501  -0.5679424135327258  0.574998784049539
+  POINT  2502  -0.2964460407684013  0.4589230850375954
+  POINT  2503  -0.3223457974218755  0.4589962800376966
+  POINT  2504  -0.2836385447921171  0.4355749347404818
+  POINT  2505  -0.270550039062895  0.458847263083543
+  POINT  2506  -0.3355076159901785  0.4357019824880481
+  POINT  2507  -0.3483188669144307  0.4590475058312106
+  POINT  2508  -0.2966496600546423  0.4123172609844771
+  POINT  2509  -0.2687692201447673  0.6455651852271611
+  POINT  2510  -0.2556423527560852  0.66880494026592
+  POINT  2511  -0.2431118180534416  0.645309886415541
+  POINT  2512  -0.2937362190039574  0.6926722188198191
+  POINT  2513  -0.3070266461903051  0.669237490669483
+  POINT  2514  -0.2945144522968954  0.6457233559829886
+  POINT  2515  -0.2819839175942519  0.6222283021326096
+  POINT  2516  -0.2681014965604304  0.6923510358708864
+  POINT  2517  -0.2424440944691047  0.6920957370592663
+  POINT  2518  -0.5314783828490774  0.4132994533863756
+  POINT  2519  -0.5574452166680646  0.4134855877901795
+  POINT  2520  -0.4918785122038183  0.4361293924077118
+  POINT  2521  -0.4785079777648905  0.4592602058904815
+  POINT  2522  -0.4524468854138654  0.4592452036573691
+  POINT  2523  -0.4263466658173802  0.4591659147582597
+  POINT  2524  -0.4396743990663096  0.4359177027241753
+  POINT  2525  -0.4268643705599666  0.4125179833239571
+  POINT  2526  -0.4529645901564516  0.4125972722230664
+  POINT  2527  -0.4131008282574771  0.4824639506007261
+  POINT  2528  -0.3997973623478441  0.5057699978155803
+  POINT  2529  -0.373851140526352  0.5057451107369894
+  POINT  2530  -0.3611197763480729  0.4823881444454289
+  POINT  2531  -0.3742815949163759  0.4590938468957804
+  POINT  2532  -0.4003283419099213  0.4591364496675323
+  POINT  2533  -0.3875274324762791  0.435795811053314
+  POINT  2534  -0.4006923724327067  0.4124824710530491
+  POINT  2535  -0.4139825635228488  0.3891620405519403
+  POINT  2536  -0.3746456254391613  0.4124398682812973
+  POINT  2537  -0.6088248682915374  0.4588263885061722
+  POINT  2538  -0.6356950672090191  0.4579239063280384
+  POINT  2539  -0.5958528806268226  0.4361905642093289
+  POINT  2540  -0.6922410986665386  0.4533369045121426
+  POINT  2541  -0.6624607506170971  0.4553561871767229
+  POINT  2542  -0.6485553712789069  0.4331793472675958
+  POINT  2543  -0.6331746184819997  0.4137394393522916
+  POINT  2544  -0.6599403018900777  0.4111717202009762
+  POINT  2545  -0.7026495642401438  0.4235705320850099
+  POINT  2546  -0.685690281548093  0.4063137665302243
+  POINT  2547  -0.7132275880957658  0.3990674728769562
+  POINT  2548  -0.6703095287511855  0.3868738586149202
+  POINT  2549  -0.3687855086212081  0.7877471092936887
+  POINT  2550  -0.3943920050335076  0.7876587965787116
+  POINT  2551  -0.3809492249105962  0.8114078360519487
+  POINT  2552  -0.3674539456651398  0.8346793918664916
+  POINT  2553  -0.3930604420774392  0.8345910791515145
+  POINT  2554  -0.4201830170185911  0.7876815257626915
+  POINT  2555  -0.4459529421095494  0.7879857138034361
+  POINT  2556  -0.432325646413854  0.8116237113777163
+  POINT  2557  -0.4080193007292029  0.7640207990044314
+  POINT  2558  -0.8152878724369238  1.078855392465468
+  POINT  2559  -0.7892199012647436  1.079398042009903
+  POINT  2560  -0.7872799108161198  1.206100583171254
+  POINT  2561  -0.7737929108022608  1.184071430000253
+  POINT  2562  -0.8141249811528282  1.163494522915267
+  POINT  2563  -0.8404096765293773  1.163771441449857
+  POINT  2564  -0.8268481821912196  1.184976749296061
+  POINT  2565  -0.562997909260267  0.8582921596452544
+  POINT  2566  -0.5770708581080048  0.8325943506173077
+  POINT  2567  -0.5771873625625351  0.8815251073724677
+  POINT  2568  -0.5497066300047533  0.8842654463669429
+  POINT  2569  -0.5170252424126414  0.8934944313797962
+  POINT  2570  -0.5312146957149094  0.9167273791070094
+  POINT  2571  -0.5204810166117203  0.9403618947863438
+  POINT  2572  -0.5521244282855758  0.9325082343973012
+  POINT  2573  -0.4959853681650557  0.8370014436022972
+  POINT  2574  -0.4697851844025825  0.8370549716012992
+  POINT  2575  -0.4842957552672856  0.811874371419459
+  POINT  2576  -0.508495987001419  0.8616072712119336
+  POINT  2577  -0.490004052711575  0.8940692039520001
+  POINT  2578  -0.4761907297653662  0.9150811726788727
+  POINT  2579  -0.4670734146860007  0.884621263628866
+  POINT  2580  -0.7321209753702294  0.7775325750105413
+  POINT  2581  -0.7067681160243056  0.778479357725863
+  POINT  2582  -0.7572284992556203  0.776468830111523
+  POINT  2583  -0.744715460676699  0.7993596660866391
+  POINT  2584  -0.6631519223162959  1.195128060776241
+  POINT  2585  -0.6860964672519736  1.207798354190881
+  POINT  2586  -0.6713315176055095  1.166708012845704
+  POINT  2587  -0.6422797965005942  1.175515557967655
+  POINT  2588  -0.7079410661226311  1.206812250625812
+  POINT  2589  -0.719612989105531  1.184881772446662
+  POINT  2590  0.06457923105452151  1.835474850558005
+  POINT  2591  0.07754751275607977  1.858762993319508
+  POINT  2592  0.09037777079028989  1.835269025097016
+  POINT  2593  0.05161842343608678  1.81207551363308
+  POINT  2594  0.1031748269189957  1.811834470980657
+  POINT  2595  0.06447515178158006  1.788665023538215
+  POINT  2596  0.09022956605757881  1.788573757767915
+  POINT  2597  0.01303554245795609  1.88271401426388
+  POINT  2598  3.409909271902094e-05  1.90629252749653
+  POINT  2599  0.03889625395490795  1.882630717692918
+  POINT  2600  0.01304426221803929  1.930244135319612
+  POINT  2601  -0.01296517357874619  1.930244046210803
+  POINT  2602  0.02631555828410829  1.953879172063716
+  POINT  2603  0.0393148309555735  1.929927653349444
+  POINT  2604  0.1326580354730163  2.043745070552762
+  POINT  2605  0.1439221224949577  2.019534090087531
+  POINT  2606  0.1195477301891869  2.021837176074499
+  POINT  2607  0.1686821411894588  2.018296008900047
+  POINT  2608  0.1555718359056294  1.996388114421784
+  POINT  2609  0.180677280895602  2.039036836399819
+  POINT  2610  0.1923269943062738  2.015890860734072
+  POINT  2611  0.1463516047801751  2.066097979780999
+  POINT  2612  0.1701692352902293  2.062248940285956
+  POINT  2613  0.1595348512405214  2.087192296991657
+  POINT  2614  -0.01281947274875637  0.873583865475285
+  POINT  2615  -0.03881221413299935  0.8734344188071499
+  POINT  2616  0.01282456007469166  0.8735838503085781
+  POINT  2617  2.955806787248785e-06  0.8506292067839125
+  POINT  2618  0.03881725219539571  0.873434377721657
+  POINT  2619  -0.01461881405745486  1.013476638882552
+  POINT  2620  1.778220531014479e-07  1.037189583176588
+  POINT  2621  -0.02799955197874889  0.989545745063062
+  POINT  2622  -0.04261917342543117  1.013258682946425
+  POINT  2623  -0.01342243436580387  0.9662437053144051
+  POINT  2624  -0.04142279373378017  0.9660257493782789
+  POINT  2625  0.01366164147528756  1.978517265727205
+  POINT  2626  0.03993221021282176  1.978200783757037
+  POINT  2627  0.7026443288123996  1.776435597230984
+  POINT  2628  0.6856850270739403  1.793692083337532
+  POINT  2629  0.7132215200510186  1.800938701553934
+  POINT  2630  0.6599358656403428  1.788833864670254
+  POINT  2631  0.6200208989117773  1.807600926175965
+  POINT  2632  0.6072612897326315  1.824373793216776
+  POINT  2633  0.585305173661954  1.832483213471998
+  POINT  2634  0.5702300802614326  1.808297545222425
+  POINT  2635  0.4600679629056943  1.966751491090177
+  POINT  2636  0.4803642369967909  1.977069096374106
+  POINT  2637  0.4825229759492946  1.954453047042799
+  POINT  2638  0.06602061783305657  0.9189739811256757
+  POINT  2639  0.09147713039084808  0.9185170140218819
+  POINT  2640  0.07744402831834765  0.8957825967223145
+  POINT  2641  0.1055156090275763  0.9403062099546264
+  POINT  2642  0.1169390195128674  0.9171148255512653
+  POINT  2643  0.5079574480831955  1.88261164708408
+  POINT  2644  0.5197806491652076  1.902199950063758
+  POINT  2645  0.4794484544971984  1.926788367576012
+  POINT  2646  0.4995872683653463  1.936818475405259
+  POINT  2647  0.518820790200475  1.925046749911156
+  POINT  2648  0.5220280546541946  1.952928314780297
+  POINT  2649  0.204788933199306  1.994870359051261
+  POINT  2650  0.2174921059330041  1.972313749324844
+  POINT  2651  0.1930350273338286  1.972593423507883
+  POINT  2652  0.2167840729054492  2.015611186551033
+  POINT  2653  0.3105578434203357  1.999367695545033
+  POINT  2654  0.3235995960290726  1.972597661386743
+  POINT  2655  0.2966447870441568  1.977671539620049
+  POINT  2656  0.3490238118150839  1.971567969502422
+  POINT  2657  0.3351107554389051  1.949871813577438
+  POINT  2658  0.3587083184300359  1.990819071631404
+  POINT  2659  0.3702194778398684  1.968093223822099
+  POINT  2660  0.353554751048667  2.011743015155286
+  POINT  2661  0.3308771621506708  2.020134048598914
+  POINT  2662  0.3470207240960796  2.037857460943737
+  POINT  2663  0.2449793534885306  1.834414718396244
+  POINT  2664  0.2320937351080738  1.857728519769502
+  POINT  2665  0.7858744358458595  1.645343768850453
+  POINT  2666  0.8105607926883188  1.646393779029849
+  POINT  2667  0.8107876120856172  1.60296085792637
+  POINT  2668  0.8242026416352581  1.625551755323319
+  POINT  2669  0.8367052499582527  1.647653471359671
+  POINT  2670  0.7852942463171467  1.602326969758248
+  POINT  2671  0.7732042272273081  1.624253148562054
+  POINT  2672  0.7607608548099571  1.645134921304652
+  POINT  2673  0.1549288436459035  1.904604567899542
+  POINT  2674  0.1676728261331525  1.881202038427968
+  POINT  2675  0.193407124874434  1.881050245347149
+  POINT  2676  -0.01281001731475896  1.602494750567753
+  POINT  2677  1.081946453755124e-05  1.625672456066086
+  POINT  2678  -0.03840028687889888  1.60245708682443
+  POINT  2679  0.1928908047239886  1.694863668650667
+  POINT  2680  0.2059238077114699  1.718108228712403
+  POINT  2681  0.1673509917946245  1.741575468346997
+  POINT  2682  0.1543955615432689  1.718328270372372
+  POINT  2683  0.05146501024241125  1.718678827033279
+  POINT  2684  0.03864044174801336  1.742041398915459
+  POINT  2685  0.01287929953683342  1.742076567181102
+  POINT  2686  1.5395911539191e-05  1.718733569766574
+  POINT  2687  -0.01284537357322561  1.742076503857676
+  POINT  2688  0.3083638810431136  1.624396235549455
+  POINT  2689  0.3215176426403861  1.647687527896051
+  POINT  2690  0.3474061196894083  1.647620759840413
+  POINT  2691  0.3600578736282795  1.624246045210258
+  POINT  2692  0.3467661162518118  1.600859657691933
+  POINT  2693  0.3209607541733517  1.600955090430488
+  POINT  2694  0.4620407002213602  1.530688464881996
+  POINT  2695  0.4744829222011997  1.507180091475853
+  POINT  2696  0.2838216037511633  1.857594076883031
+  POINT  2697  0.2707918770338095  1.880935915205607
+  POINT  2698  0.2967064352548833  1.88087671682787
+  POINT  2699  0.6064342168647563  1.602147462690252
+  POINT  2700  0.5804722527022674  1.601859103591726
+  POINT  2701  0.5679431972271747  1.625005050240087
+  POINT  2702  0.5543901981760777  1.601638288590894
+  POINT  2703  0.5553754604353389  1.648128665534386
+  POINT  2704  0.5814575149615286  1.648349480535217
+  POINT  2705  0.5292425379611922  1.647948862441201
+  POINT  2706  0.5158199326774433  1.624607781485719
+  POINT  2707  0.5032013279376506  1.647772408687665
+  POINT  2708  0.5300239409715504  1.694333589321819
+  POINT  2709  0.5039342821156333  1.694296677347413
+  POINT  2710  0.5561568634456971  1.694513392415004
+  POINT  2711  0.5427568556955462  1.671293292736332
+  POINT  2712  -0.4683189808484027  1.90665387423491
+  POINT  2713  -0.4794501888301393  1.926785400903497
+  POINT  2714  -0.5188244024061381  1.92504342116055
+  POINT  2715  -0.519783417397538  1.902196454765794
+  POINT  2716  -0.5420931265372261  1.918089341134839
+  POINT  2717  -0.4995906038781901  1.936815471220705
+  POINT  2718  -0.522033062066741  1.952925250012697
+  POINT  2719  -0.2047508561631258  1.994870147711013
+  POINT  2720  -0.2167522204903552  2.015612078398831
+  POINT  2721  -0.1922870228686676  2.015892705577174
+  POINT  2722  -0.192993261601161  1.972593355073971
+  POINT  2723  -0.1686310362983917  2.018298475933798
+  POINT  2724  -0.1555148550768918  1.996389090750134
+  POINT  2725  -0.2564017635489396  1.999514881322947
+  POINT  2726  -0.2704265327686053  1.977812102481407
+  POINT  2727  -0.296663988682994  1.927559006211113
+  POINT  2728  -0.2834687403316787  1.951042329092913
+  POINT  2729  -0.27046084057546  1.927700639967791
+  POINT  2730  -0.3350997888630511  1.949870551853499
+  POINT  2731  -0.3235890235891484  1.972597131619066
+  POINT  2732  -0.2966296808761393  1.977670468724729
+  POINT  2733  -0.310546816026075  1.999366905007559
+  POINT  2734  -0.2448808996986042  1.880924904386949
+  POINT  2735  -0.2577674591097115  1.904207594518505
+  POINT  2736  -0.2187898469767658  1.927116903604803
+  POINT  2737  -0.2445722107583962  1.927690917400305
+  POINT  2738  -0.244954620211398  1.834413410919653
+  POINT  2739  -0.2578955219648943  1.811095559871003
+  POINT  2740  -0.2448844067023676  1.787837886114998
+  POINT  2741  -0.2190576301601992  1.787937181566902
+  POINT  2742  -0.3747493941036181  2.008267578794626
+  POINT  2743  -0.3535516912797422  2.011742816043414
+  POINT  2744  -0.3934130036650753  2.019361848538008
+  POINT  2745  -0.2375966540947675  2.01412276012157
+  POINT  2746  -0.2251328208003094  2.035145317987731
+  POINT  2747  -0.2386111897448824  2.053275759672361
+  POINT  2748  -0.2636376709971253  2.0466382190874
+  POINT  2749  -0.2563575494494162  2.066582022820769
+  POINT  2750  -0.2647823638588938  2.019048120911846
+  POINT  2751  -0.2824427804512973  2.032030340288776
+  POINT  2752  -0.07726039640682882  1.765257462264359
+  POINT  2753  -0.06443608475266131  1.788664635979008
+  POINT  2754  -0.02574307518169017  1.765384187015701
+  POINT  2755  -0.03864371293954186  1.7887594264186
+  POINT  2756  -0.0386069788069844  1.742041189601172
+  POINT  2757  0.9241429592442079  1.274186186479647
+  POINT  2758  0.9368941516810193  1.297834954113468
+  POINT  2759  0.9630920970432664  1.288557581301431
+  POINT  2760  0.9843447339259433  1.276253921352871
+  POINT  2761  0.9677767226117392  1.262394835682235
+  POINT  2762  0.8337633388822454  1.51491692108542
+  POINT  2763  0.8451092275234924  1.492699659718367
+  POINT  2764  0.8084097637243579  1.514221661979965
+  POINT  2765  0.8319451432516897  1.470138734146088
+  POINT  2766  0.7952790079837003  1.491545111023086
+  POINT  2767  0.8074471873676758  1.469555718924934
+  POINT  2768  0.9677767226117397  0.9376051643177659
+  POINT  2769  0.9843447339259433  0.9237460786471298
+  POINT  2770  0.963092097043267  0.9114424186985692
+  POINT  2771  0.9426645085467076  0.948558562238446
+  POINT  2772  0.9241429592442079  0.9258138135203534
+  POINT  2773  0.121629348905091  0.9633221257989399
+  POINT  2774  0.3616810060111013  0.2958184482176459
+  POINT  2775  0.3741797515129772  0.2733480186879637
+  POINT  2776  0.879025248221952  0.773505086764771
+  POINT  2777  0.8674579403327862  0.7517047030577586
+  POINT  2778  0.8551478966137391  0.7737003845771961
+  POINT  2779  0.8806220246045897  0.7291437774854799
+  POINT  2780  0.9052624887633097  0.7288471596532518
+  POINT  2781  0.9145571673921471  0.7521384110455851
+  POINT  2782  0.9287764515652552  0.729359604174271
+  POINT  2783  0.8945492214269004  0.706481531893398
+  POINT  2784  0.8891937746338803  0.7954363884453686
+  POINT  2785  0.8788685345877028  0.8165682098050642
+  POINT  2786  0.9013471047186781  0.8165038299662243
+  POINT  2787  0.9015038183529274  0.7734407069259311
+  POINT  2788  0.9329092126761621  0.7980153183794907
+  POINT  2789  0.9462655865016076  0.7766094624099704
+  POINT  2790  0.9247256938040753  0.7740697127261826
+  POINT  2791  0.8643223110496706  0.9492850554164199
+  POINT  2792  0.8378306026054134  0.9495172494183357
+  POINT  2793  0.8522956328716669  0.9713871502885372
+  POINT  2794  0.8756356821712966  0.9269017720919102
+  POINT  2795  0.8795716054504412  1.015005280200564
+  POINT  2796  0.8659597495193936  0.9929497202422699
+  POINT  2797  0.8394680410751364  0.9931819142441856
+  POINT  2798  0.8901007124375511  1.251228327037889
+  POINT  2799  0.8643223110496721  1.250714944583581
+  POINT  2800  0.8665376830375928  1.036176263633515
+  POINT  2801  0.8404090030129441  1.036227222829855
+  POINT  2802  0.8538145283276738  1.057659002265452
+  POINT  2803  0.892977130765171  1.036437059636162
+  POINT  2804  0.9657211024305934  1.145374298736897
+  POINT  2805  0.9431232588334175  1.161838095903088
+  POINT  2806  -0.03819585699817833  1.417997476590637
+  POINT  2807  -0.01272666408757827  1.418017027367393
+  POINT  2808  -0.05088922824276616  1.440825169199406
+  POINT  2809  -0.03821399679395823  1.463876305608539
+  POINT  2810  -0.01272556871414092  1.463926522860351
+  POINT  2811  0.03822496354416707  1.46387638270692
+  POINT  2812  0.05089895965938743  1.440825249339203
+  POINT  2813  0.01273663190329289  1.463926544119057
+  POINT  2814  4.94520716473601e-06  1.440924056463207
+  POINT  2815  0.0382046587651745  1.417997529098808
+  POINT  2816  0.06363647259996337  1.417898700716099
+  POINT  2817  0.02547304947043149  1.395090500002994
+  POINT  2818  0.01273553652985554  1.418017048626099
+  POINT  2819  -0.1648228649753082  1.416692547647412
+  POINT  2820  -0.1899646679918049  1.41586820050339
+  POINT  2821  -0.7085383453729526  1.332561790528044
+  POINT  2822  -0.7338058161932346  1.334009482698351
+  POINT  2823  -0.7203950816929017  1.355025998731653
+  POINT  2824  0.4014042713252098  0.2700361114883787
+  POINT  2825  0.2563711264786659  0.1334215781903364
+  POINT  2826  0.1934071248742473  0.3189497546528511
+  POINT  2827  0.2190946032534457  0.3189986231502477
+  POINT  2828  0.2062213034418013  0.2957521420813347
+  POINT  2829  -0.3732726412974596  1.647569492876618
+  POINT  2830  -0.3473960439718148  1.647618945727552
+  POINT  2831  -0.3600489085666498  1.62424417456815
+  POINT  2832  -0.3992188631189578  1.647544605798027
+  POINT  2833  -0.3335355235191291  1.577517918650092
+  POINT  2834  -0.3467571042664703  1.600857968803852
+  POINT  2835  -0.3726337015921151  1.600808515952918
+  POINT  2836  -0.3852104684419176  1.577408116556651
+  POINT  2837  -0.3985022727420972  1.600794322320949
+  POINT  2838  -0.4597858978608877  1.436072531408077
+  POINT  2839  -0.4459529421095333  1.412014286196564
+  POINT  2840  -0.4719285272561546  1.412130345793053
+  POINT  2841  -0.4258156862552557  1.694200537093693
+  POINT  2842  -0.4131008282574248  1.717536049399274
+  POINT  2843  -0.4518159218725598  1.694223308459595
+  POINT  2844  -0.438512455962925  1.670917261244741
+  POINT  2845  -0.3486570945636606  1.880720813636993
+  POINT  2846  -0.3226218639413143  1.880716433476767
+  POINT  2847  -0.3357543849909934  1.857537636776376
+  POINT  2848  -0.3095903312203784  1.904058463711688
+  POINT  2849  -0.3480261314004355  1.926370009354073
+  POINT  2850  -0.361671148838889  1.904179638889593
+  POINT  2851  -0.3748036698885681  1.881000842189201
+  POINT  2852  -0.3225982309765971  1.92740015283681
+  POINT  2853  -0.3347298011327204  1.671011233784087
+  POINT  2854  -0.3219984369544346  1.694368200075648
+  POINT  2855  -0.3215060684019106  1.647685915475618
+  POINT  2856  -0.2956862105641265  1.647787037825868
+  POINT  2857  -0.2687692201447074  1.554434814772839
+  POINT  2858  -0.2556423527560285  1.53119505973408
+  POINT  2859  -0.2945144522968403  1.554276644017012
+  POINT  2860  -0.2293523004592573  1.484768754075561
+  POINT  2861  -0.242444094469051  1.507904262940734
+  POINT  2862  -0.2681014965603805  1.507648964129114
+  POINT  2863  -0.2805379607169332  1.484036984386835
+  POINT  2864  -0.2937362190039107  1.507327781180182
+  POINT  2865  -0.1158190029507613  1.741801896277877
+  POINT  2866  -0.1415760124474334  1.741684827819782
+  POINT  2867  -0.154370107347698  1.718327520320757
+  POINT  2868  -0.11568179744263  1.695199662635684
+  POINT  2869  -0.1413872530716158  1.695092945752663
+  POINT  2870  0.7853447977159104  1.292628343809675
+  POINT  2871  0.7734550239077436  1.270625052348054
+  POINT  2872  0.760133164306389  1.291918002699779
+  POINT  2873  0.8104051256456404  1.29352700504047
+  POINT  2874  0.78633115002302  1.249419392728165
+  POINT  2875  0.8242619690503419  1.271960119455866
+  POINT  2876  -0.8891962941400597  0.7954431287585819
+  POINT  2877  -0.8788708474587685  0.8165743955116899
+  POINT  2878  -0.855553962972978  0.817587400603682
+  POINT  2879  -0.8317231101266098  0.8181604631087254
+  POINT  2880  -0.842886722450666  0.7960801525961234
+  POINT  2881  -0.8677072351347124  0.8386547060242918
+  POINT  2882  -0.8551504360858646  0.7737067858561996
+  POINT  2883  -0.8313195832394964  0.774279848361243
+  POINT  2884  -0.8674607939687391  0.7517116524494881
+  POINT  2885  -0.8790279331799086  0.7735119566843686
+  POINT  2886  -0.9635702350740019  0.9609290012787612
+  POINT  2887  -0.9426655041399603  0.9485630501634923
+  POINT  2888  -0.9677776775622386  0.9376104003155969
+  POINT  2889  -0.966552031748537  0.9842704012060155
+  POINT  2890  -0.9460351123335401  0.9950666294409165
+  POINT  2891  -0.9919388674548592  0.9732826640416895
+  POINT  2892  -0.8643233019849546  0.9492884269522859
+  POINT  2893  -0.837831577614073  0.9495203471491918
+  POINT  2894  -0.9843457811105139  0.9237519270745573
+  POINT  2895  -0.9630933168538749  0.9114482379501212
+  POINT  2896  -0.9531159528267146  0.8883744311841169
+  POINT  2897  -0.9742911853903737  0.8747075543418724
+  POINT  2898  -0.9368955826010368  0.9021706424343237
+  POINT  2899  0.167672826132947  0.3187979615720326
+  POINT  2900  0.1805461259445914  0.3420444426409456
+  POINT  2901  0.142067844716015  0.3184901200885523
+  POINT  2902  0.1933706155425582  0.3653985076719871
+  POINT  2903  0.2062562339230306  0.3887123090452457
+  POINT  2904  0.2191660430663641  0.3655100370950227
+  POINT  2905  -0.8801227555452171  1.1
+  POINT  2906  -0.8669896430765252  1.078804538412766
+  POINT  2907  -0.8408609714632165  1.078855392465469
+  POINT  2908  -0.8284623684091541  1.1
+  POINT  2909  -0.8408609714632163  1.121144607534532
+  POINT  2910  -0.8152878724369237  1.121144607534532
+  POINT  2911  -0.9320792953230057  1.1
+  POINT  2912  -0.9452918810085722  1.079038018438606
+  POINT  2913  -0.9783780333094576  1.075589250652737
+  POINT  2914  -0.9997018354559252  1.075581970061974
+  POINT  2915  -0.978974273495512  1.1
+  POINT  2916  -0.9783780333094576  1.124410749347263
+  POINT  2917  -0.9997018354559252  1.124418029938026
+  POINT  2918  -0.7073677738319613  1.376577447787844
+  POINT  2919  -0.7326352446522433  1.378025139958151
+  POINT  2920  -0.694077962289824  1.398222341346196
+  POINT  2921  -0.6818377993304823  1.375223200119698
+  POINT  2922  -0.757228499255616  1.423531169888477
+  POINT  2923  -0.7822049698244475  1.424316212975855
+  POINT  2924  -0.7696104845179772  1.446143304051953
+  POINT  2925  -0.7944394270831905  1.402525431855606
+  POINT  2926  -0.8068214123455517  1.425137566019082
+  POINT  2927  -0.7447154606766946  1.400640333913361
+  POINT  2928  -0.7321209753702242  1.422467424989458
+  POINT  2929  -0.757742768537635  1.379088884857169
+  POINT  2930  -0.8313195832394938  1.425720151638757
+  POINT  2931  -0.8190851259807508  1.447510932759006
+  POINT  2932  0.2320937351079254  0.3422714802304975
+  POINT  2933  0.2449793534883978  0.365585281603756
+  POINT  2934  0.167636316801258  0.3652467145911685
+  POINT  2935  -0.9495790216956155  1.357608623582285
+  POINT  2936  -0.9617809404832132  1.37382005500552
+  POINT  2937  -0.9422877331206317  1.383218955093032
+  POINT  2938  0.2449079136754794  0.319073867658981
+  POINT  2939  0.1675103124617005  0.4118340070285852
+  POINT  2940  0.1803369722649089  0.4351833301926523
+  POINT  2941  0.1932874662024331  0.4119501027862773
+  POINT  2942  0.219082893726239  0.4120616322093128
+  POINT  2943  -0.3587038615630018  0.2091816693468968
+  POINT  2944  -0.3702146268369063  0.2319082491124611
+  POINT  2945  -0.3490169240130396  0.2284330118636753
+  POINT  2946  -0.3535516912797776  0.1882571839565941
+  POINT  2947  -0.3308724928076181  0.1798655885295797
+  POINT  2948  -0.3470195026008582  0.1621420870864006
+  POINT  2949  -0.3105468160261466  0.2006330949924446
+  POINT  2950  -0.2564017635490651  0.2004851186770537
+  POINT  2951  -0.270426532768719  0.2221878975185947
+  POINT  2952  -0.243240823004626  0.2271132583088702
+  POINT  2953  -0.2375966540949072  0.1858772398784365
+  POINT  2954  -0.1053938438722574  0.2009945465377531
+  POINT  2955  -0.1174821802527001  0.2251188404381259
+  POINT  2956  -0.1194686319080044  0.1781602491775884
+  POINT  2957  -0.1937799709013283  0.140151518747593
+  POINT  2958  -0.2073206705198589  0.1217269606213222
+  POINT  2959  -0.217766756140612  0.1452349220503995
+  POINT  2960  -0.2251328208004578  0.1648546820122851
+  POINT  2961  -0.2167522204905226  0.1843879216011778
+  POINT  2962  -0.204750856163322  0.2051298522889908
+  POINT  2963  -0.1922870228688727  0.1841072944228394
+  POINT  2964  0.7880563618837664  1.037047071892657
+  POINT  2965  0.8016178812889185  1.058252720150169
+  POINT  2966  0.814124328897873  1.03650431320428
+  POINT  2967  0.7872792261107471  0.9938976364741942
+  POINT  2968  0.8131833669600652  0.9934590046186105
+  POINT  2969  0.7998997835780914  0.9720579761460366
+  POINT  2970  0.8268474836077919  1.015021574572343
+  POINT  2971  0.7612858534569118  1.037675613861573
+  POINT  2972  0.7310724137989539  1.04186265470977
+  POINT  2973  0.7453364746168541  1.062982519686742
+  POINT  2974  0.7737923010658663  1.015927206915684
+  POINT  2975  0.7605087176838925  0.9945261784431102
+  POINT  2976  0.7661340859320263  1.079397739419273
+  POINT  2977  0.7359206462740685  1.08358478026747
+  POINT  2978  0.6895998025765886  0.9514039084176589
+  POINT  2979  0.6744679356861292  0.9356740626569682
+  POINT  2980  0.6648570658973707  0.954992724945019
+  POINT  2981  0.8555518672793385  0.8175816180765012
+  POINT  2982  0.8677051973641363  0.8386490595973568
+  POINT  2983  0.1547004855741469  0.3884563599982044
+  POINT  2984  0.1417499916366226  0.4116895874045794
+  POINT  2985  0.1418759959761801  0.3651022949671628
+  POINT  2986  0.8367052499582528  0.5523465286403295
+  POINT  2987  0.8105607926883178  0.5536062209701517
+  POINT  2988  0.8242026416352572  0.5744482446766814
+  POINT  2989  0.1463516047798782  0.1339020202189682
+  POINT  2990  0.1219772124740269  0.1315989342320008
+  POINT  2991  0.159534851240275  0.1128077030083028
+  POINT  2992  0.807447187367673  0.7304442810750669
+  POINT  2993  0.8190826328405592  0.7524830160913381
+  POINT  2994  0.9090501674264286  0.6833133154251484
+  POINT  2995  0.884125206994277  0.6837403394914854
+  POINT  2996  0.8727793183530299  0.6615230781244323
+  POINT  2997  0.8870887851205516  0.6384011619237503
+  POINT  2998  0.861249684764014  0.6393657245747775
+  POINT  2999  0.0652302857294686  0.2703572458437954
+  POINT  3000  0.09108161431165221  0.2710710423023391
+  POINT  3001  0.1035991533332207  0.2946823861990578
+  POINT  3002  0.02906699841991087  0.1466879099877493
+  POINT  3003  0.3585576302186302  0.6694872894719401
+  POINT  3004  0.3709784057371413  0.6930924996377441
+  POINT  3005  0.3967705144022402  0.6931284541662837
+  POINT  3006  0.3833947362238573  0.7166597857934361
+  POINT  3007  0.3985091019519451  0.5992035930455094
+  POINT  3008  0.4244420385415923  0.5991847917090443
+  POINT  3009  0.4118661967327816  0.5757844032181435
+  POINT  3010  0.4370150631439248  0.6225202812225916
+  POINT  3011  0.4503721579247613  0.5991010913952257
+  POINT  3012  0.4889282285334068  0.6222464448320605
+  POINT  3013  0.4754656323321949  0.6457881730814992
+  POINT  3014  0.5014486783385079  0.6455980370047865
+  POINT  3015  0.4350833035770055  0.7165978960580228
+  POINT  3016  0.421500011342832  0.740368930210584
+  POINT  3017  0.4473964700308812  0.740271085946631
+  POINT  3018  0.4733716264669791  0.7401548164172533
+  POINT  3019  0.4597883342328056  0.7639258505698145
+  POINT  3020  0.5158199326774155  0.5753922185142807
+  POINT  3021  0.5032013279376204  0.5522275913123349
+  POINT  3022  0.502344998596795  0.5988124905115823
+  POINT  3023  0.5283862086203404  0.5986360367580462
+  POINT  3024  0.476361952590482  0.599002626588295
+  POINT  3025  0.4637889279881495  0.5756671370747475
+  POINT  3026  0.08896774923070291  1.417784054971024
+  POINT  3027  0.1143346954366387  1.417534015119635
+  POINT  3028  0.07627344833648998  1.394956334730629
+  POINT  3029  0.5508830750377773  1.4137911622812
+  POINT  3030  0.5770841680864116  1.414722641591162
+  POINT  3031  0.5370804331546464  1.389272959075876
+  POINT  3032  0.549590820323383  1.364666914436265
+  POINT  3033  0.5230075599832524  1.363574680002096
+  POINT  3034  0.07333017808851476  0.1268880097586741
+  POINT  3035  0.09845802958240367  0.1289437202525601
+  POINT  3036  0.06587245777886791  0.1021719490282051
+  POINT  3037  0.05055305593914149  0.1253843588885193
+  POINT  3038  0.7359206462740686  1.11641521973253
+  POINT  3039  0.7151230349588965  1.1
+  POINT  3040  0.7469855868937045  1.312734636532138
+  POINT  3041  0.7350958130855378  1.290731345070517
+  POINT  3042  0.7338047832844619  1.334012664398534
+  POINT  3043  0.2436328066240513  1.224696835708564
+  POINT  3044  0.2210122047266141  1.228229497806077
+  POINT  3045  0.2387210626959564  1.250436030977705
+  POINT  3046  0.2000412850460709  1.209187107518196
+  POINT  3047  0.2162420219164395  1.178949385625486
+  POINT  3048  0.1902059846622324  1.18629503688256
+  POINT  3049  0.1935446757021942  1.236190172132978
+  POINT  3050  0.3030306422958128  1.339541296790322
+  POINT  3051  0.3177478933720976  1.308048363766277
+  POINT  3052  0.2919664924990257  1.308388597998859
+  POINT  3053  0.1121830258763612  0.1063124390910272
+  POINT  3054  0.5312152727586936  1.283272654425654
+  POINT  3055  0.55212498453758  1.267491662740994
+  POINT  3056  0.5204817563689089  1.259637546906306
+  POINT  3057  0.5170260021159334  1.306505923612442
+  POINT  3058  0.5497072177947495  1.315735366175698
+  POINT  3059  0.4842972507862281  1.388126979149091
+  POINT  3060  0.4719304097134303  1.41213182630802
+  POINT  3061  0.4459552532773341  1.412015556778642
+  POINT  3062  0.4323276800484788  1.388377285466941
+  POINT  3063  0.6200208989117694  0.3923990738240358
+  POINT  3064  0.608636829318345  0.4144068621409202
+  POINT  3065  0.631795494258068  0.3749535789081534
+  POINT  3066  0.6072612897326238  0.3756262067832246
+  POINT  3067  0.6394930946543129  0.3534357286671079
+  POINT  3068  0.5633085147008725  0.2963449813367262
+  POINT  3069  0.5625339662120824  0.2732258247515809
+  POINT  3070  0.5590861021773605  0.3233578835839263
+  POINT  3071  0.5793460654610763  0.314948969109697
+  POINT  3072  0.6019478252094754  0.3014645807945758
+  POINT  3073  0.5975686591236485  0.3286854300869397
+  POINT  3074  0.5970797690082433  0.3500712916121197
+  POINT  3075  0.5853051736619447  0.367516786528002
+  POINT  3076  0.6195247751943277  0.3367948503421622
+  POINT  3077  0.5046142383210852  0.4593891552116149
+  POINT  3078  0.4918813558833659  0.4361260737516724
+  POINT  3079  0.4785117485721136  0.4592570534883783
+  POINT  3080  0.5052744047175668  0.4129518010537193
+  POINT  3081  0.4791719149685952  0.4128196993304827
+  POINT  3082  0.5312253503351396  0.3243421987906339
+  POINT  3083  0.5472629010953433  0.3429461865636048
+  POINT  3084  0.5079574480831789  0.3173883529159202
+  POINT  3085  0.4009845052261296  0.318959218566044
+  POINT  3086  0.4271349362799917  0.31911020430696
+  POINT  3087  0.4139749628549548  0.2956891448099621
+  POINT  3088  0.5951977403865812  0.5282376132322915
+  POINT  3089  0.6077654771784186  0.5513612285265901
+  POINT  3090  0.6086823744728344  0.5049247429717304
+  POINT  3091  0.5823744122559251  0.5052140339099233
+  POINT  3092  0.6355517277522447  0.5040218955106904
+  POINT  3093  0.6227283996215885  0.4809983161883223
+  POINT  3094  0.6480298589817495  0.5278460366742828
+  POINT  3095  0.6620758841305037  0.5039196098908747
+  POINT  3096  0.7590675794030117  0.6423282821595914
+  POINT  3097  0.7711871520524267  0.6642913264651261
+  POINT  3098  0.7843902570204941  0.6417711008968948
+  POINT  3099  0.7172462156808188  0.5036933976273812
+  POINT  3100  0.7387343218511129  0.5139133841734261
+  POINT  3101  0.7306446745055404  0.4862760909409984
+  POINT  3102  0.6918552918476274  0.5018999277247103
+  POINT  3103  0.6999449391932  0.5295372209571381
+  POINT  3104  0.6861143472180067  0.5513978879508391
+  POINT  3105  0.7627819220521704  0.5151352679469967
+  POINT  3106  0.7346772787680431  0.4631823129553713
+  POINT  3107  0.7561653849383371  0.4734022995014163
+  POINT  3108  -0.2275668138025612  0.808717941517375
+  POINT  3109  -0.2153673478237134  0.7847649721346892
+  POINT  3110  -0.2407354564893289  0.7859122061560804
+  POINT  3111  -0.2662652803551944  0.7865131246722017
+  POINT  3112  -0.2918626311657021  0.7873179603505609
+  POINT  3113  -0.2785322732786844  0.8106700112171252
+  POINT  3114  -0.4049200019545185  0.8581395324922723
+  POINT  3115  -0.4167337352741779  0.8792209569247018
+  POINT  3116  -0.4558748191887034  0.860299236901312
+  POINT  3117  -0.4441852062909333  0.8351721647184738
+  POINT  3118  -0.418415281199975  0.8348679766777292
+  POINT  3119  -0.4414734365743516  0.8827384567460406
+  POINT  3120  -0.42815293780976  0.9019913837918164
+  POINT  3121  0.01273663190323249  0.7360734558809434
+  POINT  3122  -0.01272556871420132  0.7360734771396491
+  POINT  3123  4.945207110270897e-06  0.7590759435367931
+  POINT  3124  0.03820465876512556  0.7820024709011921
+  POINT  3125  0.06363647259991524  0.7821012992839012
+  POINT  3126  0.05089895965933376  0.7591747506607964
+  POINT  3127  0.06378343639514483  0.8277018417546065
+  POINT  3128  0.03829458016797116  0.8277791055707512
+  POINT  3129  0.05113584485740894  0.8505519278010609
+  POINT  3130  -0.06430119379681168  0.8733571772517114
+  POINT  3131  -0.08975786123540107  0.8729002250324374
+  POINT  3132  -0.0774400186879273  0.8957826634444064
+  POINT  3133  -0.05113005668047311  0.8505519803951809
+  POINT  3134  -0.06362782983072357  0.7821013894144582
+  POINT  3135  -0.03819585699822726  0.7820025234093627
+  POINT  3136  -0.05088922824281984  0.7591748308005942
+  POINT  3137  -0.08895931390185341  0.7822160514190887
+  POINT  3138  -0.07626594265726083  0.8050437440278572
+  POINT  3139  -0.06377674746520821  0.8277019104314846
+  POINT  3140  -0.08910823153633807  0.8278165724361151
+  POINT  3141  -0.03828776780139589  0.8277791519869231
+  POINT  3142  -0.06364596962651448  0.7362225603965566
+  POINT  3143  -0.07644169741565998  0.7133301522294838
+  POINT  3144  -0.08911692886446165  0.7363812886386167
+  POINT  3145  -0.02548231009789596  0.7131212067356116
+  POINT  3146  -0.01276259188994511  0.6900170423279307
+  POINT  3147  -0.03825101996976196  0.6900672595797428
+  POINT  3148  -0.03821399679401818  0.7361236943914613
+  POINT  3149  -0.06378769820560556  0.6901574922105577
+  POINT  3150  -0.1143265637385181  0.7824661197164109
+  POINT  3151  -0.1394853999263012  0.7828479233041359
+  POINT  3152  -0.1267562629161737  0.8055402096202127
+  POINT  3153  -0.1016884509119808  0.7595237651030119
+  POINT  3154  -0.1144841787011264  0.7366313569359391
+  POINT  3155  -0.1399441094428567  0.7369118493671853
+  POINT  3156  -0.1658119438393942  0.6910197488967522
+  POINT  3157  -0.1532357744273858  0.6677427867930553
+  POINT  3158  -0.01281001731486332  0.5975052494322469
+  POINT  3159  -0.03840028687900253  0.5975429131755705
+  POINT  3160  1.081946442434319e-05  0.5743275439339142
+  POINT  3161  -0.0384939067991277  0.5511073770617334
+  POINT  3162  -0.01280802675072695  0.5510796426009781
+  POINT  3163  0.01283185696224499  0.551079597732606
+  POINT  3164  -0.1902056014951501  1.01370452963273
+  POINT  3165  -0.1601888025280189  1.009853616391104
+  POINT  3166  -0.1141722181261107  0.8278156187661656
+  POINT  3167  -0.1393310543138938  0.8281974223538907
+  POINT  3168  -0.151431037891943  0.8510992893568523
+  POINT  3169  -0.1016830229340581  0.850473785169793
+  POINT  3170  -0.1148218478251737  0.872899271362488
+  POINT  3171  -0.3410980309594269  0.8831537162541825
+  POINT  3172  -0.3541877614443844  0.8593309940763276
+  POINT  3173  -0.3420765442775414  0.8361477509767617
+  POINT  3174  -0.316469992072989  0.836137100041041
+  POINT  3175  -0.3297361762937444  0.811485497831205
+  POINT  3176  0.1730661332789457  1.242943556737101
+  POINT  3177  0.1940370529594889  1.261985947024982
+  POINT  3178  0.1517756270856314  1.239121880180544
+  POINT  3179  0.152268004342926  1.264917655072548
+  POINT  3180  0.162461450121644  1.287355643957139
+  POINT  3181  0.1860091279058246  1.285921576282122
+  POINT  3182  0.1749120674912283  1.304537888610156
+  POINT  3183  0.2064876703290731  1.279168191677999
+  POINT  3184  0.1601893029384915  1.190146215099388
+  POINT  3185  0.1778215315790728  1.159293470136851
+  POINT  3186  0.08976262098038926  1.327099853198282
+  POINT  3187  0.1016884449626147  1.349526282754009
+  POINT  3188  0.08911471302592255  1.372183512500319
+  POINT  3189  0.1141784569039217  1.372184459239243
+  POINT  3190  0.06378343639518301  1.372298158245394
+  POINT  3191  -0.1526383708458642  1.085
+  POINT  3192  -0.1349707551804744  1.060927588187288
+  POINT  3193  0.7452764836342496  0.4332444503854744
+  POINT  3194  -0.1050476361713215  1.060904080457208
+  POINT  3195  -0.1178816998306621  1.036831668644496
+  POINT  3196  0.7727278633415611  0.493847519961803
+  POINT  3197  0.777029491764732  0.4705358080654291
+  POINT  3198  0.344228524557281  1.459777131849572
+  POINT  3199  0.3565432527087909  1.436090561801562
+  POINT  3200  0.3431000535494129  1.412341326101479
+  POINT  3201  0.3297395574143784  1.388515091843439
+  POINT  3202  -0.2121408449285222  1.323944128529582
+  POINT  3203  -0.1872860597869286  1.325689152844081
+  POINT  3204  -0.1749090482183568  1.304537996376834
+  POINT  3205  -0.2229864076095442  1.29885577648567
+  POINT  3206  -0.2366701992242377  1.31969585211323
+  POINT  3207  -0.2064857193976328  1.279168432934877
+  POINT  3208  -0.2310150736933483  1.274920156518526
+  POINT  3209  -0.1624587418075148  1.287355665442835
+  POINT  3210  -0.1860067469029867  1.285921721968022
+  POINT  3211  -0.1940354129867908  1.261986102000878
+  POINT  3212  0.2906913353542208  1.364203578735432
+  POINT  3213  0.2650944950122214  1.365008279273163
+  POINT  3214  -0.2387206109003236  1.250436300397789
+  POINT  3215  -0.2210117479945431  1.228229875645093
+  POINT  3216  -0.2436331203401984  1.224697229100959
+  POINT  3217  -0.2837501498310734  1.262745114629294
+  POINT  3218  -0.2770998744034641  1.285751646701895
+  POINT  3219  -0.255221299112235  1.270123643948581
+  POINT  3220  0.1637419831568572  0.8728769182911498
+  POINT  3221  0.1514358827236355  0.8510992816872697
+  POINT  3222  0.1390582892738052  0.8722504071109469
+  POINT  3223  0.1640206615645647  0.8288238605937902
+  POINT  3224  0.1393369676815128  0.8281973494135872
+  POINT  3225  0.1891620463010428  0.829648207016188
+  POINT  3226  0.17706313125892  0.8067462747425056
+  POINT  3227  -0.07197924608411718  1.013067975020676
+  POINT  3228  -0.05859850816282316  1.036998868840166
+  POINT  3229  0.2515387733835269  1.342332813361083
+  POINT  3230  0.2393840269730074  1.367459561611343
+  POINT  3231  -0.03864371293974567  0.4112405735814001
+  POINT  3232  -0.02574307518187596  0.4346158129842994
+  POINT  3233  -0.03860697880715513  0.4579588103988284
+  POINT  3234  -0.01296517357913287  0.269755953789197
+  POINT  3235  -0.02622882154082112  0.2461209915885011
+  POINT  3236  0.01366164147477733  0.2214827342727962
+  POINT  3237  -0.01355626953426612  0.2214831097314659
+  POINT  3238  -0.08948240553079592  0.6440585670308878
+  POINT  3239  -0.1150201660705722  0.6442347573773634
+  POINT  3240  -0.07676583116877549  0.6208659055884693
+  POINT  3241  -0.2062277447738215  0.3887134642104028
+  POINT  3242  -0.1932591046157843  0.411951167659927
+  POINT  3243  -0.1035424476492222  0.2946829585123979
+  POINT  3244  -0.1167462840927444  0.2714766831530565
+  POINT  3245  -0.05157511727697212  0.3879248103615883
+  POINT  3246  -0.03873932786503452  0.3644307746417522
+  POINT  3247  -0.0645316996781479  0.3645255650813439
+  POINT  3248  -0.06443608475285904  0.4113353640209918
+  POINT  3249  -0.09019180074423286  0.4114267745158292
+  POINT  3250  -0.07726039640700642  0.434742537735641
+  POINT  3251  -0.1548828017896316  0.2953962540733002
+  POINT  3252  -0.167632545950589  0.3187988988353017
+  POINT  3253  -0.1420220034537256  0.3184909235809593
+  POINT  3254  -0.012973893339134  0.3172860748449294
+  POINT  3255  -0.02583418012003818  0.3409480587195439
+  POINT  3256  -0.0128775977188624  0.3643473039997883
+  POINT  3257  0.01292745390467592  0.3643472215734659
+  POINT  3258  0.02588826152309051  0.3409478846485416
+  POINT  3259  0.2407414158785705  0.7859119247329824
+  POINT  3260  0.2662706734163762  0.7865127353460486
+  POINT  3261  0.2153737995754327  0.7847647490771459
+  POINT  3262  0.2275721322985359  0.80871779682074
+  POINT  3263  0.3185169979633963  0.740052577263737
+  POINT  3264  0.3442285245572493  0.740222868150428
+  POINT  3265  0.3052280098934095  0.76349120162574
+  POINT  3266  0.3420788643559561  0.8361471901016712
+  POINT  3267  0.3541893018257894  0.8593305771391553
+  POINT  3268  0.3674561230128713  0.8346788297985663
+  POINT  3269  0.3410988766517489  0.8831535073906632
+  POINT  3270  0.3664761353086642  0.8816851470875584
+  POINT  3271  0.3177478933720922  0.8919516362337232
+  POINT  3272  0.329483714523536  0.9128437725251927
+  POINT  3273  0.3030306422957995  0.860458703209678
+  POINT  3274  0.1267632357448151  0.8055401196672769
+  POINT  3275  0.1141784569038859  0.8278155407607564
+  POINT  3276  0.08911471302588544  0.827816487499681
+  POINT  3277  0.1016884449625831  0.8504737172459914
+  POINT  3278  0.07627344833644766  0.8050436652693713
+  POINT  3279  0.08896774923065585  0.7822159450289757
+  POINT  3280  0.1143346954365931  0.7824659848803647
+  POINT  3281  0.1016977197000607  0.7595236188948945
+  POINT  3282  0.13949320621422  0.7828477935331957
+  POINT  3283  0.1409175011515012  0.5979815448416933
+  POINT  3284  0.1665926939416747  0.5981196738563217
+  POINT  3285  0.1539154802700288  0.5748034411694907
+  POINT  3286  0.1153086599177705  0.597819276473272
+  POINT  3287  0.1279858735894163  0.6211355091601031
+  POINT  3288  0.1799069511559062  0.5283710130916394
+  POINT  3289  0.1668825654945296  0.5515963812698894
+  POINT  3290  0.1412073727043561  0.5514582522552611
+  POINT  3291  0.1284701116643227  0.5281445904979253
+  POINT  3292  0.1155030264398219  0.5513516503975264
+  POINT  3293  0.1671583114968249  0.5050165106133528
+  POINT  3294  0.1928908047238743  0.5051363313493323
+  POINT  3295  0.1414117079751675  0.5049064113699346
+  POINT  3296  0.1157073617106334  0.5047998095122
+  POINT  3297  0.1543955615431356  0.4816717296276277
+  POINT  3298  0.08997785843143047  0.5047069838318166
+  POINT  3299  0.1029194547422753  0.481468804703826
+  POINT  3300  0.06436538296865862  0.4580134071412623
+  POINT  3301  0.05146501024225641  0.4813211729667213
+  POINT  3302  0.03851748424151497  0.5511072270913728
+  POINT  3303  0.02569863802636367  0.5278593257584367
+  POINT  3304  0.06428710838435304  0.5046314670703231
+  POINT  3305  0.07707501535271108  0.5279624718786972
+  POINT  3306  0.03856216716353701  0.5045766610136018
+  POINT  3307  0.2179469147146543  0.5984594482048871
+  POINT  3308  0.1922331959030084  0.5983127104249152
+  POINT  3309  0.1792352167844808  0.6214908140971178
+  POINT  3310  0.1913072521895045  0.6914046329001287
+  POINT  3311  0.1658233841822304  0.6910193107995912
+  POINT  3312  0.1783270053691666  0.7144348525306947
+  POINT  3313  0.2043996879888718  0.6682689841850593
+  POINT  3314  0.1918396748741913  0.6448364709173682
+  POINT  3315  0.2174357318604949  0.6451163639334023
+  POINT  3316  0.1661991729128577  0.6446434343487748
+  POINT  3317  0.03822496354410713  0.7361236172930801
+  POINT  3318  0.0636567773788968  0.7362224456757891
+  POINT  3319  0.02549444962279553  0.7131211508959361
+  POINT  3320  0.4778809797243252  0.5057885945599929
+  POINT  3321  0.4905706308300941  0.528971782264259
+  POINT  3322  0.5039342821156019  0.5057033226525869
+  POINT  3323  0.4771480255463438  0.5523128632197408
+  POINT  3324  0.4511582308806231  0.5524113280266716
+  POINT  3325  0.3092717619151221  0.4822669978241703
+  POINT  3326  0.322359958787596  0.4589945659593586
+  POINT  3327  0.3220112257887987  0.5056301234510399
+  POINT  3328  0.07729522875024956  0.4347421010293822
+  POINT  3329  0.090229566057387  0.4114262422320855
+  POINT  3330  0.1159949038876617  0.4115726535869405
+  POINT  3331  0.09011979724466339  0.4581046729115624
+  POINT  3332  0.1158493005238663  0.4581974985919459
+  POINT  3333  0.2186724473704337  0.5052462737658832
+  POINT  3334  0.244448621591814  0.5053626285395419
+  POINT  3335  0.2059238077113524  0.4818917712875966
+  POINT  3336  0.2575396603889407  0.4820978508167151
+  POINT  3337  0.244734179929738  0.4587497430857169
+  POINT  3338  0.2189097881817767  0.4586505698272459
+  POINT  3339  0.2319385177536029  0.4353985992088154
+  POINT  3340  0.1931281455352173  0.4585406274106951
+  POINT  3341  0.1648302480981311  0.7833072910903072
+  POINT  3342  0.1899716328346092  0.784131637512705
+  POINT  3343  0.2031409164146438  0.7613257654249475
+  POINT  3344  0.1524017077899091  0.7602331563033949
+  POINT  3345  0.1907748115251305  0.7377564142458692
+  POINT  3346  0.1652909435178563  0.7373710921453319
+  POINT  3347  0.1399539016339452  0.7369115945882204
+  POINT  3348  -0.5928809802590156  0.6212232216465079
+  POINT  3349  -0.6053783134105666  0.6442847528227001
+  POINT  3350  -0.5794156781021171  0.6445727882258152
+  POINT  3351  -0.606434447159774  0.5978567296803006
+  POINT  3352  -0.6861170617214072  0.5514033840752618
+  POINT  3353  -0.7115085553959806  0.553197264592402
+  POINT  3354  -0.6840696601196132  0.5977977331077479
+  POINT  3355  -0.7096166456687025  0.5976867600815081
+  POINT  3356  -0.69600897009982  0.6204268701016322
+  POINT  3357  -0.7228857878082029  0.5755098870663908
+  POINT  3358  -0.6817928739608023  0.6888523502234118
+  POINT  3359  -0.7073314560070312  0.68812281280387
+  POINT  3360  -0.7204151574862122  0.6653191979604152
+  POINT  3361  -0.7082596515410639  0.643049995751046
+  POINT  3362  -0.6827126659919744  0.6431609687772857
+  POINT  3363  -0.7696104845179814  0.7538566959480468
+  POINT  3364  -0.7824188395381693  0.7310823213206077
+  POINT  3365  -0.8190851259807537  0.7524890672409938
+  POINT  3366  -0.8068214123455549  0.7748624339809177
+  POINT  3367  -0.7822049698244511  0.7756837870241446
+  POINT  3368  -0.7944394270831938  0.7974745681443939
+  POINT  3369  -0.8074498036677014  0.7304503912402013
+  POINT  3370  -0.8319479745616429  0.7298678056205266
+  POINT  3371  -0.8451124004482077  0.7073074125456742
+  POINT  3372  -0.8585664394185942  0.6845684479969316
+  POINT  3373  -0.8945527630426959  0.7064896133318757
+  POINT  3374  -0.880625219855304  0.7291512593746357
+  POINT  3375  -0.8567477227612599  0.7293460885464667
+  POINT  3376  -0.8841290122746754  0.6837484264256362
+  POINT  3377  -0.9090541215675839  0.6833219419491972
+  POINT  3378  -0.3974421730713383  0.2285966127282077
+  POINT  3379  -0.3877552355213761  0.2478479552449862
+  POINT  3380  -0.4159752040357345  0.2178074904488024
+  POINT  3381  -0.437474135418588  0.2007690058501327
+  POINT  3382  -0.4363691904865473  0.2277291253216555
+  POINT  3383  -0.4981287110186421  0.7878161262079454
+  POINT  3384  -0.471928527256169  0.7878696542069474
+  POINT  3385  -0.5119313839368681  0.7632983033376908
+  POINT  3386  -0.459785897860906  0.7639274685919226
+  POINT  3387  -0.5910663659592779  0.7141372673778621
+  POINT  3388  -0.5785010723824179  0.6912383314918329
+  POINT  3389  -0.604478304830528  0.6905332552880366
+  POINT  3390  -0.5515952091886892  0.738813770630803
+  POINT  3391  -0.5777967176668153  0.7378825630391534
+  POINT  3392  -0.6037739501149255  0.7371774868353571
+  POINT  3393  -0.4889249772727747  0.6222492213616555
+  POINT  3394  -0.5014460146276127  0.6456008029480309
+  POINT  3395  -0.4754621340447532  0.6457906900906342
+  POINT  3396  -0.4503673691125324  0.5991036130116039
+  POINT  3397  -0.4370100681409274  0.6225225927897886
+  POINT  3398  -0.4763581937572959  0.5990053876988712
+  POINT  3399  -0.4817910506707711  0.3164848220335315
+  POINT  3400  -0.4535953382527324  0.3189814825901278
+  POINT  3401  -0.4683189808484258  0.2933461257650906
+  POINT  3402  -0.5188244024061459  0.2749565788394502
+  POINT  3403  -0.5420931265372309  0.2819106588651618
+  POINT  3404  -0.5197834173975494  0.2978035452342058
+  POINT  3405  -0.5187687331720533  0.3899929082059082
+  POINT  3406  -0.5052727560678176  0.4129552480116714
+  POINT  3407  -0.479168862526794  0.4128228472272443
+  POINT  3408  -0.4663588340204511  0.389423127827026
+  POINT  3409  -0.4798152572329356  0.3658844408448862
+  POINT  3410  -0.4536109848625932  0.3656588658407084
+  POINT  3411  -0.3617490389555497  0.389104277260035
+  POINT  3412  -0.348584098999122  0.4124176172602999
+  POINT  3413  -0.3226110295065669  0.4123663914667859
+  POINT  3414  -0.3097261430635858  0.3890328957567288
+  POINT  3415  -0.3227033334421276  0.365774384811444
+  POINT  3416  -0.3487385640644605  0.3657700046512186
+  POINT  3417  -0.3357543849910777  0.3424623632236249
+  POINT  3418  -0.3748000905044997  0.365792255672216
+  POINT  3419  0.2275721322985668  1.391282203179259
+  POINT  3420  0.2140164106698723  1.368606737267179
+  POINT  3421  -0.5702320007807471  0.3917067003481098
+  POINT  3422  -0.5827028574954987  0.414855174557677
+  POINT  3423  -0.608639664739505  0.4144116767672592
+  POINT  3424  -0.6200245953506758  0.3924040497006396
+  POINT  3425  -0.6522579462527746  0.3702139313078293
+  POINT  3426  -0.6782125778660616  0.3651342304718016
+  POINT  3427  0.2153737995754697  1.415235250922853
+  POINT  3428  0.5916219385403805  1.296716509535319
+  POINT  3429  0.5771876705474219  1.318475988745458
+  POINT  3430  0.5629983999046616  1.341709257932246
+  POINT  3431  -0.5625394347157243  0.2732295455268656
+  POINT  3432  -0.563313132551307  0.2963488746035672
+  POINT  3433  0.5770712730760554  1.367407537006025
+  POINT  3434  0.5901118256033524  1.392007600401651
+  POINT  3435  0.5242998146976345  0.7873010721529698
+  POINT  3436  0.5119329736248337  0.7632962249940414
+  POINT  3437  0.4981303317417042  0.7878144281993652
+  POINT  3438  0.5370804331546364  0.8107270409241252
+  POINT  3439  -0.3430961598768315  0.7876594467580882
+  POINT  3440  -0.3565389399997428  0.763910407284851
+  POINT  3441  -0.3052226147487892  0.7634919092774439
+  POINT  3442  -0.3185111372079351  0.7400534716556744
+  POINT  3443  -0.3174896076722792  0.7876487958223675
+  POINT  3444  -0.3442233352206996  0.7402239059289781
+  POINT  3445  -0.3699126839650762  0.7403115684645787
+  POINT  3446  -0.4102196113030976  0.6695240914337912
+  POINT  3447  -0.423584996667025  0.6460457144413436
+  POINT  3448  -0.4495160252160126  0.6459622301558138
+  POINT  3449  -0.4620370625708508  0.6693138117421892
+  POINT  3450  -0.3957054330235162  0.740347686480341
+  POINT  3451  -0.3833898282444729  0.716661185124468
+  POINT  3452  -0.4214964450085997  0.7403704156643209
+  POINT  3453  -0.3967654230834989  0.6931300671002221
+  POINT  3454  -0.4226367655225116  0.6930913274737995
+  POINT  3455  -0.7880570099806479  1.162951873370833
+  POINT  3456  -0.761286433968238  1.162323472609615
+  POINT  3457  -0.7892199012647433  1.120601957990098
+  POINT  3458  -0.8016185043188055  1.141746565524629
+  POINT  3459  -0.813184119179726  1.206538982540648
+  POINT  3460  -0.839468814556275  1.206815901075237
+  POINT  3461  -0.7999005431811752  1.22793973495043
+  POINT  3462  -0.746986566389964  1.312731593140633
+  POINT  3463  -0.7588433027099131  1.335195801344242
+  POINT  3464  -0.6560678327320605  0.8267991617790384
+  POINT  3465  -0.6818377993304878  0.8247767998803015
+  POINT  3466  -0.6693576442741969  0.8484440553373909
+  POINT  3467  -0.6940779622898298  0.8017776586538032
+  POINT  3468  -0.6812381415228272  0.7798336053940089
+  POINT  3469  -0.7073677738319661  0.8234225522121557
+  POINT  3470  -0.6049130638281456  0.8773111422972713
+  POINT  3471  -0.5916217845726318  0.9032844290189598
+  POINT  3472  -0.6314675817570059  0.8747684405899456
+  POINT  3473  -0.6170331597469092  0.8530091189434534
+  POINT  3474  -0.7826635002889959  0.8198621770008762
+  POINT  3475  -0.8072799428100998  0.8190408239576492
+  POINT  3476  -0.8199471833324119  0.8405480719652076
+  POINT  3477  -0.8332676487819749  0.8619766010625289
+  POINT  3478  -0.8088244814654649  0.8628569619114528
+  POINT  3479  -0.7837640344612735  0.8637552605138032
+  POINT  3480  -0.7970844999108366  0.8851837896111245
+  POINT  3481  -0.8104062851489087  0.9064765619622989
+  POINT  3482  -0.8242630135330764  0.9280432307670156
+  POINT  3483  -0.8122361874637862  0.950144749298
+  POINT  3484  -0.8360016752991957  0.9058521598134908
+  POINT  3485  -0.6217621819421643  1.050347089599112
+  POINT  3486  -0.6135825866529512  1.021927041668575
+  POINT  3487  -0.5846720269599562  1.023213005928731
+  POINT  3488  -0.6036327296221307  0.99799772540783
+  POINT  3489  -0.6252296958949042  1.076452244981441
+  POINT  3490  -0.5982586623818794  1.07366555885256
+  POINT  3491  -0.7359211885715602  1.083584965167191
+  POINT  3492  -0.7453370428285235  1.062983007177094
+  POINT  3493  -0.7661346788896624  1.079398042009903
+  POINT  3494  -0.7798040470077803  1.1
+  POINT  3495  -0.7661346788896621  1.120601957990098
+  POINT  3496  -0.7036635979658161  1.159575292659954
+  POINT  3497  -0.6827914721501145  1.139962789851368
+  POINT  3498  -0.7359211885715601  1.116415034832809
+  POINT  3499  -0.7151235525104214  1.1
+  POINT  3500  -0.731072943650136  1.158136549452327
+  POINT  3501  -0.7453370428285231  1.137016992822907
+  POINT  3502  0.05195898966375652  1.906007717412101
+  POINT  3503  0.06481170872915996  1.88234581849968
+  POINT  3504  0.09061024846492834  1.882139993038691
+  POINT  3505  0.1035991533335029  1.905317613800943
+  POINT  3506  0.06523028572982552  1.929642754156205
+  POINT  3507  -0.06515763431637089  1.929642362291637
+  POINT  3508  -0.03923898466571878  1.929927400588417
+  POINT  3509  -0.02622882154039851  1.953879008411499
+  POINT  3510  0.1677414786681202  1.97292195772075
+  POINT  3511  0.142981459973619  1.974160038908235
+  POINT  3512  0.1804446514018183  1.950365347994333
+  POINT  3513  0.1678424638994597  1.927495304311631
+  POINT  3514  0.1931360125651682  1.927166770098764
+  POINT  3515  0.1422374824825535  1.927803145795112
+  POINT  3516  0.0001246961657661851  2.07823229611221
+  POINT  3517  0.02161573739454792  2.099766352652904
+  POINT  3518  0.02159211418106533  2.077768153596185
+  POINT  3519  -0.02136035899985236  2.099771841503549
+  POINT  3520  -0.02137405933800451  2.077772970177485
+  POINT  3521  0.4993764251920219  0.7398590508361503
+  POINT  3522  0.7734550239077413  0.9293749476519462
+  POINT  3523  0.7611195166134965  0.951290948381731
+  POINT  3524  0.7863311500230181  0.9505806072718357
+  POINT  3525  -0.05036962598441143  2.074620681838993
+  POINT  3526  -0.02888950998460164  2.053312314158485
+  POINT  3527  -0.08303914441694887  2.048106060426967
+  POINT  3528  -0.06896435638119108  2.025271763066794
+  POINT  3529  -0.07319993195878105  2.073117444342518
+  POINT  3530  -0.06570168040637502  2.097839310305913
+  POINT  3531  0.04265311679185714  2.026499227474023
+  POINT  3532  0.01369217503290316  2.029651739958751
+  POINT  3533  0.02906699842075926  2.053312090012249
+  POINT  3534  0.05055305594001932  2.074615641111456
+  POINT  3535  0.07333017808914294  2.073111990241299
+  POINT  3536  0.06587245777968669  2.097828050971741
+  POINT  3537  0.08315579167347936  2.048103867033625
+  POINT  3538  0.09421117423144476  2.023215661686267
+  POINT  3539  0.1054752612533862  1.999004681221036
+  POINT  3540  0.05370849934982255  2.001611022126665
+  POINT  3541  0.06636241615864329  1.976972928463176
+  POINT  3542  0.06908332273767866  2.025271372180161
+  POINT  3543  6.038239495724865e-05  2.002838501961853
+  POINT  3544  -0.01355626953375623  1.978516890268533
+  POINT  3545  -0.03983008062072882  1.978200244646147
+  POINT  3546  -0.06627313437937236  1.976972931551354
+  POINT  3547  -0.05360058237273008  2.001610813408387
+  POINT  3548  -0.04252130262254755  2.026499076161587
+  POINT  3549  -0.01352573597614063  2.029651364500079
+  POINT  3550  0.6922365980893586  1.746669035447258
+  POINT  3551  0.6793771606181297  1.721924213438882
+  POINT  3552  0.662457190372238  1.744649353281094
+  POINT  3553  0.6918552918476338  1.698100072275289
+  POINT  3554  0.6620758841305133  1.696080390109125
+  POINT  3555  0.7195642990582912  1.753710457388772
+  POINT  3556  0.7306446745055435  1.713723909059002
+  POINT  3557  0.7346772787680449  1.736817687044629
+  POINT  3558  0.7452764836342495  1.766755549614526
+  POINT  3559  0.6086368293183556  1.78559313785908
+  POINT  3560  0.6331710338437972  1.786265765734152
+  POINT  3561  0.6485517960469211  1.766826076353369
+  POINT  3562  0.6356923585756924  1.742081254344993
+  POINT  3563  0.4363678872897983  1.972272989529545
+  POINT  3564  0.4386840864652508  1.94994443765292
+  POINT  3565  0.3974439976520876  1.971405131021685
+  POINT  3566  0.4159745351225623  1.982194225812711
+  POINT  3567  0.4374709259988622  1.999232555519259
+  POINT  3568  0.3877594910371356  1.952154028892702
+  POINT  3569  0.4014042713252501  1.929963888511621
+  POINT  3570  0.374179751513031  1.926651981312035
+  POINT  3571  0.4817911173390774  1.883518286675428
+  POINT  3572  0.4932358185090228  1.856976137821036
+  POINT  3573  0.4798172257838654  1.834118675389927
+  POINT  3574  0.453614631044033  1.834343969197033
+  POINT  3575  0.2432682688718115  1.972887794545467
+  POINT  3576  0.2315143630063342  1.950610859002089
+  POINT  3577  0.2704836172413356  1.927701729686579
+  POINT  3578  0.2834885327990177  1.951043204842235
+  POINT  3579  0.2966816240952116  1.927560030306102
+  POINT  3580  0.2704467801902808  1.977813239000525
+  POINT  3581  0.2564245231169506  1.999516129323281
+  POINT  3582  0.2251605432805274  2.035143025862992
+  POINT  3583  0.2386314996778703  2.053272692737385
+  POINT  3584  0.2376224821735597  2.014122524180182
+  POINT  3585  0.2636526675429323  2.046636185190103
+  POINT  3586  0.256371126478749  2.066578421809642
+  POINT  3587  0.2648009934920289  2.01904796863524
+  POINT  3588  0.3096070943793596  1.9040599088921
+  POINT  3589  0.3226120099370418  1.927401384047756
+  POINT  3590  0.3480362257230531  1.926371692163435
+  POINT  3591  0.3226368210967134  1.880718070569523
+  POINT  3592  0.3616810060111676  1.904181551782353
+  POINT  3593  0.6480298589817612  1.672153963325717
+  POINT  3594  0.6355517277522571  1.69597810448931
+  POINT  3595  0.6077654771784347  1.64863877147341
+  POINT  3596  0.595197740386599  1.671762386767709
+  POINT  3597  0.7493834632274523  1.667447425366621
+  POINT  3598  0.7367132546089009  1.646356805078222
+  POINT  3599  0.7387343218511164  1.686086615826574
+  POINT  3600  0.7115052710512045  1.64680864214649
+  POINT  3601  0.6999449391932069  1.670462779042862
+  POINT  3602  0.6861143472180151  1.648602112049161
+  POINT  3603  0.7172462156808233  1.696306602372619
+  POINT  3604  -0.1665761999906868  1.601879704997744
+  POINT  3605  -0.1409000249065374  1.602017950435267
+  POINT  3606  -0.1279696700052518  1.578864059870147
+  POINT  3607  -0.1152905077292891  1.602180316937036
+  POINT  3608  -0.179220540795262  1.578508540125646
+  POINT  3609  -0.1406296832477389  1.555602876120868
+  POINT  3610  -0.1150201660704907  1.555765242622637
+  POINT  3611  -0.1661852783620767  1.555356030454455
+  POINT  3612  -0.1532357744273156  1.532257213206945
+  POINT  3613  -0.08982816979538227  1.648756592110239
+  POINT  3614  -0.07705022536576084  1.672037209581978
+  POINT  3615  -0.06413669377919697  1.648832217207081
+  POINT  3616  -0.0512718512286264  1.625612005466528
+  POINT  3617  -0.03849390679900496  1.648892622938267
+  POINT  3618  -0.1025677504196966  1.625442903618749
+  POINT  3619  -0.08963739551841096  1.60228901305363
+  POINT  3620  -0.06404307385909089  1.602396681093244
+  POINT  3621  -0.07676583116868343  1.579134094411531
+  POINT  3622  0.1671583114969456  1.694983489386647
+  POINT  3623  0.1799069511560153  1.67162898690836
+  POINT  3624  0.1668825654946343  1.64840361873011
+  POINT  3625  0.1284701116644432  1.671855409502074
+  POINT  3626  0.1414117079752956  1.695093588630065
+  POINT  3627  0.1412073727044653  1.648541747744738
+  POINT  3628  0.1931281455353467  1.741459372589305
+  POINT  3629  0.1803369722650524  1.764816669807348
+  POINT  3630  0.231938517753725  1.764601400791184
+  POINT  3631  0.2190828937263732  1.787938367790687
+  POINT  3632  0.2449072854743237  1.787839194532216
+  POINT  3633  0.2189097881818977  1.741349430172754
+  POINT  3634  0.1932874662025816  1.788049897213723
+  POINT  3635  -0.0256728693011736  1.672140569139575
+  POINT  3636  -0.03853401327404768  1.695423170560983
+  POINT  3637  -0.01284813322564576  1.695450905021739
+  POINT  3638  0.01287653988441327  1.695450968345165
+  POINT  3639  -0.01280802675060303  1.648920357399022
+  POINT  3640  0.01283185696236891  1.648920402267394
+  POINT  3641  0.5283862086203651  1.601363963241954
+  POINT  3642  0.540915264095458  1.578218016593592
+  POINT  3643  0.5023449985968235  1.601187509488418
+  POINT  3644  0.5004877209262403  1.507475857056956
+  POINT  3645  0.4869845609901188  1.483795713787033
+  POINT  3646  0.5255459081479685  1.460654305210246
+  POINT  3647  0.5390396832313233  1.484626073205076
+  POINT  3648  0.4993764251920396  1.46014094916385
+  POINT  3649  0.348596801039073  1.787584300425731
+  POINT  3650  0.3226258879828245  1.787635334614374
+  POINT  3651  0.361760666520125  1.810897743823572
+  POINT  3652  0.2708456186415195  1.834335516366923
+  POINT  3653  0.2579179265999607  1.811096959502398
+  POINT  3654  0.2967601768625934  1.834276317989185
+  POINT  3655  0.3097428517767955  1.810968775450743
+  POINT  3656  0.3227188368864392  1.834227335966852
+  POINT  3657  0.2966672279589786  1.787684316636708
+  POINT  3658  0.2707735506273126  1.787759992502895
+  POINT  3659  0.4905706308301276  1.671028217735741
+  POINT  3660  0.4771480255463788  1.647687136780259
+  POINT  3661  0.4511582308806624  1.647588671973329
+  POINT  3662  0.4385183622883749  1.670919925950854
+  POINT  3663  0.4637889279881854  1.624332862925253
+  POINT  3664  0.4518212529878732  1.694226131786288
+  POINT  3665  0.4778809797243614  1.694211405440007
+  POINT  3666  -0.5804718118513061  1.601855234916585
+  POINT  3667  -0.5928809802589987  1.578776778353492
+  POINT  3668  -0.6064344471597582  1.6021432703197
+  POINT  3669  -0.5794156781020998  1.555427211774185
+  POINT  3670  -0.6053783134105518  1.5557152471773
+  POINT  3671  -0.6177731679532557  1.532836449904233
+  POINT  3672  -0.6312384701101547  1.556186016483541
+  POINT  3673  -0.7574423689693339  1.468132635592014
+  POINT  3674  -0.74497514428518  1.490222739519206
+  POINT  3675  -0.7321667892649917  1.467448364891767
+  POINT  3676  -0.7824188395381655  1.468917678679392
+  POINT  3677  -0.6570476546017896  1.556384688041301
+  POINT  3678  -0.6446528000590858  1.579263485314368
+  POINT  3679  -0.7977677744455367  1.580818784657275
+  POINT  3680  -0.8107918388011222  1.60295343665588
+  POINT  3681  -0.7852981210697809  1.602320004283393
+  POINT  3682  -0.784393529197197  1.558222284274732
+  POINT  3683  -0.8098872469285382  1.558855716647219
+  POINT  3684  0.8122352908723364  0.9501419754162519
+  POINT  3685  0.8104051256456382  0.906472994959531
+  POINT  3686  0.8242619690503401  0.9280398805441347
+  POINT  3687  0.8360004373787152  0.9058482689616149
+  POINT  3688  0.7853447977159081  0.9073716561903259
+  POINT  3689  0.7970832660442833  0.8851800446078061
+  POINT  3690  -0.7981225120244291  1.667268012606134
+  POINT  3691  -0.7858789610960804  1.645336548536518
+  POINT  3692  -0.8105657363537151  1.646386120351614
+  POINT  3693  -0.8083223964676065  1.68874009831917
+  POINT  3694  -0.7833822327188175  1.687505971472755
+  POINT  3695  -0.5625394347157237  1.926770454473135
+  POINT  3696  -0.5633131325513028  1.903651125396433
+  POINT  3697  0.7705818912066765  0.8424733375256814
+  POINT  3698  0.7837626948159199  0.8637513653920781
+  POINT  3699  0.7326340169672543  0.8219710783668762
+  POINT  3700  0.7073667471343005  0.8234191138841537
+  POINT  3701  0.7826618681823108  0.8198576518229621
+  POINT  3702  0.7577413078717008  0.8209069644030882
+  POINT  3703  -0.4817910506707482  1.883515177966469
+  POINT  3704  -0.4535953382527008  1.881018517409873
+  POINT  3705  -0.1676924267408599  1.972922145060293
+  POINT  3706  -0.1429216232763135  1.974160460921071
+  POINT  3707  -0.1804000298005828  1.950364725244908
+  POINT  3708  -0.2061860867894681  1.904246821311689
+  POINT  3709  -0.1930971044735862  1.927165852965472
+  POINT  3710  -0.1677962696132851  1.927494642951794
+  POINT  3711  -0.1421857271163959  1.927802618206136
+  POINT  3712  -0.1548828017893993  1.9046037459267
+  POINT  3713  -0.3470195026008313  2.037857912913609
+  POINT  3714  -0.3308724928075756  2.02013441147043
+  POINT  3715  -0.3039131500945664  2.025207748576093
+  POINT  3716  -0.3028453176999878  2.053039722963945
+  POINT  3717  0.7447139939428885  0.7993553926641568
+  POINT  3718  0.6303380302708946  0.6900585295689327
+  POINT  3719  0.6428324495039852  0.7126724654912038
+  POINT  3720  0.6561269917143919  0.6893024128025589
+  POINT  3721  0.6177729611817915  0.6671595753556676
+  POINT  3722  0.6555748733889517  0.7353044822019976
+  POINT  3723  0.8611670287339018  0.9049238182512134
+  POINT  3724  0.8869454301217814  0.9044104357969051
+  POINT  3725  0.8584326533700793  0.861047474912501
+  POINT  3726  0.8817493206784435  0.8600340666410642
+  POINT  3727  0.9210486921777763  0.8141301575433713
+  POINT  3728  0.9107234521315988  0.8352619789030669
+  POINT  3729  0.9422855600890829  0.8167734673163333
+  POINT  3730  0.9495771775734785  0.842384174618978
+  POINT  3731  0.9617787456594511  0.8261722358895418
+  POINT  3732  0.7892193098756044  1.079397739419273
+  POINT  3733  0.8152872768897109  1.078854980730896
+  POINT  3734  0.7798034815328188  1.100000000000001
+  POINT  3735  0.9193229141810171  1.163329591183576
+  POINT  3736  0.9298113978304205  1.183242428516302
+  POINT  3737  0.9062889917681686  1.142158607750625
+  POINT  3738  0.8929771307651715  1.163562940363839
+  POINT  3739  0.8522956328716681  1.228612849711463
+  POINT  3740  0.837830602605415  1.250482750581665
+  POINT  3741  0.812235290872338  1.249858024583749
+  POINT  3742  0.799899783578093  1.227942023853964
+  POINT  3743  0.8131833669600665  1.20654099538139
+  POINT  3744  0.8408603623965645  1.121145019269104
+  POINT  3745  0.8538145283276743  1.142340997734548
+  POINT  3746  0.8669890424212132  1.121195978465444
+  POINT  3747  0.8669890424212129  1.078804021534556
+  POINT  3748  0.8408603623965641  1.078854980730896
+  POINT  3749  0.82846179098325  1.1
+  POINT  3750  0.8152872768897113  1.121145019269104
+  POINT  3751  0.9194221353961591  1.120962629285181
+  POINT  3752  0.8930763519803138  1.121195978465444
+  POINT  3753  0.8801221860492038  1.1
+  POINT  3754  0.8930763519803134  1.078804021534556
+  POINT  3755  -0.1652815744918534  1.462628621584363
+  POINT  3756  -0.1907659967459046  1.462243224659058
+  POINT  3757  -0.1783169403910605  1.485564737740659
+  POINT  3758  -0.1658119438393313  1.508980251103249
+  POINT  3759  -0.1402563487249935  1.509227096769661
+  POINT  3760  -0.1147964179832611  1.509507589200907
+  POINT  3761  -0.1273725873952768  1.486230627097211
+  POINT  3762  -0.1144841787010701  1.463368643064062
+  POINT  3763  -0.1016884509119295  1.440476234896989
+  POINT  3764  -0.1523931657976466  1.439766637551214
+  POINT  3765  -0.1394853999262573  1.417152076695865
+  POINT  3766  -0.1399441094428025  1.463088150632815
+  POINT  3767  -0.1143265637384726  1.41753388028359
+  POINT  3768  -0.6853435919266468  1.287673763114354
+  POINT  3769  -0.7105801576185664  1.289729094837099
+  POINT  3770  -0.6967125141813659  1.309489942771997
+  POINT  3771  -0.683301779681033  1.330506458805299
+  POINT  3772  -0.6606007340361491  1.284085223765407
+  POINT  3773  -0.5521244282855743  1.267491765602699
+  POINT  3774  -0.531214695714908  1.283272620892991
+  POINT  3775  -0.5204810166117203  1.259638105213656
+  POINT  3776  -0.5170252424126385  1.306505568620204
+  POINT  3777  -0.4670734146859981  1.315378736371134
+  POINT  3778  -0.4761907297653664  1.284918827321127
+  POINT  3779  -0.4900040527115724  1.305930796048
+  POINT  3780  -0.5084959870014132  1.338392728788066
+  POINT  3781  -0.4981287110186286  1.412183873792054
+  POINT  3782  -0.4842957552672742  1.388125628580541
+  POINT  3783  -0.4959853681650477  1.362998556397703
+  POINT  3784  -0.4697851844025737  1.362945028398701
+  POINT  3785  -0.5230065578661137  1.363573328969906
+  POINT  3786  -0.6217621819421639  1.149652910400888
+  POINT  3787  -0.6135825866529505  1.178072958331425
+  POINT  3788  -0.5846720269599562  1.17678699407127
+  POINT  3789  -0.6036327296221302  1.20200227459217
+  POINT  3790  -0.5982586623818794  1.12633444114744
+  POINT  3791  -0.625229695894904  1.123547755018559
+  POINT  3792  0.603519405184624  0.8309500561023699
+  POINT  3793  0.6170330944287234  0.8530071028993547
+  POINT  3794  0.6300736469560195  0.8284070395037286
+  POINT  3795  0.5770712730760479  0.8325924629939763
+  POINT  3796  0.6560673202533718  0.8267963791922915
+  POINT  3797  0.6425536310092723  0.8047393323953068
+  POINT  3798  0.6555378200685227  0.7809106438815174
+  POINT  3799  0.6693570637151389  0.8484414037205379
+  POINT  3800  0.6575313827903875  0.8715137014739958
+  POINT  3801  0.6818370477683918  0.8247736966121162
+  POINT  3802  0.6940770036725333  0.8017740893559073
+  POINT  3803  0.5204817563689091  0.9403624530936948
+  POINT  3804  0.5521249845375786  0.9325083372590062
+  POINT  3805  0.5312152727586923  0.9167273455743463
+  POINT  3806  0.5685417583792288  0.9536792891827819
+  POINT  3807  0.5803132622791569  0.9286688549348657
+  POINT  3808  0.5581874967141129  0.9776206067864263
+  POINT  3809  0.5849478635550462  0.9748858063948901
+  POINT  3810  0.5170260021159305  0.8934940763875587
+  POINT  3811  0.5084968728533406  0.8616063696009865
+  POINT  3812  0.4900049278172879  0.8940690813510304
+  POINT  3813  0.4761914074198789  0.9150814518892764
+  POINT  3814  -0.4118595737137022  1.624213302099134
+  POINT  3815  -0.4251529309403653  1.647563186179945
+  POINT  3816  -0.4511531665576695  1.647585957545847
+  POINT  3817  -0.4637844661798776  1.624330107793784
+  POINT  3818  -0.4244363405635048  1.600812902702867
+  POINT  3819  -0.5659407581660016  1.531931289505812
+  POINT  3820  -0.5525288192947515  1.508327277415986
+  POINT  3821  -0.5785010723824027  1.508761668508167
+  POINT  3822  -0.5534434250144487  1.554992820682004
+  POINT  3823  -0.4485338246334084  1.507006314461094
+  POINT  3824  -0.4226367655224816  1.506908672526201
+  POINT  3825  -0.435079636413811  1.483400338794663
+  POINT  3826  -0.4473935041195021  1.459727226270572
+  POINT  3827  -0.4214964450085754  1.459629584335679
+  POINT  3828  -0.4733690892661234  1.459843285867061
+  POINT  3829  -0.449516025215981  1.554037769844186
+  POINT  3830  -0.4370100681408914  1.577477407210212
+  POINT  3831  -0.4235849966669893  1.553954285558657
+  POINT  3832  -0.4503673691124964  1.600896386988396
+  POINT  3833  -0.4763581937572642  1.600994612301129
+  POINT  3834  -0.4102196113030629  1.530475908566209
+  POINT  3835  -0.3977136542279733  1.553915545932234
+  POINT  3836  -0.3718450830779912  1.553929739564204
+  POINT  3837  -0.3967654230834656  1.506869932899778
+  POINT  3838  -0.4201830170185737  1.412318474237309
+  POINT  3839  -0.4323256464138405  1.388376288622284
+  POINT  3840  -0.3781167863242681  1.29879920764234
+  POINT  3841  -0.3913788961516381  1.321055940601513
+  POINT  3842  -0.3664754323470212  1.318314642856088
+  POINT  3843  0.5497072177947449  0.8842646338243024
+  POINT  3844  -0.369912683965047  1.459688431535422
+  POINT  3845  -0.3957054330234898  1.45965231351966
+  POINT  3846  -0.3833898282444415  1.483338814875533
+  POINT  3847  -0.4080193007291809  1.435979200995569
+  POINT  3848  -0.4263466658173307  1.740834085241741
+  POINT  3849  -0.400328341909865  1.740863550332469
+  POINT  3850  -0.4524468854138231  1.740754796342631
+  POINT  3851  -0.4396743990662632  1.764082297275825
+  POINT  3852  -0.3097261430634902  1.810967104243272
+  POINT  3853  -0.3226110295064803  1.787633608533215
+  POINT  3854  -0.3227033334420372  1.834225615188557
+  POINT  3855  -0.3487385640643834  1.834229995348783
+  POINT  3856  -0.361749038955477  1.810895722739966
+  POINT  3857  -0.3748000905044333  1.834207744327785
+  POINT  3858  -0.2960986803009519  1.694441395075749
+  POINT  3859  -0.3092572916925703  1.717731391619243
+  POINT  3860  -0.2705500390627937  1.741152736916458
+  POINT  3861  -0.2575214108159173  1.717900873575993
+  POINT  3862  -0.3223457974217933  1.741003719962304
+  POINT  3863  -0.2964460407683105  1.741076914962405
+  POINT  3864  -0.2313980361041401  1.671391750650108
+  POINT  3865  -0.2444305062821984  1.694636203997567
+  POINT  3866  -0.2702666305053687  1.694539917040918
+  POINT  3867  -0.283007775767233  1.671176725497322
+  POINT  3868  -0.2698541607685432  1.647885559791037
+  POINT  3869  -0.2440893407422511  1.648019607938641
+  POINT  3870  -0.2672494382577901  1.460598546765066
+  POINT  3871  -0.2928841607013203  1.460277363816133
+  POINT  3872  -0.2515356347854009  1.342332856101086
+  POINT  3873  -0.2623811974664229  1.317244504057174
+  POINT  3874  -0.2919653099646273  1.308388650689751
+  POINT  3875  -0.1028911793349833  1.718530690898937
+  POINT  3876  -0.09008828878243078  1.741894846390582
+  POINT  3877  -0.06433257279105092  1.741986256885419
+  POINT  3878  -0.05143487118258636  1.718678573727395
+  POINT  3879  -0.06425960725811419  1.695368237845231
+  POINT  3880  -0.08995108327429951  1.695292612748389
+  POINT  3881  -0.368785508621187  1.412252890706311
+  POINT  3882  -0.3565389399997162  1.436089592715149
+  POINT  3883  -0.3430961598768079  1.412340553241912
+  POINT  3884  -0.3809492249105797  1.388592163948052
+  POINT  3885  -0.3943920050334881  1.412341203421289
+  POINT  3886  -0.9090541215675839  1.516678058050803
+  POINT  3887  -0.8841290122746748  1.516251573574364
+  POINT  3888  -0.8945527630426953  1.493510386668125
+  POINT  3889  -0.3442233352206678  1.459776094071022
+  POINT  3890  -0.9222349220048072  0.9935749803284837
+  POINT  3891  -0.9298119726866239  1.016759958642744
+  POINT  3892  -0.8923999913222185  0.9932131674083375
+  POINT  3893  -0.9086231309691347  0.9715198382065103
+  POINT  3894  -0.9193234986920056  1.036672173203761
+  POINT  3895  -0.8929778005377472  1.036438693177921
+  POINT  3896  -0.8795723299628302  1.01500732084983
+  POINT  3897  -0.8996982271191322  0.880767139210223
+  POINT  3898  -0.8817511776424454  0.8600395718422131
+  POINT  3899  -0.8611683196738755  0.9049281356851671
+  POINT  3900  -0.8473115912897078  0.8833614668804504
+  POINT  3901  -0.8584342931566549  0.8610525769342052
+  POINT  3902  -0.9762098413216239  1.165284945469675
+  POINT  3903  -0.997099456147766  1.176109621926728
+  POINT  3904  -0.9741290824303535  1.192544620479725
+  POINT  3905  -0.8669896430765249  1.121195461587234
+  POINT  3906  -0.8930769311862954  1.121195461587234
+  POINT  3907  -0.8929778005377468  1.163561306822079
+  POINT  3908  -0.8795723299628295  1.18499267915017
+  POINT  3909  -0.8665383481426859  1.163822295502559
+  POINT  3910  -0.8538151471042945  1.142340069121766
+  POINT  3911  -0.8923999913222176  1.206786832591663
+  POINT  3912  -0.8659605389271567  1.207047821272143
+  POINT  3913  -0.8522964759156632  1.22861005451673
+  POINT  3914  -0.8643233019849532  1.250711573047714
+  POINT  3915  -0.8378315776140715  1.250479652850808
+  POINT  3916  -0.8674607939687377  1.448288347550512
+  POINT  3917  -0.880625219855303  1.470848740625364
+  POINT  3918  -0.8567477227612582  1.470653911453533
+  POINT  3919  -0.9052658342501747  1.471144822765103
+  POINT  3920  -0.9145602330542193  1.447853650274103
+  POINT  3921  -0.9287798605407519  1.470631853263992
+  POINT  3922  -0.8551504360858637  1.426293214143801
+  POINT  3923  -0.8428867224506646  1.403919847403877
+  POINT  3924  -0.8790279331799085  1.426488043315632
+  POINT  3925  -0.3674539456651266  1.365320608133509
+  POINT  3926  -0.3930604420774277  1.365408920848486
+  POINT  3927  -0.342076544277527  1.363852249023238
+  POINT  3928  -0.3297361762937239  1.388514502168795
+  POINT  3929  -0.3164699920729724  1.363862899958959
+  POINT  3930  -0.3235890235892179  0.2274028683809401
+  POINT  3931  -0.3350997888631224  0.2501294481465043
+  POINT  3932  -0.2834687403317903  0.2489576709070902
+  POINT  3933  -0.2966639886830955  0.2724409937888902
+  POINT  3934  -0.2704608405755851  0.2722993600322113
+  POINT  3935  -0.2966296808762294  0.2223295312752736
+  POINT  3936  -0.1462920886721623  0.1338956102550217
+  POINT  3937  -0.1594861386108715  0.112799832054819
+  POINT  3938  -0.1701239843311041  0.1377457483909715
+  POINT  3939  -0.1806324006258492  0.1609595933784048
+  POINT  3940  -0.1325848131294771  0.1562508639939317
+  POINT  3941  -0.1438602328341523  0.18046320820544
+  POINT  3942  -0.1686310362986485  0.1817015240662179
+  POINT  3943  -0.1555148550771758  0.2036109092498746
+  POINT  3944  0.4386840864652286  0.2500555623470795
+  POINT  3945  0.4275547023790719  0.2701870972292947
+  POINT  3946  0.4363678872897812  0.2277270104704525
+  POINT  3947  0.4374709259988536  0.2007674444807365
+  POINT  3948  0.6570445178274433  0.983393231895193
+  POINT  3949  0.6419126509369839  0.9676633861345023
+  POINT  3950  0.5230075599832441  0.8364253199979043
+  POINT  3951  0.4959864856846015  0.8370003249613759
+  POINT  3952  0.5495908203233755  0.8353330855637358
+  POINT  3953  0.6080387123820273  0.9244544423884578
+  POINT  3954  0.6232276175638591  0.9445513430214849
+  POINT  3955  0.6345362938250794  0.9191659785513011
+  POINT  3956  0.6154150694939318  0.972951849971659
+  POINT  3957  0.603632896928171  0.9979978495079076
+  POINT  3958  0.7067669236100544  0.7784753492330563
+  POINT  3959  0.6812372242441458  0.7798299319610187
+  POINT  3960  0.7192796978457332  0.7555840499003947
+  POINT  3961  0.7321650314351995  0.7325467367493127
+  POINT  3962  0.7068124777711333  0.7334938786870857
+  POINT  3963  0.7696084642331722  0.7538514696375571
+  POINT  3964  0.7572267681785672  0.7764640933314952
+  POINT  3965  0.78220298090194  0.7756786550064307
+  POINT  3966  0.7321194772741206  0.7775282072952832
+  POINT  3967  0.681791532026869  0.6888477123410485
+  POINT  3968  0.6941596111540411  0.7111864571304169
+  POINT  3969  0.6812742775645748  0.7342237702814989
+  POINT  3970  0.7114443399570634  0.9523898210689328
+  POINT  3971  0.701833470168305  0.9717084833569833
+  POINT  3972  0.7353499000938957  0.9946250724464286
+  POINT  3973  0.7488368251387765  0.9725955020049388
+  POINT  3974  0.8317211444056967  0.818155118547462
+  POINT  3975  0.8428844816292631  0.7960742687551694
+  POINT  3976  0.806819217856083  0.7748569002693113
+  POINT  3977  0.7944375218014781  0.7974695239632495
+  POINT  3978  0.8313171737400973  0.774273885048157
+  POINT  3979  0.5274406722697031  0.645278183331604
+  POINT  3980  0.5139780760684911  0.6688199115810427
+  POINT  3981  0.8366724454576642  0.5959493828581662
+  POINT  3982  0.8107876120856152  0.5970391420736303
+  POINT  3983  0.8352371979468542  0.6404419536233176
+  POINT  3984  0.8098836227889656  0.6411372127287723
+  POINT  3985  0.849269902725182  0.617464051206575
+  POINT  3986  0.8629531698349334  0.5947160930013301
+  POINT  3987  0.7977640501395507  0.6191741684232376
+  POINT  3988  0.7580563963117686  0.686967877422005
+  POINT  3989  0.7449730647745962  0.7097719063260957
+  POINT  3990  0.7574402848491961  0.7318620775394045
+  POINT  3991  0.7824164975725688  0.73107663921434
+  POINT  3992  0.7952790079836969  0.7084548889769143
+  POINT  3993  0.783379073929251  0.6864106961593085
+  POINT  3994  0.3718519646528623  0.6460685738009246
+  POINT  3995  0.3977195638381401  0.6460825747735008
+  POINT  3996  0.3852173445754782  0.622589980563834
+  POINT  3997  0.3726415027666674  0.5991895920729332
+  POINT  3998  0.3460554109559683  0.6459946952622733
+  POINT  3999  0.3335443833117357  0.622480546852703
+  POINT  4000  0.3478997028378276  0.5056968915066777
+  POINT  4001  0.3347412752163518  0.5289870072386599
+  POINT  4002  0.3738606978917799  0.5057430131123353
+  POINT  4003  0.3611306484642268  0.4823861293247153
+  POINT  4004  0.410224751110446  0.6695222364961869
+  POINT  4005  0.4226410815971621  0.693089522651879
+  POINT  4006  0.4485375402852113  0.6929916783879261
+  POINT  4007  0.4744829222011753  0.6928199085241475
+  POINT  4008  0.4620407002213319  0.6693115351180038
+  POINT  4009  0.4235901310330619  0.6460436432590962
+  POINT  4010  0.4495202504162308  0.6459599429452778
+  POINT  4011  0.4719304097134159  0.7878681736919808
+  POINT  4012  0.445955253277318  0.7879844432213585
+  POINT  4013  0.4842972507862167  0.8118730208509093
+  POINT  4014  0.4441866833419943  0.835171377589557
+  POINT  4015  0.4697865636563131  0.8370540704539915
+  POINT  4016  0.2210122047266095  0.9717705021939238
+  POINT  4017  0.1935446757021855  0.9638098278670224
+  POINT  4018  0.2000412850460666  0.9908128924818052
+  POINT  4019  0.1940370529594774  0.9380140529750184
+  POINT  4020  0.1730661332789345  0.9570564432628997
+  POINT  4021  0.3781169448507677  0.9012007749076077
+  POINT  4022  0.3913797501878318  0.8789438528115732
+  POINT  4023  0.4167344889095096  0.8792207388113424
+  POINT  4024  0.4281533910756757  0.9019914482378601
+  POINT  4025  0.4049212992043825  0.8581391028358198
+  POINT  4026  -0.354187761444375  1.340669005923672
+  POINT  4027  -0.3174896076722532  1.412351204177633
+  POINT  4028  -0.3451753083595763  1.506980095314935
+  POINT  4029  -0.3709726740250227  1.506906050915541
+  POINT  4030  -0.3585509031986004  1.530511213339181
+  POINT  4031  0.603532300194987  1.416365048482768
+  POINT  4032  0.6295441467711786  1.417478695807046
+  POINT  4033  0.6135825903018771  1.02192698648432
+  POINT  4034  0.5846722707577998  1.023213592262967
+  POINT  4035  0.6217621676097926  1.050347202143141
+  POINT  4036  0.6422796801749719  1.024484108743497
+  POINT  4037  0.6713312817526587  1.033291421134705
+  POINT  4038  0.682791146220892  1.060036942468629
+  POINT  4039  0.7036631704906631  1.040424039201016
+  POINT  4040  0.7196125493307207  1.015117133375846
+  POINT  4041  0.6631517044447431  1.004871205475884
+  POINT  4042  0.68609611940513  0.9922005442864006
+  POINT  4043  0.7079406567856048  0.9931864569376744
+  POINT  4044  0.6588393219524624  1.076452162201159
+  POINT  4045  0.6911712106904668  1.08358478026747
+  POINT  4046  0.6911712106904669  1.11641521973253
+  POINT  4047  0.703663170490664  1.159575960798985
+  POINT  4048  0.7196125493307221  1.184882866624155
+  POINT  4049  0.7310724137989548  1.15813734529023
+  POINT  4050  0.7079406567856064  1.206813543062326
+  POINT  4051  0.6860961194051318  1.2077994557136
+  POINT  4052  0.7018334701683071  1.228291516643017
+  POINT  4053  0.7237270314317858  1.268914732554276
+  POINT  4054  0.7114443399570656  1.247610178931068
+  POINT  4055  0.689599802576591  1.248596091582342
+  POINT  4056  0.6648570658973731  1.245007275054982
+  POINT  4057  0.720394061063117  1.355029314376916
+  POINT  4058  0.7073667471343053  1.376580886115847
+  POINT  4059  0.2552220030275064  1.270123345472574
+  POINT  4060  0.2310165357142874  1.274919876915728
+  POINT  4061  0.2229886106606231  1.298855506172868
+  POINT  4062  0.277100609810574  1.285751428192706
+  POINT  4063  0.2837498667572327  1.262744912427513
+  POINT  4064  0.2623833587342891  1.31724436121675
+  POINT  4065  0.2121440253098609  1.323943958317201
+  POINT  4066  0.2366728906950752  1.31969564355493
+  POINT  4067  0.1267632357448547  1.394459880332723
+  POINT  4068  0.1393369676815469  1.371802650586412
+  POINT  4069  0.1394932062142638  1.417152206466804
+  POINT  4070  0.1652909435179084  1.462628907854667
+  POINT  4071  0.1524017077899568  1.439766843696604
+  POINT  4072  0.1907748115251799  1.46224358575413
+  POINT  4073  0.1648302480981728  1.416692708909692
+  POINT  4074  0.1899716328346487  1.415868362487294
+  POINT  4075  0.1770631312589557  1.393253725257493
+  POINT  4076  0.3420788643559705  1.363852809898329
+  POINT  4077  0.3164727362272926  1.363863344502851
+  POINT  4078  0.5803132622791594  1.271331145065135
+  POINT  4079  0.5685417583792296  1.246320710817219
+  POINT  4080  0.5849478635550471  1.22511419360511
+  POINT  4081  0.5581874967141128  1.222379393213574
+  POINT  4082  0.3410988766517541  1.316846492609337
+  POINT  4083  0.3294837145235361  1.287156227474807
+  POINT  4084  0.3674561230128846  1.365321170201434
+  POINT  4085  0.3541893018257988  1.340669422860845
+  POINT  4086  0.3664761353086683  1.318314852912442
+  POINT  4087  0.3913797501878359  1.321056147188427
+  POINT  4088  0.3781169448507678  1.298799225092392
+  POINT  4089  0.3930622959108651  1.365409560220678
+  POINT  4090  0.4167344889095128  1.320779261188658
+  POINT  4091  0.4414743269103421  1.317261684153789
+  POINT  4092  0.4281533910756756  1.29800855176214
+  POINT  4093  0.4441866833420037  1.364828622410443
+  POINT  4094  0.418417034632542  1.365132674220909
+  POINT  4095  0.4049212992043899  1.341860897164181
+  POINT  4096  0.5314786558844242  0.4132956916654759
+  POINT  4097  0.5187692149696534  0.3899893172442862
+  POINT  4098  0.5321878076948166  0.3671318548131776
+  POINT  4099  0.5059835565279592  0.366787964201421
+  POINT  4100  0.557444337113713  0.4134814918151407
+  POINT  4101  0.5827009512386202  0.4148507387366729
+  POINT  4102  0.570230080261418  0.3917024547775748
+  POINT  4103  0.5439495268616263  0.4364439756245739
+  POINT  4104  0.5600485595370375  0.36614753960647
+  POINT  4105  0.4535974408368449  0.3189786765692466
+  POINT  4106  0.4817911173390542  0.3164817133245716
+  POINT  4107  0.4932358185089977  0.3430238621789637
+  POINT  4108  0.4406069832080197  0.3422487503253286
+  POINT  4109  0.4798172257838346  0.3658813246100724
+  POINT  4110  0.4271521264871417  0.3657875585406794
+  POINT  4111  0.4009821499453564  0.3657522919221532
+  POINT  4112  0.4139897977813316  0.3891595723997906
+  POINT  4113  0.4268707599995359  0.4125153849308312
+  POINT  4114  0.4007007834577506  0.412480118312305
+  POINT  4115  0.4536146310439949  0.365656030802966
+  POINT  4116  0.4663623690629565  0.3894201328254232
+  POINT  4117  0.4529693202287556  0.4125944055233763
+  POINT  4118  0.4396803059051746  0.4359149514358907
+  POINT  4119  0.3879725663382103  0.3424181391276151
+  POINT  4120  0.3748125929131735  0.3189970796306171
+  POINT  4121  0.348751082912906  0.3657681033818894
+  POINT  4122  0.3357684079986967  0.3424605608434468
+  POINT  4123  0.3227188368863485  0.3657726640331479
+  POINT  4124  0.3748102376324003  0.3657901529867263
+  POINT  4125  0.3617606665200521  0.3891022561764275
+  POINT  4126  0.7981174202709669  0.5327244482275539
+  POINT  4127  0.8083167462868261  0.5112521442312689
+  POINT  4128  0.7833770047178972  0.5124867104217563
+  POINT  4129  0.6338304357386257  0.5512280079518828
+  POINT  4130  0.6200902103135538  0.5746409141843742
+  POINT  4131  0.6324991754249474  0.5977193167350413
+  POINT  4132  0.6064342168647402  0.5978525373097486
+  POINT  4133  0.6719149239748829  0.574779859228439
+  POINT  4134  0.6603545921168847  0.5511257223320669
+  POINT  4135  0.6088230052962715  0.4588215931160478
+  POINT  4136  0.59585108617064  0.436185899178486
+  POINT  4137  0.5828871272165468  0.4592654697118005
+  POINT  4138  -0.331884881173231  1.483545367164599
+  POINT  4139  -0.3185111372079003  1.459946528344326
+  POINT  4140  -0.3194631103468087  1.507150529588239
+  POINT  4141  -0.52554435375023  1.460651911562538
+  POINT  4142  -0.4993744528208859  1.460138805904795
+  POINT  4143  -0.5119313839368531  1.436701696662309
+  POINT  4144  0.1163349573601741  0.3182652113792291
+  POINT  4145  0.2449072854742003  0.4121608054677838
+  POINT  4146  -0.2009698514016464  0.8534707715283603
+  POINT  4147  -0.2140116708400917  0.8313932516694217
+  POINT  4148  -0.2393797795057072  0.8325404856908127
+  POINT  4149  -0.2121408449285417  0.8760558714704199
+  POINT  4150  -0.1872860597869504  0.8743108471559207
+  POINT  4151  0.127132465291583  0.894676836666674
+  POINT  4152  0.1148263648583613  0.8728992000627938
+  POINT  4153  0.08976262098036089  0.8729001468017185
+  POINT  4154  0.01273553652980624  0.7819829513739015
+  POINT  4155  -0.01272666408762757  0.7819829726326072
+  POINT  4156  -0.0254652656755313  0.8049095312464711
+  POINT  4157  0.02547304947038772  0.8049094999970061
+  POINT  4158  -0.01281857489079619  0.8277596012101676
+  POINT  4159  0.01282545793265184  0.8277595860434606
+  POINT  4160  -0.1523931657976944  0.7602333624487868
+  POINT  4161  -0.1652815744919054  0.7373713784156379
+  POINT  4162  -0.1899646679918444  0.7841317994966117
+  POINT  4163  -0.2031333106786121  0.761326064135317
+  POINT  4164  -0.16482286497535  0.7833074523525887
+  POINT  4165  -0.1912963660934427  0.6914051458220578
+  POINT  4166  -0.1783169403911163  0.7144352622593422
+  POINT  4167  -0.190765996745954  0.7377567753409436
+  POINT  4168  -0.2168931566549622  0.6916851503194739
+  POINT  4169  -0.2293523004593074  0.7152312459244402
+  POINT  4170  -0.2043881601032401  0.6682696369568839
+  POINT  4171  -0.216168676577823  0.7383899479790212
+  POINT  4172  -0.05127185122873784  0.574387994533472
+  POINT  4173  -0.06413669377931794  0.5511677827929192
+  POINT  4174  -0.0896373955185108  0.5977109869463709
+  POINT  4175  -0.1025677504198028  0.5745570963812513
+  POINT  4176  -0.1152905077293856  0.5978196830629643
+  POINT  4177  -0.06404307385919276  0.5976033189067563
+  POINT  4178  -0.2000409483619362  0.9908125590425896
+  POINT  4179  -0.1935435858488344  0.9638096217199499
+  POINT  4180  -0.2210117479945479  0.9717701243549068
+  POINT  4181  -0.2162422823868681  1.021050008121517
+  POINT  4182  -0.2436331203401989  0.9753027708990402
+  POINT  4183  -0.2387206109003284  0.9495636996022114
+  POINT  4184  -0.4869820590795003  1.48379350076729
+  POINT  4185  -0.5004852970169145  1.507473374564007
+  POINT  4186  -0.5264779638563066  1.507792959609327
+  POINT  4187  -0.5139758382389583  1.531177313368311
+  POINT  4188  -0.1860067469030021  0.9140782780319783
+  POINT  4189  -0.2064857193976458  0.9208315670651237
+  POINT  4190  -0.1940354129868023  0.9380138979991218
+  POINT  4191  -0.1730646133541906  0.9570563326868045
+  POINT  4192  -0.1517739465170566  0.9608780715921235
+  POINT  4193  -0.1522657736550245  0.9350823478712953
+  POINT  4194  -0.2650907777478895  0.8349918337468681
+  POINT  4195  -0.2906881285583971  0.8357966694252272
+  POINT  4196  -0.3030284965421941  0.8604589225707839
+  POINT  4197  -0.25153563478542  0.8576671438989149
+  POINT  4198  0.08414133693730629  1.211465983918199
+  POINT  4199  0.1001200204733997  1.187725778893199
+  POINT  4200  0.07198015775010806  1.186931992925268
+  POINT  4201  0.1300430247579649  1.187702209119905
+  POINT  4202  0.1178818455707667  1.163168218126974
+  POINT  4203  0.1424274778411245  1.214703775865614
+  POINT  4204  0.1216293489051048  1.236677874201061
+  POINT  4205  0.09147713039086899  1.281482985978119
+  POINT  4206  0.1055156090275934  1.259693790045374
+  POINT  4207  0.0961674597830865  1.235275685730444
+  POINT  4208  0.1349702243383418  1.139072324176839
+  POINT  4209  0.1050472200537766  1.139095893950134
+  POINT  4210  0.09153953870518951  1.115
+  POINT  4211  0.07445115993761434  1.139095893950134
+  POINT  4212  -0.5390382780727077  1.484623338611682
+  POINT  4213  0.2162420219164392  1.021050614374515
+  POINT  4214  0.190205984662228  1.013704963117441
+  POINT  4215  0.03829458016801003  1.372220894429249
+  POINT  4216  0.01282545793269108  1.372240413956539
+  POINT  4217  0.0511358448574426  1.349448072198939
+  POINT  4218  2.955806821591106e-06  1.349370793216087
+  POINT  4219  0.01282456007472188  1.326416149691422
+  POINT  4220  0.01461979926874546  1.186523354706776
+  POINT  4221  1.778220601947322e-07  1.162810416823412
+  POINT  4222  -0.01461881405744477  1.186523361117448
+  POINT  4223  0.04262013268113254  1.186741304181503
+  POINT  4224  0.05859881621722593  1.163001099156504
+  POINT  4225  0.04509113486863883  1.13890520520637
+  POINT  4226  -0.5515952091886749  1.461186229369197
+  POINT  4227  -0.4744799334621519  1.507177854526273
+  POINT  4228  -0.165472434505202  1.139072411812712
+  POINT  4229  -0.1349707551804718  1.139072411812712
+  POINT  4230  -0.1526383708458634  1.115
+  POINT  4231  -0.1954892334723354  1.135221498571085
+  POINT  4232  -0.1778216178069438  1.159293910383798
+  POINT  4233  0.1872896609410397  0.8743109859661662
+  POINT  4234  0.1749120674912094  0.8954621113898433
+  POINT  4235  0.2064876703290602  0.9208318083220004
+  POINT  4236  0.2310165357142773  0.9250801230842716
+  POINT  4237  0.222988610660609  0.9011444938271308
+  POINT  4238  0.1860091279058091  0.9140784237178776
+  POINT  4239  0.1624614501216266  0.9126443560428614
+  POINT  4240  -0.06802546924145003  0.9655181143668055
+  POINT  4241  -0.05344835162850502  0.9422160746181485
+  POINT  4242  -0.0660171891927564  0.9189740276351777
+  POINT  4243  -0.1055130669770327  0.9403062631916447
+  POINT  4244  -0.09147385663134579  0.9185170754159038
+  POINT  4245  -0.1169358964722036  0.9171148990008733
+  POINT  4246  -0.08413986159895059  0.9885339864052013
+  POINT  4247  -0.1001191963363426  1.012274172298942
+  POINT  4248  -0.1300423153454955  1.012297680029021
+  POINT  4249  -0.09616541949367544  0.964724311645071
+  POINT  4250  -0.1216274593345332  0.9633221352300405
+  POINT  4251  -0.1424262990336993  0.9852961200455497
+  POINT  4252  -0.07445152962134589  1.139095919542792
+  POINT  4253  -0.05859850816281637  1.163001131159834
+  POINT  4254  -0.04509145696265957  1.138905211617042
+  POINT  4255  -0.0915405849711611  1.115
+  POINT  4256  -0.1050476361713179  1.139095919542792
+  POINT  4257  -0.1178816998306565  1.163168331355504
+  POINT  4258  -0.1300423153454874  1.187702319970979
+  POINT  4259  -0.1001191963363336  1.187725827701058
+  POINT  4260  -0.03047248221683449  1.115
+  POINT  4261  -0.01461946075830496  1.138905211617042
+  POINT  4262  0.01461915256788527  1.13890520520637
+  POINT  4263  0.03047149628827368  1.115
+  POINT  4264  -0.5643027933443245  1.438146009911702
+  POINT  4265  -0.5508821796320744  1.413788960868108
+  POINT  4266  -0.04509145696266351  1.061094788382958
+  POINT  4267  -0.07445152962134952  1.060904080457208
+  POINT  4268  -0.09154058497116185  1.085
+  POINT  4269  -0.6037739501149142  1.462822513164642
+  POINT  4270  -0.629786190128524  1.463935865418001
+  POINT  4271  -0.5910663659592644  1.485862732622138
+  POINT  4272  -0.5777967176668022  1.462117436960846
+  POINT  4273  0.01304426221765253  0.2697558646803882
+  POINT  4274  3.40990923834647e-05  0.29370747250347
+  POINT  4275  0.01303554245765141  0.3172859857361205
+  POINT  4276  0.03889625395460797  0.3173692823070822
+  POINT  4277  0.05195898966343572  0.2939922825878997
+  POINT  4278  -0.1661852783621522  0.6446439695455455
+  POINT  4279  -0.1406296832478173  0.6443971238791328
+  POINT  4280  -0.1279696700053386  0.6211359401298535
+  POINT  4281  -0.1409000249066307  0.5979820495647339
+  POINT  4282  -0.1665761999907756  0.5981202950022566
+  POINT  4283  -0.1538970377148225  0.5748040379353674
+  POINT  4284  -0.0898281697954999  0.5512434078897614
+  POINT  4285  -0.07705022536588976  0.5279627904180226
+  POINT  4286  -0.1154812820063747  0.5513521040063547
+  POINT  4287  -0.1028911793351295  0.4814693091010634
+  POINT  4288  -0.09008828878259244  0.4581051536094182
+  POINT  4289  -0.1158190029509173  0.4581981037221236
+  POINT  4290  -0.06433257279121862  0.4580137431145809
+  POINT  4291  -0.05143487118274115  0.4813214262726057
+  POINT  4292  -0.06425960725825622  0.5046317621547693
+  POINT  4293  -0.08995108327443818  0.5047073872516115
+  POINT  4294  -0.1156817974427631  0.5048003373643168
+  POINT  4295  -0.2447139148397334  0.458750976126894
+  POINT  4296  -0.2575214108160175  0.4820991264240077
+  POINT  4297  -0.2956862105641999  0.552212962174133
+  POINT  4298  -0.3083524534032872  0.5756052502306676
+  POINT  4299  -0.2951308726559443  0.5989453003844278
+  POINT  4300  -0.2693856405038162  0.5987871296286003
+  POINT  4301  -0.1674796753104897  0.4118349492919497
+  POINT  4302  -0.1287731218950435  0.4349510166885733
+  POINT  4303  -0.2191373675605783  0.3655112387958946
+  POINT  4304  -0.2320657174537384  0.3422727128926682
+  POINT  4305  -0.1933388420160294  0.3653995880227231
+  POINT  4306  -0.1676004834219778  0.365247690890096
+  POINT  4307  -0.1805101062087346  0.3420454654755879
+  POINT  4308  -0.1933709045446406  0.3189507959679287
+  POINT  4309  -0.09033298490795699  0.3647315453475037
+  POINT  4310  -0.07749719549601941  0.3412375096276676
+  POINT  4311  -0.1162853700092983  0.3182658843563927
+  POINT  4312  -0.1290351141702557  0.3416685291183941
+  POINT  4313  -0.09055555836575238  0.3178605640498327
+  POINT  4314  -0.1546660015552952  0.3884572641833807
+  POINT  4315  -0.1418372657480004  0.3651031416362454
+  POINT  4316  -0.1161006323035732  0.3648781024116788
+  POINT  4317  -0.1031351364857017  0.388166157865355
+  POINT  4318  -0.115959448139849  0.4115733315800042
+  POINT  4319  -0.1417164576365123  0.4116904000380991
+  POINT  4320  -0.2174584592230242  0.2276872721043722
+  POINT  4321  -0.1929932616013742  0.2274066449260338
+  POINT  4322  -0.2314832284426782  0.2493900509459132
+  POINT  4323  0.2009739409754892  0.8534708485841045
+  POINT  4324  0.2140164106698446  0.8313932627328198
+  POINT  4325  0.2393840269729823  0.8325404383886564
+  POINT  4326  0.2121440253098414  0.8760560416827979
+  POINT  4327  0.2515387733835079  0.8576671866389161
+  POINT  4328  0.2650944950121993  0.8349917207268363
+  POINT  4329  0.2366728906950585  0.8803043564450691
+  POINT  4330  0.3565432527087642  0.7639094381984384
+  POINT  4331  0.3431000535493891  0.7876586738985207
+  POINT  4332  0.3687888847024132  0.7877462070609996
+  POINT  4333  0.3699173557102733  0.7403104013129069
+  POINT  4334  0.3957094643753722  0.7403463558414465
+  POINT  4335  0.408022630829248  0.7640195457300547
+  POINT  4336  0.316472736227276  0.8361366554971499
+  POINT  4337  0.3297395574143579  0.8114849081565607
+  POINT  4338  0.2785365889436757  0.810669673014308
+  POINT  4339  0.2918675137583783  0.78731743588378
+  POINT  4340  0.2906913353542013  0.8357964212645677
+  POINT  4341  0.317493925420709  0.7876481392939995
+  POINT  4342  0.1025878977982452  0.5745567182395622
+  POINT  4343  0.0896562702361603  0.597710682557972
+  POINT  4344  0.06406238642942785  0.5976031006314915
+  POINT  4345  0.05129310564701566  0.5743878116949022
+  POINT  4346  0.08985063675821177  0.5512430564822264
+  POINT  4347  0.06415988671113435  0.551167539720733
+  POINT  4348  0.2687797639480877  0.6455641493598674
+  POINT  4349  0.2431231643384719  0.6453089840844264
+  POINT  4350  0.2305631512237915  0.6218764708167354
+  POINT  4351  0.2819948024675198  0.6222271025409538
+  POINT  4352  0.2436343471926314  0.5986520683559111
+  POINT  4353  0.2693979293372746  0.5987859574219867
+  POINT  4354  0.295142148103026  0.5989439689951812
+  POINT  4355  0.1021563562750863  0.6673194654312754
+  POINT  4356  0.1150353511837529  0.644234410272156
+  POINT  4357  0.1406441924174837  0.6443966786405773
+  POINT  4358  0.1532486505071942  0.6677423354608277
+  POINT  4359  0.1402684036868563  0.6907725550913939
+  POINT  4360  0.03826447023240792  0.6900671692800102
+  POINT  4361  0.06380091190101131  0.6901573317089966
+  POINT  4362  0.05108260086974906  0.6670531886809341
+  POINT  4363  0.01277759440998332  0.6438229681570777
+  POINT  4364  7.428719667277456e-06  0.6669630607120047
+  POINT  4365  0.01277613859153328  0.6900170078678736
+  POINT  4366  0.03836771197168318  0.6438605515953342
+  POINT  4367  0.1144944044351963  0.7366311597487549
+  POINT  4368  0.08912745822925902  0.736381119897366
+  POINT  4369  0.07645346211403239  0.7133299865296496
+  POINT  4370  0.1273836401631435  0.7137690955906919
+  POINT  4371  0.08927159275137353  0.6903160059305735
+  POINT  4372  0.1148089064881074  0.6904921202519284
+  POINT  4373  0.4518212529878313  0.5057738682137124
+  POINT  4374  0.465184904273339  0.4825054086020403
+  POINT  4375  0.4524520218356196  0.4592423271420978
+  POINT  4376  0.4263534616064  0.4591633065495527
+  POINT  4377  0.4003366945970671  0.4591340908868591
+  POINT  4378  0.4131084105275121  0.4824614665930662
+  POINT  4379  0.3875369179766944  0.4357935617101453
+  POINT  4380  0.3742918668978065  0.4590917217536589
+  POINT  4381  0.3483308718438542  0.4590456001480014
+  POINT  4382  0.3355211772211757  0.4357001583883022
+  POINT  4383  0.3485968010389959  0.4124156995742677
+  POINT  4384  0.3226258879827377  0.4123646653856249
+  POINT  4385  0.3746559557584901  0.4124377491791048
+  POINT  4386  0.1288047307752152  0.4349503006173213
+  POINT  4387  0.1416043882728272  0.4583144324095849
+  POINT  4388  0.1673509917944845  0.4584245316530031
+  POINT  4389  -0.6719169798004558  0.5747850694603622
+  POINT  4390  -0.6583093042315734  0.5975251794804863
+  POINT  4391  -0.6325001197399406  0.5977238510382468
+  POINT  4392  -0.6446528000590979  0.6207365146856324
+  POINT  4393  -0.6200909513322497  0.5746453944751544
+  POINT  4394  -0.6338317820182542  0.5512327601198538
+  POINT  4395  -0.6603567058333674  0.5511308304480003
+  POINT  4396  -0.6555755911690335  0.7353083420050284
+  POINT  4397  -0.6682285385534918  0.7576156912280005
+  POINT  4398  -0.6297861901285342  0.736064134581999
+  POINT  4399  -0.6428329994478872  0.712676398597095
+  POINT  4400  -0.6555383848190159  0.7809139921559407
+  POINT  4401  -0.6165165418360717  0.7598094302432904
+  POINT  4402  -0.669298336043044  0.6662384376081127
+  POINT  4403  -0.6561278625706282  0.6893066934048251
+  POINT  4404  -0.6303384615301288  0.6900624859817959
+  POINT  4405  -0.617773167953269  0.6671635500957667
+  POINT  4406  -0.6312384701101674  0.6438139835164594
+  POINT  4407  -0.6570476546018003  0.6436153119586989
+  POINT  4408  -0.4014002529598285  0.2700383257094666
+  POINT  4409  -0.3741727067253965  0.27334996209372
+  POINT  4410  -0.4275530250930976  0.2701895525912099
+  POINT  4411  -0.413970496297118  0.2956915594399436
+  POINT  4412  -0.552528819294769  0.6916727225840136
+  POINT  4413  -0.5659407581660193  0.6680687104941881
+  POINT  4414  -0.5274386814670023  0.6452812179027105
+  POINT  4415  -0.5139758382389809  0.6688226866316892
+  POINT  4416  -0.5534434250144683  0.6450071793179959
+  POINT  4417  -0.4995906038781986  0.2631845287792958
+  POINT  4418  -0.5220330620667432  0.2470747499873041
+  POINT  4419  -0.5242986119479727  1.412696979449798
+  POINT  4420  -0.5370795067138499  1.389271137997853
+  POINT  4421  -0.6080386773303289  1.275544683831694
+  POINT  4422  -0.5803129760647188  1.271330718756498
+  POINT  4423  -0.5059831445529943  0.3667913757701168
+  POINT  4424  -0.4932352953951364  0.3430271137837991
+  POINT  4425  -0.5321887713342541  0.367135581144821
+  POINT  4426  -0.5079589379908298  0.3173917569587619
+  POINT  4427  -0.5312276621219146  0.3243458369844735
+  POINT  4428  -0.4406028783066331  0.3422514462976649
+  POINT  4429  -0.4271464550941486  0.3657901332798047
+  POINT  4430  -0.4271308084842878  0.319112750029224
+  POINT  4431  -0.4009744569668887  0.3657546210088968
+  POINT  4432  -0.3879639820757995  0.3424203484000803
+  POINT  4433  -0.4009780363510187  0.3189615231474807
+  POINT  4434  -0.3748036698886297  0.3189991578107999
+  POINT  4435  -0.3225982309766809  0.272599847163193
+  POINT  4436  -0.3095903312204757  0.295941536288314
+  POINT  4437  -0.3480261314005026  0.2736299906459282
+  POINT  4438  -0.322621863941403  0.3192835665232336
+  POINT  4439  -0.3486570945637358  0.3192791863630081
+  POINT  4440  -0.361671148838955  0.2958203611104086
+  POINT  4441  -0.5793507264573807  0.3149531155611394
+  POINT  4442  -0.559089735434708  0.3233618662174895
+  POINT  4443  -0.6019536060826904  0.3014689385352345
+  POINT  4444  -0.5975734499532259  0.3286898812930204
+  POINT  4445  -0.5853084854744814  0.3675211971453344
+  POINT  4446  -0.5600508446470474  0.3661516103778371
+  POINT  4447  -0.5472652560279884  0.3429500779420456
+  POINT  4448  -0.6394984234703687  0.3534407939354787
+  POINT  4449  -0.6195300370470144  0.336799596475975
+  POINT  4450  -0.6402042756369811  0.3317952841487316
+  POINT  4451  -0.59708391643457  0.3500758223580163
+  POINT  4452  -0.6072650725682698  0.375630912328289
+  POINT  4453  -0.6318000263107644  0.3749586749133215
+  POINT  4454  -0.4733690892661433  0.7401567141329393
+  POINT  4455  -0.4473935041195238  0.7402727737294279
+  POINT  4456  -0.4350796364138371  0.7165996612053375
+  POINT  4457  -0.4485338246334357  0.6929936855389067
+  POINT  4458  -0.4744799334621762  0.6928221454737271
+  POINT  4459  -0.9531159528267128  1.311625568815883
+  POINT  4460  -0.9368955826010352  1.297829357565677
+  POINT  4461  -0.9286725348528561  1.344003890770111
+  POINT  4462  -0.9107254853761675  1.364731458138119
+  POINT  4463  -0.9089711690971842  1.341630731699689
+  POINT  4464  -0.8996982271191303  1.319232860789777
+  POINT  4465  -0.8817511776424417  1.339960428157786
+  POINT  4466  -0.9478247054166324  1.334507897143855
+  POINT  4467  -0.9742911853903737  1.325292445658128
+  POINT  4468  -0.7237276966616599  1.268912599029168
+  POINT  4469  -0.735096618916379  1.290728778686811
+  POINT  4470  -0.7601341054330575  1.291915097332702
+  POINT  4471  -0.7611202463885209  1.248706809229958
+  POINT  4472  -0.7359613233917619  1.248608134238107
+  POINT  4473  -0.8584342931566544  1.338947423065795
+  POINT  4474  -0.8677072351347084  1.361345293975707
+  POINT  4475  -0.8555539629729778  1.382412599396318
+  POINT  4476  -0.878870847458765  1.383425604488309
+  POINT  4477  -0.8317231101266079  1.381839536891275
+  POINT  4478  -0.6425539998817836  0.8047422621923712
+  POINT  4479  -0.6300738448254927  0.8284095176494604
+  POINT  4480  -0.6035321568988394  0.7836377002797208
+  POINT  4481  -0.5901115431865883  0.8079947493233146
+  POINT  4482  -0.6295443969124481  0.7825243480263627
+  POINT  4483  -0.6035193268966323  0.8309522193567862
+  POINT  4484  -0.5849475634276504  0.9748856125533498
+  POINT  4485  -0.6154150350169016  0.9729522812473277
+  POINT  4486  -0.558186928182785  0.9776198719068557
+  POINT  4487  -0.5685413210432758  0.9536791215466469
+  POINT  4488  -0.5803129760647213  0.9286692812435018
+  POINT  4489  -0.6080386773303318  0.9244553161683055
+  POINT  4490  -0.6575318130826098  0.8715159030934375
+  POINT  4491  -0.6833017796810371  0.8694935411947007
+  POINT  4492  -0.6454117171638463  0.8958179264472554
+  POINT  4493  -0.7705832842645446  0.8424773709560858
+  POINT  4494  -0.7588433027099163  0.8648041986557576
+  POINT  4495  -0.7326352446522477  0.8219748600418487
+  POINT  4496  -0.7203950816929057  0.8449740012683471
+  POINT  4497  -0.7577427685376387  0.8209111151428305
+  POINT  4498  -0.7872799108161213  0.9938994168287463
+  POINT  4499  -0.7999005431811769  0.9720602650495699
+  POINT  4500  -0.6911716053401084  1.116415034832809
+  POINT  4501  -0.6588395249798016  1.123547755018559
+  POINT  4502  -0.6336098290848978  1.1
+  POINT  4503  -0.6588395249798019  1.076452244981441
+  POINT  4504  -0.6911716053401085  1.083584965167191
+  POINT  4505  0.09108161431197412  1.92892895769766
+  POINT  4506  0.0784374556037911  1.952848893635003
+  POINT  4507  0.1297199434610248  1.95141448969183
+  POINT  4508  0.117550300698534  1.974880646392863
+  POINT  4509  0.1168063232074685  1.928523753279741
+  POINT  4510  0.09221374474079189  1.976259132004631
+  POINT  4511  0.5958510861706544  1.763814100821515
+  POINT  4512  0.5827009512386344  1.785149261263328
+  POINT  4513  0.5566695784063173  1.740461956613127
+  POINT  4514  0.543949526861649  1.763556024375426
+  POINT  4515  0.5574443371137314  1.786518508184859
+  POINT  4516  0.4406069832080601  1.857751249674671
+  POINT  4517  0.4271521264871886  1.83421244145932
+  POINT  4518  0.4009821499454121  1.834247708077846
+  POINT  4519  0.4683190704110495  1.906656832693797
+  POINT  4520  0.4512547779949978  1.924291404331337
+  POINT  4521  0.4535974408368768  1.881021323430753
+  POINT  4522  0.4275547023791019  1.929812902770704
+  POINT  4523  0.4139749628549972  1.904310855190037
+  POINT  4524  0.4271349362800323  1.880889795693039
+  POINT  4525  0.4009845052261806  1.881040781433955
+  POINT  4526  0.2445996538831497  1.92769194682199
+  POINT  4527  0.2188234909443422  1.927117901601367
+  POINT  4528  0.2577927451793436  1.904208772285857
+  POINT  4529  0.2062213034419837  1.904247857918665
+  POINT  4530  0.219094603253608  1.881001376849752
+  POINT  4531  0.2449079136756235  1.880926132341018
+  POINT  4532  0.6338304357386392  1.648771992048117
+  POINT  4533  0.6200902103135688  1.625359085815626
+  POINT  4534  0.6719149239748932  1.625220140771561
+  POINT  4535  0.6583077784871508  1.602479713749685
+  POINT  4536  0.6603545921168954  1.648874277667933
+  POINT  4537  0.6324991754249607  1.602280683264959
+  POINT  4538  -0.1021424187731994  1.532680249219833
+  POINT  4539  -0.08925865744348269  1.509683779547383
+  POINT  4540  -0.05106797999757626  1.532946672197124
+  POINT  4541  -0.06378769820553418  1.509842507789443
+  POINT  4542  -0.06388808387139217  1.556049101008727
+  POINT  4543  -0.08948240553071224  1.555941432969113
+  POINT  4544  0.03856216716368209  1.695423338986398
+  POINT  4545  0.06428710838449511  1.695368532929677
+  POINT  4546  0.02569863802649714  1.672140674241563
+  POINT  4547  0.07707501535284003  1.672037528121303
+  POINT  4548  0.0641598867112553  1.648832460279267
+  POINT  4549  0.03851748424163773  1.648892772908627
+  POINT  4550  0.5659417099410018  1.531934634130547
+  POINT  4551  0.5534446618254385  1.554996142017336
+  POINT  4552  0.5274406722697258  1.554721816668396
+  POINT  4553  0.5139780760685138  1.531180088418957
+  POINT  4554  0.5014486783385332  1.554401962995214
+  POINT  4555  0.5525300383735968  1.508330304567078
+  POINT  4556  0.5264797148574329  1.507795710730139
+  POINT  4557  0.4763619525905139  1.600997373411705
+  POINT  4558  0.4503721579247976  1.600898908604774
+  POINT  4559  0.4889282285334356  1.57775355516794
+  POINT  4560  0.437015063143961  1.577479718777408
+  POINT  4561  0.4754656323322236  1.554211826918501
+  POINT  4562  0.4495202504162626  1.554040057054722
+  POINT  4563  -0.5543889466319457  1.601634723984254
+  POINT  4564  -0.5158174195689951  1.624604519062324
+  POINT  4565  -0.7067681160242998  1.421520642274137
+  POINT  4566  -0.6812381415228208  1.420166394605991
+  POINT  4567  -0.7192811546032211  1.444411478249253
+  POINT  4568  -0.7068139299190671  1.466501582176445
+  POINT  4569  -0.6812753478728371  1.465772044756903
+  POINT  4570  -0.6941609825346077  1.488808931399417
+  POINT  4571  -0.6682285385534841  1.442384308771999
+  POINT  4572  -0.6555755911690246  1.464691657994971
+  POINT  4573  -0.642832999447877  1.487323601402905
+  POINT  4574  -0.6561278625706181  1.510693306595174
+  POINT  4575  -0.6303384615301174  1.509937514018204
+  POINT  4576  -0.6044783048305146  1.509466744711963
+  POINT  4577  -0.795281688119055  1.491538940299859
+  POINT  4578  -0.8084128269643931  1.514215043322471
+  POINT  4579  -0.7833818628348603  1.513583113242064
+  POINT  4580  -0.8319479745616404  1.470132194379473
+  POINT  4581  -0.8451124004482057  1.492692587454326
+  POINT  4582  -0.8074498036676983  1.469549608759799
+  POINT  4583  -0.6583093042315623  1.602474820519514
+  POINT  4584  -0.6840696601196044  1.602202266892252
+  POINT  4585  -0.6719169798004458  1.625214930539638
+  POINT  4586  -0.6603567058333568  1.648869169552
+  POINT  4587  -0.6861170617213987  1.648596615924738
+  POINT  4588  -0.6200909513322348  1.625354605524846
+  POINT  4589  -0.6325001197399274  1.602276148961753
+  POINT  4590  -0.6960089700998117  1.579573129898368
+  POINT  4591  -0.7096166456686952  1.602313239918492
+  POINT  4592  -0.7580588457643613  1.513026354362661
+  POINT  4593  -0.7711899846096995  1.535702457385272
+  POINT  4594  -0.759070512126698  1.557665525395329
+  POINT  4595  -0.7337114615940515  1.557414900715238
+  POINT  4596  -0.746915006181549  1.579934727604698
+  POINT  4597  -0.7327832660600191  1.512342083662414
+  POINT  4598  -0.8352411111831201  1.559550508253757
+  POINT  4599  -0.8218668659347803  1.536954007871214
+  POINT  4600  -0.833766691218975  1.514909834929008
+  POINT  4601  -0.8585664394185928  1.515431552003069
+  POINT  4602  -0.8727833030454442  1.538468821049046
+  POINT  4603  -0.8612539144163784  1.560626227145343
+  POINT  4604  -0.8492742954101363  1.582527935921348
+  POINT  4605  -0.8870932491813824  1.561590259057552
+  POINT  4606  -0.6232276942026356  1.255447834044357
+  POINT  4607  -0.6345365027105451  1.280832686268899
+  POINT  4608  -0.6454117171638424  1.304182073552744
+  POINT  4609  -0.6575318130826051  1.328484096906562
+  POINT  4610  -0.7452825106742074  1.766748812734714
+  POINT  4611  -0.7195696082196956  1.753704191519128
+  POINT  4612  -0.7346825660925151  1.736811138285226
+  POINT  4613  0.9194221353961591  1.079037370714819
+  POINT  4614  0.9062889917681682  1.057841392249375
+  POINT  4615  0.9193229141810166  1.036670408816424
+  POINT  4616  0.945291373506973  1.079037370714819
+  POINT  4617  0.9783777007535525  1.075588330548285
+  POINT  4618  0.9657211024305934  1.054625701263104
+  POINT  4619  0.9431232588334173  1.038161904096913
+  POINT  4620  -0.8366770569123627  1.604042711969681
+  POINT  4621  -0.862958098859082  1.605275488831112
+  POINT  4622  -0.8242074035366069  1.625543931595799
+  POINT  4623  -0.8367105808207926  1.647645326778684
+  POINT  4624  -0.7601841483210506  1.602111600619816
+  POINT  4625  -0.7732082126766361  1.62424625261842
+  POINT  4626  -0.7607649883473501  1.64512814487294
+  POINT  4627  -0.7348250977884042  1.601860975939725
+  POINT  4628  -0.7228857878081969  1.624490112933609
+  POINT  4629  -0.7561708970830496  1.726590799937584
+  POINT  4630  -0.772733266648999  1.706145322275593
+  POINT  4631  -0.7770353879932985  1.729456913383358
+  POINT  4632  -0.762786770696976  1.684857791593875
+  POINT  4633  -0.7306494736366229  1.713717480744354
+  POINT  4634  -0.4651802445159215  1.717491582075434
+  POINT  4635  -0.478507977764854  1.740739794109519
+  POINT  4636  -0.4778770142235909  1.694208306226483
+  POINT  4637  -0.5039314389699461  1.694293311610888
+  POINT  4638  -0.517332164752674  1.717513192692987
+  POINT  4639  -0.4268643705599177  1.787482016676044
+  POINT  4640  -0.4139825635227957  1.810837959448061
+  POINT  4641  -0.4006923724326489  1.787517528946952
+  POINT  4642  -0.1296597519163326  1.951414213872039
+  POINT  4643  -0.1174821802523645  1.97488115956188
+  POINT  4644  -0.09213197251187855  1.976259206413221
+  POINT  4645  -0.07836147075987729  1.95284863765098
+  POINT  4646  -0.09101647244887709  1.928928637153505
+  POINT  4647  -0.1167462840924468  1.928523316846944
+  POINT  4648  -0.2191373675604276  1.834488761204105
+  POINT  4649  -0.2320657174535903  1.857727287107332
+  POINT  4650  -0.2190636470476338  1.881000254671402
+  POINT  4651  -0.1933709045444542  1.881049204032071
+  POINT  4652  0.8473101853292  0.8833569326666098
+  POINT  4653  0.8332660620148927  0.8619719256229025
+  POINT  4654  0.9368941516810172  0.9021650458865321
+  POINT  4655  0.9141652759959854  0.9027396220037804
+  POINT  4656  0.8996966225585906  0.8807616681630838
+  POINT  4657  0.9531144137950445  0.8883682271819964
+  POINT  4658  0.9089691665526476  0.8583632528479395
+  POINT  4659  0.9286707540117458  0.8559895804250865
+  POINT  4660  0.9478228919945273  0.8654854485638506
+  POINT  4661  0.9742895940953513  0.8747006727983513
+  POINT  4662  0.7892193098756046  1.120602260580728
+  POINT  4663  0.7661340859320265  1.120602260580728
+  POINT  4664  0.7453364746168545  1.137017480313257
+  POINT  4665  0.7612858534569127  1.162324386138428
+  POINT  4666  0.7880563618837673  1.162952928107344
+  POINT  4667  0.801617881288919  1.141747279849832
+  POINT  4668  0.8141243288978738  1.163495686795721
+  POINT  4669  0.922234117671098  1.206428018361502
+  POINT  4670  0.8923991972469726  1.206789483755085
+  POINT  4671  0.9086222617400506  1.228483578319797
+  POINT  4672  0.9426645085467074  1.251441437761554
+  POINT  4673  0.9199356328616766  1.250866861644306
+  POINT  4674  0.9460344623234986  1.204936523081014
+  POINT  4675  0.9635693962292079  1.239075510846894
+  POINT  4676  0.9665514017727828  1.215733311752648
+  POINT  4677  0.9919382970906426  1.226721800669483
+  POINT  4678  0.8394680410751375  1.206818085755815
+  POINT  4679  0.8659597495193946  1.207050279757731
+  POINT  4680  0.8404090030129447  1.163772777170145
+  POINT  4681  0.8665376830375935  1.163823736366485
+  POINT  4682  0.826847483607793  1.184978425427658
+  POINT  4683  0.879571605450442  1.184994719799436
+  POINT  4684  0.9320787337191182  1.1
+  POINT  4685  0.945291373506973  1.120962629285181
+  POINT  4686  0.9783777007535525  1.124411669451716
+  POINT  4687  0.9997018129615381  1.124418950866357
+  POINT  4688  0.978973985914966  1.100000000000001
+  POINT  4689  0.9997018129615383  1.075581049133644
+  POINT  4690  -0.5685413210432749  1.246320878453353
+  POINT  4691  -0.5849475634276495  1.22511438744665
+  POINT  4692  -0.558186928182785  1.222380128093144
+  POINT  4693  -0.6154150350169001  1.227047718752672
+  POINT  4694  -0.6693576442741918  1.351555944662609
+  POINT  4695  -0.167600483421794  1.834752309109904
+  POINT  4696  -0.1933388420158644  1.834600411977277
+  POINT  4697  -0.1805101062085495  1.857954534524412
+  POINT  4698  -0.1418372657478033  1.834896858363754
+  POINT  4699  -0.1546660015551181  1.811542735816619
+  POINT  4700  -0.4620370625708226  1.530686188257811
+  POINT  4701  -0.4754621340447246  1.554209309909366
+  POINT  4702  -0.5274386814669798  1.554718782097289
+  POINT  4703  -0.5409136014030779  1.578214704365663
+  POINT  4704  -0.488924977272746  1.577750778638344
+  POINT  4705  -0.5023420743401272  1.601184499443732
+  POINT  4706  -0.5014460146275876  1.554399197051969
+  POINT  4707  -0.5283842030844769  1.601360685399539
+  POINT  4708  -0.307026646190256  1.530762509330517
+  POINT  4709  -0.3202413436397382  1.554099392425069
+  POINT  4710  -0.3460477174125448  1.554003783963598
+  POINT  4711  -0.4167337352741746  1.320779043075299
+  POINT  4712  -0.4049200019545112  1.341860467507728
+  POINT  4713  -0.4184152811999643  1.365132023322271
+  POINT  4714  -0.444185206290924  1.364827835281527
+  POINT  4715  -0.4558748191886974  1.339700763098688
+  POINT  4716  -0.4281529378097601  1.298008616208184
+  POINT  4717  -0.4414734365743483  1.31726154325396
+  POINT  4718  -0.3052226147487572  1.436508090722557
+  POINT  4719  -0.2918626311656733  1.41268203964944
+  POINT  4720  -0.387527432476217  1.764204188946687
+  POINT  4721  -0.3742815949163111  1.74090615310422
+  POINT  4722  -0.3483188669143581  1.74095249416879
+  POINT  4723  -0.3355076159900984  1.764298017511953
+  POINT  4724  -0.3485840989990452  1.787582382739701
+  POINT  4725  -0.3746456254390951  1.787560131718704
+  POINT  4726  -0.2662652803551629  1.413486875327799
+  POINT  4727  -0.2785322732786589  1.389329988782876
+  POINT  4728  -0.2393797795056821  1.367459514309189
+  POINT  4729  -0.2275668138025304  1.391282058482626
+  POINT  4730  -0.2650907777478673  1.365008166253133
+  POINT  4731  -0.2906881285583777  1.364203330574774
+  POINT  4732  -0.254065814376309  1.437439844710485
+  POINT  4733  -0.2417196143919218  1.461199465281187
+  POINT  4734  -0.2031333106785691  1.438673935864684
+  POINT  4735  -0.2161686765777762  1.46161005202098
+  POINT  4736  -0.2153673478236765  1.415235027865312
+  POINT  4737  -0.2407354564892946  1.414087793843921
+  POINT  4738  -0.3030284965421808  1.339541077429216
+  POINT  4739  -0.3410980309594216  1.316846283745817
+  POINT  4740  -0.317747173479222  1.308048220073937
+  POINT  4741  -0.3294838392633017  1.287156274473917
+  POINT  4742  -0.9141667945980355  0.9027448191933986
+  POINT  4743  -0.9241441586251957  0.925818625959403
+  POINT  4744  -0.8869468031432911  0.9044151227353022
+  POINT  4745  -0.9199367161369589  0.9491372269225671
+  POINT  4746  -0.8901017854543702  0.9487754140024209
+  POINT  4747  -0.8756368871527789  0.9269058156683426
+  POINT  4748  -0.9460351123335398  1.204933370559084
+  POINT  4749  -0.9222349220048066  1.206425019671516
+  POINT  4750  -0.9298119726866234  1.183240041357257
+  POINT  4751  -0.9086231309691339  1.22848016179349
+  POINT  4752  -0.9426655041399603  1.251436949836508
+  POINT  4753  -0.9635702350740014  1.239070998721239
+  POINT  4754  -0.9665520317485365  1.215729598793985
+  POINT  4755  -0.9919388674548592  1.226717335958311
+  POINT  4756  -0.945291881008572  1.120961981561394
+  POINT  4757  -0.9657213673270056  1.145372730908657
+  POINT  4758  -0.9431236890207383  1.161836177683806
+  POINT  4759  -0.9194226293405537  1.120961981561394
+  POINT  4760  -0.9193234986920051  1.163327826796239
+  POINT  4761  -0.9062895168718617  1.142157443148629
+  POINT  4762  -0.9141667945980333  1.297255180806602
+  POINT  4763  -0.9241441586251957  1.274181374040597
+  POINT  4764  -0.8869468031432908  1.295584877264698
+  POINT  4765  -0.9199367161369583  1.250862773077433
+  POINT  4766  -0.8901017854543694  1.251224585997579
+  POINT  4767  -0.8611683196738746  1.295071864314833
+  POINT  4768  -0.8756368871527777  1.273094184331657
+  POINT  4769  -0.8891962941400582  1.404556871241418
+  POINT  4770  -0.9015066520229322  1.426552004648129
+  POINT  4771  -0.9210509320574607  1.385862724891228
+  POINT  4772  -0.9329118140462531  1.401977062775719
+  POINT  4773  -0.9013495663017889  1.383489565820807
+  POINT  4774  -0.9247285940143692  1.425922478199889
+  POINT  4775  -0.9462684141426484  1.423382263576649
+  POINT  4776  0.6049131206502878  0.877309598708135
+  POINT  4777  0.6314673624216832  0.8747665821094937
+  POINT  4778  0.5629983999046556  0.8582907420677555
+  POINT  4779  0.5916219385403771  0.903283490464682
+  POINT  4780  0.5771876705474173  0.881524011254543
+  POINT  4781  0.6606003141937837  0.9159130979158032
+  POINT  4782  0.6454114090119518  0.8958161972827761
+  POINT  4783  0.6682277400060438  0.7576119037586664
+  POINT  4784  0.8072781051364538  0.8190358970858427
+  POINT  4785  0.8199454907865293  0.8405432464071745
+  POINT  4786  0.8088230227456499  0.8628527041612832
+  POINT  4787  0.7359606990234997  0.9513898423850494
+  POINT  4788  0.6312378772287175  0.6438097083703518
+  POINT  4789  0.6053782659292077  0.6442808068457315
+  POINT  4790  0.6692971127937785  0.6662337764187773
+  POINT  4791  0.5543901981760559  0.5983617114091063
+  POINT  4792  0.5804722527022488  0.5981408964082748
+  POINT  4793  0.5928812178136424  0.6212192989589418
+  POINT  4794  0.5409152640954354  0.6217819834064079
+  POINT  4795  0.5794163017667164  0.6445691659442577
+  POINT  4796  0.5534446618254187  0.6450038579826641
+  POINT  4797  0.6827110206033868  0.6431559774241149
+  POINT  4798  0.6960068885396047  0.6204215137572427
+  POINT  4799  0.6583077784871396  0.5975202862503148
+  POINT  4800  0.644651785038326  0.6207319093756892
+  POINT  4801  0.6570464802909097  0.6436106778856253
+  POINT  4802  0.6840675335882616  0.5977924518690869
+  POINT  4803  0.4869845609900976  0.7162042862129669
+  POINT  4804  0.5004877209262182  0.6925241429430447
+  POINT  4805  0.3467661162517571  0.5991403423080666
+  POINT  4806  0.3600578736282241  0.5757539547897421
+  POINT  4807  0.3083638810430472  0.5756037644505447
+  POINT  4808  0.3215176426403183  0.5523124721039487
+  POINT  4809  0.3209607541732924  0.5990449095695118
+  POINT  4810  0.3474061196893472  0.5523792401595866
+  POINT  4811  0.3732815062042575  0.5524284899244531
+  POINT  4812  0.3992263281404896  0.5524531492406183
+  POINT  4813  0.4251592647301369  0.5524343479041531
+  POINT  4814  0.3865745742016128  0.5290784346104629
+  POINT  4815  0.4385183622883312  0.5290800740491464
+  POINT  4816  0.399805519828012  0.5057676724285003
+  POINT  4817  0.4258222868373449  0.5057968880911938
+  POINT  4818  -0.1290351141700345  1.858331470881606
+  POINT  4819  -0.1676325459503838  1.881201101164698
+  POINT  4820  -0.1420220034534946  1.881509076419041
+  POINT  4821  0.2387210626959517  0.9495639690222952
+  POINT  4822  0.2436328066240511  0.9753031642914362
+  POINT  4823  0.2837498667572325  0.9372550875724873
+  POINT  4824  0.2552220030275005  0.9298766545274257
+  POINT  4825  -0.2062277447736721  1.811286535789597
+  POINT  4826  -0.1932591046156361  1.788048832340073
+  POINT  4827  -0.1674796753103309  1.78816505070805
+  POINT  4828  -0.427146455094102  1.834209866720196
+  POINT  4829  -0.4009744569668332  1.834245378991104
+  POINT  4830  0.6080387123820301  1.275545557611543
+  POINT  4831  0.6232276175638614  1.255448656978516
+  POINT  4832  -0.3879639820757397  1.857579651599921
+  POINT  4833  -0.400978036350968  1.88103847685252
+  POINT  4834  0.5982586890243901  1.073665759431299
+  POINT  4835  0.6252296287414438  1.076452162201159
+  POINT  4836  0.6336096932110187  1.1
+  POINT  4837  0.6631517044447444  1.195128794524116
+  POINT  4838  0.6570445178274451  1.216606768104808
+  POINT  4839  0.6036328969281715  1.202002150492093
+  POINT  4840  0.6135825903018777  1.17807301351568
+  POINT  4841  0.5846722707577997  1.176786407737033
+  POINT  4842  0.6154150694939333  1.227048150028342
+  POINT  4843  0.6419126509369857  1.232336613865498
+  POINT  4844  0.6588393219524626  1.123547837798841
+  POINT  4845  0.6827911462208924  1.139963057531371
+  POINT  4846  0.6713312817526597  1.166708578865296
+  POINT  4847  0.6252296287414441  1.123547837798841
+  POINT  4848  0.5982586890243901  1.126334240568701
+  POINT  4849  0.621762167609793  1.149652797856859
+  POINT  4850  0.6422796801749728  1.175515891256503
+  POINT  4851  0.164020661564597  1.371176139406209
+  POINT  4852  0.151435882723664  1.34890071831273
+  POINT  4853  0.1637419831568809  1.32712308170885
+  POINT  4854  0.1872896609410615  1.325689014033833
+  POINT  4855  0.1891620463010729  1.370351792983811
+  POINT  4856  0.2009739409755135  1.346529151415894
+  POINT  4857  0.2031409164146868  1.438674234575052
+  POINT  4858  0.2161769782660009  1.461610474189689
+  POINT  4859  0.469786563656322  1.362945929546009
+  POINT  4860  0.4959864856846096  1.362999675038624
+  POINT  4861  0.4558759182403852  1.339701318299977
+  POINT  4862  0.5084968728533463  1.338393630399014
+  POINT  4863  0.4670742072246604  1.315378991289354
+  POINT  4864  0.4900049278172905  1.30593091864897
+  POINT  4865  0.4761914074198786  1.284918548110724
+  POINT  4866  0.5561568634456745  0.5054866075849964
+  POINT  4867  0.5696414975319276  0.4821737373244354
+  POINT  4868  0.5566695784062961  0.4595380433868737
+  POINT  4869  0.5173342898657549  0.4824832229739147
+  POINT  4870  0.5300239409715238  0.5056664106781807
+  POINT  4871  0.5307038971770073  0.4593522432372088
+  POINT  4872  0.6401982971402013  0.3317903018453968
+  POINT  4873  -0.4271308084842474  1.880887249970777
+  POINT  4874  -0.4406028783065929  1.857748553702336
+  POINT  4875  0.1290789398474502  0.3416677408508039
+  POINT  4876  0.2707918770336867  0.3190640847943916
+  POINT  4877  0.2838216037510491  0.342405923116968
+  POINT  4878  0.2967064352547767  0.3191232831721288
+  POINT  4879  0.2966672279588796  0.4123156833632912
+  POINT  4880  0.2707735506272029  0.4122400074971047
+  POINT  4881  0.257917926599839  0.3889030404976021
+  POINT  4882  0.3097428517766997  0.3890312245492567
+  POINT  4883  0.2967601768624903  0.3657236820108142
+  POINT  4884  0.2708456186414003  0.3656644836330769
+  POINT  4885  0.348669067123182  0.3192773687792171
+  POINT  4886  0.3226368210966244  0.3192819294304756
+  POINT  4887  0.1522680043429109  0.9350823449274528
+  POINT  4888  0.1411709439283113  0.9164660325994185
+  POINT  4889  0.1517756270856191  0.9608781198194568
+  POINT  4890  0.1424274778411145  0.9852962241343869
+  POINT  4891  0.06430610842256937  0.8733571139055123
+  POINT  4892  -0.1624587418075321  0.9126443345571646
+  POINT  4893  -0.1749090482183757  0.8954620036231666
+  POINT  4894  -0.1390540263233682  0.8722504458240983
+  POINT  4895  -0.1637380546914805  0.872876903681107
+  POINT  4896  -0.1271288646247112  0.8946768856867426
+  POINT  4897  -0.1411680749703981  0.9164660734624837
+  POINT  4898  -0.3177471734792274  0.8919517799260631
+  POINT  4899  -0.329483839263302  0.9128437255260831
+  POINT  4900  -0.2919653099646355  0.8916113493102493
+  POINT  4901  -0.5307026991916051  1.740644006175757
+  POINT  4902  -0.5046118713058836  1.740607393325091
+  POINT  4903  -0.2366701992242543  0.8803041478867714
+  POINT  4904  -0.2229864076095583  0.9011442235143317
+  POINT  4905  -0.2623811974664366  0.8827554959428268
+  POINT  4906  -0.2310150736933585  0.9250798434814753
+  POINT  4907  -0.2552212991122408  0.9298763560514194
+  POINT  4908  -0.2770998744034699  0.9142483532981058
+  POINT  4909  -0.2837501498310739  0.9372548853707056
+  POINT  4910  0.0774440283183723  1.304217403277686
+  POINT  4911  0.03881725219542564  1.326565622278343
+  POINT  4912  0.06430610842259862  1.326642886094488
+  POINT  4913  0.1300430247579568  1.012297790880096
+  POINT  4914  0.1601893029384849  1.009853784900613
+  POINT  4915  -0.5439492395638065  1.763552072404057
+  POINT  4916  0.1654718142430775  1.139072324176839
+  POINT  4917  0.1954884959668184  1.135221145960012
+  POINT  4918  0.1526371887260874  1.115
+  POINT  4919  0.0744511599376107  1.060904106049866
+  POINT  4920  0.04509113486863491  1.06109479479363
+  POINT  4921  0.0915395387051887  1.085
+  POINT  4922  0.1050472200537729  1.060904106049866
+  POINT  4923  0.1178818455707611  1.036831781873027
+  POINT  4924  -0.1148218478251467  1.327100728637512
+  POINT  4925  -0.1271288646246889  1.305323114313257
+  POINT  4926  -0.1055130669770155  1.259693736808355
+  POINT  4927  -0.0961654194936606  1.235275688354929
+  POINT  4928  -0.1216274593345193  1.236677864769959
+  POINT  4929  -0.1169358964721835  1.282885100999126
+  POINT  4930  -0.1411680749703795  1.283533926537516
+  POINT  4931  -0.1522657736550094  1.264917652128704
+  POINT  4932  -0.1601888025280123  1.190146383608896
+  POINT  4933  -0.1424262990336894  1.21470387995445
+  POINT  4934  -0.1517739465170442  1.239121928407876
+  POINT  4935  -0.1730646133541794  1.242943667313195
+  POINT  4936  -0.1935435858488256  1.23619037828005
+  POINT  4937  -0.2000409483619318  1.20918744095741
+  POINT  4938  -0.1902056014951458  1.186295470367269
+  POINT  4939  -0.2162422823868677  1.178949991878482
+  POINT  4940  -0.07197924608410756  1.186932024979324
+  POINT  4941  -0.04261917342542124  1.186741317053575
+  POINT  4942  -0.06802546924143459  1.234481885633194
+  POINT  4943  -0.04142279373376428  1.233974250621721
+  POINT  4944  -0.08413986159893845  1.211466013594798
+  POINT  4945  -0.02799955197873597  1.210454254936938
+  POINT  4946  -0.03047248221683528  1.085
+  POINT  4947  -0.01461946075830892  1.061094788382958
+  POINT  4948  -0.5574452166680464  1.78651441220982
+  POINT  4949  0.01461915256788132  1.06109479479363
+  POINT  4950  0.0304714962882729  1.085
+  POINT  4951  -0.5600508446470343  1.833848389622163
+  POINT  4952  -0.5702320007807327  1.80829329965189
+  POINT  4953  0.03931483095520175  0.2700723466505569
+  POINT  4954  0.02631555828368541  0.2461208279362839
+  POINT  4955  -0.1792205407953417  0.6214914598743548
+  POINT  4956  -0.1918266319749102  0.6448371227882772
+  POINT  4957  -0.2305502899251118  0.6218773722469343
+  POINT  4958  -0.2174234225364297  0.6451171272856933
+  POINT  4959  -0.1922175536035337  0.5983134482449883
+  POINT  4960  -0.1284471570110525  0.5281451323978852
+  POINT  4961  -0.1411867376353554  0.5514588208893751
+  POINT  4962  -0.1668629127195004  0.5515970663268979
+  POINT  4963  -0.1925967795178503  0.5517170147675832
+  POINT  4964  -0.2698541607686237  0.5521144402089639
+  POINT  4965  -0.283007775767315  0.5288232745026783
+  POINT  4966  -0.2444305062822973  0.505363796002434
+  POINT  4967  -0.2313980361042359  0.5286082493498927
+  POINT  4968  -0.2702666305054589  0.505460082959083
+  POINT  4969  -0.2052880841559516  0.57508915747905
+  POINT  4970  -0.2183116508748344  0.5518638888737428
+  POINT  4971  -0.2440893407423372  0.5519803920613595
+  POINT  4972  -0.2567677755392221  0.5753700797328142
+  POINT  4973  -0.2436208204775297  0.5986530814809958
+  POINT  4974  -0.2179324249605177  0.5984603223511482
+  POINT  4975  -0.180400029800809  0.2496352747550937
+  POINT  4976  -0.1676924267411068  0.2270778549397124
+  POINT  4977  -0.1421857271166549  0.2721973817938652
+  POINT  4978  -0.1296597519166311  0.2485857861279637
+  POINT  4979  -0.1677962696135184  0.2725053570482074
+  POINT  4980  -0.1930971044737857  0.2728341470345288
+  POINT  4981  -0.1429216232766106  0.2258395390789346
+  POINT  4982  -0.2190636470477959  0.3189997453285982
+  POINT  4983  -0.2061860867896503  0.2957531786883119
+  POINT  4984  -0.218789846976941  0.2728830963951982
+  POINT  4985  -0.2448808996987482  0.3190750956130514
+  POINT  4986  -0.2577674591098479  0.2957924054814963
+  POINT  4987  -0.2445722107585427  0.2723090825996963
+  POINT  4988  0.3809518584410202  0.8114070527418378
+  POINT  4989  0.3930622959108535  0.834590439779322
+  POINT  4990  0.3943950576003953  0.7876578170417554
+  POINT  4991  0.4184170346325313  0.8348673257790913
+  POINT  4992  0.420185604567855  0.787680391410893
+  POINT  4993  0.4323276800484653  0.8116227145330592
+  POINT  4994  -0.4825260994418888  0.245549662667305
+  POINT  4995  -0.4794501888301547  0.2732145990965034
+  POINT  4996  -0.4386842330748265  0.2500580259226227
+  POINT  4997  -0.451254476412116  0.2757112596530997
+  POINT  4998  -0.4600706418055656  0.2332508323835454
+  POINT  4999  -0.4803685255622078  0.2229332524549853
+  POINT  5000  -0.4993744528209035  0.7398611940952052
+  POINT  5001  -0.5255443537502462  0.7393480884374621
+  POINT  5002  -0.4869820590795214  0.7162064992327106
+  POINT  5003  -0.5390382780727246  0.7153766613883175
+  POINT  5004  -0.5004852970169364  0.6925266254359931
+  POINT  5005  -0.5264779638563261  0.6922070403906727
+  POINT  5006  -0.77345589067113  1.270622324981528
+  POINT  5007  -0.7853458381447149  1.292625139435351
+  POINT  5008  -0.8122361874637845  1.249855250702
+  POINT  5009  -0.8242630135330745  1.271956769232984
+  POINT  5010  -0.7863319791001783  1.249416851332606
+  POINT  5011  -0.8473115912897067  1.31663853311955
+  POINT  5012  -0.8360016752991936  1.294147840186509
+  POINT  5013  -0.8332676487819732  1.338023398937471
+  POINT  5014  -0.8104062851489064  1.293523438037701
+  POINT  5015  -0.797084499910834  1.314816210388875
+  POINT  5016  -0.7837640344612707  1.336244739486196
+  POINT  5017  -0.7705832842645414  1.357522629043914
+  POINT  5018  -0.7826635002889927  1.380137822999123
+  POINT  5019  -0.8088244814654623  1.337143038088547
+  POINT  5020  -0.8199471833324101  1.359451928034792
+  POINT  5021  -0.807279942810097  1.380959176042351
+  POINT  5022  -0.6232276942026378  0.9445521659556427
+  POINT  5023  -0.6345365027105483  0.9191673137311007
+  POINT  5024  -0.7338058161932381  0.8659905173016491
+  POINT  5025  -0.7085383453729565  0.8674382094719559
+  POINT  5026  -0.7612864339682388  1.037676527390385
+  POINT  5027  -0.7737929108022619  1.015928569999747
+  POINT  5028  0.5828871272165641  1.7407345302882
+  POINT  5029  0.6088230052962853  1.741178406883953
+  POINT  5030  0.622728399621602  1.719001683811678
+  POINT  5031  0.60868237447285  1.69507525702827
+  POINT  5032  0.5696414975319481  1.717826262675565
+  POINT  5033  0.582374412255944  1.694785966090077
+  POINT  5034  0.3486690671232575  1.880722631220782
+  POINT  5035  0.3357684079987812  1.857539439156553
+  POINT  5036  0.3487510829129833  1.83423189661811
+  POINT  5037  0.3748125929132354  1.881002920369382
+  POINT  5038  0.3879725663382705  1.857581860872384
+  POINT  5039  0.3748102376324669  1.834209847013273
+  POINT  5040  -0.7082596515410564  1.556950004248954
+  POINT  5041  -0.6827126659919655  1.556839031222714
+  POINT  5042  -0.7204151574862053  1.534680802039585
+  POINT  5043  -0.707331456007024  1.51187718719613
+  POINT  5044  -0.6692983360430343  1.533761562391887
+  POINT  5045  -0.6817928739607939  1.511147649776588
+  POINT  5046  -0.6999482814288852  1.67045697441996
+  POINT  5047  -0.7115085553959744  1.646802735407598
+  POINT  5048  -0.7367170075156833  1.646350471428831
+  POINT  5049  -0.7172504588747746  1.696300456497408
+  POINT  5050  -0.7387387898653091  1.686080118149766
+  POINT  5051  -0.7493877559351275  1.667440767346929
+  POINT  5052  -0.6703095287511835  1.813126141385079
+  POINT  5053  -0.6782125778660619  1.834865769528198
+  POINT  5054  -0.5472652560279756  1.857049922057955
+  POINT  5055  -0.5590897354347  1.876638133782511
+  POINT  5056  -0.5312276621219014  1.875654163015527
+  POINT  5057  -0.5793507264573767  1.885046884438861
+  POINT  5058  -0.6019536060826904  1.898531061464766
+  POINT  5059  -0.6856902815480908  1.793686233469775
+  POINT  5060  -0.7026495642401416  1.77642946791499
+  POINT  5061  -0.7132275880957663  1.800932527123044
+  POINT  5062  -0.6338317820182409  1.648767239880146
+  POINT  5063  -0.5079589379908136  1.882608243041239
+
+END POINTS LIST
+
+
+
+BEGIN MESH STRUCTURE DESCRIPTION
+
+CONVEX 0    'GT_PK(2,2)'      813  1316  793  1317  1318  1240
+CONVEX 1    'GT_PK(2,2)'      1276  1319  1274  1320  1321  1116
+CONVEX 2    'GT_PK(2,2)'      813  1317  1240  1322  1323  1242
+CONVEX 3    'GT_PK(2,2)'      801  1324  813  1325  1326  829
+CONVEX 4    'GT_PK(2,2)'      813  1327  839  1326  1328  829
+CONVEX 5    'GT_PK(2,2)'      839  1327  813  1329  1322  1242
+CONVEX 6    'GT_PK(2,2)'      813  1324  801  1316  1330  793
+CONVEX 7    'GT_PK(2,2)'      801  1325  829  1331  1332  819
+CONVEX 8    'GT_PK(2,2)'      860  1333  848  1334  1335  832
+CONVEX 9    'GT_PK(2,2)'      801  1331  819  1336  1337  789
+CONVEX 10    'GT_PK(2,2)'      777  1338  801  1339  1336  789
+CONVEX 11    'GT_PK(2,2)'      793  1330  801  1340  1338  777
+CONVEX 12    'GT_PK(2,2)'      140  1341  145  1342  1343  172
+CONVEX 13    'GT_PK(2,2)'      1274  1344  1107  1321  1345  1116
+CONVEX 14    'GT_PK(2,2)'      1120  1346  1276  1347  1320  1116
+CONVEX 15    'GT_PK(2,2)'      1094  1348  1081  1349  1350  1069
+CONVEX 16    'GT_PK(2,2)'      1081  1351  1055  1350  1352  1069
+CONVEX 17    'GT_PK(2,2)'      145  1353  165  1343  1354  172
+CONVEX 18    'GT_PK(2,2)'      145  1341  140  1355  1356  113
+CONVEX 19    'GT_PK(2,2)'      129  1357  145  1358  1355  113
+CONVEX 20    'GT_PK(2,2)'      145  1357  129  1353  1359  165
+CONVEX 21    'GT_PK(2,2)'      113  1356  140  1360  1361  112
+CONVEX 22    'GT_PK(2,2)'      112  1361  140  1362  1363  127
+CONVEX 23    'GT_PK(2,2)'      127  1363  140  1364  1365  160
+CONVEX 24    'GT_PK(2,2)'      160  1365  140  1366  1342  172
+CONVEX 25    'GT_PK(2,2)'      725  1367  685  1368  1369  1234
+CONVEX 26    'GT_PK(2,2)'      725  1368  1234  1370  1371  1236
+CONVEX 27    'GT_PK(2,2)'      709  1372  725  1373  1374  745
+CONVEX 28    'GT_PK(2,2)'      146  1375  173  1376  1377  164
+CONVEX 29    'GT_PK(2,2)'      725  1378  761  1374  1379  745
+CONVEX 30    'GT_PK(2,2)'      761  1378  725  1380  1370  1236
+CONVEX 31    'GT_PK(2,2)'      1254  1381  972  1382  1383  1256
+CONVEX 32    'GT_PK(2,2)'      725  1372  709  1367  1384  685
+CONVEX 33    'GT_PK(2,2)'      793  1385  761  1386  1387  1238
+CONVEX 34    'GT_PK(2,2)'      793  1386  1238  1318  1388  1240
+CONVEX 35    'GT_PK(2,2)'      793  1340  777  1389  1390  745
+CONVEX 36    'GT_PK(2,2)'      617  1391  641  1392  1393  601
+CONVEX 37    'GT_PK(2,2)'      575  1394  617  1395  1392  601
+CONVEX 38    'GT_PK(2,2)'      575  1396  597  1394  1397  617
+CONVEX 39    'GT_PK(2,2)'      827  1398  856  1399  1400  844
+CONVEX 40    'GT_PK(2,2)'      876  1401  848  1402  1333  860
+CONVEX 41    'GT_PK(2,2)'      862  1403  876  1404  1405  892
+CONVEX 42    'GT_PK(2,2)'      876  1403  862  1401  1406  848
+CONVEX 43    'GT_PK(2,2)'      1107  1407  1095  1345  1408  1116
+CONVEX 44    'GT_PK(2,2)'      1272  1409  1107  1410  1344  1274
+CONVEX 45    'GT_PK(2,2)'      761  1385  793  1379  1389  745
+CONVEX 46    'GT_PK(2,2)'      993  1411  1010  1412  1413  977
+CONVEX 47    'GT_PK(2,2)'      977  1413  1010  1414  1415  994
+CONVEX 48    'GT_PK(2,2)'      1010  1416  1259  1417  1418  1261
+CONVEX 49    'GT_PK(2,2)'      631  1419  673  1420  1421  655
+CONVEX 50    'GT_PK(2,2)'      581  1422  540  1423  1424  557
+CONVEX 51    'GT_PK(2,2)'      1094  1425  1104  1348  1426  1081
+CONVEX 52    'GT_PK(2,2)'      1104  1427  1095  1426  1428  1081
+CONVEX 53    'GT_PK(2,2)'      1104  1429  1120  1430  1347  1116
+CONVEX 54    'GT_PK(2,2)'      1095  1427  1104  1408  1430  1116
+CONVEX 55    'GT_PK(2,2)'      1055  1431  1043  1432  1433  1028
+CONVEX 56    'GT_PK(2,2)'      1016  1434  1002  1435  1436  983
+CONVEX 57    'GT_PK(2,2)'      1043  1437  1016  1433  1438  1028
+CONVEX 58    'GT_PK(2,2)'      1002  1439  968  1436  1440  983
+CONVEX 59    'GT_PK(2,2)'      968  1441  953  1440  1442  983
+CONVEX 60    'GT_PK(2,2)'      953  1441  968  1443  1444  941
+CONVEX 61    'GT_PK(2,2)'      968  1439  1002  1445  1446  985
+CONVEX 62    'GT_PK(2,2)'      1026  1447  1010  1448  1417  1261
+CONVEX 63    'GT_PK(2,2)'      1010  1447  1026  1415  1449  994
+CONVEX 64    'GT_PK(2,2)'      1259  1416  1010  1450  1411  993
+CONVEX 65    'GT_PK(2,2)'      1014  1451  1000  1452  1453  1032
+CONVEX 66    'GT_PK(2,2)'      1000  1454  1022  1453  1455  1032
+CONVEX 67    'GT_PK(2,2)'      981  1456  1000  1457  1451  1014
+CONVEX 68    'GT_PK(2,2)'      1022  1454  1000  1458  1459  987
+CONVEX 69    'GT_PK(2,2)'      1000  1456  981  1460  1461  967
+CONVEX 70    'GT_PK(2,2)'      1000  1460  967  1459  1462  987
+CONVEX 71    'GT_PK(2,2)'      924  1463  952  1464  1465  936
+CONVEX 72    'GT_PK(2,2)'      952  1466  964  1465  1467  936
+CONVEX 73    'GT_PK(2,2)'      952  1468  940  1469  1470  969
+CONVEX 74    'GT_PK(2,2)'      952  1469  969  1471  1472  982
+CONVEX 75    'GT_PK(2,2)'      843  1473  856  1474  1398  827
+CONVEX 76    'GT_PK(2,2)'      964  1466  952  1475  1471  982
+CONVEX 77    'GT_PK(2,2)'      940  1468  952  1476  1463  924
+CONVEX 78    'GT_PK(2,2)'      1248  1477  1250  1478  1479  909
+CONVEX 79    'GT_PK(2,2)'      174  1480  189  1481  1482  206
+CONVEX 80    'GT_PK(2,2)'      194  1483  174  1484  1481  206
+CONVEX 81    'GT_PK(2,2)'      306  1485  336  1486  1487  324
+CONVEX 82    'GT_PK(2,2)'      1228  1488  567  1489  1490  1226
+CONVEX 83    'GT_PK(2,2)'      86  1491  61  1492  1493  71
+CONVEX 84    'GT_PK(2,2)'      248  1494  222  1495  1496  234
+CONVEX 85    'GT_PK(2,2)'      320  1497  335  1498  1499  352
+CONVEX 86    'GT_PK(2,2)'      320  1500  306  1501  1502  292
+CONVEX 87    'GT_PK(2,2)'      336  1503  320  1504  1498  352
+CONVEX 88    'GT_PK(2,2)'      320  1503  336  1500  1485  306
+CONVEX 89    'GT_PK(2,2)'      305  1505  320  1506  1501  292
+CONVEX 90    'GT_PK(2,2)'      320  1505  305  1497  1507  335
+CONVEX 91    'GT_PK(2,2)'      305  1508  319  1507  1509  335
+CONVEX 92    'GT_PK(2,2)'      319  1508  305  1510  1511  290
+CONVEX 93    'GT_PK(2,2)'      1188  1512  84  1513  1514  1187
+CONVEX 94    'GT_PK(2,2)'      84  1515  71  1514  1516  1187
+CONVEX 95    'GT_PK(2,2)'      189  1480  174  1517  1518  156
+CONVEX 96    'GT_PK(2,2)'      174  1483  194  1519  1520  158
+CONVEX 97    'GT_PK(2,2)'      156  1518  174  1521  1522  141
+CONVEX 98    'GT_PK(2,2)'      126  1523  1191  1524  1525  1193
+CONVEX 99    'GT_PK(2,2)'      141  1522  174  1526  1519  158
+CONVEX 100    'GT_PK(2,2)'      74  1527  49  1528  1529  63
+CONVEX 101    'GT_PK(2,2)'      205  1530  189  1531  1532  177
+CONVEX 102    'GT_PK(2,2)'      189  1530  205  1533  1534  219
+CONVEX 103    'GT_PK(2,2)'      189  1533  219  1482  1535  206
+CONVEX 104    'GT_PK(2,2)'      189  1517  156  1532  1536  177
+CONVEX 105    'GT_PK(2,2)'      129  1358  113  1537  1538  102
+CONVEX 106    'GT_PK(2,2)'      165  1359  129  1539  1540  151
+CONVEX 107    'GT_PK(2,2)'      129  1537  102  1541  1542  119
+CONVEX 108    'GT_PK(2,2)'      920  1543  934  1544  1545  904
+CONVEX 109    'GT_PK(2,2)'      892  1546  920  1547  1544  904
+CONVEX 110    'GT_PK(2,2)'      934  1548  918  1545  1549  904
+CONVEX 111    'GT_PK(2,2)'      129  1541  119  1540  1550  151
+CONVEX 112    'GT_PK(2,2)'      102  1538  113  1551  1552  88
+CONVEX 113    'GT_PK(2,2)'      113  1360  112  1552  1553  88
+CONVEX 114    'GT_PK(2,2)'      1252  1554  1251  1555  1556  930
+CONVEX 115    'GT_PK(2,2)'      687  1557  709  1558  1559  727
+CONVEX 116    'GT_PK(2,2)'      709  1373  745  1559  1560  727
+CONVEX 117    'GT_PK(2,2)'      948  1561  918  1562  1548  934
+CONVEX 118    'GT_PK(2,2)'      918  1561  948  1563  1564  930
+CONVEX 119    'GT_PK(2,2)'      948  1565  1252  1564  1555  930
+CONVEX 120    'GT_PK(2,2)'      948  1566  972  1567  1381  1254
+CONVEX 121    'GT_PK(2,2)'      1252  1565  948  1568  1567  1254
+CONVEX 122    'GT_PK(2,2)'      709  1557  687  1569  1570  667
+CONVEX 123    'GT_PK(2,2)'      709  1569  667  1384  1571  685
+CONVEX 124    'GT_PK(2,2)'      711  1572  687  1573  1558  727
+CONVEX 125    'GT_PK(2,2)'      687  1572  711  1574  1575  669
+CONVEX 126    'GT_PK(2,2)'      647  1576  687  1577  1574  669
+CONVEX 127    'GT_PK(2,2)'      667  1570  687  1578  1576  647
+CONVEX 128    'GT_PK(2,2)'      1053  1579  1264  1580  1581  1262
+CONVEX 129    'GT_PK(2,2)'      627  1582  623  1583  1584  653
+CONVEX 130    'GT_PK(2,2)'      623  1582  627  1585  1586  587
+CONVEX 131    'GT_PK(2,2)'      667  1587  627  1588  1583  653
+CONVEX 132    'GT_PK(2,2)'      754  1589  740  1590  1591  722
+CONVEX 133    'GT_PK(2,2)'      674  1592  694  1593  1594  650
+CONVEX 134    'GT_PK(2,2)'      740  1595  694  1591  1596  722
+CONVEX 135    'GT_PK(2,2)'      694  1592  674  1596  1597  722
+CONVEX 136    'GT_PK(2,2)'      641  1598  659  1599  1600  681
+CONVEX 137    'GT_PK(2,2)'      659  1598  641  1601  1391  617
+CONVEX 138    'GT_PK(2,2)'      673  1602  697  1421  1603  655
+CONVEX 139    'GT_PK(2,2)'      697  1604  677  1603  1605  655
+CONVEX 140    'GT_PK(2,2)'      597  1606  637  1397  1607  617
+CONVEX 141    'GT_PK(2,2)'      637  1608  659  1607  1601  617
+CONVEX 142    'GT_PK(2,2)'      659  1608  637  1609  1610  677
+CONVEX 143    'GT_PK(2,2)'      677  1610  637  1605  1611  655
+CONVEX 144    'GT_PK(2,2)'      555  1612  597  1613  1396  575
+CONVEX 145    'GT_PK(2,2)'      802  1614  784  1615  1616  768
+CONVEX 146    'GT_PK(2,2)'      784  1617  820  1618  1619  806
+CONVEX 147    'GT_PK(2,2)'      848  1620  820  1335  1621  832
+CONVEX 148    'GT_PK(2,2)'      820  1622  802  1621  1623  832
+CONVEX 149    'GT_PK(2,2)'      802  1622  820  1614  1617  784
+CONVEX 150    'GT_PK(2,2)'      730  1624  717  1625  1626  747
+CONVEX 151    'GT_PK(2,2)'      697  1627  717  1604  1628  677
+CONVEX 152    'GT_PK(2,2)'      784  1629  750  1616  1630  768
+CONVEX 153    'GT_PK(2,2)'      661  1631  641  1632  1599  681
+CONVEX 154    'GT_PK(2,2)'      875  1633  846  1634  1635  859
+CONVEX 155    'GT_PK(2,2)'      846  1636  860  1637  1334  832
+CONVEX 156    'GT_PK(2,2)'      846  1633  875  1636  1638  860
+CONVEX 157    'GT_PK(2,2)'      814  1639  827  1640  1399  844
+CONVEX 158    'GT_PK(2,2)'      780  1641  814  1642  1643  798
+CONVEX 159    'GT_PK(2,2)'      780  1644  747  1645  1646  765
+CONVEX 160    'GT_PK(2,2)'      748  1647  719  1648  1649  730
+CONVEX 161    'GT_PK(2,2)'      862  1650  834  1406  1651  848
+CONVEX 162    'GT_PK(2,2)'      820  1652  834  1619  1653  806
+CONVEX 163    'GT_PK(2,2)'      834  1652  820  1651  1620  848
+CONVEX 164    'GT_PK(2,2)'      878  1654  892  1655  1547  904
+CONVEX 165    'GT_PK(2,2)'      878  1656  862  1654  1404  892
+CONVEX 166    'GT_PK(2,2)'      627  1657  607  1586  1658  587
+CONVEX 167    'GT_PK(2,2)'      627  1587  667  1659  1578  647
+CONVEX 168    'GT_PK(2,2)'      426  1660  466  1661  1662  1219
+CONVEX 169    'GT_PK(2,2)'      627  1659  647  1657  1663  607
+CONVEX 170    'GT_PK(2,2)'      543  1664  517  1665  1666  559
+CONVEX 171    'GT_PK(2,2)'      1120  1667  1278  1346  1668  1276
+CONVEX 172    'GT_PK(2,2)'      624  1669  584  1670  1671  602
+CONVEX 173    'GT_PK(2,2)'      584  1669  624  1672  1673  604
+CONVEX 174    'GT_PK(2,2)'      642  1674  624  1675  1670  602
+CONVEX 175    'GT_PK(2,2)'      624  1676  644  1673  1677  604
+CONVEX 176    'GT_PK(2,2)'      1280  1678  1127  1679  1680  1126
+CONVEX 177    'GT_PK(2,2)'      1127  1681  1278  1682  1667  1120
+CONVEX 178    'GT_PK(2,2)'      1278  1681  1127  1683  1678  1280
+CONVEX 179    'GT_PK(2,2)'      1090  1684  1270  1685  1686  1269
+CONVEX 180    'GT_PK(2,2)'      624  1674  642  1687  1688  664
+CONVEX 181    'GT_PK(2,2)'      644  1676  624  1689  1687  664
+CONVEX 182    'GT_PK(2,2)'      1272  1690  1100  1409  1691  1107
+CONVEX 183    'GT_PK(2,2)'      1270  1692  1100  1693  1690  1272
+CONVEX 184    'GT_PK(2,2)'      1100  1692  1270  1694  1684  1090
+CONVEX 185    'GT_PK(2,2)'      1136  1695  1129  1696  1697  1286
+CONVEX 186    'GT_PK(2,2)'      925  1698  953  1699  1443  941
+CONVEX 187    'GT_PK(2,2)'      745  1390  777  1560  1700  727
+CONVEX 188    'GT_PK(2,2)'      727  1700  777  1701  1702  759
+CONVEX 189    'GT_PK(2,2)'      777  1339  789  1702  1703  759
+CONVEX 190    'GT_PK(2,2)'      1135  1704  1289  1705  1706  1287
+CONVEX 191    'GT_PK(2,2)'      839  1329  1242  1707  1708  1244
+CONVEX 192    'GT_PK(2,2)'      829  1328  839  1709  1710  867
+CONVEX 193    'GT_PK(2,2)'      867  1710  839  1711  1707  1244
+CONVEX 194    'GT_PK(2,2)'      1288  1712  1136  1713  1696  1286
+CONVEX 195    'GT_PK(2,2)'      613  1714  631  1715  1420  655
+CONVEX 196    'GT_PK(2,2)'      637  1716  613  1611  1715  655
+CONVEX 197    'GT_PK(2,2)'      613  1716  637  1717  1606  597
+CONVEX 198    'GT_PK(2,2)'      540  1718  519  1424  1719  557
+CONVEX 199    'GT_PK(2,2)'      395  1720  439  1721  1722  415
+CONVEX 200    'GT_PK(2,2)'      459  1723  439  1724  1725  481
+CONVEX 201    'GT_PK(2,2)'      439  1723  459  1722  1726  415
+CONVEX 202    'GT_PK(2,2)'      433  1727  471  1728  1729  449
+CONVEX 203    'GT_PK(2,2)'      1259  1450  993  1730  1731  1257
+CONVEX 204    'GT_PK(2,2)'      997  1732  1016  1733  1435  983
+CONVEX 205    'GT_PK(2,2)'      1016  1732  997  1438  1734  1028
+CONVEX 206    'GT_PK(2,2)'      1109  1735  1119  1736  1737  1126
+CONVEX 207    'GT_PK(2,2)'      1119  1735  1109  1738  1739  1097
+CONVEX 208    'GT_PK(2,2)'      1063  1740  1049  1741  1742  1038
+CONVEX 209    'GT_PK(2,2)'      1046  1743  1030  1744  1745  1056
+CONVEX 210    'GT_PK(2,2)'      1030  1746  1043  1745  1747  1056
+CONVEX 211    'GT_PK(2,2)'      1016  1748  1030  1434  1749  1002
+CONVEX 212    'GT_PK(2,2)'      1030  1748  1016  1746  1437  1043
+CONVEX 213    'GT_PK(2,2)'      1070  1750  1055  1751  1351  1081
+CONVEX 214    'GT_PK(2,2)'      1070  1752  1043  1750  1431  1055
+CONVEX 215    'GT_PK(2,2)'      1043  1752  1070  1747  1753  1056
+CONVEX 216    'GT_PK(2,2)'      1095  1754  1070  1428  1751  1081
+CONVEX 217    'GT_PK(2,2)'      1050  1755  1066  1756  1757  1079
+CONVEX 218    'GT_PK(2,2)'      1065  1758  1050  1759  1756  1079
+CONVEX 219    'GT_PK(2,2)'      1050  1758  1065  1760  1761  1033
+CONVEX 220    'GT_PK(2,2)'      23  1762  1172  1763  1764  1174
+CONVEX 221    'GT_PK(2,2)'      1019  1765  1050  1766  1760  1033
+CONVEX 222    'GT_PK(2,2)'      1050  1767  1035  1755  1768  1066
+CONVEX 223    'GT_PK(2,2)'      1035  1767  1050  1769  1765  1019
+CONVEX 224    'GT_PK(2,2)'      779  1770  811  1771  1772  797
+CONVEX 225    'GT_PK(2,2)'      779  1771  797  1773  1774  765
+CONVEX 226    'GT_PK(2,2)'      1164  1775  1167  1776  1777  15
+CONVEX 227    'GT_PK(2,2)'      20  1778  1164  1779  1776  15
+CONVEX 228    'GT_PK(2,2)'      811  1770  779  1780  1781  795
+CONVEX 229    'GT_PK(2,2)'      779  1782  775  1781  1783  795
+CONVEX 230    'GT_PK(2,2)'      753  1784  779  1785  1773  765
+CONVEX 231    'GT_PK(2,2)'      775  1782  779  1786  1784  753
+CONVEX 232    'GT_PK(2,2)'      391  1787  1214  1788  1789  1216
+CONVEX 233    'GT_PK(2,2)'      981  1457  1014  1790  1791  997
+CONVEX 234    'GT_PK(2,2)'      965  1792  981  1793  1790  997
+CONVEX 235    'GT_PK(2,2)'      1220  1794  1222  1795  1796  499
+CONVEX 236    'GT_PK(2,2)'      951  1797  981  1798  1792  965
+CONVEX 237    'GT_PK(2,2)'      797  1799  780  1774  1645  765
+CONVEX 238    'GT_PK(2,2)'      814  1800  797  1639  1801  827
+CONVEX 239    'GT_PK(2,2)'      780  1799  797  1641  1800  814
+CONVEX 240    'GT_PK(2,2)'      843  1802  871  1473  1803  856
+CONVEX 241    'GT_PK(2,2)'      882  1804  871  1805  1806  898
+CONVEX 242    'GT_PK(2,2)'      871  1804  882  1803  1807  856
+CONVEX 243    'GT_PK(2,2)'      871  1802  843  1808  1809  855
+CONVEX 244    'GT_PK(2,2)'      981  1797  951  1461  1810  967
+CONVEX 245    'GT_PK(2,2)'      1013  1811  1031  1812  1813  999
+CONVEX 246    'GT_PK(2,2)'      999  1813  1031  1814  1815  1021
+CONVEX 247    'GT_PK(2,2)'      1041  1816  1031  1817  1811  1013
+CONVEX 248    'GT_PK(2,2)'      1048  1818  1031  1819  1820  1058
+CONVEX 249    'GT_PK(2,2)'      1031  1818  1048  1815  1821  1021
+CONVEX 250    'GT_PK(2,2)'      1031  1816  1041  1820  1822  1058
+CONVEX 251    'GT_PK(2,2)'      336  1823  354  1487  1824  324
+CONVEX 252    'GT_PK(2,2)'      940  1476  924  1825  1826  912
+CONVEX 253    'GT_PK(2,2)'      1222  1827  529  1796  1828  499
+CONVEX 254    'GT_PK(2,2)'      529  1829  567  1830  1831  565
+CONVEX 255    'GT_PK(2,2)'      529  1832  525  1828  1833  499
+CONVEX 256    'GT_PK(2,2)'      525  1832  529  1834  1830  565
+CONVEX 257    'GT_PK(2,2)'      567  1835  587  1831  1836  565
+CONVEX 258    'GT_PK(2,2)'      735  1837  749  1838  1839  718
+CONVEX 259    'GT_PK(2,2)'      749  1837  735  1840  1841  769
+CONVEX 260    'GT_PK(2,2)'      796  1842  815  1843  1844  826
+CONVEX 261    'GT_PK(2,2)'      105  1845  86  1846  1847  118
+CONVEX 262    'GT_PK(2,2)'      105  1848  121  1849  1850  95
+CONVEX 263    'GT_PK(2,2)'      79  1851  61  1852  1491  86
+CONVEX 264    'GT_PK(2,2)'      105  1853  79  1845  1852  86
+CONVEX 265    'GT_PK(2,2)'      79  1853  105  1854  1849  95
+CONVEX 266    'GT_PK(2,2)'      969  1470  940  1855  1856  954
+CONVEX 267    'GT_PK(2,2)'      940  1857  926  1856  1858  954
+CONVEX 268    'GT_PK(2,2)'      940  1825  912  1857  1859  926
+CONVEX 269    'GT_PK(2,2)'      187  1860  199  1861  1862  169
+CONVEX 270    'GT_PK(2,2)'      187  1861  169  1863  1864  155
+CONVEX 271    'GT_PK(2,2)'      1183  1865  1185  1866  1867  61
+CONVEX 272    'GT_PK(2,2)'      71  1868  1185  1516  1869  1187
+CONVEX 273    'GT_PK(2,2)'      61  1867  1185  1493  1868  71
+CONVEX 274    'GT_PK(2,2)'      260  1870  248  1871  1495  234
+CONVEX 275    'GT_PK(2,2)'      244  1872  260  1873  1871  234
+CONVEX 276    'GT_PK(2,2)'      222  1874  204  1496  1875  234
+CONVEX 277    'GT_PK(2,2)'      188  1876  176  1877  1878  157
+CONVEX 278    'GT_PK(2,2)'      188  1879  204  1876  1880  176
+CONVEX 279    'GT_PK(2,2)'      176  1881  143  1878  1882  157
+CONVEX 280    'GT_PK(2,2)'      143  1883  126  1882  1884  157
+CONVEX 281    'GT_PK(2,2)'      126  1883  143  1885  1886  115
+CONVEX 282    'GT_PK(2,2)'      260  1887  275  1888  1889  290
+CONVEX 283    'GT_PK(2,2)'      275  1887  260  1890  1872  244
+CONVEX 284    'GT_PK(2,2)'      319  1891  349  1509  1892  335
+CONVEX 285    'GT_PK(2,2)'      367  1893  349  1894  1895  331
+CONVEX 286    'GT_PK(2,2)'      349  1891  319  1895  1896  331
+CONVEX 287    'GT_PK(2,2)'      305  1897  276  1511  1898  290
+CONVEX 288    'GT_PK(2,2)'      276  1899  260  1898  1888  290
+CONVEX 289    'GT_PK(2,2)'      260  1899  276  1870  1900  248
+CONVEX 290    'GT_PK(2,2)'      276  1897  305  1901  1506  292
+CONVEX 291    'GT_PK(2,2)'      101  1902  84  1903  1904  115
+CONVEX 292    'GT_PK(2,2)'      86  1905  101  1847  1906  118
+CONVEX 293    'GT_PK(2,2)'      101  1905  86  1907  1492  71
+CONVEX 294    'GT_PK(2,2)'      84  1902  101  1515  1907  71
+CONVEX 295    'GT_PK(2,2)'      99  1908  126  1909  1885  115
+CONVEX 296    'GT_PK(2,2)'      99  1910  1191  1908  1523  126
+CONVEX 297    'GT_PK(2,2)'      1191  1910  99  1911  1912  1188
+CONVEX 298    'GT_PK(2,2)'      99  1913  84  1912  1512  1188
+CONVEX 299    'GT_PK(2,2)'      84  1913  99  1904  1909  115
+CONVEX 300    'GT_PK(2,2)'      89  1914  111  1915  1916  114
+CONVEX 301    'GT_PK(2,2)'      240  1917  228  1918  1919  214
+CONVEX 302    'GT_PK(2,2)'      573  1920  593  1921  1922  559
+CONVEX 303    'GT_PK(2,2)'      593  1920  573  1923  1924  615
+CONVEX 304    'GT_PK(2,2)'      522  1925  543  1926  1927  563
+CONVEX 305    'GT_PK(2,2)'      543  1928  577  1927  1929  563
+CONVEX 306    'GT_PK(2,2)'      577  1930  593  1931  1932  609
+CONVEX 307    'GT_PK(2,2)'      577  1928  543  1933  1665  559
+CONVEX 308    'GT_PK(2,2)'      593  1930  577  1922  1933  559
+CONVEX 309    'GT_PK(2,2)'      1235  1934  724  1935  1936  1237
+CONVEX 310    'GT_PK(2,2)'      171  1937  187  1938  1863  155
+CONVEX 311    'GT_PK(2,2)'      187  1939  200  1940  1941  215
+CONVEX 312    'GT_PK(2,2)'      200  1939  187  1942  1937  171
+CONVEX 313    'GT_PK(2,2)'      199  1860  187  1943  1940  215
+CONVEX 314    'GT_PK(2,2)'      200  1944  185  1945  1946  213
+CONVEX 315    'GT_PK(2,2)'      1231  1947  652  1948  1949  1233
+CONVEX 316    'GT_PK(2,2)'      200  1945  213  1950  1951  229
+CONVEX 317    'GT_PK(2,2)'      215  1941  200  1952  1950  229
+CONVEX 318    'GT_PK(2,2)'      185  1944  200  1953  1942  171
+CONVEX 319    'GT_PK(2,2)'      466  1954  1221  1662  1955  1219
+CONVEX 320    'GT_PK(2,2)'      876  1956  906  1405  1957  892
+CONVEX 321    'GT_PK(2,2)'      906  1958  920  1957  1546  892
+CONVEX 322    'GT_PK(2,2)'      992  1959  1258  1960  1961  1256
+CONVEX 323    'GT_PK(2,2)'      972  1962  992  1383  1960  1256
+CONVEX 324    'GT_PK(2,2)'      906  1963  933  1958  1964  920
+CONVEX 325    'GT_PK(2,2)'      955  1965  968  1966  1445  985
+CONVEX 326    'GT_PK(2,2)'      968  1965  955  1444  1967  941
+CONVEX 327    'GT_PK(2,2)'      1239  1968  792  1969  1970  1241
+CONVEX 328    'GT_PK(2,2)'      178  1971  194  1972  1973  202
+CONVEX 329    'GT_PK(2,2)'      178  1972  202  1974  1975  1198
+CONVEX 330    'GT_PK(2,2)'      1196  1976  178  1977  1974  1198
+CONVEX 331    'GT_PK(2,2)'      194  1971  178  1520  1978  158
+CONVEX 332    'GT_PK(2,2)'      1243  1979  838  1980  1981  1245
+CONVEX 333    'GT_PK(2,2)'      1067  1982  1266  1983  1984  1264
+CONVEX 334    'GT_PK(2,2)'      1053  1985  1067  1579  1983  1264
+CONVEX 335    'GT_PK(2,2)'      1064  1986  1034  1987  1988  1046
+CONVEX 336    'GT_PK(2,2)'      1034  1986  1064  1989  1990  1051
+CONVEX 337    'GT_PK(2,2)'      1004  1991  971  1992  1993  985
+CONVEX 338    'GT_PK(2,2)'      971  1994  955  1993  1966  985
+CONVEX 339    'GT_PK(2,2)'      955  1994  971  1995  1996  942
+CONVEX 340    'GT_PK(2,2)'      1020  1997  1034  1998  1989  1051
+CONVEX 341    'GT_PK(2,2)'      1034  1997  1020  1999  2000  1004
+CONVEX 342    'GT_PK(2,2)'      694  2001  668  1594  2002  650
+CONVEX 343    'GT_PK(2,2)'      535  2003  555  2004  1613  575
+CONVEX 344    'GT_PK(2,2)'      717  2005  699  1628  2006  677
+CONVEX 345    'GT_PK(2,2)'      699  2005  717  2007  1624  730
+CONVEX 346    'GT_PK(2,2)'      699  2008  659  2006  1609  677
+CONVEX 347    'GT_PK(2,2)'      659  2008  699  1600  2009  681
+CONVEX 348    'GT_PK(2,2)'      699  2010  719  2009  2011  681
+CONVEX 349    'GT_PK(2,2)'      719  2010  699  1649  2007  730
+CONVEX 350    'GT_PK(2,2)'      733  2012  717  2013  1627  697
+CONVEX 351    'GT_PK(2,2)'      747  2014  733  1646  2015  765
+CONVEX 352    'GT_PK(2,2)'      717  2012  733  1626  2014  747
+CONVEX 353    'GT_PK(2,2)'      750  2016  734  1630  2017  768
+CONVEX 354    'GT_PK(2,2)'      734  2018  748  2017  2019  768
+CONVEX 355    'GT_PK(2,2)'      748  2018  734  1647  2020  719
+CONVEX 356    'GT_PK(2,2)'      770  2021  784  2022  1618  806
+CONVEX 357    'GT_PK(2,2)'      770  2023  750  2021  1629  784
+CONVEX 358    'GT_PK(2,2)'      700  2024  657  2025  2026  679
+CONVEX 359    'GT_PK(2,2)'      674  2027  700  1597  2028  722
+CONVEX 360    'GT_PK(2,2)'      657  2024  700  2029  2027  674
+CONVEX 361    'GT_PK(2,2)'      639  2030  661  2031  2032  679
+CONVEX 362    'GT_PK(2,2)'      639  2033  657  2034  2035  615
+CONVEX 363    'GT_PK(2,2)'      657  2033  639  2026  2031  679
+CONVEX 364    'GT_PK(2,2)'      846  2036  830  1635  2037  859
+CONVEX 365    'GT_PK(2,2)'      859  2037  830  2038  2039  844
+CONVEX 366    'GT_PK(2,2)'      830  2040  814  2039  1640  844
+CONVEX 367    'GT_PK(2,2)'      814  2040  830  1643  2041  798
+CONVEX 368    'GT_PK(2,2)'      766  2042  748  2043  1648  730
+CONVEX 369    'GT_PK(2,2)'      766  2044  780  2045  1642  798
+CONVEX 370    'GT_PK(2,2)'      766  2043  730  2046  1625  747
+CONVEX 371    'GT_PK(2,2)'      780  2044  766  1644  2046  747
+CONVEX 372    'GT_PK(2,2)'      782  2047  766  2048  2045  798
+CONVEX 373    'GT_PK(2,2)'      766  2047  782  2042  2049  748
+CONVEX 374    'GT_PK(2,2)'      782  2050  802  2051  1615  768
+CONVEX 375    'GT_PK(2,2)'      748  2049  782  2019  2051  768
+CONVEX 376    'GT_PK(2,2)'      873  2052  859  2053  2038  844
+CONVEX 377    'GT_PK(2,2)'      856  2054  873  1400  2053  844
+CONVEX 378    'GT_PK(2,2)'      882  2055  873  1807  2054  856
+CONVEX 379    'GT_PK(2,2)'      850  2056  834  2057  1650  862
+CONVEX 380    'GT_PK(2,2)'      878  2058  850  1656  2057  862
+CONVEX 381    'GT_PK(2,2)'      178  1976  1196  1978  2059  158
+CONVEX 382    'GT_PK(2,2)'      246  2060  230  2061  2062  258
+CONVEX 383    'GT_PK(2,2)'      1204  2063  262  2064  2065  1207
+CONVEX 384    'GT_PK(2,2)'      1221  2066  498  2067  2068  1223
+CONVEX 385    'GT_PK(2,2)'      498  2066  1221  2069  1954  466
+CONVEX 386    'GT_PK(2,2)'      424  2070  406  2071  2072  374
+CONVEX 387    'GT_PK(2,2)'      498  2073  484  2074  2075  524
+CONVEX 388    'GT_PK(2,2)'      484  2073  498  2076  2069  466
+CONVEX 389    'GT_PK(2,2)'      497  2077  520  2078  2079  539
+CONVEX 390    'GT_PK(2,2)'      471  2080  491  1729  2081  449
+CONVEX 391    'GT_PK(2,2)'      312  2082  322  2083  2084  338
+CONVEX 392    'GT_PK(2,2)'      380  2085  364  2086  2087  344
+CONVEX 393    'GT_PK(2,2)'      380  2088  400  2089  2090  412
+CONVEX 394    'GT_PK(2,2)'      378  2091  362  2092  2093  346
+CONVEX 395    'GT_PK(2,2)'      364  2094  378  2095  2092  346
+CONVEX 396    'GT_PK(2,2)'      284  2096  270  2097  2098  298
+CONVEX 397    'GT_PK(2,2)'      270  2096  284  2099  2100  262
+CONVEX 398    'GT_PK(2,2)'      322  2101  284  2102  2097  298
+CONVEX 399    'GT_PK(2,2)'      284  2101  322  2103  2082  312
+CONVEX 400    'GT_PK(2,2)'      262  2100  284  2065  2104  1207
+CONVEX 401    'GT_PK(2,2)'      272  2105  246  2106  2061  258
+CONVEX 402    'GT_PK(2,2)'      232  2107  246  2108  2109  256
+CONVEX 403    'GT_PK(2,2)'      284  2110  1209  2104  2111  1207
+CONVEX 404    'GT_PK(2,2)'      1209  2110  284  2112  2103  312
+CONVEX 405    'GT_PK(2,2)'      1217  2113  426  2114  1661  1219
+CONVEX 406    'GT_PK(2,2)'      246  2105  272  2109  2115  256
+CONVEX 407    'GT_PK(2,2)'      230  2060  246  2116  2117  216
+CONVEX 408    'GT_PK(2,2)'      246  2107  232  2117  2118  216
+CONVEX 409    'GT_PK(2,2)'      500  2119  517  2120  1664  543
+CONVEX 410    'GT_PK(2,2)'      500  2121  522  2122  2123  482
+CONVEX 411    'GT_PK(2,2)'      522  2121  500  1925  2120  543
+CONVEX 412    'GT_PK(2,2)'      517  2119  500  2124  2125  476
+CONVEX 413    'GT_PK(2,2)'      495  2126  517  2127  2124  476
+CONVEX 414    'GT_PK(2,2)'      450  2128  495  2129  2127  476
+CONVEX 415    'GT_PK(2,2)'      1115  2130  1104  2131  1425  1094
+CONVEX 416    'GT_PK(2,2)'      1109  2132  1115  2133  2131  1094
+CONVEX 417    'GT_PK(2,2)'      1104  2130  1115  1429  2134  1120
+CONVEX 418    'GT_PK(2,2)'      1115  2135  1127  2134  1682  1120
+CONVEX 419    'GT_PK(2,2)'      1127  2135  1115  1680  2136  1126
+CONVEX 420    'GT_PK(2,2)'      1115  2132  1109  2136  1736  1126
+CONVEX 421    'GT_PK(2,2)'      1282  2137  1280  2138  1679  1126
+CONVEX 422    'GT_PK(2,2)'      223  2139  205  2140  2141  193
+CONVEX 423    'GT_PK(2,2)'      205  2139  223  2142  2143  235
+CONVEX 424    'GT_PK(2,2)'      219  1534  205  2144  2142  235
+CONVEX 425    'GT_PK(2,2)'      205  1531  177  2141  2145  193
+CONVEX 426    'GT_PK(2,2)'      177  1536  156  2146  2147  144
+CONVEX 427    'GT_PK(2,2)'      156  1521  141  2148  2149  125
+CONVEX 428    'GT_PK(2,2)'      1072  2150  1046  2151  1744  1056
+CONVEX 429    'GT_PK(2,2)'      1072  2152  1064  2150  1987  1046
+CONVEX 430    'GT_PK(2,2)'      1064  2152  1072  2153  2154  1090
+CONVEX 431    'GT_PK(2,2)'      1072  2155  1100  2154  1694  1090
+CONVEX 432    'GT_PK(2,2)'      1129  2156  1285  1697  2157  1286
+CONVEX 433    'GT_PK(2,2)'      144  2147  156  2158  2148  125
+CONVEX 434    'GT_PK(2,2)'      102  1551  88  2159  2160  76
+CONVEX 435    'GT_PK(2,2)'      102  2159  76  2161  2162  92
+CONVEX 436    'GT_PK(2,2)'      119  1542  102  2163  2161  92
+CONVEX 437    'GT_PK(2,2)'      431  2164  451  2165  2166  472
+CONVEX 438    'GT_PK(2,2)'      451  2164  431  2167  2168  413
+CONVEX 439    'GT_PK(2,2)'      431  2169  401  2168  2170  413
+CONVEX 440    'GT_PK(2,2)'      1118  2171  1129  2172  2173  1111
+CONVEX 441    'GT_PK(2,2)'      1123  2174  1129  2175  1695  1136
+CONVEX 442    'GT_PK(2,2)'      1129  2174  1123  2173  2176  1111
+CONVEX 443    'GT_PK(2,2)'      555  2177  579  1612  2178  597
+CONVEX 444    'GT_PK(2,2)'      579  2179  613  2178  1717  597
+CONVEX 445    'GT_PK(2,2)'      579  2177  555  2180  2181  539
+CONVEX 446    'GT_PK(2,2)'      503  2182  459  2183  1724  481
+CONVEX 447    'GT_PK(2,2)'      519  2184  503  2185  2183  481
+CONVEX 448    'GT_PK(2,2)'      503  2184  519  2186  1718  540
+CONVEX 449    'GT_PK(2,2)'      520  2187  503  2188  2186  540
+CONVEX 450    'GT_PK(2,2)'      419  2189  435  2190  2191  405
+CONVEX 451    'GT_PK(2,2)'      318  2192  330  2193  2194  302
+CONVEX 452    'GT_PK(2,2)'      291  2195  318  2196  2193  302
+CONVEX 453    'GT_PK(2,2)'      261  2197  235  2198  2199  249
+CONVEX 454    'GT_PK(2,2)'      353  2200  369  2201  2202  334
+CONVEX 455    'GT_PK(2,2)'      369  2203  385  2204  2205  402
+CONVEX 456    'GT_PK(2,2)'      385  2203  369  2206  2200  353
+CONVEX 457    'GT_PK(2,2)'      416  2207  433  2208  1728  449
+CONVEX 458    'GT_PK(2,2)'      433  2207  416  2209  2210  402
+CONVEX 459    'GT_PK(2,2)'      435  2211  421  2191  2212  405
+CONVEX 460    'GT_PK(2,2)'      421  2213  385  2212  2214  405
+CONVEX 461    'GT_PK(2,2)'      421  2215  433  2216  2209  402
+CONVEX 462    'GT_PK(2,2)'      385  2213  421  2205  2216  402
+CONVEX 463    'GT_PK(2,2)'      430  2217  450  2218  2219  412
+CONVEX 464    'GT_PK(2,2)'      400  2220  430  2090  2218  412
+CONVEX 465    'GT_PK(2,2)'      430  2221  416  2222  2208  449
+CONVEX 466    'GT_PK(2,2)'      416  2221  430  2223  2220  400
+CONVEX 467    'GT_PK(2,2)'      448  2224  431  2225  2165  472
+CONVEX 468    'GT_PK(2,2)'      431  2224  448  2226  2227  417
+CONVEX 469    'GT_PK(2,2)'      1086  2228  1109  2229  2133  1094
+CONVEX 470    'GT_PK(2,2)'      1109  2228  1086  1739  2230  1097
+CONVEX 471    'GT_PK(2,2)'      1086  2229  1094  2231  1349  1069
+CONVEX 472    'GT_PK(2,2)'      1059  2232  1086  2233  2231  1069
+CONVEX 473    'GT_PK(2,2)'      1042  2234  1059  2235  2233  1069
+CONVEX 474    'GT_PK(2,2)'      1055  2236  1042  1352  2235  1069
+CONVEX 475    'GT_PK(2,2)'      1042  2236  1055  2237  1432  1028
+CONVEX 476    'GT_PK(2,2)'      1017  2238  1030  2239  1743  1046
+CONVEX 477    'GT_PK(2,2)'      1034  2240  1017  1988  2239  1046
+CONVEX 478    'GT_PK(2,2)'      1017  2240  1034  2241  1999  1004
+CONVEX 479    'GT_PK(2,2)'      1017  2241  1004  2242  1992  985
+CONVEX 480    'GT_PK(2,2)'      1002  2243  1017  1446  2242  985
+CONVEX 481    'GT_PK(2,2)'      1030  2238  1017  1749  2243  1002
+CONVEX 482    'GT_PK(2,2)'      1176  2244  1179  2245  2246  34
+CONVEX 483    'GT_PK(2,2)'      401  2169  431  2247  2226  417
+CONVEX 484    'GT_PK(2,2)'      685  1571  667  2248  1588  653
+CONVEX 485    'GT_PK(2,2)'      489  2249  531  2250  2251  519
+CONVEX 486    'GT_PK(2,2)'      23  2252  30  2253  2254  36
+CONVEX 487    'GT_PK(2,2)'      30  2252  23  2255  1763  1174
+CONVEX 488    'GT_PK(2,2)'      1176  2256  30  2257  2255  1174
+CONVEX 489    'GT_PK(2,2)'      30  2256  1176  2258  2245  34
+CONVEX 490    'GT_PK(2,2)'      49  2259  40  1529  2260  63
+CONVEX 491    'GT_PK(2,2)'      25  2261  23  2262  2253  36
+CONVEX 492    'GT_PK(2,2)'      23  2261  25  1762  2263  1172
+CONVEX 493    'GT_PK(2,2)'      519  2251  531  1719  2264  557
+CONVEX 494    'GT_PK(2,2)'      531  2265  583  2264  2266  557
+CONVEX 495    'GT_PK(2,2)'      39  2267  27  2268  2269  20
+CONVEX 496    'GT_PK(2,2)'      74  2270  59  1527  2271  49
+CONVEX 497    'GT_PK(2,2)'      59  2272  39  2271  2273  49
+CONVEX 498    'GT_PK(2,2)'      59  2270  74  2274  2275  90
+CONVEX 499    'GT_PK(2,2)'      130  2276  146  2277  1376  164
+CONVEX 500    'GT_PK(2,2)'      146  2276  130  2278  2279  114
+CONVEX 501    'GT_PK(2,2)'      18  2280  1171  2281  2282  1169
+CONVEX 502    'GT_PK(2,2)'      313  2283  1208  2284  2285  1210
+CONVEX 503    'GT_PK(2,2)'      379  2286  347  2287  2288  363
+CONVEX 504    'GT_PK(2,2)'      347  2286  379  2289  2290  365
+CONVEX 505    'GT_PK(2,2)'      1214  2291  359  2292  2293  1212
+CONVEX 506    'GT_PK(2,2)'      391  2294  359  1787  2291  1214
+CONVEX 507    'GT_PK(2,2)'      881  2295  889  2296  2297  909
+CONVEX 508    'GT_PK(2,2)'      889  2298  1248  2297  1478  909
+CONVEX 509    'GT_PK(2,2)'      1248  2298  889  2299  2300  1246
+CONVEX 510    'GT_PK(2,2)'      1063  2301  1040  2302  2303  1077
+CONVEX 511    'GT_PK(2,2)'      1040  2301  1063  2304  1741  1038
+CONVEX 512    'GT_PK(2,2)'      1047  2305  1018  2306  2307  1033
+CONVEX 513    'GT_PK(2,2)'      1018  2305  1047  2308  2309  1029
+CONVEX 514    'GT_PK(2,2)'      1083  2310  1106  2311  2312  1096
+CONVEX 515    'GT_PK(2,2)'      583  2265  531  2313  2314  549
+CONVEX 516    'GT_PK(2,2)'      1099  2315  1083  2316  2317  1073
+CONVEX 517    'GT_PK(2,2)'      1083  2315  1099  2310  2318  1106
+CONVEX 518    'GT_PK(2,2)'      911  2319  925  2320  2321  898
+CONVEX 519    'GT_PK(2,2)'      843  2322  825  1809  2323  855
+CONVEX 520    'GT_PK(2,2)'      1250  2324  931  1479  2325  909
+CONVEX 521    'GT_PK(2,2)'      531  2249  489  2326  2327  509
+CONVEX 522    'GT_PK(2,2)'      946  2328  928  2329  2330  917
+CONVEX 523    'GT_PK(2,2)'      928  2328  946  2331  2332  958
+CONVEX 524    'GT_PK(2,2)'      531  2326  509  2314  2333  549
+CONVEX 525    'GT_PK(2,2)'      688  2334  6  2335  2336  5
+CONVEX 526    'GT_PK(2,2)'      6  2334  688  2337  2338  1140
+CONVEX 527    'GT_PK(2,2)'      372  2339  354  2340  2341  386
+CONVEX 528    'GT_PK(2,2)'      398  2342  372  2343  2340  386
+CONVEX 529    'GT_PK(2,2)'      514  2344  496  2345  2346  474
+CONVEX 530    'GT_PK(2,2)'      514  2347  534  2348  2349  554
+CONVEX 531    'GT_PK(2,2)'      496  2350  454  2346  2351  474
+CONVEX 532    'GT_PK(2,2)'      534  2352  574  2349  2353  554
+CONVEX 533    'GT_PK(2,2)'      574  2354  600  2355  2356  616
+CONVEX 534    'GT_PK(2,2)'      438  2357  414  2358  2359  458
+CONVEX 535    'GT_PK(2,2)'      585  2360  603  2361  2362  549
+CONVEX 536    'GT_PK(2,2)'      603  2363  583  2362  2313  549
+CONVEX 537    'GT_PK(2,2)'      310  2364  1304  2365  2366  1302
+CONVEX 538    'GT_PK(2,2)'      671  2367  662  2368  2369  691
+CONVEX 539    'GT_PK(2,2)'      662  2370  683  2369  2371  691
+CONVEX 540    'GT_PK(2,2)'      0  2372  1312  2373  2374  462
+CONVEX 541    'GT_PK(2,2)'      603  2375  621  2363  2376  583
+CONVEX 542    'GT_PK(2,2)'      603  2360  585  2377  2378  625
+CONVEX 543    'GT_PK(2,2)'      439  2379  461  1725  2380  481
+CONVEX 544    'GT_PK(2,2)'      643  2381  603  2382  2377  625
+CONVEX 545    'GT_PK(2,2)'      1224  2383  529  2384  1827  1222
+CONVEX 546    'GT_PK(2,2)'      567  2385  1224  1490  2386  1226
+CONVEX 547    'GT_PK(2,2)'      529  2383  1224  1829  2385  567
+CONVEX 548    'GT_PK(2,2)'      621  2375  603  2387  2381  643
+CONVEX 549    'GT_PK(2,2)'      582  2388  620  2389  2390  602
+CONVEX 550    'GT_PK(2,2)'      582  2389  602  2391  2392  548
+CONVEX 551    'GT_PK(2,2)'      530  2393  582  2394  2391  548
+CONVEX 552    'GT_PK(2,2)'      545  2395  525  2396  1834  565
+CONVEX 553    'GT_PK(2,2)'      525  2395  545  2397  2398  505
+CONVEX 554    'GT_PK(2,2)'      545  2399  523  2398  2400  505
+CONVEX 555    'GT_PK(2,2)'      558  2401  592  2402  2403  572
+CONVEX 556    'GT_PK(2,2)'      523  2404  562  2405  2406  542
+CONVEX 557    'GT_PK(2,2)'      545  2407  562  2399  2404  523
+CONVEX 558    'GT_PK(2,2)'      598  2408  552  2409  2410  572
+CONVEX 559    'GT_PK(2,2)'      532  2411  552  2412  2413  570
+CONVEX 560    'GT_PK(2,2)'      552  2408  598  2413  2414  570
+CONVEX 561    'GT_PK(2,2)'      651  2415  608  2416  2417  629
+CONVEX 562    'GT_PK(2,2)'      592  2418  608  2419  2420  634
+CONVEX 563    'GT_PK(2,2)'      608  2415  651  2420  2421  634
+CONVEX 564    'GT_PK(2,2)'      868  2422  896  2423  2424  1153
+CONVEX 565    'GT_PK(2,2)'      790  2425  1146  2426  2427  762
+CONVEX 566    'GT_PK(2,2)'      614  2428  598  2429  2409  572
+CONVEX 567    'GT_PK(2,2)'      614  2430  592  2431  2419  634
+CONVEX 568    'GT_PK(2,2)'      592  2430  614  2403  2429  572
+CONVEX 569    'GT_PK(2,2)'      658  2432  636  2433  2434  616
+CONVEX 570    'GT_PK(2,2)'      783  2435  749  2436  1840  769
+CONVEX 571    'GT_PK(2,2)'      803  2437  783  2438  2436  769
+CONVEX 572    'GT_PK(2,2)'      785  2439  803  2440  2438  769
+CONVEX 573    'GT_PK(2,2)'      807  2441  785  2442  2443  771
+CONVEX 574    'GT_PK(2,2)'      651  2444  675  2421  2445  634
+CONVEX 575    'GT_PK(2,2)'      796  2446  781  1842  2447  815
+CONVEX 576    'GT_PK(2,2)'      815  2447  781  2448  2449  799
+CONVEX 577    'GT_PK(2,2)'      764  2450  732  2451  2452  746
+CONVEX 578    'GT_PK(2,2)'      781  2453  764  2454  2451  746
+CONVEX 579    'GT_PK(2,2)'      764  2453  781  2455  2446  796
+CONVEX 580    'GT_PK(2,2)'      764  2456  752  2450  2457  732
+CONVEX 581    'GT_PK(2,2)'      764  2455  796  2458  2459  778
+CONVEX 582    'GT_PK(2,2)'      752  2456  764  2460  2458  778
+CONVEX 583    'GT_PK(2,2)'      121  2461  149  2462  2463  135
+CONVEX 584    'GT_PK(2,2)'      121  2464  107  1850  2465  95
+CONVEX 585    'GT_PK(2,2)'      107  2464  121  2466  2462  135
+CONVEX 586    'GT_PK(2,2)'      79  2467  52  1851  2468  61
+CONVEX 587    'GT_PK(2,2)'      1183  2469  52  2470  2471  1181
+CONVEX 588    'GT_PK(2,2)'      52  2469  1183  2468  1866  61
+CONVEX 589    'GT_PK(2,2)'      68  2472  79  2473  1854  95
+CONVEX 590    'GT_PK(2,2)'      68  2474  52  2472  2467  79
+CONVEX 591    'GT_PK(2,2)'      379  2475  397  2290  2476  365
+CONVEX 592    'GT_PK(2,2)'      381  2477  397  2478  2479  413
+CONVEX 593    'GT_PK(2,2)'      397  2477  381  2476  2480  365
+CONVEX 594    'GT_PK(2,2)'      226  2481  240  2482  1918  214
+CONVEX 595    'GT_PK(2,2)'      198  2483  226  2484  2482  214
+CONVEX 596    'GT_PK(2,2)'      248  2485  236  1494  2486  222
+CONVEX 597    'GT_PK(2,2)'      236  2487  208  2486  2488  222
+CONVEX 598    'GT_PK(2,2)'      231  2489  218  2490  2491  207
+CONVEX 599    'GT_PK(2,2)'      218  2489  231  2492  2493  244
+CONVEX 600    'GT_PK(2,2)'      218  2494  188  2491  2495  207
+CONVEX 601    'GT_PK(2,2)'      188  2494  218  1879  2496  204
+CONVEX 602    'GT_PK(2,2)'      218  2492  244  2497  1873  234
+CONVEX 603    'GT_PK(2,2)'      204  2496  218  1875  2497  234
+CONVEX 604    'GT_PK(2,2)'      204  2498  192  1880  2499  176
+CONVEX 605    'GT_PK(2,2)'      208  2500  192  2488  2501  222
+CONVEX 606    'GT_PK(2,2)'      192  2498  204  2501  1874  222
+CONVEX 607    'GT_PK(2,2)'      345  2502  367  2503  1894  331
+CONVEX 608    'GT_PK(2,2)'      345  2504  381  2502  2505  367
+CONVEX 609    'GT_PK(2,2)'      317  2506  345  2507  2503  331
+CONVEX 610    'GT_PK(2,2)'      381  2504  345  2480  2508  365
+CONVEX 611    'GT_PK(2,2)'      370  2509  384  2510  2511  404
+CONVEX 612    'GT_PK(2,2)'      370  2512  354  2513  1823  336
+CONVEX 613    'GT_PK(2,2)'      370  2513  336  2514  1504  352
+CONVEX 614    'GT_PK(2,2)'      384  2509  370  2515  2514  352
+CONVEX 615    'GT_PK(2,2)'      354  2512  370  2341  2516  386
+CONVEX 616    'GT_PK(2,2)'      370  2510  404  2516  2517  386
+CONVEX 617    'GT_PK(2,2)'      217  2518  231  2519  2490  207
+CONVEX 618    'GT_PK(2,2)'      231  2520  259  2493  2521  244
+CONVEX 619    'GT_PK(2,2)'      259  2522  275  2521  1890  244
+CONVEX 620    'GT_PK(2,2)'      275  2522  259  2523  2524  289
+CONVEX 621    'GT_PK(2,2)'      289  2524  259  2525  2526  273
+CONVEX 622    'GT_PK(2,2)'      275  2527  303  1889  2528  290
+CONVEX 623    'GT_PK(2,2)'      319  2529  303  1896  2530  331
+CONVEX 624    'GT_PK(2,2)'      303  2529  319  2528  1510  290
+CONVEX 625    'GT_PK(2,2)'      303  2531  317  2530  2507  331
+CONVEX 626    'GT_PK(2,2)'      303  2527  275  2532  2523  289
+CONVEX 627    'GT_PK(2,2)'      317  2531  303  2533  2532  289
+CONVEX 628    'GT_PK(2,2)'      301  2534  289  2535  2525  273
+CONVEX 629    'GT_PK(2,2)'      301  2536  317  2534  2533  289
+CONVEX 630    'GT_PK(2,2)'      175  2537  188  2538  1877  157
+CONVEX 631    'GT_PK(2,2)'      188  2537  175  2495  2539  207
+CONVEX 632    'GT_PK(2,2)'      126  2540  142  1884  2541  157
+CONVEX 633    'GT_PK(2,2)'      142  2542  175  2541  2538  157
+CONVEX 634    'GT_PK(2,2)'      175  2542  142  2543  2544  159
+CONVEX 635    'GT_PK(2,2)'      142  2540  126  2545  1524  1193
+CONVEX 636    'GT_PK(2,2)'      1195  2546  142  2547  2545  1193
+CONVEX 637    'GT_PK(2,2)'      159  2544  142  2548  2546  1195
+CONVEX 638    'GT_PK(2,2)'      308  2549  326  2550  2551  296
+CONVEX 639    'GT_PK(2,2)'      326  2552  310  2551  2553  296
+CONVEX 640    'GT_PK(2,2)'      280  2554  296  2555  2556  266
+CONVEX 641    'GT_PK(2,2)'      280  2557  308  2554  2550  296
+CONVEX 642    'GT_PK(2,2)'      73  2558  59  2559  2274  90
+CONVEX 643    'GT_PK(2,2)'      89  2560  75  1914  2561  111
+CONVEX 644    'GT_PK(2,2)'      60  2562  75  2563  2564  50
+CONVEX 645    'GT_PK(2,2)'      228  2565  201  1919  2566  214
+CONVEX 646    'GT_PK(2,2)'      201  2565  228  2567  2568  212
+CONVEX 647    'GT_PK(2,2)'      228  2569  1298  2568  2570  212
+CONVEX 648    'GT_PK(2,2)'      1298  2571  1296  2570  2572  212
+CONVEX 649    'GT_PK(2,2)'      254  2573  240  2574  2575  266
+CONVEX 650    'GT_PK(2,2)'      254  2576  228  2573  1917  240
+CONVEX 651    'GT_PK(2,2)'      1298  2577  254  2578  2579  1300
+CONVEX 652    'GT_PK(2,2)'      254  2577  1298  2576  2569  228
+CONVEX 653    'GT_PK(2,2)'      123  2580  107  2581  2466  135
+CONVEX 654    'GT_PK(2,2)'      107  2580  123  2582  2583  96
+CONVEX 655    'GT_PK(2,2)'      139  2584  173  2585  1375  146
+CONVEX 656    'GT_PK(2,2)'      139  2586  161  2584  2587  173
+CONVEX 657    'GT_PK(2,2)'      139  2585  146  2588  2278  114
+CONVEX 658    'GT_PK(2,2)'      111  2589  139  1916  2588  114
+CONVEX 659    'GT_PK(2,2)'      609  2590  635  2591  2592  650
+CONVEX 660    'GT_PK(2,2)'      593  2593  635  1932  2590  609
+CONVEX 661    'GT_PK(2,2)'      635  2594  674  2592  1593  650
+CONVEX 662    'GT_PK(2,2)'      635  2593  593  2595  1923  615
+CONVEX 663    'GT_PK(2,2)'      657  2596  635  2035  2595  615
+CONVEX 664    'GT_PK(2,2)'      635  2596  657  2594  2029  674
+CONVEX 665    'GT_PK(2,2)'      577  2597  589  1929  2598  563
+CONVEX 666    'GT_PK(2,2)'      589  2597  577  2599  1931  609
+CONVEX 667    'GT_PK(2,2)'      589  2600  568  2598  2601  563
+CONVEX 668    'GT_PK(2,2)'      568  2600  589  2602  2603  606
+CONVEX 669    'GT_PK(2,2)'      684  2604  652  2605  2606  666
+CONVEX 670    'GT_PK(2,2)'      708  2607  684  2608  2605  666
+CONVEX 671    'GT_PK(2,2)'      684  2607  708  2609  2610  724
+CONVEX 672    'GT_PK(2,2)'      652  2604  684  1949  2611  1233
+CONVEX 673    'GT_PK(2,2)'      684  2612  1235  2611  2613  1233
+CONVEX 674    'GT_PK(2,2)'      684  2609  724  2612  1934  1235
+CONVEX 675    'GT_PK(2,2)'      582  2393  530  2614  2615  556
+CONVEX 676    'GT_PK(2,2)'      582  2614  556  2616  2617  594
+CONVEX 677    'GT_PK(2,2)'      620  2388  582  2618  2616  594
+CONVEX 678    'GT_PK(2,2)'      546  2619  584  2620  1672  604
+CONVEX 679    'GT_PK(2,2)'      526  2621  584  2622  2619  546
+CONVEX 680    'GT_PK(2,2)'      584  2621  526  2623  2624  548
+CONVEX 681    'GT_PK(2,2)'      586  2625  568  2626  2602  606
+CONVEX 682    'GT_PK(2,2)'      1009  2627  1260  2628  2629  1258
+CONVEX 683    'GT_PK(2,2)'      992  2630  1009  1959  2628  1258
+CONVEX 684    'GT_PK(2,2)'      956  2631  992  2632  1962  972
+CONVEX 685    'GT_PK(2,2)'      956  2633  948  2634  1562  934
+CONVEX 686    'GT_PK(2,2)'      948  2633  956  1566  2632  972
+CONVEX 687    'GT_PK(2,2)'      1247  2635  888  2636  2637  1249
+CONVEX 688    'GT_PK(2,2)'      602  1671  584  2392  2623  548
+CONVEX 689    'GT_PK(2,2)'      642  2638  620  2639  2640  663
+CONVEX 690    'GT_PK(2,2)'      682  2641  642  2642  2639  663
+CONVEX 691    'GT_PK(2,2)'      908  2643  918  2644  1563  930
+CONVEX 692    'GT_PK(2,2)'      888  2645  908  2637  2646  1249
+CONVEX 693    'GT_PK(2,2)'      908  2647  1251  2646  2648  1249
+CONVEX 694    'GT_PK(2,2)'      1251  2647  908  1556  2644  930
+CONVEX 695    'GT_PK(2,2)'      744  2649  708  2650  2651  726
+CONVEX 696    'GT_PK(2,2)'      708  2649  744  2610  2652  724
+CONVEX 697    'GT_PK(2,2)'      812  2653  792  2654  2655  800
+CONVEX 698    'GT_PK(2,2)'      828  2656  812  2657  2654  800
+CONVEX 699    'GT_PK(2,2)'      812  2656  828  2658  2659  838
+CONVEX 700    'GT_PK(2,2)'      812  2658  838  2660  1979  1243
+CONVEX 701    'GT_PK(2,2)'      792  2653  812  1970  2661  1241
+CONVEX 702    'GT_PK(2,2)'      812  2660  1243  2661  2662  1241
+CONVEX 703    'GT_PK(2,2)'      754  2663  772  1589  2664  740
+CONVEX 704    'GT_PK(2,2)'      1067  2665  1080  1982  2666  1266
+CONVEX 705    'GT_PK(2,2)'      1080  2667  1090  2668  1685  1269
+CONVEX 706    'GT_PK(2,2)'      1266  2666  1080  2669  2668  1269
+CONVEX 707    'GT_PK(2,2)'      1080  2670  1064  2667  2153  1090
+CONVEX 708    'GT_PK(2,2)'      1064  2670  1080  1990  2671  1051
+CONVEX 709    'GT_PK(2,2)'      1080  2665  1067  2671  2672  1051
+CONVEX 710    'GT_PK(2,2)'      710  2673  668  2674  2001  694
+CONVEX 711    'GT_PK(2,2)'      710  2674  694  2675  1595  740
+CONVEX 712    'GT_PK(2,2)'      551  2676  575  2677  1395  601
+CONVEX 713    'GT_PK(2,2)'      551  2678  535  2676  2004  575
+CONVEX 714    'GT_PK(2,2)'      720  2679  734  2680  2016  750
+CONVEX 715    'GT_PK(2,2)'      720  2681  700  2682  2025  679
+CONVEX 716    'GT_PK(2,2)'      599  2683  639  2684  2034  615
+CONVEX 717    'GT_PK(2,2)'      573  2685  599  1924  2684  615
+CONVEX 718    'GT_PK(2,2)'      599  2685  573  2686  2687  553
+CONVEX 719    'GT_PK(2,2)'      782  2688  816  2050  2689  802
+CONVEX 720    'GT_PK(2,2)'      802  2689  816  1623  2690  832
+CONVEX 721    'GT_PK(2,2)'      816  2691  846  2690  1637  832
+CONVEX 722    'GT_PK(2,2)'      816  2692  830  2691  2036  846
+CONVEX 723    'GT_PK(2,2)'      830  2692  816  2041  2693  798
+CONVEX 724    'GT_PK(2,2)'      816  2688  782  2693  2048  798
+CONVEX 725    'GT_PK(2,2)'      901  2694  873  2695  2055  882
+CONVEX 726    'GT_PK(2,2)'      772  2696  804  2697  2698  788
+CONVEX 727    'GT_PK(2,2)'      971  2699  959  1996  2700  942
+CONVEX 728    'GT_PK(2,2)'      959  2701  929  2700  2702  942
+CONVEX 729    'GT_PK(2,2)'      929  2701  959  2703  2704  947
+CONVEX 730    'GT_PK(2,2)'      929  2705  916  2706  2707  903
+CONVEX 731    'GT_PK(2,2)'      916  2708  933  2709  1963  906
+CONVEX 732    'GT_PK(2,2)'      933  2708  916  2710  2711  947
+CONVEX 733    'GT_PK(2,2)'      916  2705  929  2711  2703  947
+CONVEX 734    'GT_PK(2,2)'      242  2712  270  2713  2099  262
+CONVEX 735    'GT_PK(2,2)'      242  2714  1202  2715  2716  220
+CONVEX 736    'GT_PK(2,2)'      1204  2717  242  2063  2713  262
+CONVEX 737    'GT_PK(2,2)'      242  2717  1204  2714  2718  1202
+CONVEX 738    'GT_PK(2,2)'      406  2719  442  2720  2721  426
+CONVEX 739    'GT_PK(2,2)'      442  2719  406  2722  2070  424
+CONVEX 740    'GT_PK(2,2)'      442  2723  466  2721  1660  426
+CONVEX 741    'GT_PK(2,2)'      442  2724  484  2723  2076  466
+CONVEX 742    'GT_PK(2,2)'      406  2725  358  2072  2726  374
+CONVEX 743    'GT_PK(2,2)'      350  2727  362  2728  2729  374
+CONVEX 744    'GT_PK(2,2)'      322  2730  350  2084  2731  338
+CONVEX 745    'GT_PK(2,2)'      358  2732  350  2726  2728  374
+CONVEX 746    'GT_PK(2,2)'      350  2732  358  2731  2733  338
+CONVEX 747    'GT_PK(2,2)'      378  2734  392  2091  2735  362
+CONVEX 748    'GT_PK(2,2)'      392  2736  424  2737  2071  374
+CONVEX 749    'GT_PK(2,2)'      362  2735  392  2729  2737  374
+CONVEX 750    'GT_PK(2,2)'      396  2738  378  2739  2094  364
+CONVEX 751    'GT_PK(2,2)'      396  2740  380  2741  2089  412
+CONVEX 752    'GT_PK(2,2)'      380  2740  396  2085  2739  364
+CONVEX 753    'GT_PK(2,2)'      1211  2742  312  2743  2083  338
+CONVEX 754    'GT_PK(2,2)'      1211  2744  1209  2742  2112  312
+CONVEX 755    'GT_PK(2,2)'      620  2638  642  2390  1675  602
+CONVEX 756    'GT_PK(2,2)'      390  2745  406  2746  2720  426
+CONVEX 757    'GT_PK(2,2)'      1217  2747  390  2113  2746  426
+CONVEX 758    'GT_PK(2,2)'      390  2747  1217  2748  2749  1215
+CONVEX 759    'GT_PK(2,2)'      358  2750  390  2751  2748  1215
+CONVEX 760    'GT_PK(2,2)'      390  2750  358  2745  2725  406
+CONVEX 761    'GT_PK(2,2)'      495  2752  537  2126  2753  517
+CONVEX 762    'GT_PK(2,2)'      537  2754  573  2755  1921  559
+CONVEX 763    'GT_PK(2,2)'      517  2753  537  1666  2755  559
+CONVEX 764    'GT_PK(2,2)'      573  2754  537  2687  2756  553
+CONVEX 765    'GT_PK(2,2)'      1119  2757  1134  1737  2758  1126
+CONVEX 766    'GT_PK(2,2)'      1134  2759  1282  2758  2138  1126
+CONVEX 767    'GT_PK(2,2)'      1282  2759  1134  2760  2761  1284
+CONVEX 768    'GT_PK(2,2)'      1100  2762  1084  1691  2763  1107
+CONVEX 769    'GT_PK(2,2)'      1072  2764  1084  2155  2762  1100
+CONVEX 770    'GT_PK(2,2)'      1084  2765  1095  2763  1407  1107
+CONVEX 771    'GT_PK(2,2)'      1084  2764  1072  2766  2151  1056
+CONVEX 772    'GT_PK(2,2)'      1070  2767  1084  1753  2766  1056
+CONVEX 773    'GT_PK(2,2)'      1084  2767  1070  2765  1754  1095
+CONVEX 774    'GT_PK(2,2)'      1285  2768  1133  2769  2770  1283
+CONVEX 775    'GT_PK(2,2)'      1133  2768  1285  2771  2156  1129
+CONVEX 776    'GT_PK(2,2)'      1118  2772  1133  2171  2771  1129
+CONVEX 777    'GT_PK(2,2)'      642  2641  682  1688  2773  664
+CONVEX 778    'GT_PK(2,2)'      819  1332  829  2774  2775  853
+CONVEX 779    'GT_PK(2,2)'      1117  2776  1105  2777  2778  1096
+CONVEX 780    'GT_PK(2,2)'      1106  2779  1117  2312  2777  1096
+CONVEX 781    'GT_PK(2,2)'      1117  2780  1275  2781  2782  1277
+CONVEX 782    'GT_PK(2,2)'      1275  2780  1117  2783  2779  1106
+CONVEX 783    'GT_PK(2,2)'      1105  2784  1121  2785  2786  1114
+CONVEX 784    'GT_PK(2,2)'      1117  2787  1121  2776  2784  1105
+CONVEX 785    'GT_PK(2,2)'      1279  2788  1121  2789  2790  1277
+CONVEX 786    'GT_PK(2,2)'      1121  2787  1117  2790  2781  1277
+CONVEX 787    'GT_PK(2,2)'      1098  2791  1111  2792  2793  1087
+CONVEX 788    'GT_PK(2,2)'      1098  2794  1118  2791  2172  1111
+CONVEX 789    'GT_PK(2,2)'      1123  2795  1101  2176  2796  1111
+CONVEX 790    'GT_PK(2,2)'      1111  2796  1101  2793  2797  1087
+CONVEX 791    'GT_PK(2,2)'      1110  2798  1119  2799  1738  1097
+CONVEX 792    'GT_PK(2,2)'      1101  2800  1112  2801  2802  1091
+CONVEX 793    'GT_PK(2,2)'      1112  2800  1101  2803  2795  1123
+CONVEX 794    'GT_PK(2,2)'      1131  2804  1289  2805  1704  1135
+CONVEX 795    'GT_PK(2,2)'      560  2806  540  2807  1422  581
+CONVEX 796    'GT_PK(2,2)'      560  2808  520  2806  2188  540
+CONVEX 797    'GT_PK(2,2)'      520  2808  560  2079  2809  539
+CONVEX 798    'GT_PK(2,2)'      560  2810  579  2809  2180  539
+CONVEX 799    'GT_PK(2,2)'      613  2811  590  1714  2812  631
+CONVEX 800    'GT_PK(2,2)'      579  2813  590  2179  2811  613
+CONVEX 801    'GT_PK(2,2)'      560  2814  590  2810  2813  579
+CONVEX 802    'GT_PK(2,2)'      590  2815  611  2812  2816  631
+CONVEX 803    'GT_PK(2,2)'      611  2815  590  2817  2818  581
+CONVEX 804    'GT_PK(2,2)'      590  2814  560  2818  2807  581
+CONVEX 805    'GT_PK(2,2)'      459  2819  437  1726  2820  415
+CONVEX 806    'GT_PK(2,2)'      120  2821  138  2822  2823  110
+CONVEX 807    'GT_PK(2,2)'      829  1709  867  2775  2824  853
+CONVEX 808    'GT_PK(2,2)'      1238  1387  761  2825  1380  1236
+CONVEX 809    'GT_PK(2,2)'      741  2826  711  2827  2828  759
+CONVEX 810    'GT_PK(2,2)'      318  2829  304  2830  2831  334
+CONVEX 811    'GT_PK(2,2)'      304  2829  318  2832  2195  291
+CONVEX 812    'GT_PK(2,2)'      321  2833  353  2834  2201  334
+CONVEX 813    'GT_PK(2,2)'      304  2835  321  2831  2834  334
+CONVEX 814    'GT_PK(2,2)'      321  2835  304  2836  2837  293
+CONVEX 815    'GT_PK(2,2)'      281  2838  253  2839  2840  267
+CONVEX 816    'GT_PK(2,2)'      711  1573  727  2828  1701  759
+CONVEX 817    'GT_PK(2,2)'      274  2841  291  2842  2196  302
+CONVEX 818    'GT_PK(2,2)'      274  2843  261  2841  2844  291
+CONVEX 819    'GT_PK(2,2)'      332  2845  314  2846  2847  346
+CONVEX 820    'GT_PK(2,2)'      362  2848  332  2093  2846  346
+CONVEX 821    'GT_PK(2,2)'      332  2849  322  2850  2102  298
+CONVEX 822    'GT_PK(2,2)'      314  2845  332  2851  2850  298
+CONVEX 823    'GT_PK(2,2)'      350  2852  332  2727  2848  362
+CONVEX 824    'GT_PK(2,2)'      332  2852  350  2849  2730  322
+CONVEX 825    'GT_PK(2,2)'      318  2853  348  2192  2854  330
+CONVEX 826    'GT_PK(2,2)'      348  2853  318  2855  2830  334
+CONVEX 827    'GT_PK(2,2)'      369  2856  348  2202  2855  334
+CONVEX 828    'GT_PK(2,2)'      385  2857  371  2214  2858  405
+CONVEX 829    'GT_PK(2,2)'      371  2857  385  2859  2206  353
+CONVEX 830    'GT_PK(2,2)'      387  2860  419  2861  2190  405
+CONVEX 831    'GT_PK(2,2)'      371  2862  387  2858  2861  405
+CONVEX 832    'GT_PK(2,2)'      387  2862  371  2863  2864  355
+CONVEX 833    'GT_PK(2,2)'      473  2865  495  2866  2128  450
+CONVEX 834    'GT_PK(2,2)'      430  2867  473  2217  2866  450
+CONVEX 835    'GT_PK(2,2)'      491  2868  473  2081  2869  449
+CONVEX 836    'GT_PK(2,2)'      473  2867  430  2869  2222  449
+CONVEX 837    'GT_PK(2,2)'      1075  2870  1059  2871  2872  1049
+CONVEX 838    'GT_PK(2,2)'      1075  2873  1086  2870  2232  1059
+CONVEX 839    'GT_PK(2,2)'      1063  2874  1075  1740  2871  1049
+CONVEX 840    'GT_PK(2,2)'      1086  2873  1075  2230  2875  1097
+CONVEX 841    'GT_PK(2,2)'      30  2876  46  2254  2877  36
+CONVEX 842    'GT_PK(2,2)'      57  2878  46  2879  2880  69
+CONVEX 843    'GT_PK(2,2)'      46  2878  57  2877  2881  36
+CONVEX 844    'GT_PK(2,2)'      46  2882  55  2880  2883  69
+CONVEX 845    'GT_PK(2,2)'      55  2882  46  2884  2885  34
+CONVEX 846    'GT_PK(2,2)'      46  2876  30  2885  2258  34
+CONVEX 847    'GT_PK(2,2)'      21  2886  1168  2887  2888  17
+CONVEX 848    'GT_PK(2,2)'      1167  2889  21  1777  2890  15
+CONVEX 849    'GT_PK(2,2)'      1168  2886  21  2891  2889  1167
+CONVEX 850    'GT_PK(2,2)'      40  2892  53  2260  2893  63
+CONVEX 851    'GT_PK(2,2)'      1168  2894  1170  2888  2895  17
+CONVEX 852    'GT_PK(2,2)'      25  2896  1170  2263  2897  1172
+CONVEX 853    'GT_PK(2,2)'      1170  2896  25  2895  2898  17
+CONVEX 854    'GT_PK(2,2)'      711  2826  741  2899  2900  695
+CONVEX 855    'GT_PK(2,2)'      711  2899  695  1575  2901  669
+CONVEX 856    'GT_PK(2,2)'      723  2902  741  2903  2904  755
+CONVEX 857    'GT_PK(2,2)'      48  2905  27  2906  2267  39
+CONVEX 858    'GT_PK(2,2)'      59  2907  48  2272  2906  39
+CONVEX 859    'GT_PK(2,2)'      48  2908  73  2909  2910  60
+CONVEX 860    'GT_PK(2,2)'      73  2908  48  2558  2907  59
+CONVEX 861    'GT_PK(2,2)'      27  2911  14  2269  2912  20
+CONVEX 862    'GT_PK(2,2)'      14  2913  1164  2912  1778  20
+CONVEX 863    'GT_PK(2,2)'      1164  2913  14  2914  2915  1163
+CONVEX 864    'GT_PK(2,2)'      14  2916  1165  2915  2917  1163
+CONVEX 865    'GT_PK(2,2)'      138  2918  124  2823  2919  110
+CONVEX 866    'GT_PK(2,2)'      124  2918  138  2920  2921  155
+CONVEX 867    'GT_PK(2,2)'      97  2922  108  2923  2924  80
+CONVEX 868    'GT_PK(2,2)'      70  2925  97  2926  2923  80
+CONVEX 869    'GT_PK(2,2)'      97  2927  124  2922  2928  108
+CONVEX 870    'GT_PK(2,2)'      124  2927  97  2919  2929  110
+CONVEX 871    'GT_PK(2,2)'      56  2930  70  2931  2926  80
+CONVEX 872    'GT_PK(2,2)'      741  2932  773  2904  2933  755
+CONVEX 873    'GT_PK(2,2)'      741  2902  723  2900  2934  695
+CONVEX 874    'GT_PK(2,2)'      1173  2935  24  2936  2937  1175
+CONVEX 875    'GT_PK(2,2)'      773  2932  741  2938  2827  759
+CONVEX 876    'GT_PK(2,2)'      701  2939  723  2940  2941  739
+CONVEX 877    'GT_PK(2,2)'      723  2903  755  2941  2942  739
+CONVEX 878    'GT_PK(2,2)'      313  2943  339  2944  2945  323
+CONVEX 879    'GT_PK(2,2)'      339  2943  313  2946  2284  1210
+CONVEX 880    'GT_PK(2,2)'      339  2946  1210  2947  2948  1212
+CONVEX 881    'GT_PK(2,2)'      359  2949  339  2293  2947  1212
+CONVEX 882    'GT_PK(2,2)'      359  2950  407  2951  2952  375
+CONVEX 883    'GT_PK(2,2)'      407  2950  359  2953  2294  391
+CONVEX 884    'GT_PK(2,2)'      485  2954  525  2955  2397  505
+CONVEX 885    'GT_PK(2,2)'      525  2954  485  1833  2956  499
+CONVEX 886    'GT_PK(2,2)'      1218  2957  427  2958  2959  1216
+CONVEX 887    'GT_PK(2,2)'      427  2960  391  2959  1788  1216
+CONVEX 888    'GT_PK(2,2)'      427  2961  407  2960  2953  391
+CONVEX 889    'GT_PK(2,2)'      407  2961  427  2962  2963  443
+CONVEX 890    'GT_PK(2,2)'      1060  2964  1076  2965  2966  1091
+CONVEX 891    'GT_PK(2,2)'      1076  2967  1062  2968  2969  1087
+CONVEX 892    'GT_PK(2,2)'      1101  2970  1076  2797  2968  1087
+CONVEX 893    'GT_PK(2,2)'      1076  2970  1101  2966  2801  1091
+CONVEX 894    'GT_PK(2,2)'      1039  2971  1060  2972  2973  1023
+CONVEX 895    'GT_PK(2,2)'      1076  2974  1039  2967  2975  1062
+CONVEX 896    'GT_PK(2,2)'      1039  2974  1076  2971  2964  1060
+CONVEX 897    'GT_PK(2,2)'      1060  2976  1045  2973  2977  1023
+CONVEX 898    'GT_PK(2,2)'      1021  2978  1005  2979  2980  986
+CONVEX 899    'GT_PK(2,2)'      1093  2981  1105  2982  2785  1114
+CONVEX 900    'GT_PK(2,2)'      723  2939  701  2983  2984  675
+CONVEX 901    'GT_PK(2,2)'      695  2934  723  2985  2983  675
+CONVEX 902    'GT_PK(2,2)'      1267  2986  1268  2987  2988  1079
+CONVEX 903    'GT_PK(2,2)'      685  2248  653  2989  2990  1232
+CONVEX 904    'GT_PK(2,2)'      685  2989  1232  1369  2991  1234
+CONVEX 905    'GT_PK(2,2)'      1071  2992  1083  2993  2311  1096
+CONVEX 906    'GT_PK(2,2)'      1273  2994  1275  2995  2783  1106
+CONVEX 907    'GT_PK(2,2)'      1099  2996  1273  2318  2995  1106
+CONVEX 908    'GT_PK(2,2)'      1273  2996  1099  2997  2998  1271
+CONVEX 909    'GT_PK(2,2)'      607  1663  647  2999  3000  629
+CONVEX 910    'GT_PK(2,2)'      647  1577  669  3000  3001  629
+CONVEX 911    'GT_PK(2,2)'      623  1585  587  3002  1835  567
+CONVEX 912    'GT_PK(2,2)'      815  3003  845  1844  3004  826
+CONVEX 913    'GT_PK(2,2)'      845  3005  857  3004  3006  826
+CONVEX 914    'GT_PK(2,2)'      858  3007  847  3008  3009  874
+CONVEX 915    'GT_PK(2,2)'      886  3010  858  3011  3008  874
+CONVEX 916    'GT_PK(2,2)'      886  3012  914  3013  3014  900
+CONVEX 917    'GT_PK(2,2)'      857  3015  883  3016  3017  870
+CONVEX 918    'GT_PK(2,2)'      883  3018  899  3017  3019  870
+CONVEX 919    'GT_PK(2,2)'      928  3020  902  2330  3021  917
+CONVEX 920    'GT_PK(2,2)'      902  3020  928  3022  3023  914
+CONVEX 921    'GT_PK(2,2)'      902  3024  886  3025  3011  874
+CONVEX 922    'GT_PK(2,2)'      886  3024  902  3012  3022  914
+CONVEX 923    'GT_PK(2,2)'      631  3026  649  1419  3027  673
+CONVEX 924    'GT_PK(2,2)'      611  3028  649  2816  3026  631
+CONVEX 925    'GT_PK(2,2)'      925  3029  937  1698  3030  953
+CONVEX 926    'GT_PK(2,2)'      911  3031  937  2319  3029  925
+CONVEX 927    'GT_PK(2,2)'      923  3032  937  3033  3031  911
+CONVEX 928    'GT_PK(2,2)'      623  3034  1230  1584  3035  653
+CONVEX 929    'GT_PK(2,2)'      1230  3034  623  3036  3037  1228
+CONVEX 930    'GT_PK(2,2)'      1045  3038  1024  2977  3039  1023
+CONVEX 931    'GT_PK(2,2)'      1059  3040  1032  2872  3041  1049
+CONVEX 932    'GT_PK(2,2)'      1042  3042  1032  2234  3040  1059
+CONVEX 933    'GT_PK(2,2)'      1143  3043  1145  3044  3045  743
+CONVEX 934    'GT_PK(2,2)'      1143  3046  707  3047  3048  1141
+CONVEX 935    'GT_PK(2,2)'      707  3046  1143  3049  3044  743
+CONVEX 936    'GT_PK(2,2)'      809  3050  791  3051  3052  1147
+CONVEX 937    'GT_PK(2,2)'      623  3002  567  3037  1488  1228
+CONVEX 938    'GT_PK(2,2)'      653  3035  1230  2990  3053  1232
+CONVEX 939    'GT_PK(2,2)'      939  3054  1154  3055  3056  1156
+CONVEX 940    'GT_PK(2,2)'      1154  3054  939  3057  3058  923
+CONVEX 941    'GT_PK(2,2)'      885  3059  911  3060  2320  898
+CONVEX 942    'GT_PK(2,2)'      871  3061  885  1806  3060  898
+CONVEX 943    'GT_PK(2,2)'      885  3061  871  3062  1808  855
+CONVEX 944    'GT_PK(2,2)'      993  1412  977  3063  3064  957
+CONVEX 945    'GT_PK(2,2)'      973  3065  993  3066  3063  957
+CONVEX 946    'GT_PK(2,2)'      1257  1731  993  3067  3065  973
+CONVEX 947    'GT_PK(2,2)'      1253  3068  931  3069  2324  1250
+CONVEX 948    'GT_PK(2,2)'      931  3068  1253  3070  3071  949
+CONVEX 949    'GT_PK(2,2)'      1253  3072  1255  3071  3073  949
+CONVEX 950    'GT_PK(2,2)'      949  3074  973  3075  3066  957
+CONVEX 951    'GT_PK(2,2)'      1255  3076  973  3073  3074  949
+CONVEX 952    'GT_PK(2,2)'      921  3077  907  3078  3079  893
+CONVEX 953    'GT_PK(2,2)'      905  3080  921  3081  3078  893
+CONVEX 954    'GT_PK(2,2)'      919  3082  931  3083  3070  949
+CONVEX 955    'GT_PK(2,2)'      931  3082  919  2325  3084  909
+CONVEX 956    'GT_PK(2,2)'      865  3085  853  3086  3087  881
+CONVEX 957    'GT_PK(2,2)'      946  3088  974  2332  3089  958
+CONVEX 958    'GT_PK(2,2)'      974  3088  946  3090  3091  962
+CONVEX 959    'GT_PK(2,2)'      994  3092  974  3093  3090  962
+CONVEX 960    'GT_PK(2,2)'      974  3092  994  3094  3095  1007
+CONVEX 961    'GT_PK(2,2)'      1065  3096  1047  1761  2306  1033
+CONVEX 962    'GT_PK(2,2)'      1047  3096  1065  3097  3098  1073
+CONVEX 963    'GT_PK(2,2)'      1035  3099  1026  3100  3101  1052
+CONVEX 964    'GT_PK(2,2)'      1026  3099  1035  3102  3103  1007
+CONVEX 965    'GT_PK(2,2)'      1035  1769  1019  3103  3104  1007
+CONVEX 966    'GT_PK(2,2)'      1035  3100  1052  1768  3105  1066
+CONVEX 967    'GT_PK(2,2)'      1026  3106  1263  3101  3107  1052
+CONVEX 968    'GT_PK(2,2)'      414  3108  376  3109  3110  398
+CONVEX 969    'GT_PK(2,2)'      372  3111  376  3112  3113  356
+CONVEX 970    'GT_PK(2,2)'      376  3111  372  3110  2342  398
+CONVEX 971    'GT_PK(2,2)'      282  3114  310  3115  2365  1302
+CONVEX 972    'GT_PK(2,2)'      282  3116  254  3117  2574  266
+CONVEX 973    'GT_PK(2,2)'      296  3118  282  2556  3117  266
+CONVEX 974    'GT_PK(2,2)'      310  3114  282  2553  3118  296
+CONVEX 975    'GT_PK(2,2)'      282  3115  1302  3119  3120  1300
+CONVEX 976    'GT_PK(2,2)'      254  3116  282  2579  3119  1300
+CONVEX 977    'GT_PK(2,2)'      578  3121  591  3122  3123  561
+CONVEX 978    'GT_PK(2,2)'      610  3124  591  3125  3126  630
+CONVEX 979    'GT_PK(2,2)'      610  3127  632  3128  3129  594
+CONVEX 980    'GT_PK(2,2)'      518  3130  530  3131  3132  488
+CONVEX 981    'GT_PK(2,2)'      530  3130  518  2615  3133  556
+CONVEX 982    'GT_PK(2,2)'      541  3134  521  3135  3136  561
+CONVEX 983    'GT_PK(2,2)'      521  3134  541  3137  3138  502
+CONVEX 984    'GT_PK(2,2)'      541  3139  518  3138  3140  502
+CONVEX 985    'GT_PK(2,2)'      518  3139  541  3133  3141  556
+CONVEX 986    'GT_PK(2,2)'      538  3142  521  3143  3144  496
+CONVEX 987    'GT_PK(2,2)'      578  3145  538  3146  3147  554
+CONVEX 988    'GT_PK(2,2)'      538  3145  578  3148  3122  561
+CONVEX 989    'GT_PK(2,2)'      521  3142  538  3136  3148  561
+CONVEX 990    'GT_PK(2,2)'      538  3149  514  3147  2348  554
+CONVEX 991    'GT_PK(2,2)'      514  3149  538  2344  3143  496
+CONVEX 992    'GT_PK(2,2)'      478  3150  502  3151  3152  458
+CONVEX 993    'GT_PK(2,2)'      478  3153  521  3150  3137  502
+CONVEX 994    'GT_PK(2,2)'      521  3153  478  3144  3154  496
+CONVEX 995    'GT_PK(2,2)'      478  3155  454  3154  2350  496
+CONVEX 996    'GT_PK(2,2)'      454  3156  434  2351  3157  474
+CONVEX 997    'GT_PK(2,2)'      550  3158  574  3159  2352  534
+CONVEX 998    'GT_PK(2,2)'      574  3158  550  2354  3160  600
+CONVEX 999    'GT_PK(2,2)'      550  3161  532  3162  2412  570
+CONVEX 1000    'GT_PK(2,2)'      600  3160  550  3163  3162  570
+CONVEX 1001    'GT_PK(2,2)'      1312  3164  444  2374  3165  462
+CONVEX 1002    'GT_PK(2,2)'      502  3166  480  3152  3167  458
+CONVEX 1003    'GT_PK(2,2)'      480  3168  438  3167  2358  458
+CONVEX 1004    'GT_PK(2,2)'      518  3169  480  3140  3166  502
+CONVEX 1005    'GT_PK(2,2)'      480  3169  518  3170  3131  488
+CONVEX 1006    'GT_PK(2,2)'      342  3171  1304  3172  2364  310
+CONVEX 1007    'GT_PK(2,2)'      342  3173  326  3174  3175  356
+CONVEX 1008    'GT_PK(2,2)'      326  3173  342  2552  3172  310
+CONVEX 1009    'GT_PK(2,2)'      705  3176  707  3177  3049  743
+CONVEX 1010    'GT_PK(2,2)'      707  3176  705  3178  3179  683
+CONVEX 1011    'GT_PK(2,2)'      683  3179  705  2371  3180  691
+CONVEX 1012    'GT_PK(2,2)'      705  3181  729  3180  3182  691
+CONVEX 1013    'GT_PK(2,2)'      729  3181  705  3183  3177  743
+CONVEX 1014    'GT_PK(2,2)'      707  3184  689  3048  3185  1141
+CONVEX 1015    'GT_PK(2,2)'      633  3186  662  3187  2367  671
+CONVEX 1016    'GT_PK(2,2)'      649  3188  633  3189  3187  671
+CONVEX 1017    'GT_PK(2,2)'      633  3188  649  3190  3028  611
+CONVEX 1018    'GT_PK(2,2)'      1  3191  0  3192  2373  462
+CONVEX 1019    'GT_PK(2,2)'      1263  3106  1026  3193  1448  1261
+CONVEX 1020    'GT_PK(2,2)'      506  3194  1  3195  3192  462
+CONVEX 1021    'GT_PK(2,2)'      1052  3107  1263  3196  3197  1265
+CONVEX 1022    'GT_PK(2,2)'      797  1772  811  1801  3198  827
+CONVEX 1023    'GT_PK(2,2)'      811  3199  843  3198  1474  827
+CONVEX 1024    'GT_PK(2,2)'      811  3200  825  3199  2322  843
+CONVEX 1025    'GT_PK(2,2)'      811  1780  795  3200  3201  825
+CONVEX 1026    'GT_PK(2,2)'      395  3202  423  1720  3203  439
+CONVEX 1027    'GT_PK(2,2)'      423  3204  461  3203  2379  439
+CONVEX 1028    'GT_PK(2,2)'      423  3202  395  3205  3206  389
+CONVEX 1029    'GT_PK(2,2)'      409  3207  423  3208  3205  389
+CONVEX 1030    'GT_PK(2,2)'      461  3204  423  3209  3210  447
+CONVEX 1031    'GT_PK(2,2)'      423  3207  409  3210  3211  447
+CONVEX 1032    'GT_PK(2,2)'      795  1783  775  3212  3213  791
+CONVEX 1033    'GT_PK(2,2)'      409  3214  1309  3215  3216  1311
+CONVEX 1034    'GT_PK(2,2)'      1307  3217  1309  3218  3219  389
+CONVEX 1035    'GT_PK(2,2)'      1309  3214  409  3219  3208  389
+CONVEX 1036    'GT_PK(2,2)'      713  3220  690  3221  3222  670
+CONVEX 1037    'GT_PK(2,2)'      692  3223  713  3224  3221  670
+CONVEX 1038    'GT_PK(2,2)'      713  3223  692  3225  3226  736
+CONVEX 1039    'GT_PK(2,2)'      526  2622  546  3227  3228  506
+CONVEX 1040    'GT_PK(2,2)'      791  3213  775  3229  3230  757
+CONVEX 1041    'GT_PK(2,2)'      536  3231  558  3232  2402  572
+CONVEX 1042    'GT_PK(2,2)'      552  3233  536  2410  3232  572
+CONVEX 1043    'GT_PK(2,2)'      569  3234  562  3235  2407  545
+CONVEX 1044    'GT_PK(2,2)'      587  3236  569  1836  3237  565
+CONVEX 1045    'GT_PK(2,2)'      569  3235  545  3237  2396  565
+CONVEX 1046    'GT_PK(2,2)'      492  3238  514  3239  2345  474
+CONVEX 1047    'GT_PK(2,2)'      514  3238  492  2347  3240  534
+CONVEX 1048    'GT_PK(2,2)'      397  3241  429  2479  3242  413
+CONVEX 1049    'GT_PK(2,2)'      523  3243  483  2400  3244  505
+CONVEX 1050    'GT_PK(2,2)'      558  3245  516  3246  3247  542
+CONVEX 1051    'GT_PK(2,2)'      516  3248  536  3249  3250  494
+CONVEX 1052    'GT_PK(2,2)'      536  3248  516  3231  3245  558
+CONVEX 1053    'GT_PK(2,2)'      441  3251  483  3252  3253  457
+CONVEX 1054    'GT_PK(2,2)'      562  3254  576  2406  3255  542
+CONVEX 1055    'GT_PK(2,2)'      576  3256  558  3255  3246  542
+CONVEX 1056    'GT_PK(2,2)'      558  3256  576  2401  3257  592
+CONVEX 1057    'GT_PK(2,2)'      576  3258  608  3257  2418  592
+CONVEX 1058    'GT_PK(2,2)'      774  3259  752  3260  2460  778
+CONVEX 1059    'GT_PK(2,2)'      752  3259  774  3261  3262  736
+CONVEX 1060    'GT_PK(2,2)'      810  3263  796  3264  1843  826
+CONVEX 1061    'GT_PK(2,2)'      796  3263  810  2459  3265  778
+CONVEX 1062    'GT_PK(2,2)'      808  3266  824  3267  3268  840
+CONVEX 1063    'GT_PK(2,2)'      1148  3269  808  3270  3267  840
+CONVEX 1064    'GT_PK(2,2)'      808  3269  1148  3271  3272  1146
+CONVEX 1065    'GT_PK(2,2)'      790  3273  808  2425  3271  1146
+CONVEX 1066    'GT_PK(2,2)'      648  3274  692  3275  3224  670
+CONVEX 1067    'GT_PK(2,2)'      632  3276  648  3277  3275  670
+CONVEX 1068    'GT_PK(2,2)'      648  3276  632  3278  3127  610
+CONVEX 1069    'GT_PK(2,2)'      648  3278  610  3279  3125  630
+CONVEX 1070    'GT_PK(2,2)'      672  3280  648  3281  3279  630
+CONVEX 1071    'GT_PK(2,2)'      648  3280  672  3274  3282  692
+CONVEX 1072    'GT_PK(2,2)'      698  3283  680  3284  3285  718
+CONVEX 1073    'GT_PK(2,2)'      680  3283  698  3286  3287  658
+CONVEX 1074    'GT_PK(2,2)'      702  3288  735  3289  1838  718
+CONVEX 1075    'GT_PK(2,2)'      680  3290  702  3285  3289  718
+CONVEX 1076    'GT_PK(2,2)'      702  3290  680  3291  3292  660
+CONVEX 1077    'GT_PK(2,2)'      702  3293  721  3288  3294  735
+CONVEX 1078    'GT_PK(2,2)'      702  3291  660  3295  3296  678
+CONVEX 1079    'GT_PK(2,2)'      721  3293  702  3297  3295  678
+CONVEX 1080    'GT_PK(2,2)'      660  3298  638  3296  3299  678
+CONVEX 1081    'GT_PK(2,2)'      614  3300  638  2428  3301  598
+CONVEX 1082    'GT_PK(2,2)'      618  3302  600  3303  3163  570
+CONVEX 1083    'GT_PK(2,2)'      618  3304  638  3305  3298  660
+CONVEX 1084    'GT_PK(2,2)'      598  3306  618  2414  3303  570
+CONVEX 1085    'GT_PK(2,2)'      638  3304  618  3301  3306  598
+CONVEX 1086    'GT_PK(2,2)'      749  3307  731  1839  3308  718
+CONVEX 1087    'GT_PK(2,2)'      731  3309  698  3308  3284  718
+CONVEX 1088    'GT_PK(2,2)'      716  3310  732  3311  3312  696
+CONVEX 1089    'GT_PK(2,2)'      732  3310  716  2452  3313  746
+CONVEX 1090    'GT_PK(2,2)'      716  3314  731  3313  3315  746
+CONVEX 1091    'GT_PK(2,2)'      731  3314  716  3309  3316  698
+CONVEX 1092    'GT_PK(2,2)'      591  3317  612  3126  3318  630
+CONVEX 1093    'GT_PK(2,2)'      612  3317  591  3319  3121  578
+CONVEX 1094    'GT_PK(2,2)'      890  3320  907  3321  3322  917
+CONVEX 1095    'GT_PK(2,2)'      902  3323  890  3021  3321  917
+CONVEX 1096    'GT_PK(2,2)'      890  3323  902  3324  3025  874
+CONVEX 1097    'GT_PK(2,2)'      821  3325  785  3326  2441  807
+CONVEX 1098    'GT_PK(2,2)'      785  3325  821  2439  3327  803
+CONVEX 1099    'GT_PK(2,2)'      656  3328  614  3329  2431  634
+CONVEX 1100    'GT_PK(2,2)'      675  3330  656  2445  3329  634
+CONVEX 1101    'GT_PK(2,2)'      638  3331  656  3299  3332  678
+CONVEX 1102    'GT_PK(2,2)'      656  3331  638  3328  3300  614
+CONVEX 1103    'GT_PK(2,2)'      735  3333  751  1841  3334  769
+CONVEX 1104    'GT_PK(2,2)'      721  3335  751  3294  3333  735
+CONVEX 1105    'GT_PK(2,2)'      751  3336  785  3334  2440  769
+CONVEX 1106    'GT_PK(2,2)'      785  3336  751  2443  3337  771
+CONVEX 1107    'GT_PK(2,2)'      751  3338  739  3337  3339  771
+CONVEX 1108    'GT_PK(2,2)'      751  3335  721  3338  3340  739
+CONVEX 1109    'GT_PK(2,2)'      692  3341  714  3226  3342  736
+CONVEX 1110    'GT_PK(2,2)'      714  3343  752  3342  3261  736
+CONVEX 1111    'GT_PK(2,2)'      672  3344  714  3282  3341  692
+CONVEX 1112    'GT_PK(2,2)'      752  3343  714  2457  3345  732
+CONVEX 1113    'GT_PK(2,2)'      732  3345  714  3312  3346  696
+CONVEX 1114    'GT_PK(2,2)'      714  3344  672  3346  3347  696
+CONVEX 1115    'GT_PK(2,2)'      180  3348  208  3349  3350  196
+CONVEX 1116    'GT_PK(2,2)'      180  3351  192  3348  2500  208
+CONVEX 1117    'GT_PK(2,2)'      143  3352  131  1886  3353  115
+CONVEX 1118    'GT_PK(2,2)'      131  3354  147  3355  3356  118
+CONVEX 1119    'GT_PK(2,2)'      101  3357  131  1906  3355  118
+CONVEX 1120    'GT_PK(2,2)'      131  3357  101  3353  1903  115
+CONVEX 1121    'GT_PK(2,2)'      133  3358  149  3359  2461  121
+CONVEX 1122    'GT_PK(2,2)'      105  3360  133  1848  3359  121
+CONVEX 1123    'GT_PK(2,2)'      133  3360  105  3361  1846  118
+CONVEX 1124    'GT_PK(2,2)'      147  3362  133  3356  3361  118
+CONVEX 1125    'GT_PK(2,2)'      107  3363  81  2465  3364  95
+CONVEX 1126    'GT_PK(2,2)'      55  3365  81  2883  3366  69
+CONVEX 1127    'GT_PK(2,2)'      81  3367  96  3366  3368  69
+CONVEX 1128    'GT_PK(2,2)'      81  3363  107  3367  2582  96
+CONVEX 1129    'GT_PK(2,2)'      81  3369  68  3364  2473  95
+CONVEX 1130    'GT_PK(2,2)'      68  3369  81  3370  3365  55
+CONVEX 1131    'GT_PK(2,2)'      68  3371  44  2474  3372  52
+CONVEX 1132    'GT_PK(2,2)'      1179  3373  44  2246  3374  34
+CONVEX 1133    'GT_PK(2,2)'      44  3375  55  3374  2884  34
+CONVEX 1134    'GT_PK(2,2)'      44  3371  68  3375  3370  55
+CONVEX 1135    'GT_PK(2,2)'      44  3373  1179  3376  3377  1181
+CONVEX 1136    'GT_PK(2,2)'      52  3372  44  2471  3376  1181
+CONVEX 1137    'GT_PK(2,2)'      285  3378  313  3379  2944  323
+CONVEX 1138    'GT_PK(2,2)'      1208  3380  285  3381  3382  1206
+CONVEX 1139    'GT_PK(2,2)'      313  3378  285  2283  3380  1208
+CONVEX 1140    'GT_PK(2,2)'      240  3383  252  2575  3384  266
+CONVEX 1141    'GT_PK(2,2)'      226  3385  252  2481  3383  240
+CONVEX 1142    'GT_PK(2,2)'      252  3386  280  3384  2555  266
+CONVEX 1143    'GT_PK(2,2)'      210  3387  182  3388  3389  196
+CONVEX 1144    'GT_PK(2,2)'      210  3390  226  3391  2483  198
+CONVEX 1145    'GT_PK(2,2)'      182  3387  210  3392  3391  198
+CONVEX 1146    'GT_PK(2,2)'      236  3393  264  3394  3395  250
+CONVEX 1147    'GT_PK(2,2)'      264  3396  276  3397  1901  292
+CONVEX 1148    'GT_PK(2,2)'      276  3396  264  1900  3398  248
+CONVEX 1149    'GT_PK(2,2)'      264  3393  236  3398  2485  248
+CONVEX 1150    'GT_PK(2,2)'      257  3399  243  3400  3401  271
+CONVEX 1151    'GT_PK(2,2)'      1203  3402  243  3403  3404  221
+CONVEX 1152    'GT_PK(2,2)'      217  3405  247  2518  3406  231
+CONVEX 1153    'GT_PK(2,2)'      259  3407  247  2526  3408  273
+CONVEX 1154    'GT_PK(2,2)'      247  3407  259  3406  2520  231
+CONVEX 1155    'GT_PK(2,2)'      247  3409  257  3408  3410  273
+CONVEX 1156    'GT_PK(2,2)'      301  3411  329  2536  3412  317
+CONVEX 1157    'GT_PK(2,2)'      345  3413  329  2508  3414  365
+CONVEX 1158    'GT_PK(2,2)'      329  3413  345  3412  2506  317
+CONVEX 1159    'GT_PK(2,2)'      329  3415  347  3414  2289  365
+CONVEX 1160    'GT_PK(2,2)'      329  3416  315  3415  3417  347
+CONVEX 1161    'GT_PK(2,2)'      315  3416  329  3418  3411  301
+CONVEX 1162    'GT_PK(2,2)'      775  3419  737  3230  3420  757
+CONVEX 1163    'GT_PK(2,2)'      195  3421  217  3422  2519  207
+CONVEX 1164    'GT_PK(2,2)'      175  3423  195  2539  3422  207
+CONVEX 1165    'GT_PK(2,2)'      195  3423  175  3424  2543  159
+CONVEX 1166    'GT_PK(2,2)'      1197  3425  159  3426  2548  1195
+CONVEX 1167    'GT_PK(2,2)'      775  1786  753  3419  3427  737
+CONVEX 1168    'GT_PK(2,2)'      967  1810  951  3428  3429  939
+CONVEX 1169    'GT_PK(2,2)'      939  3429  951  3058  3430  923
+CONVEX 1170    'GT_PK(2,2)'      1201  3431  1203  3432  3403  221
+CONVEX 1171    'GT_PK(2,2)'      951  3433  937  3430  3032  923
+CONVEX 1172    'GT_PK(2,2)'      951  1798  965  3433  3434  937
+CONVEX 1173    'GT_PK(2,2)'      924  3435  910  3436  3437  899
+CONVEX 1174    'GT_PK(2,2)'      910  3435  924  3438  1464  936
+CONVEX 1175    'GT_PK(2,2)'      340  3439  326  3440  2549  308
+CONVEX 1176    'GT_PK(2,2)'      372  3441  340  2339  3442  354
+CONVEX 1177    'GT_PK(2,2)'      340  3441  372  3443  3112  356
+CONVEX 1178    'GT_PK(2,2)'      326  3439  340  3175  3443  356
+CONVEX 1179    'GT_PK(2,2)'      354  3442  340  1824  3444  324
+CONVEX 1180    'GT_PK(2,2)'      340  3440  308  3444  3445  324
+CONVEX 1181    'GT_PK(2,2)'      306  3446  278  1502  3447  292
+CONVEX 1182    'GT_PK(2,2)'      278  3448  264  3447  3397  292
+CONVEX 1183    'GT_PK(2,2)'      264  3448  278  3395  3449  250
+CONVEX 1184    'GT_PK(2,2)'      308  3450  294  3445  3451  324
+CONVEX 1185    'GT_PK(2,2)'      280  3452  294  2557  3450  308
+CONVEX 1186    'GT_PK(2,2)'      294  3453  306  3451  1486  324
+CONVEX 1187    'GT_PK(2,2)'      294  3454  278  3453  3446  306
+CONVEX 1188    'GT_PK(2,2)'      75  3455  91  2561  3456  111
+CONVEX 1189    'GT_PK(2,2)'      73  3457  91  2910  3458  60
+CONVEX 1190    'GT_PK(2,2)'      91  3455  75  3458  2562  60
+CONVEX 1191    'GT_PK(2,2)'      75  3459  64  2564  3460  50
+CONVEX 1192    'GT_PK(2,2)'      64  3459  75  3461  2560  89
+CONVEX 1193    'GT_PK(2,2)'      93  3462  120  3463  2822  110
+CONVEX 1194    'GT_PK(2,2)'      154  3464  170  3465  3466  137
+CONVEX 1195    'GT_PK(2,2)'      154  3467  123  3468  2581  135
+CONVEX 1196    'GT_PK(2,2)'      123  3467  154  3469  3465  137
+CONVEX 1197    'GT_PK(2,2)'      184  3470  201  3471  2567  212
+CONVEX 1198    'GT_PK(2,2)'      184  3472  170  3470  3473  201
+CONVEX 1199    'GT_PK(2,2)'      96  3474  82  3368  3475  69
+CONVEX 1200    'GT_PK(2,2)'      82  3476  57  3475  2879  69
+CONVEX 1201    'GT_PK(2,2)'      57  3476  82  3477  3478  65
+CONVEX 1202    'GT_PK(2,2)'      82  3479  92  3478  3480  65
+CONVEX 1203    'GT_PK(2,2)'      92  2162  76  3480  3481  65
+CONVEX 1204    'GT_PK(2,2)'      53  3482  76  2893  3483  63
+CONVEX 1205    'GT_PK(2,2)'      76  3482  53  3481  3484  65
+CONVEX 1206    'GT_PK(2,2)'      1292  3485  160  3486  1366  172
+CONVEX 1207    'GT_PK(2,2)'      1294  3487  1292  3488  3486  172
+CONVEX 1208    'GT_PK(2,2)'      160  3485  1292  3489  3490  1291
+CONVEX 1209    'GT_PK(2,2)'      127  3491  106  3492  3493  90
+CONVEX 1210    'GT_PK(2,2)'      106  3494  73  3493  2559  90
+CONVEX 1211    'GT_PK(2,2)'      106  3495  91  3494  3457  73
+CONVEX 1212    'GT_PK(2,2)'      139  3496  128  2586  3497  161
+CONVEX 1213    'GT_PK(2,2)'      128  3498  106  3499  3491  127
+CONVEX 1214    'GT_PK(2,2)'      128  3496  139  3500  2589  111
+CONVEX 1215    'GT_PK(2,2)'      91  3501  128  3456  3500  111
+CONVEX 1216    'GT_PK(2,2)'      106  3498  128  3495  3501  91
+CONVEX 1217    'GT_PK(2,2)'      628  3502  589  3503  2599  609
+CONVEX 1218    'GT_PK(2,2)'      628  3503  609  3504  2591  650
+CONVEX 1219    'GT_PK(2,2)'      668  3505  628  2002  3504  650
+CONVEX 1220    'GT_PK(2,2)'      589  3502  628  2603  3506  606
+CONVEX 1221    'GT_PK(2,2)'      544  3507  522  3508  1926  563
+CONVEX 1222    'GT_PK(2,2)'      568  3509  544  2601  3508  563
+CONVEX 1223    'GT_PK(2,2)'      686  3510  708  3511  2608  666
+CONVEX 1224    'GT_PK(2,2)'      708  3510  686  2651  3512  726
+CONVEX 1225    'GT_PK(2,2)'      686  3513  710  3512  3514  726
+CONVEX 1226    'GT_PK(2,2)'      710  3513  686  2673  3515  668
+CONVEX 1227    'GT_PK(2,2)'      1227  3516  566  3517  3518  1229
+CONVEX 1228    'GT_PK(2,2)'      1227  3519  1225  3516  3520  566
+CONVEX 1229    'GT_PK(2,2)'      912  1826  924  3521  3436  899
+CONVEX 1230    'GT_PK(2,2)'      1048  3522  1074  3523  3524  1062
+CONVEX 1231    'GT_PK(2,2)'      1225  3525  528  3520  3526  566
+CONVEX 1232    'GT_PK(2,2)'      528  3527  498  3528  2074  524
+CONVEX 1233    'GT_PK(2,2)'      498  3527  528  2068  3529  1223
+CONVEX 1234    'GT_PK(2,2)'      528  3525  1225  3529  3530  1223
+CONVEX 1235    'GT_PK(2,2)'      586  3531  622  3532  3533  566
+CONVEX 1236    'GT_PK(2,2)'      566  3533  622  3518  3534  1229
+CONVEX 1237    'GT_PK(2,2)'      622  3535  1231  3534  3536  1229
+CONVEX 1238    'GT_PK(2,2)'      1231  3535  622  1947  3537  652
+CONVEX 1239    'GT_PK(2,2)'      652  3538  626  2606  3539  666
+CONVEX 1240    'GT_PK(2,2)'      626  3540  586  3541  2626  606
+CONVEX 1241    'GT_PK(2,2)'      622  3542  626  3537  3538  652
+CONVEX 1242    'GT_PK(2,2)'      626  3542  622  3540  3531  586
+CONVEX 1243    'GT_PK(2,2)'      586  3543  564  2625  3544  568
+CONVEX 1244    'GT_PK(2,2)'      544  3545  564  3546  3547  524
+CONVEX 1245    'GT_PK(2,2)'      564  3545  544  3544  3509  568
+CONVEX 1246    'GT_PK(2,2)'      564  3548  528  3547  3528  524
+CONVEX 1247    'GT_PK(2,2)'      564  3543  586  3549  3532  566
+CONVEX 1248    'GT_PK(2,2)'      528  3548  564  3526  3549  566
+CONVEX 1249    'GT_PK(2,2)'      1025  3550  1009  3551  3552  995
+CONVEX 1250    'GT_PK(2,2)'      1008  3553  1025  3554  3551  995
+CONVEX 1251    'GT_PK(2,2)'      1009  3550  1025  2627  3555  1260
+CONVEX 1252    'GT_PK(2,2)'      1025  3556  1053  3557  1580  1262
+CONVEX 1253    'GT_PK(2,2)'      1260  3555  1025  3558  3557  1262
+CONVEX 1254    'GT_PK(2,2)'      956  3559  976  2631  3560  992
+CONVEX 1255    'GT_PK(2,2)'      1009  3561  976  3552  3562  995
+CONVEX 1256    'GT_PK(2,2)'      976  3561  1009  3560  2630  992
+CONVEX 1257    'GT_PK(2,2)'      1247  3563  866  2635  3564  888
+CONVEX 1258    'GT_PK(2,2)'      838  3565  866  1981  3566  1245
+CONVEX 1259    'GT_PK(2,2)'      866  3563  1247  3566  3567  1245
+CONVEX 1260    'GT_PK(2,2)'      866  3568  828  3569  3570  852
+CONVEX 1261    'GT_PK(2,2)'      828  3568  866  2659  3565  838
+CONVEX 1262    'GT_PK(2,2)'      908  3571  894  2643  3572  918
+CONVEX 1263    'GT_PK(2,2)'      918  3572  894  1549  3573  904
+CONVEX 1264    'GT_PK(2,2)'      894  3574  878  3573  1655  904
+CONVEX 1265    'GT_PK(2,2)'      776  3575  744  3576  2650  726
+CONVEX 1266    'GT_PK(2,2)'      776  3577  788  3578  3579  800
+CONVEX 1267    'GT_PK(2,2)'      792  3580  776  2655  3578  800
+CONVEX 1268    'GT_PK(2,2)'      744  3575  776  3581  3580  792
+CONVEX 1269    'GT_PK(2,2)'      724  3582  760  1936  3583  1237
+CONVEX 1270    'GT_PK(2,2)'      744  3584  760  2652  3582  724
+CONVEX 1271    'GT_PK(2,2)'      760  3585  1239  3583  3586  1237
+CONVEX 1272    'GT_PK(2,2)'      760  3587  792  3585  1968  1239
+CONVEX 1273    'GT_PK(2,2)'      760  3584  744  3587  3581  792
+CONVEX 1274    'GT_PK(2,2)'      788  3588  818  3579  3589  800
+CONVEX 1275    'GT_PK(2,2)'      818  3590  828  3589  2657  800
+CONVEX 1276    'GT_PK(2,2)'      804  3591  818  2698  3588  788
+CONVEX 1277    'GT_PK(2,2)'      828  3590  818  3570  3592  852
+CONVEX 1278    'GT_PK(2,2)'      975  3593  1008  3594  3554  995
+CONVEX 1279    'GT_PK(2,2)'      959  3595  975  2704  3596  947
+CONVEX 1280    'GT_PK(2,2)'      1067  3597  1036  2672  3598  1051
+CONVEX 1281    'GT_PK(2,2)'      1036  3597  1067  3599  1985  1053
+CONVEX 1282    'GT_PK(2,2)'      1036  3600  1020  3598  1998  1051
+CONVEX 1283    'GT_PK(2,2)'      1036  3601  1008  3600  3602  1020
+CONVEX 1284    'GT_PK(2,2)'      1025  3603  1036  3556  3599  1053
+CONVEX 1285    'GT_PK(2,2)'      1036  3603  1025  3601  3553  1008
+CONVEX 1286    'GT_PK(2,2)'      433  3604  453  1727  3605  471
+CONVEX 1287    'GT_PK(2,2)'      453  3606  493  3605  3607  471
+CONVEX 1288    'GT_PK(2,2)'      421  3608  453  2215  3604  433
+CONVEX 1289    'GT_PK(2,2)'      453  3609  475  3606  3610  493
+CONVEX 1290    'GT_PK(2,2)'      453  3608  421  3611  2211  435
+CONVEX 1291    'GT_PK(2,2)'      475  3609  453  3612  3611  435
+CONVEX 1292    'GT_PK(2,2)'      491  3613  511  3614  3615  533
+CONVEX 1293    'GT_PK(2,2)'      511  3616  551  3615  3617  533
+CONVEX 1294    'GT_PK(2,2)'      511  3613  491  3618  2080  471
+CONVEX 1295    'GT_PK(2,2)'      493  3619  511  3607  3618  471
+CONVEX 1296    'GT_PK(2,2)'      511  3619  493  3620  3621  535
+CONVEX 1297    'GT_PK(2,2)'      551  3616  511  2678  3620  535
+CONVEX 1298    'GT_PK(2,2)'      720  3622  703  2679  3623  734
+CONVEX 1299    'GT_PK(2,2)'      734  3623  703  2020  3624  719
+CONVEX 1300    'GT_PK(2,2)'      661  3625  703  2032  3626  679
+CONVEX 1301    'GT_PK(2,2)'      703  3622  720  3626  2682  679
+CONVEX 1302    'GT_PK(2,2)'      719  3624  703  2011  3627  681
+CONVEX 1303    'GT_PK(2,2)'      703  3625  661  3627  1632  681
+CONVEX 1304    'GT_PK(2,2)'      720  3628  738  2681  3629  700
+CONVEX 1305    'GT_PK(2,2)'      738  3630  770  3631  3632  754
+CONVEX 1306    'GT_PK(2,2)'      770  3630  738  2023  3633  750
+CONVEX 1307    'GT_PK(2,2)'      738  3628  720  3633  2680  750
+CONVEX 1308    'GT_PK(2,2)'      738  3631  754  3634  1590  722
+CONVEX 1309    'GT_PK(2,2)'      700  3629  738  2028  3634  722
+CONVEX 1310    'GT_PK(2,2)'      533  3635  571  3636  3637  553
+CONVEX 1311    'GT_PK(2,2)'      571  3638  599  3637  2686  553
+CONVEX 1312    'GT_PK(2,2)'      571  3639  551  3640  2677  601
+CONVEX 1313    'GT_PK(2,2)'      551  3639  571  3617  3635  533
+CONVEX 1314    'GT_PK(2,2)'      929  3641  915  2702  3642  942
+CONVEX 1315    'GT_PK(2,2)'      915  3641  929  3643  2706  903
+CONVEX 1316    'GT_PK(2,2)'      913  3644  901  3645  2695  882
+CONVEX 1317    'GT_PK(2,2)'      913  3646  925  3647  1699  941
+CONVEX 1318    'GT_PK(2,2)'      913  3645  882  3648  1805  898
+CONVEX 1319    'GT_PK(2,2)'      925  3646  913  2321  3648  898
+CONVEX 1320    'GT_PK(2,2)'      834  3649  822  1653  3650  806
+CONVEX 1321    'GT_PK(2,2)'      850  3651  822  2056  3649  834
+CONVEX 1322    'GT_PK(2,2)'      786  3652  772  3653  2663  754
+CONVEX 1323    'GT_PK(2,2)'      786  3654  804  3652  2696  772
+CONVEX 1324    'GT_PK(2,2)'      786  3655  822  3654  3656  804
+CONVEX 1325    'GT_PK(2,2)'      822  3655  786  3650  3657  806
+CONVEX 1326    'GT_PK(2,2)'      786  3658  770  3657  2022  806
+CONVEX 1327    'GT_PK(2,2)'      770  3658  786  3632  3653  754
+CONVEX 1328    'GT_PK(2,2)'      916  3659  891  2707  3660  903
+CONVEX 1329    'GT_PK(2,2)'      875  3661  891  1638  3662  860
+CONVEX 1330    'GT_PK(2,2)'      903  3660  891  3663  3661  875
+CONVEX 1331    'GT_PK(2,2)'      891  3664  876  3662  1402  860
+CONVEX 1332    'GT_PK(2,2)'      891  3665  906  3664  1956  876
+CONVEX 1333    'GT_PK(2,2)'      891  3659  916  3665  2709  906
+CONVEX 1334    'GT_PK(2,2)'      209  3666  193  3667  3668  181
+CONVEX 1335    'GT_PK(2,2)'      197  3669  209  3670  3667  181
+CONVEX 1336    'GT_PK(2,2)'      167  3671  197  3672  3670  181
+CONVEX 1337    'GT_PK(2,2)'      94  3673  108  3674  3675  122
+CONVEX 1338    'GT_PK(2,2)'      108  3673  94  2924  3676  80
+CONVEX 1339    'GT_PK(2,2)'      148  3677  167  3678  3672  181
+CONVEX 1340    'GT_PK(2,2)'      62  3679  87  3680  3681  72
+CONVEX 1341    'GT_PK(2,2)'      87  3679  62  3682  3683  78
+CONVEX 1342    'GT_PK(2,2)'      1062  3524  1074  2969  3684  1087
+CONVEX 1343    'GT_PK(2,2)'      1074  3685  1085  3686  3687  1098
+CONVEX 1344    'GT_PK(2,2)'      1074  3686  1098  3684  2792  1087
+CONVEX 1345    'GT_PK(2,2)'      1074  3522  1048  3688  1819  1058
+CONVEX 1346    'GT_PK(2,2)'      1085  3685  1074  3689  3688  1058
+CONVEX 1347    'GT_PK(2,2)'      85  3690  1186  3691  3692  72
+CONVEX 1348    'GT_PK(2,2)'      1186  3690  85  3693  3694  1189
+CONVEX 1349    'GT_PK(2,2)'      1202  3695  1200  2716  3696  220
+CONVEX 1350    'GT_PK(2,2)'      1041  3697  1068  1822  3698  1058
+CONVEX 1351    'GT_PK(2,2)'      1041  1817  1013  3699  3700  1027
+CONVEX 1352    'GT_PK(2,2)'      1068  3697  1041  3701  3702  1054
+CONVEX 1353    'GT_PK(2,2)'      242  3703  256  2712  3704  270
+CONVEX 1354    'GT_PK(2,2)'      442  3705  464  2724  3706  484
+CONVEX 1355    'GT_PK(2,2)'      464  3705  442  3707  2722  424
+CONVEX 1356    'GT_PK(2,2)'      392  3708  440  2736  3709  424
+CONVEX 1357    'GT_PK(2,2)'      464  3710  440  3711  3712  482
+CONVEX 1358    'GT_PK(2,2)'      440  3710  464  3709  3707  424
+CONVEX 1359    'GT_PK(2,2)'      1213  3713  1211  3714  2743  338
+CONVEX 1360    'GT_PK(2,2)'      358  3715  1213  2733  3714  338
+CONVEX 1361    'GT_PK(2,2)'      1213  3715  358  3716  2751  1215
+CONVEX 1362    'GT_PK(2,2)'      1041  3699  1027  3702  3717  1054
+CONVEX 1363    'GT_PK(2,2)'      969  3718  984  3719  3720  1001
+CONVEX 1364    'GT_PK(2,2)'      984  3718  969  3721  1855  954
+CONVEX 1365    'GT_PK(2,2)'      982  1472  969  3722  3719  1001
+CONVEX 1366    'GT_PK(2,2)'      1098  3723  1108  2794  3724  1118
+CONVEX 1367    'GT_PK(2,2)'      1108  3725  1093  3726  2982  1114
+CONVEX 1368    'GT_PK(2,2)'      1121  3727  1128  2786  3728  1114
+CONVEX 1369    'GT_PK(2,2)'      1128  3727  1121  3729  2788  1279
+CONVEX 1370    'GT_PK(2,2)'      1281  3730  1128  3731  3729  1279
+CONVEX 1371    'GT_PK(2,2)'      1078  3732  1060  3733  2965  1091
+CONVEX 1372    'GT_PK(2,2)'      1078  3734  1045  3732  2976  1060
+CONVEX 1373    'GT_PK(2,2)'      1122  3735  1131  3736  2805  1135
+CONVEX 1374    'GT_PK(2,2)'      1131  3735  1122  3737  3738  1113
+CONVEX 1375    'GT_PK(2,2)'      1088  3739  1110  3740  2799  1097
+CONVEX 1376    'GT_PK(2,2)'      1075  3741  1088  2875  3740  1097
+CONVEX 1377    'GT_PK(2,2)'      1088  3742  1063  3743  2302  1077
+CONVEX 1378    'GT_PK(2,2)'      1088  3741  1075  3742  2874  1063
+CONVEX 1379    'GT_PK(2,2)'      1092  3744  1103  3745  3746  1113
+CONVEX 1380    'GT_PK(2,2)'      1112  3747  1103  2802  3748  1091
+CONVEX 1381    'GT_PK(2,2)'      1103  3749  1078  3748  3733  1091
+CONVEX 1382    'GT_PK(2,2)'      1078  3749  1103  3750  3744  1092
+CONVEX 1383    'GT_PK(2,2)'      1124  3751  1131  3752  3737  1113
+CONVEX 1384    'GT_PK(2,2)'      1103  3753  1124  3746  3752  1113
+CONVEX 1385    'GT_PK(2,2)'      1124  3753  1103  3754  3747  1112
+CONVEX 1386    'GT_PK(2,2)'      437  3755  455  3756  3757  419
+CONVEX 1387    'GT_PK(2,2)'      419  3757  455  2189  3758  435
+CONVEX 1388    'GT_PK(2,2)'      455  3759  475  3758  3612  435
+CONVEX 1389    'GT_PK(2,2)'      475  3759  455  3760  3761  497
+CONVEX 1390    'GT_PK(2,2)'      497  3762  479  2077  3763  520
+CONVEX 1391    'GT_PK(2,2)'      479  3764  437  3765  2819  459
+CONVEX 1392    'GT_PK(2,2)'      455  3766  479  3761  3762  497
+CONVEX 1393    'GT_PK(2,2)'      479  3766  455  3764  3755  437
+CONVEX 1394    'GT_PK(2,2)'      479  3767  503  3763  2187  520
+CONVEX 1395    'GT_PK(2,2)'      503  3767  479  2182  3765  459
+CONVEX 1396    'GT_PK(2,2)'      130  3768  152  3769  3770  120
+CONVEX 1397    'GT_PK(2,2)'      152  3771  138  3770  2821  120
+CONVEX 1398    'GT_PK(2,2)'      152  3768  130  3772  2277  164
+CONVEX 1399    'GT_PK(2,2)'      213  3773  1297  3774  3775  1299
+CONVEX 1400    'GT_PK(2,2)'      229  1951  213  3776  3774  1299
+CONVEX 1401    'GT_PK(2,2)'      1301  3777  255  3778  3779  1299
+CONVEX 1402    'GT_PK(2,2)'      255  3780  229  3779  3776  1299
+CONVEX 1403    'GT_PK(2,2)'      253  3781  241  2840  3782  267
+CONVEX 1404    'GT_PK(2,2)'      241  3783  255  3782  3784  267
+CONVEX 1405    'GT_PK(2,2)'      255  3783  241  3780  3785  229
+CONVEX 1406    'GT_PK(2,2)'      161  3786  1293  2587  3787  173
+CONVEX 1407    'GT_PK(2,2)'      1293  3788  1295  3787  3789  173
+CONVEX 1408    'GT_PK(2,2)'      1293  3786  161  3790  3791  1291
+CONVEX 1409    'GT_PK(2,2)'      950  3792  964  3793  3794  980
+CONVEX 1410    'GT_PK(2,2)'      964  3792  950  1467  3795  936
+CONVEX 1411    'GT_PK(2,2)'      980  3794  964  3796  3797  996
+CONVEX 1412    'GT_PK(2,2)'      964  1475  982  3797  3798  996
+CONVEX 1413    'GT_PK(2,2)'      1013  1812  999  3799  3800  980
+CONVEX 1414    'GT_PK(2,2)'      1013  3799  980  3801  3796  996
+CONVEX 1415    'GT_PK(2,2)'      1027  3700  1013  3802  3801  996
+CONVEX 1416    'GT_PK(2,2)'      1157  3803  1155  3804  3805  938
+CONVEX 1417    'GT_PK(2,2)'      1157  3804  938  3806  3807  960
+CONVEX 1418    'GT_PK(2,2)'      1157  3806  960  3808  3809  1158
+CONVEX 1419    'GT_PK(2,2)'      922  3810  1155  3811  3812  896
+CONVEX 1420    'GT_PK(2,2)'      896  3812  1155  2424  3813  1153
+CONVEX 1421    'GT_PK(2,2)'      277  3814  304  3815  2832  291
+CONVEX 1422    'GT_PK(2,2)'      277  3816  261  3817  2198  249
+CONVEX 1423    'GT_PK(2,2)'      261  3816  277  2844  3815  291
+CONVEX 1424    'GT_PK(2,2)'      304  3814  277  2837  3818  293
+CONVEX 1425    'GT_PK(2,2)'      225  3819  197  3820  3821  211
+CONVEX 1426    'GT_PK(2,2)'      197  3819  225  3669  3822  209
+CONVEX 1427    'GT_PK(2,2)'      279  3823  269  3824  3825  295
+CONVEX 1428    'GT_PK(2,2)'      269  3826  281  3825  3827  295
+CONVEX 1429    'GT_PK(2,2)'      281  3826  269  2838  3828  253
+CONVEX 1430    'GT_PK(2,2)'      265  3829  279  3830  3831  293
+CONVEX 1431    'GT_PK(2,2)'      265  3832  277  3833  3817  249
+CONVEX 1432    'GT_PK(2,2)'      277  3832  265  3818  3830  293
+CONVEX 1433    'GT_PK(2,2)'      279  3834  307  3831  3835  293
+CONVEX 1434    'GT_PK(2,2)'      307  3836  321  3835  2836  293
+CONVEX 1435    'GT_PK(2,2)'      307  3834  279  3837  3824  295
+CONVEX 1436    'GT_PK(2,2)'      297  3838  281  3839  2839  267
+CONVEX 1437    'GT_PK(2,2)'      1303  3840  1305  3841  3842  311
+CONVEX 1438    'GT_PK(2,2)'      938  3805  1155  3843  3810  922
+CONVEX 1439    'GT_PK(2,2)'      309  3844  325  3845  3846  295
+CONVEX 1440    'GT_PK(2,2)'      281  3847  309  3827  3845  295
+CONVEX 1441    'GT_PK(2,2)'      288  3848  274  3849  2842  302
+CONVEX 1442    'GT_PK(2,2)'      274  3848  288  3850  3851  258
+CONVEX 1443    'GT_PK(2,2)'      364  3852  328  2087  3853  344
+CONVEX 1444    'GT_PK(2,2)'      328  3852  364  3854  2095  346
+CONVEX 1445    'GT_PK(2,2)'      314  3855  328  2847  3854  346
+CONVEX 1446    'GT_PK(2,2)'      300  3856  328  3857  3855  314
+CONVEX 1447    'GT_PK(2,2)'      348  3858  366  2854  3859  330
+CONVEX 1448    'GT_PK(2,2)'      380  3860  366  2088  3861  400
+CONVEX 1449    'GT_PK(2,2)'      330  3859  366  3862  3863  344
+CONVEX 1450    'GT_PK(2,2)'      366  3860  380  3863  2086  344
+CONVEX 1451    'GT_PK(2,2)'      382  3864  416  3865  2223  400
+CONVEX 1452    'GT_PK(2,2)'      366  3866  382  3861  3865  400
+CONVEX 1453    'GT_PK(2,2)'      382  3866  366  3867  3858  348
+CONVEX 1454    'GT_PK(2,2)'      382  3867  348  3868  2856  369
+CONVEX 1455    'GT_PK(2,2)'      382  3868  369  3869  2204  402
+CONVEX 1456    'GT_PK(2,2)'      416  3864  382  2210  3869  402
+CONVEX 1457    'GT_PK(2,2)'      373  3870  387  3871  2863  355
+CONVEX 1458    'GT_PK(2,2)'      395  3872  361  3206  3873  389
+CONVEX 1459    'GT_PK(2,2)'      361  3874  1307  3873  3218  389
+CONVEX 1460    'GT_PK(2,2)'      473  3875  513  2865  3876  495
+CONVEX 1461    'GT_PK(2,2)'      537  3877  513  2756  3878  553
+CONVEX 1462    'GT_PK(2,2)'      513  3877  537  3876  2752  495
+CONVEX 1463    'GT_PK(2,2)'      513  3879  533  3878  3636  553
+CONVEX 1464    'GT_PK(2,2)'      513  3880  491  3879  3614  533
+CONVEX 1465    'GT_PK(2,2)'      513  3875  473  3880  2868  491
+CONVEX 1466    'GT_PK(2,2)'      309  3881  327  3882  3883  341
+CONVEX 1467    'GT_PK(2,2)'      327  3881  309  3884  3885  297
+CONVEX 1468    'GT_PK(2,2)'      1180  3886  1178  3887  3888  45
+CONVEX 1469    'GT_PK(2,2)'      325  3844  309  3889  3882  341
+CONVEX 1470    'GT_PK(2,2)'      297  3885  309  3838  3847  281
+CONVEX 1471    'GT_PK(2,2)'      21  3890  29  2890  3891  15
+CONVEX 1472    'GT_PK(2,2)'      29  3890  21  3892  3893  40
+CONVEX 1473    'GT_PK(2,2)'      29  3894  20  3891  1779  15
+CONVEX 1474    'GT_PK(2,2)'      29  3895  39  3894  2268  20
+CONVEX 1475    'GT_PK(2,2)'      39  3895  29  2273  3896  49
+CONVEX 1476    'GT_PK(2,2)'      29  3892  40  3896  2259  49
+CONVEX 1477    'GT_PK(2,2)'      42  3897  25  3898  2262  36
+CONVEX 1478    'GT_PK(2,2)'      53  3899  42  3484  3900  65
+CONVEX 1479    'GT_PK(2,2)'      57  3901  42  2881  3898  36
+CONVEX 1480    'GT_PK(2,2)'      42  3901  57  3900  3477  65
+CONVEX 1481    'GT_PK(2,2)'      1165  3902  16  3903  3904  1166
+CONVEX 1482    'GT_PK(2,2)'      48  3905  38  2905  3906  27
+CONVEX 1483    'GT_PK(2,2)'      28  3907  38  3908  3909  50
+CONVEX 1484    'GT_PK(2,2)'      38  3910  60  3909  2563  50
+CONVEX 1485    'GT_PK(2,2)'      38  3905  48  3910  2909  60
+CONVEX 1486    'GT_PK(2,2)'      41  3911  28  3912  3908  50
+CONVEX 1487    'GT_PK(2,2)'      64  3913  41  3460  3912  50
+CONVEX 1488    'GT_PK(2,2)'      41  3913  64  3914  3915  54
+CONVEX 1489    'GT_PK(2,2)'      35  3916  56  3917  3918  45
+CONVEX 1490    'GT_PK(2,2)'      1178  3919  35  3888  3917  45
+CONVEX 1491    'GT_PK(2,2)'      1177  3920  35  3921  3919  1178
+CONVEX 1492    'GT_PK(2,2)'      56  3922  47  2930  3923  70
+CONVEX 1493    'GT_PK(2,2)'      35  3924  47  3916  3922  56
+CONVEX 1494    'GT_PK(2,2)'      327  3884  297  3925  3926  311
+CONVEX 1495    'GT_PK(2,2)'      327  3927  343  3928  3929  357
+CONVEX 1496    'GT_PK(2,2)'      339  3930  351  2945  3931  323
+CONVEX 1497    'GT_PK(2,2)'      351  3932  375  3933  3934  363
+CONVEX 1498    'GT_PK(2,2)'      351  3935  359  3932  2951  375
+CONVEX 1499    'GT_PK(2,2)'      351  3930  339  3935  2949  359
+CONVEX 1500    'GT_PK(2,2)'      1220  3936  467  3937  3938  1218
+CONVEX 1501    'GT_PK(2,2)'      467  3939  427  3938  2957  1218
+CONVEX 1502    'GT_PK(2,2)'      467  3936  1220  3940  1795  499
+CONVEX 1503    'GT_PK(2,2)'      485  3941  467  2956  3940  499
+CONVEX 1504    'GT_PK(2,2)'      467  3941  485  3942  3943  443
+CONVEX 1505    'GT_PK(2,2)'      427  3939  467  2963  3942  443
+CONVEX 1506    'GT_PK(2,2)'      867  3944  889  3945  2295  881
+CONVEX 1507    'GT_PK(2,2)'      853  2824  867  3087  3945  881
+CONVEX 1508    'GT_PK(2,2)'      867  1711  1244  3946  3947  1246
+CONVEX 1509    'GT_PK(2,2)'      889  3944  867  2300  3946  1246
+CONVEX 1510    'GT_PK(2,2)'      1005  3948  978  2980  3949  986
+CONVEX 1511    'GT_PK(2,2)'      910  3950  922  3951  3811  896
+CONVEX 1512    'GT_PK(2,2)'      922  3950  910  3952  3438  936
+CONVEX 1513    'GT_PK(2,2)'      960  3953  966  3954  3955  986
+CONVEX 1514    'GT_PK(2,2)'      960  3956  978  3809  3957  1158
+CONVEX 1515    'GT_PK(2,2)'      978  3956  960  3949  3954  986
+CONVEX 1516    'GT_PK(2,2)'      1015  3958  1027  3959  3802  996
+CONVEX 1517    'GT_PK(2,2)'      1044  3960  1015  3961  3962  1029
+CONVEX 1518    'GT_PK(2,2)'      1044  3963  1071  3964  3965  1054
+CONVEX 1519    'GT_PK(2,2)'      1027  3966  1044  3717  3964  1054
+CONVEX 1520    'GT_PK(2,2)'      1044  3966  1027  3960  3958  1015
+CONVEX 1521    'GT_PK(2,2)'      1001  3967  1018  3968  2308  1029
+CONVEX 1522    'GT_PK(2,2)'      1015  3969  1001  3962  3968  1029
+CONVEX 1523    'GT_PK(2,2)'      1021  3970  1037  2978  3971  1005
+CONVEX 1524    'GT_PK(2,2)'      1039  3972  1037  2975  3973  1062
+CONVEX 1525    'GT_PK(2,2)'      1093  3974  1082  2981  3975  1105
+CONVEX 1526    'GT_PK(2,2)'      1071  3976  1082  3965  3977  1054
+CONVEX 1527    'GT_PK(2,2)'      1105  3975  1082  2778  3978  1096
+CONVEX 1528    'GT_PK(2,2)'      1082  3976  1071  3978  2993  1096
+CONVEX 1529    'GT_PK(2,2)'      914  3979  926  3014  3980  900
+CONVEX 1530    'GT_PK(2,2)'      1268  3981  1089  2988  3982  1079
+CONVEX 1531    'GT_PK(2,2)'      1089  3983  1099  3984  2316  1073
+CONVEX 1532    'GT_PK(2,2)'      1099  3983  1089  2998  3985  1271
+CONVEX 1533    'GT_PK(2,2)'      1089  3981  1268  3985  3986  1271
+CONVEX 1534    'GT_PK(2,2)'      1065  3987  1089  3098  3984  1073
+CONVEX 1535    'GT_PK(2,2)'      1089  3987  1065  3982  1759  1079
+CONVEX 1536    'GT_PK(2,2)'      1047  3988  1057  2309  3989  1029
+CONVEX 1537    'GT_PK(2,2)'      1057  3990  1044  3989  3961  1029
+CONVEX 1538    'GT_PK(2,2)'      1044  3990  1057  3963  3991  1071
+CONVEX 1539    'GT_PK(2,2)'      1071  3991  1057  2992  3992  1083
+CONVEX 1540    'GT_PK(2,2)'      1057  3988  1047  3993  3097  1073
+CONVEX 1541    'GT_PK(2,2)'      1083  3992  1057  2317  3993  1073
+CONVEX 1542    'GT_PK(2,2)'      845  3994  831  3995  3996  858
+CONVEX 1543    'GT_PK(2,2)'      831  3997  847  3996  3007  858
+CONVEX 1544    'GT_PK(2,2)'      831  3998  815  3999  2448  799
+CONVEX 1545    'GT_PK(2,2)'      831  3994  845  3998  3003  815
+CONVEX 1546    'GT_PK(2,2)'      821  4000  833  3327  4001  803
+CONVEX 1547    'GT_PK(2,2)'      833  4000  821  4002  4003  849
+CONVEX 1548    'GT_PK(2,2)'      845  4004  872  3005  4005  857
+CONVEX 1549    'GT_PK(2,2)'      872  4006  883  4005  3015  857
+CONVEX 1550    'GT_PK(2,2)'      883  4006  872  4007  4008  900
+CONVEX 1551    'GT_PK(2,2)'      872  4004  845  4009  3995  858
+CONVEX 1552    'GT_PK(2,2)'      872  4010  886  4008  3013  900
+CONVEX 1553    'GT_PK(2,2)'      886  4010  872  3010  4009  858
+CONVEX 1554    'GT_PK(2,2)'      899  4011  884  3019  4012  870
+CONVEX 1555    'GT_PK(2,2)'      910  4013  884  3437  4011  899
+CONVEX 1556    'GT_PK(2,2)'      868  4014  884  2422  4015  896
+CONVEX 1557    'GT_PK(2,2)'      884  4013  910  4015  3951  896
+CONVEX 1558    'GT_PK(2,2)'      742  4016  1142  4017  4018  706
+CONVEX 1559    'GT_PK(2,2)'      704  4019  742  4020  4017  706
+CONVEX 1560    'GT_PK(2,2)'      1150  4021  1148  4022  3270  840
+CONVEX 1561    'GT_PK(2,2)'      1150  4023  868  4024  2423  1153
+CONVEX 1562    'GT_PK(2,2)'      868  4023  1150  4025  4022  840
+CONVEX 1563    'GT_PK(2,2)'      343  3927  327  4026  3925  311
+CONVEX 1564    'GT_PK(2,2)'      341  3883  327  4027  3928  357
+CONVEX 1565    'GT_PK(2,2)'      325  4028  337  4029  4030  307
+CONVEX 1566    'GT_PK(2,2)'      937  3434  965  3030  4031  953
+CONVEX 1567    'GT_PK(2,2)'      953  4031  965  1442  4032  983
+CONVEX 1568    'GT_PK(2,2)'      965  1793  997  4032  1733  983
+CONVEX 1569    'GT_PK(2,2)'      325  4029  307  3846  3837  295
+CONVEX 1570    'GT_PK(2,2)'      978  4033  1160  3957  4034  1158
+CONVEX 1571    'GT_PK(2,2)'      1160  4033  978  4035  4036  990
+CONVEX 1572    'GT_PK(2,2)'      990  4037  1011  4038  4039  1023
+CONVEX 1573    'GT_PK(2,2)'      1011  4040  1039  4039  2972  1023
+CONVEX 1574    'GT_PK(2,2)'      1011  4041  978  4042  3948  1005
+CONVEX 1575    'GT_PK(2,2)'      978  4041  1011  4036  4037  990
+CONVEX 1576    'GT_PK(2,2)'      1037  4043  1011  3971  4042  1005
+CONVEX 1577    'GT_PK(2,2)'      1011  4043  1037  4040  3972  1039
+CONVEX 1578    'GT_PK(2,2)'      998  4044  990  4045  4038  1023
+CONVEX 1579    'GT_PK(2,2)'      1024  4046  998  3039  4045  1023
+CONVEX 1580    'GT_PK(2,2)'      1012  4047  1024  4048  4049  1040
+CONVEX 1581    'GT_PK(2,2)'      1012  4048  1040  4050  2304  1038
+CONVEX 1582    'GT_PK(2,2)'      1006  4051  1012  4052  4050  1038
+CONVEX 1583    'GT_PK(2,2)'      1032  1455  1022  3041  4053  1049
+CONVEX 1584    'GT_PK(2,2)'      1049  4053  1022  1742  4054  1038
+CONVEX 1585    'GT_PK(2,2)'      1022  4055  1006  4054  4052  1038
+CONVEX 1586    'GT_PK(2,2)'      1006  4055  1022  4056  1458  987
+CONVEX 1587    'GT_PK(2,2)'      1014  1452  1032  4057  3042  1042
+CONVEX 1588    'GT_PK(2,2)'      997  1791  1014  1734  4058  1028
+CONVEX 1589    'GT_PK(2,2)'      1014  4057  1042  4058  2237  1028
+CONVEX 1590    'GT_PK(2,2)'      1145  4059  763  3045  4060  743
+CONVEX 1591    'GT_PK(2,2)'      763  4061  729  4060  3183  743
+CONVEX 1592    'GT_PK(2,2)'      763  4059  1145  4062  4063  1147
+CONVEX 1593    'GT_PK(2,2)'      791  4064  763  3052  4062  1147
+CONVEX 1594    'GT_PK(2,2)'      729  4061  763  4065  4066  757
+CONVEX 1595    'GT_PK(2,2)'      763  4064  791  4066  3229  757
+CONVEX 1596    'GT_PK(2,2)'      693  4067  649  4068  3189  671
+CONVEX 1597    'GT_PK(2,2)'      649  4067  693  3027  4069  673
+CONVEX 1598    'GT_PK(2,2)'      715  4070  697  4071  1602  673
+CONVEX 1599    'GT_PK(2,2)'      715  4072  733  4070  2013  697
+CONVEX 1600    'GT_PK(2,2)'      693  4073  715  4069  4071  673
+CONVEX 1601    'GT_PK(2,2)'      715  4073  693  4074  4075  737
+CONVEX 1602    'GT_PK(2,2)'      825  3201  795  4076  4077  809
+CONVEX 1603    'GT_PK(2,2)'      795  3212  791  4077  3050  809
+CONVEX 1604    'GT_PK(2,2)'      961  4078  939  4079  3055  1156
+CONVEX 1605    'GT_PK(2,2)'      1159  4080  961  4081  4079  1156
+CONVEX 1606    'GT_PK(2,2)'      1149  4082  809  4083  3051  1147
+CONVEX 1607    'GT_PK(2,2)'      841  4084  825  4085  4076  809
+CONVEX 1608    'GT_PK(2,2)'      1149  4086  841  4082  4085  809
+CONVEX 1609    'GT_PK(2,2)'      841  4086  1149  4087  4088  1151
+CONVEX 1610    'GT_PK(2,2)'      825  4084  841  2323  4089  855
+CONVEX 1611    'GT_PK(2,2)'      869  4090  1151  4091  4092  1152
+CONVEX 1612    'GT_PK(2,2)'      869  4093  885  4094  3062  855
+CONVEX 1613    'GT_PK(2,2)'      841  4095  869  4089  4094  855
+CONVEX 1614    'GT_PK(2,2)'      869  4095  841  4090  4087  1151
+CONVEX 1615    'GT_PK(2,2)'      935  4096  921  4097  3080  905
+CONVEX 1616    'GT_PK(2,2)'      919  4098  935  4099  4097  905
+CONVEX 1617    'GT_PK(2,2)'      945  4100  935  4101  4102  957
+CONVEX 1618    'GT_PK(2,2)'      935  4100  945  4096  4103  921
+CONVEX 1619    'GT_PK(2,2)'      935  4104  949  4102  3075  957
+CONVEX 1620    'GT_PK(2,2)'      935  4098  919  4104  3083  949
+CONVEX 1621    'GT_PK(2,2)'      895  4105  881  4106  2296  909
+CONVEX 1622    'GT_PK(2,2)'      919  4107  895  3084  4106  909
+CONVEX 1623    'GT_PK(2,2)'      895  4108  865  4105  3086  881
+CONVEX 1624    'GT_PK(2,2)'      895  4107  919  4109  4099  905
+CONVEX 1625    'GT_PK(2,2)'      865  4110  879  4111  4112  851
+CONVEX 1626    'GT_PK(2,2)'      879  4113  863  4112  4114  851
+CONVEX 1627    'GT_PK(2,2)'      879  4115  895  4116  4109  905
+CONVEX 1628    'GT_PK(2,2)'      895  4115  879  4108  4110  865
+CONVEX 1629    'GT_PK(2,2)'      879  4116  905  4117  3081  893
+CONVEX 1630    'GT_PK(2,2)'      863  4113  879  4118  4117  893
+CONVEX 1631    'GT_PK(2,2)'      865  4119  837  3085  4120  853
+CONVEX 1632    'GT_PK(2,2)'      837  4121  823  4122  4123  805
+CONVEX 1633    'GT_PK(2,2)'      837  4119  865  4124  4111  851
+CONVEX 1634    'GT_PK(2,2)'      823  4121  837  4125  4124  851
+CONVEX 1635    'GT_PK(2,2)'      1267  4126  1066  4127  4128  1265
+CONVEX 1636    'GT_PK(2,2)'      1066  4126  1267  1757  2987  1079
+CONVEX 1637    'GT_PK(2,2)'      974  4129  988  3089  4130  958
+CONVEX 1638    'GT_PK(2,2)'      988  4131  970  4130  4132  958
+CONVEX 1639    'GT_PK(2,2)'      1019  4133  988  3104  4134  1007
+CONVEX 1640    'GT_PK(2,2)'      988  4129  974  4134  3094  1007
+CONVEX 1641    'GT_PK(2,2)'      977  1414  994  4135  3093  962
+CONVEX 1642    'GT_PK(2,2)'      977  4136  945  3064  4101  957
+CONVEX 1643    'GT_PK(2,2)'      945  4136  977  4137  4135  962
+CONVEX 1644    'GT_PK(2,2)'      325  3889  341  4138  4139  355
+CONVEX 1645    'GT_PK(2,2)'      337  4028  325  4140  4138  355
+CONVEX 1646    'GT_PK(2,2)'      239  4141  227  4142  4143  253
+CONVEX 1647    'GT_PK(2,2)'      669  4144  651  3001  2416  629
+CONVEX 1648    'GT_PK(2,2)'      739  2942  755  3339  4145  771
+CONVEX 1649    'GT_PK(2,2)'      438  4146  394  2357  4147  414
+CONVEX 1650    'GT_PK(2,2)'      394  4148  376  4147  3108  414
+CONVEX 1651    'GT_PK(2,2)'      422  4149  394  4150  4146  438
+CONVEX 1652    'GT_PK(2,2)'      690  4151  663  3222  4152  670
+CONVEX 1653    'GT_PK(2,2)'      663  4153  632  4152  3277  670
+CONVEX 1654    'GT_PK(2,2)'      591  4154  580  3123  4155  561
+CONVEX 1655    'GT_PK(2,2)'      580  4156  541  4155  3135  561
+CONVEX 1656    'GT_PK(2,2)'      580  4154  591  4157  3124  610
+CONVEX 1657    'GT_PK(2,2)'      541  4156  580  3141  4158  556
+CONVEX 1658    'GT_PK(2,2)'      580  4157  610  4159  3128  594
+CONVEX 1659    'GT_PK(2,2)'      556  4158  580  2617  4159  594
+CONVEX 1660    'GT_PK(2,2)'      478  4160  436  3155  4161  454
+CONVEX 1661    'GT_PK(2,2)'      436  4162  414  4163  3109  398
+CONVEX 1662    'GT_PK(2,2)'      414  4162  436  2359  4164  458
+CONVEX 1663    'GT_PK(2,2)'      436  4160  478  4164  3151  458
+CONVEX 1664    'GT_PK(2,2)'      418  4165  434  4166  3156  454
+CONVEX 1665    'GT_PK(2,2)'      436  4167  418  4161  4166  454
+CONVEX 1666    'GT_PK(2,2)'      404  4168  418  2517  4169  386
+CONVEX 1667    'GT_PK(2,2)'      434  4165  418  4170  4168  404
+CONVEX 1668    'GT_PK(2,2)'      418  4171  398  4169  2343  386
+CONVEX 1669    'GT_PK(2,2)'      418  4167  436  4171  4163  398
+CONVEX 1670    'GT_PK(2,2)'      550  4172  510  3161  4173  532
+CONVEX 1671    'GT_PK(2,2)'      510  4174  492  4175  4176  470
+CONVEX 1672    'GT_PK(2,2)'      510  4172  550  4177  3159  534
+CONVEX 1673    'GT_PK(2,2)'      492  4174  510  3240  4177  534
+CONVEX 1674    'GT_PK(2,2)'      444  4178  1310  4179  4180  408
+CONVEX 1675    'GT_PK(2,2)'      1310  4178  444  4181  3164  1312
+CONVEX 1676    'GT_PK(2,2)'      1310  4182  1308  4180  4183  408
+CONVEX 1677    'GT_PK(2,2)'      269  4184  239  3828  4142  253
+CONVEX 1678    'GT_PK(2,2)'      239  4185  251  4186  4187  225
+CONVEX 1679    'GT_PK(2,2)'      422  4188  446  4189  4190  408
+CONVEX 1680    'GT_PK(2,2)'      446  4191  444  4190  4179  408
+CONVEX 1681    'GT_PK(2,2)'      444  4191  446  4192  4193  468
+CONVEX 1682    'GT_PK(2,2)'      376  4194  360  3113  4195  356
+CONVEX 1683    'GT_PK(2,2)'      360  4196  342  4195  3174  356
+CONVEX 1684    'GT_PK(2,2)'      394  4197  360  4148  4194  376
+CONVEX 1685    'GT_PK(2,2)'      665  4198  625  4199  4200  645
+CONVEX 1686    'GT_PK(2,2)'      689  4201  665  4202  4199  645
+CONVEX 1687    'GT_PK(2,2)'      665  4203  707  4204  3178  683
+CONVEX 1688    'GT_PK(2,2)'      665  4201  689  4203  3184  707
+CONVEX 1689    'GT_PK(2,2)'      662  4205  643  2370  4206  683
+CONVEX 1690    'GT_PK(2,2)'      643  4207  665  4206  4204  683
+CONVEX 1691    'GT_PK(2,2)'      665  4207  643  4198  2382  625
+CONVEX 1692    'GT_PK(2,2)'      12  4208  689  4209  4202  645
+CONVEX 1693    'GT_PK(2,2)'      11  4210  12  4211  4209  645
+CONVEX 1694    'GT_PK(2,2)'      239  4186  225  4212  3820  211
+CONVEX 1695    'GT_PK(2,2)'      1142  4213  1140  4018  4214  706
+CONVEX 1696    'GT_PK(2,2)'      595  4215  611  4216  2817  581
+CONVEX 1697    'GT_PK(2,2)'      595  4217  633  4215  3190  611
+CONVEX 1698    'GT_PK(2,2)'      595  4216  581  4218  1423  557
+CONVEX 1699    'GT_PK(2,2)'      583  4219  595  2266  4218  557
+CONVEX 1700    'GT_PK(2,2)'      605  4220  585  4221  4222  547
+CONVEX 1701    'GT_PK(2,2)'      585  4220  605  2378  4223  625
+CONVEX 1702    'GT_PK(2,2)'      625  4223  605  4200  4224  645
+CONVEX 1703    'GT_PK(2,2)'      605  4225  11  4224  4211  645
+CONVEX 1704    'GT_PK(2,2)'      227  4141  239  4226  4212  211
+CONVEX 1705    'GT_PK(2,2)'      251  4185  239  4227  4184  269
+CONVEX 1706    'GT_PK(2,2)'      463  4228  7  4229  4230  8
+CONVEX 1707    'GT_PK(2,2)'      7  4228  463  4231  4232  1313
+CONVEX 1708    'GT_PK(2,2)'      713  4233  728  3220  4234  690
+CONVEX 1709    'GT_PK(2,2)'      742  4235  728  4236  4237  762
+CONVEX 1710    'GT_PK(2,2)'      728  4238  704  4234  4239  690
+CONVEX 1711    'GT_PK(2,2)'      728  4235  742  4238  4019  704
+CONVEX 1712    'GT_PK(2,2)'      526  4240  508  2624  4241  548
+CONVEX 1713    'GT_PK(2,2)'      508  4242  530  4241  2394  548
+CONVEX 1714    'GT_PK(2,2)'      508  4243  468  4244  4245  488
+CONVEX 1715    'GT_PK(2,2)'      530  4242  508  3132  4244  488
+CONVEX 1716    'GT_PK(2,2)'      486  4246  526  4247  3227  506
+CONVEX 1717    'GT_PK(2,2)'      486  4247  506  4248  3195  462
+CONVEX 1718    'GT_PK(2,2)'      508  4249  486  4243  4250  468
+CONVEX 1719    'GT_PK(2,2)'      486  4249  508  4246  4240  526
+CONVEX 1720    'GT_PK(2,2)'      444  4251  486  3165  4248  462
+CONVEX 1721    'GT_PK(2,2)'      486  4251  444  4250  4192  468
+CONVEX 1722    'GT_PK(2,2)'      507  4252  9  4253  4254  547
+CONVEX 1723    'GT_PK(2,2)'      9  4252  507  4255  4256  8
+CONVEX 1724    'GT_PK(2,2)'      507  4257  463  4256  4229  8
+CONVEX 1725    'GT_PK(2,2)'      463  4257  507  4258  4259  487
+CONVEX 1726    'GT_PK(2,2)'      9  4260  10  4254  4261  547
+CONVEX 1727    'GT_PK(2,2)'      10  4262  605  4261  4221  547
+CONVEX 1728    'GT_PK(2,2)'      605  4262  10  4225  4263  11
+CONVEX 1729    'GT_PK(2,2)'      199  1943  215  4264  4265  227
+CONVEX 1730    'GT_PK(2,2)'      546  4266  2  3228  4267  506
+CONVEX 1731    'GT_PK(2,2)'      2  4268  1  4267  3194  506
+CONVEX 1732    'GT_PK(2,2)'      199  4269  183  1862  4270  169
+CONVEX 1733    'GT_PK(2,2)'      183  4269  199  4271  4272  211
+CONVEX 1734    'GT_PK(2,2)'      569  4273  588  3234  4274  562
+CONVEX 1735    'GT_PK(2,2)'      588  4275  576  4274  3254  562
+CONVEX 1736    'GT_PK(2,2)'      608  4276  588  2417  4277  629
+CONVEX 1737    'GT_PK(2,2)'      576  4275  588  3258  4276  608
+CONVEX 1738    'GT_PK(2,2)'      434  4278  452  3157  4279  474
+CONVEX 1739    'GT_PK(2,2)'      452  4280  492  4279  3239  474
+CONVEX 1740    'GT_PK(2,2)'      492  4280  452  4176  4281  470
+CONVEX 1741    'GT_PK(2,2)'      452  4282  432  4281  4283  470
+CONVEX 1742    'GT_PK(2,2)'      510  4284  490  4173  4285  532
+CONVEX 1743    'GT_PK(2,2)'      490  4284  510  4286  4175  470
+CONVEX 1744    'GT_PK(2,2)'      512  4287  472  4288  4289  494
+CONVEX 1745    'GT_PK(2,2)'      536  4290  512  3250  4288  494
+CONVEX 1746    'GT_PK(2,2)'      512  4290  536  4291  3233  552
+CONVEX 1747    'GT_PK(2,2)'      512  4291  552  4292  2411  532
+CONVEX 1748    'GT_PK(2,2)'      490  4293  512  4285  4292  532
+CONVEX 1749    'GT_PK(2,2)'      512  4293  490  4287  4294  472
+CONVEX 1750    'GT_PK(2,2)'      401  4295  381  2170  2478  413
+CONVEX 1751    'GT_PK(2,2)'      381  4295  401  2505  4296  367
+CONVEX 1752    'GT_PK(2,2)'      349  4297  368  1892  4298  335
+CONVEX 1753    'GT_PK(2,2)'      335  4298  368  1499  4299  352
+CONVEX 1754    'GT_PK(2,2)'      368  4300  384  4299  2515  352
+CONVEX 1755    'GT_PK(2,2)'      429  4301  451  3242  2167  413
+CONVEX 1756    'GT_PK(2,2)'      472  2166  451  4289  4302  494
+CONVEX 1757    'GT_PK(2,2)'      411  4303  397  4304  2475  379
+CONVEX 1758    'GT_PK(2,2)'      411  4305  429  4303  3241  397
+CONVEX 1759    'GT_PK(2,2)'      429  4305  411  4306  4307  457
+CONVEX 1760    'GT_PK(2,2)'      411  4308  441  4307  3252  457
+CONVEX 1761    'GT_PK(2,2)'      516  4309  501  3247  4310  542
+CONVEX 1762    'GT_PK(2,2)'      483  4311  501  3253  4312  457
+CONVEX 1763    'GT_PK(2,2)'      501  4313  523  4310  2405  542
+CONVEX 1764    'GT_PK(2,2)'      501  4311  483  4313  3243  523
+CONVEX 1765    'GT_PK(2,2)'      477  4314  429  4315  4306  457
+CONVEX 1766    'GT_PK(2,2)'      501  4316  477  4312  4315  457
+CONVEX 1767    'GT_PK(2,2)'      477  4316  501  4317  4309  516
+CONVEX 1768    'GT_PK(2,2)'      477  4317  516  4318  3249  494
+CONVEX 1769    'GT_PK(2,2)'      451  4319  477  4302  4318  494
+CONVEX 1770    'GT_PK(2,2)'      477  4319  451  4314  4301  429
+CONVEX 1771    'GT_PK(2,2)'      425  4320  407  4321  2962  443
+CONVEX 1772    'GT_PK(2,2)'      407  4320  425  2952  4322  375
+CONVEX 1773    'GT_PK(2,2)'      756  4323  713  4324  3225  736
+CONVEX 1774    'GT_PK(2,2)'      774  4325  756  3262  4324  736
+CONVEX 1775    'GT_PK(2,2)'      756  4326  728  4323  4233  713
+CONVEX 1776    'GT_PK(2,2)'      756  4325  774  4327  4328  790
+CONVEX 1777    'GT_PK(2,2)'      756  4327  790  4329  2426  762
+CONVEX 1778    'GT_PK(2,2)'      728  4326  756  4237  4329  762
+CONVEX 1779    'GT_PK(2,2)'      810  4330  842  4331  4332  824
+CONVEX 1780    'GT_PK(2,2)'      842  4330  810  4333  3264  826
+CONVEX 1781    'GT_PK(2,2)'      857  4334  842  3006  4333  826
+CONVEX 1782    'GT_PK(2,2)'      842  4334  857  4335  3016  870
+CONVEX 1783    'GT_PK(2,2)'      808  4336  794  3266  4337  824
+CONVEX 1784    'GT_PK(2,2)'      794  4338  774  4339  3260  778
+CONVEX 1785    'GT_PK(2,2)'      774  4338  794  4328  4340  790
+CONVEX 1786    'GT_PK(2,2)'      794  4336  808  4340  3273  790
+CONVEX 1787    'GT_PK(2,2)'      810  4341  794  3265  4339  778
+CONVEX 1788    'GT_PK(2,2)'      794  4341  810  4337  4331  824
+CONVEX 1789    'GT_PK(2,2)'      640  4342  680  4343  3286  658
+CONVEX 1790    'GT_PK(2,2)'      640  4343  658  4344  2433  616
+CONVEX 1791    'GT_PK(2,2)'      600  4345  640  2356  4344  616
+CONVEX 1792    'GT_PK(2,2)'      680  4342  640  3292  4346  660
+CONVEX 1793    'GT_PK(2,2)'      618  4347  640  3302  4345  600
+CONVEX 1794    'GT_PK(2,2)'      640  4347  618  4346  3305  660
+CONVEX 1795    'GT_PK(2,2)'      767  4348  781  4349  2454  746
+CONVEX 1796    'GT_PK(2,2)'      731  4350  767  3315  4349  746
+CONVEX 1797    'GT_PK(2,2)'      781  4348  767  2449  4351  799
+CONVEX 1798    'GT_PK(2,2)'      767  4350  731  4352  3307  749
+CONVEX 1799    'GT_PK(2,2)'      767  4353  783  4351  4354  799
+CONVEX 1800    'GT_PK(2,2)'      783  4353  767  2435  4352  749
+CONVEX 1801    'GT_PK(2,2)'      676  4355  636  4356  2432  658
+CONVEX 1802    'GT_PK(2,2)'      698  4357  676  3287  4356  658
+CONVEX 1803    'GT_PK(2,2)'      716  4358  676  3316  4357  698
+CONVEX 1804    'GT_PK(2,2)'      676  4358  716  4359  3311  696
+CONVEX 1805    'GT_PK(2,2)'      612  4360  596  4361  4362  636
+CONVEX 1806    'GT_PK(2,2)'      574  4363  596  2353  4364  554
+CONVEX 1807    'GT_PK(2,2)'      596  4365  578  4364  3146  554
+CONVEX 1808    'GT_PK(2,2)'      596  4360  612  4365  3319  578
+CONVEX 1809    'GT_PK(2,2)'      596  4363  574  4366  2355  616
+CONVEX 1810    'GT_PK(2,2)'      636  4362  596  2434  4366  616
+CONVEX 1811    'GT_PK(2,2)'      654  4367  672  4368  3281  630
+CONVEX 1812    'GT_PK(2,2)'      612  4369  654  3318  4368  630
+CONVEX 1813    'GT_PK(2,2)'      672  4367  654  3347  4370  696
+CONVEX 1814    'GT_PK(2,2)'      654  4369  612  4371  4361  636
+CONVEX 1815    'GT_PK(2,2)'      654  4372  676  4370  4359  696
+CONVEX 1816    'GT_PK(2,2)'      676  4372  654  4355  4371  636
+CONVEX 1817    'GT_PK(2,2)'      890  4373  877  3320  4374  907
+CONVEX 1818    'GT_PK(2,2)'      907  4374  877  3079  4375  893
+CONVEX 1819    'GT_PK(2,2)'      877  4376  863  4375  4118  893
+CONVEX 1820    'GT_PK(2,2)'      863  4376  877  4377  4378  849
+CONVEX 1821    'GT_PK(2,2)'      835  4379  863  4380  4377  849
+CONVEX 1822    'GT_PK(2,2)'      835  4381  821  4382  3326  807
+CONVEX 1823    'GT_PK(2,2)'      821  4381  835  4003  4380  849
+CONVEX 1824    'GT_PK(2,2)'      823  4383  835  4384  4382  807
+CONVEX 1825    'GT_PK(2,2)'      835  4383  823  4385  4125  851
+CONVEX 1826    'GT_PK(2,2)'      863  4379  835  4114  4385  851
+CONVEX 1827    'GT_PK(2,2)'      701  4386  656  2984  3330  675
+CONVEX 1828    'GT_PK(2,2)'      656  4386  701  3332  4387  678
+CONVEX 1829    'GT_PK(2,2)'      701  4388  721  4387  3297  678
+CONVEX 1830    'GT_PK(2,2)'      721  4388  701  3340  2940  739
+CONVEX 1831    'GT_PK(2,2)'      131  4389  163  3354  4390  147
+CONVEX 1832    'GT_PK(2,2)'      163  4391  180  4390  4392  147
+CONVEX 1833    'GT_PK(2,2)'      180  4391  163  3351  4393  192
+CONVEX 1834    'GT_PK(2,2)'      192  4393  163  2499  4394  176
+CONVEX 1835    'GT_PK(2,2)'      163  4395  143  4394  1881  176
+CONVEX 1836    'GT_PK(2,2)'      163  4389  131  4395  3352  143
+CONVEX 1837    'GT_PK(2,2)'      149  4396  168  2463  4397  135
+CONVEX 1838    'GT_PK(2,2)'      182  4398  168  4399  4396  149
+CONVEX 1839    'GT_PK(2,2)'      168  4400  154  4397  3468  135
+CONVEX 1840    'GT_PK(2,2)'      168  4398  182  4401  3392  198
+CONVEX 1841    'GT_PK(2,2)'      133  4402  166  3358  4403  149
+CONVEX 1842    'GT_PK(2,2)'      182  4404  166  3389  4405  196
+CONVEX 1843    'GT_PK(2,2)'      166  4404  182  4403  4399  149
+CONVEX 1844    'GT_PK(2,2)'      166  4406  180  4405  3349  196
+CONVEX 1845    'GT_PK(2,2)'      180  4406  166  4392  4407  147
+CONVEX 1846    'GT_PK(2,2)'      166  4402  133  4407  3362  147
+CONVEX 1847    'GT_PK(2,2)'      299  4408  285  4409  3379  323
+CONVEX 1848    'GT_PK(2,2)'      285  4408  299  4410  4411  271
+CONVEX 1849    'GT_PK(2,2)'      224  4412  210  4413  3388  196
+CONVEX 1850    'GT_PK(2,2)'      224  4414  236  4415  3394  250
+CONVEX 1851    'GT_PK(2,2)'      208  4416  224  3350  4413  196
+CONVEX 1852    'GT_PK(2,2)'      236  4414  224  2487  4416  208
+CONVEX 1853    'GT_PK(2,2)'      1205  4417  243  4418  3402  1203
+CONVEX 1854    'GT_PK(2,2)'      199  4264  227  4272  4226  211
+CONVEX 1855    'GT_PK(2,2)'      227  4265  215  4419  4420  241
+CONVEX 1856    'GT_PK(2,2)'      241  4420  215  3785  1952  229
+CONVEX 1857    'GT_PK(2,2)'      185  4421  191  1946  4422  213
+CONVEX 1858    'GT_PK(2,2)'      247  4423  233  3409  4424  257
+CONVEX 1859    'GT_PK(2,2)'      233  4423  247  4425  3405  217
+CONVEX 1860    'GT_PK(2,2)'      243  4426  233  3404  4427  221
+CONVEX 1861    'GT_PK(2,2)'      233  4426  243  4424  3399  257
+CONVEX 1862    'GT_PK(2,2)'      257  4428  287  3410  4429  273
+CONVEX 1863    'GT_PK(2,2)'      287  4428  257  4430  3400  271
+CONVEX 1864    'GT_PK(2,2)'      287  4431  301  4429  2535  273
+CONVEX 1865    'GT_PK(2,2)'      287  4432  315  4431  3418  301
+CONVEX 1866    'GT_PK(2,2)'      299  4433  287  4411  4430  271
+CONVEX 1867    'GT_PK(2,2)'      287  4433  299  4432  4434  315
+CONVEX 1868    'GT_PK(2,2)'      333  4435  351  4436  3933  363
+CONVEX 1869    'GT_PK(2,2)'      351  4435  333  3931  4437  323
+CONVEX 1870    'GT_PK(2,2)'      347  4438  333  2288  4436  363
+CONVEX 1871    'GT_PK(2,2)'      315  4439  333  3417  4438  347
+CONVEX 1872    'GT_PK(2,2)'      333  4440  299  4437  4409  323
+CONVEX 1873    'GT_PK(2,2)'      299  4440  333  4434  4439  315
+CONVEX 1874    'GT_PK(2,2)'      203  4441  1201  4442  3432  221
+CONVEX 1875    'GT_PK(2,2)'      1201  4441  203  4443  4444  1199
+CONVEX 1876    'GT_PK(2,2)'      195  4445  203  3421  4446  217
+CONVEX 1877    'GT_PK(2,2)'      233  4447  203  4427  4442  221
+CONVEX 1878    'GT_PK(2,2)'      203  4447  233  4446  4425  217
+CONVEX 1879    'GT_PK(2,2)'      179  4448  1197  4449  4450  1199
+CONVEX 1880    'GT_PK(2,2)'      203  4451  179  4444  4449  1199
+CONVEX 1881    'GT_PK(2,2)'      179  4451  203  4452  4445  195
+CONVEX 1882    'GT_PK(2,2)'      179  4452  195  4453  3424  159
+CONVEX 1883    'GT_PK(2,2)'      1197  4448  179  3425  4453  159
+CONVEX 1884    'GT_PK(2,2)'      252  4454  268  3386  4455  280
+CONVEX 1885    'GT_PK(2,2)'      268  4456  294  4455  3452  280
+CONVEX 1886    'GT_PK(2,2)'      278  4457  268  3449  4458  250
+CONVEX 1887    'GT_PK(2,2)'      294  4456  268  3454  4457  278
+CONVEX 1888    'GT_PK(2,2)'      26  4459  1171  4460  2280  18
+CONVEX 1889    'GT_PK(2,2)'      24  4461  26  4462  4463  37
+CONVEX 1890    'GT_PK(2,2)'      26  4464  43  4463  4465  37
+CONVEX 1891    'GT_PK(2,2)'      1173  4466  26  2935  4461  24
+CONVEX 1892    'GT_PK(2,2)'      26  4466  1173  4459  4467  1171
+CONVEX 1893    'GT_PK(2,2)'      103  4468  130  4469  3769  120
+CONVEX 1894    'GT_PK(2,2)'      93  4470  103  3462  4469  120
+CONVEX 1895    'GT_PK(2,2)'      103  4471  89  4472  1915  114
+CONVEX 1896    'GT_PK(2,2)'      130  4468  103  2279  4472  114
+CONVEX 1897    'GT_PK(2,2)'      43  4473  58  4465  4474  37
+CONVEX 1898    'GT_PK(2,2)'      58  4475  47  4474  4476  37
+CONVEX 1899    'GT_PK(2,2)'      47  4475  58  3923  4477  70
+CONVEX 1900    'GT_PK(2,2)'      154  4478  186  3464  4479  170
+CONVEX 1901    'GT_PK(2,2)'      186  4480  198  4481  2484  214
+CONVEX 1902    'GT_PK(2,2)'      186  4482  168  4480  4401  198
+CONVEX 1903    'GT_PK(2,2)'      168  4482  186  4400  4478  154
+CONVEX 1904    'GT_PK(2,2)'      201  4483  186  2566  4481  214
+CONVEX 1905    'GT_PK(2,2)'      170  4479  186  3473  4483  201
+CONVEX 1906    'GT_PK(2,2)'      190  4484  1294  4485  3488  172
+CONVEX 1907    'GT_PK(2,2)'      1294  4484  190  4486  4487  1296
+CONVEX 1908    'GT_PK(2,2)'      1296  4487  190  2572  4488  212
+CONVEX 1909    'GT_PK(2,2)'      190  4489  184  4488  3471  212
+CONVEX 1910    'GT_PK(2,2)'      170  4490  151  3466  4491  137
+CONVEX 1911    'GT_PK(2,2)'      184  4492  151  3472  4490  170
+CONVEX 1912    'GT_PK(2,2)'      82  4493  109  3479  4494  92
+CONVEX 1913    'GT_PK(2,2)'      109  4495  123  4496  3469  137
+CONVEX 1914    'GT_PK(2,2)'      123  4495  109  2583  4497  96
+CONVEX 1915    'GT_PK(2,2)'      109  4493  82  4497  3474  96
+CONVEX 1916    'GT_PK(2,2)'      88  4498  74  4499  1528  63
+CONVEX 1917    'GT_PK(2,2)'      76  2160  88  3483  4499  63
+CONVEX 1918    'GT_PK(2,2)'      128  4500  153  3497  4501  161
+CONVEX 1919    'GT_PK(2,2)'      161  4501  153  3791  4502  1291
+CONVEX 1920    'GT_PK(2,2)'      153  4503  160  4502  3489  1291
+CONVEX 1921    'GT_PK(2,2)'      153  4504  127  4503  1364  160
+CONVEX 1922    'GT_PK(2,2)'      153  4500  128  4504  3499  127
+CONVEX 1923    'GT_PK(2,2)'      628  4505  646  3506  4506  606
+CONVEX 1924    'GT_PK(2,2)'      646  4507  686  4508  3511  666
+CONVEX 1925    'GT_PK(2,2)'      646  4505  628  4509  3505  668
+CONVEX 1926    'GT_PK(2,2)'      686  4507  646  3515  4509  668
+CONVEX 1927    'GT_PK(2,2)'      626  4510  646  3539  4508  666
+CONVEX 1928    'GT_PK(2,2)'      646  4510  626  4506  3541  606
+CONVEX 1929    'GT_PK(2,2)'      944  4511  976  4512  3559  956
+CONVEX 1930    'GT_PK(2,2)'      933  4513  944  1964  4514  920
+CONVEX 1931    'GT_PK(2,2)'      920  4514  944  1543  4515  934
+CONVEX 1932    'GT_PK(2,2)'      944  4512  956  4515  2634  934
+CONVEX 1933    'GT_PK(2,2)'      894  4516  864  3574  4517  878
+CONVEX 1934    'GT_PK(2,2)'      864  4518  850  4517  2058  878
+CONVEX 1935    'GT_PK(2,2)'      880  4519  908  4520  2645  888
+CONVEX 1936    'GT_PK(2,2)'      880  4521  894  4519  3571  908
+CONVEX 1937    'GT_PK(2,2)'      880  4522  866  4523  3569  852
+CONVEX 1938    'GT_PK(2,2)'      866  4522  880  3564  4520  888
+CONVEX 1939    'GT_PK(2,2)'      864  4524  880  4525  4523  852
+CONVEX 1940    'GT_PK(2,2)'      880  4524  864  4521  4516  894
+CONVEX 1941    'GT_PK(2,2)'      758  4526  776  4527  3576  726
+CONVEX 1942    'GT_PK(2,2)'      776  4526  758  3577  4528  788
+CONVEX 1943    'GT_PK(2,2)'      710  4529  758  3514  4527  726
+CONVEX 1944    'GT_PK(2,2)'      758  4529  710  4530  2675  740
+CONVEX 1945    'GT_PK(2,2)'      772  4531  758  2664  4530  740
+CONVEX 1946    'GT_PK(2,2)'      758  4531  772  4528  2697  788
+CONVEX 1947    'GT_PK(2,2)'      989  4532  975  4533  3595  959
+CONVEX 1948    'GT_PK(2,2)'      1020  4534  989  2000  4535  1004
+CONVEX 1949    'GT_PK(2,2)'      1008  4536  989  3602  4534  1020
+CONVEX 1950    'GT_PK(2,2)'      975  4532  989  3593  4536  1008
+CONVEX 1951    'GT_PK(2,2)'      989  4537  971  4535  1991  1004
+CONVEX 1952    'GT_PK(2,2)'      989  4533  959  4537  2699  971
+CONVEX 1953    'GT_PK(2,2)'      515  4538  475  4539  3760  497
+CONVEX 1954    'GT_PK(2,2)'      555  4540  515  2181  4541  539
+CONVEX 1955    'GT_PK(2,2)'      515  4539  497  4541  2078  539
+CONVEX 1956    'GT_PK(2,2)'      535  4542  515  2003  4540  555
+CONVEX 1957    'GT_PK(2,2)'      493  4543  515  3621  4542  535
+CONVEX 1958    'GT_PK(2,2)'      475  4538  515  3610  4543  493
+CONVEX 1959    'GT_PK(2,2)'      599  4544  619  2683  4545  639
+CONVEX 1960    'GT_PK(2,2)'      571  4546  619  3638  4544  599
+CONVEX 1961    'GT_PK(2,2)'      639  4545  619  2030  4547  661
+CONVEX 1962    'GT_PK(2,2)'      661  4547  619  1631  4548  641
+CONVEX 1963    'GT_PK(2,2)'      641  4548  619  1393  4549  601
+CONVEX 1964    'GT_PK(2,2)'      619  4546  571  4549  3640  601
+CONVEX 1965    'GT_PK(2,2)'      927  4550  955  4551  1995  942
+CONVEX 1966    'GT_PK(2,2)'      915  4552  927  3642  4551  942
+CONVEX 1967    'GT_PK(2,2)'      927  4552  915  4553  4554  901
+CONVEX 1968    'GT_PK(2,2)'      955  4550  927  1967  4555  941
+CONVEX 1969    'GT_PK(2,2)'      927  4556  913  4555  3647  941
+CONVEX 1970    'GT_PK(2,2)'      913  4556  927  3644  4553  901
+CONVEX 1971    'GT_PK(2,2)'      887  4557  903  4558  3663  875
+CONVEX 1972    'GT_PK(2,2)'      887  4559  915  4557  3643  903
+CONVEX 1973    'GT_PK(2,2)'      887  4558  875  4560  1634  859
+CONVEX 1974    'GT_PK(2,2)'      915  4559  887  4554  4561  901
+CONVEX 1975    'GT_PK(2,2)'      873  4562  887  2052  4560  859
+CONVEX 1976    'GT_PK(2,2)'      901  4561  887  2694  4562  873
+CONVEX 1977    'GT_PK(2,2)'      223  2140  193  4563  3666  209
+CONVEX 1978    'GT_PK(2,2)'      235  2143  223  2199  4564  249
+CONVEX 1979    'GT_PK(2,2)'      136  4565  124  4566  2920  155
+CONVEX 1980    'GT_PK(2,2)'      124  4565  136  2928  4567  108
+CONVEX 1981    'GT_PK(2,2)'      108  4567  136  3675  4568  122
+CONVEX 1982    'GT_PK(2,2)'      136  4569  150  4568  4570  122
+CONVEX 1983    'GT_PK(2,2)'      169  4571  136  1864  4566  155
+CONVEX 1984    'GT_PK(2,2)'      136  4571  169  4569  4572  150
+CONVEX 1985    'GT_PK(2,2)'      150  4573  183  4574  4575  167
+CONVEX 1986    'GT_PK(2,2)'      183  4576  197  4575  3671  167
+CONVEX 1987    'GT_PK(2,2)'      197  4576  183  3821  4271  211
+CONVEX 1988    'GT_PK(2,2)'      169  4270  183  4572  4573  150
+CONVEX 1989    'GT_PK(2,2)'      67  4577  94  4578  4579  78
+CONVEX 1990    'GT_PK(2,2)'      56  4580  67  3918  4581  45
+CONVEX 1991    'GT_PK(2,2)'      67  4580  56  4582  2931  80
+CONVEX 1992    'GT_PK(2,2)'      94  4577  67  3676  4582  80
+CONVEX 1993    'GT_PK(2,2)'      148  4583  162  4584  4585  132
+CONVEX 1994    'GT_PK(2,2)'      162  4586  144  4585  4587  132
+CONVEX 1995    'GT_PK(2,2)'      193  4588  162  3668  4589  181
+CONVEX 1996    'GT_PK(2,2)'      162  4583  148  4589  3678  181
+CONVEX 1997    'GT_PK(2,2)'      117  4590  148  4591  4584  132
+CONVEX 1998    'GT_PK(2,2)'      94  4592  104  4579  4593  78
+CONVEX 1999    'GT_PK(2,2)'      104  4594  87  4593  3682  78
+CONVEX 2000    'GT_PK(2,2)'      104  4595  117  4594  4596  87
+CONVEX 2001    'GT_PK(2,2)'      104  4592  94  4597  3674  122
+CONVEX 2002    'GT_PK(2,2)'      62  4598  51  3683  4599  78
+CONVEX 2003    'GT_PK(2,2)'      67  4600  51  4581  4601  45
+CONVEX 2004    'GT_PK(2,2)'      51  4600  67  4599  4578  78
+CONVEX 2005    'GT_PK(2,2)'      51  4602  1180  4601  3887  45
+CONVEX 2006    'GT_PK(2,2)'      51  4598  62  4603  4604  1182
+CONVEX 2007    'GT_PK(2,2)'      1180  4602  51  4605  4603  1182
+CONVEX 2008    'GT_PK(2,2)'      191  4421  185  4606  4607  164
+CONVEX 2009    'GT_PK(2,2)'      185  4608  152  4607  3772  164
+CONVEX 2010    'GT_PK(2,2)'      185  1953  171  4608  4609  152
+CONVEX 2011    'GT_PK(2,2)'      1192  4610  1190  4611  4612  125
+CONVEX 2012    'GT_PK(2,2)'      1132  4613  1124  4614  3754  1112
+CONVEX 2013    'GT_PK(2,2)'      1132  4614  1112  4615  2803  1123
+CONVEX 2014    'GT_PK(2,2)'      1137  4616  1132  4617  4618  1288
+CONVEX 2015    'GT_PK(2,2)'      1288  4618  1132  1712  4619  1136
+CONVEX 2016    'GT_PK(2,2)'      62  4620  1184  4604  4621  1182
+CONVEX 2017    'GT_PK(2,2)'      1184  4620  62  4622  3680  72
+CONVEX 2018    'GT_PK(2,2)'      1186  4623  1184  3692  4622  72
+CONVEX 2019    'GT_PK(2,2)'      87  4624  100  3681  4625  72
+CONVEX 2020    'GT_PK(2,2)'      100  4626  85  4625  3691  72
+CONVEX 2021    'GT_PK(2,2)'      117  4627  100  4596  4624  87
+CONVEX 2022    'GT_PK(2,2)'      100  4627  117  4628  4591  132
+CONVEX 2023    'GT_PK(2,2)'      98  4629  1190  4630  4631  1189
+CONVEX 2024    'GT_PK(2,2)'      85  4632  98  3694  4630  1189
+CONVEX 2025    'GT_PK(2,2)'      1190  4629  98  4612  4633  125
+CONVEX 2026    'GT_PK(2,2)'      245  4634  274  4635  3850  258
+CONVEX 2027    'GT_PK(2,2)'      261  4636  245  2197  4637  235
+CONVEX 2028    'GT_PK(2,2)'      274  4634  245  2843  4636  261
+CONVEX 2029    'GT_PK(2,2)'      245  4638  219  4637  2144  235
+CONVEX 2030    'GT_PK(2,2)'      288  4639  272  3851  2106  258
+CONVEX 2031    'GT_PK(2,2)'      272  4639  288  4640  4641  300
+CONVEX 2032    'GT_PK(2,2)'      464  4642  504  3706  4643  484
+CONVEX 2033    'GT_PK(2,2)'      484  4643  504  2075  4644  524
+CONVEX 2034    'GT_PK(2,2)'      504  4645  544  4644  3546  524
+CONVEX 2035    'GT_PK(2,2)'      544  4645  504  3507  4646  522
+CONVEX 2036    'GT_PK(2,2)'      522  4646  504  2123  4647  482
+CONVEX 2037    'GT_PK(2,2)'      504  4642  464  4647  3711  482
+CONVEX 2038    'GT_PK(2,2)'      396  4648  410  2738  4649  378
+CONVEX 2039    'GT_PK(2,2)'      410  4650  392  4649  2734  378
+CONVEX 2040    'GT_PK(2,2)'      410  4651  440  4650  3708  392
+CONVEX 2041    'GT_PK(2,2)'      1085  4652  1108  3687  3723  1098
+CONVEX 2042    'GT_PK(2,2)'      1108  4652  1085  3725  4653  1093
+CONVEX 2043    'GT_PK(2,2)'      1125  4654  1133  4655  2772  1118
+CONVEX 2044    'GT_PK(2,2)'      1108  4656  1125  3724  4655  1118
+CONVEX 2045    'GT_PK(2,2)'      1133  4654  1125  2770  4657  1283
+CONVEX 2046    'GT_PK(2,2)'      1125  4656  1108  4658  3726  1114
+CONVEX 2047    'GT_PK(2,2)'      1128  4659  1125  3728  4658  1114
+CONVEX 2048    'GT_PK(2,2)'      1125  4660  1281  4657  4661  1283
+CONVEX 2049    'GT_PK(2,2)'      1125  4659  1128  4660  3730  1281
+CONVEX 2050    'GT_PK(2,2)'      1078  4662  1061  3734  4663  1045
+CONVEX 2051    'GT_PK(2,2)'      1024  4664  1061  4049  4665  1040
+CONVEX 2052    'GT_PK(2,2)'      1061  4664  1024  4663  3038  1045
+CONVEX 2053    'GT_PK(2,2)'      1040  4665  1061  2303  4666  1077
+CONVEX 2054    'GT_PK(2,2)'      1061  4667  1092  4666  4668  1077
+CONVEX 2055    'GT_PK(2,2)'      1061  4662  1078  4667  3750  1092
+CONVEX 2056    'GT_PK(2,2)'      1122  4669  1130  4670  4671  1110
+CONVEX 2057    'GT_PK(2,2)'      1130  4672  1134  4673  2757  1119
+CONVEX 2058    'GT_PK(2,2)'      1110  4671  1130  2798  4673  1119
+CONVEX 2059    'GT_PK(2,2)'      1130  4669  1122  4674  3736  1135
+CONVEX 2060    'GT_PK(2,2)'      1134  4672  1130  2761  4675  1284
+CONVEX 2061    'GT_PK(2,2)'      1130  4674  1135  4676  1705  1287
+CONVEX 2062    'GT_PK(2,2)'      1284  4675  1130  4677  4676  1287
+CONVEX 2063    'GT_PK(2,2)'      1088  4678  1102  3739  4679  1110
+CONVEX 2064    'GT_PK(2,2)'      1102  4680  1092  4681  3745  1113
+CONVEX 2065    'GT_PK(2,2)'      1092  4680  1102  4668  4682  1077
+CONVEX 2066    'GT_PK(2,2)'      1102  4678  1088  4682  3743  1077
+CONVEX 2067    'GT_PK(2,2)'      1122  4683  1102  3738  4681  1113
+CONVEX 2068    'GT_PK(2,2)'      1102  4683  1122  4679  4670  1110
+CONVEX 2069    'GT_PK(2,2)'      1124  4684  1137  3751  4685  1131
+CONVEX 2070    'GT_PK(2,2)'      1289  4686  1137  4687  4688  1290
+CONVEX 2071    'GT_PK(2,2)'      1131  4685  1137  2804  4686  1289
+CONVEX 2072    'GT_PK(2,2)'      1137  4617  1288  4688  4689  1290
+CONVEX 2073    'GT_PK(2,2)'      213  4422  191  3773  4690  1297
+CONVEX 2074    'GT_PK(2,2)'      191  4691  1295  4690  4692  1297
+CONVEX 2075    'GT_PK(2,2)'      173  4693  191  1377  4606  164
+CONVEX 2076    'GT_PK(2,2)'      1295  4691  191  3789  4693  173
+CONVEX 2077    'GT_PK(2,2)'      138  4694  171  2921  1938  155
+CONVEX 2078    'GT_PK(2,2)'      152  4609  171  3771  4694  138
+CONVEX 2079    'GT_PK(2,2)'      227  4419  241  4143  3781  253
+CONVEX 2080    'GT_PK(2,2)'      1132  4615  1123  4619  2175  1136
+CONVEX 2081    'GT_PK(2,2)'      1132  4616  1137  4613  4684  1124
+CONVEX 2082    'GT_PK(2,2)'      428  4695  456  4696  4697  410
+CONVEX 2083    'GT_PK(2,2)'      456  4695  428  4698  4699  476
+CONVEX 2084    'GT_PK(2,2)'      251  4227  269  4700  3823  279
+CONVEX 2085    'GT_PK(2,2)'      265  4701  251  3829  4700  279
+CONVEX 2086    'GT_PK(2,2)'      225  4702  237  3822  4703  209
+CONVEX 2087    'GT_PK(2,2)'      237  4704  265  4705  3833  249
+CONVEX 2088    'GT_PK(2,2)'      251  4706  237  4187  4702  225
+CONVEX 2089    'GT_PK(2,2)'      237  4706  251  4704  4701  265
+CONVEX 2090    'GT_PK(2,2)'      223  4707  237  4564  4705  249
+CONVEX 2091    'GT_PK(2,2)'      237  4707  223  4703  4563  209
+CONVEX 2092    'GT_PK(2,2)'      371  4708  337  2864  4140  355
+CONVEX 2093    'GT_PK(2,2)'      337  4708  371  4709  2859  353
+CONVEX 2094    'GT_PK(2,2)'      321  4710  337  2833  4709  353
+CONVEX 2095    'GT_PK(2,2)'      307  4030  337  3836  4710  321
+CONVEX 2096    'GT_PK(2,2)'      283  4711  1303  4712  3841  311
+CONVEX 2097    'GT_PK(2,2)'      297  4713  283  3926  4712  311
+CONVEX 2098    'GT_PK(2,2)'      283  4713  297  4714  3839  267
+CONVEX 2099    'GT_PK(2,2)'      255  4715  283  3784  4714  267
+CONVEX 2100    'GT_PK(2,2)'      1303  4711  283  4716  4717  1301
+CONVEX 2101    'GT_PK(2,2)'      283  4715  255  4717  3777  1301
+CONVEX 2102    'GT_PK(2,2)'      341  4718  373  4139  3871  355
+CONVEX 2103    'GT_PK(2,2)'      373  4718  341  4719  4027  357
+CONVEX 2104    'GT_PK(2,2)'      316  4720  288  4721  3849  302
+CONVEX 2105    'GT_PK(2,2)'      316  4722  330  4723  3862  344
+CONVEX 2106    'GT_PK(2,2)'      330  4722  316  2194  4721  302
+CONVEX 2107    'GT_PK(2,2)'      328  4724  316  3853  4723  344
+CONVEX 2108    'GT_PK(2,2)'      288  4720  316  4641  4725  300
+CONVEX 2109    'GT_PK(2,2)'      316  4724  328  4725  3856  300
+CONVEX 2110    'GT_PK(2,2)'      377  4726  373  4727  4719  357
+CONVEX 2111    'GT_PK(2,2)'      377  4728  395  4729  1721  415
+CONVEX 2112    'GT_PK(2,2)'      377  4730  361  4728  3872  395
+CONVEX 2113    'GT_PK(2,2)'      361  4730  377  4731  4727  357
+CONVEX 2114    'GT_PK(2,2)'      373  4732  399  3870  4733  387
+CONVEX 2115    'GT_PK(2,2)'      399  4734  437  4735  3756  419
+CONVEX 2116    'GT_PK(2,2)'      387  4733  399  2860  4735  419
+CONVEX 2117    'GT_PK(2,2)'      437  4734  399  2820  4736  415
+CONVEX 2118    'GT_PK(2,2)'      399  4737  377  4736  4729  415
+CONVEX 2119    'GT_PK(2,2)'      377  4737  399  4726  4732  373
+CONVEX 2120    'GT_PK(2,2)'      343  4738  361  3929  4731  357
+CONVEX 2121    'GT_PK(2,2)'      1305  4739  343  3842  4026  311
+CONVEX 2122    'GT_PK(2,2)'      343  4739  1305  4740  4741  1307
+CONVEX 2123    'GT_PK(2,2)'      361  4738  343  3874  4740  1307
+CONVEX 2124    'GT_PK(2,2)'      25  4742  32  2898  4743  17
+CONVEX 2125    'GT_PK(2,2)'      42  4744  32  3897  4742  25
+CONVEX 2126    'GT_PK(2,2)'      32  4745  21  4743  2887  17
+CONVEX 2127    'GT_PK(2,2)'      21  4745  32  3893  4746  40
+CONVEX 2128    'GT_PK(2,2)'      32  4747  53  4746  2892  40
+CONVEX 2129    'GT_PK(2,2)'      32  4744  42  4747  3899  53
+CONVEX 2130    'GT_PK(2,2)'      22  4748  16  4749  4750  28
+CONVEX 2131    'GT_PK(2,2)'      41  4751  22  3911  4749  28
+CONVEX 2132    'GT_PK(2,2)'      22  4752  18  4753  2281  1169
+CONVEX 2133    'GT_PK(2,2)'      22  4753  1169  4754  4755  1166
+CONVEX 2134    'GT_PK(2,2)'      16  4748  22  3904  4754  1166
+CONVEX 2135    'GT_PK(2,2)'      14  4756  19  2916  4757  1165
+CONVEX 2136    'GT_PK(2,2)'      19  4758  16  4757  3902  1165
+CONVEX 2137    'GT_PK(2,2)'      19  4756  14  4759  2911  27
+CONVEX 2138    'GT_PK(2,2)'      16  4758  19  4750  4760  28
+CONVEX 2139    'GT_PK(2,2)'      38  4761  19  3906  4759  27
+CONVEX 2140    'GT_PK(2,2)'      19  4761  38  4760  3907  28
+CONVEX 2141    'GT_PK(2,2)'      33  4762  26  4763  4460  18
+CONVEX 2142    'GT_PK(2,2)'      26  4762  33  4464  4764  43
+CONVEX 2143    'GT_PK(2,2)'      22  4765  33  4752  4763  18
+CONVEX 2144    'GT_PK(2,2)'      33  4765  22  4766  4751  41
+CONVEX 2145    'GT_PK(2,2)'      43  4764  33  4767  4768  54
+CONVEX 2146    'GT_PK(2,2)'      33  4766  41  4768  3914  54
+CONVEX 2147    'GT_PK(2,2)'      31  4769  47  4770  3924  35
+CONVEX 2148    'GT_PK(2,2)'      24  4771  31  2937  4772  1175
+CONVEX 2149    'GT_PK(2,2)'      31  4771  24  4773  4462  37
+CONVEX 2150    'GT_PK(2,2)'      47  4769  31  4476  4773  37
+CONVEX 2151    'GT_PK(2,2)'      31  4774  1177  4772  4775  1175
+CONVEX 2152    'GT_PK(2,2)'      31  4770  35  4774  3920  1177
+CONVEX 2153    'GT_PK(2,2)'      950  3793  980  4776  4777  966
+CONVEX 2154    'GT_PK(2,2)'      950  4778  922  3795  3952  936
+CONVEX 2155    'GT_PK(2,2)'      960  3807  938  3953  4779  966
+CONVEX 2156    'GT_PK(2,2)'      938  4780  950  4779  4776  966
+CONVEX 2157    'GT_PK(2,2)'      950  4780  938  4778  3843  922
+CONVEX 2158    'GT_PK(2,2)'      999  1814  1021  4781  2979  986
+CONVEX 2159    'GT_PK(2,2)'      966  4782  999  3955  4781  986
+CONVEX 2160    'GT_PK(2,2)'      980  3800  999  4777  4782  966
+CONVEX 2161    'GT_PK(2,2)'      982  4783  1015  3798  3959  996
+CONVEX 2162    'GT_PK(2,2)'      982  3722  1001  4783  3969  1015
+CONVEX 2163    'GT_PK(2,2)'      1082  4784  1068  3977  3701  1054
+CONVEX 2164    'GT_PK(2,2)'      1068  4784  1082  4785  3974  1093
+CONVEX 2165    'GT_PK(2,2)'      1085  4786  1068  4653  4785  1093
+CONVEX 2166    'GT_PK(2,2)'      1068  4786  1085  3698  3689  1058
+CONVEX 2167    'GT_PK(2,2)'      1037  4787  1048  3973  3523  1062
+CONVEX 2168    'GT_PK(2,2)'      1048  4787  1037  1821  3970  1021
+CONVEX 2169    'GT_PK(2,2)'      970  4788  984  4789  3721  954
+CONVEX 2170    'GT_PK(2,2)'      1001  3720  984  3967  4790  1018
+CONVEX 2171    'GT_PK(2,2)'      943  4791  928  4792  2331  958
+CONVEX 2172    'GT_PK(2,2)'      970  4793  943  4132  4792  958
+CONVEX 2173    'GT_PK(2,2)'      928  4791  943  3023  4794  914
+CONVEX 2174    'GT_PK(2,2)'      943  4793  970  4795  4789  954
+CONVEX 2175    'GT_PK(2,2)'      943  4796  926  4794  3979  914
+CONVEX 2176    'GT_PK(2,2)'      926  4796  943  1858  4795  954
+CONVEX 2177    'GT_PK(2,2)'      1018  4797  1003  2307  4798  1033
+CONVEX 2178    'GT_PK(2,2)'      988  4799  1003  4131  4800  970
+CONVEX 2179    'GT_PK(2,2)'      984  4801  1003  4790  4797  1018
+CONVEX 2180    'GT_PK(2,2)'      1003  4801  984  4800  4788  970
+CONVEX 2181    'GT_PK(2,2)'      1003  4802  1019  4798  1766  1033
+CONVEX 2182    'GT_PK(2,2)'      1003  4799  988  4802  4133  1019
+CONVEX 2183    'GT_PK(2,2)'      912  4803  883  4804  4007  900
+CONVEX 2184    'GT_PK(2,2)'      926  1859  912  3980  4804  900
+CONVEX 2185    'GT_PK(2,2)'      883  4803  912  3018  3521  899
+CONVEX 2186    'GT_PK(2,2)'      831  4805  817  3997  4806  847
+CONVEX 2187    'GT_PK(2,2)'      817  4807  783  4808  2437  803
+CONVEX 2188    'GT_PK(2,2)'      783  4807  817  4354  4809  799
+CONVEX 2189    'GT_PK(2,2)'      817  4805  831  4809  3999  799
+CONVEX 2190    'GT_PK(2,2)'      833  4810  817  4001  4808  803
+CONVEX 2191    'GT_PK(2,2)'      817  4810  833  4806  4811  847
+CONVEX 2192    'GT_PK(2,2)'      847  4812  861  3009  4813  874
+CONVEX 2193    'GT_PK(2,2)'      833  4814  861  4811  4812  847
+CONVEX 2194    'GT_PK(2,2)'      861  4815  890  4813  3324  874
+CONVEX 2195    'GT_PK(2,2)'      861  4814  833  4816  4002  849
+CONVEX 2196    'GT_PK(2,2)'      877  4817  861  4378  4816  849
+CONVEX 2197    'GT_PK(2,2)'      861  4817  877  4815  4373  890
+CONVEX 2198    'GT_PK(2,2)'      500  4818  456  2125  4698  476
+CONVEX 2199    'GT_PK(2,2)'      440  4819  456  3712  4820  482
+CONVEX 2200    'GT_PK(2,2)'      742  4821  1144  4016  4822  1142
+CONVEX 2201    'GT_PK(2,2)'      1146  4823  1144  2427  4824  762
+CONVEX 2202    'GT_PK(2,2)'      1144  4821  742  4824  4236  762
+CONVEX 2203    'GT_PK(2,2)'      456  4818  500  4820  2122  482
+CONVEX 2204    'GT_PK(2,2)'      410  4697  456  4651  4819  440
+CONVEX 2205    'GT_PK(2,2)'      428  4825  396  4826  2741  412
+CONVEX 2206    'GT_PK(2,2)'      450  4827  428  2219  4826  412
+CONVEX 2207    'GT_PK(2,2)'      428  4827  450  4699  2129  476
+CONVEX 2208    'GT_PK(2,2)'      428  4696  410  4825  4648  396
+CONVEX 2209    'GT_PK(2,2)'      286  4828  272  4829  4640  300
+CONVEX 2210    'GT_PK(2,2)'      967  4830  961  1462  4831  987
+CONVEX 2211    'GT_PK(2,2)'      961  4830  967  4078  3428  939
+CONVEX 2212    'GT_PK(2,2)'      286  4829  300  4832  3857  314
+CONVEX 2213    'GT_PK(2,2)'      286  4832  314  4833  2851  298
+CONVEX 2214    'GT_PK(2,2)'      1162  4834  1160  4835  4035  990
+CONVEX 2215    'GT_PK(2,2)'      998  4836  1162  4044  4835  990
+CONVEX 2216    'GT_PK(2,2)'      979  4837  1012  4838  4051  1006
+CONVEX 2217    'GT_PK(2,2)'      979  4839  1159  4840  4841  1161
+CONVEX 2218    'GT_PK(2,2)'      979  4842  961  4839  4080  1159
+CONVEX 2219    'GT_PK(2,2)'      979  4838  1006  4843  4056  987
+CONVEX 2220    'GT_PK(2,2)'      961  4842  979  4831  4843  987
+CONVEX 2221    'GT_PK(2,2)'      991  4844  998  4845  4046  1024
+CONVEX 2222    'GT_PK(2,2)'      1012  4846  991  4047  4845  1024
+CONVEX 2223    'GT_PK(2,2)'      1162  4847  991  4848  4849  1161
+CONVEX 2224    'GT_PK(2,2)'      991  4847  1162  4844  4836  998
+CONVEX 2225    'GT_PK(2,2)'      991  4850  979  4849  4840  1161
+CONVEX 2226    'GT_PK(2,2)'      979  4850  991  4837  4846  1012
+CONVEX 2227    'GT_PK(2,2)'      712  4851  693  4852  4068  671
+CONVEX 2228    'GT_PK(2,2)'      712  4852  671  4853  2368  691
+CONVEX 2229    'GT_PK(2,2)'      729  4854  712  3182  4853  691
+CONVEX 2230    'GT_PK(2,2)'      693  4851  712  4075  4855  737
+CONVEX 2231    'GT_PK(2,2)'      712  4854  729  4856  4065  757
+CONVEX 2232    'GT_PK(2,2)'      737  4855  712  3420  4856  757
+CONVEX 2233    'GT_PK(2,2)'      753  4857  715  3427  4074  737
+CONVEX 2234    'GT_PK(2,2)'      733  4858  753  2015  1785  765
+CONVEX 2235    'GT_PK(2,2)'      715  4857  753  4072  4858  733
+CONVEX 2236    'GT_PK(2,2)'      885  4859  897  3059  4860  911
+CONVEX 2237    'GT_PK(2,2)'      869  4861  897  4093  4859  885
+CONVEX 2238    'GT_PK(2,2)'      897  4862  923  4860  3033  911
+CONVEX 2239    'GT_PK(2,2)'      897  4861  869  4863  4091  1152
+CONVEX 2240    'GT_PK(2,2)'      897  4864  1154  4862  3057  923
+CONVEX 2241    'GT_PK(2,2)'      1154  4864  897  4865  4863  1152
+CONVEX 2242    'GT_PK(2,2)'      946  4866  932  3091  4867  962
+CONVEX 2243    'GT_PK(2,2)'      932  4868  945  4867  4137  962
+CONVEX 2244    'GT_PK(2,2)'      907  4869  932  3322  4870  917
+CONVEX 2245    'GT_PK(2,2)'      932  4866  946  4870  2329  917
+CONVEX 2246    'GT_PK(2,2)'      921  4871  932  3077  4869  907
+CONVEX 2247    'GT_PK(2,2)'      945  4868  932  4103  4871  921
+CONVEX 2248    'GT_PK(2,2)'      1066  3105  1052  4128  3196  1265
+CONVEX 2249    'GT_PK(2,2)'      1257  3067  973  4872  3076  1255
+CONVEX 2250    'GT_PK(2,2)'      270  4873  286  2098  4833  298
+CONVEX 2251    'GT_PK(2,2)'      272  4828  286  2115  4874  256
+CONVEX 2252    'GT_PK(2,2)'      994  1449  1026  3095  3102  1007
+CONVEX 2253    'GT_PK(2,2)'      695  2985  675  4875  2444  651
+CONVEX 2254    'GT_PK(2,2)'      669  2901  695  4144  4875  651
+CONVEX 2255    'GT_PK(2,2)'      773  4876  789  4877  4878  805
+CONVEX 2256    'GT_PK(2,2)'      789  4876  773  1703  2938  759
+CONVEX 2257    'GT_PK(2,2)'      787  4879  807  4880  2442  771
+CONVEX 2258    'GT_PK(2,2)'      755  4881  787  4145  4880  771
+CONVEX 2259    'GT_PK(2,2)'      787  4882  823  4879  4384  807
+CONVEX 2260    'GT_PK(2,2)'      823  4882  787  4123  4883  805
+CONVEX 2261    'GT_PK(2,2)'      787  4884  773  4883  4877  805
+CONVEX 2262    'GT_PK(2,2)'      773  4884  787  2933  4881  755
+CONVEX 2263    'GT_PK(2,2)'      819  4885  837  4886  4122  805
+CONVEX 2264    'GT_PK(2,2)'      789  1337  819  4878  4886  805
+CONVEX 2265    'GT_PK(2,2)'      837  4885  819  4120  2774  853
+CONVEX 2266    'GT_PK(2,2)'      704  4887  682  4239  4888  690
+CONVEX 2267    'GT_PK(2,2)'      682  2642  663  4888  4151  690
+CONVEX 2268    'GT_PK(2,2)'      682  4887  704  4889  4020  706
+CONVEX 2269    'GT_PK(2,2)'      664  2773  682  4890  4889  706
+CONVEX 2270    'GT_PK(2,2)'      632  4891  620  3129  2618  594
+CONVEX 2271    'GT_PK(2,2)'      663  2640  620  4153  4891  632
+CONVEX 2272    'GT_PK(2,2)'      460  4892  446  4893  4188  422
+CONVEX 2273    'GT_PK(2,2)'      480  4894  460  3168  4895  438
+CONVEX 2274    'GT_PK(2,2)'      460  4893  422  4895  4150  438
+CONVEX 2275    'GT_PK(2,2)'      460  4894  480  4896  3170  488
+CONVEX 2276    'GT_PK(2,2)'      468  4897  460  4245  4896  488
+CONVEX 2277    'GT_PK(2,2)'      446  4892  460  4193  4897  468
+CONVEX 2278    'GT_PK(2,2)'      342  4898  1306  3171  4899  1304
+CONVEX 2279    'GT_PK(2,2)'      360  4900  1306  4196  4898  342
+CONVEX 2280    'GT_PK(2,2)'      256  4874  286  3704  4873  270
+CONVEX 2281    'GT_PK(2,2)'      230  4901  219  4902  4638  245
+CONVEX 2282    'GT_PK(2,2)'      388  4903  394  4904  4149  422
+CONVEX 2283    'GT_PK(2,2)'      388  4905  360  4903  4197  394
+CONVEX 2284    'GT_PK(2,2)'      388  4904  422  4906  4189  408
+CONVEX 2285    'GT_PK(2,2)'      1308  4907  388  4183  4906  408
+CONVEX 2286    'GT_PK(2,2)'      1306  4908  388  4909  4907  1308
+CONVEX 2287    'GT_PK(2,2)'      388  4908  1306  4905  4900  360
+CONVEX 2288    'GT_PK(2,2)'      621  2387  643  4910  4205  662
+CONVEX 2289    'GT_PK(2,2)'      621  4911  595  2376  4219  583
+CONVEX 2290    'GT_PK(2,2)'      633  4912  621  3186  4910  662
+CONVEX 2291    'GT_PK(2,2)'      595  4911  621  4217  4912  633
+CONVEX 2292    'GT_PK(2,2)'      688  4913  664  4914  4890  706
+CONVEX 2293    'GT_PK(2,2)'      1140  2338  688  4214  4914  706
+CONVEX 2294    'GT_PK(2,2)'      219  4901  230  1535  4915  206
+CONVEX 2295    'GT_PK(2,2)'      230  4902  245  2062  4635  258
+CONVEX 2296    'GT_PK(2,2)'      689  4916  13  3185  4917  1141
+CONVEX 2297    'GT_PK(2,2)'      12  4918  13  4208  4916  689
+CONVEX 2298    'GT_PK(2,2)'      644  4919  4  1677  4920  604
+CONVEX 2299    'GT_PK(2,2)'      4  4919  644  4921  4922  5
+CONVEX 2300    'GT_PK(2,2)'      644  4923  688  4922  2335  5
+CONVEX 2301    'GT_PK(2,2)'      688  4923  644  4913  1689  664
+CONVEX 2302    'GT_PK(2,2)'      489  2250  519  4924  2185  481
+CONVEX 2303    'GT_PK(2,2)'      461  4925  489  2380  4924  481
+CONVEX 2304    'GT_PK(2,2)'      509  4926  469  4927  4928  487
+CONVEX 2305    'GT_PK(2,2)'      489  4929  469  2327  4926  509
+CONVEX 2306    'GT_PK(2,2)'      469  4930  461  4931  3209  447
+CONVEX 2307    'GT_PK(2,2)'      469  4929  489  4930  4925  461
+CONVEX 2308    'GT_PK(2,2)'      445  4932  463  4933  4258  487
+CONVEX 2309    'GT_PK(2,2)'      445  4934  469  4935  4931  447
+CONVEX 2310    'GT_PK(2,2)'      469  4934  445  4928  4933  487
+CONVEX 2311    'GT_PK(2,2)'      409  4936  445  3211  4935  447
+CONVEX 2312    'GT_PK(2,2)'      445  4936  409  4937  3215  1311
+CONVEX 2313    'GT_PK(2,2)'      445  4937  1311  4938  4939  1313
+CONVEX 2314    'GT_PK(2,2)'      463  4932  445  4232  4938  1313
+CONVEX 2315    'GT_PK(2,2)'      527  4940  507  4941  4253  547
+CONVEX 2316    'GT_PK(2,2)'      509  4942  527  2333  4943  549
+CONVEX 2317    'GT_PK(2,2)'      527  4942  509  4944  4927  487
+CONVEX 2318    'GT_PK(2,2)'      507  4940  527  4259  4944  487
+CONVEX 2319    'GT_PK(2,2)'      527  4945  585  4943  2361  549
+CONVEX 2320    'GT_PK(2,2)'      585  4945  527  4222  4941  547
+CONVEX 2321    'GT_PK(2,2)'      3  4946  2  4947  4266  546
+CONVEX 2322    'GT_PK(2,2)'      230  2116  216  4915  4948  206
+CONVEX 2323    'GT_PK(2,2)'      3  4947  546  4949  2620  604
+CONVEX 2324    'GT_PK(2,2)'      4  4950  3  4920  4949  604
+CONVEX 2325    'GT_PK(2,2)'      202  1973  194  4951  4952  216
+CONVEX 2326    'GT_PK(2,2)'      588  4953  607  4277  2999  629
+CONVEX 2327    'GT_PK(2,2)'      607  4953  588  4954  4273  569
+CONVEX 2328    'GT_PK(2,2)'      607  4954  569  1658  3236  587
+CONVEX 2329    'GT_PK(2,2)'      420  4955  452  4956  4278  434
+CONVEX 2330    'GT_PK(2,2)'      384  4957  420  2511  4958  404
+CONVEX 2331    'GT_PK(2,2)'      420  4956  434  4958  4170  404
+CONVEX 2332    'GT_PK(2,2)'      452  4955  420  4282  4959  432
+CONVEX 2333    'GT_PK(2,2)'      490  4960  448  4294  2225  472
+CONVEX 2334    'GT_PK(2,2)'      448  4960  490  4961  4286  470
+CONVEX 2335    'GT_PK(2,2)'      432  4962  448  4283  4961  470
+CONVEX 2336    'GT_PK(2,2)'      448  4962  432  2227  4963  417
+CONVEX 2337    'GT_PK(2,2)'      383  4964  368  4965  4297  349
+CONVEX 2338    'GT_PK(2,2)'      383  4966  401  4967  2247  417
+CONVEX 2339    'GT_PK(2,2)'      383  4965  349  4968  1893  367
+CONVEX 2340    'GT_PK(2,2)'      401  4966  383  4296  4968  367
+CONVEX 2341    'GT_PK(2,2)'      432  4969  403  4963  4970  417
+CONVEX 2342    'GT_PK(2,2)'      403  4971  383  4970  4967  417
+CONVEX 2343    'GT_PK(2,2)'      383  4971  403  4964  4972  368
+CONVEX 2344    'GT_PK(2,2)'      368  4972  403  4300  4973  384
+CONVEX 2345    'GT_PK(2,2)'      403  4974  420  4973  4957  384
+CONVEX 2346    'GT_PK(2,2)'      420  4974  403  4959  4969  432
+CONVEX 2347    'GT_PK(2,2)'      465  4975  425  4976  4321  443
+CONVEX 2348    'GT_PK(2,2)'      483  4977  465  3244  4978  505
+CONVEX 2349    'GT_PK(2,2)'      441  4979  465  3251  4977  483
+CONVEX 2350    'GT_PK(2,2)'      425  4975  465  4980  4979  441
+CONVEX 2351    'GT_PK(2,2)'      465  4981  485  4978  2955  505
+CONVEX 2352    'GT_PK(2,2)'      485  4981  465  3943  4976  443
+CONVEX 2353    'GT_PK(2,2)'      411  4982  393  4308  4983  441
+CONVEX 2354    'GT_PK(2,2)'      393  4984  425  4983  4980  441
+CONVEX 2355    'GT_PK(2,2)'      393  4985  379  4986  2287  363
+CONVEX 2356    'GT_PK(2,2)'      393  4982  411  4985  4304  379
+CONVEX 2357    'GT_PK(2,2)'      375  4987  393  3934  4986  363
+CONVEX 2358    'GT_PK(2,2)'      425  4984  393  4322  4987  375
+CONVEX 2359    'GT_PK(2,2)'      824  4988  854  3268  4989  840
+CONVEX 2360    'GT_PK(2,2)'      842  4990  854  4332  4988  824
+CONVEX 2361    'GT_PK(2,2)'      854  4991  868  4989  4025  840
+CONVEX 2362    'GT_PK(2,2)'      854  4990  842  4992  4335  870
+CONVEX 2363    'GT_PK(2,2)'      884  4993  854  4012  4992  870
+CONVEX 2364    'GT_PK(2,2)'      854  4993  884  4991  4014  868
+CONVEX 2365    'GT_PK(2,2)'      1205  4994  263  4417  4995  243
+CONVEX 2366    'GT_PK(2,2)'      263  4996  285  4997  4410  271
+CONVEX 2367    'GT_PK(2,2)'      243  4995  263  3401  4997  271
+CONVEX 2368    'GT_PK(2,2)'      285  4996  263  3382  4998  1206
+CONVEX 2369    'GT_PK(2,2)'      263  4994  1205  4998  4999  1206
+CONVEX 2370    'GT_PK(2,2)'      238  5000  252  5001  3385  226
+CONVEX 2371    'GT_PK(2,2)'      238  5002  268  5000  4454  252
+CONVEX 2372    'GT_PK(2,2)'      210  5003  238  3390  5001  226
+CONVEX 2373    'GT_PK(2,2)'      268  5002  238  4458  5004  250
+CONVEX 2374    'GT_PK(2,2)'      238  5005  224  5004  4415  250
+CONVEX 2375    'GT_PK(2,2)'      224  5005  238  4412  5003  210
+CONVEX 2376    'GT_PK(2,2)'      77  5006  103  5007  4470  93
+CONVEX 2377    'GT_PK(2,2)'      64  5008  77  3915  5009  54
+CONVEX 2378    'GT_PK(2,2)'      77  5008  64  5010  3461  89
+CONVEX 2379    'GT_PK(2,2)'      103  5006  77  4471  5010  89
+CONVEX 2380    'GT_PK(2,2)'      66  5011  43  5012  4767  54
+CONVEX 2381    'GT_PK(2,2)'      66  5013  58  5011  4473  43
+CONVEX 2382    'GT_PK(2,2)'      77  5014  66  5009  5012  54
+CONVEX 2383    'GT_PK(2,2)'      66  5014  77  5015  5007  93
+CONVEX 2384    'GT_PK(2,2)'      83  5016  93  5017  3463  110
+CONVEX 2385    'GT_PK(2,2)'      97  5018  83  2929  5017  110
+CONVEX 2386    'GT_PK(2,2)'      83  5019  66  5016  5015  93
+CONVEX 2387    'GT_PK(2,2)'      66  5019  83  5013  5020  58
+CONVEX 2388    'GT_PK(2,2)'      83  5018  97  5021  2925  70
+CONVEX 2389    'GT_PK(2,2)'      58  5020  83  4477  5021  70
+CONVEX 2390    'GT_PK(2,2)'      190  5022  165  4489  5023  184
+CONVEX 2391    'GT_PK(2,2)'      165  1539  151  5023  4492  184
+CONVEX 2392    'GT_PK(2,2)'      165  5022  190  1354  4485  172
+CONVEX 2393    'GT_PK(2,2)'      109  5024  119  4494  2163  92
+CONVEX 2394    'GT_PK(2,2)'      151  1550  119  4491  5025  137
+CONVEX 2395    'GT_PK(2,2)'      119  5024  109  5025  4496  137
+CONVEX 2396    'GT_PK(2,2)'      112  1362  127  5026  3492  90
+CONVEX 2397    'GT_PK(2,2)'      74  5027  112  2275  5026  90
+CONVEX 2398    'GT_PK(2,2)'      88  1553  112  4498  5027  74
+CONVEX 2399    'GT_PK(2,2)'      944  5028  963  4511  5029  976
+CONVEX 2400    'GT_PK(2,2)'      976  5029  963  3562  5030  995
+CONVEX 2401    'GT_PK(2,2)'      963  5031  975  5030  3594  995
+CONVEX 2402    'GT_PK(2,2)'      963  5028  944  5032  4513  933
+CONVEX 2403    'GT_PK(2,2)'      963  5032  933  5033  2710  947
+CONVEX 2404    'GT_PK(2,2)'      975  5031  963  3596  5033  947
+CONVEX 2405    'GT_PK(2,2)'      836  5034  818  5035  3591  804
+CONVEX 2406    'GT_PK(2,2)'      822  5036  836  3656  5035  804
+CONVEX 2407    'GT_PK(2,2)'      818  5034  836  3592  5037  852
+CONVEX 2408    'GT_PK(2,2)'      836  5038  864  5037  4525  852
+CONVEX 2409    'GT_PK(2,2)'      836  5036  822  5039  3651  850
+CONVEX 2410    'GT_PK(2,2)'      864  5038  836  4518  5039  850
+CONVEX 2411    'GT_PK(2,2)'      117  5040  134  4590  5041  148
+CONVEX 2412    'GT_PK(2,2)'      104  5042  134  4595  5040  117
+CONVEX 2413    'GT_PK(2,2)'      134  5042  104  5043  4597  122
+CONVEX 2414    'GT_PK(2,2)'      148  5041  134  3677  5044  167
+CONVEX 2415    'GT_PK(2,2)'      150  5045  134  4570  5043  122
+CONVEX 2416    'GT_PK(2,2)'      134  5045  150  5044  4574  167
+CONVEX 2417    'GT_PK(2,2)'      144  5046  116  4587  5047  132
+CONVEX 2418    'GT_PK(2,2)'      116  5048  100  5047  4628  132
+CONVEX 2419    'GT_PK(2,2)'      116  5046  144  5049  2158  125
+CONVEX 2420    'GT_PK(2,2)'      98  5050  116  4633  5049  125
+CONVEX 2421    'GT_PK(2,2)'      100  5048  116  4626  5051  85
+CONVEX 2422    'GT_PK(2,2)'      116  5050  98  5051  4632  85
+CONVEX 2423    'GT_PK(2,2)'      158  2059  1196  5052  5053  1194
+CONVEX 2424    'GT_PK(2,2)'      216  4952  194  4948  1484  206
+CONVEX 2425    'GT_PK(2,2)'      232  5054  202  2118  4951  216
+CONVEX 2426    'GT_PK(2,2)'      202  5054  232  5055  5056  220
+CONVEX 2427    'GT_PK(2,2)'      202  5057  1200  1975  5058  1198
+CONVEX 2428    'GT_PK(2,2)'      141  1526  158  5059  5052  1194
+CONVEX 2429    'GT_PK(2,2)'      141  5060  1192  2149  4611  125
+CONVEX 2430    'GT_PK(2,2)'      1192  5060  141  5061  5059  1194
+CONVEX 2431    'GT_PK(2,2)'      177  5062  162  2145  4588  193
+CONVEX 2432    'GT_PK(2,2)'      162  5062  177  4586  2146  144
+CONVEX 2433    'GT_PK(2,2)'      232  5063  242  5056  2715  220
+CONVEX 2434    'GT_PK(2,2)'      232  2108  256  5063  3703  242
+CONVEX 2435    'GT_PK(2,2)'      1200  5057  202  3696  5055  220
+
+END MESH STRUCTURE DESCRIPTION
diff --git a/tests/nonlinear_elastostatic.cc b/tests/nonlinear_elastostatic.cc
index 2c80c44..44f3f4c 100644
--- a/tests/nonlinear_elastostatic.cc
+++ b/tests/nonlinear_elastostatic.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file nonlinear_elastostatic.cc
@@ -37,6 +37,9 @@
 #include "getfem/getfem_superlu.h"
 #include "gmm/gmm.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests/nonlinear_elastostatic.pl b/tests/nonlinear_elastostatic.pl
index 46854aa..2bbc238 100644
--- a/tests/nonlinear_elastostatic.pl
+++ b/tests/nonlinear_elastostatic.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 LX = .5;		% size in X.
 LY = 1.0;	        % size in Y.
 LZ = 2.0;		% size in Z.
diff --git a/tests/nonlinear_membrane.cc b/tests/nonlinear_membrane.cc
index e5c6d5d..f0d798e 100644
--- a/tests/nonlinear_membrane.cc
+++ b/tests/nonlinear_membrane.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008  Jean-Yves Heddebaut.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Jean-Yves Heddebaut.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file nonlinear_membrane.cc
@@ -34,6 +34,9 @@
 #include "getfem/getfem_superlu.h"
 #include "gmm/gmm.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests/nonlinear_membrane.pl b/tests/nonlinear_membrane.pl
index 740d488..ecc7dc6 100644
--- a/tests/nonlinear_membrane.pl
+++ b/tests/nonlinear_membrane.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 LX =50;
 LY =25;
 NX =10;
diff --git a/tests/plasticity.cc b/tests/plasticity.cc
index c8f6c67..96c2004 100644
--- a/tests/plasticity.cc
+++ b/tests/plasticity.cc
@@ -1,30 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===================================================================
-//
-// Copyright (C) 2000-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  
-// you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License 
-// as published
-// by  the  Free Software Foundation;  
-// either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of 
-// the GNU Lesser General Public License
-// along  with  this program;  
-// if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2000-2012 Yves Renard
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 /**
@@ -35,13 +28,14 @@
    This is also a good example of use of Getfem++.
 */
 
-
 #include "getfem/getfem_assembling.h" 
 #include "getfem/getfem_regular_meshes.h"
 #include "getfem/getfem_model_solvers.h"
 #include "getfem/getfem_plasticity.h"
 #include "getfem/getfem_export.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 /* some Getfem++ types that we will be using */
 
@@ -341,7 +335,7 @@ bool elastoplasticity_problem::solve(plain_vector &U) {
     cout << "Number of variables : " 
 	 << model.nb_dof() << endl;
 
-    gmm::simplest_newton_line_search ls;
+    getfem::simplest_newton_line_search ls;
 
     gmm::iteration iter(residual, 2, 40000);
     getfem::standard_solve(model, iter, getfem::rselect_linear_solver(model, "superlu"), ls);
diff --git a/tests/plasticity.pl b/tests/plasticity.pl
index 881ea0a..78ab121 100644
--- a/tests/plasticity.pl
+++ b/tests/plasticity.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 LX =100;   % size in X in mm.        %2.0; %1.0;		
 LY =20;   % size in Y in mm.        %0.5; %1.0;
 LZ =20;   % size in Z in mm.        %0.5;
diff --git a/tests/plasticity_old_brick.cc b/tests/plasticity_old_brick.cc
index c578c27..5d38a7f 100644
--- a/tests/plasticity_old_brick.cc
+++ b/tests/plasticity_old_brick.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file plasticity.cc
@@ -32,6 +32,8 @@
 #include "getfem/getfem_model_solvers.h"
 #include "getfem/getfem_plasticity.h"
 #include "getfem/getfem_export.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/tests/plasticity_old_brick.pl b/tests/plasticity_old_brick.pl
index 68d838f..8a4aeaa 100644
--- a/tests/plasticity_old_brick.pl
+++ b/tests/plasticity_old_brick.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 LX =100;   % size in X in mm.        %2.0; %1.0;		
 LY =20;   % size in Y in mm.        %0.5; %1.0;
 LZ =20;   % size in Z in mm.        %0.5;
diff --git a/tests/plate.cc b/tests/plate.cc
index b2db8b6..6cd1f67 100644
--- a/tests/plate.cc
+++ b/tests/plate.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Michel Salaün.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Michel Salaün.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file plate.cc
@@ -34,6 +34,9 @@
 #include "getfem/getfem_model_solvers.h"
 #include "gmm/gmm.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
@@ -73,7 +76,7 @@ struct plate_problem {
                              // sol_ref = 1 : homogeneous on the vertical edges
                              // sol_ref = 2 : homogeneous on the 4 vertical
                              //       edges with solution u3 = sin²(x)*sin²(y)
-  scalar_type eta;           // usefull only if sol_ref == 2 :
+  scalar_type eta;           // useful only if sol_ref == 2 :
                              // eta = 0 => Kirchoff-Love
 			     // eta = small => Mindlin 
   size_type N_Four ;
diff --git a/tests/plate.param b/tests/plate.param
old mode 100755
new mode 100644
index 3eb1a38..b392778
--- a/tests/plate.param
+++ b/tests/plate.param
@@ -29,15 +29,15 @@ STUDY_FLAG = 0 ;	% if equal to 1 then all the loadings applied are chosen
 			% in order to have a maximum vertical displacement equal to 1.
 
 PRESSURE = 0.0005;       % pressure on the top surface of the plate 
-			% (only usefull if SOL_REF = 0 or 1)  
+			% (only useful if SOL_REF = 0 or 1)  
 			% will be multiplied by EPSILON^3.
 			  
-ETA = 1e-4;             % only usefull if SOL_REF = 2 :
+ETA = 1e-4;             % only useful if SOL_REF = 2 :
 			% if eta  = 0 => solution of the Kirchoff-Love model
 			% if eta != 0 => solution of the Mindlin-Reissner model
 			% To be taken of order epsilon^2 ?
 
-N_Four = 100             % only usefull if SOL_REF = 4
+N_Four = 100             % only useful if SOL_REF = 4
 			
 %%%%% parameters for computation :
 
diff --git a/tests/plate.pl b/tests/plate.pl
old mode 100755
new mode 100644
index 6b9fcd2..34de2df
--- a/tests/plate.pl
+++ b/tests/plate.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 MU = 1.0;	        % Lamé coefficient.
 LAMBDA = 0.0;   	% Lamé coefficient.
 EPSILON = 0.01;          % thickness of the plate
diff --git a/tests/poly.cc b/tests/poly.cc
index cb089f7..5ef7c92 100644
--- a/tests/poly.cc
+++ b/tests/poly.cc
@@ -1,25 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/bgeot_poly.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
 std::string horner_print(bgeot::short_type degree, bgeot::power_index &mi,
 			 bgeot::short_type k, bgeot::short_type de) {
   char s[1024];
diff --git a/tests/poly.pl b/tests/poly.pl
old mode 100755
new mode 100644
index a64b8f5..bfb1c56
--- a/tests/poly.pl
+++ b/tests/poly.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/schwarz_additive.cc b/tests/schwarz_additive.cc
index 12e0938..d5cf431 100644
--- a/tests/schwarz_additive.cc
+++ b/tests/schwarz_additive.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**************************************************************************/
 /*                                                                        */
@@ -36,6 +36,8 @@
 #ifdef GMM_USES_MPI
 #include <mpi++.h>
 #endif
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 using bgeot::base_vector;
 using bgeot::base_node;
diff --git a/tests/schwarz_additive.pl b/tests/schwarz_additive.pl
old mode 100755
new mode 100644
index 777bada..d530c5d
--- a/tests/schwarz_additive.pl
+++ b/tests/schwarz_additive.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 N = 3;                  % dimension.
 PG = 9.81;		% gravity constant.
 RHO = 0.1;     	        % mass density
diff --git a/tests/stokes.cc b/tests/stokes.cc
index 4440dfa..5d28c73 100644
--- a/tests/stokes.cc
+++ b/tests/stokes.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**
    @file stokes.cc
@@ -36,6 +36,8 @@
 #include "getfem/getfem_regular_meshes.h"
 #include "getfem/getfem_model_solvers.h"
 #include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/tests/stokes.pl b/tests/stokes.pl
old mode 100755
new mode 100644
index ce5c1fb..d2dfe91
--- a/tests/stokes.pl
+++ b/tests/stokes.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 LX = 1.0;		% size in X.
 LY = 1.0;	        % size in Y.
 LZ = 1.0;		% size in Z.
diff --git a/tests/test_assembly.cc b/tests/test_assembly.cc
index f7c774d..66fac4a 100644
--- a/tests/test_assembly.cc
+++ b/tests/test_assembly.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/getfem_assembling.h"
 #include "getfem/getfem_assembling.h"
 #include "getfem/getfem_export.h"
@@ -27,7 +27,11 @@
 #ifdef GETFEM_HAVE_SYS_TIMES
 # include <sys/times.h>
 #endif
+#ifndef _MSC_VER
 #include <unistd.h>
+#endif
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 using bgeot::base_vector;
 using bgeot::base_matrix;
diff --git a/tests/test_assembly.pl b/tests/test_assembly.pl
old mode 100755
new mode 100644
index a2ca8a6..bc37083
--- a/tests/test_assembly.pl
+++ b/tests/test_assembly.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/test_continuation.cc b/tests/test_continuation.cc
new file mode 100644
index 0000000..ccd479d
--- /dev/null
+++ b/tests/test_continuation.cc
@@ -0,0 +1,187 @@
+/*===========================================================================
+ 
+ Copyright (C) 2011-2012 Yves Renard, Tomas Ligursky.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+/**
+   @file test_continuation.cc
+   
+   Continuation of solutions to the following state problem parameterized by
+   lambda:
+   -u'' +  u = lambda * exp(u) in (0, 1), u'(0) = u'(1) = 0.
+
+   This program is used to check that getfem++ is working. This is also 
+   a good example of use of Getfem++.
+*/
+
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_model_solvers.h"
+#include "getfem/getfem_continuation.h" /* import continuation method */
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+/* some Getfem++ types that we will be using */
+using bgeot::scalar_type; /* = double */
+using bgeot::size_type;   /* = unsigned long */
+
+/* definition of a vector type; this one is built using the predefined types
+   in Gmm++ */
+typedef getfem::modeling_standard_plain_vector plain_vector;
+
+/*
+  structure for the state problem
+*/
+struct state_problem {
+
+  getfem::mesh mesh;         /* the mesh */
+  getfem::mesh_fem mf_u;     /* the FEM-method */
+  getfem::mesh_im mim;       /* the integration method */
+  scalar_type lambda;
+
+  std::string datafilename;
+  bgeot::md_param PARAM;
+
+  bool cont(plain_vector &U);
+  void init(void);
+  state_problem(void) : mf_u(mesh), mim(mesh) {}
+};
+
+
+/* Read parameters from the .param file, build the mesh, set finite element
+ * and integration methods.
+ */
+void state_problem::init(void) {
+  std::string FEM_TYPE  = PARAM.string_value("FEM_TYPE","FEM name");
+  std::string INTEGRATION = PARAM.string_value("INTEGRATION",
+					       "Name of integration method");
+  cout << "FEM_TYPE="  << FEM_TYPE << "\n";
+  cout << "INTEGRATION=" << INTEGRATION << "\n";
+  
+  /* First step: build the mesh */
+  std::vector<getfem::size_type> nsubdiv(1);
+  nsubdiv[0] = PARAM.int_value("NX", "Number of the space steps ");
+  regular_unit_mesh(mesh, nsubdiv, bgeot::simplex_geotrans(1, 1));
+  
+  datafilename = PARAM.string_value("ROOTFILENAME",
+				    "Base name of data files.");
+
+  /* set the finite element on the mf_u */
+  getfem::pfem pf_u = getfem::fem_descriptor(FEM_TYPE);
+  getfem::pintegration_method ppi = 
+    getfem::int_method_descriptor(INTEGRATION);
+
+  mf_u.set_finite_element(pf_u);
+  mim.set_integration_method(ppi);
+
+}
+
+/**************************************************************************/
+/*  Model.                                                                */
+/**************************************************************************/
+
+bool state_problem::cont(plain_vector &U) {
+  
+  //Define the model
+  getfem::model model;
+  model.add_fem_variable("u", mf_u);
+  add_Laplacian_brick(model, mim, "u");
+  std::string f = "u-lambda*exp(u)", dfdu = "1-lambda*exp(u)";
+  lambda = PARAM.real_value("LAMBDA0");
+  model.add_initialized_scalar_data("lambda", lambda);
+  add_basic_nonlinear_brick(model, mim, "u", f, dfdu,
+			    size_type(-1), "lambda");
+
+
+  // Initialise the continuation
+  getfem::rmodel_plsolver_type ls =
+    getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+                                  getfem::model_real_plain_vector>(model);
+  size_type nb_step = int(PARAM.int_value("NBSTEP")),
+    maxit = PARAM.int_value("MAXITER"),
+    thrit = PARAM.int_value("THR_ITER"),
+    nb_dof = mf_u.nb_dof();
+  scalar_type scfac = 1./ nb_dof,
+    maxres = PARAM.real_value("RESIDUAL"),
+    maxdiff = PARAM.real_value("DIFFERENCE"),
+    minang = PARAM.real_value("ANGLE"),
+    h_init = PARAM.real_value("H_INIT"),
+    h_max = PARAM.real_value("H_MAX"),
+    h_min = PARAM.real_value("H_MIN"),
+    h_inc = PARAM.real_value("H_INC"),
+    h_dec = PARAM.real_value("H_DEC"),
+    eps = PARAM.real_value("EPSILON"),
+    maxres_solve = PARAM.real_value("RESIDUAL_SOLVE");
+  int noisy = PARAM.int_value("NOISY");
+  getfem::cont_struct_getfem_model
+    S(model, "lambda", ls, scfac, maxit, thrit, maxres, maxdiff, minang,
+      h_init, h_max, h_min, h_inc, h_dec, eps, maxres_solve, noisy);
+
+  if (noisy > 0) cout << "computing initial point" << endl;
+  gmm::iteration iter(maxres_solve, noisy, 40000);
+  getfem::standard_solve(model, iter);
+
+  gmm::resize(U, nb_dof);
+  gmm::copy(model.real_variable("u"), U);
+
+  cout << "U = " << U << endl;
+  cout << "lambda - u * exp(-u) = " << lambda - U[0] * exp(-U[0]) << endl;
+
+  plain_vector T_U(U);
+  scalar_type T_lambda = PARAM.real_value("DIRECTION"), h;
+  getfem::init_Moore_Penrose_continuation(S, U, lambda, T_U, T_lambda, h);
+
+  // Continuation
+  for (size_type step = 0; step < nb_step; ++step) {
+    cout << endl << "beginning of step " << step + 1 << endl;
+    
+    getfem::Moore_Penrose_continuation(S, U, lambda, T_U, T_lambda, h);
+    if (h == 0) break;
+
+    cout << "U = " << U << endl;
+    cout << "lambda = " << lambda << endl;
+    cout << "lambda - U[0] * exp(-U[0]) = "
+	 << lambda - U[0] * exp(-U[0]) << endl;
+
+    cout << "end of Step nº " << step+1 << " / " << nb_step << endl;
+  }
+
+  return (h > 0);
+}
+  
+/**************************************************************************/
+/*  main program.                                                         */
+/**************************************************************************/
+
+int main(int argc, char *argv[]) {
+
+  GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
+  FE_ENABLE_EXCEPT;        // Enable floating point exception for Nan.
+
+  try {    
+    state_problem p;
+    p.PARAM.read_command_line(argc, argv);
+    p.init();
+    plain_vector U(p.mf_u.nb_dof());
+    if (!p.cont(U)) GMM_ASSERT1(false, "Continuation has failed");
+  }
+  GMM_STANDARD_CATCH_ERROR;
+
+  return 0; 
+}
diff --git a/tests/test_continuation.param b/tests/test_continuation.param
new file mode 100644
index 0000000..a325d67
--- /dev/null
+++ b/tests/test_continuation.param
@@ -0,0 +1,36 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% parameters for program test_continuation                                %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%   discretisation parameters:	                     	      %%%%%
+NX = 10;            	          % space step.
+FEM_TYPE = 'FEM_PK(1,1)';  % P1 for segments
+INTEGRATION = 'IM_GAUSS1D(3)'; % Gauss-Legendre integration on the
+                               % segment of order 3
+
+%%%%%   continuation parameters:	                     	      %%%%%
+LAMBDA0 = 0.;		% initial value of the parameter lambda
+DIRECTION = 1.;		% direction of the continuation
+NBSTEP = 100;		% number of the continuation steps
+
+MAXITER = 5;		% maximum iterations of the Newton correction
+THR_ITER = 4;		% threshold for the number of iterations for
+			% increasing the step length
+RESIDUAL = 1E-6;     	% residual
+DIFFERENCE = 1E-9;	% difference of two forthcoming iteratives
+ANGLE = 0.993; 		% cosine of the angle between tangents at
+			% two forthcoming points
+
+H_INIT = 1E-3;		% initial step length
+H_MAX = 2E-1;		% maximal step length
+H_MIN = 1E-5;		% minimal step length
+H_INC = 1.3;		% scale factor for increasing the step length
+H_DEC = 0.5;		% scale factor for decreasing the step length
+
+EPSILON = 1E-8;		% spacing for finite differences
+RESIDUAL_SOLVE = 1E-7;	% initial residual
+
+
+%%%%%   saving and output parameters                                  %%%%%
+ROOTFILENAME = 'continuation';     % Root of data files.
+NOISY = 2;
diff --git a/tests/test_int_set.cc b/tests/test_int_set.cc
old mode 100755
new mode 100644
index 204b461..6b7134e
--- a/tests/test_int_set.cc
+++ b/tests/test_int_set.cc
@@ -1,25 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/dal_bit_vector.h"
 #include <deque>
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 typedef size_t size_type;
 
 bool quick = false;
diff --git a/tests/test_int_set.pl b/tests/test_int_set.pl
old mode 100755
new mode 100644
index 1a734e5..83b3cb5
--- a/tests/test_int_set.pl
+++ b/tests/test_int_set.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/test_interpolated_fem.cc b/tests/test_interpolated_fem.cc
index 51447fc..f48337b 100644
--- a/tests/test_interpolated_fem.cc
+++ b/tests/test_interpolated_fem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 /***************************************************************************/
 /*                                                                         */
 /*  Test the interpolated fem method.                                      */
@@ -30,6 +30,8 @@
 #include "gmm/gmm.h"
 #include "getfem/getfem_interpolated_fem.h"
 #include "getfem/getfem_mesh_fem_sum.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 using bgeot::base_vector;
 using bgeot::base_small_vector;
diff --git a/tests/test_interpolated_fem.pl b/tests/test_interpolated_fem.pl
old mode 100755
new mode 100644
index 6905e03..31d3b5d
--- a/tests/test_interpolated_fem.pl
+++ b/tests/test_interpolated_fem.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/test_interpolation.cc b/tests/test_interpolation.cc
index 72efd75..55b5afe 100644
--- a/tests/test_interpolation.cc
+++ b/tests/test_interpolation.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/getfem_export.h"
 #include "getfem/getfem_export.h"
 #include "getfem/getfem_regular_meshes.h"
@@ -26,7 +26,8 @@
 #endif
 #include <unistd.h>
 #include <iomanip>
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 using getfem::scalar_type;
 using getfem::size_type;
diff --git a/tests/test_interpolation.pl b/tests/test_interpolation.pl
index 862b970..ee3cb9e 100755
--- a/tests/test_interpolation.pl
+++ b/tests/test_interpolation.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/test_kdtree.cc b/tests/test_kdtree.cc
old mode 100755
new mode 100644
index c6a86d9..6482494
--- a/tests/test_kdtree.cc
+++ b/tests/test_kdtree.cc
@@ -1,26 +1,28 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/bgeot_kdtree.h"
 #include "getfem/bgeot_kdtree.h"
 #include "getfem/dal_bit_vector.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using bgeot::base_node;
 using bgeot::size_type;
 using bgeot::dim_type;
diff --git a/tests/test_kdtree.pl b/tests/test_kdtree.pl
index 6447aec..2d064eb 100755
--- a/tests/test_kdtree.pl
+++ b/tests/test_kdtree.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/test_large_sliding_contact.cc b/tests/test_large_sliding_contact.cc
new file mode 100644
index 0000000..ff4e628
--- /dev/null
+++ b/tests/test_large_sliding_contact.cc
@@ -0,0 +1,448 @@
+/*===========================================================================
+ 
+ Copyright (C) 2012-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
+
+/**
+ * Large sliding contact.
+ *
+ * This program is used to check that getfem++ is working. This is also 
+ * a good example of use of Getfem++.
+ */
+
+
+#include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
+#include "getfem/getfem_export.h"   /* export functions (save solution in a file)  */
+#include "getfem/getfem_import.h"
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_contact_and_friction_integral.h"
+#include "getfem/getfem_contact_and_friction_common.h"
+#include "getfem/getfem_model_solvers.h"
+#include "gmm/gmm.h"
+#include <fstream>
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+/* some Getfem++ types that we will be using */
+using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
+using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
+using bgeot::scalar_type; /* = double */
+using bgeot::size_type;   /* = unsigned long */
+using bgeot::short_type;
+using bgeot::dim_type;
+using bgeot::base_matrix; /* small dense matrix. */
+
+/* definition of some matrix/vector types. 
+ * default types of getfem_model_solvers.h
+ */
+typedef getfem::modeling_standard_sparse_vector sparse_vector;
+typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
+typedef getfem::modeling_standard_plain_vector  plain_vector;
+
+
+
+
+
+base_small_vector normal_vect(base_matrix A, base_small_vector n0) {
+  base_small_vector n = n0;
+  gmm::lu_inverse(A);
+  gmm::mult(gmm::transposed(A), n0, n);
+  n /= gmm::vect_norm2(n);
+  return n;
+}
+
+
+
+base_small_vector grad_normal_vect(base_matrix A, base_small_vector n0, base_matrix Dir) {
+
+  base_small_vector d = n0, d2 = n0;
+  base_small_vector n = normal_vect(A, n0);
+
+  gmm::lu_inverse(A);
+  gmm::mult(gmm::transposed(Dir), n, d);
+  gmm::mult(gmm::transposed(A), gmm::scaled(d, -1.), d2);
+  gmm::add(d2, gmm::scaled(n, -gmm::vect_sp(d2, n)), d);
+  return d;
+}
+
+
+void grad_normal_test(void) {
+
+  size_type N = 3;
+  base_small_vector n0(N), grad1(N), grad2(N);
+  base_matrix dir(N, N), x(N, N);
+  scalar_type EPS = 1E-8;
+  
+  
+  for (size_type i = 0; i < 1000; ++i) {
+    // The normal vector n is not supposed to be unitary
+    gmm::fill_random(x); gmm::fill_random(dir); gmm::fill_random(n0);
+    
+    
+    base_matrix xe = x;
+    gmm::add(gmm::scaled(dir, EPS), xe);
+    
+    base_small_vector n1 = normal_vect(x, n0);
+    base_small_vector n2 = normal_vect(xe, n0);
+    grad1 = (n2-n1)/EPS;
+    grad2 = grad_normal_vect(x, n0, dir);
+    
+    scalar_type err = gmm::vect_norm2(grad1 - grad2);
+
+    // cout << "grad1 = " << grad1 << "grad2 = " << grad2 << endl;
+    // cout << "test " << i << " err = " << err << endl; getchar();
+    GMM_ASSERT1(err < 4e-6, "Erroneous gradient of normal vector ");
+  }
+}
+
+
+
+
+// Test the validity of the two gradients of the De Saxce's projection
+void De_Saxce_projection_test(void) {
+
+  size_type N = 3;
+  base_small_vector x(N), n(N), dir(N), grad1(N), grad2(N);
+  base_matrix g(N, N);
+  scalar_type f, EPS = 1E-8;
+  
+  
+  for (size_type i = 0; i < 1000; ++i) {
+    // The normal vector n is not supposed to be unitary
+    gmm::fill_random(x); gmm::fill_random(dir); gmm::fill_random(n);
+    f = gmm::random();
+    
+    base_small_vector xx = x, xxe = x;
+    base_small_vector ne = n + dir*EPS;
+    
+    getfem::De_Saxce_projection(xx, n, f);
+    getfem::De_Saxce_projection(xxe, ne, f);
+    grad1 = (xxe-xx)/EPS;
+    getfem::De_Saxce_projection_gradn(x, n, f, g);
+    gmm::mult(g, dir, grad2);
+    
+    scalar_type err = gmm::vect_norm2(grad1 - grad2);
+    GMM_ASSERT1(err < 1e-6, "Erroneous gradient of De Saxcé projection "
+		"with respect to the normal vector"); 
+    
+    xx = x; xxe = x + dir*EPS;
+    getfem::De_Saxce_projection(xx, n, f);
+    getfem::De_Saxce_projection(xxe, n, f);
+    grad1 = (xxe-xx)/EPS;
+    getfem::De_Saxce_projection_grad(x, n, f, g);
+    gmm::mult(g, dir, grad2);
+    err = gmm::vect_norm2(grad1 - grad2);
+    GMM_ASSERT1(err < 1e-6, "Erroneous gradient of De Saxcé projection");
+  }
+}
+
+
+
+/*
+ * structure for the friction problem
+ */
+struct contact_problem {
+
+  enum {
+    DIRICHLET_BOUNDARY, CONTACT_BOUNDARY1, CONTACT_BOUNDARY2
+  };
+  getfem::mesh mesh1, mesh2;  /* the mesh */
+  getfem::mesh_im  mim1, mim2; /* integration methods.                       */
+  getfem::mesh_fem mf_u1, mf_u2; /* main mesh_fems.                          */
+  getfem::mesh_fem mf_lambda1, mf_lambda2; /* mesh_fems for multipliers.     */
+  getfem::mesh_fem mf_rhs1, mf_rhs2;   /* mesh_fems for the right hand side. */
+  scalar_type lambda, mu;    /* Lamé coefficients.                           */
+  scalar_type friction_coef; /* friction coefficient.                        */
+  scalar_type R;           /* Augmentation parameter.                        */
+
+  scalar_type residual;      /* max residual for the iterative solvers       */
+  size_type N, noisy;
+
+  std::string datafilename, INTEGRATION;
+  bgeot::md_param PARAM;
+
+  void solve(void);
+  void init(void);
+  contact_problem(void) : mim1(mesh1), mim2(mesh2), mf_u1(mesh1), mf_u2(mesh2), mf_lambda1(mesh1), mf_lambda2(mesh2), mf_rhs1(mesh1), mf_rhs2(mesh2) {}
+};
+
+/* Read parameters from the .param file, build the mesh, set finite element
+ * and integration methods and selects the boundaries.
+ */
+void contact_problem::init(void) {
+  std::string FEM_TYPE  = PARAM.string_value("FEM_TYPE","FEM name");
+  std::string MULT_FEM_TYPE  = PARAM.string_value("MULT_FEM_TYPE",
+						  "FEM name for multipliers");
+  INTEGRATION = PARAM.string_value("INTEGRATION","Name of integration method");
+  cout << "FEM_TYPE="  << FEM_TYPE << "\n";
+  cout << "MULT_FEM_TYPE="  << MULT_FEM_TYPE << "\n";
+  cout << "INTEGRATION=" << INTEGRATION << "\n";
+
+  std::string meshname1
+    (PARAM.string_value("MESHNAME1", "Name of file for the first mesh"));
+
+  getfem::import_mesh(meshname1, mesh1);
+  N = mesh1.dim();
+ 
+  std::string meshname2
+    (PARAM.string_value("MESHNAME2", "Name of file for the second mesh"));
+
+  getfem::import_mesh(meshname2, mesh2);
+  GMM_ASSERT1(N == mesh2.dim(), "Meshes of incompatible dimensions");;
+
+  datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
+
+  residual = PARAM.real_value("RESIDUAL");
+  R = PARAM.real_value("R", "Augmentation parameter");
+  if (residual == 0.) residual = 1e-10;
+
+  mu = PARAM.real_value("MU", "Lamé coefficient mu");
+  lambda = PARAM.real_value("LAMBDA", "Lamé coefficient lambda");
+  friction_coef = PARAM.real_value("FRICTION_COEF", "Friction coefficient");
+ 
+  noisy = (PARAM.int_value("NOISY", "verbosity of iterative methods") != 0);
+  
+  mf_u1.set_qdim(dim_type(N));
+  mf_u2.set_qdim(dim_type(N));
+  mf_lambda1.set_qdim(dim_type(N));
+  mf_lambda2.set_qdim(dim_type(N));
+
+  /* set the finite element on the mf_u */
+  getfem::pfem pf_u = getfem::fem_descriptor(FEM_TYPE);
+  getfem::pfem pf_lambda = getfem::fem_descriptor(MULT_FEM_TYPE);
+  getfem::pintegration_method ppi = 
+    getfem::int_method_descriptor(INTEGRATION);
+
+  mim1.set_integration_method(mesh1.convex_index(), ppi);
+  mim2.set_integration_method(mesh2.convex_index(), ppi);
+  mf_u1.set_finite_element(mesh1.convex_index(), pf_u);
+  mf_u2.set_finite_element(mesh2.convex_index(), pf_u);
+  mf_lambda1.set_finite_element(mesh1.convex_index(), pf_lambda);
+  mf_lambda2.set_finite_element(mesh2.convex_index(), pf_lambda);
+
+  /* set the finite element on mf_rhs (same as mf_u is DATA_FEM_TYPE is
+     not used in the .param file */
+  std::string data_fem_name = PARAM.string_value("DATA_FEM_TYPE");
+  if (data_fem_name.size() == 0) {
+    if (!pf_u->is_lagrange()) {
+      GMM_ASSERT1(false, "You are using a non-lagrange FEM. "
+		  << "In that case you need to set "
+		  << "DATA_FEM_TYPE in the .param file");
+    }
+    mf_rhs1.set_finite_element(mesh1.convex_index(), pf_u);
+    mf_rhs2.set_finite_element(mesh2.convex_index(), pf_u);
+  } else {
+    mf_rhs1.set_finite_element(mesh1.convex_index(), 
+			       getfem::fem_descriptor(data_fem_name));
+    mf_rhs2.set_finite_element(mesh2.convex_index(), 
+			       getfem::fem_descriptor(data_fem_name));
+  }
+  
+  getfem::mesh_region border_faces1;
+  getfem::outer_faces_of_mesh(mesh1, border_faces1);
+  for (getfem::mr_visitor i(border_faces1); !i.finished(); ++i)
+    mesh1.region(CONTACT_BOUNDARY1).add(i.cv(), i.f());
+
+  getfem::mesh_region border_faces2;
+  getfem::outer_faces_of_mesh(mesh2, border_faces2);
+  for (getfem::mr_visitor i(border_faces2); !i.finished(); ++i)
+    mesh2.region(CONTACT_BOUNDARY2).add(i.cv(), i.f());
+
+  dal::bit_vector dol1 = mf_lambda1.basic_dof_on_region(CONTACT_BOUNDARY1);
+  mf_lambda1.reduce_to_basic_dof(dol1);
+  dal::bit_vector dol2 = mf_lambda2.basic_dof_on_region(CONTACT_BOUNDARY2);
+  mf_lambda2.reduce_to_basic_dof(dol2);
+}
+
+
+
+void test_tangent_matrix(getfem::model &md) {
+
+  size_type nbdof = md.nb_dof();
+  scalar_type EPS = 1E-6;
+  scalar_type errmax = scalar_type(0);
+  size_type NN = 5;
+  scalar_type scale = 0.0001;
+
+
+  if (md.is_linear()) cout << "Non relevant test" << endl;
+  else {
+    std::vector<scalar_type> U(nbdof), DIR(nbdof);
+    std::vector<scalar_type> D1(nbdof), D2(nbdof), Ddiff(nbdof);
+    for (size_type i = 0; i < NN; ++i) {
+      gmm::fill_random(U); gmm::scale(U, scale);
+      gmm::fill_random(DIR); gmm::scale(DIR, scale);
+      md.to_variables(U);
+      md.assembly(getfem::model::BUILD_ALL);
+      gmm::copy(md.real_rhs(), D2);
+      gmm::mult(md.real_tangent_matrix(), DIR, D1);
+      gmm::add(gmm::scaled(DIR, EPS), U);
+      md.to_variables(U);
+      md.assembly(getfem::model::BUILD_RHS);
+      gmm::add(gmm::scaled(md.real_rhs(), -scalar_type(1)), D2);
+      gmm::scale(D2, scalar_type(1)/EPS);
+      scalar_type err = gmm::vect_dist2(D1, D2);
+      scalar_type ratio = 0;
+      for (size_type j = 0; j < nbdof; ++j) {
+	scalar_type r = (D1[j] - D2[j]) / (gmm::abs(D1[j]) + 1E-10);
+	ratio = std::max(ratio, r);
+	if (r > 0.01) {
+	  cout << "WARNING, ratio " << r << " j = " << j << " D1 = "
+	       << D1[j] << " D2 = " << D2[j] << " D1[j-1] = " << D1[j-1]
+	       << " D1[j+1] = " << D1[j+1] << endl; // getchar();
+	}
+      }
+      
+
+      gmm::add(gmm::scaled(D1, -1.), D2, Ddiff);
+      gmm::clean(Ddiff, 1E-9); // à enlever ?
+      // cout << "Ddiff = " << Ddiff << endl;
+      // cout << "norminf(Ddiff) = " << gmm::vect_norminf(Ddiff) << endl;
+      // cout << "D1 = " << gmm::sub_vector(D1, gmm::sub_interval(0, 300)) << endl;
+      // cout << "D2 = " << gmm::sub_vector(D2, gmm::sub_interval(0, 300)) << endl;
+      // cout << "norm(D1) = " << gmm::vect_norm2(D1)
+      //   << " norm(D2) = " << gmm::vect_norm2(D2) << endl;
+      // cout << "Max ratio " << ratio << endl;
+      // cout << "Error at step " << i << " : " << err << endl; // getchar();
+      GMM_ASSERT1(err < 1e-6, "Erroneous tangent matrix");
+      errmax = std::max(err, errmax);
+    }
+  }
+}
+
+
+
+
+
+/**************************************************************************/
+/*  Model.                                                                */
+/**************************************************************************/
+
+base_small_vector vol_f(const base_node &x) {
+  int N = x.size();
+  base_small_vector res(N); res[N-1] = -1.0;
+  return res;
+}
+
+void contact_problem::solve(void) {
+  cout << "Number of dof for u: " << mf_u1.nb_dof() + mf_u2.nb_dof() << endl;
+
+  getfem::model model;
+  std::vector<scalar_type> F;
+
+  bool two_bodies = false;
+
+  // Main unknowns of the problem.
+  if (two_bodies) model.add_fem_variable("u1", mf_u1);
+  model.add_fem_variable("u2", mf_u2);
+  if (two_bodies) model.add_fem_variable("lambda1", mf_lambda1);
+  model.add_fem_variable("lambda2", mf_lambda2);
+  
+  gmm::resize(F, mf_rhs1.nb_dof() * N);
+  getfem::interpolation_function(mf_rhs1, F, vol_f);
+  model.add_initialized_fem_data("VolumicData1", mf_rhs1, F);
+  if (two_bodies)
+    getfem::add_source_term_brick(model, mim1, "u1", "VolumicData1");
+  gmm::resize(F, mf_rhs2.nb_dof() * N);
+  getfem::interpolation_function(mf_rhs2, F, vol_f);
+  model.add_initialized_fem_data("VolumicData2", mf_rhs2, F);
+  getfem::add_source_term_brick(model, mim2, "u2", "VolumicData2");
+
+
+  // Pointwise constraints for frictionless problems
+  GMM_ASSERT1(N == 2, "Pointwises constraints have to be adapted for 3D");
+  std::vector<scalar_type> cpoints(N);
+  cpoints[0] = 0.0; cpoints[1] = 0.1;
+  std::vector<scalar_type> cunitv(N);
+  cunitv[0] = 1.0; cunitv[1] = 0.0;
+  model.add_initialized_fixed_size_data("cpoints1", cpoints);
+  model.add_initialized_fixed_size_data("cunitv1", cunitv);
+  if (two_bodies)
+    getfem::add_pointwise_constraints_with_multipliers
+      (model, "u1", "cpoints1", "cunitv1");
+  cpoints[0] = 0.0; cpoints[1] = 0.0;
+  model.add_initialized_fixed_size_data("cpoints2", cpoints);
+  model.add_initialized_fixed_size_data("cunitv2", cunitv);
+  getfem::add_pointwise_constraints_with_multipliers
+    (model, "u2", "cpoints2", "cunitv2");
+  
+  
+  // Linearized elasticity bricks.
+  model.add_initialized_scalar_data("lambda", lambda);
+  model.add_initialized_scalar_data("mu", mu);
+  if (two_bodies)
+    getfem::add_isotropic_linearized_elasticity_brick
+      (model, mim1, "u1", "lambda", "mu");
+  getfem::add_isotropic_linearized_elasticity_brick
+    (model, mim2, "u2", "lambda", "mu");
+  
+  cout << "Number of dof of the model: " << model.nb_dof() << endl;
+
+  // Contact brick.
+  model.add_initialized_scalar_data("r", R);
+  model.add_initialized_scalar_data("f", friction_coef);
+  size_type indb = add_integral_large_sliding_contact_brick
+    (model, mim2, "u2", "lambda2", "r", "f", CONTACT_BOUNDARY2);
+
+  if (two_bodies) 
+    getfem::add_boundary_to_large_sliding_contact_brick
+      (model, indb, mim1, "u1", "lambda1", CONTACT_BOUNDARY1);
+  
+  getfem::add_rigid_obstacle_to_large_sliding_contact_brick(model, indb, "y");
+
+
+  test_tangent_matrix(model);
+
+
+  gmm::iteration iter(residual, 1, 40000);
+  getfem::standard_solve(model, iter);
+  
+//   gmm::col_matrix<gmm::wsvector<double> > T(model.nb_dof(), model.nb_dof());
+//   gmm::copy(model.real_tangent_matrix(), T);
+//   gmm::clean(T, 1E-10);
+//   cout << T << endl;
+
+}
+
+
+
+
+
+  
+/**************************************************************************/
+/*  main program.                                                         */
+/**************************************************************************/
+
+int main(int argc, char *argv[]) {
+
+
+  GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
+  // FE_ENABLE_EXCEPT;        // Enable floating point exception for Nan.
+
+  De_Saxce_projection_test();
+  grad_normal_test();
+
+  contact_problem p;
+  p.PARAM.read_command_line(argc, argv);
+  p.init();
+  p.solve();
+
+  return 0; 
+}
diff --git a/tests/test_large_sliding_contact.param b/tests/test_large_sliding_contact.param
new file mode 100644
index 0000000..4450a56
--- /dev/null
+++ b/tests/test_large_sliding_contact.param
@@ -0,0 +1,40 @@
+% -*- matlab -*- (enables emacs matlab mode)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% parameters for program dynamic Coulomb friction problem                 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+N = 2;
+%%%%% pde parameters :	        				      %%%%%
+MU = 7700;	        % Lamé coefficient.
+LAMBDA = 11500;   	% Lamé coefficient.
+R = 1;                  % Augmentation parameter
+FRICTION_COEF = 0.1;    % Friction coefficient.
+
+NOISY = 1;
+
+
+if (N == 2)
+  MESHNAME1='meshes/disc_with_a_hole.mesh';
+  MESHNAME2='structured:GT="GT_PK(2,1)";ORG=[-0.5,0];SIZES=[1,0.1];NSUBDIV=[20,2]';
+  FEM_TYPE = 'FEM_PK(2, 2)';      % Main FEM
+  MULT_FEM_TYPE = 'FEM_PK(2, 1)'; % FEM for multipiers
+  DATA_FEM_TYPE = 'FEM_PK(2, 2)'; % must be defined for non-Lagrangian main FEM
+  INTEGRATION = 'IM_TRIANGLE(4)'; % Quadrature rule
+end;
+
+if (N == 3)
+  error('to be completed');
+  FEM_TYPE = 'FEM_PK(3, 2)';      % Main FEM
+  MULT_FEM_TYPE = 'FEM_PK(3, 1)'; % FEM for multipiers
+  DATA_FEM_TYPE = 'FEM_PK(3, 2)'; % must be defined for non-Lagrangian main FEM
+  INTEGRATION = 'IM_TETRAHEDRON(4)'; % Quadrature rule
+end;
+
+
+
+%%%%%   saving parameters                                             %%%%%
+ROOTFILENAME = 'dynamic_friction';     % Root of data files.
+DX_EXPORT = 1; % export solution to an OpenDX file ?
+DT_EXPORT = 0.001; % Time step for the export
+COMPARE = 1;  % Convergence test to be done or not
+REFROOTNAME = 'mixed_dynamic_friction_ref';
diff --git a/tests/test_large_sliding_contact.pl b/tests/test_large_sliding_contact.pl
new file mode 100644
index 0000000..e5648a8
--- /dev/null
+++ b/tests/test_large_sliding_contact.pl
@@ -0,0 +1,67 @@
+# Copyright (C) 2001-2012 Yves Renard
+#
+# This file is a part of GETFEM++
+#
+# Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+# under  the  terms  of the  GNU  Lesser General Public License as published
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
+# License and GCC Runtime Library Exception for more details.
+# You  should  have received a copy of the GNU Lesser General Public License
+# along  with  this program;  if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
+
+$srcdir = "$ENV{srcdir}";
+$bin_dir = "$srcdir/../bin";
+$tmp = `$bin_dir/createmp elas.param`;
+
+sub catch { `rm -f $tmp`; exit(1); }
+$SIG{INT} = 'catch';
+
+open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
+print TMPF <<""
+N = 2;
+MU = 7700;	        % Lamé coefficient.
+LAMBDA = 11500;   	% Lamé coefficient.
+R = 1;                  % Augmentation parameter
+FRICTION_COEF = 0.1;    % Friction coefficient.
+NOISY = 1;
+if (N == 2)
+  MESHNAME1='meshes/disc_with_a_hole.mesh';
+  MESHNAME2='structured:GT="GT_PK(2,1)";ORG=[-0.5,0];SIZES=[1,0.1];NSUBDIV=[20,2]';
+  FEM_TYPE = 'FEM_PK(2, 2)';      % Main FEM
+  MULT_FEM_TYPE = 'FEM_PK(2, 1)'; % FEM for multipiers
+  DATA_FEM_TYPE = 'FEM_PK(2, 2)'; % must be defined for non-Lagrangian main FEM
+  INTEGRATION = 'IM_TRIANGLE(4)'; % Quadrature rule
+end;
+ROOTFILENAME = 'large_sliding_contact';     % Root of data files.
+
+;
+
+close(TMPF);
+
+
+
+
+
+$er = 0;
+open F, "./test_large_sliding_contact $tmp 2>&1 |" or die;
+while (<F>) {
+  # print $_;
+  if ($_ =~ /error has been detected/)
+  {
+    $er = 1;
+    print " =============================================================\n";
+    print $_, <F>;
+  }
+}
+close(F); if ($?) { exit(1); }
+if ($er == 1) { exit(1); }
+
+
diff --git a/tests/test_mat_elem.cc b/tests/test_mat_elem.cc
index 8d1972f..2855e7c 100644
--- a/tests/test_mat_elem.cc
+++ b/tests/test_mat_elem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 /* *********************************************************************** */
 /*                                                                         */
 /*   Program to test the efficiency of elementary matrices computation.    */
@@ -28,6 +28,9 @@
 #include "getfem/getfem_export.h"
 #include "getfem/getfem_regular_meshes.h"
 #include "getfem/getfem_mat_elem.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 
 using bgeot::base_vector;
 using bgeot::base_small_vector;
diff --git a/tests/test_mat_elem.pl b/tests/test_mat_elem.pl
index 3bf1da9..38d5309 100755
--- a/tests/test_mat_elem.pl
+++ b/tests/test_mat_elem.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/test_mesh.cc b/tests/test_mesh.cc
index d5280a7..69072f6 100644
--- a/tests/test_mesh.cc
+++ b/tests/test_mesh.cc
@@ -1,30 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/getfem_regular_meshes.h"
 #include "getfem/bgeot_poly_composite.h"
 #include "getfem/bgeot_comma_init.h"
 #include "getfem/getfem_export.h"
 #include "getfem/bgeot_node_tab.h"
-
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using getfem::size_type;
 using getfem::base_node;
 using getfem::base_small_vector;
diff --git a/tests/test_mesh.pl b/tests/test_mesh.pl
old mode 100755
new mode 100644
index ab43067..1230c2e
--- a/tests/test_mesh.pl
+++ b/tests/test_mesh.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/test_mesh_generation.cc b/tests/test_mesh_generation.cc
old mode 100755
new mode 100644
index ca3b79a..86beb62
--- a/tests/test_mesh_generation.cc
+++ b/tests/test_mesh_generation.cc
@@ -1,27 +1,28 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/getfem_mesher.h"
 
 #include "getfem/getfem_mesher.h"
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using getfem::base_node;
 using getfem::scalar_type;
 
@@ -143,71 +144,80 @@ int main(int argc, char **argv) {
 
     getfem::mesher_ball D22(base_node(0.,0.,20.),20.);
 
-
-
-    
+    getfem::mesher_rectangle D23_1(base_node(0.,1.), base_node(20.0, 10.0));
+    getfem::mesher_rectangle D23_2(base_node(1.,0.), base_node(19.0, 1.0));
+    getfem::mesher_ball D23_3(getfem::base_node(1.0,1.0),1.0);
+    getfem::mesher_ball D23_4(getfem::base_node(19.0,1.0),1.0);
+    getfem::mesher_union D23(D23_1, D23_2, D23_3, D23_4);
 
 
     getfem::mesher_signed_distance *dist = &D0;
     switch (opt) {
-      case 0: dist = &D0; break; /* disk */
-      case 1: {
-	getfem::scalar_type z = sqrt(4 - 1.5*1.5);
-	fixed.push_back(base_node(0,z));
-	fixed.push_back(base_node(0,-z));
+    case 0: dist = &D0; break; /* disk */
+    case 1: {
+      getfem::scalar_type z = sqrt(4 - 1.5*1.5);
+      fixed.push_back(base_node(0,z));
+      fixed.push_back(base_node(0,-z));
+    }
+    case 2: dist = &D2; break; /* union of 2 disks */
+    case 3: dist = &D3; break; /* cube */
+    case 4: dist = &D4; break; /* cylinder */
+    case 5: dist = &D5; break; /* ball */
+    case 6: dist = &D6; break; /* union of 2 balls */
+    case 7: dist = &D7; break; /* union of 3 balls */
+    case 8: dist = &D8; break; /* union of 3 disks */
+    case 9: dist = &D9; break; /* union of 3 half balls */
+    case 10: dist = &D10;      /* disk r=20 with fixed points */
+      fixed.push_back(getfem::base_node(0.,0.));
+      fixed.push_back(getfem::base_node(0.,20.));
+      fixed.push_back(getfem::base_node(-20.,20.));
+      fixed.push_back(getfem::base_node(20.,20.));
+      fixed.push_back(getfem::base_node(0.,40.));
+      dist = &D10; 
+      break;
+    case 11: dist = &D11; break; /* half-balls */
+    case 12: dist = &D12; break; /* UFO */
+    case 13: dist = &D13; break; /* moon */
+    case 14: dist = &D14; break; /* substraction of two balls */
+    case 15: dist = &D15; break; /* torus */
+    case 16: dist = &D16; break; /* cube with a hole */
+    case 17: dist = &D17; break; /* space station */
+    case 18: dist = &D18; break;
+    case 19: dist = &D19; break;
+    case 20: {                   /* ladder */
+      scalar_type H = 20; 
+      unsigned nb_step = 3;
+      dist = new getfem::mesher_union
+	(*new getfem::mesher_rectangle(base_node(-3, -1.2, 0), base_node(-1.8, 1.2, H)), 
+	 *new getfem::mesher_rectangle(base_node(1.8, -1.2, 0), base_node(3, 1.2, H)));
+      for (unsigned i=0; i < nb_step; ++i) {
+	scalar_type z = H/nb_step/2 + i*(H/nb_step);
+	getfem::mesher_signed_distance *d = 
+	  new getfem::mesher_cylinder(base_node(-2.4, 0, z), base_node(1, 0, 0), 4.8, .8);
+	dist = new getfem::mesher_union(*dist, *d);
+      }
+    } break;
+    case 21: { /* bar with holes */
+      scalar_type H=20;
+      unsigned nb_holes = 4;
+      dist = new getfem::mesher_rectangle(base_node(-2, -1, 0), 
+					  base_node(+2, +1, H));
+      for (unsigned i=0; i < nb_holes; ++i) {
+	scalar_type z = H/nb_holes/2 + i*(H/nb_holes);
+	getfem::mesher_signed_distance *d = 
+	  new getfem::mesher_cylinder(base_node(0, -20, z), 
+				      base_node(0, 1, 0), 40, .7);
+	dist = new getfem::mesher_setminus(*dist, *d);
       }
-      case 2: dist = &D2; break; /* union of 2 disks */
-      case 3: dist = &D3; break; /* cube */
-      case 4: dist = &D4; break; /* cylinder */
-      case 5: dist = &D5; break; /* ball */
-      case 6: dist = &D6; break; /* union of 2 balls */
-      case 7: dist = &D7; break; /* union of 3 balls */
-      case 8: dist = &D8; break; /* union of 3 disks */
-      case 9: dist = &D9; break; /* union of 3 half balls */
-      case 10: dist = &D10;      /* disk r=20 with fixed points */
-	fixed.push_back(getfem::base_node(0.,0.));
-	fixed.push_back(getfem::base_node(0.,20.));
-	fixed.push_back(getfem::base_node(-20.,20.));
-	fixed.push_back(getfem::base_node(20.,20.));
-	fixed.push_back(getfem::base_node(0.,40.));
-	dist = &D10; 
-	break;
-      case 11: dist = &D11; break; /* half-balls */
-      case 12: dist = &D12; break; /* UFO */
-      case 13: dist = &D13; break; /* moon */
-      case 14: dist = &D14; break; /* substraction of two balls */
-      case 15: dist = &D15; break; /* torus */
-      case 16: dist = &D16; break; /* cube with a hole */
-      case 17: dist = &D17; break; /* space station */
-      case 18: dist = &D18; break;
-      case 19: dist = &D19; break;
-      case 20: {                   /* ladder */
-	scalar_type H = 20; 
-	unsigned nb_step = 3;
-	dist = new getfem::mesher_union
-	  (*new getfem::mesher_rectangle(base_node(-3, -1.2, 0), base_node(-1.8, 1.2, H)), 
-	   *new getfem::mesher_rectangle(base_node(1.8, -1.2, 0), base_node(3, 1.2, H)));
-	for (unsigned i=0; i < nb_step; ++i) {
-	  scalar_type z = H/nb_step/2 + i*(H/nb_step);
-	  getfem::mesher_signed_distance *d = 
-	    new getfem::mesher_cylinder(base_node(-2.4, 0, z), base_node(1, 0, 0), 4.8, .8);
-	  dist = new getfem::mesher_union(*dist, *d);
-	}
-      } break;
-      case 21: { /* bar with holes */
-	scalar_type H=20;
-	unsigned nb_holes = 4;
-	dist = new getfem::mesher_rectangle(base_node(-2, -1, 0), 
-					    base_node(+2, +1, H));
-	for (unsigned i=0; i < nb_holes; ++i) {
-	  scalar_type z = H/nb_holes/2 + i*(H/nb_holes);
-	  getfem::mesher_signed_distance *d = 
-	    new getfem::mesher_cylinder(base_node(0, -20, z), 
-					base_node(0, 1, 0), 40, .7);
-	  dist = new getfem::mesher_setminus(*dist, *d);
-	}
-      } break;
+    } break;
     case 22: dist = &D22; break; /* ball for test of radius 20. */
+    case 23:                   /* rectangle with rounded corners */
+      fixed.push_back(getfem::base_node(0.,1.));
+      fixed.push_back(getfem::base_node(1.,0.));
+      fixed.push_back(getfem::base_node(19.,0.));
+      fixed.push_back(getfem::base_node(20.,1.));
+      dist = &D23;
+      break;
     }
     getfem::build_mesh(m, *dist, h, fixed, K, 2, max_iter, prefind);
     cerr << "You can view the result with\n mayavi -d totoq.vtk -m BandedSurfaceMap\n";
diff --git a/tests/test_mesh_im_level_set.cc b/tests/test_mesh_im_level_set.cc
old mode 100755
new mode 100644
index 7b772a6..0a864e1
--- a/tests/test_mesh_im_level_set.cc
+++ b/tests/test_mesh_im_level_set.cc
@@ -1,25 +1,28 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/getfem_mesh_im_level_set.h"
 #include "getfem/getfem_mesh_im_level_set.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/tests/test_mesh_im_level_set.pl b/tests/test_mesh_im_level_set.pl
old mode 100755
new mode 100644
index 5b2d0c8..9f4376b
--- a/tests/test_mesh_im_level_set.pl
+++ b/tests/test_mesh_im_level_set.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/test_norm.cc b/tests/test_norm.cc
index 1e7121f..9ff0bc8 100644
--- a/tests/test_norm.cc
+++ b/tests/test_norm.cc
@@ -1,27 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/getfem_assembling.h" /* import assembly methods (and comp. of norms) */
 #include "getfem/getfem_assembling.h" /* import assembly methods (and comp. of norms) */
 #include "getfem/getfem_regular_meshes.h"
 #include "getfem/getfem_norm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small(dim < 16) vectors */
diff --git a/tests/test_norm.pl b/tests/test_norm.pl
old mode 100755
new mode 100644
index b339f56..b9ab3fa
--- a/tests/test_norm.pl
+++ b/tests/test_norm.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/test_range_basis.cc b/tests/test_range_basis.cc
index 40f21c8..8c6e7c5 100644
--- a/tests/test_range_basis.cc
+++ b/tests/test_range_basis.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**@file test_rang_basis.cc
    @brief A small test for gmm_range_basis function.
@@ -26,6 +26,8 @@
 #include "gmm/gmm.h"
 #include "getfem/getfem_assembling.h"
 #include "getfem/getfem_regular_meshes.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/tests/test_range_basis.pl b/tests/test_range_basis.pl
index 468836d..d76833b 100644
--- a/tests/test_range_basis.pl
+++ b/tests/test_range_basis.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file $tmp impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 LX = 1.0;		          % size in X.
 LY = 1.0;	                  % size in Y.
 LZ = 1.0;	                  % size in Z.
diff --git a/tests/test_rtree.cc b/tests/test_rtree.cc
index a889356..41b2416 100644
--- a/tests/test_rtree.cc
+++ b/tests/test_rtree.cc
@@ -1,26 +1,28 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/bgeot_rtree.h"
 #include "getfem/bgeot_rtree.h"
 #include "getfem/dal_bit_vector.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 using bgeot::base_node;
 using bgeot::size_type;
 using bgeot::dim_type;
diff --git a/tests/test_rtree.pl b/tests/test_rtree.pl
old mode 100755
new mode 100644
index fedb116..de0b459
--- a/tests/test_rtree.pl
+++ b/tests/test_rtree.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/test_slice.cc b/tests/test_slice.cc
old mode 100755
new mode 100644
index ac89db3..39cf311
--- a/tests/test_slice.cc
+++ b/tests/test_slice.cc
@@ -1,26 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 #include "getfem/bgeot_comma_init.h"
 #include "getfem/bgeot_comma_init.h"
 #include "getfem/getfem_mesh_slice.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 
 using getfem::size_type;
 namespace getfem {
diff --git a/tests/test_slice.pl b/tests/test_slice.pl
index 8d3c7f4..d1b7db4 100755
--- a/tests/test_slice.pl
+++ b/tests/test_slice.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/test_small_vector.cc b/tests/test_small_vector.cc
index 45b075a..eb6e0ea 100644
--- a/tests/test_small_vector.cc
+++ b/tests/test_small_vector.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 
 #ifndef DEBUG_SMALL_VECTOR
@@ -32,6 +32,9 @@
 #include "getfem/bgeot_small_vector.h"
 #include "getfem/getfem_mesh.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 bool quick = false;
 
 #ifdef GETFEM_HAVE_SYS_TIMES
diff --git a/tests/test_small_vector.pl b/tests/test_small_vector.pl
index 610fdcd..6c932f3 100755
--- a/tests/test_small_vector.pl
+++ b/tests/test_small_vector.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/test_tree_sorted.cc b/tests/test_tree_sorted.cc
index 565a8ef..6ad9134 100644
--- a/tests/test_tree_sorted.cc
+++ b/tests/test_tree_sorted.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2002-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 #include "gmm/gmm_std.h"
 #ifndef GETFEM_VERIFY__
@@ -25,7 +25,8 @@
 #endif
 
 #include "getfem/dal_tree_sorted.h"
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
 
 int main(void)
 {
diff --git a/tests/test_tree_sorted.pl b/tests/test_tree_sorted.pl
old mode 100755
new mode 100644
index 7970012..57a9c83
--- a/tests/test_tree_sorted.pl
+++ b/tests/test_tree_sorted.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/tests/wave_equation.cc b/tests/wave_equation.cc
index 5e31828..b14a8e6 100644
--- a/tests/wave_equation.cc
+++ b/tests/wave_equation.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2009 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
-// under  the  terms  of the  GNU  Lesser General Public License as published
-// by  the  Free Software Foundation;  either version 2.1 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 Lesser General Public
-// License for more details.
-// You  should  have received a copy of the GNU Lesser General Public License
-// along  with  this program;  if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+ 
+ Copyright (C) 2009-2012 Yves Renard.
+ 
+ This file is a part of GETFEM++
+ 
+ Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+===========================================================================*/
 
 /**@file wave_equation.cc
    @brief Transient wave equation.
@@ -36,6 +36,9 @@
 #include "getfem/getfem_regular_meshes.h"
 #include "gmm/gmm.h"
 
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
 /* some Getfem++ types that we will be using */
 using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
 using bgeot::base_node; /* geometrical nodes (derived from base_small_vector)*/
diff --git a/tests/wave_equation.pl b/tests/wave_equation.pl
index 1c45c28..1ac0b27 100644
--- a/tests/wave_equation.pl
+++ b/tests/wave_equation.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
 #
 # This file is a part of GETFEM++
 #
 # Getfem++  is  free software;  you  can  redistribute  it  and/or modify it
 # under  the  terms  of the  GNU  Lesser General Public License as published
-# by  the  Free Software Foundation;  either version 2.1 of the License,  or
-# (at your option) any later version.
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
 # You  should  have received a copy of the GNU Lesser General Public License
 # along  with  this program;  if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
 $SIG{INT} = 'catch';
 
 open(TMPF, ">$tmp") or die "Open file $tmp impossible : $!\n";
-print TMPF <<
+print TMPF <<""
 LX = 1.0;		          % size in X.
 LY = 1.0;	                  % size in Y.
 LZ = 1.0;	                  % size in Z.

-- 
Packaging for getfem++



More information about the debian-science-commits mailing list